@vibgrate/cli 2026.708.3 → 2026.709.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/engine/attest.ts","../src/commands/attest-actions.ts","../src/util/output.ts","../src/util/logo.ts","../src/util/progress.ts","../src/cli-options.ts","../src/commands/build.ts","../src/commands/status.ts","../src/commands/util.ts","../src/commands/ask.ts","../src/commands/embed.ts","../src/commands/ambiguity.ts","../src/commands/show.ts","../src/commands/path.ts","../src/commands/tree.ts","../src/commands/insights.ts","../src/commands/impact.ts","../src/commands/unknowns.ts","../src/commands/serve.ts","../src/commands/install.ts","../src/commands/share.ts","../src/commands/benchmark.ts","../src/commands/tests.ts","../src/commands/facts.ts","../src/commands/guide.ts","../src/commands/why.ts","../src/commands/bisect.ts","../src/engine/standards.ts","../src/commands/drift.ts","../src/commands/models.ts","../src/commands/savings.ts","../src/commands/lib.ts","../src/commands/export.ts","../src/commands/bundle.ts","../src/reporting/commands/init.ts","../src/reporting/utils/ingest-id-output.ts","../src/reporting/ai-context-prompt.ts","../src/reporting/commands/scan.ts","../src/reporting/utils/scan-freshness.ts","../src/reporting/planning/contracts.ts","../src/reporting/planning/usage.ts","../src/reporting/utils/fix-plan.ts","../src/reporting/planning/render.ts","../src/reporting/planning/expected-drift.ts","../src/reporting/planning/apply.ts","../src/reporting/commands/fix.ts","../src/reporting/formatters/text.ts","../src/reporting/formatters/markdown.ts","../src/reporting/commands/report.ts","../src/reporting/utils/open-url.ts","../src/reporting/commands/login.ts","../src/reporting/utils/shell.ts","../src/reporting/commands/logout.ts","../src/reporting/utils/update-check.ts","../src/reporting/commands/update.ts","../src/reporting/commands/vex.ts","../src/reporting/commands/sbom.ts","../src/cli.ts"],"names":["fs","crypto2","resolve","chalk","path2","rel","fs2","path3","fs3","path4","out","pad","fs4","path5","next","mb","fs6","c","path","now","parseDsn","fs9","path8","path9","fs10","Command","path10","vibgrateDir","pathExists","path11","teal","mint","path12","fs11","walk","path13","SKIP_DIRS","escapeRegExp","fs13","path15","existsSync","join","readFileSync","path16","path17","spawn","path18","path19","os2","path20","readline2","semver","execSync","path21","json","path22","fs15","path23"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAoBO,IAAM,iBAAA,GAAoB,8BAAA;AAC1B,IAAM,sBAAA,GAAyB,iCAAA;AAC/B,IAAM,iBAAA,GAAoB,gDAAA;AAuC1B,SAAS,UAAU,KAAA,EAAoC;AAC5D,EAAA,OAAc,kBAAW,QAAQ,CAAA,CAAE,OAAO,KAAK,CAAA,CAAE,OAAO,KAAK,CAAA;AAC/D;AAMO,SAAS,mBAAmB,KAAA,EAAwB;AACzD,EAAA,MAAM,EAAE,WAAA,EAAa,KAAA,EAAO,GAAG,MAAK,GAAI,KAAA;AACxC,EAAA,OAAO,SAAA,CAAU,YAAA,CAAa,IAAI,CAAC,CAAA;AACrC;AAGO,SAAS,MAAM,SAAA,EAAqC;AACzD,EAAA,OAAO,SAAA,CAAU,SAAA,CAAU,MAAA,CAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,CAAC,CAAA,CAAE,KAAA,CAAM,GAAG,EAAE,CAAA;AACjF;AAQO,SAAS,cAAA,CAAe,KAAA,EAAgB,KAAA,GAAwB,EAAC,EAAoB;AAC1F,EAAA,MAAM,WAAA,GAAc,mBAAmB,KAAK,CAAA;AAC5C,EAAA,MAAM,SAAA,GAA6B;AAAA,IACjC,IAAA,EAAM,EAAE,IAAA,EAAM,IAAA,EAAM,SAAS,OAAA,EAAQ;AAAA,IACrC,SAAA,EAAW,MAAM,UAAA,CAAW,SAAA;AAAA,IAC5B,UAAA,EAAY,MAAM,UAAA,CAAW,UAAA;AAAA,IAC7B,WAAA;AAAA,IACA,MAAA,EAAQ,MAAM,IAAA,CAAK;AAAA,GACrB;AACA,EAAA,IAAI,KAAA,CAAM,MAAA,EAAQ,SAAA,CAAU,MAAA,GAAS,KAAA,CAAM,MAAA;AAC3C,EAAA,IAAI,KAAA,CAAM,UAAA,EAAY,SAAA,CAAU,UAAA,GAAa,KAAA,CAAM,UAAA;AACnD,EAAA,IAAI,KAAA,CAAM,SAAA,EAAW,SAAA,CAAU,SAAA,GAAY,KAAA,CAAM,SAAA;AACjD,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,sBAAA;AAAA,IACP,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,YAAA,EAAc,QAAQ,EAAE,MAAA,EAAQ,WAAA,EAAY,EAAG,CAAA;AAAA,IACjE,aAAA,EAAe,iBAAA;AAAA,IACf;AAAA,GACF;AACF;AAQO,SAAS,OAAA,CAAQ,aAAqB,IAAA,EAA0B;AACrE,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,WAAA,EAAa,MAAM,CAAA;AACjD,EAAA,MAAM,SAAS,MAAA,CAAO,IAAA;AAAA,IACpB,UAAU,SAAA,CAAU,MAAM,IAAI,WAAW,CAAA,CAAA,EAAI,KAAK,MAAM,CAAA,CAAA,CAAA;AAAA,IACxD;AAAA,GACF;AACA,EAAA,OAAO,MAAA,CAAO,OAAO,CAAC,MAAA,EAAQ,OAAO,IAAA,CAAK,IAAI,CAAC,CAAC,CAAA;AAClD;AAGO,SAAS,aAAA,CAAc,WAA4B,UAAA,EAA4C;AACpG,EAAA,MAAM,OAAO,MAAA,CAAO,IAAA,CAAK,KAAK,SAAA,CAAU,SAAS,GAAG,MAAM,CAAA;AAC1D,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,iBAAA,EAAmB,IAAI,CAAA;AAC3C,EAAA,MAAM,GAAA,GAAa,MAAA,CAAA,IAAA,CAAK,IAAA,EAAM,GAAA,EAAK,UAAU,CAAA;AAE7C,EAAA,MAAM,SAAA,GAAmB,MAAA,CAAA,eAAA,CAAgB,UAAA,CAAW,MAAA,CAAO,EAAE,IAAA,EAAM,OAAA,EAAS,MAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,QAAA,EAAU,CAAA;AACvG,EAAA,OAAO;AAAA,IACL,WAAA,EAAa,iBAAA;AAAA,IACb,OAAA,EAAS,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA;AAAA,IAC/B,UAAA,EAAY;AAAA,MACV;AAAA,QACE,KAAA,EAAO,MAAM,SAAS,CAAA;AAAA,QACtB,GAAA,EAAK,GAAA,CAAI,QAAA,CAAS,QAAQ,CAAA;AAAA,QAC1B,SAAA,EAAW,SAAA,CAAU,MAAA,CAAO,EAAE,IAAA,EAAM,QAAQ,MAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,QAAA;AAAS;AACxE;AACF,GACF;AACF;AAsBA,SAAS,cAAA,GAAkC;AACzC,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,EAAA;AAAA,IACP,SAAS,EAAC;AAAA,IACV,aAAA,EAAe,EAAA;AAAA,IACf,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,EAAE,IAAA,EAAM,IAAA,EAAM,SAAS,EAAA,EAAG;AAAA,MAChC,UAAA,EAAY,EAAA;AAAA,MACZ,WAAA,EAAa,EAAA;AAAA,MACb,MAAA,EAAQ,EAAE,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,CAAA;AAAE;AAChE,GACF;AACF;AAEA,SAAS,aAAa,MAAA,EAA8B;AAClD,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,QAAA;AAAA,IACR,cAAA,EAAgB,KAAA;AAAA,IAChB,YAAA,EAAc,KAAA;AAAA,IACd,KAAA,EAAO,EAAA;AAAA,IACP,MAAA;AAAA,IACA,WAAW,cAAA;AAAe,GAC5B;AACF;AAEO,SAAS,cAAA,CACd,GAAA,EACA,IAAA,GAAmD,EAAC,EACtC;AAGd,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI,SAAA;AACJ,EAAA,IAAI;AACF,IAAA,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,GAAA,EAAK,OAAA,IAAW,IAAI,QAAQ,CAAA;AAC/C,IAAA,MAAM,SAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,MAAM,CAAC,CAAA;AAC/C,IAAA,IAAI,CAAC,MAAA,IAAU,OAAO,WAAW,QAAA,IAAY,CAAC,OAAO,SAAA,EAAW;AAC9D,MAAA,MAAM,IAAI,MAAM,mBAAmB,CAAA;AAAA,IACrC;AACA,IAAA,SAAA,GAAY,MAAA;AAAA,EACd,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,aAAa,+DAA+D,CAAA;AAAA,EACrF;AAEA,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,CAAI,WAAA,EAAa,IAAI,CAAA;AACzC,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,UAAA,GAAa,CAAC,CAAA;AAC/B,EAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,IAAS,EAAA;AAC7B,EAAA,MAAM,GAAA,GAAM,IAAA,EAAM,GAAA,GAAM,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAA,GAAI,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AAExE,EAAA,IAAI,cAAA,GAAiB,KAAA;AACrB,EAAA,IAAI,YAAA,GAAe,KAAA;AACnB,EAAA,IAAI;AACF,IAAA,IAAI,IAAA,IAAQ,IAAI,MAAA,EAAQ;AACtB,MAAA,IAAI,KAAK,YAAA,EAAc;AACrB,QAAA,MAAM,SAAA,GAAmB,MAAA,CAAA,eAAA,CAAgB,IAAA,CAAK,YAAY,CAAA;AAC1D,QAAA,cAAA,GAAwB,MAAA,CAAA,MAAA,CAAO,IAAA,EAAM,GAAA,EAAK,SAAA,EAAW,GAAG,CAAA;AACxD,QAAA,YAAA,GAAe,cAAA;AAAA,MACjB,CAAA,MAAA,IAAW,KAAK,SAAA,EAAW;AACzB,QAAA,MAAM,WAAA,GAAqB,MAAA,CAAA,eAAA,CAAgB,IAAA,CAAK,SAAS,CAAA;AACzD,QAAA,cAAA,GAAwB,MAAA,CAAA,MAAA,CAAO,IAAA,EAAM,GAAA,EAAK,WAAA,EAAa,GAAG,CAAA;AAAA,MAC5D;AAAA,IACF;AAAA,EACF,CAAA,CAAA,MAAQ;AAEN,IAAA,cAAA,GAAiB,KAAA;AACjB,IAAA,YAAA,GAAe,KAAA;AAAA,EACjB;AAEA,EAAA,MAAM,aAAA,GAAgB,KAAK,KAAA,GACvB,kBAAA,CAAmB,KAAK,KAAK,CAAA,KAAM,SAAA,CAAU,SAAA,CAAU,WAAA,GACvD,MAAA;AACJ,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,SAAA,CAAU,MAAA,EAAQ,KAAA;AAE1C,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,IAAA,MAAA,GAAS,QAAA;AACT,IAAA,MAAA,GAAS,OAAO,+BAAA,GAAkC,0BAAA;AAAA,EACpD,CAAA,MAAA,IAAW,kBAAkB,KAAA,EAAO;AAClC,IAAA,MAAA,GAAS,QAAA;AACT,IAAA,MAAA,GAAS,kFAAA;AAAA,EACX,CAAA,MAAA,IAAW,YAAA,IAAgB,CAAC,KAAA,EAAO;AACjC,IAAA,MAAA,GAAS,UAAA;AACT,IAAA,MAAA,GACE,aAAA,KAAkB,OACd,uDAAA,GACA,iCAAA;AAAA,EACR,CAAA,MAAO;AACL,IAAA,MAAA,GAAS,iBAAA;AACT,IAAA,MAAA,GAAS,QACL,uEAAA,GACA,4EAAA;AAAA,EACN;AAEA,EAAA,OAAO,EAAE,QAAQ,cAAA,EAAgB,YAAA,EAAc,eAAe,KAAA,EAAO,KAAA,EAAO,QAAQ,SAAA,EAAU;AAChG;AASO,SAAS,eAAA,GAAoC;AAClD,EAAA,MAAM,EAAE,SAAA,EAAW,UAAA,EAAW,GAAW,2BAAoB,SAAS,CAAA;AACtE,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,UAAA,CAAW,MAAA,CAAO,EAAE,IAAA,EAAM,SAAS,MAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,QAAA,EAAS;AAAA,IACzE,SAAA,EAAW,SAAA,CAAU,MAAA,CAAO,EAAE,IAAA,EAAM,QAAQ,MAAA,EAAQ,KAAA,EAAO,CAAA,CAAE,QAAA,EAAS;AAAA,IACtE,KAAA,EAAO,MAAM,SAAS;AAAA,GACxB;AACF;AAGO,SAAS,kBAAkB,GAAA,EAA2B;AAC3D,EAAA,OAAO,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,GAAG,CAAC;AAAA,CAAA;AAC/B;AAEO,SAAS,cAAc,IAAA,EAA4B;AACxD,EAAA,MAAM,OAAO,IAAA,CAAK,IAAA,GAAO,KAAA,CAAM,IAAI,EAAE,CAAC,CAAA;AACtC,EAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AACxB;;;AChQA,IAAM,mBAAA,GAAsB,0BAAA;AAC5B,IAAM,WAAA,GAAc,gBAAA;AAoBpB,eAAsB,oBAAA,CACpB,IAAA,EACA,KAAA,EACA,IAAA,EACsD;AACtD,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,GAAA,IAAO,OAAA,CAAQ,GAAA,CAAI,aAAA;AAC5C,EAAA,MAAM,OAAA,GAAU,cAAmB,IAAA,CAAA,OAAA,CAAQ,WAAW,IAAS,IAAA,CAAA,IAAA,CAAK,IAAA,EAAM,aAAa,WAAW,CAAA;AAElG,EAAA,IAAI,cAAA;AACJ,EAAA,IAAI,CAAIA,GAAA,CAAA,UAAA,CAAW,OAAO,CAAA,EAAG;AAC3B,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,MAAM,IAAI,QAAA,CAAS,CAAA,uBAAA,EAA0B,WAAW,CAAA,CAAA,EAAI,SAAS,WAAW,CAAA;AAAA,IAClF;AAGA,IAAA,MAAM,KAAK,eAAA,EAAgB;AAC3B,IAAGA,cAAe,IAAA,CAAA,OAAA,CAAQ,OAAO,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AACvD,IAAGA,kBAAc,OAAA,EAAS,EAAA,CAAG,YAAY,EAAE,IAAA,EAAM,KAAO,CAAA;AACxD,IAAGA,GAAA,CAAA,aAAA,CAAc,CAAA,EAAG,OAAO,CAAA,IAAA,CAAA,EAAQ,GAAG,SAAS,CAAA;AAC/C,IAAA,cAAA,GAAiB,OAAA;AACjB,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN,uCAAuC,GAAA,CAAI,IAAA,EAAM,OAAO,CAAC,CAAA,QAAA,EAAW,GAAG,KAAK,CAAA,4EAAA;AAAA,KAE9E;AAAA,EACF;AAEA,EAAA,IAAI,UAAA;AACJ,EAAA,IAAI;AACF,IAAA,UAAA,GAAoBC,MAAA,CAAA,gBAAA,CAAoBD,GAAA,CAAA,YAAA,CAAa,OAAA,EAAS,MAAM,CAAC,CAAA;AAAA,EACvE,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,IAAI,SAAS,CAAA,2CAAA,EAA8C,GAAA,CAAI,MAAM,OAAO,CAAC,CAAA,CAAA,EAAI,QAAA,CAAS,WAAW,CAAA;AAAA,EAC7G;AACA,EAAA,IAAI,UAAA,CAAW,sBAAsB,SAAA,EAAW;AAC9C,IAAA,MAAM,IAAI,QAAA;AAAA,MACR,CAAA,oCAAA,EAAuC,IAAI,IAAA,EAAM,OAAO,CAAC,CAAA,IAAA,EAAO,UAAA,CAAW,qBAAqB,SAAS,CAAA,CAAA;AAAA,MACzG,QAAA,CAAS;AAAA,KACX;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GAAS,MAAM,aAAA,CAAc,IAAI,CAAA;AACvC,EAAA,MAAM,SAAA,GAAY,cAAA,CAAe,KAAA,EAAO,EAAE,QAAQ,CAAA;AAClD,EAAA,MAAM,QAAA,GAAW,aAAA,CAAc,SAAA,EAAW,UAAU,CAAA;AACpD,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,GACZ,IAAA,CAAA,OAAA,CAAQ,IAAA,CAAK,WAAW,CAAA,GACxB,IAAA,CAAA,IAAA,CAAK,IAAA,EAAM,WAAA,EAAa,mBAAmB,CAAA;AACpD,EAAGA,cAAe,IAAA,CAAA,OAAA,CAAQ,OAAO,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AACvD,EAAGA,GAAA,CAAA,aAAA,CAAc,OAAA,EAAS,iBAAA,CAAkB,QAAQ,CAAC,CAAA;AAErD,EAAA,OAAO;AAAA,IACL,OAAA,EAAS;AAAA,MACP,KAAA,EAAO,QAAA,CAAS,UAAA,CAAW,CAAC,GAAG,KAAA,IAAS,EAAA;AAAA,MACxC,WAAA,EAAa,UAAU,SAAA,CAAU,WAAA;AAAA,MACjC,WAAA,EAAa,SAAA,CAAU,SAAA,CAAU,SAAA,EAAW,WAAA;AAAA,MAC5C,MAAA;AAAA,MACA,GAAA,EAAK,GAAA,CAAI,IAAA,EAAM,OAAO,CAAA;AAAA,MACtB,cAAA,EAAgB,cAAA,GAAiB,GAAA,CAAI,IAAA,EAAM,cAAc,CAAA,GAAI;AAAA,KAC/D;AAAA,IACA;AAAA,GACF;AACF;AAmBO,SAAS,sBAAA,CAAuB,MAAc,IAAA,EAAuC;AAC1F,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,WAAA,GACf,IAAA,CAAA,OAAA,CAAQ,IAAA,CAAK,WAAW,CAAA,GACxB,IAAA,CAAA,IAAA,CAAK,IAAA,EAAM,WAAA,EAAa,mBAAmB,CAAA;AACpD,EAAA,IAAI,CAAIA,GAAA,CAAA,UAAA,CAAW,UAAU,CAAA,EAAG;AAC9B,IAAA,IAAI,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,GAAA,EAAK;AAChC,MAAA,MAAM,IAAI,QAAA;AAAA,QACR,CAAA,kBAAA,EAAqB,GAAA,CAAI,IAAA,EAAM,UAAU,CAAC,CAAA,2CAAA,CAAA;AAAA,QAC1C,QAAA,CAAS;AAAA,OACX;AAAA,IACF;AACA,IAAA,OAAO,EAAE,UAAA,EAAY,OAAA,EAAS,IAAA,EAAK;AAAA,EACrC;AACA,EAAA,MAAM,QAAA,GAAW,aAAA,CAAiBA,GAAA,CAAA,YAAA,CAAa,UAAA,EAAY,MAAM,CAAC,CAAA;AAClE,EAAA,MAAM,YAAA,GAAe,KAAK,GAAA,GAASA,GAAA,CAAA,YAAA,CAAkB,aAAQ,IAAA,CAAK,GAAG,CAAA,EAAG,MAAM,CAAA,GAAI,MAAA;AAClF,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,IAAI,CAAA,IAAK,MAAA;AACjC,EAAA,OAAO,EAAE,UAAA,EAAY,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ,cAAA,CAAe,QAAA,EAAU,EAAE,YAAA,EAAc,KAAA,EAAO,CAAA,EAAE;AACjG;AAEA,eAAe,cAAc,IAAA,EAA+C;AAC1E,EAAA,MAAM,GAAA,GAAM,MAAM,WAAA,CAAY,IAAI,CAAA;AAClC,EAAA,IAAI,CAAC,KAAK,OAAO,MAAA;AACjB,EAAA,MAAM,KAAA,GAAQ,MAAM,gBAAA,CAAiB,IAAI,CAAA;AACzC,EAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,IAAI,CAAA;AACnC,EAAA,OAAO,EAAE,GAAA,EAAK,QAAA,EAAU,GAAA,CAAI,KAAA,CAAM,GAAG,CAAC,CAAA,EAAG,MAAA,EAAQ,KAAA,EAAO,UAAU,IAAA,GAAO,IAAA,GAAO,KAAA,KAAU,KAAA,GAAQ,QAAQ,MAAA,EAAU;AACtH;AAGA,SAAS,UAAU,IAAA,EAA2C;AAC5D,EAAA,OAAO,IAAI,OAAA,CAAQ,CAACE,SAAAA,KAAY;AAC9B,IAAA,QAAA;AAAA,MACE,KAAA;AAAA,MACA,CAAC,WAAA,EAAa,cAAA,EAAgB,MAAM,CAAA;AAAA,MACpC,EAAE,KAAK,IAAA,EAAM,OAAA,EAAS,KAAM,WAAA,EAAa,IAAA,EAAM,UAAU,MAAA,EAAO;AAAA,MAChE,CAAC,KAAK,MAAA,KAAW;AACf,QAAA,IAAI,GAAA,EAAK,OAAOA,SAAAA,CAAQ,MAAS,CAAA;AACjC,QAAA,MAAM,IAAA,GAAO,MAAA,CAAO,MAAM,CAAA,CAAE,IAAA,EAAK;AACjC,QAAAA,SAAAA,CAAQ,IAAA,IAAQ,IAAA,KAAS,MAAA,GAAS,OAAO,MAAS,CAAA;AAAA,MACpD;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AACH;AAEA,SAAS,GAAA,CAAI,MAAc,CAAA,EAAmB;AAC5C,EAAA,MAAM,CAAA,GAAS,IAAA,CAAA,QAAA,CAAS,IAAA,EAAM,CAAC,CAAA;AAC/B,EAAA,OAAO,CAAA,CAAE,UAAA,CAAW,IAAI,CAAA,GAAI,CAAA,GAAI,CAAA;AAClC;ACnKO,SAAS,IAAA,CAAK,UAAU,EAAA,EAAU;AACvC,EAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,OAAO;AAAA,CAAI,CAAA;AACrC;AAEO,SAAS,IAAI,OAAA,EAAuB;AACzC,EAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,OAAO;AAAA,CAAI,CAAA;AACrC;AAEO,SAAS,KAAK,KAAA,EAAsB;AACzC,EAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,EAAG,IAAA,CAAK,UAAU,KAAA,EAAO,IAAA,EAAM,CAAC,CAAC;AAAA,CAAI,CAAA;AAC5D;AAEO,IAAM,CAAA,GAAIC,MAAA;AAGV,SAAS,YAAA,GAAqB;AACnC,EAAAA,MAAA,CAAM,KAAA,GAAQ,CAAA;AAChB;;;ACTA,IAAM,OAAO,CAAC,CAAA,KAAsB,EAAE,GAAA,CAAI,SAAS,EAAE,CAAC,CAAA;AACtD,IAAM,OAAO,CAAC,CAAA,KAAsB,EAAE,GAAA,CAAI,SAAS,EAAE,CAAC,CAAA;AAGtD,IAAM,KAAA,GAAQ;AAAA,EACZ,KAAA,GAAQ,IAAA,CAAK,kDAAU,CAAA,GAAI,KAAK,QAAG,CAAA;AAAA,EACnC,IAAA,GAAO,EAAE,GAAA,CAAI,QAAG,IAAI,IAAA,CAAK,QAAG,CAAA,GAAI,GAAA,GAAM,IAAA,CAAK,QAAG,IAAI,IAAA,GAAO,IAAA,CAAK,QAAG,CAAA,GAAI,GAAA,GAAM,KAAK,QAAG,CAAA,GAAI,CAAA,CAAE,GAAA,CAAI,QAAG,CAAA;AAAA,EAChG,OAAO,CAAA,CAAE,GAAA,CAAI,QAAG,CAAA,GAAI,IAAA,CAAK,QAAG,CAAA,GAAI,IAAA,GAAO,EAAE,GAAA,CAAI,cAAI,IAAI,IAAA,GAAO,IAAA,CAAK,QAAG,CAAA,GAAI,CAAA,CAAE,IAAI,QAAG,CAAA;AAAA,EACjF,KAAA,GAAQ,KAAK,kDAAU;AACzB,CAAA;AAOO,SAAS,UAAU,IAAA,EAAyB;AACjD,EAAA,OAAO;AAAA,IACL,EAAA;AAAA,IACA,CAAA,EAAA,EAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,IACb,CAAA,EAAA,EAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,IACb,CAAA,EAAA,EAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,IACb,CAAA,EAAA,EAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,IACb,KAAK,CAAA,CAAE,IAAA,CAAK,KAAA,CAAM,UAAU,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,OAAO,CAAC,KAAK,CAAA,CAAE,GAAA,CAAI,CAAA,oCAAA,EAAiC,OAAO,EAAE,CAAC,CAAA,CAAA;AAAA,IACpG,GAAI,IAAA,GAAO,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,IAAI,IAAI,CAAC,CAAA,CAAE,CAAA,GAAI,EAAC;AAAA,IACnC;AAAA,GACF;AACF;AAGO,SAAS,UAAU,IAAA,EAAqB;AAC7C,EAAA,IAAI,CAAC,OAAA,CAAQ,MAAA,CAAO,KAAA,EAAO;AAC3B,EAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,EAAG,SAAA,CAAU,IAAI,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC;AAAA,CAAI,CAAA;AACxD;;;ACtCA,IAAM,MAAA,GAAS,CAAC,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAA,EAAK,QAAG,CAAA;AAChE,IAAM,KAAA,GAAQ,EAAA;AAEd,SAAS,YAAY,EAAA,EAAoB;AACvC,EAAA,MAAM,CAAA,GAAI,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,EAAA,GAAK,GAAI,CAAC,CAAA;AAC3C,EAAA,IAAI,CAAA,GAAI,EAAA,EAAI,OAAO,CAAA,EAAG,CAAC,CAAA,CAAA,CAAA;AACvB,EAAA,OAAO,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,EAAE,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,CAAA,GAAI,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,CAAA;AACjE;AAMO,SAAS,kBAAA,CACd,KAAA,EACA,IAAA,EACA,KAAA,EACA,WACA,KAAA,EACQ;AACR,EAAA,MAAM,KAAA,GAAQ,QAAQ,CAAA,GAAI,IAAA,CAAK,IAAI,IAAA,GAAO,KAAA,EAAO,CAAC,CAAA,GAAI,CAAA;AACtD,EAAA,MAAM,GAAA,GAAM,gBAAA,CAAiB,KAAA,EAAO,KAAK,CAAA;AACzC,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,GAAG,CAAA;AAClC,EAAA,MAAM,IAAA,GAAO,CAAA,CAAE,IAAA,CAAK,MAAA,CAAA,CAAS,KAAA,GAAQ,MAAA,CAAO,MAAA,GAAU,MAAA,CAAO,MAAA,IAAU,MAAA,CAAO,MAAM,CAAC,CAAA;AACrF,EAAA,MAAM,GAAA,GAAM,KAAA,GAAQ,IAAA,IAAQ,KAAA,GAAQ,CAAA,GAAI,CAAA,UAAA,EAAU,WAAA,CAAa,SAAA,GAAY,KAAA,IAAU,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA,CAAA,GAAK,EAAA;AACrG,EAAA,OAAO,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,CAAA,CAAE,IAAA,CAAK,CAAA,EAAG,GAAG,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,MAAA,EAAM,WAAA,CAAY,SAAS,CAAC,CAAA,EAAG,GAAG,CAAA,CAAE,CAAC,CAAA,CAAA;AACtH;AAGO,IAAM,cAAN,MAAkB;AAAA,EAKvB,YAA6B,KAAA,EAAe;AAAf,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAAA,EAAgB;AAAA,EAAhB,KAAA;AAAA,EAJZ,KAAA,GAAQ,KAAK,GAAA,EAAI;AAAA,EAC1B,KAAA,GAAQ,CAAA;AAAA,EACC,GAAA,GAAM,OAAA,CAAQ,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA;AAAA,EAInD,MAAA,CAAO,MAAc,KAAA,EAAqB;AACxC,IAAA,IAAI,CAAC,KAAK,GAAA,EAAK;AACf,IAAA,MAAM,IAAA,GAAO,kBAAA,CAAmB,IAAA,CAAK,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,IAAA,CAAK,GAAA,EAAI,GAAI,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,CAAA;AAC9F,IAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,SAAA,EAAY,IAAI,CAAA,CAAE,CAAA;AAAA,EACzC;AAAA;AAAA,EAGA,KAAK,OAAA,EAAwB;AAC3B,IAAA,IAAI,CAAC,KAAK,GAAA,EAAK;AACf,IAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,WAAW,CAAA;AAChC,IAAA,IAAI,OAAA,EAAS,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,GAAG,OAAO;AAAA,CAAI,CAAA;AAAA,EAClD;AACF,CAAA;;;AChCO,SAAS,mBAAmB,GAAA,EAAuB;AACxD,EAAA,OAAO,IACJ,MAAA,CAAO,iBAAA,EAAmB,4BAAA,EAA8B,GAAG,EAC3D,MAAA,CAAO,QAAA,EAAU,wDAAwD,CAAA,CACzE,OAAO,QAAA,EAAU,iCAAiC,CAAA,CAClD,MAAA,CAAO,wBAAwB,0DAA0D,CAAA,CACzF,MAAA,CAAO,gBAAA,EAAkB,uBAAuB,CAAA,CAChD,MAAA,CAAO,YAAA,EAAc,6CAA6C,EAClE,MAAA,CAAO,SAAA,EAAW,iDAAiD,CAAA,CACnE,OAAO,SAAA,EAAW,0BAA0B,CAAA,CAC5C,MAAA,CAAO,cAAc,wBAAwB,CAAA;AAClD;AAGO,SAAS,WAAW,GAAA,EAA0B;AACnD,EAAA,MAAM,CAAA,GAAI,IAAI,IAAA,EAA8B;AAC5C,EAAA,OAAO;AAAA,IACL,KAAK,CAAA,CAAE,GAAA;AAAA,IACP,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,aAAa,CAAA,CAAE,WAAA;AAAA,IACf,OAAO,CAAA,CAAE,KAAA;AAAA,IACT,OAAA,EAAS,EAAE,KAAA,KAAU,KAAA;AAAA,IACrB,OAAO,CAAA,CAAE,KAAA;AAAA,IACT,OAAO,CAAA,CAAE;AAAA,GACX;AACF;;;ACXO,SAAS,cAAc,OAAA,EAAwB;AACpD,EAAA,MAAM,MAAM,OAAA,CACT,OAAA,CAAQ,OAAO,CAAA,CACf,WAAA,CAAY,0DAA0D,CAAA,CACtE,QAAA,CAAS,YAAA,EAAc,mDAAmD,EAC1E,MAAA,CAAO,gBAAA,EAAkB,sCAAsC,CAAA,CAC/D,MAAA,CAAO,oBAAoB,gCAAA,EAAkC,OAAA,EAAS,EAAE,EACxE,MAAA,CAAO,WAAA,EAAa,yBAAyB,CAAA,CAC7C,MAAA,CAAO,eAAe,8BAA8B,CAAA,CACpD,OAAO,aAAA,EAAe,mCAAmC,EACzD,MAAA,CAAO,YAAA,EAAc,oCAAoC,CAAA,CACzD,MAAA,CAAO,iBAAiB,8EAA8E,CAAA,CACtG,MAAA,CAAO,WAAA,EAAa,uBAAuB,CAAA,CAC3C,MAAA,CAAO,YAAY,gEAAgE,CAAA,CACnF,OAAO,WAAA,EAAa,iEAAiE,CAAA,CACrF,MAAA,CAAO,oBAAoB,yDAAyD,CAAA,CACpF,OAAO,qBAAA,EAAuB,gDAAgD,EAC9E,MAAA,CAAO,UAAA,EAAY,gEAA2D,CAAA,CAC9E,OAAO,UAAA,EAAY,+DAA+D,EAClF,MAAA,CAAO,qBAAA,EAAuB,sEAAsE,CAAA,CACpG,MAAA,CAAO,wBAAwB,sDAAsD,CAAA,CACrF,OAAO,cAAA,EAAgB,kDAAkD,EACzE,MAAA,CAAO,eAA+B,OAAiB,IAAA,EAAoB;AAC1E,IAAA,MAAM,QAAA,CAAS,KAAA,EAAO,IAAA,EAAM,UAAA,CAAW,IAAI,CAAC,CAAA;AAAA,EAC9C,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,GAAG,CAAA;AACxB;AAEA,eAAsB,QAAA,CACpB,KAAA,EACA,IAAA,EACA,MAAA,EACe;AACf,EAAA,MAAM,IAAA,GAAYC,IAAA,CAAA,OAAA,CAAQ,MAAA,CAAO,GAAA,IAAO,GAAG,CAAA;AAI3C,EAAA,IAAI,KAAK,MAAA,EAAQ;AACf,IAAA,MAAM,WAAA,CAAY,IAAA,EAAM,IAAA,EAAM,MAAM,CAAA;AACpC,IAAA;AAAA,EACF;AAKA,EAAA,MAAM,WAAA,GAAc,CAAC,MAAA,CAAO,IAAA,IAAQ,CAAC,MAAA,CAAO,KAAA;AAC5C,EAAA,IAAI,WAAA,EAAa,SAAA,CAAeA,IAAA,CAAA,QAAA,CAAS,IAAI,KAAK,IAAI,CAAA;AACtD,EAAA,MAAM,GAAA,GAAM,cAAc,IAAI,WAAA,CAAY,EAAE,GAAA,CAAI,SAAS,CAAC,CAAA,GAAI,MAAA;AAC9D,EAAA,MAAM,OAAO,IAAA,CAAK,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,GAAI,MAAA;AAC7C,EAAA,IAAI,IAAA,KAAS,WAAc,CAAC,MAAA,CAAO,UAAU,IAAI,CAAA,IAAK,OAAO,CAAA,CAAA,EAAI;AAC/D,IAAA,MAAM,UAAA,CAAW,CAAA,wCAAA,EAA2C,IAAA,CAAK,IAAI,CAAA,EAAA,CAAI,CAAA;AAAA,EAC3E;AAEA,EAAA,MAAM,OAAO,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,MAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,GAAI,MAAA;AACrF,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,MAAM,UAAA,CAAW;AAAA,MACxB,IAAA;AAAA,MACA,KAAA,EAAO,KAAA,CAAM,MAAA,GAAS,KAAA,GAAQ,KAAA,CAAA;AAAA,MAC9B,IAAA;AAAA,MACA,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,IAAA;AAAA,MACA,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,QAAA,EAAU,KAAK,MAAA,KAAW,KAAA;AAAA,MAC1B,MAAM,OAAO,IAAA,CAAK,IAAA,KAAS,QAAA,GAAW,KAAK,IAAA,GAAO,KAAA,CAAA;AAAA,MAClD,MAAA,EAAQ,KAAK,IAAA,KAAS,KAAA;AAAA,MACtB,KAAA,EAAO,KAAK,GAAA,KAAQ,KAAA;AAAA,MACpB,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,eAAA,EAAiB,MAAM,CAAC,IAAA,EAAM,UAAU,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM,KAAK,CAAA,GAAI,KAAA,CAAA;AAAA,MAClE,aAAa,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACH,SAAS,GAAA,EAAK;AACZ,IAAA,GAAA,EAAK,IAAA,EAAK;AACV,IAAA,IAAI,GAAA,YAAe,UAAA,EAAY,MAAM,UAAA,CAAW,IAAI,OAAO,CAAA;AAG3D,IAAA,IAAI,GAAA,YAAe,oBAAoB,MAAM,IAAI,SAAS,GAAA,CAAI,OAAA,EAAS,SAAS,KAAK,CAAA;AACrF,IAAA,MAAM,GAAA;AAAA,EACR;AACA,EAAA,GAAA,EAAK,IAAA,EAAK;AAEV,EAAA,MAAM,OAAA,GAAU,cAAA,CAAe,MAAA,CAAO,KAAA,EAAO;AAAA,IAC3C,IAAA;AAAA,IACA,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,WAAW,MAAA,CAAO;AAAA,GACnB,CAAA;AAMD,EAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACjB,IAAA,aAAA,CAAc,MAAM,MAAA,CAAO,KAAA,CAAM,UAAA,CAAW,UAAA,EAAY,OAAO,SAAA,EAAW;AAAA,MACxE,IAAA;AAAA,MACA,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,KAAA,EAAO,KAAA,CAAM,MAAA,GAAS,KAAA,GAAQ,MAAA;AAAA,MAC9B,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,QAAA,EAAU,KAAK,MAAA,KAAW,KAAA;AAAA,MAC1B,MAAM,OAAO,IAAA,CAAK,IAAA,KAAS,QAAA,GAAW,KAAK,IAAA,GAAO,MAAA;AAAA,MAClD,MAAA,EAAQ,KAAK,IAAA,KAAS,KAAA;AAAA,MACtB,KAAA,EAAO,KAAK,GAAA,KAAQ,KAAA;AAAA,MACpB,aAAa,IAAA,CAAK;AAAA,KACnB,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,KAAK,MAAA,EAAQ,WAAA,CAAY,MAAA,CAAO,KAAA,EAAO,KAAK,MAAM,CAAA;AAGtD,EAAA,IAAI,WAAA;AACJ,EAAA,MAAM,gBAA0B,EAAC;AACjC,EAAA,IAAI,KAAK,MAAA,EAAQ;AACf,IAAA,MAAM,MAAA,GAAS,MAAM,oBAAA,CAAqB,IAAA,EAAM,OAAO,KAAA,EAAO;AAAA,MAC5D,KAAK,IAAA,CAAK,SAAA;AAAA,MACV,aAAa,IAAA,CAAK;AAAA,KACnB,CAAA;AACD,IAAA,WAAA,GAAc,MAAA,CAAO,OAAA;AACrB,IAAA,aAAA,CAAc,IAAA,CAAK,GAAG,MAAA,CAAO,OAAO,CAAA;AAAA,EACtC;AAEA,EAAA,IAAI,OAAO,IAAA,EAAM;AACf,IAAA,IAAA,CAAK;AAAA,MACH,EAAA,EAAI,IAAA;AAAA,MACJ,MAAA,EAAQ,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,MAAA;AAAA,MAC1B,SAAA,EAAW,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,SAAA;AAAA,MAC7B,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,YAAY,MAAA,CAAO,UAAA;AAAA,MACnB,SAAS,MAAA,CAAO,YAAA;AAAA,MAChB,KAAK,MAAA,CAAO,GAAA;AAAA,MACZ,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,SAAA,EAAW,kBAAA,CAAmB,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AAAA,MAChD,SAAA,EAAW,OAAA;AAAA,MACX,UAAA,EAAY,MAAA,CAAO,KAAA,CAAM,UAAA,CAAW,UAAA;AAAA,MACpC,SAAA,EAAW,MAAA,CAAO,KAAA,CAAM,UAAA,CAAW,SAAA;AAAA,MACnC,WAAA;AAAA,MACA,QAAA,EAAU,OAAO,MAAA,CAAO,OAAA;AAAA,MACxB,UAAU,MAAA,CAAO;AAAA,KAClB,CAAA;AACD,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,MAAA,CAAO,KAAA,CAAM,IAAA;AAChC,EAAA,MAAM,WAAA,GACJ,MAAA,CAAO,MAAA,GAAS,CAAA,GACZ,CAAA,aAAA,EAAgB,MAAA,CAAO,QAAQ,CAAA,IAAA,EAAO,MAAA,CAAO,UAAU,CAAA,gBAAA,CAAA,GACvD,CAAA,EAAG,OAAO,UAAU,CAAA,aAAA,CAAA;AAC1B,EAAA,MAAM,WAAW,MAAA,CAAO,MAAA,CAAO,OAAA,GAAU,GAAA,EAAM,QAAQ,CAAC,CAAA;AACxD,EAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,aAAA,EAAaC,IAAAA,CAAI,IAAI,CAAC,CAAA,IAAA,EAAO,OAAO,CAAA,GAAA,EAAM,WAAW,CAAA,CAAA,CAAG,CAAA;AAC5E,EAAA,IAAA;AAAA,IACE,CAAA,QAAA,EAAW,CAAA,CAAE,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA,SAAA,EAAY,CAAA,CAAE,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA,SAAA,EACpE,MAAA,CAAO,KAAK,CAAA,SAAA,EAAY,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA,IAAK,QAAG,CAAA;AAAA,GACjF;AACA,EAAA,MAAM,OAAA,GACJ,OAAO,YAAA,CAAa,aAAA,GAAgB,OAAO,YAAA,CAAa,eAAA,GAAkB,IACtE,IAAA,CAAK,KAAA;AAAA,IACF,GAAA,GAAM,OAAO,YAAA,CAAa,aAAA,IACxB,OAAO,YAAA,CAAa,aAAA,GAAgB,OAAO,YAAA,CAAa,eAAA;AAAA,GAC7D,GACA,GAAA;AAGN,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,GAAA,IAAO,MAAA,CAAO,IAAA;AACrC,EAAA,MAAM,YAAY,OAAA,GAAU,CAAA,gBAAA,EAAmB,OAAO,CAAA,CAAA,CAAA,GAAM,kBAAkB,OAAO,CAAA,CAAA,CAAA;AACrF,EAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,EAAA,EAAK,SAAS,CAAA,eAAA,EAAe,MAAA,CAAO,KAAA,CAAM,UAAA,CAAW,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,EAAE,CAAC,CAAA;AACrF,EAAA,IAAI,OAAO,GAAA,EAAK;AACd,IAAA,MAAM,GAAA,GAAM,OAAO,GAAA,CAAI,GAAA,GAAM,IAAI,CAAA,EAAA,EAAK,MAAA,CAAO,GAAA,CAAI,GAAG,CAAA,IAAA,CAAA,GAAS,EAAA;AAC7D,IAAA,IAAA,CAAK,EAAE,GAAA,CAAI,CAAA,OAAA,EAAU,MAAA,CAAO,GAAA,CAAI,QAAQ,CAAA,sBAAA,EAAyB,MAAA,CAAO,GAAA,CAAI,KAAK,iBAAiB,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA,MAAA,EAAS,GAAG,GAAG,CAAC,CAAA;AAAA,EACpI;AACA,EAAA,IAAI,OAAO,IAAA,EAAM;AACf,IAAA,IAAA,CAAK,EAAE,GAAA,CAAI,CAAA,QAAA,EAAW,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,oBAAA,EAAuB,MAAA,CAAO,IAAA,CAAK,IAAA,IAAQ,OAAO,CAAA,EAAA,EAAK,MAAA,CAAO,IAAA,CAAK,SAAS,QAAQ,CAAC,CAAA;AAAA,EACjI;AACA,EAAA,MAAM,EAAA,GAAK,kBAAA,CAAmB,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AAChD,EAAA,IAAA;AAAA,IACE,CAAA,CAAE,GAAA;AAAA,MACA,CAAA,kCAAA,EAAkC,GAAG,QAAQ,CAAA,mBAAA,EAAmB,GAAG,cAAc,CAAC,CAAA,eAAA,EAAe,EAAA,CAAG,QAAQ,CAAA;AAAA;AAC9G,GACF;AACA,EAAA,MAAM,YAAA,GAAe,CAAC,OAAA,CAAQ,SAAA,EAAW,QAAQ,QAAA,EAAU,OAAA,CAAQ,UAAU,CAAA,CAC1E,MAAA,CAAO,OAAO,CAAA,CACd,GAAA,CAAI,CAAC,CAAA,KAAWD,IAAA,CAAA,QAAA,CAAS,MAAM,CAAW,CAAC,CAAA,CAC3C,IAAA,CAAK,IAAI,CAAA;AACZ,EAAA,IAAA,CAAK,CAAA,SAAA,EAAO,YAAY,CAAA,CAAE,CAAA;AAC1B,EAAA,IAAI,MAAA,CAAO,SAAS,MAAA,EAAQ;AAC1B,IAAA,IAAA,CAAK,EAAE,MAAA,CAAO,CAAA,EAAA,EAAK,OAAO,QAAA,CAAS,MAAM,qDAAgD,CAAC,CAAA;AAAA,EAC5F;AACA,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,KAAA,MAAW,CAAA,IAAK,eAAe,IAAA,CAAK,CAAA,CAAE,OAAO,CAAA,EAAA,EAAK,CAAC,EAAE,CAAC,CAAA;AACtD,IAAA,IAAA;AAAA,MACE,CAAA,CAAE,GAAA;AAAA,QACA,CAAA,sBAAA,EAAsB,WAAA,CAAY,KAAK,CAAA,aAAA,EAAa,WAAA,CAAY,WAAA,CAAY,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,cAAA,EAAO,WAAA,CAAY,GAAG,CAAA;AAAA;AAChH,KACF;AAAA,EACF;AAEA,EAAA,mBAAA,CAAoB,MAAM,MAAA,CAAO,KAAA,EAAO,MAAA,EAAQ,IAAA,CAAK,SAAS,KAAK,CAAA;AACrE;AAQA,eAAe,WAAA,CAAY,IAAA,EAAc,IAAA,EAAoB,MAAA,EAAmC;AAC9F,EAAA,MAAM,OAAO,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,MAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,GAAI,MAAA;AACrF,EAAA,MAAM,OAAO,IAAA,CAAK,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,GAAI,MAAA;AAC7C,EAAA,MAAM,GAAA,GAAM,MAAM,iBAAA,CAAkB,EAAE,IAAA,EAAM,MAAM,OAAA,EAAS,IAAA,CAAK,OAAA,EAAS,IAAA,EAAM,CAAA;AAC/E,EAAA,MAAM,MAAA,GAAS,sBAAA,CAAuB,IAAA,EAAM,EAAE,WAAA,EAAa,KAAK,WAAA,EAAa,GAAA,EAAK,IAAA,CAAK,GAAA,EAAK,CAAA;AAC5F,EAAA,MAAM,eAAe,CAAC,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,QAAQ,MAAA,KAAW,QAAA;AAElE,EAAA,IAAI,OAAO,IAAA,EAAM;AACf,IAAA,IAAA,CAAK;AAAA,MACH,EAAA,EAAI,GAAA,CAAI,EAAA,IAAM,CAAC,YAAA;AAAA,MACf,WAAA,EAAa,EAAE,EAAA,EAAI,GAAA,CAAI,EAAA,EAAI,QAAQ,GAAA,CAAI,MAAA,EAAQ,MAAA,EAAQ,GAAA,CAAI,MAAA,EAAO;AAAA,MAClE,WAAA,EAAa,MAAA,CAAO,OAAA,GAChB,IAAA,GACA;AAAA,QACE,MAAA,EAAQ,OAAO,MAAA,EAAQ,MAAA;AAAA,QACvB,cAAA,EAAgB,OAAO,MAAA,EAAQ,cAAA;AAAA,QAC/B,YAAA,EAAc,OAAO,MAAA,EAAQ,YAAA;AAAA,QAC7B,aAAA,EAAe,OAAO,MAAA,EAAQ,aAAA;AAAA,QAC9B,KAAA,EAAO,OAAO,MAAA,EAAQ,KAAA;AAAA,QACtB,KAAA,EAAO,OAAO,MAAA,EAAQ,KAAA;AAAA,QACtB,MAAA,EAAQ,OAAO,MAAA,EAAQ;AAAA;AACzB,KACL,CAAA;AAAA,EACH,CAAA,MAAO;AACL,IAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,mBAAmB,CAAC,CAAA,MAAA,EAAWA,IAAA,CAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,EAAI,EAAG,IAAI,CAAA,IAAK,GAAG,CAAA,CAAE,CAAA;AACpF,IAAA,KAAA,MAAW,KAAA,IAAS,IAAI,MAAA,EAAQ;AAC9B,MAAA,MAAM,IAAA,GAAO,MAAM,EAAA,GAAK,CAAA,CAAE,MAAM,QAAG,CAAA,GAAI,CAAA,CAAE,GAAA,CAAI,QAAG,CAAA;AAChD,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,GAAS,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,KAAA,CAAM,MAAM,CAAA,CAAA,CAAG,CAAA,GAAI,EAAA;AAC5D,MAAA,IAAA,CAAK,KAAK,IAAI,CAAA,CAAA,EAAI,MAAM,IAAI,CAAA,EAAG,MAAM,CAAA,CAAE,CAAA;AAAA,IACzC;AACA,IAAA,IAAA,CAAK,IAAI,EAAA,GAAK,CAAA,CAAE,KAAA,CAAM,CAAA,4BAAA,EAA4B,IAAI,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,MAAA,CAAG,CAAA,GAAI,CAAA,CAAE,GAAA,CAAI,qBAAqB,CAAC,CAAA;AAC5G,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,yDAAA,CAA2D,CAAC,CAAA;AAAA,IACzE,CAAA,MAAO;AACL,MAAA,MAAM,IAAI,MAAA,CAAO,MAAA;AACjB,MAAA,MAAM,QACJ,CAAA,EAAG,MAAA,KAAW,UAAA,GACV,CAAA,CAAE,MAAM,6BAAwB,CAAA,GAChC,CAAA,EAAG,MAAA,KAAW,oBACZ,CAAA,CAAE,MAAA,CAAO,+BAA+B,CAAA,GACxC,CAAA,CAAE,IAAI,2BAAsB,CAAA;AACpC,MAAA,IAAA,CAAK,CAAA,EAAA,EAAK,KAAK,CAAA,EAAG,CAAA,EAAG,KAAA,GAAQ,CAAA,CAAE,GAAA,CAAI,CAAA,YAAA,EAAY,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,CAAE,CAAA;AAChE,MAAA,IAAA,CAAK,EAAE,GAAA,CAAI,CAAA,IAAA,EAAO,GAAG,MAAA,IAAU,EAAE,EAAE,CAAC,CAAA;AAAA,IACtC;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,IAAI,EAAA,EAAI,MAAM,IAAI,QAAA,CAAS,+BAAA,EAAiC,SAAS,iBAAiB,CAAA;AAC3F,EAAA,IAAI,cAAc,MAAM,IAAI,QAAA,CAAS,iCAAA,EAAmC,SAAS,WAAW,CAAA;AAC9F;AAYA,SAAS,mBAAA,CAAoB,IAAA,EAAc,KAAA,EAAgB,MAAA,EAAoB,IAAA,EAAqB;AAClG,EAAA,IAAI,CAAC,IAAA,IAAQ,MAAA,CAAO,QAAQ,MAAA,CAAO,KAAA,IAAS,OAAO,KAAA,EAAO;AAC1D,EAAA,IAAI,CAAC,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAC,OAAA,CAAQ,OAAO,KAAA,EAAO;AACpD,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA;AAC1B,EAAA,IAAI,CAAC,GAAA,EAAK;AACV,EAAA,MAAM,UAAU,iBAAA,EAAkB;AAClC,EAAA,MAAM,KAAA,GAAQ,aAAa,OAAO,CAAA;AAElC,EAAA,IAAI,SAAS,YAAA,CAAa,KAAA,EAAO,IAAA,EAAM,OAAO,MAAM,CAAA,EAAG;AAGvD,EAAA,MAAM,IAAA,GAAO,KAAA,GACT,CAAC,GAAA,EAAK,SAAS,IAAA,EAAM,IAAA,EAAM,MAAM,CAAA,GACjC,CAAC,GAAA,EAAK,OAAA,EAAS,IAAA,EAAM,IAAA,EAAM,QAAQ,YAAY,CAAA;AACnD,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,QAAA,EAAU,IAAA,EAAM,EAAE,QAAA,EAAU,IAAA,EAAM,KAAA,EAAO,QAAA,EAAU,CAAA;AAC/E,IAAA,KAAA,CAAM,KAAA,EAAM;AACZ,IAAA,IAAA;AAAA,MACE,CAAA,CAAE,GAAA;AAAA,QACA,QACI,gFAAA,GACA;AAAA;AACN,KACF;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAEA,SAAS,WAAA,CAAY,OAA6C,MAAA,EAAsB;AACtF,EAAA,IAAI,WAAW,GAAA,EAAK;AAClB,IAAA,GAAA,CAAI,cAAA,CAAe,KAAK,CAAA,CAAE,OAAA,EAAS,CAAA;AACnC,IAAA;AAAA,EACF;AACA,EAAA,MAAM,GAAA,GAAWA,IAAA,CAAA,OAAA,CAAQ,MAAM,CAAA,CAAE,WAAA,EAAY;AAC7C,EAAA,IAAI,OAAA;AACJ,EAAA,QAAQ,GAAA;AAAK,IACX,KAAK,OAAA;AACH,MAAA,OAAA,GAAU,eAAe,KAAK,CAAA;AAC9B,MAAA;AAAA,IACF,KAAK,KAAA;AACH,MAAA,OAAA,GAAU,aAAa,KAAK,CAAA;AAC5B,MAAA;AAAA,IACF,KAAK,OAAA;AACH,MAAA,OAAA,GAAU,WAAW,KAAK,CAAA;AAC1B,MAAA;AAAA,IACF;AACE,MAAA,MAAM,IAAI,QAAA;AAAA,QACR,CAAA,kBAAA,EAAqB,OAAO,MAAM,CAAA,6IAAA,CAAA;AAAA,QAElC,QAAA,CAAS;AAAA,OACX;AAAA;AAEJ,EAAGE,GAAA,CAAA,SAAA,CAAeF,aAAaA,IAAA,CAAA,OAAA,CAAQ,MAAM,CAAC,CAAA,EAAG,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AACpE,EAAGE,GAAA,CAAA,aAAA,CAAc,QAAQ,OAAO,CAAA;AAClC;AAEA,SAAS,OAAA,CAAQ,OAAe,IAAA,EAA0B;AACxD,EAAA,OAAO,CAAC,GAAG,IAAA,EAAM,KAAK,CAAA;AACxB;AAEA,SAASD,KAAI,IAAA,EAAsB;AACjC,EAAA,MAAM,CAAA,GAASD,IAAA,CAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,IAAO,IAAI,CAAA;AAC3C,EAAA,OAAO,CAAA,KAAM,KAAK,GAAA,GAAM,CAAA;AAC1B;ACpWO,SAAS,eAAe,OAAA,EAAwB;AACrD,EAAA,MAAM,GAAA,GAAM,QACT,OAAA,CAAQ,QAAQ,EAChB,WAAA,CAAY,yDAAyD,CAAA,CACrE,MAAA,CAAO,iBAA+B;AACrC,IAAA,MAAM,SAAA,CAAU,UAAA,CAAW,IAAI,CAAC,CAAA;AAAA,EAClC,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,GAAG,CAAA;AACxB;AAEA,eAAe,UAAU,MAAA,EAAmC;AAC1D,EAAA,MAAM,IAAA,GAAYG,IAAA,CAAA,OAAA,CAAQ,MAAA,CAAO,GAAA,IAAO,GAAG,CAAA;AAC3C,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,KAAA,IAAS,gBAAA,CAAiB,IAAI,CAAA;AACvD,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,IAAA,EAAM,SAAS,CAAA;AACvC,EAAA,MAAM,WAAcC,GAAA,CAAA,UAAA,CAAgBD,IAAA,CAAA,IAAA,CAAK,SAAS,IAAI,CAAA,EAAG,kBAAkB,CAAC,CAAA;AAO5E,EAAA,IAAI,KAAA,GAAuB,IAAA;AAC3B,EAAA,IAAI,UAAA,GAAa,KAAA;AACjB,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,MAAM,KAAA,GAAQ,eAAe,IAAI,CAAA;AACjC,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,KAAA,GAAQ,UAAA,CAAW,MAAM,KAAK,CAAA;AAC9B,MAAA,UAAA,GAAa,IAAA;AAAA,IACf,CAAA,MAAO;AACL,MAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,EAAE,IAAA,EAAM,CAAA;AAC/B,MAAA,IAAI,OAAA,GAAU,CAAA;AACd,MAAA,MAAM,aAAa,IAAI,GAAA,CAAI,KAAA,CAAM,KAAA,CAAM,OAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,MAAM,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAC,CAAA;AAC1F,MAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAI,KAAA,CAAM,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,GAAG,CAAC,CAAA;AACpD,MAAA,KAAA,MAAW,KAAK,YAAA,EAAc,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,EAAG,OAAA,EAAA;AACtD,MAAA,KAAA,MAAW,KAAK,UAAA,EAAY,IAAI,CAAC,YAAA,CAAa,GAAA,CAAI,CAAC,CAAA,EAAG,OAAA,EAAA;AACtD,MAAA,KAAA,GAAQ,OAAA;AAAA,IACV;AAAA,EACF;AAEA,EAAA,IAAI,OAAO,IAAA,EAAM;AACf,IAAA,IAAA,CAAK;AAAA,MACH,MAAWA,IAAA,CAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,EAAI,EAAG,IAAI,CAAA,IAAK,GAAA;AAAA,MAC5C,SAAA,EAAgBA,IAAA,CAAA,QAAA,CAAS,IAAA,EAAM,SAAS,CAAA;AAAA,MACxC,OAAO,KAAA,KAAU,IAAA;AAAA,MACjB,WAAA,EAAa,OAAO,WAAA,IAAe,IAAA;AAAA,MACnC,MAAA,EAAQ,KAAA,EAAO,IAAA,CAAK,MAAA,IAAU,IAAA;AAAA,MAC9B,SAAA,EAAW,KAAA,EAAO,IAAA,CAAK,SAAA,IAAa,EAAC;AAAA,MACrC,OAAA,EAAS,KAAA,EAAO,IAAA,CAAK,OAAA,IAAW,IAAA;AAAA,MAChC,QAAA,EAAU,KAAA,EAAO,UAAA,CAAW,QAAA,IAAY,EAAC;AAAA,MACzC,UAAA,EAAY,KAAA,EAAO,UAAA,CAAW,UAAA,IAAc,IAAA;AAAA,MAC5C,KAAA,EAAO,QAAA;AAAA,MACP,UAAA,EAAY,KAAA;AAAA,MACZ;AAAA,KACD,CAAA;AACD,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,oBAAA,EAAoB,CAAA,CAAE,GAAA,CAASA,IAAA,CAAA,QAAA,CAAS,IAAA,EAAM,SAAS,CAAC,CAAC,CAAA,CAAE,CAAA;AAC/E,IAAA,IAAA,CAAK,CAAA,MAAA,EAAS,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,aAAA,CAAe,CAAA;AACzC,IAAA;AAAA,EACF;AAEA,EAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,SAAWA,IAAA,CAAA,QAAA,CAAS,IAAA,EAAM,SAAS,CAAC,CAAA,CAAE,CAAA;AAC1D,EAAA,IAAA,CAAK,CAAA,YAAA,EAAe,KAAA,CAAM,WAAW,CAAA,CAAE,CAAA;AACvC,EAAA,IAAA;AAAA,IACE,CAAA,QAAA,EAAW,CAAA,CAAE,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA,QAAA,EAAW,CAAA,CAAE,IAAA;AAAA,MAC7D,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,KAAK;AAAA,KAC/B,CAAA,QAAA,EAAW,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,QAAA,EAAW,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,GAAG,KAAK,QAAG,CAAA;AAAA,GACrF;AACA,EAAA,IAAA,CAAK,CAAA,UAAA,EAAa,KAAA,CAAM,IAAA,CAAK,OAAO,CAAA,eAAA,EAAe,KAAA,CAAM,UAAA,CAAW,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,CAAA,CAAE,CAAA;AACxF,EAAA,IAAA,CAAK,WAAW,QAAA,GAAW,CAAA,CAAE,MAAM,MAAM,CAAA,GAAI,EAAE,GAAA,CAAI,MAAM,CAAC,CAAA,aAAA,EAAa,MAAM,UAAA,CAAW,UAAA,CAAW,MAAM,CAAA,EAAG,EAAE,CAAC,CAAA,MAAA,CAAG,CAAA;AAClH,EAAA,IAAI,KAAA,IAAS,QAAQ,CAAA,EAAG;AACtB,IAAA,IAAA,CAAK,CAAA,CAAE,MAAA,CAAO,CAAA,EAAA,EAAK,KAAK,CAAA,6CAAA,EAA2C,EAAE,IAAA,CAAK,IAAI,CAAC,CAAA,WAAA,CAAa,CAAC,CAAA;AAAA,EAC/F,CAAA,MAAO;AACL,IAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,cAAc,CAAC,CAAA;AAAA,EAC5B;AACA,EAAA,IAAI,WAAA,CAAY,IAAI,CAAA,EAAG;AAGzB;ACzFO,SAAS,OAAO,MAAA,EAA4B;AACjD,EAAA,OAAYE,IAAA,CAAA,OAAA,CAAQ,MAAA,CAAO,GAAA,IAAO,GAAG,CAAA;AACvC;AAGO,SAAS,aAAa,MAAA,EAAsD;AACjF,EAAA,MAAM,IAAA,GAAO,OAAO,MAAM,CAAA;AAC1B,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,IAAA,EAAM,MAAA,CAAO,KAAK,CAAA;AAC1C,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,QAAA;AAAA,MACR,uDACG,MAAA,CAAO,KAAA,GAAQ,CAAA,YAAA,EAAe,MAAA,CAAO,KAAK,CAAA,CAAA,CAAA,GAAM,EAAA,CAAA;AAAA,MACnD,QAAA,CAAS;AAAA,KACX;AAAA,EACF;AACA,EAAA,OAAO,EAAE,MAAM,KAAA,EAAM;AACvB;;;ACQO,SAAS,YAAY,OAAA,EAAwB;AAClD,EAAA,MAAM,GAAA,GAAM,OAAA,CACT,OAAA,CAAQ,KAAK,CAAA,CACb,WAAA,CAAY,2DAAsD,CAAA,CAClE,QAAA,CAAS,eAAA,EAAiB,8DAAyD,CAAA,CACnF,MAAA,CAAO,kBAAA,EAAoB,oCAAA,EAAsC,MAAM,CAAA,CACvE,MAAA,CAAO,eAAA,EAAiB,8CAA8C,CAAA,CACtE,MAAA,CAAO,cAAA,EAAgB,6EAAwE,CAAA,CAC/F,MAAA,CAAO,eAA+B,QAAA,EAAoB,IAAA,EAAkE;AAC3H,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,IAAA,GAAO,OAAO,MAAM,CAAA;AAK1B,IAAA,IAAI,IAAA,CAAK,OAAA,KAAY,KAAA,IAAS,CAAC,OAAO,KAAA,EAAO;AAC3C,MAAA,MAAM,SAAA,GAAY,MAAM,cAAA,CAAe,IAAI,CAAA;AAC3C,MAAA,IAAI,SAAA,CAAU,MAAA,KAAW,WAAA,IAAe,CAAC,OAAO,IAAA,EAAM;AACpD,QAAA,MAAM,CAAA,GAAI,UAAA,CAAW,SAAA,CAAU,KAAK,CAAA;AACpC,QAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,uBAAA,EAAqB,CAAC,CAAA,kBAAA,EAAA,CAAsB,SAAA,CAAU,EAAA,GAAK,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,CAAI,CAAC,CAAA;AAAA,MAC7F,WAAW,SAAA,CAAU,MAAA,KAAW,OAAA,IAAW,CAAC,OAAO,IAAA,EAAM;AACvD,QAAA,IAAA,CAAK,EAAE,MAAA,CAAO,CAAA,sBAAA,EAAyB,SAAA,CAAU,OAAO,4CAAuC,CAAC,CAAA;AAAA,MAClG;AAAA,IACF;AACA,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,YAAA,CAAa,MAAM,CAAA;AACrC,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,IAAK,GAAA;AACtC,IAAA,MAAM,CAAA,GAAI,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA;AAE3B,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,QAAA,KAAa,KAAA,IAAS,CAAC,MAAA,CAAO,KAAA;AAExD,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI,IAAA,GAAO,SAAA;AACX,IAAA,IAAI,IAAA,GAAO,EAAA;AAEX,IAAA,IAAI,YAAA,EAAc;AAGhB,MAAA,MAAM,QAAA,GAAW,CAAC,gBAAA,CAAiB,IAAA,EAAM,mBAAmB,CAAA;AAC5D,MAAA,IAAI,CAAC,MAAA,CAAO,IAAA,IAAQ,QAAA,EAAU;AAC5B,QAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,iGAA4F,CAAC,CAAA;AAAA,MAC1G;AACA,MAAA,IAAI,MAAA;AACJ,MAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAAa,EAAE,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,aAAA,EAAe,CAAC,CAAA,KAAO,MAAA,GAAS,CAAA,EAAI,CAAA;AAC/F,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,MAAM,GAAA,GAAM,CAAC,MAAA,CAAO,IAAA,IAAQ,QAAA,GAAW,IAAI,WAAA,CAAY,CAAA,CAAE,GAAA,CAAI,WAAW,CAAC,CAAA,GAAI,MAAA;AAC7E,QAAA,MAAM,OAAA,GAAU,MAAM,iBAAA,CAAkB,KAAA,EAAO,UAAU,IAAA,EAAM,GAAA,GAAM,CAAC,CAAA,EAAG,MAAM,GAAA,CAAI,MAAA,CAAO,CAAA,EAAG,CAAC,IAAI,MAAS,CAAA;AAC3G,QAAA,GAAA,EAAK,IAAA,EAAK;AACV,QAAA,MAAA,GAAS,MAAM,mBAAmB,KAAA,EAAO,CAAA,EAAG,EAAE,MAAA,EAAQ,QAAA,EAAU,WAAA,EAAa,OAAA,EAAS,CAAA;AACtF,QAAA,IAAA,GAAO,CAAA,UAAA,EAAa,SAAS,EAAE,CAAA,CAAA,CAAA;AAAA,MACjC,CAAA,MAAO;AACL,QAAA,MAAA,GAAS,UAAA,CAAW,KAAA,EAAO,CAAA,EAAG,EAAE,QAAQ,CAAA;AACxC,QAAA,IAAA,GAAO,MAAA,GAAS,kBAAA,CAAmB,MAAM,CAAA,GAAI,oCAAA;AAAA,MAC/C;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAA,GAAS,UAAA,CAAW,KAAA,EAAO,CAAA,EAAG,EAAE,QAAQ,CAAA;AACxC,MAAA,IAAI,MAAA,CAAO,OAAO,IAAA,GAAO,8CAAA;AAAA,IAC3B;AAEA,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAA,CAAK;AAAA,QACH,UAAU,MAAA,CAAO,QAAA;AAAA,QACjB,IAAA;AAAA,QACA,MAAM,IAAA,IAAQ,MAAA;AAAA,QACd,gBAAgB,MAAA,CAAO,cAAA;AAAA,QACvB,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,UAClC,IAAA,EAAM,EAAE,IAAA,CAAK,aAAA;AAAA,UACb,IAAA,EAAM,EAAE,IAAA,CAAK,IAAA;AAAA,UACb,IAAA,EAAM,EAAE,IAAA,CAAK,IAAA;AAAA,UACb,IAAA,EAAM,CAAA,CAAE,IAAA,CAAK,IAAA,CAAK,KAAA;AAAA,UAClB,OAAO,CAAA,CAAE,KAAA;AAAA,UACT,KAAK,CAAA,CAAE;AAAA,SACT,CAAE,CAAA;AAAA,QACF,SAAS,MAAA,CAAO;AAAA,OACjB,CAAA;AACD,MAAA;AAAA,IACF;AAEA,IAAA,GAAA,CAAI,OAAO,OAAO,CAAA;AAClB,IAAA,IAAA,CAAK,EAAE,CAAA;AACP,IAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,QAAA,EAAQ,MAAA,CAAO,QAAQ,MAAM,CAAA,iBAAA,EAAiB,MAAA,CAAO,cAAc,CAAA,gBAAA,EAAmB,MAAM,CAAA,OAAA,EAAO,IAAI,EAAE,CAAC,CAAA;AACrH,IAAA,IAAI,MAAM,IAAA,CAAK,CAAA,CAAE,OAAO,CAAA,EAAA,EAAK,IAAI,EAAE,CAAC,CAAA;AAAA,EACtC,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,GAAG,CAAA;AACxB;AChGA,SAAS,GAAG,KAAA,EAAuB;AACjC,EAAA,IAAI,KAAA,IAAS,GAAG,OAAO,MAAA;AACvB,EAAA,IAAI,KAAA,GAAQ,IAAA,GAAO,IAAA,EAAM,OAAO,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,IAAI,CAAC,CAAC,CAAA,GAAA,CAAA;AACxE,EAAA,OAAO,GAAG,IAAA,CAAK,KAAA,CAAM,KAAA,IAAS,IAAA,GAAO,KAAK,CAAC,CAAA,GAAA,CAAA;AAC7C;AAWO,SAAS,cAAc,OAAA,EAAwB;AACpD,EAAA,MAAM,GAAA,GAAM,OAAA,CACT,OAAA,CAAQ,OAAO,EACf,WAAA,CAAY,2EAA2E,CAAA,CACvF,MAAA,CAAO,WAAW,8CAA8C,CAAA,CAChE,MAAA,CAAO,SAAA,EAAW,mDAAmD,CAAA,CAKrE,SAAA,CAAU,IAAI,MAAA,CAAO,MAAM,CAAA,CAAE,QAAA,EAAU,EACvC,SAAA,CAAU,IAAI,MAAA,CAAO,YAAY,EAAE,QAAA,EAAU,CAAA,CAC7C,MAAA,CAAO,eAA+B,IAAA,EAA8E;AACnH,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,UAAU,iBAAA,EAAkB;AAGlC,IAAA,IAAI,IAAA,CAAK,OAAO,OAAO,SAAA,CAAU,OAAO,MAAM,CAAA,EAAG,OAAA,EAAS,MAAA,CAAO,IAAI,CAAA;AACrE,IAAA,IAAI,IAAA,CAAK,KAAA,EAAO,OAAO,OAAA,CAAQ,OAAO,IAAI,CAAA;AAE1C,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,YAAA,CAAa,MAAM,CAAA;AACrC,IAAA,MAAM,IAAA,GAAO,OAAO,MAAM,CAAA;AAC1B,IAAA,MAAM,EAAA,GAAK,KAAK,EAAA,KAAO,IAAA;AACvB,IAAA,MAAM,KAAA,GAAQ,CAAC,EAAA,IAAM,CAAC,MAAA,CAAO,IAAA;AAE7B,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,IAAI,KAAA,EAAO,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,oEAA4D,CAAC,CAAA;AACnF,MAAA;AAAA,IACF;AACA,IAAA,IAAI,YAAA,CAAa,KAAA,EAAO,IAAA,EAAM,OAAO,MAAM,CAAA,EAAG;AAC5C,MAAA,IAAI,MAAA,CAAO,IAAA,EAAM,IAAA,CAAK,EAAE,QAAA,EAAU,CAAA,EAAG,OAAA,EAAS,CAAA,EAAG,QAAA,EAAU,IAAA,EAAM,KAAA,EAAO,OAAA,EAAS,CAAA;AAAA,WAAA,IACxE,OAAO,IAAA,CAAK,CAAA,EAAG,EAAE,IAAA,CAAK,UAAU,CAAC,CAAA,uCAAA,CAAsC,CAAA;AAChF,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,MAAA;AACJ,IAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAAa;AAAA,MAClC,OAAO,MAAA,CAAO,KAAA;AAAA;AAAA;AAAA;AAAA,MAId,UAAA,EAAY,EAAA,IAAM,IAAA,CAAK,QAAA,KAAa,IAAA;AAAA,MACpC,sBAAsB,CAAC,EAAA;AAAA,MACvB,aAAA,EAAe,CAAC,CAAA,KAAO,MAAA,GAAS;AAAA,KACjC,CAAA;AACD,IAAA,IAAI,CAAC,QAAA,EAAU;AAEb,MAAA,IAAI,KAAA,IAAS,MAAA,EAAQ,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,iBAAc,kBAAA,CAAmB,MAAM,CAAC,CAAA,CAAE,CAAC,CAAA;AAC3E,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,YAAA,CAAa,KAAA,EAAO,IAAA,EAAM,OAAO,CAAA;AACjD,IAAA,MAAM,GAAA,GAAM,QAAQ,IAAI,WAAA,CAAY,EAAE,GAAA,CAAI,WAAW,CAAC,CAAA,GAAI,MAAA;AAC1D,IAAA,MAAM,iBAAA,CAAkB,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,GAAA,GAAM,CAAC,CAAA,EAAG,CAAA,KAAM,GAAA,CAAI,MAAA,CAAO,CAAA,EAAG,CAAC,IAAI,MAAS,CAAA;AAC3F,IAAA,GAAA,EAAK,IAAA,EAAK;AACV,IAAA,IAAI,MAAA,CAAO,MAAM,IAAA,CAAK,EAAE,UAAU,OAAA,EAAS,KAAA,EAAO,SAAS,CAAA;AAAA,SAAA,IAClD,KAAA,EAAO,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,KAAA,CAAM,QAAG,CAAC,CAAA,sCAAA,EAAsC,OAAO,CAAA,oBAAA,EAAoB,OAAO,CAAA,CAAA,CAAG,CAAA;AAAA,EACjH,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,GAAG,CAAA;AACxB;AAEA,SAAS,SAAA,CAAU,IAAA,EAAc,OAAA,EAAiB,MAAA,EAAwB;AACxE,EAAA,MAAM,CAAA,GAAI,eAAe,OAAO,CAAA;AAChC,EAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,IAAA,EAAM,OAAO,CAAA;AACjD,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,IAAA,CAAK,EAAE,KAAA,EAAO,OAAA,EAAS,QAAA,EAAU,EAAE,GAAA,EAAK,OAAA,EAAS,CAAA,CAAE,OAAA,EAAS,KAAA,EAAO,CAAA,CAAE,KAAA,EAAO,cAAA,EAAgB,YAAY,CAAA;AACxG,IAAA;AAAA,EACF;AACA,EAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,UAAU,CAAC,CAAA,iBAAA,CAAgB,CAAA;AAC1C,EAAA,IAAA,CAAK,CAAA,YAAA,EAAe,CAAA,CAAE,IAAA,CAAK,OAAO,CAAC,CAAA,CAAE,CAAA;AACrC,EAAA,IAAA,CAAK,CAAA,YAAA,EAAe,CAAA,CAAE,GAAG,CAAA,CAAE,CAAA;AAC3B,EAAA,IAAA,CAAK,eAAe,CAAA,CAAE,OAAA,GAAU,CAAA,CAAE,KAAA,CAAM,iBAAc,EAAA,CAAG,CAAA,CAAE,KAAK,CAAC,EAAE,CAAA,GAAI,CAAA,CAAE,GAAA,CAAI,oDAAoD,CAAC,CAAA,CAAE,CAAA;AACpI,EAAA,IAAA,CAAK,CAAA,YAAA,EAAe,UAAA,GAAa,CAAA,CAAE,KAAA,CAAM,mBAAmB,IAAI,CAAA,CAAE,GAAA,CAAI,wCAAmC,CAAC,CAAA,CAAE,CAAA;AAC5G,EAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,0FAAqF,CAAC,CAAA;AACjG,EAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,gGAA0F,CAAC,CAAA;AACxG;AAEA,SAAS,QAAQ,MAAA,EAAwB;AACvC,EAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,EAAA,MAAM,QAAQ,eAAA,EAAgB;AAC9B,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,IAAA,CAAK,EAAE,SAAS,MAAA,CAAO,OAAA,EAAS,YAAY,KAAA,EAAO,GAAA,EAAK,MAAA,CAAO,GAAA,EAAK,CAAA;AACpE,IAAA;AAAA,EACF;AACA,EAAA,IAAI,CAAC,MAAA,CAAO,OAAA,IAAW,KAAA,KAAU,CAAA,EAAG;AAClC,IAAA,IAAA,CAAK,CAAA,EAAG,EAAE,IAAA,CAAK,UAAU,CAAC,CAAA,6DAAA,EAAwD,MAAA,CAAO,GAAG,CAAA,CAAA,CAAG,CAAA;AAC/F,IAAA;AAAA,EACF;AACA,EAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,KAAA,CAAM,QAAG,CAAC,CAAA,0CAAA,EAA0C,EAAA,CAAG,KAAK,CAAC,CAAA,OAAA,EAAU,MAAA,CAAO,GAAG,CAAA,CAAE,CAAA;AAC7F,EAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,8EAA8E,CAAC,CAAA;AAC5F;;;AClHO,SAAS,cAAA,CAAe,OAAA,EAAiB,UAAA,EAAyB,QAAA,GAAW,QAAA,EAAoB;AACtG,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,IAAA,OAAO,IAAI,QAAA,CAAS,CAAA,EAAG,OAAO,CAAA,8CAAA,CAAA,EAA6C,SAAS,SAAS,CAAA;AAAA,EAC/F;AACA,EAAA,MAAM,KAAA,GAAQ,UAAA,CACX,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CACX,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,EAAA,EAAK,CAAA,GAAI,CAAC,KAAK,CAAA,CAAE,aAAa,CAAA,EAAA,EAAK,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,IAAA,CAAK,KAAK,CAAA,CAAA,CAAG,CAAA;AACxF,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,MAAA,GAAS,EAAA,GAAK;AAAA,YAAA,EAAY,UAAA,CAAW,MAAA,GAAS,EAAE,CAAA,KAAA,CAAA,GAAU,EAAA;AAClF,EAAA,OAAO,IAAI,QAAA;AAAA,IACT,CAAA,EAAG,OAAO,CAAA,sBAAA,EAAoB,QAAQ,CAAA;AAAA,EAAU,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,GAAG,IAAI,CAAA,CAAA;AAAA,IACvE,QAAA,CAAS;AAAA,GACX;AACF;;;ACPO,SAAS,aAAa,OAAA,EAAwB;AACnD,EAAA,MAAM,MAAM,OAAA,CACT,OAAA,CAAQ,MAAM,CAAA,CACd,WAAA,CAAY,0DAA0D,CAAA,CACtE,QAAA,CAAS,UAAU,oDAAoD,CAAA,CACvE,OAAO,YAAA,EAAc,uCAAuC,EAC5D,MAAA,CAAO,SAAyB,MAAc,IAAA,EAAyB;AACtE,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,YAAA,CAAa,MAAM,CAAA;AACrC,IAAA,MAAM,EAAE,IAAA,EAAM,UAAA,EAAW,GAAI,UAAA,CAAW,KAAA,EAAO,IAAA,EAAM,IAAA,CAAK,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,IAAI,IAAI,MAAS,CAAA;AAE9F,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,QAAA,MAAM,cAAA,CAAe,CAAA,iBAAA,EAAoB,IAAI,CAAA,CAAA,CAAA,EAAK,EAAE,CAAA;AAAA,MACtD;AACA,MAAA,MAAM,cAAA,CAAe,CAAA,CAAA,EAAI,IAAI,CAAA,cAAA,CAAA,EAAkB,UAAU,CAAA;AAAA,IAC3D;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,KAAK,CAAA;AAClC,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAC,CAAA;AAChE,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAC,CAAA;AAChE,IAAA,MAAM,YAAA,GAAe,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,SAAS,CAAA,CAAE,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,YAAY,CAAC,CAAA;AAC1F,IAAA,MAAM,UAAA,GAAa,YAAA,CAAa,GAAA,CAAI,CAAC,CAAA,KAAM,KAAA,CAAM,IAAA,CAAK,CAAA,CAAE,GAAG,CAAA,EAAG,aAAa,CAAA,CAAE,OAAO,OAAO,CAAA;AAC3F,IAAA,MAAM,IAAA,GAAO,MAAM,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,IAAA,CAAK,IAAI,CAAA;AAEvD,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAA,CAAK;AAAA,QACH,IAAI,IAAA,CAAK,EAAA;AAAA,QACT,MAAM,IAAA,CAAK,aAAA;AAAA,QACX,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,IAAA,EAAM,KAAK,IAAA,CAAK,KAAA;AAAA,QAChB,SAAA,EAAW,KAAK,SAAA,IAAa,IAAA;AAAA,QAC7B,YAAY,IAAA,CAAK,UAAA;AAAA,QACjB,YAAY,IAAA,CAAK,UAAA;AAAA,QACjB,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,SAAA,EAAW,MAAM,KAAA,IAAS,IAAA;AAAA,QAC1B,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,aAAa,CAAA;AAAA,QACzC,UAAU,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,aAAa,CAAA;AAAA,QAC5C,OAAA,EAAS;AAAA,OACV,CAAA;AACD,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,IAAA,CAAK,aAAa,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,CAAA,CAAA,CAAG,CAAC,CAAA,CAAE,CAAA;AAChE,IAAA,IAAA,CAAK,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA;AACpD,IAAA,IAAI,IAAA,CAAK,WAAW,IAAA,CAAK,CAAA,EAAA,EAAK,EAAE,IAAA,CAAK,IAAA,CAAK,SAAS,CAAC,CAAA,CAAE,CAAA;AACtD,IAAA,IAAA;AAAA,MACE,CAAA,aAAA,EAAgB,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAG,IAAA,CAAK,KAAA,GAAQ,CAAA,CAAE,MAAA,CAAO,aAAQ,CAAA,GAAI,EAAE,CAAA,YAAA,EAAY,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,GAAO,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,IAAA,CAAK,KAAK,CAAC,CAAA,CAAA,GAAK,EAAE,CAAA;AAAA,KAC9I;AACA,IAAA,IAAI,UAAA,CAAW,MAAA,EAAQ,IAAA,CAAK,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,UAAU,CAAC,CAAA,CAAA,EAAI,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAC7E,IAAA,IAAA,CAAK,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,OAAO,CAAC,KAAK,OAAA,CAAQ,MAAM,CAAA,GAAA,EAAM,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,EAAE,IAAA,CAAK,IAAI,CAAA,IAAK,QAAG,CAAA,CAAE,CAAA;AACrH,IAAA,IAAA,CAAK,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,WAAW,CAAC,KAAK,OAAA,CAAQ,MAAM,CAAA,GAAA,EAAM,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,EAAE,IAAA,CAAK,IAAI,CAAA,IAAK,QAAG,CAAA,CAAE,CAAA;AAAA,EAC3H,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,GAAG,CAAA;AACxB;AAEA,SAAS,OAAiC,KAAA,EAAiB;AACzD,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,MAAMC,OAAW,EAAC;AAClB,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA,EAAG;AACpB,IAAA,IAAA,CAAK,GAAA,CAAI,EAAE,EAAE,CAAA;AACb,IAAAA,IAAAA,CAAI,KAAK,CAAC,CAAA;AAAA,EACZ;AACA,EAAA,OAAOA,IAAAA;AACT;;;ACrEO,SAAS,aAAa,OAAA,EAAwB;AACnD,EAAA,MAAM,GAAA,GAAM,OAAA,CACT,OAAA,CAAQ,MAAM,CAAA,CACd,WAAA,CAAY,qCAAqC,CAAA,CACjD,QAAA,CAAS,KAAA,EAAO,aAAa,CAAA,CAC7B,QAAA,CAAS,KAAA,EAAO,aAAa,CAAA,CAC7B,MAAA,CAAO,cAAA,EAAgB,6CAA6C,CAAA,CACpE,MAAA,CAAO,cAAA,EAAgB,6CAA6C,CAAA,CACpE,MAAA,CAAO,SAAyB,CAAA,EAAW,CAAA,EAAW,IAAA,EAA0C;AAC/F,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,YAAA,CAAa,MAAM,CAAA;AAErC,IAAA,MAAM,EAAA,GAAK,UAAA,CAAW,KAAA,EAAO,CAAA,EAAG,IAAA,CAAK,QAAQ,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,GAAI,MAAS,CAAA;AAC3E,IAAA,IAAI,CAAC,EAAA,CAAG,IAAA,EAAM,MAAM,cAAA,CAAe,IAAI,CAAC,CAAA,EAAA,EAAK,EAAA,CAAG,UAAA,CAAW,SAAS,cAAA,GAAiB,WAAW,CAAA,CAAA,EAAI,EAAA,CAAG,YAAY,UAAU,CAAA;AAC7H,IAAA,MAAM,EAAA,GAAK,UAAA,CAAW,KAAA,EAAO,CAAA,EAAG,IAAA,CAAK,QAAQ,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,GAAI,MAAS,CAAA;AAC3E,IAAA,IAAI,CAAC,EAAA,CAAG,IAAA,EAAM,MAAM,cAAA,CAAe,IAAI,CAAC,CAAA,EAAA,EAAK,EAAA,CAAG,UAAA,CAAW,SAAS,cAAA,GAAiB,WAAW,CAAA,CAAA,EAAI,EAAA,CAAG,YAAY,UAAU,CAAA;AAE7H,IAAA,MAAM,MAAA,GAAS,aAAa,KAAA,EAAO,EAAA,CAAG,KAAK,EAAA,EAAI,EAAA,CAAG,KAAK,EAAE,CAAA;AACzD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,QAAA;AAAA,QACR,mBAAmB,EAAA,CAAG,IAAA,CAAK,aAAa,CAAA,KAAA,EAAQ,EAAA,CAAG,KAAK,aAAa,CAAA,CAAA;AAAA,QACrE,QAAA,CAAS;AAAA,OACX;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,EAAA,EAAI,CAAC,CAAU,CAAC,CAAA;AAC/D,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,GAAA,CAAI,CAAC,EAAA,KAAO,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAG,aAAA,IAAiB,EAAE,CAAA;AAEtE,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAA,CAAK,EAAE,IAAA,EAAM,EAAA,CAAG,KAAK,aAAA,EAAe,EAAA,EAAI,GAAG,IAAA,CAAK,aAAA,EAAe,IAAA,EAAM,KAAA,CAAM,SAAS,CAAA,EAAG,SAAA,EAAW,OAAO,SAAA,EAAW,IAAA,EAAM,OAAO,CAAA;AACjI,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,GAAG,CAAA,CAAE,IAAA,CAAK,SAAS,CAAC,CAAA,MAAA,EAAM,MAAM,MAAA,GAAS,CAAC,CAAA,OAAA,EAAU,MAAA,CAAO,cAAc,SAAA,GAAY,CAAA,CAAE,IAAI,YAAY,CAAA,GAAI,EAAE,CAAA,CAAE,CAAA;AACpH,IAAA,IAAA,CAAK,IAAA,GAAO,KAAA,CAAM,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,CAAC,EAAE,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,UAAK,CAAC,CAAC,CAAA;AAAA,EAC5D,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,GAAG,CAAA;AACxB;;;ACpCO,SAAS,aAAa,OAAA,EAAwB;AACnD,EAAA,MAAM,GAAA,GAAM,OAAA,CACT,OAAA,CAAQ,MAAM,CAAA,CACd,WAAA,CAAY,+DAA+D,CAAA,CAC3E,QAAA,CAAS,QAAA,EAAU,WAAW,CAAA,CAC9B,MAAA,CAAO,WAAA,EAAa,iCAAiC,CAAA,CACrD,MAAA,CAAO,aAAA,EAAe,WAAA,EAAa,GAAG,CAAA,CACtC,MAAA,CAAO,YAAA,EAAc,uCAAuC,CAAA,CAC5D,MAAA,CAAO,SAAyB,IAAA,EAAc,IAAA,EAA4D;AACzG,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,YAAA,CAAa,MAAM,CAAA;AACrC,IAAA,MAAM,EAAE,IAAA,EAAM,UAAA,EAAW,GAAI,UAAA,CAAW,KAAA,EAAO,IAAA,EAAM,IAAA,CAAK,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,IAAI,IAAI,MAAS,CAAA;AAC9F,IAAA,IAAI,CAAC,IAAA,EAAM,MAAM,cAAA,CAAe,CAAA,CAAA,EAAI,IAAI,CAAA,EAAA,EAAK,UAAA,CAAW,MAAA,GAAS,cAAA,GAAiB,WAAW,CAAA,CAAA,EAAI,UAAU,CAAA;AAE3G,IAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,KAAK,CAAA;AAClC,IAAA,MAAM,QAAA,GAAW,KAAK,GAAA,CAAI,CAAA,EAAG,OAAO,IAAA,CAAK,KAAK,KAAK,CAAC,CAAA;AACpD,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,OAAA,GAAU,SAAA,GAAY,SAAA;AAE7C,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAA,CAAK,UAAA,CAAW,OAAO,IAAA,EAAM,SAAA,EAAW,0BAAU,IAAI,GAAA,EAAK,CAAC,CAAA;AAC5D,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,SAAS,CAAC,CAAA,MAAA,EAAM,SAAS,CAAA,IAAA,EAAO,CAAA,CAAE,KAAK,IAAA,CAAK,aAAa,CAAC,CAAA,QAAA,EAAW,QAAQ,CAAA,CAAA,CAAG,CAAA;AAC/F,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,IAAA,CAAK,KAAA,EAAO,MAAM,SAAA,EAAW,QAAA,EAAU,mBAAG,IAAI,GAAA,EAAI,EAAG,KAAA,EAAO,EAAE,CAAA;AAC9D,IAAA,KAAA,MAAW,CAAA,IAAK,KAAA,EAAO,IAAA,CAAK,CAAC,CAAA;AAAA,EAC/B,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,GAAG,CAAA;AACxB;AAEA,SAAS,IAAA,CAAK,KAAA,EAAmB,IAAA,EAAiB,SAAA,EAA+C;AAC/F,EAAA,MAAML,IAAAA,GAAM,SAAA,KAAc,SAAA,GAAY,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,EAAE,CAAA,GAAI,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,EAAE,CAAA;AACpF,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,MAAMK,OAAmB,EAAC;AAC1B,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,CAAA,EAAE,IAAKL,IAAAA,EAAK;AAC7B,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA,EAAG;AACpB,IAAA,IAAA,CAAK,GAAA,CAAI,EAAE,EAAE,CAAA;AACb,IAAAK,IAAAA,CAAI,KAAK,CAAC,CAAA;AAAA,EACZ;AACA,EAAA,OAAOA,IAAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,UAAA,GAAa,CAAA,CAAE,UAAA,IAAc,CAAA,CAAE,aAAA,CAAc,aAAA,CAAc,CAAA,CAAE,aAAa,CAAC,CAAA;AACzG;AAEA,SAAS,IAAA,CACP,OACA,IAAA,EACA,SAAA,EACA,UACA,KAAA,EACA,OAAA,EACA,OACA,MAAA,EACM;AACN,EAAA,IAAI,UAAU,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,EAAG,CAAA,CAAE,KAAK,IAAA,CAAK,aAAa,CAAC,CAAA,CAAA,EAAI,EAAE,GAAA,CAAI,CAAA,CAAA,EAAI,KAAK,IAAI,CAAA,CAAA,CAAG,CAAC,CAAA,CAAE,CAAA;AACtF,EAAA,IAAI,SAAS,QAAA,EAAU;AACvB,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,EAAG;AACxB,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,MAAM,CAAA,EAAG,EAAE,GAAA,CAAI,gBAAW,CAAC,CAAA,CAAE,CAAA;AAC3C,IAAA;AAAA,EACF;AACA,EAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,EAAE,CAAA;AACnB,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,EAAO,IAAA,EAAM,SAAS,CAAA;AAC5C,EAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,KAAA,EAAO,CAAA,KAAM;AAC7B,IAAA,MAAM,IAAA,GAAO,CAAA,KAAM,QAAA,CAAS,MAAA,GAAS,CAAA;AACrC,IAAA,MAAM,MAAA,GAAS,OAAO,eAAA,GAAQ,eAAA;AAC9B,IAAA,MAAM,GAAA,GAAM,QAAQ,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA,GAAI,CAAA,CAAE,GAAA,CAAI,SAAI,CAAA,GAAI,EAAA;AAClD,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,EAAG,CAAA,CAAE,GAAA,CAAI,MAAM,CAAC,CAAA,EAAG,KAAA,CAAM,aAAa,CAAA,EAAG,GAAG,CAAA,CAAE,CAAA;AAClE,IAAA,IAAA,CAAK,OAAO,KAAA,EAAO,SAAA,EAAW,QAAA,EAAU,KAAA,GAAQ,GAAG,IAAI,GAAA,CAAI,OAAO,CAAA,EAAG,OAAO,MAAA,IAAU,IAAA,GAAO,QAAQ,CAAA,CAAE,GAAA,CAAI,UAAK,CAAA,CAAE,CAAA;AAAA,EACpH,CAAC,CAAA;AACH;AAEA,SAAS,UAAA,CACP,KAAA,EACA,IAAA,EACA,SAAA,EACA,UACA,OAAA,EACS;AACT,EAAA,IAAI,YAAY,CAAA,IAAK,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,EAAG;AACzC,IAAA,OAAO,EAAE,IAAA,EAAM,IAAA,CAAK,aAAA,EAAe,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,KAAA,EAAO,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,EAAE;AAAA,EAClF;AACA,EAAA,MAAM,cAAc,IAAI,GAAA,CAAI,OAAO,CAAA,CAAE,GAAA,CAAI,KAAK,EAAE,CAAA;AAChD,EAAA,OAAO;AAAA,IACL,MAAM,IAAA,CAAK,aAAA;AAAA,IACX,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,QAAA,EAAU,IAAA,CAAK,KAAA,EAAO,IAAA,EAAM,SAAS,CAAA,CAAE,GAAA;AAAA,MAAI,CAAC,UAC1C,UAAA,CAAW,KAAA,EAAO,OAAO,SAAA,EAAW,QAAA,GAAW,GAAG,WAAW;AAAA;AAC/D,GACF;AACF;;;AC1FO,SAAS,iBAAiB,OAAA,EAAwB;AACvD,EAAA,MAAM,GAAA,GAAM,QACT,OAAA,CAAQ,KAAK,EACb,WAAA,CAAY,sDAAsD,CAAA,CAClE,MAAA,CAAO,WAAyB;AAC/B,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,YAAA,CAAa,MAAM,CAAA;AACrC,IAAA,IAAI,MAAA,CAAO,IAAA,EAAM,IAAA,CAAK,UAAA,CAAW,KAAK,CAAC,CAAA;AAAA,SAClC,GAAA,CAAI,YAAA,CAAa,KAAK,CAAC,CAAA;AAAA,EAC9B,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,GAAG,CAAA;AAEtB,EAAA,MAAM,IAAA,GAAO,OAAA,CACV,OAAA,CAAQ,MAAM,EACd,WAAA,CAAY,iDAAiD,CAAA,CAC7D,MAAA,CAAO,mBAAmB,kBAAA,EAAoB,IAAI,CAAA,CAClD,MAAA,CAAO,SAAyB,IAAA,EAA0B;AACzD,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,YAAA,CAAa,MAAM,CAAA;AACrC,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,IAAK,EAAA;AACpC,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAChB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,MAAA,IAAU,CAAA,CAAE,IAAA,KAAS,UAAU,EACxD,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,UAAA,GAAa,CAAA,CAAE,UAAA,IAAc,CAAA,CAAE,aAAA,CAAc,aAAA,CAAc,CAAA,CAAE,aAAa,CAAC,CAAA,CAC5F,KAAA,CAAM,GAAG,KAAK,CAAA;AACjB,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,WAAW,CAAC,CAAA;AAC1B,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,CAAA,EAAG,EAAE,IAAA,CAAK,SAAS,CAAC,CAAA,UAAA,EAAU,IAAA,CAAK,MAAM,CAAA,cAAA,CAAgB,CAAA;AAC9D,IAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,MAAA,MAAM,MAAM,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,MAAA,CAAO,SAAI,CAAA,GAAI,EAAA;AACvC,MAAA,IAAA,CAAK,CAAA,EAAA,EAAK,GAAA,CAAI,CAAA,CAAE,UAAA,CAAW,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,CAAK,CAAA,CAAE,aAAa,CAAC,CAAA,EAAG,GAAG,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,IAAA,CAAK,KAAK,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA;AAAA,IACtH;AAAA,EACF,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,IAAI,CAAA;AAEvB,EAAA,MAAM,KAAA,GAAQ,OAAA,CACX,OAAA,CAAQ,OAAO,EACf,WAAA,CAAY,8DAA8D,CAAA,CAC1E,MAAA,CAAO,mBAAmB,kBAAA,EAAoB,IAAI,CAAA,CAClD,MAAA,CAAO,SAAyB,IAAA,EAA0B;AACzD,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,YAAA,CAAa,MAAM,CAAA;AACrC,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,IAAK,EAAA;AACpC,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,KAAA,CAAM,KAAK,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,IAAA,GAAO,CAAA,CAAE,QAAQ,CAAA,CAAE,EAAA,GAAK,EAAE,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA;AAC3F,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAA,CAAK,IAAI,CAAA;AACT,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,UAAU,CAAC,CAAA,MAAA,EAAM,KAAA,CAAM,KAAA,CAAM,MAAM,CAAA,cAAA,EAAiB,KAAA,CAAM,IAAA,CAAK,OAAO,CAAA,CAAA,CAAG,CAAA;AACxF,IAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,MAAA,IAAA;AAAA,QACE,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,CAAK,CAAA,CAAA,EAAI,CAAA,CAAE,EAAE,CAAA,CAAE,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,KAAK,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,qBAAA,EAAqB,CAAA,CAAE,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAC,CAAA,MAAA,EAAM,CAAA,CAAE,aAAa,CAAA,SAAA,CAAW,CAAC,CAAA;AAAA,OACnI;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,KAAK,CAAA;AAExB,EAAA,MAAM,QAAA,GAAW,OAAA,CACd,OAAA,CAAQ,UAAU,EAClB,WAAA,CAAY,oDAAoD,CAAA,CAChE,MAAA,CAAO,mBAAmB,kBAAA,EAAoB,IAAI,CAAA,CAClD,MAAA,CAAO,SAAyB,IAAA,EAA0B;AACzD,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,YAAA,CAAa,MAAM,CAAA;AACrC,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,IAAK,EAAA;AACpC,IAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,EAAA,EAAI,CAAC,CAAU,CAAC,CAAA;AAC/D,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAChB,MAAA,CAAO,CAAC,CAAA,KAAM,OAAO,CAAA,CAAE,QAAA,KAAa,QAAA,IAAY,CAAA,CAAE,QAAA,GAAW,CAAC,EAC9D,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAA,CAAO,CAAA,CAAE,QAAA,IAAY,CAAA,KAAM,CAAA,CAAE,YAAY,CAAA,CAAA,IAAM,CAAA,CAAE,EAAA,CAAG,aAAA,CAAc,EAAE,EAAE,CAAC,CAAA,CAChF,KAAA,CAAM,GAAG,KAAK,CAAA;AACjB,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAA;AAAA,QACE,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,UACf,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,UAAU,CAAA,CAAE,QAAA;AAAA,UACZ,MAAM,IAAA,CAAK,GAAA,CAAI,EAAE,GAAG,CAAA,EAAG,iBAAiB,CAAA,CAAE,GAAA;AAAA,UAC1C,IAAI,IAAA,CAAK,GAAA,CAAI,EAAE,GAAG,CAAA,EAAG,iBAAiB,CAAA,CAAE;AAAA,SAC1C,CAAE;AAAA,OACJ;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,aAAa,CAAC,CAAA,wDAAA,CAAuD,CAAA;AACpF,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,CAAA,EAAG,EAAE,IAAA,CAAK,aAAa,CAAC,CAAA,UAAA,EAAU,IAAA,CAAK,MAAM,CAAA,iBAAA,CAAmB,CAAA;AACrE,IAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,MAAA,MAAM,OAAO,IAAA,CAAK,GAAA,CAAI,EAAE,GAAG,CAAA,EAAG,iBAAiB,CAAA,CAAE,GAAA;AACjD,MAAA,MAAM,KAAK,IAAA,CAAK,GAAA,CAAI,EAAE,GAAG,CAAA,EAAG,iBAAiB,CAAA,CAAE,GAAA;AAC/C,MAAA,IAAA,CAAK,CAAA,EAAA,EAAK,GAAA,CAAA,CAAK,CAAA,CAAE,QAAA,IAAY,CAAA,EAAG,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,CAAA,MAAA,EAAI,CAAA,CAAE,IAAI,CAAA,MAAA,CAAG,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAAE,CAAA;AAAA,IACzG;AAAA,EACF,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,QAAQ,CAAA;AAC7B;AAEA,SAAS,YAAY,CAAA,EAAc;AACjC,EAAA,OAAO;AAAA,IACL,IAAI,CAAA,CAAE,EAAA;AAAA,IACN,MAAM,CAAA,CAAE,aAAA;AAAA,IACR,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,IAAA,EAAM,EAAE,IAAA,CAAK,KAAA;AAAA,IACb,YAAY,CAAA,CAAE,UAAA;AAAA,IACd,OAAO,CAAA,CAAE,KAAA;AAAA,IACT,MAAM,CAAA,CAAE;AAAA,GACV;AACF;AAEA,SAAS,WAAW,KAAA,EAAgB;AAClC,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,MAAM,IAAA,CAAK,MAAA;AAAA,IACnB,SAAA,EAAW,MAAM,IAAA,CAAK,SAAA;AAAA,IACtB,OAAA,EAAS,MAAM,IAAA,CAAK,OAAA;AAAA,IACpB,KAAA,EAAO,MAAM,KAAA,CAAM,MAAA;AAAA,IACnB,IAAA,EAAM,MAAM,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,CAAA,CAAE;AAAA,GAC3C;AACF;AAEA,SAAS,GAAA,CAAI,GAAW,CAAA,EAAmB;AACzC,EAAA,OAAO,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA;AAC1B;;;ACpHO,SAAS,eAAe,OAAA,EAAwB;AACrD,EAAA,MAAM,GAAA,GAAM,OAAA,CACT,OAAA,CAAQ,QAAQ,EAChB,WAAA,CAAY,0DAAqD,CAAA,CACjE,QAAA,CAAS,QAAA,EAAU,gBAAgB,CAAA,CACnC,MAAA,CAAO,eAAe,WAAA,EAAa,GAAG,CAAA,CACtC,MAAA,CAAO,SAAA,EAAW,mDAAmD,CAAA,CACrE,MAAA,CAAO,sBAAsB,yCAAyC,CAAA,CACtE,MAAA,CAAO,YAAA,EAAc,uCAAuC,CAAA,CAC5D,MAAA,CAAO,SAAyB,MAAc,IAAA,EAAoF;AACjI,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,YAAA,CAAa,MAAM,CAAA;AACrC,IAAA,MAAM,EAAE,IAAA,EAAM,UAAA,EAAW,GAAI,UAAA,CAAW,KAAA,EAAO,IAAA,EAAM,IAAA,CAAK,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,IAAI,IAAI,MAAS,CAAA;AAC9F,IAAA,IAAI,CAAC,IAAA,EAAM,MAAM,cAAA,CAAe,CAAA,CAAA,EAAI,IAAI,CAAA,EAAA,EAAK,UAAA,CAAW,MAAA,GAAS,cAAA,GAAiB,WAAW,CAAA,CAAA,EAAI,UAAU,CAAA;AAE3G,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,IAAK,CAAA;AACpC,IAAA,MAAM,SAAS,QAAA,CAAS,KAAA,EAAO,KAAK,EAAA,EAAI,EAAE,OAAO,CAAA;AACjD,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,cAAA;AACrC,IAAA,MAAM,KAAK,SAAA,GAAY,UAAA,CAAW,OAAO,IAAA,CAAK,EAAA,EAAI,KAAK,CAAA,GAAI,MAAA;AAC3D,IAAA,MAAM,MAAA,GAAS,KAAK,YAAA,CAAa,MAAA,CAAO,MAAM,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,GAAI,MAAA;AAE9D,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAA,CAAK;AAAA,QACH,GAAG,MAAA;AAAA,QACH,KAAA,EAAO,EAAA,GACH,EAAE,KAAA,EAAO,GAAG,iBAAA,EAAmB,OAAA,EAAS,MAAA,EAAQ,OAAA,CAAQ,GAAG,iBAAiB,CAAA,EAAG,gBAAA,EAAkB,EAAA,CAAG,kBAAiB,GACrH;AAAA,OACL,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,WAAW,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACzD,MAAA,IAAA,CAAK,CAAA,YAAA,EAAe,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,WAAA,EAAS,MAAA,CAAO,MAAM,CAAA,SAAA,EAAY,MAAA,CAAO,UAAU,CAAA,0BAAA,EAAwB,MAAA,CAAO,KAAK,CAAA,CAAA,CAAG,CAAA;AACpI,MAAA,MAAM,OAAA,GAAU,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,GAAG,EAAE,CAAA;AAC3C,MAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,QAAA,IAAA,CAAK,CAAA,IAAA,EAAO,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,EAAI,CAAA,CAAE,KAAK,CAAA,CAAE,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,CAAA,WAAA,EAAW,CAAA,CAAE,UAAA,CAAW,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA;AAAA,MAChH;AACA,MAAA,IAAI,MAAA,CAAO,QAAA,CAAS,MAAA,GAAS,OAAA,CAAQ,QAAQ,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,cAAA,EAAY,OAAO,QAAA,CAAS,MAAA,GAAS,OAAA,CAAQ,MAAM,oBAAoB,CAAC,CAAA;AAChI,MAAA,IAAI,MAAA,CAAO,iBAAA,GAAoB,CAAA,EAAG,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,yBAAA,EAA4B,MAAA,CAAO,iBAAA,CAAkB,OAAA,CAAQ,CAAC,CAAC,qCAAqC,CAAC,CAAA;AAClJ,MAAA,IAAI,EAAA,EAAI;AACN,QAAA,IAAA,CAAK,KAAK,CAAA,CAAE,IAAA,CAAK,iBAAiB,EAAA,CAAG,iBAAA,CAAkB,MAAM,CAAA,CAAA,CAAG,CAAC,WAAM,EAAA,CAAG,iBAAA,CAAkB,KAAK,QAAK,CAAA,IAAK,EAAE,GAAA,CAAI,YAAY,CAAC,CAAA,CAAE,CAAA;AAChI,QAAA,IAAI,MAAA,IAAU,EAAA,CAAG,iBAAA,CAAkB,MAAA,OAAa,CAAA,CAAE,GAAA,CAAI,CAAA,MAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,EAAA,CAAG,iBAAiB,CAAC,EAAE,CAAC,CAAA;AACtG,QAAA,IAAI,EAAA,CAAG,gBAAA,CAAiB,MAAA,EAAQ,IAAA,CAAK,CAAA,CAAE,MAAA,CAAO,CAAA,EAAA,EAAK,EAAA,CAAG,gBAAA,CAAiB,MAAM,CAAA,8BAAA,CAAgC,CAAC,CAAA;AAAA,MAChH;AAAA,IACF;AAEA,IAAA,IAAI,KAAK,cAAA,IAAkB,EAAA,IAAM,EAAA,CAAG,gBAAA,CAAiB,SAAS,CAAA,EAAG;AAC/D,MAAA,MAAM,IAAI,QAAA;AAAA,QACR,GAAG,EAAA,CAAG,gBAAA,CAAiB,MAAM,CAAA,gCAAA,EAAmC,EAAA,CAAG,iBAAiB,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,QAC7H,QAAA,CAAS;AAAA,OACX;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,GAAG,CAAA;AACxB;;;AChDA,IAAM,oBAAA,GAAuB,GAAA;AAkBtB,SAAS,iBAAiB,OAAA,EAAwB;AACvD,EAAA,MAAM,GAAA,GAAM,OAAA,CACT,OAAA,CAAQ,UAAU,EAClB,WAAA,CAAY,uDAAuD,CAAA,CACnE,MAAA,CAAO,mBAAmB,wBAAA,EAA0B,IAAI,CAAA,CACxD,MAAA,CAAO,SAAyB,IAAA,EAA0B;AACzD,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,YAAA,CAAa,MAAM,CAAA;AACrC,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,IAAK,EAAA;AAEpC,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,KAAA,EAAO,KAAK,CAAA;AACxC,IAAA,MAAM,EAAE,KAAA,EAAO,UAAA,EAAY,MAAA,EAAO,GAAI,MAAA;AACtC,IAAA,MAAM,SAAA,GAAA,CAAa,KAAA,CAAM,QAAA,IAAY,EAAC,EAAG,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAA,CAAE,KAAA,EAAO,CAAC,CAAA;AAExE,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAA,CAAK;AAAA,QACH,oBAAA,EAAsB,SAAA;AAAA,QACtB,KAAA,EAAO,UAAA;AAAA,QACP,OAAO,KAAA,CAAM,MAAA;AAAA,QACb,uBAAA,EAAyB,SAAS,oBAAA,GAAuB,IAAA;AAAA,QACzD,GAAA,EAAK,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,UACrB,EAAA,EAAI,EAAE,IAAA,CAAK,EAAA;AAAA,UACX,IAAA,EAAM,EAAE,IAAA,CAAK,aAAA;AAAA,UACb,IAAA,EAAM,EAAE,IAAA,CAAK,IAAA;AAAA,UACb,IAAA,EAAM,EAAE,IAAA,CAAK,IAAA;AAAA,UACb,IAAA,EAAM,CAAA,CAAE,IAAA,CAAK,IAAA,CAAK,KAAA;AAAA,UAClB,UAAA,EAAY,EAAE,IAAA,CAAK,UAAA;AAAA,UACnB,aAAa,CAAA,CAAE,WAAA;AAAA,UACf,QAAQ,CAAA,CAAE,MAAA;AAAA,UACV,YAAY,CAAA,CAAE,UAAA;AAAA,UACd,YAAY,CAAA,CAAE,IAAA,CAAK,GAAA,CAAI,CAAC,OAAO,EAAE,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,MAAM,CAAA,CAAE,IAAA,EAAM,KAAA,EAAO,CAAA,CAAE,OAAM,CAAE;AAAA,SAChF,CAAE;AAAA,OACH,CAAA;AACD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,cAAc,CAAA,EAAG;AACnB,MAAA,IAAA;AAAA,QACE,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,aAAa,CAAC,CAAA,uFAAA;AAAA,OAE1B;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAA;AAAA,MACE,GAAG,CAAA,CAAE,IAAA,CAAK,aAAa,CAAC,SAAM,CAAA,CAAE,IAAA,CAAK,MAAA,CAAO,SAAS,CAAC,CAAC,CAAA,4BAAA,EAClD,UAAU,CAAA,kBAAA,EAAkB,MAAM,MAAM,CAAA,gBAAA;AAAA,KAC/C;AACA,IAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,MAAA,IAAA;AAAA,QACE,KAAK,CAAA,CAAE,MAAA,CAAOC,IAAAA,CAAI,MAAA,CAAO,EAAE,WAAW,CAAA,EAAG,CAAC,CAAC,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,CAAK,CAAA,CAAE,KAAK,aAAa,CAAC,CAAA,EAAA,CAAA,GAC3E,CAAA,CAAE,IAAI,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,IAAI,IAAI,CAAA,CAAE,IAAA,CAAK,IAAA,CAAK,KAAK,oBAAiB,CAAA,CAAE,IAAA,CAAK,WAAW,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAE;AAAA,OAC5F;AACA,MAAA,IAAA,CAAK,CAAA,SAAA,EAAY,CAAA,CAAE,GAAA,CAAI,iBAAiB,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,IAC9E;AACA,IAAA,IAAA;AAAA,MACE,CAAA,CAAE,GAAA;AAAA,QACA,CAAA,yFAAA;AAAA;AACF,KACF;AACA,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,IAAA;AAAA,QACE,CAAA,CAAE,GAAA;AAAA,UACA,CAAA,QAAA,EAAW,UAAU,CAAA,mCAAA,EAAsC,oBAAoB,CAAA,iFAAA;AAAA;AAEjF,OACF;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,GAAG,CAAA;AACxB;AAQO,SAAS,YAAA,CAAa,OAAgB,KAAA,EAA+B;AAC1E,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,QAAA,IAAY,EAAC;AACpC,EAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAO,EAAE,KAAA,EAAO,EAAC,EAAG,UAAA,EAAY,CAAA,EAAG,MAAA,EAAQ,KAAA,EAAM;AAE5E,EAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,EAAA,EAAI,CAAC,CAAU,CAAC,CAAA;AAC/D,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAuB;AAC3C,EAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA;AAC/B,IAAA,IAAI,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AAAA,iBACR,GAAA,CAAI,CAAA,CAAE,IAAA,EAAM,CAAC,CAAC,CAAC,CAAA;AAAA,EAC9B;AAIA,EAAA,MAAM,aAAoE,EAAC;AAC3E,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,OAAA,EAAS;AAClC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA;AAC1B,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,UAAA,CAAW,IAAA,CAAK,EAAE,IAAA,EAAM,IAAA,EAAM,OAAO,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,EAAG,MAAM,CAAA,GAAI,CAAA,CAAE,KAAA,EAAO,CAAC,GAAG,CAAA;AAAA,EAC9E;AACA,EAAA,UAAA,CAAW,IAAA;AAAA,IACT,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,KAAK,UAAA,GAAa,CAAA,CAAE,IAAA,CAAK,UAAA,IAAc,EAAE,IAAA,CAAK,EAAA,CAAG,aAAA,CAAc,CAAA,CAAE,KAAK,EAAE;AAAA,GACtF;AAEA,EAAA,MAAM,MAAA,GAAiB,WAAW,KAAA,CAAM,CAAA,EAAG,oBAAoB,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,KAAS;AAC7E,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,KAAA,EAAO,IAAA,CAAK,KAAK,EAAE,CAAA;AAC3C,IAAA,OAAO;AAAA,MACL,GAAG,IAAA;AAAA,MACH,WAAA,EAAa,OAAO,QAAA,CAAS,MAAA;AAAA,MAC7B,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,YAAY,MAAA,CAAO;AAAA,KACrB;AAAA,EACF,CAAC,CAAA;AAED,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,CAAC,GAAG,CAAA,KACF,CAAA,CAAE,cAAc,CAAA,CAAE,WAAA,IAClB,CAAA,CAAE,IAAA,CAAK,UAAA,GAAa,CAAA,CAAE,KAAK,UAAA,IAC3B,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAA,IACZ,CAAA,CAAE,KAAK,EAAA,CAAG,aAAA,CAAc,CAAA,CAAE,IAAA,CAAK,EAAE;AAAA,GACrC;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA;AAAA,IAC5B,YAAY,UAAA,CAAW,MAAA;AAAA,IACvB,MAAA,EAAQ,WAAW,MAAA,GAAS;AAAA,GAC9B;AACF;AAEA,SAAS,OAAO,CAAA,EAAoB;AAClC,EAAA,MAAM,QAAQ,CAAA,CAAE,KAAA,GAAQ,IAAI,CAAA,KAAA,EAAK,CAAA,CAAE,KAAK,CAAA,CAAA,GAAK,EAAA;AAC7C,EAAA,MAAM,OAAO,CAAA,CAAE,IAAA,KAAS,SAAS,EAAA,GAAK,CAAA,EAAA,EAAK,EAAE,IAAI,CAAA,CAAA,CAAA;AACjD,EAAA,OAAO,GAAG,CAAA,CAAE,IAAI,CAAA,EAAG,IAAI,GAAG,KAAK,CAAA,CAAA;AACjC;AAEA,SAASA,IAAAA,CAAI,GAAW,CAAA,EAAmB;AACzC,EAAA,OAAO,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA;AAC1B;ACzJO,SAAS,cAAc,OAAA,EAAwB;AACpD,EAAA,MAAM,MAAM,OAAA,CACT,OAAA,CAAQ,OAAO,CAAA,CACf,YAAY,iHAA4G,CAAA,CACxH,MAAA,CAAO,QAAA,EAAU,6CAA6C,CAAA,CAC9D,MAAA,CAAO,YAAA,EAAc,iBAAA,EAAmB,MAAM,CAAA,CAC9C,MAAA,CAAO,YAAA,EAAc,iBAAA,EAAmB,WAAW,CAAA,CACnD,MAAA,CAAO,WAAA,EAAa,kEAAkE,EACtF,MAAA,CAAO,SAAA,EAAW,gGAAgG,CAAA,CAClH,OAAO,cAAA,EAAgB,uEAAkE,CAAA,CACzF,MAAA,CAAO,eAA+B,IAAA,EAA+G;AACpJ,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,IAAA,GAAO,OAAO,MAAM,CAAA;AAC1B,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,KAAA,IAAS,gBAAA,CAAiB,IAAI,CAAA;AAEvD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,KAAY,KAAA,IAAS,CAAC,MAAA,CAAO,KAAA;AAClD,IAAA,MAAM,SAAA,GAA0B;AAAA,MAC9B,OAAA,EAAS,KAAK,OAAA,KAAY,IAAA;AAAA,MAC1B,KAAA,EAAO,OAAO,KAAA,KAAU,IAAA;AAAA,MACxB,KAAA,EAAO,KAAK,KAAA,KAAU,IAAA;AAAA,MACtB;AAAA,KACF;AAEA,IAAA,IAAI,CAAIC,GAAA,CAAA,UAAA,CAAW,SAAS,CAAA,EAAG;AAC7B,MAAA,MAAM,IAAI,QAAA;AAAA,QACR,mBAAmB,SAAS,CAAA,qCAAA,CAAA;AAAA,QAC5B,QAAA,CAAS;AAAA,OACX;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,GAAY,UAAU,cAAA,GAAiB,UAAA;AAC7C,IAAA,IAAI,KAAK,IAAA,EAAM;AACb,MAAA,MAAM,SAAA,CAAU,SAAA,EAAW,IAAA,CAAK,IAAA,IAAQ,WAAA,EAAa,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,IAAK,IAAA,EAAM,SAAA,EAAW,SAAS,CAAA;AAAA,IACtG,CAAA,MAAO;AAEL,MAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,wCAAA,EAAwC,SAAS,4CAA4C,CAAC,CAAA;AACzG,MAAA,MAAM,UAAA,CAAW,WAAW,SAAS,CAAA;AAAA,IACvC;AAAA,EACF,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,GAAG,CAAA;AACxB;AAEA,eAAe,SAAA,CAAU,SAAA,EAAmB,IAAA,EAAc,IAAA,EAAc,MAAoB,SAAA,EAAkC;AAC5H,EAAA,MAAM,EAAE,YAAA,EAAc,UAAA,EAAW,GAAI,MAAM,OAAO,MAAW,CAAA;AAC7D,EAAA,MAAM,EAAE,6BAAA,EAA8B,GAAI,MAAM,OAC9C,oDACF,CAAA;AAKA,EAAA,MAAM,SAAS,IAAI,WAAA,CAAY,SAAA,EAAW,IAAA,CAAK,YAAY,KAAK,CAAA;AAEhE,EAAA,MAAM,UAAA,GAAa,UAAA,CAAW,OAAO,GAAA,EAAK,GAAA,KAAQ;AAChD,IAAA,IAAI,GAAA,CAAI,QAAQ,MAAA,EAAQ;AACtB,MAAA,GAAA,CAAI,SAAA,CAAU,GAAG,CAAA,CAAE,GAAA,CAAI,WAAW,CAAA;AAClC,MAAA;AAAA,IACF;AACA,IAAA,IAAI;AAIF,MAAA,MAAM,YAAY,IAAI,6BAAA,CAA8B,EAAE,kBAAA,EAAoB,QAAW,CAAA;AACrF,MAAA,MAAM,MAAA,GAAS,YAAA,CAAa,MAAA,EAAQ,IAAI,CAAA;AACxC,MAAA,GAAA,CAAI,EAAA,CAAG,SAAS,MAAM;AACpB,QAAA,KAAK,UAAU,KAAA,EAAM;AACrB,QAAA,KAAK,OAAO,KAAA,EAAM;AAAA,MACpB,CAAC,CAAA;AACD,MAAA,MAAM,MAAA,CAAO,QAAQ,SAAS,CAAA;AAC9B,MAAA,MAAM,SAAA,CAAU,aAAA,CAAc,GAAA,EAAK,GAAG,CAAA;AAAA,IACxC,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,CAAC,IAAI,WAAA,EAAa,GAAA,CAAI,UAAU,GAAG,CAAA,CAAE,IAAI,gBAAgB,CAAA;AAC7D,MAAA,IAAA,CAAK,EAAE,GAAA,CAAI,CAAA,yBAAA,EAA6B,GAAA,CAAc,OAAO,EAAE,CAAC,CAAA;AAAA,IAClE;AAAA,EACF,CAAC,CAAA;AAED,EAAA,MAAM,IAAI,QAAc,CAACV,SAAAA,KAAY,WAAW,MAAA,CAAO,IAAA,EAAM,IAAA,EAAMA,SAAO,CAAC,CAAA;AAC3E,EAAA,IAAA,CAAK,CAAA,CAAE,IAAI,CAAA,6BAAA,EAA6B,IAAI,IAAI,IAAI,CAAA,wBAAA,EAA2B,SAAS,CAAA,CAAA,CAAG,CAAC,CAAA;AAE5F,EAAA,MAAM,IAAI,QAAe,MAAM;AAAA,EAAC,CAAC,CAAA;AACnC;;;AC5FA,IAAM,gBAAA,GAAmB,GAAA;AAQlB,SAAS,gBAAgB,OAAA,EAAwB;AACtD,EAAA,MAAM,UAAU,OAAA,CACb,OAAA,CAAQ,SAAS,CAAA,CACjB,YAAY,8DAA8D,CAAA,CAC1E,QAAA,CAAS,YAAA,EAAc,kBAAkB,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,EAAE,CAAA,CACjF,MAAA,CAAO,OAAA,EAAS,uCAAuC,EACvD,MAAA,CAAO,QAAA,EAAU,kCAAkC,CAAA,CACnD,OAAO,WAAA,EAAa,yBAAyB,EAC7C,MAAA,CAAO,SAAyB,OAAiB,IAAA,EAAyD;AACzG,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,IAAA,GAAO,OAAO,MAAM,CAAA;AAE1B,IAAA,IAAI,KAAK,IAAA,EAAM;AACb,MAAA,IAAI,OAAO,IAAA,EAAM;AACf,QAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,EAAA,EAAI,CAAA,CAAE,EAAA,EAAI,KAAA,EAAO,CAAA,CAAE,KAAA,EAAO,GAAA,EAAK,CAAC,CAAC,CAAA,CAAE,GAAA,EAAK,KAAA,EAAO,CAAC,CAAC,CAAA,CAAE,KAAA,EAAO,KAAA,EAAO,CAAC,CAAC,CAAA,CAAE,KAAA,EAAM,CAAE,CAAC,CAAA;AAAA,MAC9G,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,YAAY,CAAC,CAAA,0BAAA,CAAyB,CAAA;AACrD,QAAA,MAAMS,IAAAA,GAAM,IAAA,CAAK,GAAA,CAAI,GAAG,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,CAAG,MAAM,CAAC,CAAA,GAAI,CAAA;AAC9D,QAAA,KAAA,MAAW,KAAK,UAAA,EAAY;AAC1B,UAAA,IAAA,CAAK,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,CAAK,CAAA,CAAE,GAAG,MAAA,CAAOA,IAAG,CAAC,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,KAAK,CAAA,EAAA,EAAK,EAAE,GAAA,CAAI,CAAA,IAAA,EAAO,CAAA,CAAE,GAAA,GAAM,QAAA,GAAM,QAAG,CAAA,OAAA,EAAU,CAAA,CAAE,QAAQ,QAAA,GAAM,QAAG,CAAA,OAAA,EAAU,CAAA,CAAE,KAAA,GAAQ,QAAA,GAAM,QAAG,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA;AAAA,QACjJ;AAAA,MACF;AACA,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,UAAU,IAAA,CAAK,GAAA,GAAM,UAAA,GAAa,KAAA,CAAM,IAAIT,QAAO,CAAA;AACzD,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,MAAM,WAAW,oEAAoE,CAAA;AAE/G,IAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,IAAA,EAAM,MAAA,CAAO,KAAK,CAAA;AAC1C,IAAA,MAAM,SAAA,GAAY,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,MAAM,CAAA,CAAE,MAAA,GAAS,CAAA;AAChF,IAAA,MAAM,SAAA,GAAY,KAAA,KAAU,IAAA,IAAQ,SAAA,GAAY,KAAK,SAAA,GAAY,gBAAA;AAGjE,IAAA,MAAM,SAAS,iBAAA,EAAkB;AACjC,IAAA,MAAM,OAAA,GAAU,QAAQ,GAAA,CAAI,CAAC,OAAO,EAAE,EAAA,EAAI,EAAE,EAAA,EAAI,GAAG,iBAAiB,CAAA,EAAG,EAAE,MAAM,IAAA,EAAM,IAAA,CAAK,MAAM,SAAA,EAAW,MAAA,EAAQ,CAAA,EAAE,CAAE,CAAA;AAIvH,IAAA,MAAM,SAAA,GAAY,sBAAsB,IAAI,CAAA;AAE5C,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAA,CAAK,EAAE,IAAA,EAAM,SAAA,EAAW,WAAW,MAAA,EAAQ,EAAE,SAAS,MAAA,CAAO,OAAA,EAAS,IAAA,EAAM,MAAA,CAAO,MAAM,IAAA,EAAM,MAAA,CAAO,QAAQ,IAAA,EAAK,EAAG,SAAS,CAAA;AAC/H,MAAA;AAAA,IACF;AACA,IAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,MAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,KAAA,CAAM,QAAG,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,IAAA,CAAK,CAAA,CAAE,EAAE,CAAC,CAAA,cAAA,EAAY,CAAA,CAAE,MAAM,IAAA,CAAK,IAAI,CAAC,CAAA,EAAG,CAAA,CAAE,OAAA,CAAQ,MAAA,GAAS,CAAA,CAAE,IAAI,CAAA,UAAA,EAAa,CAAA,CAAE,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA,GAAI,EAAE,CAAA,CAAE,CAAA;AAAA,IAC5I;AACA,IAAA,IAAI,OAAO,IAAA,IAAQ,OAAA,CAAQ,KAAK,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA,EAAG,IAAA,CAAK,CAAA,EAAG,EAAE,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,IAAI,CAAA,CAAE,CAAA;AACtF,IAAA,IAAI,WAAW,IAAA,CAAK,CAAA,CAAE,IAAI,CAAA,oBAAA,EAAuB,SAAS,gFAA2E,CAAC,CAAA;AACtI,IAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,QAAA,EAAW,SAAS,mFAA8E,CAAC,CAAA;AAC9G,IAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,gFAAgF,CAAC,CAAA;AAAA,EAC9F,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,OAAO,CAAA;AAE1B,EAAA,MAAM,YAAY,OAAA,CACf,OAAA,CAAQ,WAAW,CAAA,CACnB,WAAA,CAAY,gCAAgC,CAAA,CAC5C,QAAA,CAAS,cAAc,eAAe,CAAA,CACtC,OAAO,SAAA,EAAW,4BAA4B,EAC9C,MAAA,CAAO,SAAyB,OAAiB,IAAA,EAA2B;AAC3E,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,IAAA,GAAO,OAAO,MAAM,CAAA;AAC1B,IAAA,MAAM,OAAA,GAAU,MAAM,GAAA,CAAIA,QAAO,EAAE,GAAA,CAAI,CAAC,OAAO,EAAE,EAAA,EAAI,EAAE,EAAA,EAAI,OAAA,EAAS,mBAAmB,CAAA,EAAG,IAAA,EAAM,CAAC,CAAC,IAAA,CAAK,KAAK,CAAA,EAAE,CAAE,CAAA;AAChH,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAA,CAAK,EAAE,IAAA,EAAM,OAAA,EAAS,CAAA;AACtB,MAAA;AAAA,IACF;AACA,IAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,MAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,KAAA,CAAM,QAAG,CAAC,IAAI,CAAA,CAAE,IAAA,CAAK,CAAA,CAAE,EAAE,CAAC,CAAA,gBAAA,EAAc,EAAE,OAAA,CAAQ,MAAA,GAAS,CAAA,CAAE,OAAA,CAAQ,IAAA,CAAK,IAAI,IAAI,CAAA,CAAE,GAAA,CAAI,yBAAyB,CAAC,CAAA,CAAE,CAAA;AAAA,IAChI;AAAA,EACF,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,SAAS,CAAA;AAC9B;AAEA,SAASA,SAAQ,EAAA,EAAY;AAC3B,EAAA,MAAM,CAAA,GAAI,cAAc,EAAE,CAAA;AAC1B,EAAA,IAAI,CAAC,CAAA,EAAG;AACN,IAAA,MAAM,OAAO,UAAA,CAAW,MAAA;AAAA,MACtB,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,CAAG,UAAA,CAAW,EAAE,CAAA,IAAK,EAAA,CAAG,UAAA,CAAW,CAAA,CAAE,EAAE,CAAA,IAAK,EAAE,EAAA,CAAG,QAAA,CAAS,EAAE,CAAA,IAAK,CAAA,CAAE,KAAA,CAAM,aAAY,CAAE,QAAA,CAAS,EAAA,CAAG,WAAA,EAAa;AAAA,KAC3H,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AACjB,IAAA,MAAM,IAAA,GAAO,KAAK,MAAA,GAAS,CAAA,eAAA,EAAkB,KAAK,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA,GAAM,EAAA;AAClE,IAAA,MAAM,IAAI,QAAA;AAAA,MACR,CAAA,mBAAA,EAAsB,EAAE,CAAA,EAAA,EAAK,IAAI,eAAe,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,4BAAA,CAAA;AAAA,MACtF,QAAA,CAAS;AAAA,KACX;AAAA,EACF;AACA,EAAA,OAAO,CAAA;AACT;AClFA,IAAM,UAAA,GAAa,YAAA;AACnB,IAAM,QAAA,GAAW,UAAA;AAEV,SAAS,cAAc,OAAA,EAAwB;AACpD,EAAA,MAAM,MAAM,OAAA,CACT,OAAA,CAAQ,OAAO,CAAA,CACf,WAAA,CAAY,8DAA8D,CAAA,CAC1E,MAAA,CAAO,QAAA,EAAU,mCAAmC,EACpD,MAAA,CAAO,WAAA,EAAa,gEAAgE,CAAA,CACpF,MAAA,CAAO,SAAyB,IAAA,EAA6C;AAC5E,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,IAAA,GAAO,OAAO,MAAM,CAAA;AAC1B,IAAA,MAAM,MAAA,GAAcW,IAAA,CAAA,IAAA,CAAK,IAAA,EAAM,MAAM,CAAA;AACrC,IAAA,IAAI,CAAI,GAAA,CAAA,UAAA,CAAW,MAAM,CAAA,EAAG;AAC1B,MAAA,MAAM,IAAI,QAAA,CAAS,8DAAA,EAA2D,QAAA,CAAS,WAAW,CAAA;AAAA,IACpG;AAEA,IAAA,IAAI,KAAK,IAAA,EAAM;AACb,MAAA,IAAA,CAAK,IAAI,CAAA;AACT,MAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,UAAU,CAAC,IAAI,CAAA,CAAE,GAAA,CAAI,QAAQ,CAAC,CAAA,iDAAA,CAAgD,CAAA;AAC7F,MAAA;AAAA,IACF;AAEA,IAAA,sBAAA,CAAuB,IAAA,EAAM,CAAC,CAAC,IAAA,CAAK,OAAO,CAAA;AAC3C,IAAA,kBAAA,CAAmB,IAAI,CAAA;AACvB,IAAA,oBAAA,CAAqB,IAAI,CAAA;AACzB,IAAA,oBAAA,CAAqB,IAAI,CAAA;AAEzB,IAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,UAAU,CAAC,CAAA,gDAAA,CAA+C,CAAA;AACzE,IAAA,IAAA,CAAK,CAAA,EAAA,EAAK,CAAA,CAAE,KAAA,CAAM,QAAG,CAAC,CAAA,gFAAA,CAAkF,CAAA;AACxG,IAAA,IAAA,CAAK,CAAA,EAAA,EAAK,CAAA,CAAE,KAAA,CAAM,QAAG,CAAC,CAAA,oEAAA,CAAsE,CAAA;AAC5F,IAAA,IAAA,CAAK,CAAA,EAAA,EAAK,CAAA,CAAE,KAAA,CAAM,QAAG,CAAC,CAAA,0EAAA,CAA4E,CAAA;AAClG,IAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,oEAAoE,CAAC,CAAA;AAAA,EAClF,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,GAAG,CAAA;AACxB;AAEA,SAAS,sBAAA,CAAuB,MAAc,OAAA,EAAwB;AACpE,EAAA,MAAM,GAAA,GAAWA,IAAA,CAAA,IAAA,CAAK,IAAA,EAAM,WAAW,CAAA;AACvC,EAAG,GAAA,CAAA,SAAA,CAAU,GAAA,EAAK,EAAE,SAAA,EAAW,MAAM,CAAA;AACrC,EAAA,MAAM,KAAA,GAAQ,CAAC,2EAAA,EAAwE,QAAA,EAAU,aAAa,CAAA;AAC9G,EAAA,IAAI,CAAC,OAAA,EAAS,KAAA,CAAM,IAAA,CAAK,cAAc,iBAAiB,CAAA;AACxD,EAAG,GAAA,CAAA,aAAA,CAAmBA,UAAK,GAAA,EAAK,YAAY,GAAG,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC;AAAA,CAAI,CAAA;AACxE;AAEA,SAAS,mBAAmB,IAAA,EAAoB;AAC9C,EAAA,MAAM,IAAA,GAAYA,IAAA,CAAA,IAAA,CAAK,IAAA,EAAM,gBAAgB,CAAA;AAC7C,EAAA,MAAM,IAAA,GAAO,+BAAA;AACb,EAAA,IAAI,UAAa,GAAA,CAAA,UAAA,CAAW,IAAI,IAAO,GAAA,CAAA,YAAA,CAAa,IAAA,EAAM,MAAM,CAAA,GAAI,EAAA;AACpE,EAAA,IAAI,CAAC,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAK,KAAM,IAAI,CAAA,EAAG;AACvD,IAAA,OAAA,GAAU,QAAQ,MAAA,GAAS,CAAA,EAAG,QAAQ,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAC;AAAA,EAAK,IAAI;AAAA,CAAA,GAAO,GAAG,IAAI;AAAA,CAAA;AAChF,IAAG,GAAA,CAAA,aAAA,CAAc,MAAM,OAAO,CAAA;AAAA,EAChC;AACF;AAEA,SAAS,qBAAqB,IAAA,EAAoB;AAEhD,EAAA,GAAA,CAAI,IAAA,EAAM,CAAC,QAAA,EAAU,eAAA,EAAiB,gCAAgC,CAAC,CAAA;AACvE,EAAA,GAAA,CAAI,IAAA,EAAM,CAAC,QAAA,EAAU,iBAAA,EAAmB,sDAAsD,CAAC,CAAA;AACjG;AAEA,SAAS,qBAAqB,IAAA,EAAoB;AAChD,EAAA,MAAM,QAAA,GAAW,QAAQ,IAAI,CAAA;AAC7B,EAAG,GAAA,CAAA,SAAA,CAAU,QAAA,EAAU,EAAE,SAAA,EAAW,MAAM,CAAA;AAC1C,EAAA,MAAM,IAAA,GAAYA,IAAA,CAAA,IAAA,CAAK,QAAA,EAAU,YAAY,CAAA;AAC7C,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,UAAA;AAAA,IACA,wCAAA;AAAA,IACA,oCAAA;AAAA,IACA,wDAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,IAAI,CAAA;AAEX,EAAA,IAAI,UAAa,GAAA,CAAA,UAAA,CAAW,IAAI,IAAO,GAAA,CAAA,YAAA,CAAa,IAAA,EAAM,MAAM,CAAA,GAAI,aAAA;AACpE,EAAA,MAAM,EAAA,GAAK,IAAI,MAAA,CAAO,CAAA,EAAG,QAAA,CAAS,UAAU,CAAC,CAAA,UAAA,EAAa,QAAA,CAAS,QAAQ,CAAC,CAAA,CAAE,CAAA;AAC9E,EAAA,IAAI,EAAA,CAAG,KAAK,OAAO,CAAA,YAAa,OAAA,CAAQ,OAAA,CAAQ,IAAI,KAAK,CAAA;AAAA,iBAC1C,CAAA,EAAG,OAAA,CAAQ,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAC;;AAAA,EAAO,KAAK;AAAA,CAAA;AACzD,EAAA,IAAI,CAAC,OAAA,CAAQ,UAAA,CAAW,IAAI,GAAG,OAAA,GAAU,CAAA;AAAA,EAAc,OAAO,CAAA,CAAA;AAC9D,EAAG,GAAA,CAAA,aAAA,CAAc,MAAM,OAAO,CAAA;AAC9B,EAAG,GAAA,CAAA,SAAA,CAAU,MAAM,GAAK,CAAA;AAC1B;AAEA,SAAS,KAAK,IAAA,EAAoB;AAEhC,EAAA,MAAM,QAAA,GAAgBA,IAAA,CAAA,IAAA,CAAK,OAAA,CAAQ,IAAI,GAAG,YAAY,CAAA;AACtD,EAAA,IAAO,GAAA,CAAA,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3B,IAAA,MAAM,EAAA,GAAK,IAAI,MAAA,CAAO,CAAA,IAAA,EAAO,QAAA,CAAS,UAAU,CAAC,CAAA,UAAA,EAAa,QAAA,CAAS,QAAQ,CAAC,CAAA,IAAA,CAAM,CAAA;AACtF,IAAA,MAAMC,QAAU,GAAA,CAAA,YAAA,CAAa,QAAA,EAAU,MAAM,CAAA,CAAE,OAAA,CAAQ,IAAI,IAAI,CAAA;AAC/D,IAAA,IAAIA,MAAK,IAAA,EAAK,KAAM,WAAA,EAAgB,WAAO,QAAQ,CAAA;AAAA,SAC3C,GAAA,CAAA,aAAA,CAAc,QAAA,EAAUA,KAAI,CAAA;AAAA,EACtC;AAEA,EAAA,MAAM,IAAA,GAAYD,IAAA,CAAA,IAAA,CAAK,IAAA,EAAM,gBAAgB,CAAA;AAC7C,EAAA,IAAO,GAAA,CAAA,UAAA,CAAW,IAAI,CAAA,EAAG;AACvB,IAAA,MAAMC,QACH,GAAA,CAAA,YAAA,CAAa,IAAA,EAAM,MAAM,CAAA,CACzB,MAAM,IAAI,CAAA,CACV,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,IAAA,OAAW,+BAA+B,CAAA,CAC1D,KAAK,IAAI,CAAA;AACZ,IAAG,GAAA,CAAA,aAAA,CAAc,MAAMA,KAAI,CAAA;AAAA,EAC7B;AAEA,EAAA,IAAI;AACF,IAAA,GAAA,CAAI,IAAA,EAAM,CAAC,QAAA,EAAU,kBAAA,EAAoB,UAAU,CAAC,CAAA;AAAA,EACtD,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAEA,SAAS,QAAQ,IAAA,EAAsB;AAErC,EAAA,IAAI;AACF,IAAA,MAAM,UAAA,GAAa,IAAI,IAAA,EAAM,CAAC,UAAU,OAAA,EAAS,gBAAgB,CAAC,CAAA,CAAE,IAAA,EAAK;AACzE,IAAA,IAAI,UAAA,EAAY,OAAYD,IAAA,CAAA,OAAA,CAAQ,IAAA,EAAM,UAAU,CAAA;AAAA,EACtD,CAAA,CAAA,MAAQ;AAAA,EAER;AACA,EAAA,OAAYA,IAAA,CAAA,IAAA,CAAK,IAAA,EAAM,MAAA,EAAQ,OAAO,CAAA;AACxC;AAEA,SAAS,GAAA,CAAI,MAAc,IAAA,EAAwB;AACjD,EAAA,OAAO,YAAA,CAAa,OAAO,IAAA,EAAM,EAAE,KAAK,IAAA,EAAM,QAAA,EAAU,QAAQ,CAAA;AAClE;AAEA,SAAS,SAAS,CAAA,EAAmB;AACnC,EAAA,OAAO,CAAA,CAAE,OAAA,CAAQ,qBAAA,EAAuB,MAAM,CAAA;AAChD;AC1HA,IAAM,GAAA,GAAM,0BAAA;AAwBL,SAAS,kBAAkB,OAAA,EAAwB;AACxD,EAAA,MAAM,GAAA,GAAM,OAAA,CACT,OAAA,CAAQ,WAAW,EACnB,WAAA,CAAY,4EAA4E,CAAA,CACxF,MAAA,CAAO,gBAAgB,6BAAA,EAA+B,MAAM,CAAA,CAC5D,MAAA,CAAO,eAA+B,IAAA,EAA2B;AAChE,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,IAAA,GAAO,OAAO,MAAM,CAAA;AAC1B,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,IAAK,GAAA;AACtC,IAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,CAAkB,IAAA,EAAM,MAAM,CAAA;AAEnD,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAA,CAAK,MAAM,CAAA;AACX,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,YAAY,MAAA,EAAQ,WAAA,EAAa,gBAAe,GAAI,MAAA;AACzE,IAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,cAAc,CAAC,CAAA,MAAA,EAAM,IAAA,CAAK,KAAK,CAAA,YAAA,EAAY,IAAA,CAAK,KAAK,CAAA,MAAA,CAAQ,CAAA;AAC5E,IAAA,IAAA,CAAK,CAAA,eAAA,EAAkB,KAAA,CAAM,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAC,CAAA,oBAAA,EAAoB,KAAA,CAAM,aAAA,CAAc,QAAQ,CAAC,CAAC,CAAA,WAAA,EAAc,KAAA,CAAM,YAAY,CAAA,CAAA,CAAG,CAAA;AACnI,IAAA,IAAA,CAAK,CAAA,UAAA,EAAa,WAAW,WAAA,CAAY,OAAA,CAAQ,CAAC,CAAC,CAAA,cAAA,EAAc,WAAW,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAC,CAAA,aAAA,EAAgBE,IAAG,UAAA,CAAW,WAAW,EAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,WAAA,CAAa,CAAA;AACjK,IAAA,IAAA;AAAA,MACE,CAAA,mBAAA,EAAsB,MAAA,CAAO,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAC,CAAA,cAAA,EAAiB,MAAA,CAAO,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,oBAAA,EAClF,MAAA,CAAO,UAAA,CAAW,OAAA,CAAQ,CAAC,CAAC,CAAA,wBAAA,EAAwB,MAAA,CAAO,cAAA,CAAe,OAAA,CAAQ,CAAC,CAAC,CAAA,IAAA,EAAO,CAAA,CAAE,GAAA,CAAI,eAAe,CAAC,CAAA;AAAA,KAClI;AACA,IAAA,IAAA,CAAK,CAAA,UAAA,EAAaA,GAAAA,CAAG,MAAA,CAAO,cAAc,EAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,oBAAA,EAAoB,MAAA,CAAO,YAAA,CAAa,OAAA,CAAQ,CAAC,CAAC,CAAA,OAAA,CAAS,CAAA;AACjH,IAAA,IAAA,CAAK,CAAA,eAAA,EAAkB,WAAA,CAAY,aAAA,GAAgB,CAAA,CAAE,KAAA,CAAM,uBAAkB,CAAA,GAAI,CAAA,CAAE,GAAA,CAAI,0BAAqB,CAAC,CAAA,CAAE,CAAA;AAC/G,IAAA,IAAI,cAAA,CAAe,UAAU,MAAA,EAAQ;AACnC,MAAA,IAAA,CAAK,CAAA,yCAAA,EAA4C,CAAA,CAAE,GAAA,CAAI,WAAW,CAAC,CAAA,EAAA,CAAI,CAAA;AACvE,MAAA,KAAA,MAAW,CAAA,IAAK,eAAe,SAAA,EAAW;AACxC,QAAA,IAAA,CAAK,CAAA,IAAA,EAAOJ,IAAAA,CAAI,CAAA,EAAG,CAAA,CAAE,KAAA,CAAM,QAAQ,CAAC,CAAC,CAAA,IAAA,CAAA,EAAK,CAAC,CAAC,CAAA,CAAA,EAAI,EAAE,GAAA,CAAI,CAAA,GAAA,EAAM,CAAA,CAAE,QAAQ,CAAA,KAAA,EAAQ,CAAA,CAAE,cAAc,CAAA,CAAE,CAAC,CAAA,GAAA,EAAM,CAAA,CAAE,QAAQ,CAAA,CAAA,CAAG,CAAA;AAAA,MACtH;AACA,MAAA,IAAA,CAAK,KAAK,CAAA,CAAE,IAAA,CAAK,CAAA,iBAAA,EAAe,cAAA,CAAe,eAAe,OAAA,CAAQ,CAAC,CAAC,CAAA,iBAAA,CAAgB,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,0CAA0C,CAAC,CAAA,CAAE,CAAA;AAAA,IAClJ;AAAA,EACF,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,GAAG,CAAA;AACxB;AAOA,eAAsB,iBAAA,CAAkB,MAAc,MAAA,EAA0C;AAE9F,EAAA,MAAM,QAAA,GAAW,QAAQ,WAAA,EAAY;AACrC,EAAA,MAAM,UAAU,kBAAA,EAAmB;AACnC,EAAA,MAAM,KAAK,GAAA,EAAI;AACf,EAAA,MAAM,IAAA,GAAO,MAAM,UAAA,CAAW,EAAE,MAAM,WAAA,EAAa,GAAA,EAAK,OAAA,EAAS,IAAA,EAAM,CAAA;AACvE,EAAA,MAAM,MAAA,GAAS,KAAI,GAAI,EAAA;AAGvB,EAAA,MAAM,KAAK,GAAA,EAAI;AACf,EAAA,MAAM,OAAO,MAAM,UAAA,CAAW,EAAE,IAAA,EAAM,WAAA,EAAa,KAAK,CAAA;AACxD,EAAA,MAAM,MAAA,GAAS,KAAI,GAAI,EAAA;AAGvB,EAAA,MAAM,CAAA,GAAI,cAAA,CAAe,IAAA,CAAK,KAAK,CAAA;AACnC,EAAA,MAAM,CAAA,GAAI,cAAA,CAAA,CAAgB,MAAM,UAAA,CAAW,EAAE,IAAA,EAAM,WAAA,EAAa,GAAA,EAAK,OAAA,EAAS,IAAA,EAAM,CAAA,EAAG,KAAK,CAAA;AAC5F,EAAA,MAAM,IAAA,GAAO,QAAQ,IAAA,EAAK;AAC1B,EAAA,MAAM,gBAAgB,CAAA,KAAM,CAAA;AAE5B,EAAA,MAAM,KAAA,GAAQ,QAAQ,WAAA,EAAY;AAClC,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,CAAC,GAAG,CAAA,KAAM,CAAA,GAAI,CAAA,CAAE,IAAA,EAAM,CAAC,CAAA;AACjE,EAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,UAAA,CAAW,CAAA,EAAG,MAAM,CAAA;AAClD,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,KAAA;AAGrC,EAAA,MAAM,SAAA,GAAY,eAAA,CAAgB,IAAA,CAAK,KAAK,CAAA;AAC5C,EAAA,MAAM,SAAA,GAAY,cAAc,IAAI,CAAA;AACpC,EAAA,MAAM,WAAA,GAAc,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM;AACvC,IAAA,MAAM,QAAA,GAAW,WAAW,IAAA,CAAK,KAAA,EAAO,GAAG,EAAE,MAAA,EAAQ,CAAA,CAAE,cAAA;AACvD,IAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,CAAA,EAAG,SAAS,CAAA;AAClD,IAAA,OAAO,EAAE,QAAA,EAAU,CAAA,EAAG,QAAA,EAAU,cAAA,EAAgB,YAAY,KAAA,EAAO,UAAA,GAAa,CAAA,GAAI,KAAA,CAAM,aAAa,IAAA,CAAK,GAAA,CAAI,UAAU,CAAC,CAAC,IAAI,CAAA,EAAE;AAAA,EACpI,CAAC,CAAA;AACD,EAAA,MAAM,OAAA,GAAU,YAAY,MAAA,CAAO,CAAC,GAAG,CAAA,KAAM,CAAA,GAAI,CAAA,CAAE,QAAA,EAAU,CAAC,CAAA;AAC9D,EAAA,MAAM,SAAA,GAAY,YAAY,MAAA,CAAO,CAAC,GAAG,CAAA,KAAM,CAAA,GAAI,CAAA,CAAE,cAAA,EAAgB,CAAC,CAAA;AACtE,EAAA,MAAM,iBAAiB,OAAA,GAAU,CAAA,GAAI,KAAA,CAAM,SAAA,GAAY,OAAO,CAAA,GAAI,CAAA;AAElE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,EAAE,KAAA,EAAO,IAAA,CAAK,UAAA,EAAY,KAAA,EAAO,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,KAAA,EAAM;AAAA,IAC3E,KAAA,EAAO,EAAE,MAAA,EAAQ,KAAA,CAAM,MAAM,CAAA,EAAG,aAAA,EAAe,KAAA,CAAM,MAAM,CAAA,EAAG,YAAA,EAAc,IAAA,CAAK,MAAA,EAAO;AAAA,IACxF,UAAA,EAAY;AAAA,MACV,WAAA;AAAA,MACA,WAAA,EAAa,SAAS,CAAA,GAAI,KAAA,CAAO,KAAK,UAAA,GAAa,MAAA,GAAU,GAAI,CAAA,GAAI,CAAA;AAAA;AAAA,MAErE,QAAA,EAAU,SAAS,CAAA,GAAI,MAAA,CAAQI,IAAG,WAAW,CAAA,GAAI,MAAA,GAAU,GAAI,CAAA,GAAI;AAAA,KACrE;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,aAAA,EAAe,KAAA,CAAMA,GAAAA,CAAG,QAAA,CAAS,GAAG,CAAC,CAAA;AAAA,MACrC,SAAA,EAAW,KAAA,CAAMA,GAAAA,CAAG,IAAA,CAAK,GAAA,CAAI,KAAK,GAAA,EAAK,QAAA,CAAS,GAAG,CAAC,CAAC,CAAA;AAAA,MACrD,UAAA,EAAY,KAAA,CAAMA,GAAAA,CAAG,IAAA,CAAK,GAAA,CAAI,KAAK,QAAA,EAAU,QAAA,CAAS,QAAQ,CAAC,CAAC,CAAA;AAAA;AAAA,MAEhE,cAAA,EAAgB,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAGA,GAAAA,CAAG,KAAA,CAAM,QAAA,GAAW,QAAA,CAAS,QAAQ,CAAC,CAAC,CAAA;AAAA,MACzE,cAAA;AAAA,MACA,cAAc,KAAA,GAAQ,CAAA,GAAI,KAAA,CAAM,cAAA,GAAiB,KAAK,CAAA,GAAI,CAAA;AAAA,MAC1D,IAAA,EAAM;AAAA,KACR;AAAA,IACA,QAAQ,aAAA,EAAc;AAAA,IACtB,WAAA,EAAa,EAAE,aAAA,EAAe,aAAA,EAAc;AAAA,IAC5C,gBAAgB,EAAE,SAAA,EAAW,WAAA,EAAa,cAAA,EAAgB,MAAM,mDAAA;AAAoD,GACtH;AACF;AAQA,SAAS,kBAAA,GAAwE;AAC/E,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,IAAI,QAAA,GAAW,CAAA;AACf,EAAA,MAAM,SAAS,MAAY;AACzB,IAAA,MAAM,CAAA,GAAI,QAAQ,WAAA,EAAY;AAC9B,IAAA,IAAI,CAAA,CAAE,GAAA,GAAM,GAAA,EAAK,GAAA,GAAM,CAAA,CAAE,GAAA;AACzB,IAAA,IAAI,CAAA,CAAE,QAAA,GAAW,QAAA,EAAU,QAAA,GAAW,CAAA,CAAE,QAAA;AAAA,EAC1C,CAAA;AACA,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,MAAA,EAAQ,EAAE,CAAA;AACpC,EAAA,KAAA,CAAM,KAAA,IAAQ;AACd,EAAA,OAAO;AAAA,IACL,MAAM,MAAM;AACV,MAAA,aAAA,CAAc,KAAK,CAAA;AACnB,MAAA,MAAA,EAAO;AACP,MAAA,OAAO,EAAE,KAAK,QAAA,EAAS;AAAA,IACzB;AAAA,GACF;AACF;AAEA,SAAS,gBAAgB,KAAA,EAA0B;AAGjD,EAAA,OAAO,KAAA,CAAM,KAAA,CACV,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,MAAA,IAAU,CAAA,CAAE,SAAS,UAAU,CAAA,CACxD,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,CAAA,CAAE,UAAA,GAAa,CAAA,CAAE,cAAc,CAAA,CAAE,aAAA,CAAc,aAAA,CAAc,CAAA,CAAE,aAAa,CAAC,CAAA,CAC5F,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CACV,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AACtB;AAEA,SAAS,cAAc,IAAA,EAA4D;AACjF,EAAA,OAAO,QAAA,CAAS,EAAE,IAAA,EAAM,EAAE,GAAA,CAAI,CAAC,OAAO,EAAE,GAAA,EAAK,EAAE,GAAA,EAAK,GAAA,EAAK,EAAE,GAAA,EAAK,IAAA,EAAM,SAAS,CAAA,CAAE,GAAG,GAAE,CAAE,CAAA;AAC1F;AAEA,SAAS,kBAAA,CAAmB,MAAc,KAAA,EAAgD;AAExF,EAAA,MAAM,KAAA,GAAQ,KAAK,WAAA,EAAY;AAC/B,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,IAAI,CAAA,CAAE,IAAA,GAAO,GAAA,GAAM,IAAA,EAAM;AACzB,IAAA,IAAI,OAAA,GAAU,EAAA;AACd,IAAA,IAAI;AACF,MAAA,OAAA,GAAaC,GAAA,CAAA,YAAA,CAAa,CAAA,CAAE,GAAA,EAAK,MAAM,CAAA;AAAA,IACzC,CAAA,CAAA,MAAQ;AACN,MAAA;AAAA,IACF;AACA,IAAA,IAAI,QAAQ,WAAA,EAAY,CAAE,SAAS,KAAK,CAAA,WAAY,OAAA,CAAQ,MAAA;AAAA,EAC9D;AACA,EAAA,OAAO,IAAA,CAAK,IAAA,CAAK,KAAA,GAAQ,CAAC,CAAA;AAC5B;AAEA,SAAS,SAAS,GAAA,EAAqB;AACrC,EAAA,IAAI;AACF,IAAA,OAAUA,GAAA,CAAA,QAAA,CAAS,GAAG,CAAA,CAAE,IAAA;AAAA,EAC1B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,CAAA;AAAA,EACT;AACF;AAEA,SAASD,IAAG,KAAA,EAAuB;AACjC,EAAA,OAAO,SAAS,IAAA,GAAO,IAAA,CAAA;AACzB;AACA,SAAS,GAAA,GAAc;AACrB,EAAA,OAAO,OAAO,OAAA,CAAQ,MAAA,CAAO,MAAA,EAAO,GAAI,KAAK,CAAA,GAAI,GAAA;AACnD;AACA,SAAS,MAAM,CAAA,EAAmB;AAChC,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,GAAI,CAAA,GAAI,GAAA;AAChC;AACA,SAAS,OAAO,CAAA,EAAmB;AACjC,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,GAAS,CAAA,GAAI,GAAA;AACrC;AACA,SAASJ,IAAAA,CAAI,GAAW,CAAA,EAAmB;AACzC,EAAA,OAAO,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA;AAC1B;ACzNO,SAAS,cAAc,OAAA,EAAwB;AACpD,EAAA,MAAM,GAAA,GAAM,OAAA,CACT,OAAA,CAAQ,OAAO,CAAA,CACf,WAAA,CAAY,kDAAkD,CAAA,CAC9D,QAAA,CAAS,QAAA,EAAU,iBAAiB,CAAA,CACpC,OAAO,WAAA,EAAa,oCAAoC,CAAA,CACxD,MAAA,CAAO,OAAA,EAAS,8CAA8C,CAAA,CAC9D,MAAA,CAAO,UAAU,kBAAkB,CAAA,CACnC,MAAA,CAAO,YAAA,EAAc,uCAAuC,CAAA,CAC5D,MAAA,CAAO,SAAyB,MAAc,IAAA,EAA2E;AACxH,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,aAAa,MAAM,CAAA;AAC3C,IAAA,MAAM,EAAE,IAAA,EAAM,UAAA,EAAW,GAAI,UAAA,CAAW,KAAA,EAAO,IAAA,EAAM,IAAA,CAAK,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,IAAI,IAAI,MAAS,CAAA;AAC9F,IAAA,IAAI,CAAC,IAAA,EAAM,MAAM,cAAA,CAAe,CAAA,CAAA,EAAI,IAAI,CAAA,EAAA,EAAK,UAAA,CAAW,MAAA,GAAS,cAAA,GAAiB,WAAW,CAAA,CAAA,EAAI,UAAU,CAAA;AAE3G,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,CAClB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,IAAA,CAAK,IAAA,KAAS,CAAA,CAAE,IAAA,KAAS,UAAA,IAAc,CAAA,CAAE,IAAA,KAAS,QAAA,CAAA,IAAa,CAAA,CAAE,MAAA,KAAW,KAAK,CAAA,CAC1G,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,UAAA,GAAa,CAAA,CAAE,UAAU,CAAA;AAC7C,MAAA,IAAI,OAAO,IAAA,EAAM;AACf,QAAA,IAAA,CAAK,EAAE,IAAA,EAAM,IAAA,CAAK,MAAM,QAAA,EAAU,MAAA,CAAO,IAAI,CAAC,CAAA,MAAO,EAAE,IAAA,EAAM,CAAA,CAAE,eAAe,IAAA,EAAM,CAAA,CAAE,KAAK,KAAA,EAAM,CAAE,GAAG,CAAA;AACtG,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,oBAAoB,CAAC,CAAA,kBAAA,EAAkB,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,MAAA,CAAO,MAAM,CAAA,CAAA,CAAG,CAAA;AACpF,MAAA,KAAA,MAAW,CAAA,IAAK,QAAQ,IAAA,CAAK,CAAA,EAAA,EAAK,EAAE,MAAA,CAAO,QAAG,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,aAAa,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,KAAK,KAAK,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA;AACjG,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,aAAA,CAAc,KAAA,EAAO,IAAI,CAAA;AACxC,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,MAAA,CAAO,CAACM,EAAAA,KAAMA,EAAAA,CAAE,KAAA,KAAU,MAAM,CAAA,CAAE,GAAA,CAAI,CAACA,EAAAA,KAAMA,GAAE,IAAI,CAAA;AAE5E,IAAA,IAAI,IAAA,CAAK,GAAA,IAAO,IAAA,CAAK,IAAA,EAAM;AACzB,MAAA,MAAM,SAAS,YAAA,CAAa,MAAA,CAAO,MAAM,CAAA,EAAG,KAAK,IAAI,CAAA;AACrD,MAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA;AACxC,MAAA,IAAI,KAAK,IAAA,EAAM;AACb,QAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,EAAA,EAAK,OAAO,EAAE,CAAC,CAAA;AAC1B,QAAA,QAAA,CAAS,SAAS,EAAE,GAAA,EAAK,IAAA,EAAM,KAAA,EAAO,WAAW,CAAA;AACjD,QAAA;AAAA,MACF;AACA,MAAA,IAAI,MAAA,CAAO,MAAM,IAAA,CAAK,EAAE,QAAQ,MAAA,CAAO,IAAA,EAAM,OAAA,EAAS,SAAA,EAAW,CAAA;AAAA,gBACvD,OAAO,CAAA;AACjB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAA,CAAK,EAAE,IAAA,EAAM,IAAA,CAAK,aAAA,EAAe,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,QAAA,EAAU,IAAA,CAAK,QAAA,IAAY,IAAA,EAAM,MAAA,EAAQ,CAAA;AAC/F,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,CAAA,EAAG,EAAE,IAAA,CAAK,UAAU,CAAC,CAAA,MAAA,EAAM,CAAA,CAAE,IAAA,CAAK,IAAA,CAAK,aAAa,CAAC,KAAK,IAAA,CAAK,MAAA,GAAS,EAAE,KAAA,CAAM,QAAQ,IAAI,CAAA,CAAE,MAAA,CAAO,UAAU,CAAC,CAAA,CAAE,CAAA;AACvH,IAAA,IAAI,OAAO,IAAA,CAAK,QAAA,KAAa,QAAA,OAAe,CAAA,CAAE,GAAA,CAAI,CAAA,gBAAA,EAAA,CAAoB,IAAA,CAAK,WAAW,GAAA,EAAK,OAAA,CAAQ,CAAC,CAAC,GAAG,CAAC,CAAA;AACzG,IAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,MAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,2BAA2B,CAAC,CAAA;AACvC,MAAA;AAAA,IACF;AACA,IAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,MAAA,IAAA,CAAK,CAAA,EAAA,EAAK,EAAE,KAAA,CAAM,QAAG,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,IAAI,CAAA,CAAE,KAAK,UAAU,CAAA,CAAE,UAAA,CAAW,QAAQ,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA,CAAE,CAAA;AAAA,IAC9F;AAAA,EACF,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,GAAG,CAAA;AACxB;;;AC9DO,SAAS,cAAc,OAAA,EAAwB;AACpD,EAAA,MAAM,MAAM,OAAA,CACT,OAAA,CAAQ,OAAO,CAAA,CACf,WAAA,CAAY,8EAA8E,CAAA,CAC1F,QAAA,CAAS,UAAU,iBAAiB,CAAA,CACpC,OAAO,YAAA,EAAc,uCAAuC,EAC5D,MAAA,CAAO,SAAyB,MAAc,IAAA,EAAyB;AACtE,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,YAAA,CAAa,MAAM,CAAA;AACrC,IAAA,MAAM,EAAE,IAAA,EAAM,UAAA,EAAW,GAAI,UAAA,CAAW,KAAA,EAAO,IAAA,EAAM,IAAA,CAAK,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,IAAI,IAAI,MAAS,CAAA;AAC9F,IAAA,IAAI,CAAC,IAAA,EAAM,MAAM,cAAA,CAAe,CAAA,CAAA,EAAI,IAAI,CAAA,EAAA,EAAK,UAAA,CAAW,MAAA,GAAS,cAAA,GAAiB,WAAW,CAAA,CAAA,EAAI,UAAU,CAAA;AAE3G,IAAA,IAAI,CAAC,MAAM,KAAA,EAAO;AAChB,MAAA,IAAI,MAAA,CAAO,IAAA,EAAM,IAAA,CAAK,EAAE,IAAA,EAAM,IAAA,CAAK,aAAA,EAAe,KAAA,EAAO,EAAC,EAAG,IAAA,EAAM,8BAAA,EAAgC,CAAA;AAAA,WAC9F,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,UAAU,CAAC,CAAA,UAAA,EAAU,CAAA,CAAE,IAAA,CAAK,WAAW,CAAC,CAAA,mCAAA,CAAqC,CAAA;AACjG,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,UAAA,CAAW,QAAA,CAAS,IAAA,CAAK,EAAE,CAAC,CAAA;AACtE,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAA,CAAK,EAAE,IAAA,EAAM,IAAA,CAAK,aAAA,EAAe,OAAO,CAAA;AACxC,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,UAAU,CAAC,CAAA,MAAA,EAAM,CAAA,CAAE,IAAA,CAAK,IAAA,CAAK,aAAa,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,MAAM,CAAA,CAAA,CAAG,CAAA;AAC9E,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,kCAAkC,CAAC,CAAA;AAC9C,MAAA;AAAA,IACF;AACA,IAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,MAAA,IAAA,CAAK,CAAA,EAAA,EAAK,EAAE,IAAA,CAAK,CAAA,CAAE,IAAI,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,EAAI,CAAA,CAAE,SAAS,CAAA,MAAA,EAAI,CAAA,CAAE,UAAU,CAAA,CAAA,CAAG,CAAC,KAAK,SAAA,CAAU,CAAA,CAAE,SAAS,CAAC,CAAA,CAAE,CAAA;AAAA,IACpG;AAAA,EACF,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,GAAG,CAAA;AACxB;AAEA,SAAS,UAAU,SAAA,EAA4B;AAC7C,EAAA,IAAI,SAAA,IAAa,OAAO,SAAA,KAAc,QAAA,EAAU;AAC9C,IAAA,MAAM,CAAA,GAAI,SAAA;AACV,IAAA,IAAI,OAAO,CAAA,CAAE,SAAA,KAAc,QAAA,SAAiB,CAAA,CAAE,SAAA;AAC9C,IAAA,IAAI,OAAO,CAAA,CAAE,KAAA,KAAU,UAAU,OAAO,CAAA,QAAA,EAAW,EAAE,KAAK,CAAA,CAAA;AAC1D,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,QAAQ,CAAA,EAAG,OAAO,CAAA,UAAA,EAAc,CAAA,CAAE,QAAA,CAAsB,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,EACxF;AACA,EAAA,OAAO,IAAA,CAAK,UAAU,SAAS,CAAA;AACjC;;;AC1CO,SAAS,cAAc,OAAA,EAAwB;AACpD,EAAA,MAAM,MAAM,OAAA,CACT,OAAA,CAAQ,OAAO,CAAA,CACf,WAAA,CAAY,2DAA2D,CAAA,CACvE,QAAA,CAAS,UAAU,iBAAiB,CAAA,CACpC,OAAO,YAAA,EAAc,uCAAuC,EAC5D,MAAA,CAAO,SAAyB,MAAc,IAAA,EAAyB;AACtE,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,YAAA,CAAa,MAAM,CAAA;AACrC,IAAA,MAAM,EAAE,IAAA,EAAM,UAAA,EAAW,GAAI,UAAA,CAAW,KAAA,EAAO,IAAA,EAAM,IAAA,CAAK,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,IAAI,IAAI,MAAS,CAAA;AAC9F,IAAA,IAAI,CAAC,IAAA,EAAM,MAAM,cAAA,CAAe,CAAA,CAAA,EAAI,IAAI,CAAA,EAAA,EAAK,UAAA,CAAW,MAAA,GAAS,cAAA,GAAiB,WAAW,CAAA,CAAA,EAAI,UAAU,CAAA;AAE3G,IAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,SAAA,CAAU,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,EAAA,EAAI,CAAC,CAAC,CAAC,CAAA;AAC/D,IAAA,MAAM,SAAA,GAAA,CAAa,KAAA,CAAM,SAAA,IAAa,EAAC,EAAG,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,GAAA,KAAQ,IAAA,CAAK,EAAE,CAAA;AAEzE,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAA,CAAK;AAAA,QACH,MAAM,IAAA,CAAK,aAAA;AAAA,QACX,QAAA,EAAU,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,UAC9B,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,WAAW,CAAA,CAAE,SAAA;AAAA,UACb,YAAY,CAAA,CAAE,UAAA;AAAA,UACd,OAAO,OAAA,CAAQ,GAAA,CAAI,EAAE,WAAW,CAAA,EAAG,SAAS,CAAA,CAAE,WAAA;AAAA,UAC9C,SAAS,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,WAAW,GAAG,OAAA,IAAW,EAAA;AAAA,UAChD,UAAU,CAAA,CAAE;AAAA,SACd,CAAE;AAAA,OACH,CAAA;AACD,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,UAAU,CAAC,CAAA,MAAA,EAAM,CAAA,CAAE,IAAA,CAAK,IAAA,CAAK,aAAa,CAAC,CAAA,EAAA,EAAK,SAAA,CAAU,MAAM,CAAA,CAAA,CAAG,CAAA;AAClF,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,MAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,gEAAgE,CAAC,CAAA;AAC5E,MAAA;AAAA,IACF;AACA,IAAA,KAAA,MAAW,KAAK,SAAA,EAAW;AACzB,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,WAAW,CAAA;AACvC,MAAA,MAAM,GAAA,GAAM,CAAA,CAAE,SAAA,KAAc,aAAA,GAAgB,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,IAAI,CAAA,GAAI,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,IAAI,CAAA;AAC7E,MAAA,IAAA,CAAK,KAAK,GAAG,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,IAAI,CAAA,CAAE,SAAS,CAAA,OAAA,EAAU,CAAA,CAAE,WAAW,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA,CAAE,CAAA;AAC7E,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,IAAA,CAAK,CAAA,IAAA,EAAO,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAC3B,QAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,IAAA,EAAO,KAAA,CAAM,QAAA,CAAS,KAAK,CAAA,QAAA,EAAM,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,CAAE,CAAC,CAAA;AAAA,MACnE;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,GAAG,CAAA;AACxB;;;AC9CO,SAAS,YAAY,OAAA,EAAwB;AAClD,EAAA,MAAM,GAAA,GAAM,OAAA,CACT,OAAA,CAAQ,KAAK,EACb,WAAA,CAAY,8EAA8E,CAAA,CAC1F,QAAA,CAAS,WAAA,EAAa,yBAAyB,CAAA,CAC/C,MAAA,CAAO,eAA+B,GAAA,EAAa;AAClD,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,IAAA,GAAO,OAAO,MAAM,CAAA;AAE1B,IAAA,IAAI,CAAE,MAAM,mBAAA,CAAoB,IAAI,CAAA,EAAI;AACtC,MAAA,MAAM,IAAI,QAAA;AAAA,QACR,oFAAA;AAAA,QACA,QAAA,CAAS;AAAA,OACX;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,GAAY,MAAM,qBAAA,CAAsB,IAAI,CAAA;AAClD,IAAA,MAAM,KAAK,SAAA,GAAY,uBAAA,CAAwB,SAAA,EAAW,GAAG,KAAK,IAAA,GAAO,IAAA;AAGzE,IAAA,MAAM,QAAA,GAAW,iBAAiB,IAAI,CAAA;AACtC,IAAA,MAAM,OAAA,GAAU,QAAA,EAAU,QAAA,EAAU,eAAA,EAAiB,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAA,KAAY,GAAG,CAAA,IAAK,IAAA;AAEhG,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAA,CAAK,EAAE,OAAA,EAAS,GAAA,EAAK,OAAA,EAAS,EAAA,EAAI,OAAA,IAAW,EAAC,EAAG,eAAA,EAAiB,OAAA,EAAS,UAAA,IAAc,IAAI,CAAA;AAC7F,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,QAAQ,CAAC,IAAI,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAE,CAAA;AACzC,IAAA,IAAI,CAAC,EAAA,IAAM,EAAA,CAAG,OAAA,CAAQ,WAAW,CAAA,EAAG;AAClC,MAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,0FAA0F,CAAC,CAAA;AACtG,MAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,8CAA8C,CAAC,CAAA;AAAA,IAC5D,CAAA,MAAO;AACL,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,EAAA,CAAG,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AAC1C,QAAA,MAAM,EAAA,GAAK,EAAA,CAAG,OAAA,CAAQ,CAAC,CAAA;AACvB,QAAA,MAAM,IAAA,GAAO,MAAM,CAAA,GAAI,CAAA,CAAE,MAAM,OAAO,CAAA,GAAI,CAAA,CAAE,MAAA,CAAO,QAAG,CAAA;AACtD,QAAA,MAAM,OAAO,EAAA,CAAG,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,GAAG,EAAE,CAAA;AACvC,QAAA,IAAA;AAAA,UACE,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,KAAK,EAAA,CAAG,OAAO,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,GAAG,EAAA,CAAG,MAAA,CAAO,QAAQ,CAAA,CAAA,EAAI,IAAI,IAAI,EAAA,CAAG,MAAA,CAAO,UAAU,CAAA,CAAE,CAAC,CAAA;AAAA,SACnG;AACA,QAAA,IAAA,CAAK,EAAE,GAAA,CAAI,CAAA,MAAA,EAAS,GAAG,MAAA,CAAO,OAAO,EAAE,CAAC,CAAA;AAAA,MAC1C;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,UAAA,CAAW,MAAA,EAAQ;AACxC,MAAA,IAAA,CAAK,EAAE,CAAA;AACP,MAAA,IAAA,CAAK,EAAE,GAAA,CAAI,CAAA,EAAA,EAAK,QAAQ,UAAA,CAAW,MAAM,qBAAqB,OAAA,CAAQ,UAAA,CAAW,WAAW,CAAA,GAAI,GAAA,GAAM,KAAK,CAAA,IAAA,EAAO,GAAG,IAAI,OAAA,CAAQ,OAAO,GAAG,CAAC,CAAA;AAC5I,MAAA,KAAA,MAAW,GAAA,IAAO,QAAQ,UAAA,EAAY;AACpC,QAAA,MAAM,GAAA,GAAM,IAAI,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAA,CAAW,MAAM,CAAC,CAAA;AACxD,QAAA,MAAM,OAAA,GAAU,GAAA,IAAO,GAAA,KAAQ,GAAA,CAAI,EAAA,GAAK,CAAA,EAAG,GAAA,CAAI,EAAE,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA,CAAA,GAAM,GAAA,CAAI,EAAA;AACnE,QAAA,MAAM,OAAO,GAAA,CAAI,IAAA,IAAQ,OAAO,CAAA,MAAA,EAAS,GAAA,CAAI,IAAI,CAAA,CAAA,GAAK,EAAA;AACtD,QAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,aAAA,CAAc,MAAA,GAAS,CAAA,iBAAA,EAAe,IAAI,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,GAAK,0BAAA;AACzF,QAAA,IAAA,CAAK,OAAO,WAAA,CAAY,GAAA,CAAI,QAAQ,CAAC,IAAI,OAAO,CAAA,EAAG,CAAA,CAAE,GAAA,CAAI,IAAI,CAAC,CAAA,EAAG,EAAE,GAAA,CAAI,KAAK,CAAC,CAAA,CAAE,CAAA;AAC/E,QAAA,IAAI,IAAI,UAAA,EAAY;AAClB,UAAA,MAAM,WAAW,GAAA,CAAI,YAAA,IAAgB,OAAO,CAAA,EAAA,EAAK,GAAA,CAAI,YAAY,CAAA,SAAA,CAAA,GAAc,EAAA;AAC/E,UAAA,IAAA;AAAA,YACE,CAAA,CAAE,GAAA;AAAA,cACA,yBAAyB,GAAA,CAAI,UAAA,CAAW,UAAU,CAAA,IAAA,EAAO,IAAI,UAAA,CAAW,QAAQ,CAAA,IAAA,EAAO,GAAA,CAAI,WAAW,IAAA,CAAK,KAAA,CAAM,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAA;AAAA;AACpI,WACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA,MAAA,IAAW,QAAA,EAAU,QAAA,EAAU,eAAA,EAAiB;AAC9C,MAAA,IAAA,CAAK,EAAE,CAAA;AACP,MAAA,IAAA,CAAK,CAAA,CAAE,KAAA,CAAM,8DAA8D,CAAC,CAAA;AAAA,IAC9E,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,EAAE,CAAA;AACP,MAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,yEAAyE,CAAC,CAAA;AAAA,IACvF;AAAA,EACF,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,GAAG,CAAA;AACxB;AAEA,SAAS,YAAY,QAAA,EAA0B;AAC7C,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,UAAA;AACH,MAAA,OAAO,CAAA,CAAE,IAAI,UAAU,CAAA;AAAA,IACzB,KAAK,MAAA;AACH,MAAA,OAAO,CAAA,CAAE,IAAI,MAAM,CAAA;AAAA,IACrB,KAAK,UAAA;AACH,MAAA,OAAO,CAAA,CAAE,OAAO,UAAU,CAAA;AAAA,IAC5B,KAAK,KAAA;AACH,MAAA,OAAO,CAAA,CAAE,IAAI,KAAK,CAAA;AAAA,IACpB;AACE,MAAA,OAAO,CAAA,CAAE,IAAI,QAAQ,CAAA;AAAA;AAE3B;;;ACzEO,SAAS,eAAe,OAAA,EAAwB;AACrD,EAAA,MAAM,GAAA,GAAM,QACT,OAAA,CAAQ,QAAQ,EAChB,WAAA,CAAY,iFAAiF,CAAA,CAC7F,QAAA,CAAS,WAAA,EAAa,wBAAwB,EAC9C,QAAA,CAAS,cAAA,EAAgB,yEAAyE,CAAA,CAClG,MAAA,CAAO,UAAA,EAAY,kFAAkF,CAAA,CACrG,MAAA,CAAO,eAA+B,GAAA,EAAa,aAAA,EAAuB;AACzE,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,IAAA,GAAO,KAAK,IAAA,EAA2B;AAC7C,IAAA,MAAM,IAAA,GAAO,OAAO,MAAM,CAAA;AAE1B,IAAA,IAAI,CAAE,MAAM,mBAAA,CAAoB,IAAI,CAAA,EAAI;AACtC,MAAA,MAAM,IAAI,QAAA;AAAA,QACR,uFAAA;AAAA,QACA,QAAA,CAAS;AAAA,OACX;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,oBAAoB,aAAa,CAAA;AAC/C,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,QAAA;AAAA,QACR,wCAAwC,aAAa,CAAA,CAAA;AAAA,QACrD,QAAA,CAAS;AAAA,OACX;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,GAAY,MAAM,qBAAA,CAAsB,IAAI,CAAA;AAClD,IAAA,MAAM,KAAK,SAAA,GAAY,uBAAA,CAAwB,SAAA,EAAW,GAAG,KAAK,IAAA,GAAO,IAAA;AAIzE,IAAA,IAAI,CAAC,EAAA,IAAM,EAAA,CAAG,OAAA,CAAQ,WAAW,CAAA,EAAG;AAClC,MAAA,IAAI,OAAO,IAAA,EAAM;AACf,QAAA,IAAA,CAAK,EAAE,OAAA,EAAS,GAAA,EAAK,UAAA,EAAY,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,YAAA,EAAc,KAAA,EAAO,SAAA,EAAW,EAAC,EAAG,CAAA;AAC1F,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,WAAW,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,KAAK,CAAC,CAAA,CAAE,CAAA;AAC5D,MAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,8EAA8E,CAAC,CAAA;AAC1F,MAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,mFAAmF,CAAC,CAAA;AAC/F,MAAA,MAAM,IAAI,QAAA,CAAS,CAAA,uBAAA,EAA0B,GAAG,CAAA,CAAA,EAAI,SAAS,SAAS,CAAA;AAAA,IACxE;AAEA,IAAA,MAAM,SAAA,GAAY,oBAAA,CAAqB,EAAA,EAAI,KAAK,CAAA;AAChD,IAAA,MAAM,UAAU,EAAA,CAAG,OAAA,CAAQ,EAAA,CAAG,OAAA,CAAQ,SAAS,CAAC,CAAA;AAChD,IAAA,MAAM,YAAA,GAAe,gBAAA,CAAiB,OAAA,CAAQ,OAAA,EAAS,KAAK,CAAA;AAC5D,IAAA,MAAM,YAAA,GAAe,UAAU,IAAA,CAAK,CAAC,OAAO,EAAA,CAAG,IAAA,KAAS,SAAS,CAAA,IAAK,IAAA;AAEtE,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAA,CAAK;AAAA,QACH,SAAS,EAAA,CAAG,IAAA;AAAA,QACZ,WAAW,EAAA,CAAG,SAAA;AAAA,QACd,UAAA,EAAY,KAAA;AAAA,QACZ,gBAAgB,OAAA,CAAQ,OAAA;AAAA,QACxB,YAAA;AAAA,QACA,YAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,GAAG,CAAA,CAAE,IAAA,CAAK,WAAW,CAAC,IAAI,CAAA,CAAE,IAAA,CAAK,EAAA,CAAG,IAAI,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,KAAK,CAAC,CAAA,CAAE,CAAA;AAChE,MAAA,MAAM,UAAU,YAAA,GACZ,CAAA,CAAE,MAAM,CAAA,QAAA,EAAW,OAAA,CAAQ,OAAO,CAAA,WAAA,EAAc,KAAK,CAAA,CAAE,CAAA,GACvD,EAAE,MAAA,CAAO,CAAA,QAAA,EAAW,QAAQ,OAAO,CAAA,kBAAA,EAAqB,KAAK,CAAA,CAAE,CAAA;AACnE,MAAA,IAAA,CAAK,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA;AACnB,MAAA,IAAA,CAAK,EAAE,CAAA;AAEP,MAAA,IAAI,CAAC,YAAA,EAAc;AACjB,QAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,gBAAA,EAAmB,KAAK,iBAAiB,CAAC,CAAA;AACrD,QAAA,IAAA;AAAA,UACE,CAAA,CAAE,GAAA;AAAA,YACA,wBAAwB,OAAA,CAAQ,OAAO,IAAI,CAAA,CAAE,GAAA,CAAI,IAAI,OAAA,CAAQ,MAAA,CAAO,QAAQ,CAAA,CAAA,EAAI,OAAA,CAAQ,OAAO,IAAA,CAAK,KAAA,CAAM,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;AAAA;AACtH,SACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,KAAK,CAAA,CAAE,IAAA,CAAK,eAAe,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAG,CAAA;AAC7C,QAAA,aAAA,CAAc,cAAc,IAAI,CAAA;AAGhC,QAAA,MAAM,OAAO,SAAA,CAAU,KAAA,CAAM,UAAU,OAAA,CAAQ,YAAY,IAAI,CAAC,CAAA;AAChE,QAAA,IAAI,KAAK,MAAA,EAAQ;AACf,UAAA,IAAA,CAAK,EAAE,CAAA;AACP,UAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,EAAA,EAAK,IAAA,CAAK,MAAM,CAAA,eAAA,EAAkB,IAAA,CAAK,MAAA,KAAW,CAAA,GAAI,EAAA,GAAK,GAAG,CAAA,CAAA,CAAG,CAAC,CAAA;AAC7E,UAAA,KAAA,MAAW,EAAA,IAAM,IAAA,EAAM,aAAA,CAAc,EAAA,EAAI,KAAK,CAAA;AAAA,QAChD;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,CAAK,MAAA,IAAU,CAAC,YAAA,EAAc;AAChC,MAAA,MAAM,IAAI,QAAA;AAAA,QACR,GAAG,EAAA,CAAG,IAAI,IAAI,OAAA,CAAQ,OAAO,qBAAqB,KAAK,CAAA,CAAA;AAAA,QACvD,QAAA,CAAS;AAAA,OACX;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,GAAG,CAAA;AACxB;AAEA,SAAS,aAAA,CAAc,IAAqB,OAAA,EAAwB;AAClE,EAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,IAAA,KAAS,SAAA,GAAY,CAAA,CAAE,MAAM,QAAG,CAAA,GAAI,CAAA,CAAE,MAAA,CAAO,QAAG,CAAA;AACjE,EAAA,MAAM,OAAO,EAAA,CAAG,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,GAAG,EAAE,CAAA;AACvC,EAAA,MAAM,IAAA,GAAO,EAAA,CAAG,eAAA,GAAkB,CAAA,CAAE,GAAA,CAAI,CAAA,MAAA,EAAS,EAAA,CAAG,eAAe,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,GAAA,CAAI,UAAU,CAAA;AACzF,EAAA,MAAM,MAAM,OAAA,GAAU,CAAA,CAAE,KAAK,EAAA,CAAG,OAAO,IAAI,EAAA,CAAG,OAAA;AAC9C,EAAA,IAAA,CAAK,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,GAAG,GAAG,IAAI,CAAA,CAAA,EAAI,EAAE,GAAA,CAAI,CAAA,EAAG,GAAG,MAAA,CAAO,QAAQ,IAAI,IAAI,CAAA,CAAA,EAAI,GAAG,MAAA,CAAO,UAAU,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA;AACnG,EAAA,IAAA,CAAK,EAAE,GAAA,CAAI,CAAA,QAAA,EAAW,GAAG,MAAA,CAAO,OAAO,EAAE,CAAC,CAAA;AAC5C;AC1FO,IAAM,eAAA,GAAkB,CAAC,0BAAA,EAA4B,yBAAyB,CAAA;AAErF,SAAS,SAAS,CAAA,EAAgC;AAChD,EAAA,OAAO,OAAO,MAAM,QAAA,IAAY,CAAA,CAAE,MAAK,GAAI,CAAA,CAAE,MAAK,GAAI,MAAA;AACxD;AAGO,SAAS,mBAAmB,GAAA,EAA+B;AAChE,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,GAAI,GAAA,GAAM,KAAA,CAAM,OAAA,CAAS,GAAA,EAA8B,MAAM,CAAA,GAAK,GAAA,CAA8B,SAAS,EAAC;AACxI,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,MAAM,SAAyB,EAAC;AAChC,EAAA,KAAA,MAAW,QAAQ,IAAA,EAAM;AACvB,IAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACvC,IAAA,MAAM,CAAA,GAAI,IAAA;AACV,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,CAAA,CAAE,IAAI,CAAA;AAC5B,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAM,SAAA,GAAY,QAAA,CAAS,CAAA,CAAE,SAAS,GAAG,WAAA,EAAY;AACrD,IAAA,MAAM,MAAM,CAAA,EAAG,SAAA,IAAa,GAAG,CAAA,EAAA,EAAK,IAAA,CAAK,aAAa,CAAA,CAAA;AACtD,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AACnB,IAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AACZ,IAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,GAAI,SAAA,GAAY,EAAE,SAAA,EAAU,GAAI,EAAC,EAAI,GAAI,QAAA,CAAS,CAAA,CAAE,GAAG,CAAA,GAAI,EAAE,KAAK,QAAA,CAAS,CAAA,CAAE,GAAG,CAAA,KAAM,EAAC,EAAI,GAAI,QAAA,CAAS,EAAE,MAAM,CAAA,GAAI,EAAE,MAAA,EAAQ,SAAS,CAAA,CAAE,MAAM,GAAE,GAAI,IAAK,CAAA;AAAA,EAChL;AACA,EAAA,OAAO,EAAE,MAAA,EAAO;AAClB;AAGO,SAAS,cAAc,IAAA,EAAuE;AACnG,EAAA,KAAA,MAAWZ,QAAO,eAAA,EAAiB;AACjC,IAAA,MAAM,CAAA,GAAIa,aAAAA,CAAK,IAAA,CAAK,IAAA,EAAMb,IAAG,CAAA;AAC7B,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI;AACF,MAAA,IAAA,GAAOL,YAAAA,CAAG,YAAA,CAAa,CAAA,EAAG,MAAM,CAAA;AAAA,IAClC,CAAA,CAAA,MAAQ;AACN,MAAA;AAAA,IACF;AACA,IAAA,IAAI;AACF,MAAA,OAAO,EAAE,QAAQ,kBAAA,CAAmB,IAAA,CAAK,MAAM,IAAI,CAAC,CAAA,EAAG,IAAA,EAAM,CAAA,EAAE;AAAA,IACjE,CAAA,CAAA,MAAQ;AAEN,MAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,IAAA,EAAM,CAAA,EAAE;AAAA,IACjC;AAAA,EACF;AACA,EAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,IAAA,EAAM,IAAA,EAAK;AACpC;AAGO,SAAS,cAAA,CAAe,QAAyB,OAAA,EAA2C;AACjG,EAAA,MAAMU,OAA2B,EAAC;AAClC,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,IAAA,MAAM,IAAA,GAAO,OAAO,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,WAAA,EAAY,KAAM,EAAE,IAAA,CAAK,WAAA,OAAkB,CAAC,CAAA,CAAE,aAAa,CAAA,CAAE,SAAA,KAAc,EAAE,SAAA,CAAU,CAAA;AACrI,IAAA,IAAI,IAAA,EAAMA,IAAAA,CAAI,IAAA,CAAK,EAAE,SAAA,EAAW,CAAA,CAAE,SAAA,EAAW,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,WAAW,CAAA,CAAE,SAAA,IAAa,IAAA,EAAM,GAAA,EAAK,IAAA,CAAK,GAAA,IAAO,MAAM,MAAA,EAAQ,IAAA,CAAK,MAAA,IAAU,IAAA,EAAM,CAAA;AAAA,EACjJ;AACA,EAAA,OAAOA,KAAI,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,SAAA,CAAU,aAAA,CAAc,CAAA,CAAE,SAAS,KAAK,CAAA,CAAE,IAAA,CAAK,aAAA,CAAc,CAAA,CAAE,IAAI,CAAC,CAAA;AAClG;;;AChFO,SAAS,cAAc,OAAA,EAAwB;AACpD,EAAA,MAAM,MAAM,OAAA,CACT,OAAA,CAAQ,OAAO,CAAA,CACf,WAAA,CAAY,uEAAuE,CAAA,CACnF,MAAA,CAAO,UAAA,EAAY,6DAA6D,EAChF,MAAA,CAAO,mBAAA,EAAqB,0FAAqF,CAAA,CACjH,MAAA,CAAO,eAA+B,IAAA,EAA6C;AAClF,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,IAAA,GAAO,OAAO,MAAM,CAAA;AAC1B,IAAA,IAAI,IAAA,CAAK,MAAA,IAAU,MAAA,CAAO,KAAA,EAAO;AAC/B,MAAA,MAAM,IAAI,QAAA,CAAS,4DAAA,EAA8D,QAAA,CAAS,WAAW,CAAA;AAAA,IACvG;AACA,IAAA,IAAI,IAAA,CAAK,MAAA,IAAU,CAAC,CAAC,OAAA,EAAS,OAAA,EAAS,WAAW,CAAA,CAAE,QAAA,CAAS,IAAA,CAAK,MAAM,CAAA,EAAG;AACzE,MAAA,MAAM,IAAI,QAAA,CAAS,CAAA,wDAAA,EAA2D,KAAK,MAAM,CAAA,EAAA,CAAA,EAAM,SAAS,WAAW,CAAA;AAAA,IACrH;AACA,IAAA,MAAM,GAAA,GAAM,UAAU,IAAI,CAAA;AAC1B,IAAA,IAAI,IAAA,CAAK,UAAU,CAAC,MAAA,CAAO,OAAO,MAAM,YAAA,CAAa,IAAI,OAAO,CAAA;AAGhE,IAAA,IAAI,SAAA,GAAqG,IAAA;AACzG,IAAA,IAAI,IAAA,CAAK,WAAW,WAAA,EAAa;AAC/B,MAAA,MAAM,MAAA,GAAS,cAAc,IAAI,CAAA;AACjC,MAAA,IAAI,MAAA,CAAO,IAAA,IAAQ,CAAC,MAAA,CAAO,MAAA,EAAQ;AACjC,QAAA,MAAM,IAAI,QAAA,CAAS,CAAA,oBAAA,EAAuB,OAAO,IAAI,CAAA,kBAAA,CAAA,EAAsB,SAAS,WAAW,CAAA;AAAA,MACjG;AACA,MAAA,SAAA,GAAY,EAAE,UAAA,EAAY,MAAA,CAAO,MAAM,OAAA,EAAS,CAAC,CAAC,MAAA,CAAO,MAAA,EAAQ,YAAY,MAAA,CAAO,MAAA,GAAS,eAAe,MAAA,CAAO,MAAA,EAAQ,IAAI,OAAO,CAAA,GAAI,EAAC,EAAE;AAAA,IAC/I;AAEA,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAA,CAAK,YAAY,EAAE,GAAG,GAAA,EAAK,SAAA,KAAc,GAAG,CAAA;AAAA,IAC9C,CAAA,MAAO;AACL,MAAA,MAAM,SAAA,GAAY,UAAA,CAAW,MAAA,CAAO,CAAC,CAAA,KAAM,IAAI,MAAA,CAAO,CAAC,CAAA,GAAI,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,GAAA,CAAI,MAAA,CAAO,CAAC,CAAC,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,QAAK,CAAA;AAC5G,MAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,UAAU,CAAC,CAAA,MAAA,EAAM,GAAA,CAAI,MAAA,CAAO,KAAK,gBAAgB,SAAA,GAAY,CAAA,EAAA,EAAK,SAAS,CAAA,CAAA,CAAA,GAAM,EAAE,CAAA,CAAE,CAAA;AACpG,MAAA,IAAI,KAAK,MAAA,EAAQ;AACf,QAAA,MAAM,OAAA,GAAU,GAAA,CAAI,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,KAAA,KAAU,SAAA,IAAa,CAAA,CAAE,UAAU,SAAS,CAAA;AACnG,QAAA,IAAI,QAAQ,MAAA,KAAW,CAAA,OAAQ,CAAA,CAAE,KAAA,CAAM,wCAAwC,CAAC,CAAA;AAChF,QAAA,KAAA,MAAW,CAAA,IAAK,OAAA,CAAQ,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,IAAA,CAAK,CAAA,CAAE,KAAK,CAAA,GAAI,IAAA,CAAK,CAAA,CAAE,KAAK,CAAC,CAAA,EAAG;AACrE,UAAA,MAAM,MAAM,CAAA,CAAE,KAAA,KAAU,OAAA,GAAU,CAAA,CAAE,IAAI,OAAO,CAAA,GAAI,CAAA,CAAE,KAAA,KAAU,UAAU,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,GAAI,CAAA,CAAE,IAAI,OAAO,CAAA;AAC1G,UAAA,IAAA,CAAK,KAAK,GAAG,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,IAAI,CAAA,CAAE,GAAA,CAAI,CAAA,EAAG,CAAA,CAAE,SAAS,CAAA,QAAA,EAAM,CAAA,CAAE,MAAM,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA;AAAA,QACpE;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,+EAA0E,CAAC,CAAA;AACtF,QAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,uDAAuD,CAAC,CAAA;AAAA,MACrE;AACA,MAAA,IAAI,SAAA,iBAA0B,SAAS,CAAA;AAAA,IACzC;AAEA,IAAA,IAAI,SAAA,IAAa,SAAA,CAAU,UAAA,CAAW,MAAA,EAAQ;AAC5C,MAAA,MAAM,IAAI,SAAS,CAAA,EAAG,SAAA,CAAU,WAAW,MAAM,CAAA,yCAAA,CAAA,EAA6C,SAAS,WAAW,CAAA;AAAA,IACpH;AACA,IAAA,IAAI,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,MAAA,KAAW,WAAA,EAAa;AAC9C,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,KAAW,OAAA,GAAU,CAAA,GAAI,CAAA;AAChD,MAAA,MAAM,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,MAAA,CAAO,CAAC,MAAM,IAAA,CAAK,CAAA,CAAE,KAAK,CAAA,IAAK,SAAS,CAAA;AAChE,MAAA,IAAI,IAAI,MAAA,EAAQ;AACd,QAAA,MAAM,IAAI,QAAA,CAAS,CAAA,EAAG,GAAA,CAAI,MAAM,mCAAmC,IAAA,CAAK,MAAM,CAAA,CAAA,EAAI,QAAA,CAAS,WAAW,CAAA;AAAA,MACxG;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,GAAG,CAAA;AACxB;AAEA,SAAS,KAAK,KAAA,EAAwB;AACpC,EAAA,OAAO,KAAA,KAAU,UAAU,CAAA,GAAI,KAAA,KAAU,UAAU,CAAA,GAAI,KAAA,KAAU,UAAU,CAAA,GAAI,CAAA;AACjF;AAEA,SAAS,eAAe,CAAA,EAAgE;AACtF,EAAA,IAAI,CAAC,EAAE,OAAA,EAAS;AACd,IAAA,IAAA,CAAK,CAAA,CAAE,IAAI,CAAA,uBAAA,EAA0B,eAAA,CAAgB,KAAK,MAAM,CAAC,6BAAwB,CAAC,CAAA;AAC1F,IAAA;AAAA,EACF;AACA,EAAA,IAAI,CAAA,CAAE,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG;AAC7B,IAAA,IAAA,CAAK,CAAA,CAAE,KAAA,CAAM,4CAA4C,CAAC,CAAA;AAC1D,IAAA;AAAA,EACF;AACA,EAAA,IAAA,CAAK,EAAE,GAAA,CAAI,CAAA,aAAA,EAAgB,EAAE,UAAA,CAAW,MAAM,yBAAyB,CAAC,CAAA;AACxE,EAAA,KAAA,MAAW,CAAA,IAAK,EAAE,UAAA,EAAY;AAC5B,IAAA,MAAM,GAAA,GAAM,EAAE,GAAA,GAAM,CAAA,CAAE,IAAI,CAAA,YAAA,EAAU,CAAA,CAAE,GAAG,CAAA,CAAE,CAAA,GAAI,EAAA;AAC/C,IAAA,MAAM,GAAA,GAAM,EAAE,MAAA,GAAS,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,MAAM,CAAA,CAAA,CAAG,CAAA,GAAI,EAAA;AACjD,IAAA,IAAA,CAAK,CAAA,IAAA,EAAO,CAAA,CAAE,GAAA,CAAI,QAAQ,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,SAAS,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,CAAA,EAAG,CAAA,CAAE,YAAY,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,EAAI,CAAA,CAAE,SAAS,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAG,CAAA,CAAE,CAAA;AAAA,EAClH;AACF;;;ACpFO,SAAS,eAAe,OAAA,EAAwB;AACrD,EAAA,MAAM,GAAA,GAAM,QACT,OAAA,CAAQ,QAAQ,EAChB,WAAA,CAAY,uEAAuE,CAAA,CACnF,MAAA,CAAO,WAAyB;AAC/B,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAA,CAAK,EAAE,QAAQ,CAAA;AACf,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,CAAA,EAAG,EAAE,IAAA,CAAK,WAAW,CAAC,CAAA,MAAA,EAAM,MAAA,CAAO,MAAM,CAAA,0BAAA,CAA4B,CAAA;AAC1E,IAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,MAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,qEAAqE,CAAC,CAAA;AACjF,MAAA;AAAA,IACF;AACA,IAAA,KAAA,MAAW,CAAA,IAAK,MAAA,EAAQ,IAAA,CAAK,CAAA,EAAA,EAAK,EAAE,IAAA,CAAK,CAAA,CAAE,OAAA,CAAQ,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA;AAAA,EAC5E,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,GAAG,CAAA;AACxB;;;ACjBO,SAAS,gBAAgB,OAAA,EAAwB;AACtD,EAAA,MAAM,GAAA,GAAM,OAAA,CACT,OAAA,CAAQ,SAAS,EACjB,WAAA,CAAY,6EAA6E,CAAA,CACzF,MAAA,CAAO,YAAA,EAAc,gBAAA,EAAkB,IAAI,CAAA,CAC3C,OAAO,WAAyB;AAC/B,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,OAAO,MAAA,CAAO,IAAA,CAAK,IAAA,EAAK,CAAE,IAAI,CAAA,IAAK,EAAA;AACzC,IAAA,MAAM,IAAA,GAAO,OAAO,MAAM,CAAA;AAC1B,IAAA,MAAMS,IAAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,MAAM,MAAA,GAAS,WAAA,CAAY,IAAA,EAAM,IAAA,EAAMA,IAAG,CAAA;AAC1C,IAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,IAAA,EAAM,IAAA,EAAMA,IAAG,CAAA;AAEvC,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAA,CAAK,EAAE,GAAG,MAAA,EAAQ,KAAA,EAAO,CAAA;AACzB,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,YAAY,CAAC,CAAA,WAAA,EAAW,IAAI,CAAA,MAAA,EAAS,CAAA,CAAE,GAAA,CAAI,oCAAoC,CAAC,CAAA,CAAE,CAAA;AACjG,IAAA,IAAI,KAAA,CAAM,MAAA,CAAO,KAAA,KAAU,CAAA,EAAG;AAC5B,MAAA,IAAA;AAAA,QACE,CAAA,CAAE,GAAA;AAAA,UACA,MAAA,CAAO,UACH,wCAAA,GACA;AAAA;AACN,OACF;AACA,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,MAAA,CAAO,UAAU,CAAA,EAAG;AACtB,MAAA,IAAA,CAAK,aAAa,MAAA,CAAO,OAAO,CAAA,qBAAA,EAAqB,GAAA,CAAI,OAAO,QAAQ,CAAC,CAAA,6BAAA,EAA2B,GAAA,CAAI,OAAO,cAAc,CAAC,CAAA,UAAA,EAAQ,MAAA,CAAO,KAAK,CAAA,UAAA,CAAS,CAAA;AAC3J,MAAA,IAAA,CAAK,CAAA,aAAA,EAAgB,MAAA,CAAO,SAAS,CAAA,IAAA,EAAO,MAAA,CAAO,SAAS,CAAA,KAAA,EAAQ,MAAA,CAAO,eAAe,CAAA,uBAAA,EAAgB,MAAA,CAAO,KAAK,CAAA,CAAE,CAAA;AACxH,MAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,yGAAyG,CAAC,CAAA;AAAA,IACvH;AAGA,IAAA,cAAA,CAAe,KAAK,CAAA;AAAA,EACtB,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,GAAG,CAAA;AACxB;AAEA,SAAS,IAAI,CAAA,EAAmB;AAC9B,EAAA,IAAI,CAAA,IAAK,KAAK,OAAO,CAAA,EAAA,CAAI,IAAI,GAAA,EAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAC5C,EAAA,IAAI,CAAA,IAAK,KAAK,OAAO,CAAA,EAAA,CAAI,IAAI,GAAA,EAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAC5C,EAAA,OAAO,OAAO,CAAC,CAAA;AACjB;AAGA,SAAS,eAAe,KAAA,EAA0B;AAChD,EAAA,IAAA,CAAK,EAAE,CAAA;AACP,EAAA,IAAA,CAAK,EAAE,IAAA,CAAK,cAAc,IAAI,CAAA,CAAE,GAAA,CAAI,kFAA4E,CAAC,CAAA;AACjH,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,IAAA,CAAK,MAAM,CAAC,CAAA;AACzE,EAAA,MAAM,MAAA,GACJ,SACA,SAAA,CAAU,MAAA,CAAO,KAAK,CAAA,GACtB,CAAC,OAAA,EAAS,UAAA,EAAY,SAAA,EAAW,MAAA,EAAQ,UAAU,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA;AACxF,EAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,MAAM,CAAC,CAAA;AAClB,EAAA,KAAA,MAAW,GAAA,IAAO,MAAM,QAAA,EAAU;AAChC,IAAA,IAAA;AAAA,MACE,SACE,GAAA,CAAI,IAAA,CAAK,MAAA,CAAO,KAAK,IACrB,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA,CAAE,SAAS,CAAC,CAAA,GAC5B,OAAO,GAAA,CAAI,QAAQ,EAAE,QAAA,CAAS,CAAC,CAAA,GAC/B,MAAA,CAAO,IAAI,OAAO,CAAA,CAAE,SAAS,CAAC,CAAA,GAC9B,OAAO,GAAA,CAAI,IAAI,CAAA,CAAE,QAAA,CAAS,CAAC,CAAA,GAC3B,CAAA,EAAG,IAAI,UAAU,CAAA,CAAA,CAAA,CAAI,SAAS,CAAC;AAAA,KACnC;AAAA,EACF;AACA,EAAA,MAAM,IAAI,KAAA,CAAM,MAAA;AAChB,EAAA,IAAA,CAAK,CAAA,CAAE,IAAI,MAAA,GAAS,QAAA,CAAI,OAAO,KAAA,GAAQ,EAAE,CAAC,CAAC,CAAA;AAC3C,EAAA,IAAA;AAAA,IACE,SACE,CAAA,CAAE,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAC,CAAA,GAC5B,MAAA,CAAO,CAAA,CAAE,KAAK,CAAA,CAAE,QAAA,CAAS,CAAC,CAAA,GAC1B,MAAA,CAAO,EAAE,QAAQ,CAAA,CAAE,QAAA,CAAS,CAAC,IAC7B,MAAA,CAAO,CAAA,CAAE,OAAO,CAAA,CAAE,SAAS,CAAC,CAAA,GAC5B,MAAA,CAAO,CAAA,CAAE,IAAI,CAAA,CAAE,QAAA,CAAS,CAAC,CAAA,GACzB,EAAA,CAAG,SAAS,CAAC;AAAA,GACjB;AACA,EAAA,IAAA,CAAK,EAAE,GAAA,CAAI,CAAA,iCAAA,EAAoC,KAAA,CAAM,aAAa,GAAG,CAAC,CAAA;AACxE;AC3DO,SAAS,YAAY,OAAA,EAAwB;AAClD,EAAA,MAAM,GAAA,GAAM,QACT,OAAA,CAAQ,KAAK,EACb,WAAA,CAAY,+DAA+D,CAAA,CAC3E,QAAA,CAAS,WAAA,EAAa,8EAA8E,EACpG,MAAA,CAAO,eAAA,EAAiB,wBAAwB,CAAA,CAChD,MAAA,CAAO,eAAA,EAAiB,yCAAyC,CAAA,CACjE,MAAA,CAAO,UAAA,EAAY,kFAAkF,CAAA,CACrG,MAAA,CAAO,oBAAoB,wBAAwB,CAAA,CACnD,MAAA,CAAO,iBAAA,EAAmB,iDAAiD,CAAA,CAC3E,OAAO,cAAA,EAAgB,mDAAmD,CAAA,CAC1E,MAAA,CAAO,mBAAA,EAAqB,gCAAgC,EAC5D,MAAA,CAAO,mBAAA,EAAqB,0EAA0E,CAAA,CACtG,MAAA,CAAO,gBAAA,EAAkB,yEAAyE,CAAA,CAClG,MAAA,CAAO,eAA+B,IAAA,EAAgB,IAAA,EAAkK;AACvN,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,IAAA,GAAO,OAAO,MAAM,CAAA;AAC1B,IAAA,MAAM,CAAC,IAAA,EAAM,GAAG,IAAI,CAAA,GAAI,IAAA;AAIxB,IAAA,MAAM,OAAA,GAAU,CAAC,MAAA,CAAO,KAAA;AACxB,IAAA,IAAI,CAAC,IAAA,EAAM,OAAO,WAAA,CAAY,IAAA,EAAM,OAAO,IAAI,CAAA;AAE/C,IAAA,MAAM,UAAU,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA,IAAK,OAAA,KAAY,CAAC,MAAA,CAAO,KAAA;AAC5D,IAAA,IAAI,IAAA,KAAS,KAAA,EAAO,OAAO,MAAA,CAAO,IAAA,EAAM,IAAA,EAAM,EAAE,GAAG,IAAA,EAAM,MAAA,EAAO,EAAG,MAAA,CAAO,IAAI,CAAA;AAC9E,IAAA,IAAI,IAAA,KAAS,WAAW,OAAO,UAAA,CAAW,MAAM,IAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAA;AAC/E,IAAA,IAAI,SAAS,SAAA,EAAW,OAAO,WAAW,IAAA,EAAM,IAAA,EAAM,OAAO,IAAI,CAAA;AACjE,IAAA,IAAI,IAAA,KAAS,WAAW,OAAO,UAAA,CAAW,MAAM,EAAE,MAAA,EAAO,EAAG,MAAA,CAAO,IAAI,CAAA;AAGvE,IAAA,OAAO,OAAA,CAAQ,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA,EAAG,IAAA,CAAK,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,GAAI,MAAA,EAAW,OAAO,IAAA,EAAM;AAAA,MAC/F,MAAA,EAAQ,OAAA;AAAA;AAAA,MACR,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,QAAQ,IAAA,CAAK;AAAA,KACd,CAAA;AAAA,EACH,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,GAAG,CAAA;AACxB;AAEA,SAAS,WAAA,CAAY,MAAc,MAAA,EAAwB;AACzD,EAAA,MAAM,OAAA,GAAU,YAAY,IAAI,CAAA;AAChC,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,IAAA,CAAK,aAAA,CAAc,CAAA,CAAE,IAAI,CAAC,CAAA;AACzF,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,IAAA,CAAK,KAAK,GAAA,CAAI,CAAC,OAAO,EAAE,EAAA,EAAI,EAAE,EAAA,EAAI,IAAA,EAAM,EAAE,IAAA,EAAM,OAAA,EAAS,EAAE,OAAA,EAAS,MAAA,EAAQ,EAAE,MAAA,CAAO,IAAA,GAAO,CAAC,CAAA;AAC7F,IAAA;AAAA,EACF;AACA,EAAA,IAAA,CAAK,CAAA,EAAG,EAAE,IAAA,CAAK,QAAQ,CAAC,CAAA,MAAA,EAAM,IAAA,CAAK,MAAM,CAAA,4BAAA,CAA8B,CAAA;AACvE,EAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,IAAA,MAAM,CAAA,GAAI,QAAA,CAAS,IAAA,EAAM,CAAC,CAAA;AAC1B,IAAA,MAAM,GAAA,GAAM,CAAA,CAAE,KAAA,KAAU,QAAA,GAAW,EAAE,MAAA,CAAO,6BAA6B,CAAA,GAAI,CAAA,CAAE,KAAA,KAAU,OAAA,GAAU,CAAA,CAAE,GAAA,CAAI,eAAe,CAAA,GAAI,EAAA;AAC5H,IAAA,IAAA,CAAK,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,CAAK,CAAA,CAAE,IAAI,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,EAAI,CAAA,CAAE,OAAO,EAAE,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,EAAI,CAAA,CAAE,MAAA,CAAO,IAAI,CAAA,CAAA,CAAG,CAAC,CAAA,EAAG,GAAG,CAAA,CAAE,CAAA;AAAA,EAC3F;AACA,EAAA,IAAI,CAAC,IAAA,CAAK,MAAA,OAAa,CAAA,CAAE,GAAA,CAAI,sDAAiD,CAAC,CAAA;AACjF;AAEA,eAAe,MAAA,CAAO,IAAA,EAAc,IAAA,EAAgB,IAAA,EAA6D,MAAA,EAAiC;AAChJ,EAAA,MAAM,MAAA,GAAS,KAAK,CAAC,CAAA;AACrB,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,UAAA,CAAW,6EAA6E,CAAA;AAC3G,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI;AACF,IAAA,KAAA,GAAQ,MAAM,UAAA,CAAW,MAAA,EAAQ,EAAE,MAAM,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,OAAA,EAAS,IAAA,CAAK,OAAA,EAAS,YAAA,EAAc,IAAA,CAAK,QAAQ,CAAA;AAAA,EAC9G,SAAS,GAAA,EAAK;AACZ,IAAA,MAAM,IAAI,QAAA,CAAU,GAAA,CAAc,OAAA,EAAS,SAAS,KAAK,CAAA;AAAA,EAC3D;AACA,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,IAAA,CAAK,KAAK,CAAA;AACV,IAAA;AAAA,EACF;AACA,EAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,KAAA,CAAM,QAAG,CAAC,UAAU,CAAA,CAAE,IAAA,CAAK,KAAA,CAAM,IAAI,CAAC,CAAA,CAAA,EAAI,EAAE,GAAA,CAAI,CAAA,CAAA,EAAI,KAAA,CAAM,OAAO,CAAA,CAAE,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,KAAK,CAAA,eAAA,EAAa,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAC5H;AAEA,SAAS,mBAAmB,IAAA,EAAkC;AAC5D,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAMnB,YAAAA,CAAG,YAAA,CAAakB,aAAAA,CAAK,IAAA,CAAK,IAAA,EAAM,cAAc,CAAA,EAAG,MAAM,CAAC,CAAA;AAC/E,IAAA,OAAO,OAAO,GAAA,CAAI,OAAA,KAAY,QAAA,GAAW,IAAI,OAAA,GAAU,KAAA,CAAA;AAAA,EACzD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AACA,SAAS,iBAAiB,CAAA,EAA+B;AACvD,EAAA,IAAI;AACF,IAAA,MAAM,CAAA,GAAIlB,YAAAA,CAAG,YAAA,CAAa,CAAA,EAAG,MAAM,CAAA;AACnC,IAAA,OAAO,CAAA,CAAE,IAAA,EAAK,GAAI,CAAA,GAAI,KAAA,CAAA;AAAA,EACxB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAOA,eAAe,UAAA,CACb,IAAA,EACA,IAAA,EACA,IAAA,EACA,QACA,MAAA,EACe;AACf,EAAA,IAAI,MAAA,CAAO,KAAA,EAAO,MAAM,UAAA,CAAW,uFAAkF,CAAA;AACrH,EAAA,MAAM,IAAA,GAAA,CAAQ,KAAK,IAAA,CAAK,GAAG,KAAK,IAAA,CAAK,IAAA,IAAQ,IAAI,IAAA,EAAK;AACtD,EAAA,IAAI,CAAC,IAAA,EAAM,MAAM,UAAA,CAAW,mGAAmG,CAAA;AAE/H,EAAA,MAAM,MAAM,UAAA,EAAW;AACvB,EAAA,MAAM,MAAA,GAAS,GAAA,GAAMoB,UAAAA,CAAS,GAAG,CAAA,GAAI,IAAA;AACrC,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,QAAA,CAAS,6FAAA,EAA0F,SAAS,WAAW,CAAA;AAE9I,EAAA,MAAM,WAAW,IAAA,CAAK,OAAA,IAAW,mBAAmB,IAAI,CAAA,IAAK,IAAI,IAAA,EAAK;AACtE,EAAA,IAAI,CAAC,OAAA,EAAS,MAAM,UAAA,CAAW,kFAAkF,CAAA;AAEjH,EAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,IAAA,CAAK,MAAA,GAASF,aAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA,GAAIA,aAAAA,CAAK,IAAA,CAAK,IAAA,EAAM,WAAW,CAAC,CAAA;AACtG,EAAA,MAAM,GAAA,GAAM,KAAK,GAAA,GAAM,gBAAA,CAAiBA,cAAK,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAC,CAAA,GAAI,MAAA;AAClE,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,GAAA,EAAK,MAAM,WAAW,iEAA4D,CAAA;AAElG,EAAA,MAAM,SAAS,MAAM,qBAAA;AAAA,IACnB,EAAE,IAAA,EAAM,OAAA,EAAS,QAAQ,GAAA,EAAK,QAAA,EAAU,KAAK,QAAA,EAAS;AAAA,IACtD,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,QAAQ,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAM,EAAE,OAAO,MAAA,CAAO,KAAA,EAAO,MAAA,EAAQ,MAAA,CAAO,QAAO;AAAE,GACnG;AACA,EAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,IAAA,MAAM,MAAM,MAAA,CAAO,OAAA,IAAW,OAAO,KAAA,IAAS,CAAA,qBAAA,EAAwB,OAAO,MAAM,CAAA,CAAA,CAAA;AACnF,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,MAAA,KAAW,GAAA,GAAM,QAAA,CAAS,WAAA,GAAc,MAAA,CAAO,MAAA,KAAW,GAAA,GAAM,QAAA,CAAS,WAAA,GAAc,QAAA,CAAS,KAAA;AACpH,IAAA,MAAM,IAAI,QAAA,CAAS,GAAA,EAAK,IAAI,CAAA;AAAA,EAC9B;AACA,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,IAAA,CAAK,MAAM,CAAA;AACX,IAAA;AAAA,EACF;AACA,EAAA,IAAA,CAAK,CAAA,EAAG,EAAE,KAAA,CAAM,QAAG,CAAC,CAAA,WAAA,EAAc,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAI,EAAE,GAAA,CAAI,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAAC,CAAA,MAAA,EAAM,OAAO,QAAQ,CAAA,eAAA,EAAe,MAAA,CAAO,aAAa,CAAA,iCAAA,CAAmC,CAAA;AACjK,EAAA,IAAA,CAAK,EAAE,GAAA,CAAI,CAAA,0CAAA,EAA0C,MAAA,CAAO,QAAQ,EAAE,CAAC,CAAA;AACzE;AAEA,SAAS,UAAA,CAAW,IAAA,EAAc,IAAA,EAAgB,MAAA,EAAwB;AACxE,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAC1B,EAAA,IAAI,CAAC,IAAA,EAAM,MAAM,UAAA,CAAW,8BAA8B,CAAA;AAC1D,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,WAAA,CAAY,IAAI,GAAG,IAAI,CAAA;AAChD,EAAA,IAAI,CAAC,KAAA,EAAO,MAAM,IAAI,QAAA,CAAS,CAAA,oBAAA,EAAuB,IAAI,CAAA,MAAA,EAAS,KAAA,CAAM,IAAI,CAAC,CAAA,CAAA,CAAA,EAAK,SAAS,SAAS,CAAA;AACrG,EAAA,IAAI,MAAA,EAAQ,IAAA,CAAK,EAAE,EAAA,EAAI,KAAA,CAAM,EAAA,EAAI,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,OAAA,EAAS,KAAA,CAAM,OAAA,EAAS,CAAA;AAAA,OACtE,IAAA,CAAK,CAAA,EAAG,KAAA,CAAM,EAAE,IAAI,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,EAAI,KAAA,CAAM,IAAI,CAAA,CAAA,EAAI,KAAA,CAAM,OAAO,CAAA,CAAA,CAAG,CAAC,CAAA,CAAE,CAAA;AACtE;AAEA,eAAe,UAAA,CAAW,IAAA,EAAc,IAAA,EAA4B,MAAA,EAAiC;AACnG,EAAA,MAAM,OAAA,GAAU,YAAY,IAAI,CAAA;AAChC,EAAA,MAAM,UAA2C,EAAC;AAClD,EAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AACpD,IAAA,IAAI;AACF,MAAA,MAAM,UAAA,CAAW,KAAA,CAAM,MAAA,CAAO,QAAA,EAAU,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,SAAS,KAAA,CAAM,OAAA,EAAS,YAAA,EAAc,IAAA,CAAK,QAAQ,CAAA;AACrH,MAAA,OAAA,CAAQ,KAAK,EAAE,IAAA,EAAM,MAAM,IAAA,EAAM,EAAA,EAAI,MAAM,CAAA;AAAA,IAC7C,CAAA,CAAA,MAAQ;AACN,MAAA,OAAA,CAAQ,KAAK,EAAE,IAAA,EAAM,MAAM,IAAA,EAAM,EAAA,EAAI,OAAO,CAAA;AAAA,IAC9C;AAAA,EACF;AACA,EAAA,IAAI,MAAA,EAAQ,IAAA,CAAK,EAAE,SAAA,EAAW,SAAS,CAAA;AAAA,YAC7B,CAAA,EAAG,CAAA,CAAE,KAAK,gBAAgB,CAAC,SAAM,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA,CAAE,MAAM,CAAA,CAAA,EAAI,OAAA,CAAQ,MAAM,CAAA,YAAA,CAAc,CAAA;AAC/G;AAQA,eAAe,QAAQ,IAAA,EAAc,IAAA,EAAc,QAA4B,MAAA,EAAkB,IAAA,GAAiB,EAAC,EAAkB;AACnI,EAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,EAAA,MAAM,OAAA,GAAU,YAAY,IAAI,CAAA;AAChC,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,OAAA,EAAS,IAAI,CAAA;AACtC,EAAA,MAAM,GAAA,GAAM,cAAA,CAAe,IAAA,EAAM,IAAI,CAAA;AAErC,EAAA,MAAM,WAAA,GAAc,OAAO,IAAA,IAAQ,IAAA;AACnC,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI,UAAA,GAAa,IAAI,MAAA,IAAU,GAAA;AAC/B,EAAA,IAAI,SAAA;AACJ,EAAA,IAAI,KAAA;AAEJ,EAAA,IAAI,KAAA,EAAO;AAET,IAAA,QAAA,GAAW,OAAA,CAAQ,MAAM,KAAK,CAAA;AAC9B,IAAA,UAAA,GAAa,KAAA,CAAM,OAAA;AACnB,IAAA,KAAA,GAAQ,QAAA,CAAS,MAAM,KAAK,CAAA;AAAA,EAC9B,CAAA,MAAO;AAEL,IAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,IAAA,EAAM,IAAI,CAAA;AACzC,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,QAAA,GAAW,KAAA,CAAM,IAAA;AACjB,MAAA,UAAA,GAAa,KAAA,CAAM,OAAA,IAAW,GAAA,CAAI,MAAA,IAAU,GAAA;AAC5C,MAAA,SAAA,GAAY,KAAA,CAAM,MAAA;AAAA,IACpB;AAAA,EACF;AAIA,EAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,IAAA,EAAM,WAAW,CAAA;AACpD,EAAA,MAAM,OAAA,GACJ,QAAA,KAAa,MAAA,GACT,gBAAA,CAAiB,CAAC,QAAA,EAAU,UAAU,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,MAAM,CAAA,EAAG,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,cAAA,CAAe,UAAU,CAAA,EAAG,CAAA,GAChI,EAAE,UAAA,EAAY,KAAA,EAAO,KAAA,EAAO,CAAA,EAAG,OAAA,EAAS,CAAC,eAAe,CAAA,EAAE;AAIhE,EAAA,IAAI,MAAA,GAAkC,IAAA;AACtC,EAAA,IAAI,MAAA,IAAU,CAAC,OAAA,CAAQ,UAAA,EAAY;AAEjC,IAAA,MAAM,MAAM,UAAA,EAAW;AACvB,IAAA,MAAM,MAAA,GAAS,GAAA,GAAME,UAAAA,CAAS,GAAG,CAAA,GAAI,IAAA;AACrC,IAAA,MAAA,GAAS,MAAM,eAAA;AAAA,MACb,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,IAAA,EAAM,WAAW,MAAA,EAAO;AAAA,MACpD,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,MAAA,EAAQ,KAAK,MAAA,EAAQ,IAAA,EAAM,MAAA,GAAS,EAAE,OAAO,MAAA,CAAO,KAAA,EAAO,QAAQ,MAAA,CAAO,MAAA,KAAW,MAAA;AAAU,KACxH;AAAA,EACF;AAEA,EAAA,IAAI,QAAA,KAAa,MAAA,IAAa,CAAC,MAAA,EAAQ;AACrC,IAAA,MAAM,IAAI,QAAA;AAAA,MACR,wBAAwB,IAAI,CAAA,iDAAA,EAA+C,IAAI,CAAA,yBAAA,EAA4B,MAAA,GAAS,KAAK,kDAAkD,CAAA,CAAA;AAAA,MAC3K,QAAA,CAAS;AAAA,KACX;AAAA,EACF;AAEA,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,GAAA,GAAM,MAAA,CAAO,OAAA;AACb,IAAA,SAAA,GAAY,QAAA;AACZ,IAAA,UAAA,GAAa,OAAO,OAAA,IAAW,UAAA;AAAA,EACjC,CAAA,MAAO;AACL,IAAA,GAAA,GAAM,gBAAgB,EAAE,MAAA,EAAQ,UAAW,UAAA,EAAY,MAAA,EAAQ,CAAA,CAAE,IAAA;AAAA,EACnE;AAEA,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,IAAA,CAAK;AAAA,MACH,IAAI,KAAA,EAAO,EAAA;AAAA,MACX,IAAA,EAAM,WAAA;AAAA,MACN,OAAA,EAAS,UAAA;AAAA,MACT,QAAQ,SAAA,IAAa,SAAA;AAAA,MACrB,OAAO,KAAA,IAAS,IAAA;AAAA,MAChB,gBAAA,EAAkB,IAAI,QAAA,IAAY,IAAA;AAAA,MAClC,OAAA,EAAS,EAAE,UAAA,EAAY,OAAA,CAAQ,UAAA,EAAY,OAAO,OAAA,CAAQ,KAAA,EAAO,OAAA,EAAS,OAAA,CAAQ,OAAA,EAAQ;AAAA,MAC1F,QAAA,EAAU,OAAA,CAAQ,UAAA,GAAa,IAAA,GAAO,QAAA;AAAA,MACtC,SAAA,EAAW,QAAQ,MAAM,CAAA;AAAA,MACzB,IAAA,EAAM;AAAA,KACP,CAAA;AACD,IAAA;AAAA,EACF;AACA,EAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,QAAQ,CAAC,CAAA,MAAA,EAAM,CAAA,CAAE,IAAA,CAAK,WAAW,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,IAAI,UAAU,CAAA,CAAE,CAAC,CAAA,EAAG,SAAA,GAAY,CAAA,CAAE,GAAA,CAAI,CAAA,OAAA,EAAU,SAAS,CAAA,CAAA,CAAG,CAAA,GAAI,EAAE,CAAA,CAAE,CAAA;AAC/H,EAAA,IAAI,GAAA,CAAI,QAAA,EAAU,IAAA,CAAK,CAAA,CAAE,MAAA,CAAO,YAAO,GAAA,CAAI,QAAA,CAAS,IAAI,CAAA,CAAE,CAAC,CAAA;AAC3D,EAAA,IAAI,MAAA,EAAQ,IAAA,CAAK,CAAA,CAAE,KAAA,CAAM,iFAAuE,CAAC,CAAA;AAAA,OAAA,IACxF,CAAC,OAAA,CAAQ,UAAA,EAAY,IAAA,CAAK,CAAA,CAAE,OAAO,CAAA,+BAAA,EAA6B,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAI,SAAS,2CAAA,GAAyC,oDAA+C,EAAE,CAAC,CAAA;AAC3M,EAAA,IAAI,KAAA,EAAO,KAAA,KAAU,QAAA,EAAU,IAAA,CAAK,CAAA,CAAE,MAAA,CAAO,CAAA,sBAAA,EAAoB,KAAA,CAAM,SAAS,CAAA,gCAAA,EAAmC,KAAA,CAAM,SAAS,0BAAqB,CAAC,CAAA;AAAA,OAAA,IAC/I,KAAA,EAAO,KAAA,KAAU,SAAA,EAAW,IAAA,CAAK,CAAA,CAAE,MAAM,CAAA,4CAAA,EAA0C,KAAA,CAAM,SAAS,CAAA,CAAA,CAAG,CAAC,CAAA;AAC/G,EAAA,IAAA,CAAK,EAAE,CAAA;AACP,EAAA,GAAA,CAAI,GAAG,CAAA;AACT;AC5QO,SAAS,eAAe,OAAA,EAAwB;AACrD,EAAA,MAAM,GAAA,GAAM,OAAA,CACT,OAAA,CAAQ,QAAQ,EAChB,WAAA,CAAY,iGAAiG,CAAA,CAC7G,QAAA,CAAS,UAAU,+BAAA,EAAiC,UAAU,CAAA,CAC9D,MAAA,CAAO,SAAyB,IAAA,EAAc;AAC7C,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,YAAA,CAAa,MAAM,CAAA;AACrC,IAAA,MAAM,IAAA,GAAO,OAAO,MAAM,CAAA;AAE1B,IAAA,MAAM,MAAA,GAAS,aAAa,IAAI,CAAA;AAChC,IAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,UAAA,CAAW,CAAA,2BAAA,EAA8B,IAAI,CAAA,CAAA,CAAG,CAAA;AAEnE,IAAA,MAAM,SAAA,GAAY,MAAA,KAAW,WAAA,IAAe,MAAA,KAAW,MAAA;AACvD,IAAA,MAAM,OAAA,GAAU,YAAY,MAAA,EAAQ;AAAA,MAClC,KAAA;AAAA,MACA,IAAA,EAAM,SAAA,GAAY,SAAA,CAAU,IAAI,EAAE,OAAA,GAAU,MAAA;AAAA,MAC5C,QAAQ,SAAA,IAAa,CAAC,MAAA,CAAO,KAAA,GAAQ,gBAAe,GAAI,MAAA;AAAA,MACxD,aAAa,KAAA,CAAM;AAAA,KACpB,CAAA;AAED,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,GAAA,CAAI,OAAA,CAAQ,SAAS,CAAA;AACrB,MAAA;AAAA,IACF;AACA,IAAGC,GAAA,CAAA,SAAA,CAAeC,aAAaA,IAAA,CAAA,OAAA,CAAQ,IAAI,CAAC,CAAA,EAAG,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAClE,IAAGD,GAAA,CAAA,aAAA,CAAc,MAAM,OAAO,CAAA;AAC9B,IAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,KAAA,CAAM,QAAG,CAAC,CAAA,OAAA,EAAU,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,CAAG,CAAC,CAAA,CAAE,CAAA;AAAA,EAC9D,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,GAAG,CAAA;AACxB;AAEA,SAAS,aAAa,IAAA,EAAmC;AACvD,EAAA,MAAM,KAAA,GAAQ,KAAK,WAAA,EAAY;AAC/B,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,WAAW,CAAA,EAAG,OAAO,WAAA;AACxC,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,YAAY,CAAA,EAAG,OAAO,MAAA;AACzC,EAAA,IAAI,IAAA,KAAS,KAAK,OAAO,MAAA;AACzB,EAAA,OAAO,YAAA,CAAkBC,IAAA,CAAA,OAAA,CAAQ,IAAI,CAAC,CAAA;AACxC;ACnCO,SAAS,eAAe,OAAA,EAAwB;AACrD,EAAA,MAAM,MAAM,OAAA,CACT,OAAA,CAAQ,QAAQ,CAAA,CAChB,WAAA,CAAY,iEAAiE,CAAA,CAC7E,MAAA,CAAO,aAAa,+CAA+C,CAAA,CACnE,OAAO,iBAAA,EAAmB,kBAAA,EAAoB,WAAW,CAAA,CACzD,MAAA,CAAO,SAAyB,IAAA,EAAwB;AACvD,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,IAAA,GAAO,OAAO,MAAM,CAAA;AAC1B,IAAA,MAAM,MAAA,GAAcC,IAAA,CAAA,OAAA,CAAQ,IAAA,EAAM,IAAA,CAAK,OAAO,WAAW,CAAA;AAKzD,IAAA,IAAI,YAAA;AACJ,IAAA,IAAI;AACF,MAAA,YAAA,GAAe,oBAAA,EAAqB;AAAA,IACtC,CAAA,CAAA,MAAQ;AACN,MAAA,MAAM,IAAI,QAAA,CAAS,iDAAA,EAAmD,QAAA,CAAS,KAAK,CAAA;AAAA,IACtF;AACA,IAAGC,GAAA,CAAA,SAAA,CAAeD,UAAK,MAAA,EAAQ,UAAU,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAC/D,IAAA,IAAI,YAAA,GAAe,CAAA;AACnB,IAAA,KAAA,MAAW,EAAE,QAAA,EAAU,OAAA,EAAQ,IAAK,YAAA,EAAc;AAChD,MAAGC,iBAAa,OAAA,EAAcD,IAAA,CAAA,IAAA,CAAK,MAAA,EAAQ,UAAA,EAAY,QAAQ,CAAC,CAAA;AAChE,MAAA,YAAA,EAAA;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAqB,CAAC,CAAA,WAAA,EAAc,YAAY,CAAA,OAAA,CAAS,CAAA;AAE/D,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,KAAA,IAAS,gBAAA,CAAiB,IAAI,CAAA;AACtD,IAAA,IAAOC,GAAA,CAAA,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3B,MAAGA,GAAA,CAAA,YAAA,CAAa,QAAA,EAAeD,IAAA,CAAA,IAAA,CAAK,MAAA,EAAQ,YAAY,CAAC,CAAA;AACzD,MAAA,QAAA,CAAS,KAAK,YAAY,CAAA;AAAA,IAC5B;AAEA,IAAA,MAAM,GAAA,GAAM,YAAY,IAAI,CAAA;AAC5B,IAAA,IAAOC,GAAA,CAAA,UAAA,CAAW,GAAG,CAAA,EAAG;AACtB,MAAGA,GAAA,CAAA,YAAA,CAAa,GAAA,EAAUD,IAAA,CAAA,IAAA,CAAK,MAAA,EAAQ,mBAAmB,CAAC,CAAA;AAC3D,MAAA,QAAA,CAAS,KAAK,mBAAmB,CAAA;AACjC,MAAA,IAAOC,GAAA,CAAA,UAAA,CAAW,MAAA,CAAO,IAAI,CAAC,CAAA,EAAG;AAC/B,QAAGA,GAAA,CAAA,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,EAAQD,IAAA,CAAA,IAAA,CAAK,MAAA,EAAQ,KAAK,CAAA,EAAG,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AACrE,QAAA,QAAA,CAAS,KAAK,MAAM,CAAA;AAAA,MACtB;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW;AAAA,MACf,IAAA,EAAM,IAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,UAAU,iBAAA,EAAkB;AAAA,MAC5B,YAAA;AAAA,MACA,QAAA;AAAA,MACA,KAAA,EAAO;AAAA,KACT;AACA,IAAGC,GAAA,CAAA,aAAA,CAAmBD,UAAK,MAAA,EAAQ,eAAe,GAAG,CAAA,EAAG,eAAA,CAAgB,QAAA,EAAU,CAAC,CAAC;AAAA,CAAI,CAAA;AAExF,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAA,CAAK,EAAE,KAAUA,IAAA,CAAA,QAAA,CAAS,IAAA,EAAM,MAAM,CAAA,EAAG,GAAG,UAAU,CAAA;AACtD,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,WAAW,CAAC,eAAiBA,IAAA,CAAA,QAAA,CAAS,IAAA,EAAM,MAAM,CAAC,CAAA,CAAA,CAAG,CAAA;AACrE,IAAA,KAAA,MAAW,CAAA,IAAK,QAAA,EAAU,IAAA,CAAK,CAAA,EAAA,EAAK,CAAA,CAAE,MAAM,QAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAA;AACvD,IAAA,IAAA,CAAK,CAAA,CAAE,IAAI,CAAA,gCAAA,EAAwCA,IAAA,CAAA,QAAA,CAAS,MAAM,MAAM,CAAC,YAAY,CAAC,CAAA;AAAA,EACxF,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,GAAG,CAAA;AACxB;AC7EO,IAAM,WAAA,GAAc,IAAIE,OAAAA,CAAQ,MAAM,CAAA,CAC1C,YAAY,kCAAkC,CAAA,CAC9C,QAAA,CAAS,QAAA,EAAU,oBAAA,EAAsB,GAAG,EAC5C,MAAA,CAAO,YAAA,EAAc,oCAAoC,CAAA,CACzD,MAAA,CAAO,OAAA,EAAS,2BAA2B,CAAA,CAC3C,MAAA,CAAO,OAAO,UAAA,EAAoB,IAAA,KAAgD;AACjF,EAAA,MAAM,OAAA,GAAeC,aAAQ,UAAU,CAAA;AACvC,EAAA,MAAMC,YAAAA,GAAmBD,IAAA,CAAA,IAAA,CAAK,OAAA,EAAS,WAAW,CAAA;AAElD,EAAA,MAAM,UAAUC,YAAW,CAAA;AAC3B,EAAA,OAAA,CAAQ,GAAA,CAAIxB,MAAAA,CAAM,KAAA,CAAM,QAAG,CAAA,GAAI,YAAYA,MAAAA,CAAM,IAAA,CAAK,YAAY,CAAC,CAAA,UAAA,CAAY,CAAA;AAE/E,EAAA,MAAM,UAAA,GAAkBuB,IAAA,CAAA,IAAA,CAAK,OAAA,EAAS,oBAAoB,CAAA;AAC1D,EAAA,IAAI,MAAME,UAAAA,CAAW,UAAU,CAAA,EAAG;AAChC,IAAA,OAAA,CAAQ,GAAA,CAAIzB,MAAAA,CAAM,GAAA,CAAI,+CAA+C,CAAC,CAAA;AAAA,EACxE,CAAA,MAAO;AACL,IAAA,MAAM,mBAAmB,OAAO,CAAA;AAChC,IAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,KAAA,CAAM,QAAG,CAAA,GAAI,YAAYA,MAAAA,CAAM,IAAA,CAAK,oBAAoB,CAAC,CAAA,CAAE,CAAA;AAAA,EAC/E;AAEA,EAAA,IAAI,KAAK,QAAA,EAAU;AACjB,IAAA,MAAM,EAAE,WAAA,EAAY,GAAI,MAAM,OAAO,wBAAe,CAAA;AACpD,IAAA,MAAM,YAAY,OAAO,CAAA;AAAA,EAC3B;AAEA,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,EAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,IAAA,CAAK,aAAa,CAAC,CAAA;AACrC,EAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAKA,MAAAA,CAAM,IAAA,CAAK,eAAe,CAAC,CAAA,kCAAA,CAAoC,CAAA;AAChF,EAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAKA,MAAAA,CAAM,IAAA,CAAK,mBAAmB,CAAC,CAAA,+BAAA,CAAiC,CAAA;AACjF,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAChB,CAAC,CAAA;;;ACnCI,SAAS,gBAAA,CAAiB,UAAkB,OAAA,EAAyC;AAC1F,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,mBAAA,EAAsB,QAAQ,CAAA,CAAE,CAAA;AAC5C,EAAA,IAAI,SAAS,SAAA,EAAW;AACtB,IAAA,OAAA,CAAQ,IAAI,6BAA6B,CAAA;AAAA,EAC3C;AACF;AASO,SAAS,mBAAmB,KAAA,EAAqB;AACtD,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,qBAAA,KAA0B,GAAA,EAAK;AAC/C,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,qBAAA,EAAwB,KAAK,CAAA,CAAE,CAAA;AAC7C;ACXA,IAAM,sBAAA,GAAmE;AAAA,EACvE,EAAE,KAAA,EAAO,CAAC,aAAa,SAAS,CAAA,EAA+B,MAAM,QAAA,EAAW;AAAA,EAChF,EAAE,KAAA,EAAO,CAAC,WAAW,cAAc,CAAA,EAA4B,MAAM,QAAA,EAAW;AAAA,EAChF,EAAE,KAAA,EAAO,CAAC,WAAW,CAAA,EAA0C,MAAM,UAAA,EAAW;AAAA,EAChF,EAAE,KAAA,EAAO,CAAC,mCAAmC,UAAU,CAAA,EAAQ,MAAM,SAAA,EAAW;AAAA,EAChF,EAAE,KAAA,EAAO,CAAC,SAAS,CAAA,EAA4C,MAAM,QAAA,EAAW;AAAA,EAChF,EAAE,KAAA,EAAO,CAAC,kBAAkB,CAAA,EAAmC,MAAM,UAAA,EAAW;AAAA,EAChF,EAAE,KAAA,EAAO,CAAC,QAAQ,CAAA,EAA6C,MAAM,OAAA;AACvE,CAAA;AAEA,eAAsB,kBAAkB,OAAA,EAAyC;AAC/E,EAAA,KAAA,MAAW,YAAY,sBAAA,EAAwB;AAC7C,IAAA,KAAA,MAAW,IAAA,IAAQ,SAAS,KAAA,EAAO;AACjC,MAAA,IAAI,MAAMyB,YAAA,CAAgBC,IAAA,CAAA,IAAA,CAAK,OAAA,EAAS,IAAI,CAAC,CAAA,EAAG;AAC9C,QAAA,OAAO,QAAA,CAAS,IAAA;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,qBAAqB,iBAAA,EAAwC;AAC3E,EAAA,MAAMC,KAAAA,GAAO3B,MAAAA,CAAM,GAAA,CAAI,SAAS,CAAA;AAChC,EAAA,MAAM4B,KAAAA,GAAO5B,MAAAA,CAAM,GAAA,CAAI,SAAS,CAAA;AAIhC,EAAA,MAAM,MAAM,oBAAA,EAAqB;AACjC,EAAA,MAAM,WAAA,GAAc,iBAAA,GAAoB,CAAA,QAAA,EAAW,iBAAiB,CAAA,CAAA,GAAK,eAAA;AACzE,EAAA,MAAM,UAAA,GAAa,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA;AACxC,EAAA,MAAM,eAAe,iBAAA,GACjBA,MAAAA,CAAM,IAAI,CAAA,GAAA,EAAM,iBAAiB,mBAAmB,CAAA,GACpD,EAAA;AAEJ,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,EAAA,OAAA,CAAQ,GAAA,CAAI2B,KAAAA,CAAK,4TAAwD,CAAC,CAAA;AAC1E,EAAA,OAAA,CAAQ,IAAIA,KAAAA,CAAK,UAAK,CAAA,GAAI,IAAA,GAAOC,MAAK,QAAG,CAAA,GAAI,IAAA,GAAO5B,MAAAA,CAAM,KAAK,KAAA,CAAM,qCAAqC,IAAI,YAAA,GAAe2B,KAAAA,CAAK,QAAG,CAAC,CAAA;AACtI,EAAA,OAAA,CAAQ,GAAA,CAAIA,KAAAA,CAAK,4TAAwD,CAAC,CAAA;AAC1E,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,EAAA,OAAA,CAAQ,IAAI,IAAA,GAAO3B,MAAAA,CAAM,KAAK,KAAA,CAAM,UAAU,IAAI,YAAY,CAAA;AAC9D,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,EAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,GAAO2B,KAAAA,CAAK,MAAG,CAAA,GAAI,GAAA,GAAM3B,MAAAA,CAAM,KAAA,CAAM,4BAA4B,CAAA,GAAIA,MAAAA,CAAM,GAAA,CAAI,mDAA8C,CAAC,CAAA;AAC1I,EAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,GAAO2B,KAAAA,CAAK,MAAG,CAAA,GAAI,GAAA,GAAM3B,MAAAA,CAAM,KAAA,CAAM,eAAe,CAAA,GAAIA,MAAAA,CAAM,GAAA,CAAI,qEAAgE,CAAC,CAAA;AAC/I,EAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,GAAO2B,KAAAA,CAAK,MAAG,CAAA,GAAI,GAAA,GAAM3B,MAAAA,CAAM,KAAA,CAAM,8BAA8B,CAAA,GAAIA,MAAAA,CAAM,GAAA,CAAI,uDAAkD,CAAC,CAAA;AAChJ,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAChB;;;ACNO,SAAS,mBAAmB,IAAA,EAIvB;AACV,EAAA,OAAO,KAAK,KAAA,KAAU,KAAA,IAAS,CAAC,IAAA,CAAK,UAAA,IAAc,CAAC,IAAA,CAAK,gBAAA;AAC3D;AAGA,eAAe,QAAA,CACb,QAAA,EACA,OAAA,EACA,IAAA,EACe;AACf,EAAA,MAAM,GAAA,GAAM,UAAA,CAAW,IAAA,CAAK,GAAG,CAAA;AAC/B,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,2BAA2B,CAAC,CAAA;AACpD,IAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,gEAAgE,CAAC,CAAA;AACzF,IAAA,IAAI,IAAA,CAAK,MAAA,EAAQ,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA;AAC/B,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GAAS,SAAS,GAAG,CAAA;AAC3B,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,qBAAqB,CAAC,CAAA;AAC9C,IAAA,IAAI,IAAA,CAAK,MAAA,EAAQ,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA;AAC/B,IAAA;AAAA,EACF;AAGA,EAAA,MAAM,EAAE,IAAA,EAAM,eAAA,EAAgB,GAAI,MAAM,wBAAwB,QAAQ,CAAA;AACxE,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,GAAA,EAAK,CAAA;AAEnC,EAAA,IAAI,OAAO,MAAA,CAAO,IAAA;AAClB,EAAA,IAAI,KAAK,MAAA,EAAQ;AACf,IAAA,IAAI;AACF,MAAA,IAAA,GAAO,iBAAA,CAAkB,KAAK,MAAM,CAAA;AAAA,IACtC,SAAS,CAAA,EAAY;AACnB,MAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA;AACnE,MAAA,IAAI,IAAA,CAAK,MAAA,EAAQ,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA;AAC/B,MAAA;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA,CAAE,MAAA;AAC9C,EAAA,MAAM,iBAAiB,IAAA,CAAK,MAAA;AAC5B,EAAA,MAAM,UAAU,CAAA,GAAI,cAAA,GAAiB,YAAA,IAAgB,GAAA,EAAK,QAAQ,CAAC,CAAA;AACnE,EAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,GAAA,CAAI,CAAA,aAAA,EAAgB,IAAI,CAAA,KAAA,EAAA,CAAS,cAAA,GAAiB,IAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,KAAA,EAAQ,KAAK,YAAY,CAAC,CAAA;AAE9G,EAAA,IAAI;AAEF,IAAA,MAAM,EAAE,QAAA,EAAU,IAAA,EAAM,YAAA,EAAa,GAAI,MAAM,kBAAA,CAAmB;AAAA,MAChE,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,IAAA;AAAA,MACA,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,IAAA;AAAA,MACA,eAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAO,IAAA,CAAK;AAAA,KACb,CAAA;AACD,IAAA,IAAA,GAAO,YAAA;AAEP,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,KAAA,EAAQ,SAAS,MAAM,CAAA,EAAA,EAAK,IAAI,CAAA,CAAE,CAAA;AAAA,IACpD;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,IAAA,EAAK;AAQnC,IAAA,IAAI,OAAO,SAAA,EAAW;AACpB,MAAA,OAAA,CAAQ,GAAA;AAAA,QACNA,OAAM,KAAA,CAAM,QAAG,IACX,CAAA,4BAAA,EAA+B,MAAA,CAAO,iBAAiB,WAAW,CAAA,wCAAA;AAAA,OACxE;AACA,MAAA,IAAI,OAAO,gBAAA,EAAkB;AAC3B,QAAA,gBAAA,CAAiB,MAAA,CAAO,gBAAA,EAAkB,EAAE,SAAA,EAAW,MAAM,CAAA;AAC7D,QAAA,MAAM,OAAA,GAAU,CAAA,QAAA,EAAW,qBAAA,CAAsB,IAAI,CAAC,IAAI,MAAA,CAAO,WAAW,CAAA,MAAA,EAAS,MAAA,CAAO,gBAAgB,CAAA,CAAA;AAC5G,QAAA,OAAA,CAAQ,IAAIA,MAAAA,CAAM,GAAA,CAAI,CAAA,mBAAA,EAAsB,OAAO,EAAE,CAAC,CAAA;AAAA,MACxD,CAAA,MAAA,IAAW,KAAK,MAAA,EAAQ;AACtB,QAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,0DAA0D,CAAC,CAAA;AACnF,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AACA,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,GAAA,CAAIA,OAAM,KAAA,CAAM,QAAG,IAAI,CAAA,6BAAA,EAAgC,MAAA,CAAO,QAAA,IAAY,IAAI,CAAA,CAAA,CAAG,CAAA;AACzF,IAAA,IAAI,OAAO,QAAA,EAAU;AACnB,MAAA,gBAAA,CAAiB,OAAO,QAAQ,CAAA;AAChC,MAAA,MAAM,OAAA,GAAU,CAAA,QAAA,EAAW,qBAAA,CAAsB,IAAI,CAAC,IAAI,MAAA,CAAO,WAAW,CAAA,MAAA,EAAS,MAAA,CAAO,QAAQ,CAAA,CAAA;AAGpG,MAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,QAAA,KAAa,OAAA,GAAU,gBAAA,GAAmB,EAAA;AACrE,MAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,MAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,GAAaA,MAAAA,CAAM,GAAA,CAAI,sEAAsE,CAAC,CAAA;AAC1G,MAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,MAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,GAAaA,MAAAA,CAAM,IAAA,CAAK,keAAkF,CAAC,CAAA;AACvH,MAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,GAAaA,MAAAA,CAAM,IAAA,CAAK,8BAAuB,CAAC,CAAA;AAC5D,MAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,IAAA,GAAOA,OAAM,SAAA,CAAU,IAAA,CAAK,OAAO,CAAC,CAAA;AAC7D,MAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,GAAaA,MAAAA,CAAM,IAAA,CAAK,keAAkF,CAAC,CAAA;AACvH,MAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,MAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,IAChB;AAAA,EACF,SAAS,CAAA,EAAY;AACnB,IAAA,MAAM,MAAM,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,OAAO,CAAC,CAAA;AACrD,IAAA,OAAA,CAAQ,MAAMA,MAAAA,CAAM,GAAA,CAAI,CAAA,eAAA,EAAkB,GAAG,EAAE,CAAC,CAAA;AAChD,IAAA,IAAI,IAAA,CAAK,MAAA,EAAQ,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA;AAAA,EACjC;AACF;AAOA,SAAS,eAAA,CAAgB,OAAe,QAAA,EAA8B;AACpE,EAAA,OAAO,CAAC,GAAG,QAAA,EAAU,GAAG,oBAAA,CAAqB,KAAK,CAAC,CAAA;AACrD;AAOA,SAAS,gBAAgB,OAAA,EAAuB;AAC9C,EAAA,MAAM,MAAA,GAAS,cAAc,OAAO,CAAA;AACpC,EAAA,IAAI,CAAC,OAAO,MAAA,EAAQ;AACpB,EAAA,MAAM,aAAa,cAAA,CAAe,MAAA,CAAO,QAAQ,SAAA,CAAU,OAAO,EAAE,OAAO,CAAA;AAC3E,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,IAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,KAAA,CAAM,QAAG,IAAI,2CAA2C,CAAA;AAC1E,IAAA;AAAA,EACF;AACA,EAAA,OAAA,CAAQ,GAAA,CAAIA,OAAM,GAAA,CAAI;AAAA,kBAAA,EAAkB,UAAA,CAAW,MAAM,CAAA,8BAAA,CAAgC,CAAC,CAAA;AAC1F,EAAA,KAAA,MAAW,KAAK,UAAA,EAAY;AAC1B,IAAA,MAAM,GAAA,GAAM,EAAE,GAAA,GAAMA,MAAAA,CAAM,IAAI,CAAA,YAAA,EAAU,CAAA,CAAE,GAAG,CAAA,CAAE,CAAA,GAAI,EAAA;AACnD,IAAA,MAAM,GAAA,GAAM,EAAE,MAAA,GAASA,MAAAA,CAAM,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,MAAM,CAAA,CAAA,CAAG,CAAA,GAAI,EAAA;AACrD,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAKA,MAAAA,CAAM,GAAA,CAAI,QAAQ,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,SAAS,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,CAAA,EAAG,CAAA,CAAE,SAAA,GAAYA,MAAAA,CAAM,GAAA,CAAI,CAAA,CAAA,EAAI,CAAA,CAAE,SAAS,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,EAAG,GAAG,CAAA,EAAG,GAAG,CAAA,CAAE,CAAA;AAAA,EAC/H;AACF;AAEA,SAAS,sBAAA,CAAuB,OAA2B,KAAA,EAAmC;AAC5F,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,MAAA;AAChC,EAAA,MAAM,MAAA,GAAS,OAAO,KAAK,CAAA;AAC3B,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,IAAK,SAAS,CAAA,EAAG;AAC1C,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,+BAAA,CAAiC,CAAA;AAAA,EAC3D;AACA,EAAA,OAAO,MAAA;AACT;AAEO,IAAM,WAAA,GAAc,IAAIsB,OAAAA,CAAQ,MAAM,EAC1C,WAAA,CAAY,kCAAkC,CAAA,CAC9C,QAAA,CAAS,QAAA,EAAU,cAAA,EAAgB,GAAG,CAAA,CACtC,OAAO,cAAA,EAAgB,kBAAkB,CAAA,CACzC,MAAA,CAAO,mBAAA,EAAqB,oCAAA,EAAsC,MAAM,CAAA,CACxE,OAAO,mBAAA,EAAqB,uBAAuB,CAAA,CACnD,MAAA,CAAO,qBAAqB,0BAA0B,CAAA,CACtD,MAAA,CAAO,gBAAA,EAAkB,yBAAyB,CAAA,CAClD,MAAA;AAAA,EACC,sBAAA;AAAA,EACA,sNAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA,CACC,OAAO,mBAAA,EAAqB,0BAAA,EAA4B,GAAG,CAAA,CAC3D,OAAO,QAAA,EAAU,8CAA8C,CAAA,CAC/D,MAAA,CAAO,eAAe,8CAA8C,CAAA,CACpE,OAAO,mBAAA,EAAqB,kDAAkD,EAC9E,MAAA,CAAO,UAAA,EAAY,qBAAqB,CAAA,CACxC,OAAO,cAAA,EAAgB,yDAAyD,CAAA,CAChF,MAAA,CAAO,wBAAwB,+CAA+C,CAAA,CAC9E,MAAA,CAAO,eAAA,EAAiB,sEAAsE,CAAA,CAC9F,MAAA,CAAO,aAAa,kDAAkD,CAAA,CACtE,OAAO,QAAA,EAAU,wLAAmL,CAAA,CACpM,MAAA,CAAO,WAAW,6HAA6H,CAAA,CAC/I,MAAA,CAAO,2BAAA,EAA6B,gEAAgE,CAAA,CACpG,MAAA,CAAO,kCAAA,EAAoC,oDAAoD,EAC/F,MAAA,CAAO,wBAAA,EAA0B,6CAA6C,CAAA,CAC9E,MAAA,CAAO,+BAA+B,qDAAqD,CAAA,CAC3F,MAAA,CAAO,0BAAA,EAA4B,sGAAsG,CAAA,CACzI,MAAA,CAAO,SAAA,EAAW,uLAAuL,EACzM,MAAA,CAAO,YAAA,EAAc,6FAA6F,CAAA,CAClH,OAAO,SAAA,EAAW,2HAA2H,EAC7I,MAAA,CAAO,OAAO,YAAoB,IAAA,KA6B7B;AACJ,EAAA,MAAM,OAAA,GAAeO,aAAQ,UAAU,CAAA;AACvC,EAAA,IAAI,CAAE,MAAMJ,YAAA,CAAW,OAAO,CAAA,EAAI;AAChC,IAAA,OAAA,CAAQ,MAAMzB,MAAAA,CAAM,GAAA,CAAI,CAAA,qBAAA,EAAwB,OAAO,EAAE,CAAC,CAAA;AAC1D,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,MAAA,GAAS,CAAC,CAAC,UAAA,CAAW,KAAK,GAAG,CAAA;AACpC,EAAA,MAAM,QAAA,GAAW,CAAC,IAAA,CAAK,OAAA,KAAY,KAAK,IAAA,IAAQ,MAAA,CAAA;AAOhD,EAAA,MAAM,gBAAA,GAAmB,KAAK,cAAA,KAAmB,KAAA;AAGjD,EAAA,MAAM,UAAA,GAAa,CAAE,MAAMyB,YAAA,CAAgBI,UAAK,OAAA,EAAS,WAAA,EAAa,kBAAkB,CAAC,CAAA;AAKzF,EAAA,IAAI,YAAA;AAMJ,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI,UAAA;AAEJ,EAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,IAAA,MAAM,GAAA,GAAM,UAAA,CAAW,IAAA,CAAK,GAAG,CAAA;AAC/B,IAAA,MAAM,MAAA,GAAS,SAAS,GAAG,CAAA;AAC3B,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAM,aAAa,IAAA,CAAK,MAAA,GAAS,kBAAkB,IAAA,CAAK,MAAM,IAAI,MAAA,CAAO,IAAA;AACzE,MAAA,MAAM,GAAA,GAAM,MAAM,SAAA,CAAU,OAAO,CAAA;AACnC,MAAA,MAAM,WAAA,GAAc,MAAM,sBAAA,CAAuB,OAAA,EAAS,GAAG,CAAA;AAC7D,MAAA,MAAM,iBAAiB,IAAA,CAAK,cAAA,EAAgB,MAAK,IAAK,MAAM,sBAAsB,OAAO,CAAA;AACzF,MAAA,IAAI;AACF,QAAA,MAAM,SAAA,GAAY,MAAM,kBAAA,CAAmB,MAAA,EAAQ,UAAA,EAAY;AAAA,UAC7D,cAAA;AAAA,UACA,QAAQ,WAAA,CAAY;AAAA,SACrB,CAAA;AACD,QAAA,YAAA,GAAe,SAAA,CAAU,MAAA;AACzB,QAAA,QAAA,GAAW,UAAU,IAAA,EAAM,IAAA;AAG3B,QAAA,UAAA,GACE,SAAA,CAAU,UAAA,IACV,CAAA,QAAA,EAAW,qBAAA,CAAsB,SAAA,CAAU,cAAc,UAAU,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,WAAW,CAAA,CAAA;AAC5F,QAAA,IAAI,SAAA,CAAU,EAAA,IAAM,CAAC,SAAA,CAAU,GAAG,OAAA,EAAS;AACzC,UAAA,OAAA,CAAQ,MAAM7B,MAAAA,CAAM,GAAA,CAAI,SAAA,CAAU,KAAA,IAAS,0BAA0B,CAAC,CAAA;AACtE,UAAA,OAAA,CAAQ,KAAA;AAAA,YACNA,MAAAA,CAAM,GAAA;AAAA,cACJ,CAAA,YAAA,EAAe,SAAA,CAAU,EAAA,CAAG,IAAI,CAAA,CAAA,EAAI,SAAA,CAAU,EAAA,CAAG,KAAK,CAAA,EAAA,EAAK,SAAA,CAAU,IAAA,CAAK,KAAK,CAAA,mDAAA;AAAA;AACjF,WACF;AACA,UAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,QAChB;AAIA,QAAA,IAAI,SAAA,CAAU,YAAA,IAAgB,CAAC,SAAA,CAAU,aAAa,OAAA,EAAS;AAC7D,UAAA,OAAA,CAAQ,KAAA;AAAA,YACNA,MAAAA,CAAM,GAAA;AAAA,cACJ,SAAA,CAAU,KAAA,IACR,CAAA,iCAAA,EAAoC,SAAA,CAAU,KAAK,KAAK,CAAA,0CAAA;AAAA;AAC5D,WACF;AACA,UAAA,MAAM,GAAA,GACJ,UAAU,YAAA,CAAa,GAAA,GAAM,IAAI,WAAA,GAAc,MAAA,CAAO,SAAA,CAAU,YAAA,CAAa,GAAG,CAAA;AAClF,UAAA,OAAA,CAAQ,KAAA;AAAA,YACNA,MAAAA,CAAM,GAAA;AAAA,cACJ,CAAA,cAAA,EAAiB,UAAU,YAAA,CAAa,KAAK,IAAI,GAAG,CAAA,EAAA,EAAK,SAAA,CAAU,IAAA,CAAK,KAAK,CAAA,wDAAA;AAAA;AAC/E,WACF;AACA,UAAA,IAAI,UAAU,UAAA,EAAY;AACxB,YAAA,OAAA,CAAQ,MAAMA,MAAAA,CAAM,GAAA,CAAI,cAAc,SAAA,CAAU,UAAU,EAAE,CAAC,CAAA;AAAA,UAC/D;AACA,UAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,QAChB;AACA,QAAA,IAAI,UAAU,MAAA,KAAW,OAAA,IAAW,CAAC,SAAA,CAAU,MAAM,OAAA,EAAS;AAC5D,UAAA,OAAA,CAAQ,MAAMA,MAAAA,CAAM,GAAA,CAAI,SAAA,CAAU,KAAA,IAAS,gDAAgD,CAAC,CAAA;AAC5F,UAAA,OAAA,CAAQ,KAAA;AAAA,YACNA,MAAAA,CAAM,GAAA;AAAA,cACJ,CAAA,SAAA,EAAY,SAAA,CAAU,KAAA,CAAM,IAAI,CAAA,CAAA,EAAI,SAAA,CAAU,KAAA,CAAM,KAAK,CAAA,EAAA,EAAK,SAAA,CAAU,IAAA,CAAK,KAAK,CAAA,MAAA;AAAA;AACpF,WACF;AACA,UAAA,IAAI,IAAA,CAAK,MAAA,EAAQ,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA;AAC/B,UAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,QAChB;AACA,QAAA,OAAA,CAAQ,GAAA;AAAA,UACNA,MAAAA,CAAM,GAAA;AAAA,YACJ,CAAA,MAAA,EAAS,SAAA,CAAU,IAAA,CAAK,KAAK,CAAA,qBAAA,EAAmB,SAAA,CAAU,KAAA,CAAM,IAAI,CAAA,CAAA,EAAI,SAAA,CAAU,KAAA,CAAM,KAAK,CAAA,WAAA;AAAA;AAC/F,SACF;AAGA,QAAA,IAAI,SAAA,CAAU,UAAA,EAAY,SAAA,IAAa,CAAC,KAAK,KAAA,EAAO;AAClD,UAAA,OAAA,CAAQ,GAAA;AAAA,YACNA,MAAAA,CAAM,KAAA,CAAM,QAAG,CAAA,GACX,CAAA,yBAAA,EAA4B,SAAA,CAAU,UAAA,CAAW,UAAA,EAAY,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,IAAK,eAAe,CAAA,sBAAA;AAAA,WACjG;AACA,UAAA,IAAI,SAAA,CAAU,WAAW,YAAA,EAAc;AACrC,YAAA,gBAAA,CAAiB,UAAU,UAAA,CAAW,YAAA,EAAc,EAAE,SAAA,EAAW,MAAM,CAAA;AACvE,YAAA,MAAM,OAAA,GAAU,CAAA,QAAA,EAAW,qBAAA,CAAsB,UAAU,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,WAAW,CAAA,MAAA,EAAS,SAAA,CAAU,UAAA,CAAW,YAAY,CAAA,CAAA;AAC5H,YAAA,OAAA,CAAQ,IAAIA,MAAAA,CAAM,GAAA,CAAI,CAAA,iBAAA,EAAoB,OAAO,EAAE,CAAC,CAAA;AAAA,UACtD,CAAA,MAAA,IAAW,KAAK,MAAA,EAAQ;AACtB,YAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,2DAA2D,CAAC,CAAA;AACpF,YAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,UAChB;AACA,UAAA;AAAA,QACF;AAAA,MACF,SAAS,CAAA,EAAY;AACnB,QAAA,MAAM,MAAM,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,OAAO,CAAC,CAAA;AACrD,QAAA,OAAA,CAAQ,MAAMA,MAAAA,CAAM,MAAA,CAAO,CAAA,wBAAA,EAA2B,GAAG,EAAE,CAAC,CAAA;AAC5D,QAAA,IAAI,IAAA,CAAK,MAAA,EAAQ,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GAAwB;AAAA,IAC5B,eAAA,EAAiB,OAAA;AAAA,IACjB,KAAK,IAAA,CAAK,GAAA;AAAA,IACV,MAAA,EAAS,KAAK,MAAA,IAA+C,MAAA;AAAA,IAC7D,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,aAAa,IAAA,CAAK,WAAA;AAAA,IAClB,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,WAAA,EAAa,QAAA,CAAS,IAAA,CAAK,WAAA,EAAa,EAAE,CAAA,IAAK,CAAA;AAAA,IAC/C,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,KAAK,IAAA,CAAK,GAAA;AAAA;AAAA;AAAA,IAGV,MAAA,EAAQ,KAAK,MAAA,IAAU,YAAA;AAAA,IACvB,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,gBAAA;AAAA,IACA,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,SAAS,IAAA,CAAK,OAAA;AAAA;AAAA,IAEd,KAAA,EAAO,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,IAAA;AAAA,IAC1B,iBAAiB,IAAA,CAAK,eAAA;AAAA,IACtB,WAAA,EAAa,sBAAA,CAAuB,IAAA,CAAK,WAAA,EAAa,gBAAgB,CAAA;AAAA,IACtE,qBAAA,EAAuB,sBAAA,CAAuB,IAAA,CAAK,cAAA,EAAgB,mBAAmB,CAAA;AAAA,IACtF,kBAAA,EAAoB,KAAK,kBAAA,GAAqB,QAAA,CAAS,KAAK,kBAAA,EAAoB,EAAE,KAAK,MAAA,GAAY,MAAA;AAAA,IACnG,cAAA,EAAgB,IAAA,CAAK,cAAA,EAAgB,IAAA,EAAK,IAAK,MAAA;AAAA,IAC/C,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,OAAO,IAAA,CAAK,KAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASZ,aAAA,EAAe,MAAA;AAAA,IACf,QAAA;AAAA,IACA,UAAA;AAAA;AAAA;AAAA,IAGA,YAAY,oBAAA;AAAqB,GACnC;AAUA,EAAA,MAAM,SAAA,GAAY,kBAAA,CAAmB,EAAE,KAAA,EAAO,IAAA,CAAK,OAAO,UAAA,EAAY,IAAA,CAAK,UAAA,EAAY,gBAAA,EAAkB,CAAA;AACzG,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,QAAA,CAAS,QAAA,GAAW,OAAO,MAAA,KAAW;AACpC,MAAA,MAAM,MAAA,GAAS,MAAM,UAAA,CAAW;AAAA,QAC9B,IAAA,EAAM,OAAA;AAAA,QACN,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,iBAAiB,CAAC,IAAA,EAAM,UAAU,MAAA,CAAO,IAAA,EAAM,OAAO,SAAS;AAAA,OAChE,CAAA;AACD,MAAA,cAAA,CAAe,MAAA,CAAO,KAAA,EAAO,EAAE,IAAA,EAAM,SAAS,CAAA;AAG9C,MAAA,aAAA,CAAc,SAAS,MAAA,CAAO,KAAA,CAAM,UAAA,CAAW,UAAA,EAAY,OAAO,SAAA,EAAW;AAAA,QAC3E,SAAS,IAAA,CAAK;AAAA,OACf,CAAA;AACD,MAAA,MAAM,EAAE,MAAA,EAAO,GAAI,MAAA,CAAO,KAAA,CAAM,IAAA;AAChC,MAAA,OAAO,CAAA,EAAG,OAAO,KAAA,CAAM,cAAA,EAAgB,CAAA,YAAA,EAAY,MAAA,CAAO,KAAA,CAAM,cAAA,EAAgB,CAAA,MAAA,CAAA;AAAA,IAClF,CAAA;AAAA,EACF;AAIA,EAAA,MAAM,QAAA,GAAW,MAAM,oBAAA,EAAqB;AAC5C,EAAA,MAAM,QAAA,GAAW,MAAM,WAAA,CAAY,OAAA,EAAS,UAAU,QAAQ,CAAA;AAK9D,EAAA,kBAAA,CAAmB,QAAA,CAAS,MAAM,KAAK,CAAA;AAKvC,EAAA,IAAI,KAAK,IAAA,EAAM;AACb,IAAA,eAAA,CAAgB,OAAO,CAAA;AAAA,EACzB;AAGA,EAAA,IAAI,KAAK,MAAA,EAAQ;AACf,IAAA,MAAM,SAAA,GAAY,SAAS,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAyB,CAAA,CAAE,UAAU,OAAO,CAAA;AACtF,IAAA,MAAM,WAAA,GAAc,SAAS,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAyB,CAAA,CAAE,UAAU,SAAS,CAAA;AAE1F,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,OAAA,IAAW,SAAA,EAAW;AACxC,MAAA,OAAA,CAAQ,KAAA,CAAMA,OAAM,GAAA,CAAI;AAAA,SAAA,EAAc,QAAA,CAAS,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAyB,CAAA,CAAE,KAAA,KAAU,OAAO,CAAA,CAAE,MAAM,CAAA,2BAAA,CAA6B,CAAC,CAAA;AAClJ,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AACA,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,KAAW,SAAA,IAAa,WAAA,CAAA,EAAc;AACxD,MAAA,OAAA,CAAQ,KAAA,CAAMA,OAAM,GAAA,CAAI;AAAA,kDAAA,CAAsD,CAAC,CAAA;AAC/E,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AAEA,EAAA,IAAI,SAAS,WAAA,KAAgB,MAAA,IAAa,SAAS,KAAA,CAAM,KAAA,GAAQ,SAAS,WAAA,EAAa;AACrF,IAAA,OAAA,CAAQ,KAAA,CAAMA,OAAM,GAAA,CAAI;AAAA,sCAAA,EAA2C,SAAS,KAAA,CAAM,KAAK,uBAAuB,QAAA,CAAS,WAAW,GAAG,CAAC,CAAA;AACtI,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,IAAI,QAAA,CAAS,0BAA0B,MAAA,EAAW;AAChD,IAAA,IAAI,QAAA,CAAS,UAAU,MAAA,EAAW;AAChC,MAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,sGAAsG,CAAC,CAAA;AAC/H,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,IAAI,QAAA,CAAS,QAAQ,CAAA,EAAG;AACtB,MAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,KAAA,CAAM,KAAA,GAAQ,QAAA,CAAS,KAAA;AACtD,MAAA,MAAM,cAAc,IAAA,CAAK,GAAA,CAAI,KAAK,GAAA,CAAI,aAAa,GAAG,IAAM,CAAA;AAC5D,MAAA,MAAM,gBAAA,GAAoB,QAAA,CAAS,KAAA,GAAQ,WAAA,GAAe,GAAA;AAE1D,MAAA,IAAI,gBAAA,GAAmB,SAAS,qBAAA,EAAuB;AACrD,QAAA,OAAA,CAAQ,KAAA,CAAMA,OAAM,GAAA,CAAI;AAAA,4CAAA,EAAiD,gBAAA,CAAiB,QAAQ,CAAC,CAAC,gBAAgB,QAAA,CAAS,qBAAqB,KAAK,CAAC,CAAA;AACxJ,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,MAAM,QAAA,CAAS,QAAA,EAAU,OAAA,EAAS,QAAQ,CAAA;AAAA,EAC5C;AAIA,EAAA,MAAM,eACJ,QAAA,CAAS,MAAA,KAAW,MAAA,IACpB,CAAC,KAAK,KAAA,IACN,CAAC,MAAA,IACD,CAAC,KAAK,OAAA,IACN,CAAC,gBAAA,IACD,CAAC,KAAK,UAAA,IACN,UAAA;AAEF,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,MAAM,iBAAA,GAAoB,MAAM,iBAAA,CAAkB,OAAO,CAAA;AACzD,IAAA,oBAAA,CAAqB,iBAAiB,CAAA;AAAA,EACxC;AACF,CAAC,CAAA;ACzfH,IAAM,aAAA,uBAAoB,GAAA,CAAI;AAAA;AAAA,EAE5B,cAAA;AAAA,EACA,mBAAA;AAAA,EACA,qBAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA;AAAA,EAEA,kBAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA;AAAA,EAEA,QAAA;AAAA,EACA,QAAA;AAAA;AAAA,EAEA,YAAA;AAAA,EACA,YAAA;AAAA;AAAA,EAEA,SAAA;AAAA,EACA,cAAA;AAAA;AAAA,EAEA,eAAA;AAAA,EACA,eAAA;AAAA;AAAA,EAEA,eAAA;AAAA,EACA,kBAAA;AAAA;AAAA,EAEA,cAAA;AAAA,EACA,cAAA;AAAA;AAAA,EAEA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA;AAAA,EAEA;AACF,CAAC,CAAA;AAGD,IAAM,WAAA,GAAc,iBAAA;AAOpB,IAAM,SAAA,uBAAgB,GAAA,CAAI;AAAA,EACxB,cAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAC,CAAA;AAiBM,SAAS,aAAA,CAAc,SAAiB,YAAA,EAAuC;AACpF,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI;AACF,IAAA,GAAA,GAAS8B,GAAA,CAAA,QAAA,CAAS,YAAY,CAAA,CAAE,OAAA;AAAA,EAClC,CAAA,CAAA,MAAQ;AAEN,IAAA,OAAO,EAAE,OAAO,KAAA,EAAM;AAAA,EACxB;AAEA,EAAA,IAAI,MAAA,GAAS,CAAA,QAAA;AACb,EAAA,IAAI,aAAA;AAIJ,EAAA,MAAM,WAAA,GAAc,GAAA;AACpB,EAAA,IAAI,OAAA,GAAU,CAAA;AACd,EAAA,MAAMC,KAAAA,GAAO,CAAC,GAAA,EAAa,KAAA,KAAwB;AACjD,IAAA,IAAI,KAAA,GAAQ,CAAA,IAAK,OAAA,GAAU,WAAA,EAAa;AACxC,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI;AACF,MAAA,OAAA,GAAaD,GAAA,CAAA,WAAA,CAAY,GAAA,EAAK,EAAE,aAAA,EAAe,MAAM,CAAA;AAAA,IACvD,CAAA,CAAA,MAAQ;AACN,MAAA;AAAA,IACF;AACA,IAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,MAAA,OAAA,EAAA;AACA,MAAA,IAAI,UAAU,WAAA,EAAa;AAC3B,MAAA,IAAI,CAAA,CAAE,aAAY,EAAG;AACnB,QAAA,IAAI,CAAC,UAAU,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA,IAAK,CAAC,EAAE,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAGC,MAAUC,IAAA,CAAA,IAAA,CAAK,GAAA,EAAK,EAAE,IAAI,CAAA,EAAG,QAAQ,CAAC,CAAA;AAC7F,QAAA;AAAA,MACF;AACA,MAAA,IAAI,CAAC,aAAA,CAAc,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA,IAAK,CAAC,WAAA,CAAY,IAAA,CAAK,CAAA,CAAE,IAAI,CAAA,EAAG;AAC7D,MAAA,MAAM,GAAA,GAAWA,IAAA,CAAA,IAAA,CAAK,GAAA,EAAK,CAAA,CAAE,IAAI,CAAA;AACjC,MAAA,IAAI,OAAA;AACJ,MAAA,IAAI;AACF,QAAA,OAAA,GAAaF,GAAA,CAAA,QAAA,CAAS,GAAG,CAAA,CAAE,OAAA;AAAA,MAC7B,CAAA,CAAA,MAAQ;AACN,QAAA;AAAA,MACF;AACA,MAAA,IAAI,UAAU,MAAA,EAAQ;AACpB,QAAA,MAAA,GAAS,OAAA;AACT,QAAA,aAAA,GAAqBE,IAAA,CAAA,QAAA,CAAS,OAAA,EAAS,GAAG,CAAA,IAAK,CAAA,CAAE,IAAA;AAAA,MACnD;AAAA,IACF;AAAA,EACF,CAAA;AACA,EAAAD,KAAAA,CAAK,SAAS,CAAC,CAAA;AAEf,EAAA,OAAO,MAAA,GAAS,MAAM,EAAE,KAAA,EAAO,MAAM,aAAA,EAAc,GAAI,EAAE,KAAA,EAAO,KAAA,EAAM;AACxE;ACzIO,IAAM,aAAA,GAAgB,EAAA;AAO7B,SAAS,aAAa,CAAA,EAAmB;AACvC,EAAA,OAAO,CAAA,CAAE,OAAA,CAAQ,qBAAA,EAAuB,MAAM,CAAA;AAChD;AAGA,SAAS,aAAA,CAAc,QAAgBxB,IAAAA,EAAwB;AAC7D,EAAA,MAAM,OAAA,GAAU,OAAO,IAAA,EAAK;AAC5B,EAAA,IAAI,CAAC,OAAA,EAAS;AAEd,EAAA,IAAI,gBAAA,CAAiB,IAAA,CAAK,OAAO,CAAA,EAAG;AAClC,IAAAA,IAAAA,CAAI,IAAI,eAAe,CAAA;AACvB,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,aAAA,CAAc,IAAA,CAAK,OAAO,CAAA;AAC7C,EAAA,MAAM,cAAc,UAAA,GAAa,OAAA,CAAQ,MAAM,CAAA,EAAG,UAAA,CAAW,KAAK,CAAA,GAAI,OAAA;AACtE,EAAA,MAAM,YAAY,WAAA,CAAY,OAAA,CAAQ,IAAA,EAAM,EAAE,EAAE,IAAA,EAAK;AACrD,EAAA,IAAI,SAAA,IAAa,QAAQ,IAAA,CAAK,SAAS,GAAGA,IAAAA,CAAI,IAAI,SAAS,CAAA;AAC3D,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,KAAA,MAAW,OAAO,UAAA,CAAW,CAAC,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA,EAAG;AAC1C,MAAA,MAAM,IAAA,GAAO,IAAI,IAAA,EAAK,CAAE,MAAM,UAAU,CAAA,CAAE,CAAC,CAAA,EAAG,IAAA,EAAK;AACnD,MAAA,IAAI,IAAA,IAAQ,WAAW,IAAA,CAAK,IAAI,GAAGA,IAAAA,CAAI,IAAI,IAAI,CAAA;AAAA,IACjD;AAAA,EACF;AACF;AAGO,SAAS,gBAAA,CAAiB,OAAA,EAAiB,GAAA,EAAa,SAAA,EAAiD;AAC9G,EAAA,MAAMA,IAAAA,uBAAU,GAAA,EAAY;AAC5B,EAAA,MAAM,CAAA,GAAI,aAAa,GAAG,CAAA;AAC1B,EAAA,IAAI,cAAc,KAAA,EAAO;AACvB,IAAA,MAAM,WAAW,IAAI,MAAA,CAAO,CAAA,uCAAA,EAA0C,CAAC,oBAAoB,GAAG,CAAA;AAC9F,IAAA,IAAI,CAAA;AACJ,IAAA,OAAQ,CAAA,GAAI,SAAS,IAAA,CAAK,OAAO,GAAI,aAAA,CAAc,CAAA,CAAE,CAAC,CAAA,EAAGA,IAAG,CAAA;AAC5D,IAAA,MAAM,uBAAuB,IAAI,MAAA,CAAO,CAAA,wCAAA,EAA2C,CAAC,2BAA2B,GAAG,CAAA;AAClH,IAAA,OAAQ,CAAA,GAAI,oBAAA,CAAqB,IAAA,CAAK,OAAO,CAAA,EAAI;AAC/C,MAAA,KAAA,MAAW,OAAO,CAAA,CAAE,CAAC,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA,EAAG;AACjC,QAAA,MAAM,IAAA,GAAO,IAAI,IAAA,EAAK,CAAE,MAAM,GAAG,CAAA,CAAE,CAAC,CAAA,EAAG,IAAA,EAAK;AAC5C,QAAA,IAAI,IAAA,IAAQ,WAAW,IAAA,CAAK,IAAI,GAAGA,IAAAA,CAAI,IAAI,IAAI,CAAA;AAAA,MACjD;AAAA,IACF;AAAA,EACF,CAAA,MAAA,IAAW,cAAc,MAAA,EAAQ;AAC/B,IAAA,MAAM,SAAS,IAAI,MAAA,CAAO,CAAA,aAAA,EAAgB,CAAC,sCAAsC,IAAI,CAAA;AACrF,IAAA,IAAI,CAAA;AACJ,IAAA,OAAQ,CAAA,GAAI,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,EAAI;AACjC,MAAA,MAAM,KAAA,GAAQ,EAAE,CAAC,CAAA,CAAE,QAAQ,OAAA,EAAS,EAAE,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA;AACjD,MAAA,KAAA,MAAW,OAAO,KAAA,EAAO;AACvB,QAAA,MAAM,IAAA,GAAO,IAAI,IAAA,EAAK,CAAE,MAAM,UAAU,CAAA,CAAE,CAAC,CAAA,EAAG,IAAA,EAAK;AACnD,QAAA,IAAI,IAAA,KAAS,GAAA,EAAKA,IAAAA,CAAI,IAAI,YAAY,CAAA;AAAA,aAAA,IAC7B,IAAA,IAAQ,WAAW,IAAA,CAAK,IAAI,GAAGA,IAAAA,CAAI,IAAI,IAAI,CAAA;AAAA,MACtD;AAAA,IACF;AACA,IAAA,MAAM,WAAW,IAAI,MAAA,CAAO,CAAA,eAAA,EAAkB,CAAC,OAAO,IAAI,CAAA;AAC1D,IAAA,IAAI,QAAA,CAAS,KAAK,OAAO,CAAA,EAAGA,IAAAA,CAAI,GAAA,CAAI,CAAA,EAAG,GAAG,CAAA,SAAA,CAAW,CAAA;AAAA,EACvD;AACA,EAAA,OAAO,CAAC,GAAGA,IAAG,CAAA,CAAE,IAAA,EAAK;AACvB;;;ACnEA,IAAM0B,UAAAA,uBAAgB,GAAA,CAAI;AAAA,EACxB,cAAA;AAAA,EAAgB,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,OAAA;AAAA,EAAS,KAAA;AAAA,EAAO,WAAA;AAAA,EAAa,QAAA;AAAA,EAC7D,OAAA;AAAA,EAAS,MAAA;AAAA,EAAQ,KAAA;AAAA,EAAO,aAAA;AAAA,EAAe,QAAA;AAAA,EAAU,OAAA;AAAA,EAAS,OAAA;AAAA,EAAS,UAAA;AAAA,EAAY;AACjF,CAAC,CAAA;AACD,IAAM,SAAA,GAAY,GAAA;AAClB,IAAM,SAAA,GAAY,EAAA;AAClB,IAAM,cAAA,GAAiB,OAAA;AAEvB,IAAM,aAAA,GAAiD;AAAA,EACrD,KAAA,EAAO,KAAA;AAAA,EAAO,MAAA,EAAQ,KAAA;AAAA,EAAO,KAAA,EAAO,KAAA;AAAA,EAAO,MAAA,EAAQ,KAAA;AAAA,EAAO,MAAA,EAAQ,KAAA;AAAA,EAAO,MAAA,EAAQ,KAAA;AAAA,EACjF,MAAA,EAAQ,KAAA;AAAA,EAAO,MAAA,EAAQ,KAAA;AAAA,EAAO,MAAA,EAAQ,KAAA;AAAA,EAAO,SAAA,EAAW,KAAA;AAAA,EACxD,KAAA,EAAO;AACT,CAAA;AAEA,SAASC,cAAa,CAAA,EAAmB;AACvC,EAAA,OAAO,CAAA,CAAE,OAAA,CAAQ,qBAAA,EAAuB,MAAM,CAAA;AAChD;AAEA,SAAS,aAAA,CAAc,WAA2B,GAAA,EAAqB;AACrE,EAAA,MAAM,CAAA,GAAIA,cAAa,GAAG,CAAA;AAC1B,EAAA,IAAI,cAAc,KAAA,EAAO;AACvB,IAAA,OAAO,IAAI,MAAA,CAAO,CAAA,6CAAA,EAAgD,CAAC,oBAAoB,GAAG,CAAA;AAAA,EAC5F;AACA,EAAA,OAAO,IAAI,MAAA,CAAO,CAAA,kBAAA,EAAqB,CAAC,CAAA,qBAAA,EAAwB,CAAC,eAAe,IAAI,CAAA;AACtF;AAsBO,SAAS,WAAA,CACd,MACA,QAAA,EAC2B;AAC3B,EAAA,MAAM,MAAA,uBAAa,GAAA,EAA0B;AAC7C,EAAA,MAAM,UAAqB,EAAC;AAC5B,EAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,IAAA,IAAI,CAAA,CAAE,SAAA,KAAc,KAAA,IAAS,CAAA,CAAE,cAAc,MAAA,EAAQ;AACnD,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,MAAM,CAAA,CAAE,IAAA;AAAA,QACR,WAAW,CAAA,CAAE,SAAA;AAAA,QACb,OAAA,EAAS,aAAA,CAAc,CAAA,CAAE,SAAA,EAAW,EAAE,IAAI,CAAA;AAAA,QAC1C,WAAA,EAAa,CAAA;AAAA,QACb,YAAA,EAAc,CAAA;AAAA,QACd,SAAA,sBAAe,GAAA;AAAI,OACpB,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,IAAA,EAAM,EAAE,WAAA,EAAa,CAAA,EAAG,YAAA,EAAc,CAAA,EAAG,SAAA,EAAW,EAAC,EAAG,CAAA;AAAA,IACvE;AAAA,EACF;AACA,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AAEjC,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,MAAMH,KAAAA,GAAO,CAAC,GAAA,EAAa,KAAA,KAAwB;AACjD,IAAA,IAAI,KAAA,GAAQ,SAAA,IAAa,SAAA,IAAa,SAAA,EAAW;AACjD,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI;AACF,MAAA,OAAA,GAAaI,GAAA,CAAA,WAAA,CAAY,GAAA,EAAK,EAAE,aAAA,EAAe,MAAM,CAAA;AAAA,IACvD,CAAA,CAAA,MAAQ;AACN,MAAA;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,IAAA,CAAK,aAAA,CAAc,CAAA,CAAE,IAAI,CAAC,CAAA;AACnD,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,MAAA,IAAI,aAAa,SAAA,EAAW;AAC5B,MAAA,IAAI,KAAA,CAAM,aAAY,EAAG;AACvB,QAAA,IAAIF,UAAAA,CAAU,IAAI,KAAA,CAAM,IAAI,KAAK,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AAC7D,QAAAF,MAAUK,IAAA,CAAA,IAAA,CAAK,GAAA,EAAK,MAAM,IAAI,CAAA,EAAG,QAAQ,CAAC,CAAA;AAC1C,QAAA;AAAA,MACF;AACA,MAAA,MAAM,OAAA,GAAU,aAAA,CAAmBA,IAAA,CAAA,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAC,CAAA;AACtD,MAAA,IAAI,CAAC,OAAA,IAAW,OAAA,KAAY,SAAA,EAAW;AACvC,MAAA,SAAA,EAAA;AACA,MAAA,MAAM,IAAA,GAAYA,IAAA,CAAA,IAAA,CAAK,GAAA,EAAK,KAAA,CAAM,IAAI,CAAA;AACtC,MAAA,IAAI,OAAA;AACJ,MAAA,IAAI;AACF,QAAA,IAAOD,GAAA,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,IAAA,GAAO,cAAA,EAAgB;AAC7C,QAAA,OAAA,GAAaA,GAAA,CAAA,YAAA,CAAa,MAAM,MAAM,CAAA;AAAA,MACxC,CAAA,CAAA,MAAQ;AACN,QAAA;AAAA,MACF;AACA,MAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,QAAA,IAAI,CAAA,CAAE,cAAc,OAAA,EAAS;AAC7B,QAAA,CAAA,CAAE,QAAQ,SAAA,GAAY,CAAA;AACtB,QAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,CAAA,CAAE,OAAO,CAAA;AACvC,QAAA,IAAI,OAAA,IAAW,QAAQ,MAAA,EAAQ;AAC7B,UAAA,CAAA,CAAE,eAAe,OAAA,CAAQ,MAAA;AACzB,UAAA,CAAA,CAAE,YAAA,EAAA;AACF,UAAA,IAAI,CAAA,CAAE,SAAA,CAAU,IAAA,GAAO,aAAA,EAAe;AACpC,YAAA,KAAA,MAAW,GAAA,IAAO,gBAAA,CAAiB,OAAA,EAAS,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,SAAS,CAAA,EAAG,CAAA,CAAE,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA;AAAA,UACvF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA;AACA,EAAAJ,KAAAA,CAAK,MAAM,CAAC,CAAA;AAEZ,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,IAAA,MAAA,CAAO,GAAA,CAAI,EAAE,IAAA,EAAM;AAAA,MACjB,aAAa,CAAA,CAAE,WAAA;AAAA,MACf,cAAc,CAAA,CAAE,YAAA;AAAA,MAChB,SAAA,EAAW,CAAC,GAAG,CAAA,CAAE,SAAS,EAAE,IAAA,EAAK,CAAE,KAAA,CAAM,CAAA,EAAG,aAAa;AAAA,KAC1D,CAAA;AAAA,EACH;AACA,EAAA,OAAO,MAAA;AACT;;;AC5GA,SAAS,QAAA,CAAS,OAAqB,IAAA,EAAiC;AACtE,EAAA,OAAO,MAAM,CAAA,EAAG,KAAA,CAAM,MAAM,CAAA,GAAA,EAAM,IAAI,CAAA,YAAA,CAAA,EAAgB;AAAA,IACpD,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB,kBAAA;AAAA,MAChB,wBAAwB,KAAA,CAAM,SAAA;AAAA,MAC9B,eAAe,CAAA,YAAA,EAAe,KAAA,CAAM,KAAK,CAAA,CAAA,EAAI,MAAM,MAAM,CAAA,CAAA;AAAA,MACzD,UAAA,EAAY;AAAA,KACd;AAAA,IACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,OAAO;AAAA,GACnC,CAAA;AACH;AAEA,eAAe,mBAAmB,QAAA,EAAiD;AACjF,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAW,MAAM,QAAA,CAAS,KAAA,GAAQ,IAAA,EAAK;AAC7C,IAAA,IAAI,SAAS,IAAA,KAAS,iBAAA,IAAqB,CAAC,OAAA,CAAQ,QAAQ,OAAO,KAAA,CAAA;AACnE,IAAA,OAAO,qBAAA,CAAsB,QAAQ,MAAM,CAAA;AAAA,EAC7C,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAMA,eAAsB,eAAe,KAAA,EAA6C;AAChF,EAAA,IAAI,OAAO,KAAA,CAAM,IAAA;AACjB,EAAA,IAAI,QAAA,GAAW,MAAM,QAAA,CAAS,KAAA,EAAO,IAAI,CAAA;AAEzC,EAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,IAAA,MAAM,MAAA,GAAS,MAAM,kBAAA,CAAmB,QAAQ,CAAA;AAChD,IAAA,IAAI,MAAA,IAAU,WAAW,IAAA,EAAM;AAC7B,MAAA,IAAA,GAAO,MAAA;AACP,MAAA,QAAA,GAAW,MAAM,QAAA,CAAS,KAAA,EAAO,IAAI,CAAA;AAAA,IACvC;AAAA,EACF;AACA,EAAA,OAAO,EAAE,UAAU,IAAA,EAAK;AAC1B;AAGA,eAAsB,qBAAqB,QAAA,EAA8C;AACvF,EAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAC9B;AC/DA,IAAM,iBAAiC,CAAC,UAAA,EAAY,MAAA,EAAQ,UAAA,EAAY,OAAO,SAAS,CAAA;AAExF,SAAS,aAAa,KAAA,EAA0B;AAC9C,EAAA,IAAI,KAAA,CAAM,KAAA,KAAU,CAAA,EAAG,OAAO,MAAA;AAC9B,EAAA,MAAM,KAAA,GAAQ,eAAe,MAAA,CAAO,CAAC,MAAM,KAAA,CAAM,UAAA,CAAW,CAAC,CAAC,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,GAAG,KAAA,CAAM,UAAA,CAAW,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAA;AACxG,EAAA,OAAO,KAAA,CAAM,SAAS,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,GAAI,CAAA,EAAG,MAAM,KAAK,CAAA,CAAA;AACzD;AAEA,SAAS,UAAU,KAAA,EAAuB;AACxC,EAAA,IAAI,SAAS,EAAA,EAAI,OAAO/B,OAAM,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,QAAA,CAAU,CAAA;AACtD,EAAA,IAAI,SAAS,EAAA,EAAI,OAAOA,OAAM,MAAA,CAAO,CAAA,EAAG,KAAK,CAAA,aAAA,CAAe,CAAA;AAC5D,EAAA,OAAOA,MAAAA,CAAM,GAAA,CAAI,CAAA,EAAG,KAAK,CAAA,SAAA,CAAW,CAAA;AACtC;AAEA,SAAS,SAAA,CAAU,MAAmB,WAAA,EAA8B;AAClE,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,MAAM,MAAA,GAAS,cAAcA,MAAAA,CAAM,KAAA,CAAM,oBAAe,CAAA,GAAIA,MAAAA,CAAM,IAAI,QAAG,CAAA;AACzE,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,CAAA,EAAIA,OAAM,IAAA,CAAK,IAAA,CAAK,KAAK,CAAC,WAAMA,MAAAA,CAAM,GAAA,CAAI,IAAA,CAAK,WAAW,CAAC,CAAA,CAAE,CAAA;AACjF,EAAA,MAAM,KAAA,GACJ,OAAO,IAAA,CAAK,kBAAA,KAAuB,YAAY,OAAO,IAAA,CAAK,eAAe,QAAA,GACtE,CAAA,yBAAA,EAAoB,KAAK,kBAAkB,CAAA,EAAA,EAAK,KAAK,UAAA,IAAc,CAAA,GAAI,KAAK,GAAG,CAAA,EAAG,IAAA,CAAK,UAAU,CAAA,CAAA,CAAA,GACjG,EAAA;AACN,EAAA,KAAA,CAAM,IAAA;AAAA,IACJ,CAAA,SAAA,EAAY,SAAA,CAAU,IAAA,CAAK,SAAS,CAAC,CAAA,QAAA,EAAQ,IAAA,CAAK,QAAA,CAAS,MAAM,4BACtD,YAAA,CAAa,IAAA,CAAK,KAAK,CAAC,GAAG,KAAK,CAAA;AAAA,GAC7C;AACA,EAAA,IAAI,IAAA,CAAK,WAAW,KAAA,EAAO;AACzB,IAAA,KAAA,CAAM,IAAA,CAAKA,OAAM,GAAA,CAAI,CAAA,sBAAA,EAAoB,aAAa,IAAA,CAAK,UAAU,CAAC,CAAA,iCAAA,CAAmC,CAAC,CAAA;AAAA,EAC5G;AACA,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,GAAG,EAAE,CAAA;AACvC,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,IAAA,MAAM,OAAA,GAAU,CAAA,CAAE,QAAA,EAAU,OAAA,GAAUA,MAAAA,CAAM,OAAA,CAAQ,CAAA,YAAA,EAAe,CAAA,CAAE,QAAA,CAAS,OAAO,CAAA,CAAA,CAAG,CAAA,GAAI,EAAA;AAC5F,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,MAAA,EAASA,MAAAA,CAAM,IAAA,CAAK,CAAA,CAAE,OAAO,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,GAAA,CAAI,CAAA,EAAG,CAAA,CAAE,IAAA,IAAQ,GAAG,CAAA,QAAA,EAAM,CAAA,CAAE,EAAA,IAAM,GAAG,CAAA,CAAE,CAAC,CAAA,EAAA,EAAKA,MAAAA,CAAM,GAAA,CAAI,CAAA,CAAE,MAAM,CAAC,CAAA,EAAG,OAAO,CAAA,CAAE,CAAA;AAAA,EACjI;AACA,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,MAAA,GAAS,KAAA,CAAM,MAAA,EAAQ;AACvC,IAAA,KAAA,CAAM,IAAA,CAAKA,MAAAA,CAAM,GAAA,CAAI,CAAA,iBAAA,EAAe,IAAA,CAAK,SAAS,MAAA,GAAS,KAAA,CAAM,MAAM,CAAA,KAAA,CAAO,CAAC,CAAA;AAAA,EACjF;AACA,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AAC9B,IAAA,KAAA,CAAM,IAAA,CAAKA,MAAAA,CAAM,GAAA,CAAI,kCAAkC,CAAC,CAAA;AAAA,EAC1D;AACA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAEA,SAAS,SAAS,MAAA,EAAwC;AACxD,EAAA,IAAI,MAAA,CAAO,sBAAsB,aAAA,EAAe;AAC9C,IAAA,OAAOA,MAAAA,CAAM,IAAI,yEAAoE,CAAA;AAAA,EACvF;AACA,EAAA,IAAI,MAAA,CAAO,sBAAsB,SAAA,EAAW;AAC1C,IAAA,OAAOA,MAAAA,CAAM,IAAI,oEAA+D,CAAA;AAAA,EAClF;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,WAAW,MAAA,EAAiC;AAC1D,EAAA,MAAMO,OAAgB,EAAC;AACvB,EAAAA,IAAAA,CAAI,IAAA,CAAKP,MAAAA,CAAM,IAAA,CAAK,kCAA6B,CAAC,CAAA;AAClD,EAAAO,IAAAA,CAAI,IAAA;AAAA,IACFP,MAAAA,CAAM,GAAA;AAAA,MACJ,GAAG,MAAA,CAAO,eAAe,0CACpB,MAAA,CAAO,YAAA,GAAe,6BAA6B,gBAAgB,CAAA;AAAA;AAC1E,GACF;AACA,EAAA,MAAM,IAAA,GAAO,SAAS,MAAM,CAAA;AAC5B,EAAA,IAAI,IAAA,EAAMO,IAAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AACvB,EAAA,IAAI,MAAA,CAAO,cAAA,IAAkB,MAAA,CAAO,cAAA,CAAe,cAAc,CAAA,EAAG;AAClE,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,cAAA,CAAe,OAAA,IAAW,IAAA,GAAO,CAAA,YAAA,EAAA,CAAgB,MAAA,CAAO,cAAA,CAAe,OAAA,GAAU,GAAA,EAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA,GAAM,EAAA;AAC1H,IAAAA,IAAAA,CAAI,IAAA,CAAKP,MAAAA,CAAM,GAAA,CAAI,CAAA,OAAA,EAAK,MAAA,CAAO,cAAA,CAAe,WAAW,CAAA,kDAAA,EAAqD,IAAI,CAAA,yBAAA,CAAsB,CAAC,CAAA;AAAA,EAC3I;AACA,EAAAO,IAAAA,CAAI,KAAK,EAAE,CAAA;AACX,EAAA,KAAA,MAAW,IAAA,IAAQ,OAAO,KAAA,EAAO;AAC/B,IAAAA,IAAAA,CAAI,KAAK,SAAA,CAAU,IAAA,EAAM,KAAK,IAAA,KAAS,MAAA,CAAO,WAAW,CAAC,CAAA;AAC1D,IAAAA,IAAAA,CAAI,KAAK,EAAE,CAAA;AAAA,EACb;AACA,EAAAA,IAAAA,CAAI,IAAA,CAAKP,MAAAA,CAAM,IAAA,CAAK,gBAAgB,CAAC,CAAA;AACrC,EAAAO,IAAAA,CAAI,KAAK,CAAA,EAAA,EAAKP,MAAAA,CAAM,MAAM,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,MAAA,CAAO,WAAW,GAAG,KAAA,IAAS,MAAA,CAAO,WAAW,CAAC,CAAA,QAAA,EAAM,MAAA,CAAO,SAAS,CAAA,CAAE,CAAA;AACvI,EAAA,IAAI,MAAA,CAAO,WAAW,KAAA,EAAO;AAC3B,IAAAO,IAAAA,CAAI,KAAK,EAAE,CAAA;AACX,IAAAA,IAAAA,CAAI,IAAA,CAAKP,MAAAA,CAAM,GAAA,CAAI,CAAA,OAAA,EAAK,aAAa,MAAA,CAAO,UAAU,CAAC,CAAA,gDAAA,CAAkD,CAAC,CAAA;AAAA,EAC5G;AACA,EAAA,OAAOO,IAAAA,CAAI,KAAK,IAAI,CAAA;AACtB;AAEO,SAAS,eAAe,MAAA,EAAiC;AAC9D,EAAA,MAAMA,OAAgB,EAAC;AACvB,EAAAA,IAAAA,CAAI,KAAK,oCAA+B,CAAA;AACxC,EAAAA,IAAAA,CAAI,KAAK,EAAE,CAAA;AACX,EAAAA,IAAAA,CAAI,IAAA;AAAA,IACF,GAAG,MAAA,CAAO,eAAe,0CAAuC,MAAA,CAAO,YAAA,GAAe,6BAA6B,gBAAgB,CAAA,CAAA;AAAA,GACrI;AACA,EAAA,MAAM,IAAA,GAAO,SAAS,MAAM,CAAA;AAC5B,EAAA,IAAI,IAAA,EAAM;AACR,IAAAA,IAAAA,CAAI,KAAK,EAAE,CAAA;AACX,IAAAA,IAAAA,CAAI,KAAK,CAAA,CAAA,EAAI,MAAA,CAAO,sBAAsB,aAAA,GAAgB,yEAAA,GAAuE,oEAA+D,CAAA,CAAA,CAAG,CAAA;AAAA,EACrM;AACA,EAAAA,IAAAA,CAAI,KAAK,EAAE,CAAA;AACX,EAAA,KAAA,MAAW,IAAA,IAAQ,OAAO,KAAA,EAAO;AAC/B,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,KAAS,MAAA,CAAO,cAAc,yBAAA,GAAuB,EAAA;AACtE,IAAAA,KAAI,IAAA,CAAK,CAAA,GAAA,EAAM,KAAK,KAAK,CAAA,EAAG,GAAG,CAAA,CAAE,CAAA;AACjC,IAAAA,IAAAA,CAAI,KAAK,EAAE,CAAA;AACX,IAAAA,IAAAA,CAAI,IAAA,CAAK,CAAA,CAAA,EAAI,IAAA,CAAK,WAAW,CAAA,CAAA,CAAG,CAAA;AAChC,IAAAA,IAAAA,CAAI,KAAK,EAAE,CAAA;AACX,IAAAA,IAAAA,CAAI,KAAK,CAAA,UAAA,EAAa,IAAA,CAAK,SAAS,CAAA,QAAA,EAAW,IAAA,CAAK,UAAU,CAAA,YAAA,CAAc,CAAA;AAC5E,IAAAA,KAAI,IAAA,CAAK,CAAA,cAAA,EAAiB,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,EAAA,CAAI,CAAA;AAClD,IAAAA,KAAI,IAAA,CAAK,CAAA,oBAAA,EAAuB,aAAa,IAAA,CAAK,KAAK,CAAC,CAAA,CAAE,CAAA;AAC1D,IAAA,IAAI,IAAA,CAAK,WAAW,KAAA,EAAO;AACzB,MAAAA,KAAI,IAAA,CAAK,CAAA,mDAAA,EAAiD,aAAa,IAAA,CAAK,UAAU,CAAC,CAAA,CAAE,CAAA;AAAA,IAC3F;AACA,IAAAA,IAAAA,CAAI,KAAK,EAAE,CAAA;AACX,IAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,MAAAA,IAAAA,CAAI,KAAK,yCAAyC,CAAA;AAClD,MAAAA,IAAAA,CAAI,KAAK,uBAAuB,CAAA;AAChC,MAAA,KAAA,MAAW,CAAA,IAAK,KAAK,QAAA,EAAU;AAC7B,QAAAA,KAAI,IAAA,CAAK,CAAA,IAAA,EAAO,EAAE,OAAO,CAAA,KAAA,EAAQ,EAAE,IAAA,IAAQ,GAAG,MAAM,CAAA,CAAE,EAAA,IAAM,GAAG,CAAA,GAAA,EAAM,CAAA,CAAE,IAAI,CAAA,GAAA,EAAM,CAAA,CAAE,MAAM,CAAA,EAAA,CAAI,CAAA;AAAA,MAC/F;AACA,MAAAA,IAAAA,CAAI,KAAK,EAAE,CAAA;AAAA,IACb;AAAA,EACF;AACA,EAAAA,IAAAA,CAAI,KAAK,mBAAmB,CAAA;AAC5B,EAAAA,IAAAA,CAAI,KAAK,EAAE,CAAA;AACX,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,MAAA,CAAO,WAAW,CAAA,EAAG,KAAA,IAAS,MAAA,CAAO,WAAA;AAC1F,EAAAA,KAAI,IAAA,CAAK,CAAA,EAAA,EAAK,QAAQ,CAAA,UAAA,EAAQ,MAAA,CAAO,SAAS,CAAA,CAAE,CAAA;AAChD,EAAA,IAAI,MAAA,CAAO,WAAW,KAAA,EAAO;AAC3B,IAAAA,IAAAA,CAAI,KAAK,EAAE,CAAA;AACX,IAAAA,KAAI,IAAA,CAAK,CAAA,SAAA,EAAO,aAAa,MAAA,CAAO,UAAU,CAAC,CAAA,gDAAA,CAAkD,CAAA;AAAA,EACnG;AACA,EAAA,OAAOA,IAAAA,CAAI,KAAK,IAAI,CAAA;AACtB;;;ACnHO,SAAS,kBAAA,CAAmB,UAAwB,QAAA,EAA+B;AACxF,EAAA,MAAM,QAAA,GAA0B,KAAK,KAAA,CAAM,IAAA,CAAK,UAAU,QAAA,CAAS,QAAA,IAAY,EAAE,CAAC,CAAA;AAClF,EAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,IAAA,MAAM,UAAU,CAAA,CAAE,oBAAA;AAClB,IAAA,KAAA,MAAW,GAAA,IAAO,CAAA,CAAE,YAAA,IAAgB,EAAC,EAAG;AACtC,MAAA,IAAI,CAAC,QAAA,CAAS,GAAA,CAAI,GAAA,CAAI,OAAO,CAAA,EAAG;AAChC,MAAA,MAAMK,GAAAA,GAAK,IAAI,YAAA,IAAgB,CAAA;AAC/B,MAAA,IAAIA,GAAAA,IAAM,CAAA,IAAK,OAAA,CAAQ,aAAA,GAAgB,CAAA,EAAG;AACxC,QAAA,OAAA,CAAQ,aAAA,EAAA;AACR,QAAA,OAAA,CAAQ,OAAA,EAAA;AAAA,MACV,CAAA,MAAA,IAAWA,GAAAA,KAAO,CAAA,IAAK,OAAA,CAAQ,YAAY,CAAA,EAAG;AAC5C,QAAA,OAAA,CAAQ,SAAA,EAAA;AACR,QAAA,OAAA,CAAQ,OAAA,EAAA;AAAA,MACV;AAAA,IACF;AACA,IAAA,KAAA,MAAW,EAAA,IAAM,CAAA,CAAE,UAAA,IAAc,EAAC,EAAG;AACnC,MAAA,IAAI,SAAS,GAAA,CAAI,EAAA,CAAG,IAAI,CAAA,KAAM,YAAA,GAAe,CAAA;AAAA,IAC/C;AAAA,EACF;AACA,EAAA,OAAO,iBAAA,CAAkB,QAAQ,CAAA,CAAE,KAAA;AACrC;AChBO,SAAS,YAAA,CACd,WACA,GAAA,EACA,OAAA,EACA,KAAwB,KAAA,EACxB,IAAA,GAAoC,EAAC,EACd;AACvB,EAAA,QAAQ,SAAA;AAAW,IACjB,KAAK,KAAA;AAGH,MAAA,IAAI,EAAA,KAAO,MAAA,EAAQ,OAAO,EAAE,GAAA,EAAK,QAAQ,IAAA,EAAM,IAAA,CAAK,aAAA,GAAgB,CAAC,KAAA,EAAO,IAAA,EAAM,GAAG,GAAG,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAAA,GAAI,CAAC,KAAA,EAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAAA,EAAE;AACtI,MAAA,IAAI,EAAA,KAAO,MAAA,EAAQ,OAAO,EAAE,GAAA,EAAK,QAAQ,IAAA,EAAM,IAAA,CAAK,aAAA,GAAgB,CAAC,KAAA,EAAO,IAAA,EAAM,GAAG,GAAG,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAAA,GAAI,CAAC,KAAA,EAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAAA,EAAE;AACtI,MAAA,IAAI,EAAA,KAAO,KAAA,EAAO,OAAO,EAAE,KAAK,KAAA,EAAO,IAAA,EAAM,CAAC,KAAA,EAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,OAAO,EAAE,CAAA,EAAE;AAC1E,MAAA,OAAO,EAAE,GAAA,EAAK,KAAA,EAAO,IAAA,EAAM,CAAC,SAAA,EAAW,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAAA,EAAE;AAAA,IAC9D,KAAK,MAAA;AACH,MAAA,OAAO,EAAE,GAAA,EAAK,KAAA,EAAO,IAAA,EAAM,CAAC,SAAA,EAAW,CAAA,EAAG,GAAG,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA,EAAE;AAAA,IAC/D,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,GAAA,EAAK,OAAA,EAAS,IAAA,EAAM,CAAC,KAAA,EAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAAA,EAAE;AAAA,IAC5D,KAAK,IAAA;AACH,MAAA,OAAO,EAAE,GAAA,EAAK,IAAA,EAAM,MAAM,CAAC,KAAA,EAAO,GAAG,GAAG,CAAA,CAAA,EAAI,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,GAAI,OAAA,GAAU,IAAI,OAAO,CAAA,CAAE,EAAE,CAAA,EAAE;AAAA,IACnG,KAAK,UAAA;AACH,MAAA,OAAO,EAAE,GAAA,EAAK,UAAA,EAAY,IAAA,EAAM,CAAC,SAAA,EAAW,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAAA,EAAE;AAAA,IACnE,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,GAAA,EAAK,QAAA,EAAU,IAAA,EAAM,CAAC,OAAO,SAAA,EAAW,GAAA,EAAK,WAAA,EAAa,OAAO,CAAA,EAAE;AAAA,IAC9E,KAAK,QAAA;AACH,MAAA,OAAO,EAAE,GAAA,EAAK,QAAA,EAAU,IAAA,EAAM,CAAC,OAAO,SAAA,EAAW,GAAA,EAAK,WAAA,EAAa,OAAO,CAAA,EAAE;AAAA,IAC9E,KAAK,MAAA;AAAA,IACL,KAAK,KAAA;AACH,MAAA,OAAO,EAAE,GAAA,EAAK,MAAA,EAAQ,IAAA,EAAM,CAAC,KAAA,EAAO,KAAA,EAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAAA,EAAE;AAAA,IAClE,KAAK,UAAA;AAAA,IACL,KAAK,MAAA;AAGH,MAAA,OAAO,EAAE,GAAA,EAAK,QAAA,EAAU,MAAM,CAAC,QAAA,EAAU,GAAG,CAAA,EAAE;AAAA,IAChD;AACE,MAAA,OAAO,IAAA;AAAA;AAEb;AAwBA,SAAS,UAAA,CAAW,KAAqB,GAAA,EAAwB;AAC/D,EAAA,MAAM,GAAA,GAAM,SAAA,CAAU,GAAA,CAAI,GAAA,EAAK,GAAA,CAAI,IAAA,EAAM,EAAE,GAAA,EAAK,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,KAAA,EAAO,CAAA;AAChF,EAAA,IAAI,IAAI,KAAA,EAAO;AAGb,IAAA,IAAK,GAAA,CAAI,KAAA,CAAgC,IAAA,KAAS,QAAA,EAAU;AAC1D,MAAA,OAAO,EAAE,IAAI,KAAA,EAAO,WAAA,EAAa,MAAM,MAAA,EAAQ,CAAA,EAAG,GAAA,CAAI,GAAG,CAAA,gCAAA,CAAA,EAAmC;AAAA,IAC9F;AACA,IAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,GAAA,CAAI,MAAM,OAAA,EAAQ;AAAA,EAChD;AACA,EAAA,IAAI,GAAA,CAAI,MAAA,KAAW,CAAA,EAAG,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,CAAA,KAAA,EAAQ,GAAA,CAAI,MAAA,IAAU,QAAQ,CAAA,CAAA,EAAG;AACnF,EAAA,OAAO,EAAE,IAAI,IAAA,EAAK;AACpB;AAGA,SAAS,gBAAgB,GAAA,EAAsB;AAC7C,EAAA,IAAI;AACF,IAAA,IAAIyB,WAAWC,IAAAA,CAAK,GAAA,EAAK,qBAAqB,CAAC,GAAG,OAAO,IAAA;AACzD,IAAA,MAAM,OAAA,GAAUA,IAAAA,CAAK,GAAA,EAAK,cAAc,CAAA;AACxC,IAAA,IAAID,UAAAA,CAAW,OAAO,CAAA,EAAG;AACvB,MAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAME,YAAAA,CAAa,OAAA,EAAS,MAAM,CAAC,CAAA;AACpD,MAAA,IAAI,GAAA,EAAK,YAAY,OAAO,IAAA;AAAA,IAC9B;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AACA,EAAA,OAAO,KAAA;AACT;AAGO,SAAS,SAAA,CAAU,OAAA,EAAiB,QAAA,EAA4B,IAAA,GAAqB,EAAC,EAAqB;AAChH,EAAA,MAAM,GAAA,GAAM,KAAK,GAAA,IAAO,UAAA;AACxB,EAAA,MAAM,aAAA,GAAgB,gBAAgB,OAAO,CAAA;AAC7C,EAAA,MAAM,UAA4B,EAAC;AACnC,EAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,IAAA,IAAI,CAAC,EAAE,EAAA,EAAI;AACT,MAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,OAAA,EAAS,CAAA,CAAE,OAAA,EAAS,EAAA,EAAI,CAAA,CAAE,EAAA,EAAI,MAAA,EAAQ,SAAA,EAAW,MAAA,EAAQ,mBAAA,EAAqB,CAAA;AAC7F,MAAA;AAAA,IACF;AACA,IAAA,MAAM,OAAA,GAAU,YAAA,CAAa,CAAA,CAAE,SAAA,EAAW,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,EAAA,EAAI,IAAA,CAAK,cAAA,EAAgB,EAAE,aAAA,EAAe,CAAA;AACjG,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAA,CAAQ,KAAK,EAAE,OAAA,EAAS,EAAE,OAAA,EAAS,EAAA,EAAI,EAAE,EAAA,EAAI,MAAA,EAAQ,QAAA,EAAU,MAAA,EAAQ,GAAG,CAAA,CAAE,SAAS,4BAA4B,CAAA,CAAE,EAAE,aAAa,CAAA;AAClI,MAAA;AAAA,IACF;AACA,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,OAAA,EAAS,CAAA,CAAE,SAAS,EAAA,EAAI,CAAA,CAAE,IAAI,MAAA,EAAQ,SAAA,EAAW,QAAQ,CAAA,WAAA,EAAc,OAAA,CAAQ,GAAG,CAAA,CAAA,EAAI,OAAA,CAAQ,KAAK,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,EAAI,CAAA;AAC/H,MAAA;AAAA,IACF;AACA,IAAA,MAAM,OAAA,GAAU,GAAA,CAAI,OAAA,EAAS,OAAO,CAAA;AACpC,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,SAAS,CAAA,CAAE,OAAA;AAAA,MACX,IAAI,CAAA,CAAE,EAAA;AAAA,MACN,QAAQ,OAAA,CAAQ,EAAA,GAAK,SAAA,GAAY,OAAA,CAAQ,cAAc,QAAA,GAAW,QAAA;AAAA,MAClE,MAAA,EAAQ,QAAQ,WAAA,IAAe,OAAA,CAAQ,SAAS,CAAA,EAAG,OAAA,CAAQ,MAAM,CAAA,wBAAA,CAAA,GAAwB,OAAA,CAAQ;AAAA,KAClG,CAAA;AAAA,EACH;AACA,EAAA,OAAO,OAAA;AACT;;;AChHA,IAAM,aAAA,GAA8C,EAAE,OAAA,EAAS,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,QAAA,EAAU,CAAA,EAAG,IAAA,EAAM,CAAA,EAAG,QAAA,EAAU,CAAA,EAAE;AAG5G,SAAS,YAAY,IAAA,EAA2B;AAC9C,EAAA,OAAO,0BAAA,CAA2B,IAAI,CAAA,IAAK,IAAA;AAC7C;AAGA,SAAS,gBAAgB,SAAA,EAAoC;AAC3D,EAAA,IAAI,SAAA,KAAc,OAAO,OAAO,KAAA;AAChC,EAAA,IAAI,SAAA,KAAc,QAAQ,OAAO,MAAA;AACjC,EAAA,OAAO,SAAA;AACT;AAaA,SAAS,kBAAkB,QAAA,EAAwC;AACjE,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,MAAMhC,OAAsB,EAAC;AAC7B,EAAA,KAAA,MAAW,OAAA,IAAW,QAAA,CAAS,QAAA,IAAY,EAAC,EAAG;AAC7C,IAAA,MAAM,SAAA,GAAY,WAAA,CAAY,OAAA,CAAQ,IAAI,CAAA;AAC1C,IAAA,KAAA,MAAW,GAAA,IAAO,OAAA,CAAQ,YAAA,IAAgB,EAAC,EAAG;AAC5C,MAAA,MAAM,GAAA,GAAM,CAAA,EAAG,SAAS,CAAA,EAAA,EAAK,IAAI,OAAO,CAAA,CAAA;AACxC,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AACnB,MAAA,IAAI,CAAC,GAAA,CAAI,YAAA,IAAgB,GAAA,CAAI,YAAA,KAAiB,IAAI,eAAA,EAAiB;AACnE,MAAA,IAAI,GAAA,CAAI,KAAA,KAAU,SAAA,IAAa,GAAA,CAAI,UAAU,SAAA,EAAW;AACxD,MAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AACZ,MAAAA,KAAI,IAAA,CAAK;AAAA,QACP,SAAS,GAAA,CAAI,OAAA;AAAA,QACb,SAAA;AAAA,QACA,MAAA,EAAQ,gBAAgB,SAAS,CAAA;AAAA,QACjC,MAAM,GAAA,CAAI,eAAA;AAAA,QACV,IAAI,GAAA,CAAI,YAAA;AAAA,QACR,cAAc,GAAA,CAAI,YAAA;AAAA,QAClB,SAAS,GAAA,CAAI;AAAA,OACd,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAAA,KAAI,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,SAAA,CAAU,aAAA,CAAc,CAAA,CAAE,SAAS,KAAK,CAAA,CAAE,OAAA,CAAQ,aAAA,CAAc,CAAA,CAAE,OAAO,CAAC,CAAA;AAC/F,EAAA,OAAOA,IAAAA;AACT;AAUA,IAAM,iBAAA,GAAgC,OAAO,OAAA,KAAY;AACvD,EAAA,MAAM,UAAeiC,IAAA,CAAA,IAAA,CAAQ,EAAA,CAAA,MAAA,IAAU,CAAA,YAAA,EAAe,OAAA,CAAQ,GAAG,CAAA,KAAA,CAAO,CAAA;AACxE,EAAA,MAAM,QAAA,GAAwB,EAAE,eAAA,EAAiB,OAAA,EAAS,MAAA,EAAQ,MAAA,EAAQ,GAAA,EAAK,OAAA,EAAS,KAAA,EAAO,IAAA,EAAM,WAAA,EAAa,CAAA,EAAE;AACpH,EAAA,MAAM,QAAA,GAAW,MAAM,oBAAA,EAAqB;AAC5C,EAAA,OAAO,WAAA,CAAY,OAAA,EAAS,QAAA,EAAU,QAAQ,CAAA;AAChD,CAAA;AAWA,eAAsB,YAAA,CACpB,OAAA,EACA,MAAA,EACA,IAAA,GAAmB,iBAAA,EACI;AACvB,EAAA,MAAM,eAAoBA,IAAA,CAAA,UAAA,CAAW,MAAM,IAAI,MAAA,GAAcA,IAAA,CAAA,IAAA,CAAK,SAAS,MAAM,CAAA;AACjF,EAAA,IAAI,MAAMf,UAAAA,CAAW,YAAY,CAAA,EAAG;AAClC,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,OAAA,EAAS,YAAY,CAAA;AACrD,IAAA,IAAI,CAAC,UAAU,KAAA,EAAO;AACpB,MAAA,OAAO,aAA2B,YAAY,CAAA;AAAA,IAChD;AACA,IAAA,OAAA,CAAQ,KAAA;AAAA,MACNzB,MAAAA,CAAM,GAAA;AAAA,QACJ,CAAA,qBAAA,EAAwB,SAAA,CAAU,aAAA,IAAiB,uBAAuB,CAAA,2FAAA;AAAA;AAC5E,KACF;AAAA,EACF,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,0EAAgE,CAAC,CAAA;AAAA,EAC3F;AACA,EAAA,OAAO,KAAK,OAAO,CAAA;AACrB;AAGA,eAAe,kBAAA,CAAmB,SAAiB,QAAA,EAAgE;AACjH,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,SAAA,CAAU,OAAO,CAAA;AACnC,IAAA,MAAM,WAAA,GAAc,MAAM,sBAAA,CAAuB,OAAA,EAAS,GAAG,CAAA;AAC7D,IAAA,MAAM,OAAO,QAAA,EAAU,IAAA,EAAK,IAAM,MAAM,sBAAsB,OAAO,CAAA;AACrE,IAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,WAAA,CAAY,MAAA,EAAO;AAAA,EAC5C,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,MAAU,MAAA,EAAU;AAAA,EAC/C;AACF;AAEO,IAAM,UAAA,GAAa,IAAIsB,OAAAA,CAAQ,KAAK,CAAA,CACxC,WAAA,CAAY,iJAA4I,CAAA,CACxJ,QAAA,CAAS,QAAA,EAAU,iBAAA,EAAmB,GAAG,CAAA,CACzC,MAAA,CAAO,aAAA,EAAe,uBAAA,EAAyB,4BAA4B,CAAA,CAC3E,MAAA,CAAO,mBAAA,EAAqB,8BAAA,EAAgC,MAAM,CAAA,CAClE,MAAA,CAAO,aAAA,EAAe,kDAAkD,CAAA,CACxE,MAAA,CAAO,mBAAA,EAAqB,yCAAyC,CAAA,CACrE,MAAA,CAAO,0BAAA,EAA4B,qDAAqD,CAAA,CACxF,MAAA,CAAO,eAAA,EAAiB,oEAAoE,CAAA,CAC5F,MAAA,CAAO,OAAA,EAAS,8CAA8C,CAAA,CAC9D,MAAA,CAAO,WAAA,EAAa,yCAAyC,CAAA,CAC7D,MAAA,CAAO,YAAA,EAAc,gDAAgD,CAAA,CACrE,MAAA,CAAO,4BAAA,EAA8B,yHAAyH,CAAA,CAC9J,MAAA,CAAO,OAAO,UAAA,EAAoB,IAAA,KAW7B;AACJ,EAAA,MAAM,OAAA,GAAekB,aAAQ,UAAU,CAAA;AACvC,EAAA,IAAI,CAAE,MAAMf,UAAAA,CAAW,OAAO,CAAA,EAAI;AAChC,IAAA,OAAA,CAAQ,MAAMzB,MAAAA,CAAM,GAAA,CAAI,CAAA,qBAAA,EAAwB,OAAO,EAAE,CAAC,CAAA;AAC1D,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,SAAS,IAAA,CAAK,WAAA;AACpB,EAAA,IAAI,MAAA,IAAU,EAAE,MAAA,IAAU,aAAA,CAAA,EAAgB;AACxC,IAAA,OAAA,CAAQ,MAAMA,MAAAA,CAAM,GAAA,CAAI,kCAAkC,IAAA,CAAK,WAAW,+CAA+C,CAAC,CAAA;AAC1H,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAIA,EAAA,MAAM,GAAA,GAAM,UAAA,CAAW,IAAA,CAAK,GAAG,CAAA;AAC/B,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,MAAM,oBAAA,EAAqB;AACjC,IAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,gCAAgC,CAAC,CAAA;AACzD,IAAA,OAAA,CAAQ,KAAA;AAAA,MACNA,MAAAA,CAAM,GAAA;AAAA,QACJ,QAAQ,GAAG,CAAA,iIAAA;AAAA;AAEb,KACF;AACA,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACA,EAAA,MAAM,MAAA,GAAS,SAAS,GAAG,CAAA;AAC3B,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,8DAA8D,CAAC,CAAA;AACvF,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI;AACF,IAAA,IAAA,GAAO,KAAK,MAAA,GAAS,iBAAA,CAAkB,IAAA,CAAK,MAAM,IAAI,MAAA,CAAO,IAAA;AAAA,EAC/D,SAAS,CAAA,EAAY;AACnB,IAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA;AACnE,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,QAAA,GAAW,MAAM,YAAA,CAAa,OAAA,EAAS,IAAA,CAAK,EAAE,CAAA;AAAA,EAChD,SAAS,CAAA,EAAY;AACnB,IAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA;AACnE,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,GAAA,GAAM,kBAAkB,QAAQ,CAAA;AAItC,EAAA,MAAM,KAAA,GAAQ,WAAA;AAAA,IACZ,OAAA;AAAA,IACA,IAAI,MAAA,CAAO,CAACc,OAAMA,EAAAA,CAAE,MAAA,KAAW,SAAS,CAAA,CAAE,GAAA,CAAI,CAACA,EAAAA,MAAO,EAAE,IAAA,EAAMA,EAAAA,CAAE,SAAS,SAAA,EAAWA,EAAAA,CAAE,QAAO,CAAE;AAAA,GACjG;AAEA,EAAA,MAAM,UAAA,GAAkC,GAAA,CAAI,GAAA,CAAI,CAACA,EAAAA,KAAM;AACrD,IAAA,MAAM,CAAA,GAAI,KAAA,CAAM,GAAA,CAAIA,EAAAA,CAAE,OAAO,CAAA;AAC7B,IAAA,OAAO;AAAA,MACL,SAASA,EAAAA,CAAE,OAAA;AAAA,MACX,WAAWA,EAAAA,CAAE,SAAA;AAAA,MACb,gBAAgBA,EAAAA,CAAE,IAAA;AAAA,MAClB,eAAeA,EAAAA,CAAE,EAAA;AAAA,MACjB,cAAcA,EAAAA,CAAE,YAAA;AAAA,MAChB,SAASA,EAAAA,CAAE,OAAA;AAAA,MACX,GAAI,CAAA,KAAM,CAAA,CAAE,cAAc,CAAA,IAAK,CAAA,CAAE,eAAe,CAAA,CAAA,GAC5C,EAAE,OAAO,EAAE,WAAA,EAAa,EAAE,WAAA,EAAa,YAAA,EAAc,EAAE,YAAA,EAAa,KACpE,EAAC;AAAA,MACL,GAAI,CAAA,IAAK,CAAA,CAAE,SAAA,CAAU,MAAA,GAAS,EAAE,SAAA,EAAW,CAAA,CAAE,SAAA,EAAU,GAAI;AAAC,KAC9D;AAAA,EACF,CAAC,CAAA;AAED,EAAA,MAAM,OAAA,GAA0B;AAAA,IAC9B,UAAA,EAAY,OAAA;AAAA,IACZ,UAAA,EAAY,MAAM,kBAAA,CAAmB,OAAA,EAAS,KAAK,cAAc,CAAA;AAAA,IACjE;AAAA,GACF;AAEA,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAM,EAAE,QAAA,EAAU,YAAA,EAAa,GAAI,MAAM,cAAA,CAAe;AAAA,MACtD,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,IAAA;AAAA,MACA,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,OAAA;AAAA,MACA,SAAA,EAAW,MAAA,CAAO,IAAA,CAAK,GAAA,EAAK;AAAA,KAC7B,CAAA;AACD,IAAA,IAAI,CAAC,aAAa,EAAA,EAAI;AACpB,MAAA,eAAA,CAAgB,YAAA,EAAc,MAAA,CAAO,WAAA,EAAa,IAAI,CAAA;AACtD,MAAA;AAAA,IACF;AACA,IAAA,QAAA,GAAW,MAAM,qBAAqB,YAAY,CAAA;AAAA,EACpD,SAAS,CAAA,EAAY;AACnB,IAAA,MAAM,MAAM,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,OAAO,CAAC,CAAA;AACrD,IAAA,OAAA,CAAQ,MAAMd,MAAAA,CAAM,GAAA,CAAI,CAAA,qCAAA,EAAwC,GAAG,EAAE,CAAC,CAAA;AACtE,IAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,wEAAwE,CAAC,CAAA;AACjG,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,IAAI,QAAA,CAAS,WAAW,OAAA,EAAS;AAC/B,IAAA,OAAA,CAAQ,MAAMA,MAAAA,CAAM,GAAA,CAAI,QAAA,CAAS,KAAA,IAAS,gCAAgC,CAAC,CAAA;AAC3E,IAAA,IAAI,QAAA,CAAS,SAAA,EAAW,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,IAAI,CAAA,OAAA,EAAU,QAAA,CAAS,SAAS,CAAA,CAAA,CAAG,CAAC,CAAA;AAChF,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAGA,EAAA,MAAM,YAAA,GAAe,SAAS,KAAA,EAAO,KAAA;AACrC,EAAA,IAAI,OAAO,iBAAiB,QAAA,EAAU;AACpC,IAAA,QAAA,CAAS,iBAAA,GAAoB,YAAA;AAC7B,IAAA,KAAA,MAAW,IAAA,IAAQ,SAAS,KAAA,EAAO;AACjC,MAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,CAAC,CAAA;AAC5D,MAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,QAAA,EAAU,QAAQ,CAAA;AACtD,MAAA,IAAA,CAAK,kBAAA,GAAqB,QAAA;AAC1B,MAAA,IAAA,CAAK,aAAa,QAAA,GAAW,YAAA;AAAA,IAC/B;AAAA,EACF;AAEA,EAAA,IAAA,CAAK,QAAA,EAAU,KAAK,MAAM,CAAA;AAG1B,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,IAAU,IAAA,CAAK,UAAU,KAAA,EAAO;AAClD,IAAA,MAAM,YAAA,CAAa,OAAA,EAAS,QAAA,EAAU,QAAA,EAAU,IAAI,CAAA;AAAA,EACtD;AAEA,EAAA,IAAI,MAAA,EAAQ;AAGV,IAAA,MAAM,WAAA,GAAc,SAAS,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,QAAA,CAAS,WAAW,CAAA;AAC9E,IAAA,MAAM,SAAA,GAAY,cAAc,MAAM,CAAA;AACtC,IAAA,IAAI,SAAA,GAAY,CAAA;AAChB,IAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA,EAAqB;AAC9D,MAAA,IAAI,aAAA,CAAc,GAAG,CAAA,GAAI,SAAA,EAAW;AACpC,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,UAAA,CAAW,UAAA,CAAW,GAAG,CAAA,IAAK,CAAA;AAEpD,MAAA,MAAM,yBACH,QAAA,CAAS,KAAA,CAAM,KAAK,CAAC,CAAA,KAAM,EAAE,IAAA,KAAS,YAAY,GAAG,KAAA,CAAM,UAAA,CAAW,GAAG,CAAA,IAAK,CAAA,KAC9E,aAAa,KAAA,CAAM,UAAA,CAAW,GAAG,CAAA,IAAK,CAAA,CAAA;AACzC,MAAA,SAAA,IAAa,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,qBAAqB,CAAA;AAAA,IACvD;AACA,IAAA,IAAI,YAAY,CAAA,EAAG;AACjB,MAAA,OAAA,CAAQ,KAAA;AAAA,QACNA,OAAM,GAAA,CAAI;AAAA,qCAAA,EAA0C,SAAS,CAAA,wBAAA,EAA2B,MAAM,CAAA,YAAA,CAAc;AAAA,OAC9G;AACA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AACF,CAAC,CAAA;AAGH,SAAS,eAAA,CAAgB,QAAA,EAAoB,WAAA,EAAqB,IAAA,EAAqB;AACrF,EAAA,MAAM,aAAa,CAAA,QAAA,EAAW,qBAAA,CAAsB,IAAI,CAAC,IAAI,WAAW,CAAA,CAAA;AACxE,EAAA,IAAI,QAAA,CAAS,MAAA,KAAW,GAAA,IAAO,QAAA,CAAS,WAAW,GAAA,EAAK;AACtD,IAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,2EAA2E,CAAC,CAAA;AACpG,IAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,0CAA0C,CAAC,CAAA;AACnE,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACA,EAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,IAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,uEAAuE,CAAC,CAAA;AAChG,IAAA,OAAA,CAAQ,MAAMA,MAAAA,CAAM,GAAA,CAAI,CAAA,8CAAA,EAAiD,UAAU,EAAE,CAAC,CAAA;AACtF,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACA,EAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,IAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,2DAA2D,CAAC,CAAA;AACpF,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACA,EAAA,OAAA,CAAQ,MAAMA,MAAAA,CAAM,GAAA,CAAI,6BAA6B,QAAA,CAAS,MAAM,GAAG,CAAC,CAAA;AACxE,EAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,sDAAsD,CAAC,CAAA;AAC/E,EAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAChB;AAEA,SAAS,IAAA,CAAK,QAAyB,MAAA,EAAsB;AAC3D,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,MAAA;AACH,MAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAC3C,MAAA;AAAA,IACF,KAAK,IAAA;AACH,MAAA,OAAA,CAAQ,GAAA,CAAI,cAAA,CAAe,MAAM,CAAC,CAAA;AAClC,MAAA;AAAA,IACF,KAAK,MAAA;AAAA,IACL;AACE,MAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,MAAM,CAAC,CAAA;AAC9B,MAAA;AAAA;AAEN;AAGA,SAAS,kBAAkB,QAAA,EAA2C;AACpE,EAAA,KAAA,MAAW,CAAA,IAAK,QAAA,CAAS,QAAA,IAAY,EAAC,EAAG;AACvC,IAAA,IAAA,CAAK,EAAE,IAAA,KAAS,MAAA,IAAU,EAAE,IAAA,KAAS,YAAA,KAAiB,EAAE,cAAA,EAAgB;AACtE,MAAA,MAAM,KAAK,CAAA,CAAE,cAAA;AACb,MAAA,IAAI,EAAA,KAAO,UAAU,EAAA,KAAO,MAAA,IAAU,OAAO,KAAA,IAAS,EAAA,KAAO,OAAO,OAAO,EAAA;AAAA,IAC7E;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAGA,SAAS,oBAAoB,EAAA,EAAgC;AAC3D,EAAA,OAAO,OAAO,MAAA,IAAU,EAAA,KAAO,MAAA,IAAU,EAAA,KAAO,QAAQ,EAAA,GAAK,KAAA;AAC/D;AAUA,SAAS,iBAAA,CACP,OAAA,EACA,QAAA,EACA,GAAA,EACA,SAAA,EAC+C;AAC/C,EAAA,MAAMO,OAAqD,EAAC;AAC5D,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,KAAA,MAAW,OAAA,IAAW,QAAA,CAAS,QAAA,IAAY,EAAC,EAAG;AAC7C,IAAA,IAAI,WAAA,CAAY,OAAA,CAAQ,IAAI,CAAA,KAAM,SAAA,EAAW;AAC7C,IAAA,IAAI,CAAA,CAAE,OAAA,CAAQ,YAAA,IAAgB,EAAC,EAAG,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAA,KAAY,GAAG,CAAA,EAAG;AAClE,IAAA,MAAM,GAAA,GAAWiC,IAAA,CAAA,OAAA,CAAQ,OAAA,EAAS,OAAA,CAAQ,IAAA,IAAQ,QAAQ,IAAA,KAAS,GAAA,GAAM,OAAA,CAAQ,IAAA,GAAO,GAAG,CAAA;AAC3F,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AACnB,IAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AACZ,IAAAjC,IAAAA,CAAI,KAAK,EAAE,GAAA,EAAK,IAAI,mBAAA,CAAoB,OAAA,CAAQ,cAAc,CAAA,EAAG,CAAA;AAAA,EACnE;AACA,EAAA,OAAOA,IAAAA;AACT;AAQO,SAAS,eAAA,CACd,OAAA,EACA,QAAA,EACA,QAAA,EACA,IAAA,EACkB;AAClB,EAAA,MAAM,UAAA,GAAa,kBAAkB,QAAQ,CAAA;AAC7C,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAuF;AAC1G,EAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,IAAA,IAAI,UAAU,iBAAA,CAAkB,OAAA,EAAS,UAAU,CAAA,CAAE,OAAA,EAAS,EAAE,SAAS,CAAA;AACzE,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAA,GAAU,CAAC,EAAE,GAAA,EAAK,OAAA,EAAS,EAAA,EAAI,UAAA,EAAY,CAAA;AACrE,IAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,GAAG,CAAA,IAAK,EAAE,GAAA,EAAK,CAAA,CAAE,KAAK,EAAA,EAAI,CAAA,CAAE,EAAA,EAAI,QAAA,EAAU,EAAC,EAAE;AACxE,MAAA,KAAA,CAAM,QAAA,CAAS,KAAK,CAAC,CAAA;AACrB,MAAA,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,GAAA,EAAK,KAAK,CAAA;AAAA,IACzB;AAAA,EACF;AACA,EAAA,MAAM,UAA4B,EAAC;AACnC,EAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,EAAO,EAAG;AACnC,IAAA,MAAM,OAAA,GAAU,SAAA,CAAU,KAAA,CAAM,GAAA,EAAK,KAAA,CAAM,QAAA,EAAU,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,cAAA,EAAgB,KAAA,CAAM,IAAI,CAAA;AACtG,IAAA,MAAML,IAAAA,GAAWsC,IAAA,CAAA,QAAA,CAAS,OAAA,EAAS,KAAA,CAAM,GAAG,CAAA,IAAK,GAAA;AACjD,IAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,MAAA,OAAA,CAAQ,IAAA,CAAKtC,SAAQ,GAAA,GAAM,CAAA,GAAI,EAAE,GAAG,CAAA,EAAG,QAAQ,CAAC,CAAA,CAAE,QAAQ,CAAA,GAAA,EAAMA,IAAG,EAAE,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,QAAK,CAAA,EAAG,CAAA;AAAA,IACtG;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAGA,SAAS,oBAAoB,QAAA,EAAqD;AAChF,EAAA,MAAM,KAAA,GAAQ,SAAS,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AAChE,EAAA,OAAA,CAAQ,GAAA,CAAIF,MAAAA,CAAM,IAAA,CAAK,2BAA2B,CAAC,CAAA;AACnD,EAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAA,KAAM;AACtB,IAAA,MAAM,GAAA,GAAM,EAAE,IAAA,KAAS,QAAA,CAAS,cAAcA,MAAAA,CAAM,KAAA,CAAM,gBAAgB,CAAA,GAAI,EAAA;AAC9E,IAAA,MAAM,KAAA,GACJ,OAAO,CAAA,CAAE,kBAAA,KAAuB,YAAY,OAAO,QAAA,CAAS,iBAAA,KAAsB,QAAA,GAC9E,oBAAiB,QAAA,CAAS,iBAAiB,CAAA,MAAA,EAAI,CAAA,CAAE,kBAAkB,CAAA,CAAA,GACnE,EAAA;AACN,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,GAAI,CAAC,KAAKA,MAAAA,CAAM,IAAA,CAAK,EAAE,KAAK,CAAC,GAAG,GAAG,CAAA,OAAA,EAAU,EAAE,SAAS,CAAA,UAAA,EAAU,EAAE,QAAA,CAAS,MAAM,CAAA,WAAA,EAAc,KAAK,CAAA,CAAE,CAAA;AAAA,EAC3H,CAAC,CAAA;AACD,EAAA,MAAM,UAAA,GAAa,MAAM,SAAA,CAAU,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,SAAS,WAAW,CAAA;AACzE,EAAA,MAAM,GAAA,GAAM,UAAA,IAAc,CAAA,GAAI,UAAA,GAAa,CAAA,GAAI,CAAA;AAC/C,EAAA,MAAM,EAAA,GAAc,yBAAgB,EAAE,KAAA,EAAO,QAAQ,KAAA,EAAO,MAAA,EAAQ,OAAA,CAAQ,MAAA,EAAQ,CAAA;AACpF,EAAA,OAAO,IAAI,OAAA,CAAQ,CAACD,SAAAA,KAAY;AAC9B,IAAA,EAAA,CAAG,QAAA,CAAS,WAAW,KAAA,CAAM,MAAM,aAAa,GAAG,CAAA,gBAAA,CAAA,EAAoB,CAAC,GAAA,KAAQ;AAC9E,MAAA,EAAA,CAAG,KAAA,EAAM;AACT,MAAA,MAAM,CAAA,GAAI,GAAA,CAAI,IAAA,EAAK,CAAE,WAAA,EAAY;AACjC,MAAA,IAAI,MAAM,GAAA,IAAO,CAAA,KAAM,MAAA,EAAQ,OAAOA,UAAQ,IAAI,CAAA;AAClD,MAAA,MAAM,IAAI,CAAA,KAAM,EAAA,GAAK,MAAM,MAAA,CAAO,QAAA,CAAS,GAAG,EAAE,CAAA;AAChD,MAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,CAAC,CAAA,IAAK,CAAA,GAAI,CAAA,IAAK,CAAA,GAAI,KAAA,CAAM,MAAA,EAAQ,OAAOA,SAAAA,CAAQ,IAAI,CAAA;AAC1E,MAAAA,SAAAA,CAAQ,KAAA,CAAM,CAAA,GAAI,CAAC,EAAE,IAAI,CAAA;AAAA,IAC3B,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;AAGA,eAAe,YAAA,CACb,OAAA,EACA,QAAA,EACA,QAAA,EACA,IAAA,EACe;AACf,EAAA,MAAM,QAAA,GAAW,SAAS,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AACnE,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,OAAA,CAAQ,GAAA,CAAIC,MAAAA,CAAM,KAAA,CAAM,yEAA+D,CAAC,CAAA;AACxF,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,KAAK,IAAA,EAAM;AACb,IAAA,MAAA,GAAS,QAAA,CAAS,MAAM,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,KAAK,IAAI,CAAA;AACxD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAA,CAAQ,MAAMA,MAAAA,CAAM,GAAA,CAAI,iBAAiB,IAAA,CAAK,IAAI,uCAAuC,CAAC,CAAA;AAC1F,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAA,MAAA,IAAW,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AAChC,IAAA,MAAA,GAAS,SAAS,CAAC,CAAA;AAAA,EACrB,CAAA,MAAA,IAAW,KAAK,GAAA,EAAK;AACnB,IAAA,MAAA,GAAS,QAAA,CAAS,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,QAAA,CAAS,WAAW,CAAA,IAAK,QAAA,CAAS,CAAC,CAAA;AAAA,EACpF,WAAW,OAAA,CAAQ,KAAA,CAAM,KAAA,IAAS,OAAA,CAAQ,OAAO,KAAA,EAAO;AACtD,IAAA,MAAM,IAAA,GAAO,MAAM,mBAAA,CAAoB,QAAQ,CAAA;AAC/C,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,GAAA,CAAI,kBAAkB,CAAC,CAAA;AACzC,MAAA;AAAA,IACF;AACA,IAAA,MAAA,GAAS,SAAS,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,IAAI,CAAA;AAAA,EACrD,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,GAAA,CAAI,yGAAoG,CAAC,CAAA;AAC3H,IAAA;AAAA,EACF;AACA,EAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,QAAA,CAAS,WAAW,CAAA,EAAG;AAC3C,IAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,GAAA,CAAI,gCAAgC,CAAC,CAAA;AACvD,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,OAAA,EAAS,QAAA,EAAU,MAAA,CAAO,UAAU,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,CAAA;AAE3F,EAAA,IAAI,KAAK,MAAA,EAAQ;AACf,IAAA,OAAA,CAAQ,GAAA,CAAIA,OAAM,IAAA,CAAK;AAAA,eAAA,EAAe,OAAO,KAAK,CAAA,OAAA,EAAU,OAAO,QAAA,CAAS,MAAM,eAAe,CAAC,CAAA;AAClG,IAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,MAAA,IAAI,CAAA,CAAE,MAAA,KAAW,QAAA,EAAU,OAAA,CAAQ,IAAIA,MAAAA,CAAM,MAAA,CAAO,CAAA,SAAA,EAAO,CAAA,CAAE,OAAO,CAAA,EAAA,EAAK,CAAA,CAAE,MAAM,EAAE,CAAC,CAAA;AAAA,WAC/E,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,OAAO,CAAA,EAAA,EAAK,CAAA,CAAE,MAAM,CAAA,CAAE,CAAC,CAAA;AAAA,IAC3D;AACA,IAAA,IAAI,OAAO,MAAA,CAAO,kBAAA,KAAuB,QAAA,EAAU;AACjD,MAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,GAAA,CAAI,CAAA,kCAAA,EAAqC,MAAA,CAAO,kBAAkB,CAAA,MAAA,EAAS,QAAA,CAAS,iBAAA,IAAqB,GAAG,CAAA,EAAA,CAAI,CAAC,CAAA;AAAA,IACrI;AACA,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,UAAU,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,SAAS,CAAA;AAC5D,EAAA,MAAM,SAAS,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,QAAQ,CAAA;AAC1D,EAAA,MAAM,SAAS,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,QAAQ,CAAA;AAE1D,EAAA,OAAA,CAAQ,GAAA,CAAIA,OAAM,IAAA,CAAK;AAAA,YAAA,EAAiB,MAAA,CAAO,KAAK,CAAA,MAAA,CAAQ,CAAC,CAAA;AAC7D,EAAA,OAAA,CAAQ,GAAA;AAAA,IACNA,MAAAA,CAAM,KAAA,CAAM,CAAA,SAAA,EAAO,OAAA,CAAQ,MAAM,WAAW,CAAA,IACzC,MAAA,CAAO,MAAA,GAASA,MAAAA,CAAM,GAAA,CAAI,CAAA,UAAA,EAAQ,OAAO,MAAM,CAAA,OAAA,CAAS,CAAA,GAAI,EAAA,CAAA,IAC5D,MAAA,CAAO,MAAA,GAASA,MAAAA,CAAM,MAAA,CAAO,CAAA,UAAA,EAAQ,MAAA,CAAO,MAAM,CAAA,iBAAA,CAAmB,CAAA,GAAI,EAAA;AAAA,GAC9E;AACA,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,IAAI,CAAA,WAAA,EAAS,CAAA,CAAE,OAAO,CAAA,QAAA,EAAM,EAAE,EAAE,CAAA,EAAA,EAAK,EAAE,MAAA,IAAU,QAAQ,EAAE,CAAC,CAAA;AACtG,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,OAAO,CAAA,WAAA,EAAS,CAAA,CAAE,OAAO,CAAA,QAAA,EAAM,EAAE,EAAE,CAAA,EAAA,EAAK,CAAA,CAAE,MAAM,EAAE,CAAC,CAAA;AAC7F,EAAA,IAAI,OAAO,MAAA,CAAO,kBAAA,KAAuB,YAAY,OAAO,QAAA,CAAS,sBAAsB,QAAA,EAAU;AACnG,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,kBAAA,GAAqB,QAAA,CAAS,iBAAA;AACnD,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,CAAA,uBAAA,EAA0B,QAAA,CAAS,iBAAiB,CAAA,SAAA,EAAO,MAAA,CAAO,kBAAkB,CAAA,EAAA,EAAK,KAAA,IAAS,CAAA,GAAI,EAAA,GAAK,GAAG,CAAA,EAAG,KAAK,CAAA,6CAAA;AAAA,KAExH;AAAA,EACF;AACA,EAAA,IAAI,MAAA,CAAO,MAAA,EAAQ,OAAA,CAAQ,QAAA,GAAW,CAAA;AACxC;AC7gBO,SAAS,WAAW,QAAA,EAAgC;AACzD,EAAA,MAAM,QAAkB,EAAC;AAGzB,EAAA,MAAM2B,KAAAA,GAAO3B,MAAAA,CAAM,GAAA,CAAI,SAAS,CAAA;AAChC,EAAA,MAAM4B,KAAAA,GAAO5B,MAAAA,CAAM,GAAA,CAAI,SAAS,CAAA;AAEhC,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,KAAK,KAAA,GAAQ2B,KAAAA,CAAK,kDAAU,CAAA,GAAIC,KAAAA,CAAK,QAAG,CAAC,CAAA;AAC/C,EAAA,KAAA,CAAM,IAAA,CAAK,IAAA,GAAO5B,MAAAA,CAAM,GAAA,CAAI,QAAG,CAAA,GAAI2B,KAAAA,CAAK,QAAG,CAAA,GAAI,GAAA,GAAMC,KAAAA,CAAK,QAAG,IAAI,IAAA,GAAOA,KAAAA,CAAK,QAAG,CAAA,GAAI,GAAA,GAAMD,KAAAA,CAAK,QAAG,CAAA,GAAI3B,MAAAA,CAAM,GAAA,CAAI,QAAG,CAAA,GAAI,IAAA,GAAOA,MAAAA,CAAM,IAAA,CAAK,KAAA,CAAM,UAAU,CAAC,CAAA;AAC1J,EAAA,KAAA,CAAM,IAAA,CAAK,IAAA,GAAOA,MAAAA,CAAM,GAAA,CAAI,QAAG,CAAA,GAAI2B,KAAAA,CAAK,QAAG,CAAA,GAAI,IAAA,GAAO3B,MAAAA,CAAM,GAAA,CAAI,cAAI,CAAA,GAAI,IAAA,GAAO2B,KAAAA,CAAK,QAAG,CAAA,GAAI3B,MAAAA,CAAM,GAAA,CAAI,QAAG,CAAA,GAAI,IAAA,GAAOA,MAAAA,CAAM,GAAA,CAAI,CAAA,0BAAA,EAA6B,OAAO,CAAA,CAAE,CAAC,CAAA;AACpK,EAAA,KAAA,CAAM,IAAA,CAAK,KAAA,GAAQ2B,KAAAA,CAAK,kDAAU,CAAC,CAAA;AACnC,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,IAAA,CAAK,GAAG,QAAA,CAAS,uBAAA,EAAyBA,KAAI,CAAC,CAAA;AACrD,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAGb,EAAA,KAAA,MAAW,OAAA,IAAW,SAAS,QAAA,EAAU;AACvC,IAAA,KAAA,CAAM,KAAK3B,MAAAA,CAAM,IAAA,CAAK,CAAA,eAAA,EAAQ,OAAA,CAAQ,IAAI,CAAA,CAAA,CAAG,CAAA,GAAIA,MAAAA,CAAM,GAAA,CAAI,IAAI,OAAA,CAAQ,IAAI,KAAK,OAAA,CAAQ,IAAI,EAAE,CAAC,CAAA;AAE/F,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,MAAM,SAAA,GAAY,QAAQ,mBAAA,KAAwB,MAAA,IAAa,QAAQ,mBAAA,GAAsB,CAAA,GACzFA,MAAAA,CAAM,MAAA,CAAO,CAAA,EAAA,EAAK,OAAA,CAAQ,mBAAmB,CAAA,MAAA,EAAS,OAAA,CAAQ,sBAAsB,CAAA,GAAI,GAAA,GAAM,EAAE,CAAA,QAAA,CAAU,CAAA,GAC1GA,MAAAA,CAAM,KAAA,CAAM,YAAY,CAAA;AAC5B,MAAA,KAAA,CAAM,KAAK,CAAA,cAAA,EAAiB,OAAA,CAAQ,OAAO,CAAA,EAAG,SAAS,CAAA,CAAE,CAAA;AAAA,IAC3D;AAEA,IAAA,IAAI,QAAQ,eAAA,EAAiB;AAC3B,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,cAAA,EAAiB,OAAA,CAAQ,eAAe,CAAA,CAAE,CAAA;AAAA,IACvD;AAEA,IAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AACjC,MAAA,KAAA,CAAM,KAAK,kBAAkB,CAAA;AAC7B,MAAA,KAAA,MAAW,EAAA,IAAM,QAAQ,UAAA,EAAY;AACnC,QAAA,MAAM,GAAA,GAAM,GAAG,YAAA,KAAiB,IAAA,GAC3B,GAAG,YAAA,KAAiB,CAAA,GAAIA,OAAM,KAAA,CAAM,SAAS,IAAIA,MAAAA,CAAM,MAAA,CAAO,GAAG,EAAA,CAAG,YAAY,SAAS,CAAA,GAC1FA,MAAAA,CAAM,IAAI,SAAS,CAAA;AACvB,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,OAAA,EAAU,EAAA,CAAG,IAAI,KAAK,EAAA,CAAG,cAAA,IAAkB,GAAG,CAAA,QAAA,EAAM,EAAA,CAAG,aAAA,IAAiB,GAAG,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,MACnG;AAAA,IACF;AAGA,IAAA,MAAM,IAAI,OAAA,CAAQ,oBAAA;AAClB,IAAA,MAAM,QAAQ,CAAA,CAAE,OAAA,GAAU,EAAE,SAAA,GAAY,CAAA,CAAE,gBAAgB,CAAA,CAAE,OAAA;AAC5D,IAAA,IAAI,QAAQ,CAAA,EAAG;AACb,MAAA,KAAA,CAAM,KAAK,oBAAoB,CAAA;AAC/B,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,OAAA,EAAUA,MAAAA,CAAM,KAAA,CAAM,GAAG,CAAA,CAAE,OAAO,CAAA,QAAA,CAAU,CAAC,CAAA,EAAA,EAAKA,MAAAA,CAAM,MAAA,CAAO,CAAA,EAAG,EAAE,SAAS,CAAA,SAAA,CAAW,CAAC,CAAA,EAAA,EAAKA,MAAAA,CAAM,GAAA,CAAI,CAAA,EAAG,CAAA,CAAE,aAAa,CAAA,UAAA,CAAY,CAAC,CAAA,EAAA,EAAKA,MAAAA,CAAM,IAAI,CAAA,EAAG,CAAA,CAAE,OAAO,CAAA,QAAA,CAAU,CAAC,CAAA,CAAE,CAAA;AAAA,IAC5L;AAEA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAEA,EAAA,IAAI,QAAA,CAAS,UAAU,MAAA,EAAW;AAGhC,IAAA,MAAM,QAAA,GAAW,SAAS,KAAA,GAAQ,CAAA,GAC9BA,OAAM,GAAA,CAAI,CAAA,CAAA,EAAI,QAAA,CAAS,KAAK,CAAA,CAAE,CAAA,GAC9B,SAAS,KAAA,GAAQ,CAAA,GACfA,MAAAA,CAAM,KAAA,CAAM,CAAA,EAAG,QAAA,CAAS,KAAK,CAAA,CAAE,CAAA,GAC/BA,MAAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AACnB,IAAA,KAAA,CAAM,KAAKA,MAAAA,CAAM,IAAA,CAAK,iBAAiB,CAAA,GAAI,WAAW,gBAAgB,CAAA;AACtE,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAGA,EAAA,IAAI,SAAS,QAAA,EAAU;AACrB,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,cAAA,CAAe,QAAA,CAAS,QAAQ,CAAC,CAAA;AAAA,EACjD;AAGA,EAAA,IAAI,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAChC,IAAA,MAAM,MAAA,GAAS,SAAS,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,OAAO,CAAA;AAClE,IAAA,MAAM,QAAA,GAAW,SAAS,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,SAAS,CAAA;AACtE,IAAA,MAAM,KAAA,GAAQ,SAAS,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,MAAM,CAAA;AAChE,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,MAAA,CAAO,MAAA,GAAS,CAAA,GAAIA,MAAAA,CAAM,IAAI,CAAA,EAAG,MAAA,CAAO,MAAM,CAAA,MAAA,EAAS,OAAO,MAAA,KAAW,CAAA,GAAI,GAAA,GAAM,EAAE,EAAE,CAAA,GAAI,EAAA;AAAA,MAC3F,QAAA,CAAS,MAAA,GAAS,CAAA,GAAIA,MAAAA,CAAM,OAAO,CAAA,EAAG,QAAA,CAAS,MAAM,CAAA,QAAA,EAAW,SAAS,MAAA,KAAW,CAAA,GAAI,GAAA,GAAM,EAAE,EAAE,CAAA,GAAI,EAAA;AAAA,MACtG,KAAA,CAAM,MAAA,GAAS,CAAA,GAAIA,MAAAA,CAAM,KAAK,CAAA,EAAG,KAAA,CAAM,MAAM,CAAA,KAAA,EAAQ,MAAM,MAAA,KAAW,CAAA,GAAI,GAAA,GAAM,EAAE,EAAE,CAAA,GAAI;AAAA,KAC1F,CAAE,OAAO,OAAO,CAAA,CAAE,KAAKA,MAAAA,CAAM,GAAA,CAAI,IAAI,CAAC,CAAA;AAEtC,IAAA,KAAA,CAAM,IAAA,CAAKA,MAAAA,CAAM,IAAA,CAAK,SAAA,CAAU,CAAA,UAAA,CAAY,CAAA,GAAIA,MAAAA,CAAM,GAAA,CAAI,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA,CAAG,CAAC,CAAA;AAC1E,IAAA,KAAA,MAAW,CAAA,IAAK,SAAS,QAAA,EAAU;AACjC,MAAA,MAAM,OAAO,CAAA,CAAE,KAAA,KAAU,OAAA,GAAUA,MAAAA,CAAM,IAAI,QAAG,CAAA,GAAI,CAAA,CAAE,KAAA,KAAU,YAAYA,MAAAA,CAAM,MAAA,CAAO,QAAG,CAAA,GAAIA,MAAAA,CAAM,KAAK,QAAG,CAAA;AAC9G,MAAA,KAAA,CAAM,KAAK,CAAA,IAAA,EAAO,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA;AACrC,MAAA,KAAA,CAAM,IAAA,CAAKA,MAAAA,CAAM,GAAA,CAAI,CAAA,MAAA,EAAS,CAAA,CAAE,MAAM,CAAA,IAAA,EAAO,CAAA,CAAE,QAAQ,CAAA,CAAE,CAAC,CAAA;AAAA,IAC5D;AACA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAGA,EAAA,MAAM,OAAA,GAAU,wBAAwB,QAAQ,CAAA;AAChD,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,QAAA,CAAS,sBAAsB,CAAC,CAAA;AAC9C,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,MAAA,MAAM,CAAA,GAAI,QAAQ,CAAC,CAAA;AACnB,MAAA,MAAM,MAAMA,MAAAA,CAAM,IAAA,CAAK,KAAK,CAAA,EAAA,EAAK,CAAA,GAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AACzC,MAAA,KAAA,CAAM,IAAA,CAAK,GAAG,GAAG,CAAA,CAAA,EAAIA,OAAM,IAAA,CAAK,CAAA,CAAE,KAAK,CAAC,CAAA,CAAE,CAAA;AAC1C,MAAA,KAAA,CAAM,KAAKA,MAAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,CAAE,WAAW,EAAE,CAAC,CAAA;AAC7C,MAAA,IAAI,CAAA,CAAE,MAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,CAAA,aAAA,EAAgBA,OAAM,KAAA,CAAM,CAAA,CAAE,MAAM,CAAC,CAAA,CAAE,CAAA;AAChE,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AAAA,EACF;AAGA,EAAA,IAAI,QAAA,CAAS,UAAU,YAAA,EAAc;AACnC,IAAA,KAAA,CAAM,KAAK,GAAG,yBAAA,CAA0B,QAAA,CAAS,QAAA,CAAS,YAAY,CAAC,CAAA;AAAA,EACzE;AAKA,EAAA,IAAI,QAAA,CAAS,SAAA,IAAa,QAAA,CAAS,SAAA,CAAU,SAAS,CAAA,EAAG;AACvD,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,QAAA,CAAS,wBAAwB,CAAC,CAAA;AAChD,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,MAAW,QAAA,IAAY,SAAS,SAAA,EAAW;AACzC,MAAA,MAAM,QAAA,GAAW,SAAS,KAAA,EAAO,KAAA;AACjC,MAAA,MAAM,KAAA,GAAQ,OAAO,QAAA,KAAa,QAAA,GAAY,YAAY,EAAA,GAAKA,MAAAA,CAAM,KAAA,GAAQ,QAAA,IAAY,EAAA,GAAKA,MAAAA,CAAM,MAAA,GAASA,MAAAA,CAAM,MAAOA,MAAAA,CAAM,GAAA;AAChI,MAAA,KAAA,CAAM,IAAA,CAAK,YAAO,QAAA,CAAS,IAAI,KAAK,QAAA,CAAS,YAAA,CAAa,MAAM,CAAA,kBAAA,EAAgB,OAAO,aAAa,QAAA,GAAW,KAAA,CAAM,GAAG,QAAQ,CAAA,IAAA,CAAM,IAAIA,MAAAA,CAAM,GAAA,CAAI,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,IAC9J;AACA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAGA,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,KAAA,CAAM,KAAA,IAAS,EAAA,GAAKA,MAAAA,CAAM,KAAA,GACpD,QAAA,CAAS,KAAA,CAAM,KAAA,IAAS,EAAA,GAAKA,MAAAA,CAAM,SAASA,MAAAA,CAAM,GAAA;AAEpD,EAAA,KAAA,CAAM,IAAA,CAAK,GAAG,QAAA,CAAS,oBAAoB,CAAC,CAAA;AAC5C,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,IAAA,CAAKA,MAAAA,CAAM,IAAA,CAAK,kBAAkB,CAAA,GAAI,UAAA,CAAW,IAAA,CAAK,CAAA,EAAG,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA,IAAA,CAAM,CAAC,CAAA;AAC1F,EAAA,KAAA,CAAM,IAAA,CAAKA,OAAM,IAAA,CAAK,kBAAkB,IAAI,SAAA,CAAU,QAAA,CAAS,KAAA,CAAM,SAAS,CAAC,CAAA;AAC/E,EAAA,KAAA,CAAM,IAAA,CAAKA,OAAM,IAAA,CAAK,kBAAkB,IAAI,CAAA,EAAG,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAEzE,EAAA,IAAI,SAAS,GAAA,EAAK;AAChB,IAAA,MAAM,QAAA,GAAqB,CAAC,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA;AAC7C,IAAA,IAAI,SAAS,GAAA,CAAI,MAAA,WAAiB,IAAA,CAAK,QAAA,CAAS,IAAI,MAAM,CAAA;AAC1D,IAAA,IAAI,QAAA,CAAS,GAAA,CAAI,QAAA,EAAU,QAAA,CAAS,IAAA,CAAKA,OAAM,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,QAAQ,CAAC,CAAA;AACzE,IAAA,KAAA,CAAM,IAAA,CAAKA,OAAM,IAAA,CAAK,kBAAkB,IAAI,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,EAChE;AAEA,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAGb,EAAA,MAAM,CAAA,GAAI,IAAI,GAAA,CAAI,QAAA,CAAS,KAAA,CAAM,QAAA,IAAY,CAAC,SAAA,EAAW,WAAA,EAAa,YAAA,EAAc,KAAK,CAAC,CAAA;AAC1F,EAAA,KAAA,CAAM,KAAK,IAAA,GAAOA,MAAAA,CAAM,IAAA,CAAK,SAAA,CAAU,iBAAiB,CAAC,CAAA;AACzD,EAAA,KAAA,CAAM,KAAK,CAAA,kBAAA,EAAqB,CAAA,CAAE,GAAA,CAAI,SAAS,IAAI,QAAA,CAAS,QAAA,CAAS,KAAA,CAAM,UAAA,CAAW,YAAY,CAAA,GAAIA,MAAAA,CAAM,GAAA,CAAI,KAAK,CAAC,CAAA,CAAE,CAAA;AACxH,EAAA,KAAA,CAAM,KAAK,CAAA,kBAAA,EAAqB,CAAA,CAAE,GAAA,CAAI,WAAW,IAAI,QAAA,CAAS,QAAA,CAAS,KAAA,CAAM,UAAA,CAAW,cAAc,CAAA,GAAIA,MAAAA,CAAM,GAAA,CAAI,KAAK,CAAC,CAAA,CAAE,CAAA;AAC5H,EAAA,KAAA,CAAM,KAAK,CAAA,kBAAA,EAAqB,CAAA,CAAE,GAAA,CAAI,YAAY,IAAI,QAAA,CAAS,QAAA,CAAS,KAAA,CAAM,UAAA,CAAW,eAAe,CAAA,GAAIA,MAAAA,CAAM,GAAA,CAAI,KAAK,CAAC,CAAA,CAAE,CAAA;AAC9H,EAAA,KAAA,CAAM,KAAK,CAAA,kBAAA,EAAqB,CAAA,CAAE,GAAA,CAAI,KAAK,IAAI,QAAA,CAAS,QAAA,CAAS,KAAA,CAAM,UAAA,CAAW,QAAQ,CAAA,GAAIA,MAAAA,CAAM,GAAA,CAAI,KAAK,CAAC,CAAA,CAAE,CAAA;AAChH,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAEb,EAAA,MAAM,YAAA,GAAyB,CAAC,CAAA,WAAA,EAAc,QAAA,CAAS,SAAS,CAAA,CAAE,CAAA;AAClE,EAAA,IAAI,QAAA,CAAS,eAAe,MAAA,EAAW;AACrC,IAAA,MAAM,IAAA,GAAA,CAAQ,QAAA,CAAS,UAAA,GAAa,GAAA,EAAM,QAAQ,CAAC,CAAA;AACnD,IAAA,YAAA,CAAa,IAAA,CAAK,CAAA,EAAG,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,EAC9B;AACA,EAAA,IAAI,QAAA,CAAS,iBAAiB,MAAA,EAAW;AACvC,IAAA,YAAA,CAAa,IAAA,CAAK,CAAA,EAAG,QAAA,CAAS,YAAY,CAAA,KAAA,EAAQ,SAAS,YAAA,KAAiB,CAAA,GAAI,GAAA,GAAM,EAAE,CAAA,QAAA,CAAU,CAAA;AAAA,EACpG;AACA,EAAA,IAAI,SAAS,WAAA,EAAa;AACxB,IAAA,YAAA,CAAa,KAAK,CAAA,EAAG,QAAA,CAAS,YAAY,UAAA,CAAW,cAAA,EAAgB,CAAA,gBAAA,CAAkB,CAAA;AACvF,IAAA,YAAA,CAAa,KAAK,CAAA,EAAG,QAAA,CAAS,YAAY,SAAA,CAAU,cAAA,EAAgB,CAAA,KAAA,CAAO,CAAA;AAAA,EAC7E;AACA,EAAA,KAAA,CAAM,IAAA,CAAKA,OAAM,GAAA,CAAI,CAAA,EAAA,EAAK,aAAa,IAAA,CAAK,QAAK,CAAC,CAAA,CAAE,CAAC,CAAA;AACrD,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAEb,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAEA,SAAS,UAAU,KAAA,EAAuB;AACxC,EAAA,QAAQ,KAAA;AAAO,IACb,KAAK,KAAA;AAAO,MAAA,OAAOA,MAAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAO,CAAA;AAAA,IAC9C,KAAK,UAAA;AAAY,MAAA,OAAOA,MAAAA,CAAM,QAAA,CAAS,KAAA,CAAM,YAAY,CAAA;AAAA,IACzD,KAAK,MAAA;AAAQ,MAAA,OAAOA,MAAAA,CAAM,KAAA,CAAM,KAAA,CAAM,QAAQ,CAAA;AAAA,IAC9C;AAAS,MAAA,OAAO,KAAA;AAAA;AAEpB;AAEA,SAAS,SAAS,KAAA,EAAuB;AAEvC,EAAA,OAAO,QAAA,CAAS,OAAO,EAAE,CAAA;AAC3B;AAIA,IAAM,eAAA,GAA0C;AAAA,EAC9C,QAAA,EAAU,UAAA;AAAA,EACV,cAAA,EAAgB,iBAAA;AAAA,EAChB,QAAA,EAAU,UAAA;AAAA,EACV,GAAA,EAAK,UAAA;AAAA,EACL,OAAA,EAAS,SAAA;AAAA,EACT,GAAA,EAAK,gBAAA;AAAA,EACL,OAAA,EAAS,SAAA;AAAA,EACT,UAAA,EAAY,eAAA;AAAA,EACZ,YAAA,EAAc,iBAAA;AAAA,EACd,aAAA,EAAe,eAAA;AAAA,EACf,OAAA,EAAS,SAAA;AAAA,EACT,IAAA,EAAM,MAAA;AAAA,EACN,KAAA,EAAO,OAAA;AAAA,EACP,KAAA,EAAO,OAAA;AAAA,EACP,SAAA,EAAW,WAAA;AAAA,EACX,SAAA,EAAW,WAAA;AAAA,EACX,GAAA,EAAK,aAAA;AAAA,EACL,OAAA,EAAS,SAAA;AAAA,EACT,MAAA,EAAQ;AACV,CAAA;AAEA,SAAS,eAAe,GAAA,EAAoC;AAC1D,EAAA,MAAM,QAAkB,EAAC;AAGzB,EAAA,IAAI,IAAI,gBAAA,EAAkB;AACxB,IAAA,MAAM,MAAM,GAAA,CAAI,gBAAA;AAChB,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,CAAE,MAAA,CAAO,CAAC,GAAG,KAAK,CAAA,KAAM,KAAA,CAAM,SAAS,CAAC,CAAA;AAC7E,IAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,MAAA,KAAA,CAAM,IAAA,CAAKA,MAAAA,CAAM,IAAA,CAAK,SAAA,CAAU,cAAc,CAAC,CAAA;AAC/C,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,UAAA,EAAY;AACrC,QAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,GAAG,CAAA,IAAK,GAAA;AACtC,QAAA,MAAM,KAAA,GAAS,KAAA,CAA0B,GAAA,CAAI,CAAC,MAAqBA,MAAAA,CAAM,KAAA,CAAM,CAAA,CAAE,IAAI,CAAC,CAAA,CAAE,IAAA,CAAKA,MAAAA,CAAM,GAAA,CAAI,IAAI,CAAC,CAAA;AAC5G,QAAA,KAAA,CAAM,IAAA,CAAK,OAAOA,MAAAA,CAAM,IAAA,CAAK,KAAK,CAAC,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,MACjD;AACA,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AAAA,EACF;AAGA,EAAA,IAAI,IAAI,mBAAA,EAAqB;AAC3B,IAAA,MAAM,MAAM,GAAA,CAAI,mBAAA;AAChB,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,CAAE,MAAA,CAAO,CAAC,GAAG,KAAK,CAAA,KAAM,KAAA,CAAM,SAAS,CAAC,CAAA;AAC7E,IAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,MAAA,KAAA,CAAM,IAAA,CAAKA,MAAAA,CAAM,IAAA,CAAK,SAAA,CAAU,2BAA2B,CAAC,CAAA;AAC5D,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,UAAA,EAAY;AACrC,QAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,GAAG,CAAA,IAAK,GAAA;AACtC,QAAA,MAAM,KAAA,GAAS,KAAA,CAAkC,GAAA,CAAI,CAAC,CAAA,KAA6B;AACjF,UAAA,MAAM,GAAA,GAAM,EAAE,OAAA,GAAUA,MAAAA,CAAM,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,GAAI,EAAA;AACrD,UAAA,OAAOA,MAAAA,CAAM,KAAA,CAAM,CAAA,CAAE,IAAI,CAAA,GAAI,GAAA;AAAA,QAC/B,CAAC,CAAA,CAAE,IAAA,CAAKA,MAAAA,CAAM,GAAA,CAAI,IAAI,CAAC,CAAA;AACvB,QAAA,KAAA,CAAM,IAAA,CAAK,OAAOA,MAAAA,CAAM,IAAA,CAAK,KAAK,CAAC,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,MACjD;AACA,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AAAA,EACF;AAGA,EAAA,IAAI,IAAI,sBAAA,EAAwB;AAC9B,IAAA,MAAM,KAAK,GAAA,CAAI,sBAAA;AACf,IAAA,IAAI,GAAG,kBAAA,CAAmB,MAAA,GAAS,KAAK,EAAA,CAAG,eAAA,CAAgB,SAAS,CAAA,EAAG;AACrE,MAAA,KAAA,CAAM,IAAA,CAAKA,MAAAA,CAAM,IAAA,CAAK,SAAA,CAAU,4BAA4B,CAAC,CAAA;AAE7D,MAAA,MAAM,aAAA,GAAgB,EAAA,CAAG,aAAA,IAAiB,EAAA,GAAKA,MAAAA,CAAM,GAAA,GACnD,EAAA,CAAG,aAAA,IAAiB,EAAA,GAAKA,MAAAA,CAAM,MAAA,GAASA,MAAAA,CAAM,KAAA;AAChD,MAAA,KAAA,CAAM,IAAA,CAAK,uBAAuB,aAAA,CAAc,IAAA,CAAK,GAAG,EAAA,CAAG,aAAa,CAAA,IAAA,CAAM,CAAC,CAAA,CAAE,CAAA;AAEjF,MAAA,IAAI,EAAA,CAAG,kBAAA,CAAmB,MAAA,GAAS,CAAA,EAAG;AACpC,QAAA,KAAA,CAAM,IAAA,CAAK,OAAOA,MAAAA,CAAM,GAAA,CAAI,YAAY,CAAC,CAAA,EAAA,EAAK,GAAG,kBAAA,CAAmB,GAAA,CAAI,CAAC,CAAA,KAAMA,MAAAA,CAAM,IAAI,CAAC,CAAC,EAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,MAC3G;AACA,MAAA,IAAI,EAAA,CAAG,eAAA,CAAgB,MAAA,GAAS,CAAA,EAAG;AACjC,QAAA,KAAA,CAAM,IAAA,CAAK,OAAOA,MAAAA,CAAM,MAAA,CAAO,WAAW,CAAC,CAAA,EAAA,EAAK,GAAG,eAAA,CAAgB,GAAA,CAAI,CAAC,CAAA,KAAMA,MAAAA,CAAM,IAAI,CAAC,CAAC,EAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,MAC1G;AACA,MAAA,IAAI,GAAG,qBAAA,EAAuB;AAC5B,QAAA,KAAA,CAAM,KAAK,CAAA,IAAA,EAAOA,MAAAA,CAAM,GAAA,CAAI,QAAG,CAAC,CAAA,mCAAA,CAAqC,CAAA;AAAA,MACvE;AACA,MAAA,KAAA,CAAM,KAAK,CAAA,oBAAA,EAAuBA,MAAAA,CAAM,KAAK,EAAA,CAAG,qBAAqB,CAAC,CAAA,CAAE,CAAA;AAExE,MAAA,MAAM,iBAAA,GAAoB,EAAA,CAAG,mBAAA,CAAoB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA,CAAE,KAAA,CAAM,GAAG,CAAC,CAAA;AAChG,MAAA,IAAI,iBAAA,CAAkB,SAAS,CAAA,EAAG;AAChC,QAAA,KAAA,CAAM,KAAK,iCAAiC,CAAA;AAC5C,QAAA,KAAA,MAAW,KAAK,iBAAA,EAAmB;AACjC,UAAA,KAAA,CAAM,KAAK,CAAA,QAAA,EAAW,CAAA,CAAE,OAAO,CAAA,EAAA,EAAK,CAAA,CAAE,cAAc,CAAA,CAAA,CAAG,CAAA;AACvD,UAAA,KAAA,MAAW,OAAO,CAAA,CAAE,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,EAAG;AACxC,YAAA,KAAA,CAAM,KAAK,CAAA,aAAA,EAAa,GAAA,CAAI,OAAO,CAAA,CAAA,EAAI,GAAA,CAAI,kBAAkB,GAAG,CAAA,QAAA,EAAM,IAAI,aAAA,IAAiB,GAAG,eAAe,GAAA,CAAI,KAAA,CAAM,cAAc,CAAA,IAAA,EAAO,GAAA,CAAI,WAAW,CAAA,CAAE,CAAA;AAAA,UAC/J;AAAA,QACF;AAAA,MACF;AACA,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AAAA,EACF;AAGA,EAAA,IAAI,GAAA,CAAI,WAAA,IAAe,GAAA,CAAI,WAAA,CAAY,iBAAA,EAAmB;AACxD,IAAA,MAAM,KAAK,GAAA,CAAI,WAAA;AACf,IAAA,KAAA,CAAM,IAAA,CAAKA,MAAAA,CAAM,IAAA,CAAK,SAAA,CAAU,cAAc,CAAC,CAAA;AAC/C,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,CAAA,EAAI,EAAA,CAAG,iBAAiB,CAAA,CAAE,CAAA;AACrC,IAAA,IAAI,EAAA,CAAG,WAAW,IAAA,EAAM,KAAA,CAAM,KAAKA,MAAAA,CAAM,KAAA,CAAM,eAAU,CAAC,CAAA;AAAA,SAAA,IACjD,EAAA,CAAG,WAAW,KAAA,EAAO,KAAA,CAAM,KAAKA,MAAAA,CAAM,MAAA,CAAO,eAAU,CAAC,CAAA;AACjE,IAAA,IAAI,GAAG,UAAA,EAAY,KAAA,CAAM,KAAK,EAAA,CAAG,UAAA,CAAW,aAAa,CAAA;AACzD,IAAA,IAAI,GAAG,MAAA,EAAQ,KAAA,CAAM,KAAK,CAAA,QAAA,EAAW,EAAA,CAAG,MAAM,CAAA,CAAE,CAAA;AAChD,IAAA,KAAA,CAAM,IAAA,CAAK,OAAO,KAAA,CAAM,IAAA,CAAKA,OAAM,GAAA,CAAI,QAAK,CAAC,CAAC,CAAA,CAAE,CAAA;AAChD,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAGA,EAAA,IAAI,IAAI,WAAA,EAAa;AACnB,IAAA,MAAM,KAAK,GAAA,CAAI,WAAA;AACf,IAAA,MAAM,YAAA,GAAe,EAAA,CAAG,EAAA,CAAG,MAAA,GAAS,CAAA,IAAK,EAAA,CAAG,MAAA,CAAO,eAAA,GAAkB,CAAA,IAAK,EAAA,CAAG,eAAA,CAAgB,MAAA,GAAS,CAAA;AACtG,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,KAAA,CAAM,IAAA,CAAKA,MAAAA,CAAM,IAAA,CAAK,SAAA,CAAU,kBAAkB,CAAC,CAAA;AACnD,MAAA,IAAI,EAAA,CAAG,EAAA,CAAG,MAAA,GAAS,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,CAAA,QAAA,EAAW,EAAA,CAAG,EAAA,CAAG,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAC9D,MAAA,IAAI,EAAA,CAAG,MAAA,CAAO,eAAA,GAAkB,CAAA,EAAG;AACjC,QAAA,KAAA,CAAM,KAAK,CAAA,YAAA,EAAe,EAAA,CAAG,OAAO,eAAe,CAAA,WAAA,EAAc,GAAG,MAAA,CAAO,eAAA,KAAoB,IAAI,GAAA,GAAM,EAAE,KAAK,EAAA,CAAG,MAAA,CAAO,WAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,MACpJ;AACA,MAAA,IAAI,EAAA,CAAG,eAAA,CAAgB,MAAA,GAAS,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,CAAA,sBAAA,EAAyB,EAAA,CAAG,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACtG,MAAA,IAAI,EAAA,CAAG,aAAA,CAAc,MAAA,GAAS,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,CAAA,cAAA,EAAiB,EAAA,CAAG,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAC1F,MAAA,IAAI,EAAA,CAAG,GAAA,CAAI,MAAA,GAAS,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAY,EAAA,CAAG,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACjE,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AAAA,EACF;AAKA,EAAA,IAAI,IAAI,SAAA,EAAW;AACjB,IAAA,MAAM,KAAK,GAAA,CAAI,SAAA;AACf,IAAA,KAAA,CAAM,IAAA,CAAKA,MAAAA,CAAM,IAAA,CAAK,SAAA,CAAU,2BAA2B,CAAC,CAAA;AAC5D,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,gBAAA,EAAmB,EAAA,CAAG,kBAAA,CAAmB,SAAS,CAAA,GAAI,EAAA,CAAG,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAA,GAAIA,MAAAA,CAAM,GAAA,CAAI,SAAS,CAAC,CAAA,CAAE,CAAA;AAC1H,IAAA,KAAA,CAAM,KAAK,CAAA,cAAA,EAAiB,EAAA,CAAG,WAAA,CAAY,MAAM,GAAG,EAAA,CAAG,MAAA,GAASA,MAAAA,CAAM,GAAA,CAAI,OAAO,EAAA,CAAG,aAAa,CAAA,SAAA,CAAW,CAAA,GAAI,EAAE,CAAA,CAAE,CAAA;AAEpH,IAAA,MAAM,GAAA,GAAM,EAAA,CAAG,WAAA,CAAY,KAAA,CAAM,GAAG,CAAC,CAAA;AACrC,IAAA,IAAI,GAAA,CAAI,SAAS,CAAA,EAAG;AAClB,MAAA,KAAA,CAAM,KAAK,kBAAkB,CAAA;AAC7B,MAAA,KAAA,MAAW,QAAQ,GAAA,EAAK;AACtB,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAY,IAAA,CAAK,IAAI,KAAK,IAAA,CAAK,KAAK,CAAA,CAAA,EAAIA,MAAAA,CAAM,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,CAAA,CAAA,CAAG,CAAC,CAAA,CAAE,CAAA;AAAA,MAClF;AAAA,IACF;AAEA,IAAA,IAAI,EAAA,CAAG,cAAA,CAAe,MAAA,GAAS,CAAA,EAAG;AAChC,MAAA,KAAA,CAAM,KAAK,eAAe,CAAA;AAC1B,MAAA,KAAA,MAAW,KAAK,EAAA,CAAG,cAAA,CAAe,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,EAAG;AAC7C,QAAA,KAAA,CAAM,KAAK,CAAA,QAAA,EAAWA,MAAAA,CAAM,MAAA,CAAO,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,MACzC;AAAA,IACF;AAEA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAGA,EAAA,IAAI,IAAI,eAAA,EAAiB;AACvB,IAAA,MAAM,MAAM,GAAA,CAAI,eAAA;AAChB,IAAA,KAAA,CAAM,IAAA,CAAKA,MAAAA,CAAM,IAAA,CAAK,SAAA,CAAU,oBAAoB,CAAC,CAAA;AACrD,IAAA,MAAM,SAAmB,EAAC;AAC1B,IAAA,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,eAAA,GAAkBA,MAAAA,CAAM,KAAA,CAAM,iBAAY,CAAA,GAAIA,MAAAA,CAAM,GAAA,CAAI,iBAAY,CAAC,CAAA;AACrF,IAAA,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,kBAAA,GAAqBA,MAAAA,CAAM,KAAA,CAAM,aAAQ,CAAA,GAAIA,MAAAA,CAAM,GAAA,CAAI,aAAQ,CAAC,CAAA;AAChF,IAAA,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,0BAAA,GAA6BA,MAAAA,CAAM,KAAA,CAAM,qBAAgB,CAAA,GAAIA,MAAAA,CAAM,MAAA,CAAO,qBAAgB,CAAC,CAAA;AAC3G,IAAA,IAAI,IAAI,qBAAA,EAAuB,MAAA,CAAO,KAAKA,MAAAA,CAAM,MAAA,CAAO,2BAAsB,CAAC,CAAA;AAC/E,IAAA,IAAI,IAAI,eAAA,EAAiB,MAAA,CAAO,KAAKA,MAAAA,CAAM,GAAA,CAAI,0BAAqB,CAAC,CAAA;AACrE,IAAA,KAAA,CAAM,IAAA,CAAK,OAAO,MAAA,CAAO,IAAA,CAAKA,OAAM,GAAA,CAAI,QAAK,CAAC,CAAC,CAAA,CAAE,CAAA;AACjD,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAEA,EAAA,IAAI,IAAI,cAAA,EAAgB;AACtB,IAAA,MAAM,KAAK,GAAA,CAAI,cAAA;AACf,IAAA,IAAI,GAAG,aAAA,CAAc,MAAA,GAAS,KAAK,EAAA,CAAG,gBAAA,CAAiB,SAAS,CAAA,EAAG;AACjE,MAAA,KAAA,CAAM,IAAA,CAAKA,MAAAA,CAAM,IAAA,CAAK,SAAA,CAAU,YAAY,CAAC,CAAA;AAC7C,MAAA,IAAI,EAAA,CAAG,aAAA,CAAc,MAAA,GAAS,CAAA,EAAG;AAC/B,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,oBAAA,EAAuB,EAAA,CAAG,aAAA,CAAc,IAAI,CAAC,CAAA,KAAMA,MAAAA,CAAM,GAAA,CAAI,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,MAC1F;AACA,MAAA,IAAI,EAAA,CAAG,aAAA,CAAc,MAAA,GAAS,CAAA,EAAG;AAC/B,QAAA,KAAA,CAAM,KAAK,CAAA,oBAAA,EAAuB,EAAA,CAAG,cAAc,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,MACjE;AACA,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AAAA,EACF;AAIA,EAAA,IAAI,IAAI,WAAA,EAAa;AACnB,IAAA,MAAM,KAAK,GAAA,CAAI,WAAA;AACf,IAAA,KAAA,CAAM,IAAA,CAAKA,MAAAA,CAAM,IAAA,CAAK,SAAA,CAAU,gBAAgB,CAAC,CAAA;AACjD,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,WAAA,EAAcA,MAAAA,CAAM,KAAA,CAAM,GAAG,EAAA,CAAG,aAAa,CAAA,CAAE,CAAC,CAAA,iBAAA,EAAiBA,MAAAA,CAAM,KAAA,CAAM,CAAA,EAAG,GAAG,iBAAiB,CAAA,CAAE,CAAC,CAAA,sBAAA,EAAsBA,MAAAA,CAAM,KAAA,CAAM,CAAA,EAAG,EAAA,CAAG,uBAAuB,CAAA,CAAE,CAAC,CAAA,kBAAA,EAAkBA,MAAAA,CAAM,MAAM,CAAA,EAAG,EAAA,CAAG,iBAAiB,CAAA,CAAE,CAAC,CAAA,MAAA,CAAQ,CAAA;AACpP,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,iBAAA,EAAoB,EAAA,CAAG,eAAe,CAAA,qBAAA,EAAqB,GAAG,oBAAoB,CAAA,iBAAA,EAAiB,EAAA,CAAG,eAAe,CAAA,CAAA,CAAG,CAAA;AACnI,IAAA,IAAI,EAAA,CAAG,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAC1B,MAAA,MAAM,UAAU,EAAA,CAAG,QAAA,CAAS,MAAM,CAAA,EAAG,CAAC,EAAE,GAAA,CAAI,CAAC,MAAM,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAK,CAAA,OAAA,CAAS,CAAA,CAAE,KAAK,IAAI,CAAA;AAC5F,MAAA,KAAA,CAAM,IAAA,CAAK,OAAOA,MAAAA,CAAM,MAAA,CAAO,WAAW,CAAC,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA;AAAA,IAC3D;AACA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAEA,EAAA,IAAI,IAAI,eAAA,EAAiB;AACvB,IAAA,MAAM,KAAK,GAAA,CAAI,eAAA;AACf,IAAA,IAAI,GAAG,YAAA,EAAc;AACnB,MAAA,KAAA,CAAM,IAAA,CAAKA,MAAAA,CAAM,IAAA,CAAK,SAAA,CAAU,oBAAoB,CAAC,CAAA;AACrD,MAAA,KAAA,CAAM,IAAA,CAAK,OAAO,EAAA,CAAG,YAAY,KAAKA,MAAAA,CAAM,KAAA,CAAM,GAAG,EAAA,CAAG,WAAW,EAAE,CAAC,CAAA,SAAA,EAAYA,OAAM,KAAA,CAAM,CAAA,EAAG,GAAG,cAAc,CAAA,CAAE,CAAC,CAAA,UAAA,CAAY,CAAA;AACjI,MAAA,IAAI,EAAA,CAAG,kBAAA,CAAmB,MAAA,GAAS,CAAA,EAAG;AACpC,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,EAAOA,MAAAA,CAAM,MAAA,CAAO,CAAA,EAAG,GAAG,kBAAA,CAAmB,MAAM,CAAA,WAAA,CAAa,CAAC,CAAA,SAAA,CAAW,CAAA;AAAA,MACzF;AACA,MAAA,IAAI,EAAA,CAAG,mBAAA,CAAoB,MAAA,GAAS,CAAA,EAAG;AACrC,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,EAAOA,MAAAA,CAAM,GAAA,CAAI,CAAA,EAAG,GAAG,mBAAA,CAAoB,MAAM,CAAA,QAAA,CAAU,CAAC,CAAA,aAAA,CAAe,CAAA;AAAA,MACxF;AACA,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AAWA,SAAS,0BAA0B,IAAA,EAAoC;AACrE,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,CAAM,IAAA,CAAK,GAAG,QAAA,CAAS,qBAAqB,CAAC,CAAA;AAC7C,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,KAAKA,MAAAA,CAAM,IAAA,CAAK,eAAe,CAAA,GAAI,CAAA,EAAG,KAAK,SAAS,CAAA,CAAA,GAAKA,OAAM,GAAA,CAAI,CAAA,EAAA,EAAK,KAAK,KAAA,CAAM,IAAA,CAAK,sBAAsB,GAAG,CAAC,eAAe,CAAC,CAAA;AACxI,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,oBAAA,EAAuB,IAAA,CAAK,eAAe,MAAM,IAAA,CAAK,YAAA,GAAe,CAAA,GAAIA,MAAAA,CAAM,IAAI,CAAA,EAAA,EAAK,IAAA,CAAK,YAAY,CAAA,cAAA,CAAgB,IAAI,EAAA,CAAG,CAAA;AAC3I,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,IAAI,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC1B,IAAA,KAAA,MAAW,KAAA,IAAS,KAAK,MAAA,EAAQ;AAC/B,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,SAAA,KAAc,MAAA,GAASA,MAAAA,CAAM,IAAI,MAAM,CAAA,GAAI,KAAA,CAAM,SAAA,KAAc,KAAA,GAAQA,MAAAA,CAAM,MAAM,KAAK,CAAA,GAAI,KAAA,CAAM,SAAA,KAAc,UAAA,GAAaA,MAAAA,CAAM,OAAO,UAAU,CAAA,GAAIA,MAAAA,CAAM,GAAA,CAAI,MAAM,CAAA;AAC3L,MAAA,KAAA,CAAM,IAAA,CAAK,OAAOA,MAAAA,CAAM,IAAA,CAAK,MAAM,KAAK,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,SAAS,CAAA,KAAA,EAAQ,MAAM,SAAA,KAAc,CAAA,GAAI,GAAA,GAAM,EAAE,CAAA,QAAA,EAAW,QAAA,CAAS,MAAM,UAAU,CAAC,CAAA,OAAA,EAAU,IAAI,CAAA,CAAE,CAAA;AAAA,IAC5J;AACA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,wBAAwB,QAAA,EAA0C;AACzE,EAAA,MAAM,UAA4B,EAAC;AAGnC,EAAA,MAAM,WAAA,GAAc,SAAS,QAAA,CAAS,MAAA;AAAA,IACpC,CAAC,CAAA,KAAM,CAAA,CAAE,mBAAA,KAAwB,MAAA,IAAa,EAAE,mBAAA,IAAuB;AAAA,GACzE;AACA,EAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,IAAA,MAAM,KAAA,GAAQ,YAAY,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,IAAI,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AACtD,IAAA,IAAI,MAAA,GAAS,CAAA,qFAAA,CAAA;AACb,IAAA,MAAM,YAAsB,EAAC;AAC7B,IAAA,KAAA,MAAW,KAAK,WAAA,EAAa;AAC3B,MAAA,SAAA,CAAU,IAAA,CAAK;AAAA,OAAA,EAAY,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA;AACnC,MAAA,SAAA,CAAU,IAAA,CAAK;AAAA,OAAA,EAAY,CAAA,CAAE,OAAO,CAAA,QAAA,EAAM,CAAA,CAAE,aAAa,CAAA,EAAA,EAAK,CAAA,CAAE,mBAAmB,CAAA,MAAA,EAAS,CAAA,CAAE,mBAAA,GAAuB,CAAA,GAAI,GAAA,GAAM,EAAE,CAAA,QAAA,CAAU,CAAA;AAAA,IAC7I;AACA,IAAA,MAAA,IAAU,SAAA,CAAU,KAAK,EAAE,CAAA;AAC3B,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,KAAA,EAAO,sBAAsB,WAAA,CAAY,MAAA,GAAS,IAAI,GAAA,GAAM,EAAE,OAAO,KAAK,CAAA,CAAA;AAAA,MAC1E,WAAA,EAAa,MAAA;AAAA,MACb,MAAA,EAAQ,SAAI,IAAA,CAAK,GAAA,CAAI,YAAY,MAAA,GAAS,EAAA,EAAI,EAAE,CAAC,CAAA,oCAAA,CAAA;AAAA,MACjD,QAAA,EAAU;AAAA,KACX,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,mBAAyG,EAAC;AAChH,EAAA,KAAA,MAAW,CAAA,IAAK,SAAS,QAAA,EAAU;AACjC,IAAA,KAAA,MAAW,EAAA,IAAM,EAAE,UAAA,EAAY;AAC7B,MAAA,IAAI,EAAA,CAAG,YAAA,KAAiB,IAAA,IAAQ,EAAA,CAAG,gBAAgB,CAAA,EAAG;AACpD,QAAA,gBAAA,CAAiB,IAAA,CAAK,EAAE,IAAA,EAAM,EAAA,CAAG,MAAM,EAAA,EAAI,CAAA,EAAG,EAAA,CAAG,cAAc,CAAA,QAAA,EAAM,EAAA,CAAG,aAAa,CAAA,CAAA,EAAI,MAAA,EAAQ,GAAG,YAAA,EAAc,OAAA,EAAS,EAAE,IAAA,EAAM,WAAA,EAAa,CAAA,CAAE,IAAA,EAAM,CAAA;AAAA,MAC1J;AAAA,IACF;AAAA,EACF;AACA,EAAA,IAAI,gBAAA,CAAiB,SAAS,CAAA,EAAG;AAC/B,IAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,MAAA,GAAS,CAAA,CAAE,MAAM,CAAA,CAAE,CAAC,CAAA;AACpE,IAAA,MAAM,MAAA,GAAS,iBAAiB,MAAA,GAAS,CAAA,GAAI,MAAM,gBAAA,CAAiB,MAAA,GAAS,CAAC,CAAA,MAAA,CAAA,GAAW,EAAA;AACzF,IAAA,IAAI,MAAA,GAAS,CAAA,EAAG,KAAA,CAAM,MAAM,CAAA,8IAAA,CAAA;AAC5B,IAAA,MAAM,YAAsB,EAAC;AAC7B,IAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,IAAA,KAAA,MAAW,MAAM,gBAAA,EAAkB;AACjC,MAAA,IAAI,SAAS,CAAA,EAAG;AAChB,MAAA,SAAA,CAAU,IAAA,CAAK;AAAA,OAAA,EAAY,EAAA,CAAG,WAAW,CAAA,CAAE,CAAA;AAC3C,MAAA,SAAA,CAAU,IAAA,CAAK;AAAA,OAAA,EAAY,EAAA,CAAG,IAAI,CAAA,EAAA,EAAK,EAAA,CAAG,EAAE,CAAA,EAAA,EAAK,EAAA,CAAG,MAAM,CAAA,MAAA,EAAS,EAAA,CAAG,MAAA,GAAS,CAAA,GAAI,GAAA,GAAM,EAAE,CAAA,QAAA,CAAU,CAAA;AACrG,MAAA,KAAA,EAAA;AAAA,IACF;AACA,IAAA,MAAM,SAAA,GAAY,iBAAiB,MAAA,GAAS,KAAA;AAC5C,IAAA,MAAA,IAAU,SAAA,CAAU,KAAK,EAAE,CAAA;AAC3B,IAAA,IAAI,SAAA,GAAY,GAAG,MAAA,IAAU;AAAA,aAAA,EAAkB,SAAS,CAAA,KAAA,CAAA;AACxD,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,KAAA,EAAO,CAAA,QAAA,EAAW,KAAA,CAAM,IAAI,CAAA,CAAA,EAAI,KAAA,CAAM,EAAE,CAAA,IAAA,EAAO,KAAA,CAAM,OAAO,CAAA,EAAG,MAAM,CAAA,CAAA;AAAA,MACrE,WAAA,EAAa,MAAA;AAAA,MACb,MAAA,EAAQ,CAAA,4BAAA,CAAA;AAAA,MACR,QAAA,EAAU;AAAA,KACX,CAAA;AAAA,EACH;AAGA,EAAA,KAAA,MAAW,CAAA,IAAK,SAAS,QAAA,EAAU;AACjC,IAAA,MAAM,IAAI,CAAA,CAAE,oBAAA;AACZ,IAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,CAAA,CAAE,YAAY,CAAA,CAAE,aAAA;AAC1C,IAAA,IAAI,UAAU,CAAA,EAAG;AACjB,IAAA,MAAM,aAAa,IAAA,CAAK,KAAA,CAAO,CAAA,CAAE,aAAA,GAAgB,QAAS,GAAG,CAAA;AAC7D,IAAA,IAAI,cAAc,EAAA,EAAI;AACpB,MAAA,IAAI,MAAA,GAAS,CAAA,EAAG,CAAA,CAAE,aAAa,OAAO,KAAK,CAAA,yHAAA,CAAA;AAG3C,MAAA,MAAM,SAAA,GAAY,EAAE,YAAA,CACjB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,YAAA,KAAiB,IAAA,IAAQ,CAAA,CAAE,YAAA,IAAgB,CAAC,CAAA,CAC5D,IAAA,CAAK,CAAC,CAAA,EAAG,EAAA,KAAA,CAAQ,GAAG,YAAA,IAAgB,CAAA,KAAM,CAAA,CAAE,YAAA,IAAgB,CAAA,CAAE,CAAA;AACjE,MAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,QAAA,MAAM,WAAqB,EAAC;AAC5B,QAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,QAAA,QAAA,CAAS,IAAA,CAAK;AAAA,OAAA,EAAY,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA;AAClC,QAAA,KAAA,MAAW,OAAO,SAAA,EAAW;AAC3B,UAAA,IAAI,SAAS,CAAA,EAAG;AAChB,UAAA,MAAM,OAAA,GAAU,GAAA,CAAI,eAAA,IAAmB,GAAA,CAAI,WAAA;AAC3C,UAAA,MAAM,MAAA,GAAS,IAAI,YAAA,IAAgB,GAAA;AACnC,UAAA,QAAA,CAAS,IAAA,CAAK;AAAA,OAAA,EAAY,GAAA,CAAI,OAAO,CAAA,EAAA,EAAK,OAAO,WAAM,MAAM,CAAA,EAAA,EAAK,GAAA,CAAI,YAAY,SAAS,GAAA,CAAI,YAAA,GAAgB,CAAA,GAAI,GAAA,GAAM,EAAE,CAAA,QAAA,CAAU,CAAA;AACrI,UAAA,KAAA,EAAA;AAAA,QACF;AACA,QAAA,MAAM,SAAA,GAAY,UAAU,MAAA,GAAS,KAAA;AACrC,QAAA,MAAA,IAAU,QAAA,CAAS,KAAK,EAAE,CAAA;AAC1B,QAAA,IAAI,SAAA,GAAY,GAAG,MAAA,IAAU;AAAA,aAAA,EAAkB,SAAS,CAAA,KAAA,CAAA;AAAA,MAC1D;AAEA,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,KAAA,EAAO,CAAA,yBAAA,EAA4B,CAAA,CAAE,IAAI,KAAK,UAAU,CAAA,oBAAA,CAAA;AAAA,QACxD,WAAA,EAAa,MAAA;AAAA,QACb,MAAA,EAAQ,CAAA,4BAAA,CAAA;AAAA,QACR,QAAA,EAAU,KAAK,UAAA,GAAa;AAAA,OAC7B,CAAA;AAAA,IACH;AAAA,EACF;AAGA,EAAA,MAAM,qBAA2F,EAAC;AAClG,EAAA,KAAA,MAAW,CAAA,IAAK,SAAS,QAAA,EAAU;AACjC,IAAA,KAAA,MAAW,EAAA,IAAM,EAAE,UAAA,EAAY;AAC7B,MAAA,IAAI,EAAA,CAAG,iBAAiB,CAAA,EAAG;AACzB,QAAA,kBAAA,CAAmB,KAAK,EAAE,IAAA,EAAM,GAAG,IAAA,EAAM,OAAA,EAAS,EAAE,IAAA,EAAM,WAAA,EAAa,EAAE,IAAA,EAAM,EAAA,EAAI,GAAG,EAAA,CAAG,cAAc,WAAM,EAAA,CAAG,aAAa,IAAI,CAAA;AAAA,MACnI;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,YAAY,CAAC,GAAG,IAAI,GAAA,CAAI,mBAAmB,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,EAAE,IAAA,EAAM,CAAC,CAAC,CAAC,CAAA,CAAE,QAAQ,CAAA;AAClF,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,IAAA,MAAM,OAAO,SAAA,CAAU,KAAA,CAAM,GAAG,CAAC,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,EAAE,CAAA,CAAA,CAAG,CAAA,CAAE,KAAK,IAAI,CAAA;AAC9E,IAAA,MAAM,SAAA,GAAY,UAAU,MAAA,GAAS,CAAA,GAAI,KAAK,SAAA,CAAU,MAAA,GAAS,CAAC,CAAA,KAAA,CAAA,GAAU,EAAA;AAC5E,IAAA,IAAI,MAAA,GAAS,CAAA,gJAAA,CAAA;AACb,IAAA,MAAM,YAAsB,EAAC;AAC7B,IAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,IAAA,KAAA,MAAW,MAAM,kBAAA,EAAoB;AACnC,MAAA,IAAI,SAAS,CAAA,EAAG;AAChB,MAAA,SAAA,CAAU,IAAA,CAAK;AAAA,OAAA,EAAY,EAAA,CAAG,WAAW,CAAA,CAAE,CAAA;AAC3C,MAAA,SAAA,CAAU,IAAA,CAAK;AAAA,OAAA,EAAY,EAAA,CAAG,IAAI,CAAA,EAAA,EAAK,EAAA,CAAG,EAAE,CAAA,CAAE,CAAA;AAC9C,MAAA,KAAA,EAAA;AAAA,IACF;AACA,IAAA,MAAM,SAAA,GAAY,mBAAmB,MAAA,GAAS,KAAA;AAC9C,IAAA,MAAA,IAAU,SAAA,CAAU,KAAK,EAAE,CAAA;AAC3B,IAAA,IAAI,SAAA,GAAY,GAAG,MAAA,IAAU;AAAA,aAAA,EAAkB,SAAS,CAAA,KAAA,CAAA;AACxD,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,KAAA,EAAO,CAAA,+BAAA,EAAkC,IAAI,CAAA,EAAG,SAAS,CAAA,CAAA;AAAA,MACzD,WAAA,EAAa,MAAA;AAAA,MACb,MAAA,EAAQ,CAAA,4BAAA,CAAA;AAAA,MACR,QAAA,EAAU;AAAA,KACX,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,QAAA,CAAS,UAAU,sBAAA,EAAwB;AAC7C,IAAA,MAAM,EAAA,GAAK,SAAS,QAAA,CAAS,sBAAA;AAC7B,IAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,kBAAA,CAAmB,MAAA,GAAS,GAAG,eAAA,CAAgB,MAAA;AAChE,IAAA,IAAI,QAAQ,CAAA,EAAG;AACb,MAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,EAAA,CAAG,oBAAoB,GAAG,EAAA,CAAG,eAAe,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,KAAK,IAAI,CAAA;AACrF,MAAA,MAAM,YAAY,KAAA,GAAQ,CAAA,GAAI,CAAA,EAAA,EAAK,KAAA,GAAQ,CAAC,CAAA,KAAA,CAAA,GAAU,EAAA;AACtD,MAAA,IAAI,SAAS,CAAA,EAAG,KAAK,WAAW,KAAA,KAAU,CAAA,GAAI,MAAM,EAAE,CAAA,iGAAA,CAAA;AAGtD,MAAA,MAAM,WAAA,mBAAc,IAAI,GAAA,CAAI,CAAC,GAAG,GAAG,kBAAA,EAAoB,GAAG,EAAA,CAAG,eAAe,CAAC,CAAA;AAC7E,MAAA,MAAM,YAAsB,EAAC;AAC7B,MAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,MAAA,KAAA,MAAW,CAAA,IAAK,SAAS,QAAA,EAAU;AACjC,QAAA,MAAM,OAAA,GAAU,CAAA,CAAE,YAAA,CAAa,MAAA,CAAO,CAAC,MAAM,WAAA,CAAY,GAAA,CAAI,CAAA,CAAE,OAAO,CAAC,CAAA;AACvE,QAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC1B,QAAA,IAAI,SAAS,EAAA,EAAI;AACjB,QAAA,SAAA,CAAU,IAAA,CAAK;AAAA,OAAA,EAAY,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA;AACnC,QAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,UAAA,IAAI,SAAS,EAAA,EAAI;AACjB,UAAA,MAAM,GAAA,GAAM,GAAA,CAAI,eAAA,IAAmB,GAAA,CAAI,WAAA;AACvC,UAAA,MAAM,QAAQ,EAAA,CAAG,kBAAA,CAAmB,SAAS,GAAA,CAAI,OAAO,IAAI,YAAA,GAAe,UAAA;AAC3E,UAAA,SAAA,CAAU,IAAA,CAAK;AAAA,OAAA,EAAY,IAAI,OAAO,CAAA,EAAA,EAAK,GAAG,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,CAAG,CAAA;AAC3D,UAAA,KAAA,EAAA;AAAA,QACF;AAAA,MACF;AACA,MAAA,MAAM,YAAY,KAAA,GAAQ,KAAA;AAC1B,MAAA,MAAA,IAAU,SAAA,CAAU,KAAK,EAAE,CAAA;AAC3B,MAAA,IAAI,SAAA,GAAY,GAAG,MAAA,IAAU;AAAA,aAAA,EAAkB,SAAS,CAAA,KAAA,CAAA;AAExD,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,KAAA,EAAO,CAAA,oCAAA,EAAuC,KAAK,CAAA,EAAG,SAAS,CAAA,CAAA;AAAA,QAC/D,WAAA,EAAa,MAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACX,CAAA;AAAA,IACH;AAAA,EACF;AAGA,EAAA,IAAI,QAAA,CAAS,UAAU,eAAA,EAAiB;AACtC,IAAA,MAAM,EAAA,GAAK,SAAS,QAAA,CAAS,eAAA;AAC7B,IAAA,MAAM,YAAA,GAAe,GAAG,mBAAA,CAAoB,MAAA;AAC5C,IAAA,IAAI,gBAAgB,EAAA,EAAI;AACtB,MAAA,IAAI,MAAA,GAAS,CAAA,iJAAA,CAAA;AAGb,MAAA,MAAM,UAAU,EAAA,CAAG,wBAAA;AACnB,MAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AAEjC,QAAA,MAAM,MAAA,uBAAa,GAAA,EAAiD;AACpE,QAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,UAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,UAAU,CAAA,EAAG,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,UAAA,EAAY,EAAE,CAAA;AAC1D,UAAA,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,UAAU,CAAA,CAAG,IAAA,CAAK,EAAE,OAAA,EAAS,CAAA,CAAE,OAAA,EAAS,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,CAAA;AAAA,QACrE;AACA,QAAA,MAAM,YAAsB,EAAC;AAC7B,QAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,QAAA,KAAA,MAAW,CAAC,OAAA,EAAS,IAAI,CAAA,IAAK,MAAA,EAAQ;AACpC,UAAA,IAAI,SAAS,EAAA,EAAI;AACjB,UAAA,SAAA,CAAU,IAAA,CAAK;AAAA,OAAA,EAAY,OAAO,CAAA,CAAE,CAAA;AACpC,UAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,YAAA,IAAI,SAAS,EAAA,EAAI;AACjB,YAAA,SAAA,CAAU,IAAA,CAAK;AAAA,OAAA,EAAY,GAAA,CAAI,OAAO,CAAA,EAAA,EAAK,GAAA,CAAI,IAAI,CAAA,CAAE,CAAA;AACrD,YAAA,KAAA,EAAA;AAAA,UACF;AAAA,QACF;AACA,QAAA,MAAM,YAAY,YAAA,GAAe,KAAA;AACjC,QAAA,MAAA,IAAU,SAAA,CAAU,KAAK,EAAE,CAAA;AAC3B,QAAA,IAAI,SAAA,GAAY,GAAG,MAAA,IAAU;AAAA,aAAA,EAAkB,SAAS,CAAA,KAAA,CAAA;AAAA,MAC1D;AAEA,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,KAAA,EAAO,OAAO,YAAY,CAAA,qBAAA,CAAA;AAAA,QAC1B,WAAA,EAAa,MAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACX,CAAA;AAAA,IACH;AAAA,EACF;AAGA,EAAA,IAAI,QAAA,CAAS,UAAU,eAAA,EAAiB;AACtC,IAAA,MAAM,GAAA,GAAM,SAAS,QAAA,CAAS,eAAA;AAC9B,IAAA,IAAI,GAAA,CAAI,eAAA,IAAmB,CAAC,GAAA,CAAI,eAAA,EAAiB;AAC/C,MAAA,MAAM,SAAmB,EAAC;AAC1B,MAAA,IAAI,GAAA,CAAI,eAAA,EAAiB,MAAA,CAAO,IAAA,CAAK,+BAA+B,CAAA;AACpE,MAAA,IAAI,CAAC,GAAA,CAAI,eAAA,EAAiB,MAAA,CAAO,KAAK,mBAAmB,CAAA;AACzD,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI,IAAI,eAAA,EAAiB;AACvB,QAAA,MAAA,GAAS,+GAAA;AACT,QAAA,MAAA,IAAU,qBAAA;AACV,QAAA,MAAA,IAAU,wCAAA;AAAA,MACZ,CAAA,MAAO;AACL,QAAA,MAAA,GAAS,4GAAA;AACT,QAAA,MAAA,IAAU,WAAA;AACV,QAAA,MAAA,IAAU;AAAA,gBAAA,EAAqB,GAAA,CAAI,aAAA,CAAc,MAAA,GAAS,CAAA,GAAI,GAAA,CAAI,cAAc,IAAA,CAAK,IAAI,CAAA,GAAI,4BAAA,GAA+B,iDAAiD,CAAA,CAAA;AAAA,MAC/K;AACA,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,KAAA,EAAO,CAAA,sBAAA,EAAyB,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,QACjD,WAAA,EAAa,MAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACX,CAAA;AAAA,IACH;AAAA,EACF;AAGA,EAAA,IAAI,QAAA,CAAS,UAAU,eAAA,EAAiB;AACtC,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,QAAA,CAAS,eAAA,CAAgB,kBAAA;AAChD,IAAA,MAAM,eAAA,GAAkB,MAAM,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,QAAA,CAAS,UAAU,CAAC,CAAA;AAClE,IAAA,IAAI,eAAA,CAAgB,UAAU,CAAA,EAAG;AAC/B,MAAA,IAAI,MAAA,GAAS,CAAA,EAAG,eAAA,CAAgB,MAAM,CAAA,gGAAA,CAAA;AACtC,MAAA,MAAM,YAAsB,EAAC;AAC7B,MAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,MAAA,KAAA,MAAW,KAAK,eAAA,EAAiB;AAC/B,QAAA,IAAI,SAAS,CAAA,EAAG;AAChB,QAAA,SAAA,CAAU,IAAA,CAAK;AAAA,OAAA,EAAY,EAAE,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,QAAA,CAAS,KAAK,IAAI,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,SAAS,CAAA,SAAA,EAAY,CAAA,CAAE,cAAc,CAAA,GAAI,GAAA,GAAM,EAAE,CAAA,CAAA,CAAG,CAAA;AACtH,QAAA,KAAA,EAAA;AAAA,MACF;AACA,MAAA,MAAM,SAAA,GAAY,gBAAgB,MAAA,GAAS,KAAA;AAC3C,MAAA,MAAA,IAAU,SAAA,CAAU,KAAK,EAAE,CAAA;AAC3B,MAAA,IAAI,SAAA,GAAY,GAAG,MAAA,IAAU;AAAA,aAAA,EAAkB,SAAS,CAAA,KAAA,CAAA;AACxD,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,KAAA,EAAO,CAAA,sCAAA,CAAA;AAAA,QACP,WAAA,EAAa,MAAA;AAAA,QACb,QAAA,EAAU;AAAA,OACX,CAAA;AAAA,IACH;AAAA,EACF;AAGA,EAAA,OAAA,CAAQ,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,QAAA,GAAW,EAAE,QAAQ,CAAA;AAC9C,EAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAC3B;;;AC3qBO,SAAS,eAAe,QAAA,EAAgC;AAC7D,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,KAAA,CAAM,KAAK,yBAAyB,CAAA;AACpC,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,KAAK,CAAA,kBAAA,CAAoB,CAAA;AAC/B,EAAA,KAAA,CAAM,KAAK,CAAA,kBAAA,CAAoB,CAAA;AAC/B,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,mBAAA,EAAsB,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA,wCAAA,CAA0C,CAAA;AAC/F,EAAA,KAAA,CAAM,KAAK,CAAA,mBAAA,EAAsB,QAAA,CAAS,MAAM,SAAA,CAAU,WAAA,EAAa,CAAA,EAAA,CAAI,CAAA;AAC3E,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,iBAAA,EAAoB,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA,EAAA,CAAI,CAAA;AAC3D,EAAA,MAAM,WAAA,GAAwB,CAAC,QAAA,CAAS,SAAS,CAAA;AACjD,EAAA,IAAI,QAAA,CAAS,UAAA,KAAe,MAAA,EAAW,WAAA,CAAY,IAAA,CAAK,CAAA,EAAA,CAAI,QAAA,CAAS,UAAA,GAAa,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AACrG,EAAA,IAAI,QAAA,CAAS,iBAAiB,MAAA,EAAW,WAAA,CAAY,KAAK,CAAA,EAAG,QAAA,CAAS,YAAY,CAAA,MAAA,CAAQ,CAAA;AAC1F,EAAA,IAAI,SAAS,WAAA,EAAa,WAAA,CAAY,IAAA,CAAK,CAAA,EAAG,SAAS,WAAA,CAAY,UAAA,CAAW,cAAA,EAAgB,yBAAsB,QAAA,CAAS,WAAA,CAAY,SAAA,CAAU,cAAA,EAAgB,CAAA,KAAA,CAAO,CAAA;AAC1K,EAAA,KAAA,CAAM,KAAK,CAAA,gBAAA,EAAmB,WAAA,CAAY,IAAA,CAAK,QAAK,CAAC,CAAA,EAAA,CAAI,CAAA;AACzD,EAAA,IAAI,SAAS,GAAA,EAAK;AAChB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,YAAA,EAAe,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA,EAAA,CAAI,CAAA;AAC/C,IAAA,IAAI,QAAA,CAAS,IAAI,MAAA,EAAQ,KAAA,CAAM,KAAK,CAAA,eAAA,EAAkB,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA,EAAA,CAAI,CAAA;AAC7E,IAAA,IAAI,QAAA,CAAS,IAAI,GAAA,EAAK,KAAA,CAAM,KAAK,CAAA,iBAAA,EAAoB,QAAA,CAAS,GAAA,CAAI,QAAQ,CAAA,IAAA,CAAM,CAAA;AAAA,EAClF;AACA,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAGb,EAAA,KAAA,CAAM,KAAK,oBAAoB,CAAA;AAC/B,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,KAAK,CAAA,qBAAA,CAAuB,CAAA;AAClC,EAAA,KAAA,CAAM,KAAK,CAAA,qBAAA,CAAuB,CAAA;AAClC,EAAA,KAAA,CAAM,KAAK,CAAA,YAAA,EAAe,QAAA,CAAS,KAAA,CAAM,UAAA,CAAW,YAAY,CAAA,EAAA,CAAI,CAAA;AACpE,EAAA,KAAA,CAAM,KAAK,CAAA,eAAA,EAAkB,QAAA,CAAS,KAAA,CAAM,UAAA,CAAW,cAAc,CAAA,EAAA,CAAI,CAAA;AACzE,EAAA,KAAA,CAAM,KAAK,CAAA,iBAAA,EAAoB,QAAA,CAAS,KAAA,CAAM,UAAA,CAAW,eAAe,CAAA,EAAA,CAAI,CAAA;AAC5E,EAAA,KAAA,CAAM,KAAK,CAAA,aAAA,EAAgB,QAAA,CAAS,KAAA,CAAM,UAAA,CAAW,QAAQ,CAAA,EAAA,CAAI,CAAA;AACjE,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAGb,EAAA,KAAA,CAAM,KAAK,aAAa,CAAA;AACxB,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAEb,EAAA,KAAA,MAAW,OAAA,IAAW,SAAS,QAAA,EAAU;AACvC,IAAA,KAAA,CAAM,KAAK,CAAA,IAAA,EAAO,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,OAAA,CAAQ,IAAI,CAAA,CAAA,CAAG,CAAA;AAClD,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAEb,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,mBAAA,KAAwB,MAAA,IAAa,OAAA,CAAQ,sBAAsB,CAAA,GACnF,CAAA,QAAA,EAAM,OAAA,CAAQ,mBAAmB,CAAA,gBAAA,CAAA,GACjC,iBAAA;AACJ,MAAA,KAAA,CAAM,KAAK,CAAA,eAAA,EAAkB,OAAA,CAAQ,OAAO,CAAA,EAAG,GAAG,CAAA,CAAE,CAAA;AAAA,IACtD;AAEA,IAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AACjC,MAAA,KAAA,CAAM,KAAK,mBAAmB,CAAA;AAC9B,MAAA,KAAA,MAAW,EAAA,IAAM,QAAQ,UAAA,EAAY;AACnC,QAAA,MAAM,GAAA,GAAM,EAAA,CAAG,YAAA,KAAiB,IAAA,GAC3B,EAAA,CAAG,YAAA,KAAiB,CAAA,GAAI,SAAA,GAAY,CAAA,EAAG,EAAA,CAAG,YAAY,CAAA,OAAA,CAAA,GACvD,SAAA;AACJ,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,EAAO,EAAA,CAAG,IAAI,KAAK,EAAA,CAAG,cAAA,IAAkB,GAAG,CAAA,QAAA,EAAM,EAAA,CAAG,aAAA,IAAiB,GAAG,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,MAChG;AAAA,IACF;AAEA,IAAA,MAAM,IAAI,OAAA,CAAQ,oBAAA;AAClB,IAAA,MAAM,QAAQ,CAAA,CAAE,OAAA,GAAU,EAAE,SAAA,GAAY,CAAA,CAAE,gBAAgB,CAAA,CAAE,OAAA;AAC5D,IAAA,IAAI,QAAQ,CAAA,EAAG;AACb,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,oBAAA,EAAuB,CAAA,CAAE,OAAO,CAAA,UAAA,EAAa,CAAA,CAAE,SAAS,CAAA,WAAA,EAAc,CAAA,CAAE,aAAa,CAAA,YAAA,EAAe,CAAA,CAAE,OAAO,CAAA,QAAA,CAAU,CAAA;AAAA,IACpI;AAEA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAGA,EAAA,IAAI,QAAA,CAAS,UAAU,SAAA,EAAW;AAChC,IAAA,MAAM,EAAA,GAAK,SAAS,QAAA,CAAS,SAAA;AAC7B,IAAA,KAAA,CAAM,KAAK,4BAA4B,CAAA;AACvC,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,kBAAA,EAAqB,EAAA,CAAG,kBAAA,CAAmB,MAAA,GAAS,CAAA,GAAI,EAAA,CAAG,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAA,GAAI,SAAS,CAAA,CAAE,CAAA;AACjH,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,sBAAA,EAAyB,EAAA,CAAG,WAAA,CAAY,MAAM,CAAA,EAAG,EAAA,CAAG,MAAA,GAAS,CAAA,cAAA,EAAiB,EAAA,CAAG,aAAa,CAAA,CAAA,CAAA,GAAM,EAAE,CAAA,CAAE,CAAA;AACnH,IAAA,IAAI,EAAA,CAAG,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AAC7B,MAAA,KAAA,CAAM,KAAK,qBAAqB,CAAA;AAChC,MAAA,KAAA,MAAW,QAAQ,EAAA,CAAG,WAAA,CAAY,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,EAAG;AAC9C,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,KAAA,EAAQ,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,KAAK,KAAK,CAAA,EAAA,EAAK,IAAA,CAAK,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,MAC9D;AAAA,IACF;AACA,IAAA,IAAI,EAAA,CAAG,cAAA,CAAe,MAAA,GAAS,CAAA,EAAG;AAChC,MAAA,KAAA,CAAM,KAAK,iBAAiB,CAAA;AAC5B,MAAA,KAAA,MAAW,KAAK,EAAA,CAAG,cAAA,CAAe,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,EAAG;AAC7C,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,EAAO,CAAC,CAAA,CAAE,CAAA;AAAA,MACvB;AAAA,IACF;AACA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAEA,EAAA,IAAI,QAAA,CAAS,UAAU,SAAA,IAAa,QAAA,CAAS,SAAS,SAAA,CAAU,WAAA,CAAY,SAAS,CAAA,EAAG;AACtF,IAAA,MAAM,GAAA,GAAM,SAAS,QAAA,CAAS,SAAA;AAC9B,IAAA,KAAA,CAAM,KAAK,0BAA0B,CAAA;AACrC,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,eAAA,CAAgB,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,EAAG,CAAA,CAAE,OAAO,WAAM,CAAA,CAAE,QAAQ,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AACzF,IAAA,IAAI,QAAA,EAAU,KAAA,CAAM,IAAA,CAAK,CAAA,wBAAA,EAA2B,QAAQ,CAAA,CAAE,CAAA;AAC9D,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AAC7B,MAAA,KAAA,CAAM,KAAK,sCAAsC,CAAA;AACjD,MAAA,KAAA,MAAW,CAAA,IAAK,IAAI,UAAA,EAAY;AAC9B,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,EAAO,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,EAAE,kBAAkB,CAAA,CAAA,EAAI,CAAA,CAAE,YAAY,CAAA,uBAAA,CAAyB,CAAA;AAAA,MAC9F;AAAA,IACF;AACA,IAAA,KAAA,CAAM,KAAK,kCAAkC,CAAA;AAC7C,IAAA,KAAA,MAAW,OAAO,GAAA,CAAI,WAAA,CAAY,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,EAAG;AAC9C,MAAA,MAAM,IAAA,GAAO,GAAA,CAAI,kBAAA,GAAqB,iBAAA,GAAoB,EAAA;AAC1D,MAAA,KAAA,CAAM,IAAA,CAAK,SAAS,GAAA,CAAI,IAAI,aAAQ,GAAA,CAAI,MAAM,CAAA,EAAG,IAAI,CAAA,CAAE,CAAA;AAAA,IACzD;AACA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAEA,EAAA,IAAI,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAChC,IAAA,KAAA,CAAM,KAAK,aAAa,CAAA;AACxB,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,KAAK,CAAA,qCAAA,CAAuC,CAAA;AAClD,IAAA,KAAA,CAAM,KAAK,CAAA,qCAAA,CAAuC,CAAA;AAClD,IAAA,KAAA,MAAW,CAAA,IAAK,SAAS,QAAA,EAAU;AACjC,MAAA,MAAM,KAAA,GAAQ,EAAE,KAAA,KAAU,OAAA,GAAU,cAAO,CAAA,CAAE,KAAA,KAAU,YAAY,WAAA,GAAO,WAAA;AAC1E,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,EAAI,EAAE,KAAK,CAAA,GAAA,EAAM,CAAA,CAAE,MAAM,MAAM,CAAA,CAAE,OAAO,CAAA,GAAA,EAAM,CAAA,CAAE,QAAQ,CAAA,EAAA,CAAI,CAAA;AAAA,IACnF;AACA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAEA,EAAA,IAAI,QAAA,CAAS,UAAU,MAAA,EAAW;AAEhC,IAAA,MAAM,GAAA,GAAM,SAAS,KAAA,GAAQ,CAAA,GAAI,cAAO,QAAA,CAAS,KAAA,GAAQ,IAAI,WAAA,GAAO,cAAA;AACpE,IAAA,MAAM,KAAA,GAAQ,SAAS,KAAA,GAAQ,CAAA,GAAI,kBAAkB,QAAA,CAAS,KAAA,GAAQ,IAAI,eAAA,GAAkB,EAAA;AAC5F,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,gBAAA,EAAmB,GAAG,CAAA,CAAA,EAAI,SAAS,KAAA,GAAQ,CAAA,GAAI,GAAA,GAAM,EAAE,CAAA,EAAG,QAAA,CAAS,KAAK,CAAA,YAAA,EAAe,KAAK,CAAA,CAAE,CAAA;AACzG,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;;;AC7HO,IAAM,aAAA,GAAgB,IAAIsB,OAAAA,CAAQ,QAAQ,EAC9C,WAAA,CAAY,8CAA8C,EAC1D,MAAA,CAAO,aAAA,EAAe,uBAAuB,4BAA4B,CAAA,CACzE,OAAO,mBAAA,EAAqB,8BAAA,EAAgC,MAAM,CAAA,CAClE,MAAA,CAAO,OAAO,IAAA,KAAyC;AACtD,EAAA,MAAM,YAAA,GAAoBmB,IAAA,CAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,CAAA;AAEzC,EAAA,IAAI,CAAE,MAAMhB,UAAAA,CAAW,YAAY,CAAA,EAAI;AACrC,IAAA,OAAA,CAAQ,MAAMzB,MAAAA,CAAM,GAAA,CAAI,CAAA,oBAAA,EAAuB,YAAY,EAAE,CAAC,CAAA;AAC9D,IAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,wDAAwD,CAAC,CAAA;AACjF,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAA2B,YAAY,CAAA;AAE9D,EAAA,QAAQ,KAAK,MAAA;AAAQ,IACnB,KAAK,IAAA;AACH,MAAA,OAAA,CAAQ,GAAA,CAAI,cAAA,CAAe,QAAQ,CAAC,CAAA;AACpC,MAAA;AAAA,IACF,KAAK,MAAA;AACH,MAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,QAAA,EAAU,IAAA,EAAM,CAAC,CAAC,CAAA;AAC7C,MAAA;AAAA,IACF,KAAK,MAAA;AAAA,IACL;AACE,MAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,QAAQ,CAAC,CAAA;AAChC,MAAA;AAAA;AAEN,CAAC,CAAA;AC5BI,SAAS,QAAQ,GAAA,EAAsB;AAC5C,EAAA,MAAM,WAAW,OAAA,CAAQ,QAAA;AACzB,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI,IAAA;AAEJ,EAAA,IAAI,aAAa,QAAA,EAAU;AACzB,IAAA,OAAA,GAAU,MAAA;AACV,IAAA,IAAA,GAAO,CAAC,GAAG,CAAA;AAAA,EACb,CAAA,MAAA,IAAW,aAAa,OAAA,EAAS;AAC/B,IAAA,OAAA,GAAU,KAAA;AAEV,IAAA,IAAA,GAAO,CAAC,IAAA,EAAM,OAAA,EAAS,EAAA,EAAI,GAAG,CAAA;AAAA,EAChC,CAAA,MAAO;AACL,IAAA,OAAA,GAAU,UAAA;AACV,IAAA,IAAA,GAAO,CAAC,GAAG,CAAA;AAAA,EACb;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ0C,MAAM,OAAA,EAAS,IAAA,EAAM,EAAE,KAAA,EAAO,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,CAAA;AACtE,IAAA,KAAA,CAAM,EAAA,CAAG,SAAS,MAAM;AAAA,IAExB,CAAC,CAAA;AACD,IAAA,KAAA,CAAM,KAAA,EAAM;AACZ,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;;;ACCA,IAAM,KAAA,GAAQ,CAAC,EAAA,KAAe,IAAI,OAAA,CAAQ,CAAC3C,SAAAA,KAAY,UAAA,CAAWA,SAAAA,EAAS,EAAE,CAAC,CAAA;AAG9E,SAAS,QAAA,CAAS,KAAa,IAAA,EAAuB;AACpD,EAAA,MAAMG,IAAAA,GAAWyC,IAAA,CAAA,QAAA,CAAS,GAAA,EAAK,IAAI,CAAA;AACnC,EAAA,OAAO,CAAC,CAACzC,IAAAA,IAAO,CAACA,IAAAA,CAAI,WAAW,IAAI,CAAA,IAAK,CAAMyC,IAAA,CAAA,UAAA,CAAWzC,IAAG,CAAA;AAC/D;AAEO,IAAM,YAAA,GAAe,IAAIoB,OAAAA,CAAQ,OAAO,CAAA,CAC5C,WAAA,CAAY,mEAAmE,CAAA,CAC/E,MAAA,CAAO,gBAAA,EAAkB,qCAAqC,CAAA,CAC9D,MAAA,CAAO,qBAAqB,CAAA,uBAAA,EAA0B,kBAAA,EAAmB,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA,EAAK,IAAI,CAAA,CAC9F,MAAA,CAAO,cAAA,EAAgB,gDAAgD,CAAA,CACvE,MAAA;AAAA,EACC,SAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA,CAAO,OAAO,IAAA,KAAiF;AAC9F,EAAA,IAAI,UAAA;AACJ,EAAA,IAAI;AACF,IAAA,UAAA,GAAa,iBAAA,CAAkB,IAAA,CAAK,MAAA,EAAQ,IAAA,CAAK,MAAM,CAAA;AAAA,EACzD,SAAS,CAAA,EAAY;AACnB,IAAA,OAAA,CAAQ,KAAA,CAAMtB,MAAAA,CAAM,GAAA,CAAI,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA;AACnE,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,IAAA,GAAO,WAAW,UAAU,CAAA,eAAA,CAAA;AAGlC,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA,MAAA,CAAA,EAAU;AAAA,MACvC,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAoB,YAAY,OAAA,EAAQ;AAAA,MACnE,IAAA,EAAM;AAAA,KACP,CAAA;AACD,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,OAAA,CAAQ,MAAMA,MAAAA,CAAM,GAAA,CAAI,+BAA+B,GAAA,CAAI,MAAM,IAAI,CAAC,CAAA;AACtE,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AACA,IAAA,KAAA,GAAS,MAAM,IAAI,IAAA,EAAK;AAAA,EAC1B,SAAS,CAAA,EAAY;AACnB,IAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,CAAA,gBAAA,EAAmB,UAAU,CAAA,EAAA,EAAK,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,EAAE,CAAC,CAAA;AACvG,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAGA,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,EAAA,OAAA,CAAQ,IAAI,8DAA8D,CAAA;AAC1E,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,EAAA,OAAA,CAAQ,IAAI,IAAA,GAAOA,MAAAA,CAAM,IAAA,CAAK,KAAA,CAAM,eAAe,CAAC,CAAA;AACpD,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,EAAA,OAAA,CAAQ,IAAI,eAAA,GAAkBA,MAAAA,CAAM,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAC,CAAA;AACxD,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAEd,EAAA,IAAI,KAAK,OAAA,EAAS;AAChB,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,uBAAuB,CAAA;AACpD,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,GAAA,CAAI,qEAAgE,CAAC,CAAA;AAAA,IACzF;AAAA,EACF;AACA,EAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,GAAA,CAAI,4BAAuB,CAAC,CAAA;AAG9C,EAAA,MAAM,aAAa,IAAA,CAAK,GAAA,CAAI,GAAG,KAAA,CAAM,QAAA,IAAY,CAAC,CAAA,GAAI,GAAA;AACtD,EAAA,MAAM,WAAW,IAAA,CAAK,GAAA,EAAI,GAAA,CAAK,KAAA,CAAM,aAAa,GAAA,IAAO,GAAA;AAEzD,EAAA,OAAO,IAAA,CAAK,GAAA,EAAI,GAAI,QAAA,EAAU;AAC5B,IAAA,MAAM,MAAM,UAAU,CAAA;AACtB,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA,MAAA,CAAA,EAAU;AAAA,QACvC,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAoB,YAAY,OAAA,EAAQ;AAAA,QACnE,MAAM,IAAA,CAAK,SAAA,CAAU,EAAE,UAAA,EAAY,KAAA,CAAM,YAAY;AAAA,OACtD,CAAA;AACD,MAAA,KAAA,GAAS,MAAM,IAAI,IAAA,EAAK;AAAA,IAC1B,CAAA,CAAA,MAAQ;AAEN,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,KAAA,CAAM,WAAW,uBAAA,EAAyB;AAE9C,IAAA,IAAI,KAAA,CAAM,WAAW,UAAA,EAAY;AAM/B,MAAA,IAAI,KAAA;AACJ,MAAA,IAAI,MAAM,GAAA,EAAK;AACb,QAAA,KAAA,GAAQ;AAAA,UACN,KAAK,KAAA,CAAM,GAAA;AAAA,UACX,aAAa,KAAA,CAAM,WAAA;AAAA,UACnB,OAAO,KAAA,CAAM,KAAA;AAAA,UACb,UAAA,EAAY,MAAM,UAAA,IAAc,UAAA;AAAA,UAChC,OAAA,EAAA,iBAAS,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,SAClC;AAAA,MACF,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,GAAA,CAAI,iCAA4B,CAAC,CAAA;AACnD,QAAA,IAAI;AACF,UAAA,MAAM,WAAA,GAAc,MAAM,kBAAA,CAAmB;AAAA,YAC3C,QAAQ,IAAA,CAAK,MAAA;AAAA,YACb,QAAQ,IAAA,CAAK;AAAA,WACd,CAAA;AACD,UAAA,KAAA,GAAQ;AAAA,YACN,KAAK,WAAA,CAAY,GAAA;AAAA,YACjB,aAAa,WAAA,CAAY,WAAA;AAAA,YACzB,OAAO,WAAA,CAAY,KAAA;AAAA,YACnB,YAAY,WAAA,CAAY,UAAA;AAAA,YACxB,OAAA,EAAA,iBAAS,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,WAClC;AAAA,QACF,SAAS,CAAA,EAAY;AACnB,UAAA,OAAA,CAAQ,KAAA;AAAA,YACNA,MAAAA,CAAM,IAAI,gDAA2C,CAAA,IAClD,aAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAA;AAAA,WAC9C;AACA,UAAA,OAAA,CAAQ,KAAA;AAAA,YACNA,MAAAA,CAAM,IAAI,4DAA4D;AAAA,WACxE;AACA,UAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,QAChB;AAAA,MACF;AAEA,MAAA,MAAM,SAAA,GAAY,EAAE,KAAA,EAAO,IAAA,CAAK,UAAU,IAAA,EAAK;AAC/C,MAAA,sBAAA,CAAuB,OAAO,SAAS,CAAA;AACvC,MAAA,MAAM,SAAA,GAAY,gBAAgB,SAAS,CAAA;AAC3C,MAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,MAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,KAAA,CAAM,QAAG,IAAI,aAAa,CAAA;AAC5C,MAAA,IAAI,MAAM,WAAA,EAAa;AACrB,QAAA,OAAA,CAAQ,IAAI,eAAA,GAAkBA,MAAAA,CAAM,IAAA,CAAK,KAAA,CAAM,WAAW,CAAC,CAAA;AAAA,MAC7D;AACA,MAAA,OAAA,CAAQ,IAAIA,MAAAA,CAAM,GAAA,CAAI,CAAA,uBAAA,EAA0B,SAAS,EAAE,CAAC,CAAA;AAQ5D,MAAA,IAAI;AACF,QAAA,MAAM,OAAO,WAAA,EAAY;AACzB,QAAA,IAAI,IAAA,IAAQ,QAAA,CAAS,IAAA,EAAM,SAAS,CAAA,EAAG;AACrC,UAAA,MAAM,MAAM,gBAAA,CAAiB,4BAAA,CAA6B,IAAA,EAAM,SAAS,GAAG,IAAI,CAAA;AAChF,UAAA,IAAI,GAAA,CAAI,WAAW,SAAA,EAAW;AAC5B,YAAA,OAAA,CAAQ,IAAIA,MAAAA,CAAM,GAAA,CAAI,oCAAoC,GAAA,CAAI,KAAK,EAAE,CAAC,CAAA;AAAA,UACxE,CAAA,MAAA,IAAW,GAAA,CAAI,MAAA,KAAW,OAAA,EAAS;AACjC,YAAA,OAAA,CAAQ,IAAIA,MAAAA,CAAM,GAAA,CAAI,WAAW,GAAA,CAAI,KAAK,gBAAgB,CAAC,CAAA;AAAA,UAC7D;AAAA,QACF;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAER;AAEA,MAAA,OAAA,CAAQ,IAAIA,MAAAA,CAAM,GAAA,CAAI,sBAAsB,oBAAA,EAAsB,gBAAgB,CAAC,CAAA;AACnF,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,KAAA,CAAM,WAAW,eAAA,EAAiB;AACpC,MAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,yCAAoC,CAAC,CAAA;AAC7D,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AACA,IAAA,IAAI,KAAA,CAAM,MAAA,KAAW,SAAA,IAAa,KAAA,CAAM,WAAW,SAAA,EAAW;AAC5D,MAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,2DAAsD,CAAC,CAAA;AAC/E,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AACA,IAAA,IAAI,KAAA,CAAM,WAAW,OAAA,EAAS;AAC5B,MAAA,OAAA,CAAQ,KAAA,CAAMA,OAAM,GAAA,CAAI,CAAA,OAAA,EAAK,MAAM,KAAA,IAAS,eAAe,EAAE,CAAC,CAAA;AAC9D,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AAEA,EAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,oEAA+D,CAAC,CAAA;AACxF,EAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAChB,CAAC,CAAA;;;ACtLI,SAAS,eAAA,CAAgB,OAAA,EAAiB,GAAA,GAAgB,EAAC,EAAW;AAC3E,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,QAAA,IAAY,OAAA,CAAQ,QAAA;AAEzC,EAAA,IAAI,aAAa,OAAA,EAAS;AACxB,IAAA,OAAO,CAAA,4BAAA,EAA+B,OAAO,CAAA,kBAAA,EAAqB,OAAO,CAAA,CAAA,CAAA;AAAA,EAC3E;AAEA,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,IAAS,OAAA,CAAQ,IAAI,KAAA,IAAS,EAAA;AAChD,EAAA,MAAM,OAAO,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA,CAAE,KAAI,IAAK,EAAA;AACvC,EAAA,IAAI,IAAA,KAAS,MAAA,EAAQ,OAAO,CAAA,OAAA,EAAU,OAAO,CAAA,CAAA;AAC7C,EAAA,IAAI,SAAS,KAAA,IAAS,IAAA,KAAS,MAAA,EAAQ,OAAO,YAAY,OAAO,CAAA,CAAA;AACjE,EAAA,OAAO,SAAS,OAAO,CAAA,CAAA;AACzB;;;ACnCO,IAAM,aAAA,GAAgB,IAAIsB,OAAAA,CAAQ,QAAQ,EAC9C,WAAA,CAAY,yCAAyC,CAAA,CACrD,MAAA,CAAO,MAAM;AACZ,EAAA,MAAM,UAAU,sBAAA,EAAuB;AACvC,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,OAAA,CAAQ,GAAA,CAAItB,MAAAA,CAAM,KAAA,CAAM,QAAG,IAAI,0CAA0C,CAAA;AAAA,EAC3E,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,IAAIA,MAAAA,CAAM,GAAA,CAAI,kCAAkC,eAAA,EAAiB,GAAG,CAAC,CAAA;AAAA,EAC/E;AAMA,EAAA,IAAI,OAAA,CAAQ,IAAI,YAAA,EAAc;AAC5B,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,IAAA,OAAA,CAAQ,GAAA;AAAA,MACNA,MAAAA,CAAM,MAAA,CAAO,QAAG,CAAA,GACd;AAAA,KACJ;AACA,IAAA,OAAA,CAAQ,GAAA;AAAA,MACNA,OAAM,GAAA,CAAI,CAAA,8BAAA,EAAiC,eAAA,CAAgB,cAAc,CAAC,CAAA,CAAE;AAAA,KAC9E;AAAA,EACF;AACF,CAAC,CAAA;ACvBH,IAAM,YAAA,GAAe,mDAAA;AACrB,IAAM,SAAA,GAAiB4C,IAAA,CAAA,IAAA,CAAQC,EAAA,CAAA,OAAA,EAAQ,EAAG,WAAW,CAAA;AACrD,IAAM,UAAA,GAAkBD,IAAA,CAAA,IAAA,CAAK,SAAA,EAAW,mBAAmB,CAAA;AAqE3D,eAAsB,kBAAA,GAA6C;AACjE,EAAA,IAAI;AACF,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,MAAM,UAAU,UAAA,CAAW,MAAM,UAAA,CAAW,KAAA,IAAS,GAAK,CAAA;AAC1D,IAAA,OAAA,CAAQ,KAAA,IAAQ;AAEhB,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI;AACF,MAAA,QAAA,GAAW,MAAM,MAAM,YAAA,EAAc;AAAA,QACnC,OAAA,EAAS,EAAE,MAAA,EAAQ,kBAAA,EAAmB;AAAA,QACtC,QAAQ,UAAA,CAAW;AAAA,OACpB,CAAA;AAAA,IACH,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,OAAO,CAAA;AAAA,IACtB;AAEA,IAAA,IAAI,CAAC,QAAA,CAAS,EAAA,EAAI,OAAO,IAAA;AAEzB,IAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,IAAA,MAAM,SAAS,IAAA,CAAK,OAAA;AACpB,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,OAAO,KAAA,CAAM,MAAM,GAAG,OAAO,IAAA;AAG7C,IAAA,MAAM,WAAW,EAAE,MAAA,EAAQ,WAAW,IAAA,CAAK,GAAA,IAAO,CAAA;AAElD,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAaA,eAAe,WAAW,IAAA,EAAkC;AAC1D,EAAA,IAAI;AACF,IAAA,MAAS,IAAA,CAAA,KAAA,CAAM,SAAA,EAAW,EAAE,SAAA,EAAW,MAAM,CAAA;AAC7C,IAAA,MAAS,eAAU,UAAA,EAAY,IAAA,CAAK,SAAA,CAAU,IAAI,GAAG,OAAO,CAAA;AAAA,EAC9D,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;;;AC/GA,SAAS,mBAAA,GAA6C;AACpD,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,IAAK,EAAA;AAGpC,EAAA,IAAI,SAAS,QAAA,CAAS,oBAAoB,KAAK,QAAA,CAAS,QAAA,CAAS,kBAAkB,CAAA,EAAG;AAEpF,IAAA,IAAI,CAAC,QAAA,CAAS,QAAA,CAAS,OAAA,CAAQ,GAAA,EAAK,CAAA,EAAG;AAErC,MAAA,IAAI,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA,EAAG,OAAO,MAAA;AACtC,MAAA,IAAI,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA,EAAG,OAAO,MAAA;AACtC,MAAA,IAAI,QAAA,CAAS,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,KAAA;AACrC,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,sBAAA,CAAuB,EAAA,EAAoB,GAAA,EAAa,OAAA,EAAyB;AACxF,EAAA,MAAM,IAAA,GAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA;AAC9B,EAAA,QAAQ,EAAA;AAAI,IACV,KAAK,MAAA;AACH,MAAA,OAAO,eAAe,IAAI,CAAA,CAAA;AAAA,IAC5B,KAAK,MAAA;AACH,MAAA,OAAO,mBAAmB,IAAI,CAAA,CAAA;AAAA,IAChC,KAAK,KAAA;AACH,MAAA,OAAO,cAAc,IAAI,CAAA,CAAA;AAAA,IAC3B,KAAK,KAAA;AAAA,IACL;AACE,MAAA,OAAO,kBAAkB,IAAI,CAAA,CAAA;AAAA;AAEnC;AAMA,eAAsB,qBAAqB,GAAA,EAAsC;AAC/E,EAAA,IAAI,MAAMnB,UAAAA,CAAgBqB,IAAA,CAAA,IAAA,CAAK,KAAK,gBAAgB,CAAC,GAAG,OAAO,MAAA;AAC/D,EAAA,IAAI,MAAMrB,UAAAA,CAAgBqB,IAAA,CAAA,IAAA,CAAK,KAAK,WAAW,CAAC,GAAG,OAAO,KAAA;AAC1D,EAAA,IAAI,MAAMrB,UAAAA,CAAgBqB,IAAA,CAAA,IAAA,CAAK,KAAK,WAAW,CAAC,GAAG,OAAO,MAAA;AAC1D,EAAA,OAAO,KAAA;AACT;AAWA,eAAsB,oBAAoB,GAAA,EAA+B;AACvE,EAAA,IAAI,MAAMrB,UAAAA,CAAgBqB,IAAA,CAAA,IAAA,CAAK,KAAK,qBAAqB,CAAC,GAAG,OAAO,IAAA;AACpE,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAeA,IAAA,CAAA,IAAA,CAAK,GAAA,EAAK,cAAc,CAAA;AAC7C,IAAA,MAAM,GAAA,GAAM,OAAO,MAAM,OAAO,aAAkB,CAAA,EAAG,QAAA,CAAS,SAAS,OAAO,CAAA;AAC9E,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC1B,IAAA,OAAO,IAAI,UAAA,IAAc,IAAA;AAAA,EAC3B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAOO,SAAS,kBACd,EAAA,EACA,GAAA,EACA,SACA,KAAA,EACA,IAAA,GAA8B,EAAC,EACvB;AACR,EAAA,MAAM,IAAA,GAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA;AAG9B,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,aAAA,IAAiB,EAAA,KAAO,SAAS,KAAA,GAAQ,EAAA;AACzD,EAAA,QAAQ,EAAA;AAAI,IACV,KAAK,MAAA;AACH,MAAA,OAAO,KAAA,GAAQ,WAAW,EAAE,CAAA,IAAA,EAAO,IAAI,CAAA,CAAA,GAAK,CAAA,QAAA,EAAW,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AAAA,IACnE,KAAK,MAAA;AACH,MAAA,OAAO,KAAA,GAAQ,CAAA,eAAA,EAAkB,IAAI,CAAA,CAAA,GAAK,YAAY,IAAI,CAAA,CAAA;AAAA,IAC5D,KAAK,KAAA;AACH,MAAA,OAAO,KAAA,GAAQ,CAAA,WAAA,EAAc,IAAI,CAAA,CAAA,GAAK,WAAW,IAAI,CAAA,CAAA;AAAA,IACvD,KAAK,KAAA;AAAA,IACL;AACE,MAAA,OAAO,KAAA,GAAQ,CAAA,uBAAA,EAA0B,IAAI,CAAA,CAAA,GAAK,eAAe,IAAI,CAAA,CAAA;AAAA;AAE3E;AAKA,eAAe,gBAAgB,GAAA,EAA+B;AAC5D,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAeA,IAAA,CAAA,IAAA,CAAK,GAAA,EAAK,cAAc,CAAA;AAC7C,IAAA,MAAM,GAAA,GAAM,OAAO,MAAM,OAAO,aAAkB,CAAA,EAAG,QAAA,CAAS,SAAS,OAAO,CAAA;AAC9E,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC1B,IAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,eAAA,GAAkB,eAAe,CAAC,CAAA;AAAA,EACvD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAOA,eAAe,qBAAqB,EAAA,EAAsC;AACxE,EAAA,IAAI,EAAE,OAAA,CAAQ,KAAA,CAAM,SAAS,OAAA,CAAQ,MAAA,CAAO,QAAQ,OAAO,KAAA;AAC3D,EAAA,MAAM,EAAA,GAAcC,yBAAgB,EAAE,KAAA,EAAO,QAAQ,KAAA,EAAO,MAAA,EAAQ,OAAA,CAAQ,MAAA,EAAQ,CAAA;AACpF,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAChD,SAAAA,KAAY;AAC9B,IAAA,EAAA,CAAG,QAAA,CAASC,OAAM,MAAA,CAAO,CAAA,WAAA,EAAc,EAAE,CAAA,gCAAA,CAAkC,CAAA,EAAG,CAAC,GAAA,KAAQ;AACrF,MAAA,EAAA,CAAG,KAAA,EAAM;AACT,MAAA,MAAM,CAAA,GAAI,GAAA,CAAI,IAAA,EAAK,CAAE,WAAA,EAAY;AACjC,MAAAD,SAAAA,CAAQ,CAAA,KAAM,GAAA,IAAO,CAAA,KAAM,KAAK,CAAA;AAAA,IAClC,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;AAEO,IAAM,aAAA,GAAgB,IAAIuB,OAAAA,CAAQ,QAAQ,CAAA,CAC9C,WAAA,CAAY,uCAAuC,CAAA,CACnD,MAAA,CAAO,SAAA,EAAW,wCAAwC,CAAA,CAC1D,MAAA,CAAO,gBAAA,EAAkB,+CAA+C,CAAA,CACxE,MAAA,CAAO,UAAA,EAAY,4BAA4B,CAAA,CAC/C,MAAA,CAAO,WAAA,EAAa,iEAAiE,CAAA,CACrF,MAAA,CAAO,sBAAA,EAAwB,wEAAwE,CAAA,CACvG,MAAA;AAAA,EACC,OAAO,IAAA,KAMD;AACJ,IAAA,OAAA,CAAQ,IAAItB,MAAAA,CAAM,GAAA,CAAI,CAAA,iBAAA,EAAoB,OAAO,EAAE,CAAC,CAAA;AACpD,IAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,GAAA,CAAI,0BAA0B,CAAC,CAAA;AAEjD,IAAA,MAAM,MAAA,GAAS,MAAM,kBAAA,EAAmB;AAExC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,kEAAkE,CAAC,CAAA;AAC3F,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,MAAMgD,OAAAA,GAAS,MAAM,OAAO,QAAQ,CAAA;AACpC,IAAA,IAAI,CAACA,OAAAA,CAAO,EAAA,CAAG,MAAA,EAAQ,OAAO,CAAA,EAAG;AAC/B,MAAA,OAAA,CAAQ,IAAIhD,MAAAA,CAAM,KAAA,CAAM,QAAG,CAAA,GAAI,CAAA,gCAAA,EAAmC,OAAO,CAAA,EAAA,CAAI,CAAA;AAC7E,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,GAAA,CAAIA,OAAM,MAAA,CAAO,CAAA,kBAAA,EAAqB,OAAO,CAAA,QAAA,EAAM,MAAM,EAAE,CAAC,CAAA;AAEpE,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,GAAA,CAAI,6BAA6B,CAAC,CAAA;AACpD,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,GAAA,GAAM,QAAQ,GAAA,EAAI;AAGxB,IAAA,MAAM,WAAW,mBAAA,EAAoB;AACrC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,IAAU,QAAA,KAAa,IAAA;AAE7C,IAAA,MAAM,KAAsB,IAAA,CAAK,EAAA,KAA0B,QAAA,IAAa,MAAM,qBAAqB,GAAG,CAAA,CAAA;AAEtG,IAAA,IAAI,GAAA;AACJ,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,GAAA,GAAM,sBAAA,CAAuB,EAAA,EAAI,eAAA,EAAiB,MAAM,CAAA;AACxD,MAAA,OAAA,CAAQ,GAAA,CAAIA,OAAM,GAAA,CAAI,CAAA,kCAAA,EAAqC,EAAE,CAAA,EAAA,EAAK,GAAG,EAAE,CAAC,CAAA;AAAA,IAC1E,CAAA,MAAO;AACL,MAAA,MAAM,KAAA,GAAQ,MAAM,eAAA,CAAgB,GAAG,CAAA;AAKvC,MAAA,IAAI,aAAA,GAAgB,KAAA;AACpB,MAAA,IAAI,EAAA,KAAO,MAAA,IAAW,MAAM,mBAAA,CAAoB,GAAG,CAAA,EAAI;AACrD,QAAA,OAAA,CAAQ,GAAA;AAAA,UACNA,OAAM,MAAA,CAAO,iCAAiC,CAAA,GAC5CA,MAAAA,CAAM,IAAI,uEAAuE;AAAA,SACrF;AACA,QAAA,MAAM,UAAU,IAAA,CAAK,GAAA,IAAO,KAAK,aAAA,IAAkB,MAAM,qBAAqB,EAAE,CAAA;AAChF,QAAA,IAAI,CAAC,OAAA,EAAS;AACZ,UAAA,MAAM,OAAA,GAAU,kBAAkB,EAAA,EAAI,eAAA,EAAiB,QAAQ,KAAA,EAAO,EAAE,aAAA,EAAe,IAAA,EAAM,CAAA;AAC7F,UAAA,OAAA,CAAQ,IAAIA,MAAAA,CAAM,GAAA,CAAI,CAAA,4CAAA,EAA+C,OAAO,EAAE,CAAC,CAAA;AAC/E,UAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,GAAA,CAAI,oEAAoE,CAAC,CAAA;AAC3F,UAAA;AAAA,QACF;AACA,QAAA,aAAA,GAAgB,IAAA;AAAA,MAClB;AAEA,MAAA,GAAA,GAAM,kBAAkB,EAAA,EAAI,eAAA,EAAiB,QAAQ,KAAA,EAAO,EAAE,eAAe,CAAA;AAC7E,MAAA,OAAA,CAAQ,GAAA,CAAIA,OAAM,GAAA,CAAI,CAAA,MAAA,EAAS,EAAE,CAAA,EAAA,EAAK,GAAG,EAAE,CAAC,CAAA;AAAA,IAC9C;AAEA,IAAA,IAAI;AACF,MAAAiD,SAAS,GAAA,EAAK,EAAE,GAAA,EAAK,KAAA,EAAO,WAAW,CAAA;AACvC,MAAA,OAAA,CAAQ,IAAIjD,MAAAA,CAAM,KAAA,CAAM,QAAG,CAAA,GAAI,CAAA,0BAAA,EAA6B,MAAM,CAAA,CAAE,CAAA;AAAA,IACtE,CAAA,CAAA,MAAQ;AACN,MAAA,OAAA,CAAQ,MAAMA,MAAAA,CAAM,GAAA,CAAI,CAAA,6BAAA,EAAgC,GAAG,EAAE,CAAC,CAAA;AAC9D,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AACF,CAAA;AClNF,IAAM,eAAA,GAAkB,+BAAA;AAGxB,IAAM,YAAA,GAAe,CAAC,cAAA,EAAgB,UAAA,EAAY,SAAS,qBAAqB,CAAA;AAIhF,IAAM,kBAAA,GAAqB;AAAA,EACzB,uBAAA;AAAA,EACA,6BAAA;AAAA,EACA,qCAAA;AAAA,EACA,mDAAA;AAAA,EACA;AACF,CAAA;AAyCO,IAAM,kBAAA,GAAN,cAAiC,KAAA,CAAM;AAAC,CAAA;AAQxC,SAAS,iBAAiB,IAAA,EAAwC;AACvE,EAAA,MAAM,aAAiC,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,CAAC,GAAG,CAAA,KAAM;AACnE,IAAA,IAAI,CAAC,CAAA,CAAE,aAAA,IAAiB,OAAO,CAAA,CAAE,kBAAkB,QAAA,EAAU;AAC3D,MAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,UAAA,EAAa,CAAC,CAAA,8BAAA,CAAgC,CAAA;AAAA,IAC7E;AACA,IAAA,IAAI,CAAC,YAAA,CAAa,QAAA,CAAS,CAAA,CAAE,MAAM,CAAA,EAAG;AACpC,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,CAAA,UAAA,EAAa,CAAC,CAAA,GAAA,EAAM,CAAA,CAAE,aAAa,CAAA,mBAAA,EAAsB,CAAA,CAAE,MAAM,CAAA,oBAAA,EAAuB,YAAA,CAAa,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,OACjH;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAY,CAAA,CAAE,QAAA,IAAY,CAAA,CAAE,SAAS,MAAA,GAAS,CAAA,GAChD,CAAA,CAAE,QAAA,GACF,KAAK,cAAA,GACH,CAAC,IAAA,CAAK,cAAc,IACpB,EAAC;AACP,IAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,CAAA,UAAA,EAAa,CAAC,CAAA,GAAA,EAAM,CAAA,CAAE,aAAa,CAAA,iEAAA;AAAA,OACrC;AAAA,IACF;AAIA,IAAA,IAAI,CAAA,CAAE,WAAW,cAAA,IAAkB,CAAC,EAAE,aAAA,IAAiB,CAAC,EAAE,gBAAA,EAAkB;AAC1E,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,CAAA,UAAA,EAAa,CAAC,CAAA,GAAA,EAAM,CAAA,CAAE,aAAa,CAAA,+DAAA;AAAA,OACrC;AAAA,IACF;AACA,IAAA,IAAI,EAAE,aAAA,IAAiB,CAAC,mBAAmB,QAAA,CAAS,CAAA,CAAE,aAAa,CAAA,EAAG;AACpE,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,CAAA,UAAA,EAAa,CAAC,CAAA,GAAA,EAAM,CAAA,CAAE,aAAa,CAAA,0BAAA,EAA6B,CAAA,CAAE,aAAa,CAAA,oBAAA,EAAuB,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,OACrI;AAAA,IACF;AACA,IAAA,IAAI,CAAA,CAAE,MAAA,KAAW,UAAA,IAAc,CAAC,EAAE,gBAAA,EAAkB;AAClD,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,CAAA,UAAA,EAAa,CAAC,CAAA,GAAA,EAAM,CAAA,CAAE,aAAa,CAAA,2CAAA;AAAA,OACrC;AAAA,IACF;AAEA,IAAA,MAAMO,IAAAA,GAAwB;AAAA,MAC5B,aAAA,EAAe,EAAE,IAAA,EAAM,CAAA,CAAE,aAAA,EAAc;AAAA,MACvC,QAAA,EAAU,SAAS,GAAA,CAAI,CAAC,OAAO,EAAE,KAAA,EAAO,GAAE,CAAE,CAAA;AAAA,MAC5C,QAAQ,CAAA,CAAE;AAAA,KACZ;AACA,IAAA,IAAI,CAAA,CAAE,aAAA,EAAeA,IAAAA,CAAI,gBAAgB,CAAA,CAAE,aAAA;AAC3C,IAAA,IAAI,CAAA,CAAE,gBAAA,EAAkBA,IAAAA,CAAI,mBAAmB,CAAA,CAAE,gBAAA;AACjD,IAAA,IAAI,CAAA,CAAE,gBAAA,EAAkBA,IAAAA,CAAI,mBAAmB,CAAA,CAAE,gBAAA;AACjD,IAAA,OAAOA,IAAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,eAAA;AAAA,IACZ,KAAA,EAAO,IAAA,CAAK,EAAA,IAAM,CAAA,yBAAA,EAA4B,YAAY,CAAA,CAAA;AAAA,IAC1D,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,WAAW,IAAA,CAAK,SAAA,IAAA,iBAAa,IAAI,IAAA,IAAO,WAAA,EAAY;AAAA,IACpD,OAAA,EAAS,CAAA;AAAA,IACT;AAAA,GACF;AACF;AAMA,eAAe,mBAAmB,QAAA,EAAgD;AAChF,EAAA,MAAM,IAAA,GAAO,MAAM,YAAA,CAAsB,QAAQ,CAAA;AACjD,EAAA,MAAM,MAAM,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,GAC1B,OACC,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,IAAY,MAAM,OAAA,CAAS,IAAA,CAAkC,UAAU,CAAA,GAC3F,KAAmC,UAAA,GACpC,IAAA;AACR,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,GAAG,QAAQ,CAAA,6EAAA;AAAA,KACb;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,gBAAA,CAAiB,OAAe,QAAA,EAAoD;AAC3F,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,EAC3B,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,IAAI,mBAAmB,CAAA,mCAAA,EAAsC,KAAA,CAAM,MAAM,CAAA,EAAG,EAAE,CAAC,CAAA,MAAA,CAAG,CAAA;AAAA,EAC1F;AACA,EAAA,OAAO,CAAC,GAAG,QAAA,EAAU,MAA2B,CAAA;AAClD;AAEO,IAAM,UAAA,GAAa,IAAIe,OAAAA,CAAQ,KAAK,CAAA,CACxC,WAAA,CAAY,0EAA0E,CAAA,CACtF,MAAA,CAAO,eAAA,EAAiB,kFAAkF,CAAA,CAC1G,MAAA;AAAA,EACC,oBAAA;AAAA,EACA,CAAA,wJAAA,CAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA,CAAO,mBAAmB,0FAA0F,CAAA,CACpH,OAAO,iBAAA,EAAmB,iBAAA,EAAmB,UAAU,CAAA,CACvD,MAAA,CAAO,mBAAA,EAAqB,oEAAoE,CAAA,CAChG,MAAA,CAAO,YAAA,EAAc,+DAA+D,CAAA,CACpF,MAAA,CAAO,gBAAgB,gDAAgD,CAAA,CACvE,MAAA,CAAO,OAAO,IAAA,KAQT;AACJ,EAAA,IAAI;AACF,IAAA,MAAM,aAAkC,EAAC;AACzC,IAAA,IAAI,KAAK,IAAA,EAAM;AACb,MAAA,MAAM,QAAA,GAAgB4B,IAAA,CAAA,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AACvC,MAAA,IAAI,CAAE,MAAMzB,UAAAA,CAAW,QAAQ,CAAA,EAAI;AACjC,QAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAMzB,MAAAA,CAAM,GAAA,CAAI,8BAA8B,QAAQ;AAAA,CAAI,CAAC,CAAA;AAC1E,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AACA,MAAA,UAAA,CAAW,IAAA,CAAK,GAAI,MAAM,kBAAA,CAAmB,QAAQ,CAAE,CAAA;AAAA,IACzD;AACA,IAAA,UAAA,CAAW,IAAA,CAAK,GAAG,IAAA,CAAK,SAAS,CAAA;AAEjC,IAAA,MAAM,MAAM,gBAAA,CAAiB;AAAA,MAC3B,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,gBAAgB,IAAA,CAAK,OAAA;AAAA,MACrB,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,IAAI,IAAA,CAAK,EAAA;AAAA,MACT;AAAA,KACD,CAAA;AAED,IAAA,MAAMmD,KAAAA,GAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,MAAM,CAAC,CAAA;AACxC,IAAA,IAAI,KAAK,GAAA,EAAK;AACZ,MAAA,MAAM,cAAmBD,IAAA,CAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,EAAGC,QAAO,IAAI,CAAA;AACvD,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,QACbnD,MAAAA,CAAM,KAAA,CAAM,QAAG,CAAA,GAAI,CAAA,yBAAA,EAA4B,GAAA,CAAI,UAAA,CAAW,MAAM,CAAA,kBAAA,EAA0BkD,IAAA,CAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAC;AAAA;AAAA,OACjH;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAMC,KAAAA,GAAO,IAAI,CAAA;AAAA,IAClC;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,eAAe,kBAAA,EAAoB;AACrC,MAAA,OAAA,CAAQ,OAAO,KAAA,CAAMnD,MAAAA,CAAM,GAAA,CAAI,CAAA,sBAAA,EAAyB,IAAI,OAAO;AAAA,CAAI,CAAC,CAAA;AACxE,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AACA,IAAA,MAAM,GAAA;AAAA,EACR;AACF,CAAC,CAAA;;;ACpMI,SAAS,kBAAkB,IAAA,EAAsB;AACtD,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,EAAE,CAAA;AAC/B,EAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,CAAA,EAAG,KAAA,EAAA,EAAS;AACtC,IAAA,IAAI,CAAA,GAAI,UAAA;AACR,IAAA,MAAM,CAAA,GAAI,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AAC1B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,QAAQ,CAAA,EAAA,EAAK;AACjC,MAAA,CAAA,IAAK,CAAA,CAAE,WAAW,CAAC,CAAA;AACnB,MAAA,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,CAAA,EAAG,QAAU,CAAA;AAAA,IAC7B;AACA,IAAA,CAAA,MAAO,CAAA;AACP,IAAA,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA,GAAK,CAAA,KAAM,EAAA,GAAM,GAAA;AAChC,IAAA,KAAA,CAAM,KAAA,GAAQ,CAAA,GAAI,CAAC,CAAA,GAAK,MAAM,EAAA,GAAM,GAAA;AACpC,IAAA,KAAA,CAAM,KAAA,GAAQ,CAAA,GAAI,CAAC,CAAA,GAAK,MAAM,CAAA,GAAK,GAAA;AACnC,IAAA,KAAA,CAAM,KAAA,GAAQ,CAAA,GAAI,CAAC,CAAA,GAAI,CAAA,GAAI,GAAA;AAAA,EAC7B;AACA,EAAA,KAAA,CAAM,CAAC,CAAA,GAAK,KAAA,CAAM,CAAC,IAAI,EAAA,GAAQ,GAAA;AAC/B,EAAA,KAAA,CAAM,CAAC,CAAA,GAAK,KAAA,CAAM,CAAC,IAAI,EAAA,GAAQ,GAAA;AAC/B,EAAA,MAAM,MAAM,KAAA,CAAM,IAAA,CAAK,KAAA,EAAO,CAAC,MAAM,CAAA,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,SAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,KAAK,EAAE,CAAA;AAC7E,EAAA,OAAO,CAAA,EAAG,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA,EAAI,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA,EAAI,GAAA,CAAI,KAAA,CAAM,EAAA,EAAI,EAAE,CAAC,CAAA,CAAA,EAAI,GAAA,CAAI,KAAA,CAAM,EAAA,EAAI,EAAE,CAAC,CAAA,CAAA,EAAI,GAAA,CAAI,KAAA,CAAM,EAAE,CAAC,CAAA,CAAA;AAC1G;AAGA,SAAS,cAAA,CAAe,MAAA,EAAgB,QAAA,EAAwB,IAAA,EAAqC;AACnG,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,SAAS,QAAA,IAAY,EAAA;AAAA,IACrB,SAAS,SAAA,IAAa,EAAA;AAAA,IACtB,SAAS,eAAA,IAAmB,EAAA;AAAA,IAC5B,GAAG,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,GAAG,CAAA,CAAE,OAAO,CAAA,CAAA,EAAI,CAAA,CAAE,OAAO,CAAA,CAAA,EAAI,EAAE,WAAW,CAAA,CAAA,EAAI,CAAA,CAAE,OAAO,CAAA,CAAA,EAAI,CAAA,CAAE,KAAK,CAAA,CAAA,EAAI,CAAA,CAAE,YAAA,IAAgB,EAAE,CAAA,CAAE;AAAA,GACjH,CAAE,KAAK,IAAI,CAAA;AACb;AAEO,SAAS,oBAAoB,QAAA,EAA+C;AACjF,EAAA,MAAM,OAA8B,EAAC;AACrC,EAAA,KAAA,MAAW,OAAA,IAAW,SAAS,QAAA,EAAU;AACvC,IAAA,KAAA,MAAW,GAAA,IAAO,QAAQ,YAAA,EAAc;AACtC,MAAA,IAAA,CAAK,IAAA,CAAK;AAAA,QACR,SAAS,OAAA,CAAQ,IAAA;AAAA,QACjB,SAAS,GAAA,CAAI,OAAA;AAAA,QACb,OAAA,EAAS,GAAA,CAAI,eAAA,IAAmB,GAAA,CAAI,WAAA;AAAA,QACpC,aAAa,GAAA,CAAI,WAAA;AAAA,QACjB,OAAO,GAAA,CAAI,KAAA;AAAA,QACX,cAAc,GAAA,CAAI;AAAA,OACnB,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,YAAY,QAAA,EAAiD;AAC3E,EAAA,MAAM,YAAA,GAAe,oBAAoB,QAAQ,CAAA;AACjD,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,WAAA;AAAA,IACX,WAAA,EAAa,KAAA;AAAA,IACb,YAAA,EAAc,YAAY,iBAAA,CAAkB,cAAA,CAAe,aAAa,QAAA,EAAU,YAAY,CAAC,CAAC,CAAA,CAAA;AAAA,IAChG,OAAA,EAAS,CAAA;AAAA,IACT,QAAA,EAAU;AAAA,MACR,WAAW,QAAA,CAAS,SAAA;AAAA,MACpB,KAAA,EAAO;AAAA,QACL;AAAA,UACE,MAAA,EAAQ,UAAA;AAAA,UACR,IAAA,EAAM,eAAA;AAAA,UACN,SAAS,QAAA,CAAS;AAAA;AACpB,OACF;AAAA,MACA,SAAA,EAAW;AAAA,QACT,IAAA,EAAM,aAAA;AAAA,QACN,MAAM,QAAA,CAAS;AAAA;AACjB,KACF;AAAA,IACA,UAAA,EAAY,YAAA,CAAa,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,MACrC,IAAA,EAAM,SAAA;AAAA,MACN,MAAM,GAAA,CAAI,OAAA;AAAA,MACV,SAAS,GAAA,CAAI,OAAA;AAAA,MACb,UAAA,EAAY;AAAA,QACV,EAAE,IAAA,EAAM,kBAAA,EAAoB,KAAA,EAAO,IAAI,OAAA,EAAQ;AAAA,QAC/C,EAAE,IAAA,EAAM,sBAAA,EAAwB,KAAA,EAAO,IAAI,WAAA,EAAY;AAAA,QACvD,EAAE,IAAA,EAAM,gBAAA,EAAkB,KAAA,EAAO,IAAI,KAAA,EAAM;AAAA,QAC3C,EAAE,MAAM,uBAAA,EAAyB,KAAA,EAAO,OAAO,GAAA,CAAI,YAAA,IAAgB,SAAS,CAAA;AAAE;AAChF,KACF,CAAE;AAAA,GACJ;AACF;AAEO,SAAS,OAAO,QAAA,EAAiD;AACtE,EAAA,MAAM,YAAA,GAAe,oBAAoB,QAAQ,CAAA;AACjD,EAAA,OAAO;AAAA,IACL,WAAA,EAAa,UAAA;AAAA,IACb,WAAA,EAAa,SAAA;AAAA,IACb,MAAA,EAAQ,kBAAA;AAAA,IACR,IAAA,EAAM,CAAA,EAAG,QAAA,CAAS,QAAQ,CAAA,KAAA,CAAA;AAAA,IAC1B,iBAAA,EAAmB,CAAA,0BAAA,EAA6B,QAAA,CAAS,QAAQ,CAAA,CAAA,EAAI,iBAAA,CAAkB,cAAA,CAAe,MAAA,EAAQ,QAAA,EAAU,YAAY,CAAC,CAAC,CAAA,CAAA;AAAA,IACtI,YAAA,EAAc;AAAA,MACZ,SAAS,QAAA,CAAS,SAAA;AAAA,MAClB,QAAA,EAAU,CAAC,CAAA,oBAAA,EAAuB,QAAA,CAAS,eAAe,CAAA,CAAE;AAAA,KAC9D;AAAA,IACA,QAAA,EAAU,YAAA,CAAa,GAAA,CAAI,CAAC,KAAK,CAAA,MAAO;AAAA,MACtC,MAAM,GAAA,CAAI,OAAA;AAAA,MACV,MAAA,EAAQ,CAAA,gBAAA,EAAmB,CAAA,GAAI,CAAC,CAAA,CAAA;AAAA,MAChC,aAAa,GAAA,CAAI,OAAA;AAAA,MACjB,gBAAA,EAAkB,aAAA;AAAA,MAClB,aAAA,EAAe,KAAA;AAAA,MACf,YAAA,EAAc;AAAA,QACZ;AAAA,UACE,iBAAA,EAAmB,iBAAA;AAAA,UACnB,aAAA,EAAe,MAAA;AAAA,UACf,gBAAA,EAAkB,CAAA,QAAA,EAAW,kBAAA,CAAmB,GAAA,CAAI,OAAO,CAAC,CAAA,CAAA,EAAI,kBAAA,CAAmB,GAAA,CAAI,OAAO,CAAC,CAAA;AAAA;AACjG,OACF;AAAA,MACA,WAAA,EAAa;AAAA,QACX;AAAA,UACE,cAAA,EAAgB,OAAA;AAAA,UAChB,SAAA,EAAW,qBAAA;AAAA,UACX,gBAAgB,QAAA,CAAS,SAAA;AAAA,UACzB,OAAA,EAAS,CAAA,QAAA,EAAW,GAAA,CAAI,OAAO,CAAA,QAAA,EAAW,IAAI,KAAK,CAAA,eAAA,EAAkB,GAAA,CAAI,YAAA,IAAgB,SAAS,CAAA;AAAA;AACpG;AACF,KACF,CAAE;AAAA,GACJ;AACF;AAEA,SAAS,qBAAqB,QAAA,EAAoD;AAChF,EAAA,MAAM,GAAA,uBAAU,GAAA,EAA2B;AAC3C,EAAA,KAAA,MAAW,OAAA,IAAW,SAAS,QAAA,EAAU;AACvC,IAAA,KAAA,MAAW,GAAA,IAAO,QAAQ,YAAA,EAAc;AACtC,MAAA,GAAA,CAAI,GAAA,CAAI,GAAG,OAAA,CAAQ,IAAI,IAAI,GAAA,CAAI,OAAO,IAAI,GAAG,CAAA;AAAA,IAC/C;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,eAAA,CAAgB,MAAoB,OAAA,EAA+B;AACjF,EAAA,MAAM,OAAA,GAAU,qBAAqB,IAAI,CAAA;AACzC,EAAA,MAAM,UAAA,GAAa,qBAAqB,OAAO,CAAA;AAE/C,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,MAAM,UAAoB,EAAC;AAC3B,EAAA,MAAM,UAAoB,EAAC;AAE3B,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,GAAG,CAAA,IAAK,UAAA,CAAW,SAAQ,EAAG;AAC7C,IAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,EAAG;AACrB,MAAA,KAAA,CAAM,IAAA,CAAK,GAAG,GAAG,CAAA,GAAA,EAAM,IAAI,eAAA,IAAmB,GAAA,CAAI,WAAW,CAAA,CAAE,CAAA;AAC/D,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AAC5B,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,eAAA,IAAmB,IAAA,CAAK,WAAA;AACjD,IAAA,MAAM,UAAA,GAAa,GAAA,CAAI,eAAA,IAAmB,GAAA,CAAI,WAAA;AAC9C,IAAA,IAAI,WAAA,KAAgB,UAAA,IAAc,IAAA,CAAK,YAAA,KAAiB,IAAI,YAAA,EAAc;AACxE,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,WAAW,CAAA,IAAA,EAAO,UAAU,CAAA,eAAA,EAAkB,IAAA,CAAK,gBAAgB,SAAS,CAAA,IAAA,EAAO,GAAA,CAAI,YAAA,IAAgB,SAAS,CAAA,CAAA,CAAG,CAAA;AAAA,IAC5I;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,GAAG,CAAA,IAAK,OAAA,CAAQ,SAAQ,EAAG;AAC1C,IAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,GAAG,CAAA,EAAG;AACxB,MAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,GAAG,CAAA,GAAA,EAAM,IAAI,eAAA,IAAmB,GAAA,CAAI,WAAW,CAAA,CAAE,CAAA;AAAA,IACnE;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,qBAAA;AAAA,IACA,qBAAA;AAAA,IACA,CAAA,UAAA,EAAa,KAAK,SAAS,CAAA,CAAA;AAAA,IAC3B,CAAA,UAAA,EAAa,QAAQ,SAAS,CAAA,CAAA;AAAA,IAC9B,CAAA,mBAAA,EAAA,CAAuB,QAAQ,KAAA,CAAM,KAAA,GAAQ,KAAK,KAAA,CAAM,KAAA,EAAO,OAAA,CAAQ,CAAC,CAAC,CAAA,OAAA,CAAA;AAAA,IACzE,EAAA;AAAA,IACA,CAAA,oBAAA,EAAuB,MAAM,MAAM,CAAA,CAAA,CAAA;AAAA,IACnC,GAAG,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,IAAA,EAAO,CAAC,CAAA,CAAE,CAAA;AAAA,IAC9B,EAAA;AAAA,IACA,CAAA,sBAAA,EAAyB,QAAQ,MAAM,CAAA,CAAA,CAAA;AAAA,IACvC,GAAG,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,IAAA,EAAO,CAAC,CAAA,CAAE,CAAA;AAAA,IAChC,EAAA;AAAA,IACA,CAAA,sBAAA,EAAyB,QAAQ,MAAM,CAAA,CAAA,CAAA;AAAA,IACvC,GAAG,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,IAAA,EAAO,CAAC,CAAA,CAAE;AAAA,GAClC;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAEA,eAAe,mBAAmB,QAAA,EAAyC;AACzE,EAAA,MAAM,YAAA,GAAoBoD,aAAQ,QAAQ,CAAA;AAC1C,EAAA,IAAI,CAAE,MAAM3B,UAAAA,CAAW,YAAY,CAAA,EAAI;AACrC,IAAA,OAAA,CAAQ,MAAMzB,MAAAA,CAAM,GAAA,CAAI,CAAA,oBAAA,EAAuB,YAAY,EAAE,CAAC,CAAA;AAC9D,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACA,EAAA,OAAO,aAA2B,YAAY,CAAA;AAChD;AAEA,IAAM,aAAA,GAAgB,IAAIsB,OAAAA,CAAQ,QAAQ,CAAA,CACvC,YAAY,8BAA8B,CAAA,CAC1C,MAAA,CAAO,aAAA,EAAe,qBAAA,EAAuB,4BAA4B,EACzE,MAAA,CAAO,cAAA,EAAgB,kBAAkB,CAAA,CACzC,MAAA,CAAO,mBAAA,EAAqB,gCAAgC,WAAW,CAAA,CACvE,MAAA,CAAO,OAAO,IAAA,KAAuD;AACpE,EAAA,MAAM,QAAA,GAAW,MAAM,kBAAA,CAAmB,IAAA,CAAK,EAAE,CAAA;AACjD,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,WAAA,EAAY;AAEvC,EAAA,IAAI,MAAA,KAAW,WAAA,IAAe,MAAA,KAAW,MAAA,EAAQ;AAC/C,IAAA,OAAA,CAAQ,KAAA,CAAMtB,MAAAA,CAAM,GAAA,CAAI,6CAA6C,CAAC,CAAA;AACtE,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,OAAO,MAAA,KAAW,WAAA,GAAc,YAAY,QAAQ,CAAA,GAAI,OAAO,QAAQ,CAAA;AAC7E,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,MAAM,CAAC,CAAA;AAEzC,EAAA,IAAI,KAAK,GAAA,EAAK;AACZ,IAAA,MAAM,aAAA,CAAmBoD,IAAA,CAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,GAAG,IAAI,CAAA;AAChD,IAAA,OAAA,CAAQ,GAAA,CAAIpD,OAAM,KAAA,CAAM,QAAG,IAAI,CAAA,iBAAA,EAAoB,IAAA,CAAK,GAAG,CAAA,CAAE,CAAA;AAAA,EAC/D,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAAA,EAClB;AACF,CAAC,CAAA;AAEH,IAAM,YAAA,GAAe,IAAIsB,OAAAA,CAAQ,OAAO,EACrC,WAAA,CAAY,4CAA4C,CAAA,CACxD,cAAA,CAAe,eAAA,EAAiB,6BAA6B,EAC7D,cAAA,CAAe,aAAA,EAAe,4BAA4B,CAAA,CAC1D,MAAA,CAAO,gBAAgB,sBAAsB,CAAA,CAC7C,MAAA,CAAO,OAAO,IAAA,KAAqD;AAClE,EAAA,MAAM,IAAA,GAAO,MAAM,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAA;AAC/C,EAAA,MAAM,OAAA,GAAU,MAAM,kBAAA,CAAmB,IAAA,CAAK,EAAE,CAAA;AAChD,EAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,IAAA,EAAM,OAAO,CAAA;AAE5C,EAAA,IAAI,KAAK,GAAA,EAAK;AACZ,IAAA,MAAM,aAAA,CAAmB8B,IAAA,CAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,GAAG,MAAM,CAAA;AAClD,IAAA,OAAA,CAAQ,GAAA,CAAIpD,OAAM,KAAA,CAAM,QAAG,IAAI,CAAA,8BAAA,EAAiC,IAAA,CAAK,GAAG,CAAA,CAAE,CAAA;AAAA,EAC5E,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AAAA,EACpB;AACF,CAAC,CAAA;AAEI,IAAM,WAAA,GAAc,IAAIsB,OAAAA,CAAQ,MAAM,EAC1C,WAAA,CAAY,iEAAiE,CAAA,CAC7E,UAAA,CAAW,aAAa,CAAA,CACxB,UAAA,CAAW,YAAY,CAAA,CACvB,WAAW,UAAU,CAAA;;;ACnNjB,IAAM,cAAA,uBAAqB,GAAA,CAAI;AAAA,EACpC,OAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA;AAAA,EAEA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAC;AAEM,SAAS,YAAA,GAAwB;AACtC,EAAA,MAAM,OAAA,GAAU,IAAIA,OAAAA,EAAQ;AAC5B,EAAA,OAAA,CACG,IAAA,CAAK,IAAI,CAAA,CACT,WAAA;AAAA,IACC;AAAA,GAEF,CACC,OAAA,CAAQ,OAAA,EAAS,WAAA,EAAa,2BAA2B,CAAA,CACzD,wBAAA,CAAyB,IAAI,CAAA,CAC7B,WAAA,CAAY,OAAA,EAAS,MAAM;AAG1B,IAAA,MAAM,MAAM,oBAAA,EAAqB;AACjC,IAAA,MAAM,YACJ,GAAA,KAAQ,IAAA,GACJ,gDAAA,GACA,GAAA,KAAQ,iBACN,gFAAA,GACA,EAAA;AACR,IAAA,OACE;AAAA,MAAA,EAAW,GAAG,CAAA,uCAAA,EAA0C,GAAG,CAAA,0BAAA,EACtD,GAAG,eAAe,GAAG,CAAA;AAAA,SAAA,EACd,GAAG,CAAA,YAAA,EAAe,GAAG,CAAA,sCAAA,EAAyC,GAAG,CAAA;AAAA,EAC1E,SAAS,CAAA,+BAAA,CAAA;AAAA,EAEhB,CAAC,CAAA;AAIH,EAAA,aAAA,CAAc,OAAO,CAAA;AACrB,EAAA,cAAA,CAAe,OAAO,CAAA;AACtB,EAAA,WAAA,CAAY,OAAO,CAAA;AACnB,EAAA,aAAA,CAAc,OAAO,CAAA;AACrB,EAAA,YAAA,CAAa,OAAO,CAAA;AACpB,EAAA,YAAA,CAAa,OAAO,CAAA;AACpB,EAAA,YAAA,CAAa,OAAO,CAAA;AACpB,EAAA,gBAAA,CAAiB,OAAO,CAAA;AACxB,EAAA,cAAA,CAAe,OAAO,CAAA;AACtB,EAAA,gBAAA,CAAiB,OAAO,CAAA;AACxB,EAAA,aAAA,CAAc,OAAO,CAAA;AACrB,EAAA,eAAA,CAAgB,OAAO,CAAA;AACvB,EAAA,aAAA,CAAc,OAAO,CAAA;AACrB,EAAA,iBAAA,CAAkB,OAAO,CAAA;AACzB,EAAA,aAAA,CAAc,OAAO,CAAA;AACrB,EAAA,aAAA,CAAc,OAAO,CAAA;AACrB,EAAA,aAAA,CAAc,OAAO,CAAA;AACrB,EAAA,WAAA,CAAY,OAAO,CAAA;AACnB,EAAA,cAAA,CAAe,OAAO,CAAA;AACtB,EAAA,aAAA,CAAc,OAAO,CAAA;AACrB,EAAA,cAAA,CAAe,OAAO,CAAA;AACtB,EAAA,eAAA,CAAgB,OAAO,CAAA;AACvB,EAAA,WAAA,CAAY,OAAO,CAAA;AACnB,EAAA,cAAA,CAAe,OAAO,CAAA;AACtB,EAAA,cAAA,CAAe,OAAO,CAAA;AAItB,EAAA,OAAA,CAAQ,WAAW,WAAW,CAAA;AAC9B,EAAA,OAAA,CAAQ,WAAW,WAAW,CAAA;AAC9B,EAAA,OAAA,CAAQ,WAAW,UAAU,CAAA;AAC7B,EAAA,OAAA,CAAQ,WAAW,eAAe,CAAA;AAClC,EAAA,OAAA,CAAQ,WAAW,aAAa,CAAA;AAChC,EAAA,OAAA,CAAQ,WAAW,YAAY,CAAA;AAC/B,EAAA,OAAA,CAAQ,WAAW,aAAa,CAAA;AAChC,EAAA,OAAA,CAAQ,WAAW,UAAU,CAAA;AAC7B,EAAA,OAAA,CAAQ,WAAW,WAAW,CAAA;AAC9B,EAAA,OAAA,CAAQ,WAAW,aAAa,CAAA;AAChC,EAAA,OAAA,CAAQ,WAAW,WAAW,CAAA;AAE9B,EAAA,OAAO,OAAA;AACT;AAeA,IAAM,WAAA,uBAAkB,GAAA,CAAI;AAAA,EAC1B,IAAA;AAAA,EACA,OAAA;AAAA,EACA,gBAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAC,CAAA;AAQD,IAAM,gBAAA,uBAAuB,GAAA,CAAI;AAAA,EAC/B,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,SAAS,iBAAiB,IAAA,EAAyB;AACjD,EAAA,OAAO,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,gBAAA,CAAiB,GAAA,CAAI,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAC,CAAA;AAC/D;AAEO,SAAS,QAAA,CAAS,MAAgB,GAAA,EAAuB;AAC9D,EAAA,MAAM,IAAA,GAAO,CAAC,GAAG,IAAI,CAAA;AACrB,EAAA,MAAM,kBAAA,GAAqB,oBAAoB,IAAI,CAAA;AAKnD,EAAA,IAAI,uBAAuB,EAAA,EAAI;AAC7B,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,IAAK,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA,EAAG;AAChF,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,CAAC,gBAAA,CAAiB,IAAI,IAAI,OAAA,GAAU,MAAA,EAAQ,GAAG,IAAI,CAAA;AAAA,EAC5D;AAEA,EAAA,MAAM,KAAA,GAAQ,KAAK,kBAAkB,CAAA;AAIrC,EAAA,IAAI,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA,EAAG;AAC7B,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,IAAI,CAAA;AACrB,IAAA,IAAA,CAAK,MAAA,CAAO,oBAAoB,CAAC,CAAA;AACjC,IAAA,OAAO,CAAC,KAAA,EAAO,GAAG,IAAI,CAAA;AAAA,EACxB;AAEA,EAAA,MAAM,oBAAoB,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA,IAAK,KAAA,CAAM,SAAS,GAAG,CAAA;AAChE,EAAA,IAAI,iBAAA,EAAmB,OAAO,CAAC,KAAA,EAAO,GAAG,IAAI,CAAA;AAG7C,EAAA,IAAO+B,GAAA,CAAA,UAAA,CAAgBC,IAAA,CAAA,OAAA,CAAQ,GAAA,EAAK,KAAK,CAAC,CAAA,EAAG;AAC3C,IAAA,OAAO,CAAC,gBAAA,CAAiB,IAAI,IAAI,OAAA,GAAU,MAAA,EAAQ,GAAG,IAAI,CAAA;AAAA,EAC5D;AAGA,EAAA,MAAM,KAAA,GAAQ,eAAe,KAAK,CAAA;AAClC,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,MAAM,IAAI,SAAS,CAAA,KAAA,EAAQ,KAAK,qBAAqB,KAAK,CAAA,EAAA,CAAA,EAAM,SAAS,WAAW,CAAA;AAAA,EACtF;AAGA,EAAA,OAAO,CAAC,KAAA,EAAO,GAAG,IAAI,CAAA;AACxB;AAGA,IAAM,cAAA,GAAyC;AAAA,EAC7C,MAAA,EAAQ,mBAAA;AAAA,EACR,MAAA,EAAQ;AACV,CAAA;AAGA,SAAS,oBAAoB,IAAA,EAAwB;AACnD,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,MAAM,CAAA,GAAI,KAAK,CAAC,CAAA;AAChB,IAAA,IAAI,CAAA,CAAE,UAAA,CAAW,GAAG,CAAA,EAAG;AAErB,MAAA,IAAI,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,EAAA;AACxB,MAAA;AAAA,IACF;AACA,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAO,EAAA;AACT;AAEA,eAAsB,IAAA,CAAK,IAAA,GAAO,OAAA,CAAQ,IAAA,EAAqB;AAC7D,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAGxB,EAAA,IAAI,QAAQ,GAAA,CAAI,QAAA,IAAY,IAAI,QAAA,CAAS,YAAY,GAAG,YAAA,EAAa;AAGrE,EAAA,MAAM,GAAA,GAAM,QAAQ,GAAG,CAAA;AAEvB,EAAA,MAAM,UAAU,YAAA,EAAa;AAC7B,EAAA,OAAA,CAAQ,YAAA,CAAa,CAAC,GAAA,KAAQ;AAC5B,IAAA,MAAM,GAAA;AAAA,EACR,CAAC,CAAA;AAED,EAAA,OAAA,CAAQ,eAAA,CAAgB;AAAA,IACtB,UAAU,CAAC,GAAA,KAAQ,OAAA,CAAQ,MAAA,CAAO,MAAM,GAAG,CAAA;AAAA,IAC3C,UAAU,CAAC,GAAA,KAAQ,OAAA,CAAQ,MAAA,CAAO,MAAM,GAAG;AAAA,GAC5C,CAAA;AAED,EAAA,IAAI;AAGF,IAAA,MAAM,UAAA,GAAa,QAAA,CAAS,GAAA,EAAK,GAAG,CAAA;AACpC,IAAA,MAAM,QAAQ,UAAA,CAAW,UAAA,EAAY,EAAE,IAAA,EAAM,QAAQ,CAAA;AAAA,EACvD,SAAS,GAAA,EAAK;AACZ,IAAA,WAAA,CAAY,GAAG,CAAA;AAAA,EACjB;AACF;AAEA,SAAS,QAAQ,GAAA,EAAuB;AACtC,EAAA,MAAM,CAAA,GAAI,IAAI,SAAA,CAAU,CAAC,MAAM,CAAA,KAAM,IAAA,IAAQ,MAAM,OAAO,CAAA;AAC1D,EAAA,IAAI,CAAA,IAAK,CAAA,IAAK,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,EAAG,OAAYA,IAAA,CAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,GAAI,CAAC,CAAC,CAAA;AACxD,EAAA,MAAM,EAAA,GAAK,IAAI,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,UAAA,CAAW,QAAQ,CAAC,CAAA;AACjD,EAAA,IAAI,IAAI,OAAYA,IAAA,CAAA,OAAA,CAAQ,GAAG,KAAA,CAAM,QAAA,CAAS,MAAM,CAAC,CAAA;AACrD,EAAA,OAAO,QAAQ,GAAA,EAAI;AACrB;AAEA,SAAS,YAAY,GAAA,EAAqB;AACxC,EAAA,IAAI,eAAe,cAAA,EAAgB;AAEjC,IAAA,IAAI,GAAA,CAAI,IAAA,KAAS,yBAAA,IAA6B,GAAA,CAAI,SAAS,gBAAA,EAAkB;AAC3E,MAAA,OAAA,CAAQ,IAAA,CAAK,SAAS,EAAE,CAAA;AAAA,IAC1B;AACA,IAAA,IAAI,IAAI,IAAA,KAAS,mBAAA,EAAqB,OAAA,CAAQ,IAAA,CAAK,SAAS,EAAE,CAAA;AAE9D,IAAA,OAAA,CAAQ,IAAA,CAAK,SAAS,WAAW,CAAA;AAAA,EACnC;AACA,EAAA,IAAI,eAAe,QAAA,EAAU;AAC3B,IAAA,IAAA,CAAK,EAAE,GAAA,CAAI,CAAA,OAAA,EAAU,GAAA,CAAI,OAAO,EAAE,CAAC,CAAA;AACnC,IAAA,OAAA,CAAQ,IAAA,CAAK,IAAI,IAAI,CAAA;AAAA,EACvB;AACA,EAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC/D,EAAA,MAAM,WAAA,GAAc,KAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAC1D,EAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,OAAA,EAAU,OAAO,EAAE,CAAC,CAAA;AAC/B,EAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,OAAA,EAAU,WAAW,gFAA2E,CAAC,CAAA;AAC5G,EAAA,OAAA,CAAQ,IAAA,CAAK,SAAS,KAAK,CAAA;AAC7B;AAQA,SAAS,OAAA,GAAmB;AAC1B,EAAA,IAAI;AACF,IAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,CAAK,CAAC,GAAG,OAAO,KAAA;AAC7B,IAAA,OAAO,YAAA,CAAa,QAAQ,IAAA,CAAK,CAAC,CAAC,CAAA,KAAM,aAAA,CAAc,YAAY,GAAG,CAAA;AAAA,EACxE,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEA,IAAI,SAAQ,EAAG;AACb,EAAA,KAAK,IAAA,EAAK;AACZ","file":"cli.js","sourcesContent":["import * as crypto from 'node:crypto';\nimport { canonicalize } from './hash.js';\nimport { VERSION } from '../version.js';\nimport type { Toolchain, VgGraph } from '../schema.js';\n\n/**\n * `vg attest` — a signed, reproducible attestation over the code graph.\n *\n * This is the moat made load-bearing: a consumer can cryptographically verify,\n * offline, that a graph was produced by a named toolchain over a named commit and\n * has not changed since. We sign an in-toto Statement wrapped in a DSSE envelope\n * with Ed25519 (`node:crypto`, zero dependencies) — interoperable with\n * `cosign verify-blob-attestation`. Ed25519 signatures are deterministic\n * (RFC 8032), so the same graph + key produce a byte-identical envelope.\n *\n * The subject digest excludes the graph's volatile `generatedAt`, so it is\n * reproducible across rebuilds of identical content — which is exactly what makes\n * the attestation verifiable rather than a timestamped snapshot.\n */\n\nexport const DSSE_PAYLOAD_TYPE = 'application/vnd.in-toto+json';\nexport const IN_TOTO_STATEMENT_TYPE = 'https://in-toto.io/Statement/v1';\nexport const VG_PREDICATE_TYPE = 'https://vibgrate.com/attestation/code-graph/v1';\n\nexport interface CommitInfo {\n sha?: string;\n shortSha?: string;\n branch?: string;\n dirty?: boolean; // uncommitted changes vs sha — never verified-clean when true\n}\n\nexport interface AttestPredicate {\n tool: { name: 'vg'; version: string };\n toolchain?: Toolchain;\n corpusHash: string;\n graphDigest: string; // sha256 of the canonical graph (generatedAt excluded)\n counts: VgGraph['meta']['counts'];\n commit?: CommitInfo;\n sbomDigest?: string; // sha256 of an accompanying SBOM, if attested together\n timestamp?: string; // optional, opt-in (omitted by default for determinism)\n}\n\nexport interface InTotoStatement {\n _type: string;\n subject: { name: string; digest: { sha256: string } }[];\n predicateType: string;\n predicate: AttestPredicate;\n}\n\nexport interface DsseSignature {\n keyid: string;\n sig: string; // base64\n publicKey?: string; // PEM, embedded so the envelope self-verifies for integrity\n}\n\nexport interface DsseEnvelope {\n payloadType: string;\n payload: string; // base64 of the Statement JSON\n signatures: DsseSignature[];\n}\n\nexport function sha256Hex(input: string | Uint8Array): string {\n return crypto.createHash('sha256').update(input).digest('hex');\n}\n\n/**\n * sha256 over the canonical graph with the volatile `generatedAt` excluded, so\n * two builds of identical content attest to the same digest.\n */\nexport function graphSubjectDigest(graph: VgGraph): string {\n const { generatedAt: _omit, ...rest } = graph;\n return sha256Hex(canonicalize(rest));\n}\n\n/** The 16-hex key id: a truncated sha256 over the SPKI DER public key. */\nexport function keyId(publicKey: crypto.KeyObject): string {\n return sha256Hex(publicKey.export({ type: 'spki', format: 'der' })).slice(0, 16);\n}\n\nexport interface StatementInput {\n commit?: CommitInfo;\n sbomDigest?: string;\n timestamp?: string;\n}\n\nexport function buildStatement(graph: VgGraph, input: StatementInput = {}): InTotoStatement {\n const graphDigest = graphSubjectDigest(graph);\n const predicate: AttestPredicate = {\n tool: { name: 'vg', version: VERSION },\n toolchain: graph.provenance.toolchain,\n corpusHash: graph.provenance.corpusHash,\n graphDigest,\n counts: graph.meta.counts,\n };\n if (input.commit) predicate.commit = input.commit;\n if (input.sbomDigest) predicate.sbomDigest = input.sbomDigest;\n if (input.timestamp) predicate.timestamp = input.timestamp;\n return {\n _type: IN_TOTO_STATEMENT_TYPE,\n subject: [{ name: 'graph.json', digest: { sha256: graphDigest } }],\n predicateType: VG_PREDICATE_TYPE,\n predicate,\n };\n}\n\n/**\n * DSSE Pre-Authentication Encoding:\n * \"DSSEv1\" SP len(type) SP type SP len(body) SP body\n * with lengths as ASCII decimal byte counts. Signing the PAE (not the raw body)\n * is what binds the payloadType to the signature.\n */\nexport function dssePae(payloadType: string, body: Uint8Array): Buffer {\n const typeBytes = Buffer.from(payloadType, 'utf8');\n const header = Buffer.from(\n `DSSEv1 ${typeBytes.length} ${payloadType} ${body.length} `,\n 'utf8',\n );\n return Buffer.concat([header, Buffer.from(body)]);\n}\n\n/** Sign a statement, returning a self-contained DSSE envelope. */\nexport function signStatement(statement: InTotoStatement, privateKey: crypto.KeyObject): DsseEnvelope {\n const body = Buffer.from(JSON.stringify(statement), 'utf8');\n const pae = dssePae(DSSE_PAYLOAD_TYPE, body);\n const sig = crypto.sign(null, pae, privateKey);\n // Derive the public key from the private key (via its PEM, for @types/node compat).\n const publicKey = crypto.createPublicKey(privateKey.export({ type: 'pkcs8', format: 'pem' }).toString());\n return {\n payloadType: DSSE_PAYLOAD_TYPE,\n payload: body.toString('base64'),\n signatures: [\n {\n keyid: keyId(publicKey),\n sig: sig.toString('base64'),\n publicKey: publicKey.export({ type: 'spki', format: 'pem' }).toString(),\n },\n ],\n };\n}\n\nexport type AttestStatus = 'verified' | 'signature-valid' | 'failed';\n\nexport interface VerifyResult {\n status: AttestStatus;\n signatureValid: boolean;\n signerPinned: boolean; // signature verified against a caller-supplied trusted key\n digestMatches?: boolean; // recomputed graph digest matches the attested one\n dirty?: boolean; // the attested commit had uncommitted changes\n keyid: string;\n reason: string;\n statement: InTotoStatement;\n}\n\n/**\n * Verify an envelope. Honest states, never a fabricated pass:\n * failed — bad signature, or the on-disk graph no longer matches.\n * signature-valid — cryptographically intact, but signer not pinned (or dirty).\n * verified — pinned signer + matching digest + clean tree.\n */\n/** An empty statement for results where the envelope could not even be parsed. */\nfunction emptyStatement(): InTotoStatement {\n return {\n _type: '',\n subject: [],\n predicateType: '',\n predicate: {\n tool: { name: 'vg', version: '' },\n corpusHash: '',\n graphDigest: '',\n counts: { nodes: 0, edges: 0, areas: 0, tests: 0, untested: 0 },\n },\n };\n}\n\nfunction failedResult(reason: string): VerifyResult {\n return {\n status: 'failed',\n signatureValid: false,\n signerPinned: false,\n keyid: '',\n reason,\n statement: emptyStatement(),\n };\n}\n\nexport function verifyEnvelope(\n env: DsseEnvelope,\n opts: { publicKeyPem?: string; graph?: VgGraph } = {},\n): VerifyResult {\n // A `.intoto.jsonl` is attacker-supplied input: every decode/parse/key step\n // must degrade to an honest `failed`, never crash the command.\n let body: Buffer;\n let statement: InTotoStatement;\n try {\n body = Buffer.from(env?.payload ?? '', 'base64');\n const parsed = JSON.parse(body.toString('utf8')) as InTotoStatement;\n if (!parsed || typeof parsed !== 'object' || !parsed.predicate) {\n throw new Error('missing predicate');\n }\n statement = parsed;\n } catch {\n return failedResult('malformed attestation payload (not a valid in-toto statement)');\n }\n\n const pae = dssePae(env.payloadType, body);\n const sig0 = env.signatures?.[0];\n const keyid = sig0?.keyid ?? '';\n const sig = sig0?.sig ? Buffer.from(sig0.sig, 'base64') : Buffer.alloc(0);\n\n let signatureValid = false;\n let signerPinned = false;\n try {\n if (sig0 && sig.length) {\n if (opts.publicKeyPem) {\n const pinnedKey = crypto.createPublicKey(opts.publicKeyPem);\n signatureValid = crypto.verify(null, pae, pinnedKey, sig);\n signerPinned = signatureValid;\n } else if (sig0.publicKey) {\n const embeddedKey = crypto.createPublicKey(sig0.publicKey);\n signatureValid = crypto.verify(null, pae, embeddedKey, sig);\n }\n }\n } catch {\n // Malformed key or signature bytes → not a valid signature (not a crash).\n signatureValid = false;\n signerPinned = false;\n }\n\n const digestMatches = opts.graph\n ? graphSubjectDigest(opts.graph) === statement.predicate.graphDigest\n : undefined;\n const dirty = statement.predicate.commit?.dirty;\n\n let status: AttestStatus;\n let reason: string;\n if (!signatureValid) {\n status = 'failed';\n reason = sig0 ? 'signature verification failed' : 'no signature in envelope';\n } else if (digestMatches === false) {\n status = 'failed';\n reason = 'graph.json no longer matches the attested digest (content changed since signing)';\n } else if (signerPinned && !dirty) {\n status = 'verified';\n reason =\n digestMatches === true\n ? 'signature valid, signer trusted, graph digest matches'\n : 'signature valid, signer trusted';\n } else {\n status = 'signature-valid';\n reason = dirty\n ? 'signature valid but the attested tree was dirty (uncommitted changes)'\n : 'signature valid but signer not pinned — pass --pub to establish trust';\n }\n\n return { status, signatureValid, signerPinned, digestMatches, dirty, keyid, reason, statement };\n}\n\nexport interface GeneratedKeypair {\n privatePem: string;\n publicPem: string;\n keyid: string;\n}\n\n/** Mint a fresh Ed25519 keypair for signing attestations. */\nexport function generateKeypair(): GeneratedKeypair {\n const { publicKey, privateKey } = crypto.generateKeyPairSync('ed25519');\n return {\n privatePem: privateKey.export({ type: 'pkcs8', format: 'pem' }).toString(),\n publicPem: publicKey.export({ type: 'spki', format: 'pem' }).toString(),\n keyid: keyId(publicKey),\n };\n}\n\n/** Serialize an envelope as a single-line `.intoto.jsonl` record (deterministic). */\nexport function serializeEnvelope(env: DsseEnvelope): string {\n return `${JSON.stringify(env)}\\n`;\n}\n\nexport function parseEnvelope(text: string): DsseEnvelope {\n const line = text.trim().split('\\n')[0];\n return JSON.parse(line) as DsseEnvelope;\n}\n","import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as crypto from 'node:crypto';\nimport { execFile } from 'node:child_process';\nimport { loadGraph } from '../engine/load.js';\nimport { resolveHead, workingTreeDirty } from '../core-open/utils/git-history.js';\nimport {\n buildStatement,\n signStatement,\n verifyEnvelope,\n generateKeypair,\n serializeEnvelope,\n parseEnvelope,\n type CommitInfo,\n type VerifyResult,\n} from '../engine/attest.js';\nimport { CliError, ExitCode } from '../util/exit.js';\nimport type { VgGraph } from '../schema.js';\n\n/**\n * Attestation actions folded into the graph lifecycle: `vg build --attest` signs\n * the graph it just built; `vg build --verify` checks a committed attestation.\n * The crypto lives in engine/attest.ts; this is the file/key/git glue + output.\n */\n\nconst DEFAULT_ATTESTATION = 'attestation.intoto.jsonl';\nconst DEFAULT_KEY = 'attest-key.pem';\n\nexport interface SignOpts {\n /** Signing key PEM path; else $VG_ATTEST_KEY; else .vibgrate/attest-key.pem (auto-minted). */\n key?: string;\n /** Output path for the attestation (default .vibgrate/attestation.intoto.jsonl). */\n attestation?: string;\n}\n\nexport interface SignSummary {\n keyid: string;\n graphDigest: string;\n fingerprint?: string;\n commit?: CommitInfo;\n out: string;\n keyGeneratedAt?: string;\n}\n\n/** Sign an already-built graph, writing a DSSE attestation. Returns a summary +\n * human notices (the caller decides how to render them alongside build output). */\nexport async function signGraphAttestation(\n root: string,\n graph: VgGraph,\n opts: SignOpts,\n): Promise<{ summary: SignSummary; notices: string[] }> {\n const notices: string[] = [];\n const explicitKey = opts.key ?? process.env.VG_ATTEST_KEY;\n const keyPath = explicitKey ? path.resolve(explicitKey) : path.join(root, '.vibgrate', DEFAULT_KEY);\n\n let keyGeneratedAt: string | undefined;\n if (!fs.existsSync(keyPath)) {\n if (explicitKey) {\n throw new CliError(`signing key not found: ${explicitKey}`, ExitCode.USAGE_ERROR);\n }\n // First use with no key: mint one at the default path (loud — it must be kept\n // and gitignored to re-sign reproducibly).\n const kp = generateKeypair();\n fs.mkdirSync(path.dirname(keyPath), { recursive: true });\n fs.writeFileSync(keyPath, kp.privatePem, { mode: 0o600 });\n fs.writeFileSync(`${keyPath}.pub`, kp.publicPem);\n keyGeneratedAt = keyPath;\n notices.push(\n `minted a new Ed25519 signing key at ${rel(root, keyPath)} (keyid ${kp.keyid}) — ` +\n `keep it, add it to .gitignore, and reuse it to re-sign reproducibly`,\n );\n }\n\n let privateKey: crypto.KeyObject;\n try {\n privateKey = crypto.createPrivateKey(fs.readFileSync(keyPath, 'utf8'));\n } catch {\n throw new CliError(`could not read an Ed25519 private key from ${rel(root, keyPath)}`, ExitCode.USAGE_ERROR);\n }\n if (privateKey.asymmetricKeyType !== 'ed25519') {\n throw new CliError(\n `attest requires an Ed25519 key, but ${rel(root, keyPath)} is ${privateKey.asymmetricKeyType ?? 'unknown'}`,\n ExitCode.USAGE_ERROR,\n );\n }\n\n const commit = await gitCommitInfo(root);\n const statement = buildStatement(graph, { commit });\n const envelope = signStatement(statement, privateKey);\n const outPath = opts.attestation\n ? path.resolve(opts.attestation)\n : path.join(root, '.vibgrate', DEFAULT_ATTESTATION);\n fs.mkdirSync(path.dirname(outPath), { recursive: true });\n fs.writeFileSync(outPath, serializeEnvelope(envelope));\n\n return {\n summary: {\n keyid: envelope.signatures[0]?.keyid ?? '',\n graphDigest: statement.predicate.graphDigest,\n fingerprint: statement.predicate.toolchain?.fingerprint,\n commit,\n out: rel(root, outPath),\n keyGeneratedAt: keyGeneratedAt ? rel(root, keyGeneratedAt) : undefined,\n },\n notices,\n };\n}\n\nexport interface VerifyOpts {\n /** Attestation path (default .vibgrate/attestation.intoto.jsonl). */\n attestation?: string;\n /** Public key PEM to pin the signer (else integrity-only verification). */\n pub?: string;\n}\n\nexport interface AttestVerifyOutcome {\n bundlePath: string;\n /** True when no attestation exists at the default path (and none was required). */\n missing: boolean;\n result?: VerifyResult;\n}\n\n/** Verify a committed attestation against the on-disk graph. Returns the outcome\n * (the caller renders + decides the exit code). Throws only when an attestation\n * was explicitly requested but is absent. */\nexport function verifyGraphAttestation(root: string, opts: VerifyOpts): AttestVerifyOutcome {\n const bundlePath = opts.attestation\n ? path.resolve(opts.attestation)\n : path.join(root, '.vibgrate', DEFAULT_ATTESTATION);\n if (!fs.existsSync(bundlePath)) {\n if (opts.attestation || opts.pub) {\n throw new CliError(\n `no attestation at ${rel(root, bundlePath)} — sign one with \\`vg build --attest\\``,\n ExitCode.NOT_FOUND,\n );\n }\n return { bundlePath, missing: true };\n }\n const envelope = parseEnvelope(fs.readFileSync(bundlePath, 'utf8'));\n const publicKeyPem = opts.pub ? fs.readFileSync(path.resolve(opts.pub), 'utf8') : undefined;\n const graph = loadGraph(root) ?? undefined;\n return { bundlePath, missing: false, result: verifyEnvelope(envelope, { publicKeyPem, graph }) };\n}\n\nasync function gitCommitInfo(root: string): Promise<CommitInfo | undefined> {\n const sha = await resolveHead(root);\n if (!sha) return undefined;\n const dirty = await workingTreeDirty(root);\n const branch = await gitBranch(root);\n return { sha, shortSha: sha.slice(0, 7), branch, dirty: dirty === true ? true : dirty === false ? false : undefined };\n}\n\n/** Best-effort current branch name; undefined on detached HEAD or no git. */\nfunction gitBranch(root: string): Promise<string | undefined> {\n return new Promise((resolve) => {\n execFile(\n 'git',\n ['rev-parse', '--abbrev-ref', 'HEAD'],\n { cwd: root, timeout: 5000, windowsHide: true, encoding: 'utf8' },\n (err, stdout) => {\n if (err) return resolve(undefined);\n const name = String(stdout).trim();\n resolve(name && name !== 'HEAD' ? name : undefined);\n },\n );\n });\n}\n\nfunction rel(root: string, p: string): string {\n const r = path.relative(root, p);\n return r.startsWith('..') ? p : r;\n}\n","import chalk from 'chalk';\n\n/**\n * Output conventions (VG-CLI-SPEC §1.1): human output + progress → stderr;\n * machine output (JSON/exports) → stdout. So `vg \"…\" --json | jq` and\n * `vg export - …` pipe cleanly.\n */\n\nexport function info(message = ''): void {\n process.stderr.write(`${message}\\n`);\n}\n\nexport function out(message: string): void {\n process.stdout.write(`${message}\\n`);\n}\n\nexport function json(value: unknown): void {\n process.stdout.write(`${JSON.stringify(value, null, 2)}\\n`);\n}\n\nexport const c = chalk;\n\n/** Honor NO_COLOR / --no-color via chalk's level (set by the CLI bootstrap). */\nexport function disableColor(): void {\n chalk.level = 0;\n}\n","import { c } from './output.js';\nimport { VERSION } from '../version.js';\n\n/**\n * The `vg` brand banner — the same boxy robot mark and brand colours (teal/mint)\n * as the Vibgrate scanner (`vibgrate-cli/src/ui/progress.ts`), replicated here so\n * the open graph package stays standalone.\n *\n * The wordmark is stacked BELOW the mark rather than beside it: the robot's eye\n * (`◼`) and arrow (`➜`) glyphs are East-Asian \"ambiguous\"/wide, so terminals that\n * render them double-width make the rows unequal — text placed to their right\n * (the scanner's layout) then misaligns. Nothing sits beside the art here, so the\n * banner lines up in every terminal. Shown on `vg build` for a human at a TTY;\n * never on `--json`, `--quiet`, or under a pipe.\n */\n\nconst teal = (s: string): string => c.hex('#3FB0A4')(s);\nconst mint = (s: string): string => c.hex('#4FE3C1')(s);\n\n// ── Boxy robot mark — identical glyphs/colours to the scanner's ROBOT ──\nconst ROBOT = [\n ' ' + teal('╭──────╮') + mint('➜'),\n ' ' + c.dim('┤') + teal('│') + ' ' + mint('◼') + ' ' + mint('◼') + ' ' + teal('│') + c.dim('├'),\n ' ' + c.dim('┤') + teal('│') + ' ' + c.dim('▁▁') + ' ' + teal('│') + c.dim('├'),\n ' ' + teal('╰──────╯'),\n] as const;\n\n/**\n * The banner as lines (no I/O) so it is unit-testable. The robot mark is a\n * self-contained block; the wordmark/tagline sit on their OWN lines beneath it\n * (never beside the variable-width glyphs), so the banner aligns in any terminal.\n */\nexport function logoLines(root?: string): string[] {\n return [\n '',\n ` ${ROBOT[0]}`,\n ` ${ROBOT[1]}`,\n ` ${ROBOT[2]}`,\n ` ${ROBOT[3]}`,\n ` ${c.bold.white('Vibgrate')} ${teal('Graph')} ${c.dim(`· Code Intelligence Engine · v${VERSION}`)}`,\n ...(root ? [` ${c.dim(root)}`] : []),\n '',\n ];\n}\n\n/** Print the banner to stderr, only for an interactive human (TTY). */\nexport function printLogo(root?: string): void {\n if (!process.stderr.isTTY) return;\n process.stderr.write(`${logoLines(root).join('\\n')}\\n`);\n}\n","import { c } from './output.js';\nimport { brandProgressBar } from '../core-open/ui/bar.js';\n\n/**\n * A small progress bar matching the scanner's style\n * (`vibgrate-core-open/src/ui/progress.ts`): a smooth sub-cell gradient bar\n * (shared `brandProgressBar`), a braille spinner, percent, elapsed and ETA.\n * Renders to **stderr** in place, and only when stderr is a TTY — under a\n * pipe/CI it stays silent so logs aren't polluted.\n */\n\nconst FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'] as const;\nconst WIDTH = 30;\n\nfunction fmtDuration(ms: number): string {\n const s = Math.max(0, Math.round(ms / 1000));\n if (s < 60) return `${s}s`;\n return `${Math.floor(s / 60)}m${String(s % 60).padStart(2, '0')}s`;\n}\n\n/**\n * Pure render of one progress line (no I/O, no clock) so it is unit-testable.\n * `elapsedMs` and `frame` are passed in by the caller.\n */\nexport function formatProgressLine(\n label: string,\n done: number,\n total: number,\n elapsedMs: number,\n frame: number,\n): string {\n const ratio = total > 0 ? Math.min(done / total, 1) : 0;\n const bar = brandProgressBar(ratio, WIDTH);\n const pct = Math.round(ratio * 100);\n const spin = c.cyan(FRAMES[((frame % FRAMES.length) + FRAMES.length) % FRAMES.length]);\n const eta = ratio > 0.02 && ratio < 1 ? ` · eta ${fmtDuration((elapsedMs / ratio) * (1 - ratio))}` : '';\n return ` ${spin} ${label} ${bar} ${c.bold(`${pct}%`)} ${c.dim(`${done}/${total} · ${fmtDuration(elapsedMs)}${eta}`)}`;\n}\n\n/** Live, in-place progress bar on stderr (no-op when stderr isn't a TTY). */\nexport class ProgressBar {\n private readonly start = Date.now();\n private frame = 0;\n private readonly tty = Boolean(process.stderr.isTTY);\n\n constructor(private readonly label: string) {}\n\n update(done: number, total: number): void {\n if (!this.tty) return;\n const line = formatProgressLine(this.label, done, total, Date.now() - this.start, this.frame++);\n process.stderr.write(`\\r\\x1b[2K${line}`);\n }\n\n /** Clear the bar; optionally print a final summary line. */\n done(summary?: string): void {\n if (!this.tty) return;\n process.stderr.write('\\r\\x1b[2K');\n if (summary) process.stderr.write(`${summary}\\n`);\n }\n}\n","import type { Command } from 'commander';\n\n/** Global flags shared across all `vg` commands (VG-CLI-SPEC §1.1). */\nexport interface GlobalOpts {\n /** -C, --cwd <dir> */\n cwd?: string;\n /** --deep */\n deep?: boolean;\n /** --json */\n json?: boolean;\n /** --generated-at <iso> */\n generatedAt?: string;\n /** --graph <file> (override the map path) */\n graph?: string;\n /** --no-cache (commander exposes this as `cache: false`) */\n noCache?: boolean;\n /** --local (never touch the network) */\n local?: boolean;\n /** --quiet */\n quiet?: boolean;\n}\n\n/**\n * Attach the global flags to a command. They live on every subcommand (rather\n * than only the program) so the \"simple as Google\" dispatch can put the command\n * token first and let flags appear in any order after it.\n */\nexport function applyGlobalOptions(cmd: Command): Command {\n return cmd\n .option('-C, --cwd <dir>', 'run as if started in <dir>', '.')\n .option('--deep', 'do more: precise resolution, all edges, semantic links')\n .option('--json', 'machine-readable JSON on stdout')\n .option('--generated-at <iso>', 'pin the artifact timestamp for byte-deterministic output')\n .option('--graph <file>', 'override the map path')\n .option('--no-cache', 'full rebuild (ignore the incremental cache)')\n .option('--local', 'never touch the network (lexical-only semantic)')\n .option('--quiet', 'suppress progress output')\n .option('--no-color', 'disable colored output');\n}\n\n/** Read the global subset from a command's parsed options. */\nexport function readGlobal(cmd: Command): GlobalOpts {\n const o = cmd.opts<Record<string, unknown>>();\n return {\n cwd: o.cwd as string | undefined,\n deep: o.deep as boolean | undefined,\n json: o.json as boolean | undefined,\n generatedAt: o.generatedAt as string | undefined,\n graph: o.graph as string | undefined,\n noCache: o.cache === false,\n local: o.local as boolean | undefined,\n quiet: o.quiet as boolean | undefined,\n };\n}\n","import * as path from 'node:path';\nimport * as fs from 'node:fs';\nimport { spawn } from 'node:child_process';\nimport { Command } from 'commander';\nimport { buildGraph } from '../engine/build.js';\nimport { verifyDeterminism } from '../engine/verify.js';\nimport { epistemicBreakdown } from '../engine/epistemic.js';\nimport { signGraphAttestation, verifyGraphAttestation, type SignSummary } from './attest-actions.js';\nimport { isModelReady, countPending, resolveEmbedModel } from '../engine/embeddings.js';\nimport type { VgGraph } from '../schema.js';\nimport { writeArtifacts } from '../engine/artifacts.js';\nimport { writeSnapshot } from '../engine/freshness.js';\nimport { serializeGraph } from '../engine/serialize.js';\nimport { renderReport } from '../engine/report.js';\nimport { renderHtml } from '../engine/html.js';\nimport { UsageError } from '../engine/discover.js';\nimport { ResourceLimitError } from '../engine/limits.js';\nimport { CliError, ExitCode, usageError } from '../util/exit.js';\nimport { c, info, out, json } from '../util/output.js';\nimport { printLogo } from '../util/logo.js';\nimport { ProgressBar } from '../util/progress.js';\nimport { applyGlobalOptions, readGlobal, type GlobalOpts } from '../cli-options.js';\n\ninterface BuildCmdOpts {\n only?: string;\n exclude?: string[];\n html?: boolean;\n report?: boolean;\n ground?: boolean;\n jobs?: string;\n scip?: string | boolean;\n tsc?: boolean;\n export?: string;\n warm?: boolean;\n grammars?: string;\n attest?: boolean;\n verify?: boolean;\n attestKey?: string;\n attestation?: string;\n pub?: string;\n}\n\nexport function registerBuild(program: Command): void {\n const cmd = program\n .command('build')\n .description('build / update the code map (incremental, deterministic)')\n .argument('[paths...]', 'folders or files to map (default: current folder)')\n .option('--only <langs>', 'restrict to languages, e.g. ts,py,go')\n .option('--exclude <glob>', 'extra ignore glob (repeatable)', collect, [])\n .option('--no-html', 'do not write graph.html')\n .option('--no-report', 'do not write GRAPH_REPORT.md')\n .option('--no-ground', 'do not attach grounding (Phase 2)')\n .option('--jobs <n>', 'worker count (1 = single-threaded)')\n .option('--scip <file>', 'ingest a SCIP index for precise resolution (default: auto-detect index.scip)')\n .option('--no-scip', 'ignore any SCIP index')\n .option('--no-tsc', 'skip the in-process TypeScript resolver (heuristic floor only)')\n .option('--no-warm', 'do not warm the semantic index in the background after building')\n .option('--grammars <dir>', 'directory of grammar .wasm files (offline / air-gapped)')\n .option('-o, --export <file>', 'also write the map to a file (format inferred)')\n .option('--attest', 'sign the built graph → .vibgrate/attestation.intoto.jsonl')\n .option('--verify', 'verify a committed attestation against the graph (no rebuild)')\n .option('--attest-key <path>', 'signing key PEM (else $VG_ATTEST_KEY, else .vibgrate/attest-key.pem)')\n .option('--attestation <file>', 'attestation path (out for --attest, in for --verify)')\n .option('--pub <path>', 'public key PEM to pin the signer (with --verify)')\n .action(async function (this: Command, paths: string[], opts: BuildCmdOpts) {\n await runBuild(paths, opts, readGlobal(this));\n });\n applyGlobalOptions(cmd);\n}\n\nexport async function runBuild(\n paths: string[],\n opts: BuildCmdOpts,\n global: GlobalOpts,\n): Promise<void> {\n const root = path.resolve(global.cwd ?? '.');\n\n // `vg build --verify`: the single verification entry point — determinism\n // self-check plus (if present) attestation verification.\n if (opts.verify) {\n await verifyGraph(root, opts, global);\n return;\n }\n\n // Brand banner + live parse progress for an interactive human while the index\n // builds (TTY only; both are no-ops under --json/--quiet/pipe so machine output\n // stays clean).\n const interactive = !global.json && !global.quiet;\n if (interactive) printLogo(path.basename(root) || root);\n const bar = interactive ? new ProgressBar(c.dim('parsing')) : undefined;\n const jobs = opts.jobs ? Number(opts.jobs) : undefined;\n if (jobs !== undefined && (!Number.isInteger(jobs) || jobs < 1)) {\n throw usageError(`--jobs must be a positive integer (got \"${opts.jobs}\")`);\n }\n\n const only = opts.only ? opts.only.split(',').map((s) => s.trim()).filter(Boolean) : undefined;\n let result;\n try {\n result = await buildGraph({\n root,\n paths: paths.length ? paths : undefined,\n only,\n exclude: opts.exclude,\n jobs,\n noCache: global.noCache,\n deep: global.deep,\n noGround: opts.ground === false,\n scip: typeof opts.scip === 'string' ? opts.scip : undefined,\n noScip: opts.scip === false,\n noTsc: opts.tsc === false,\n generatedAt: global.generatedAt,\n onParseProgress: bar ? (done, total) => bar.update(done, total) : undefined,\n grammarsDir: opts.grammars,\n });\n } catch (err) {\n bar?.done();\n if (err instanceof UsageError) throw usageError(err.message);\n // A resource safeguard fired (file-count cap, heap budget, worker OOM) —\n // the message already carries the remedy; surface it without a stack.\n if (err instanceof ResourceLimitError) throw new CliError(err.message, ExitCode.ERROR);\n throw err;\n }\n bar?.done();\n\n const written = writeArtifacts(result.graph, {\n root,\n html: opts.html,\n report: opts.report,\n graphPath: global.graph,\n });\n\n // Record the freshness snapshot (stat+hash per corpus file, plus this build's\n // scope) so `vg serve`/`vg ask` can auto-refresh the map when the tree drifts.\n // Skipped for a custom --graph target: that is an explicit artifact the\n // auto-refresh machinery must not manage.\n if (!global.graph) {\n writeSnapshot(root, result.graph.provenance.corpusHash, result.fileStats, {\n only,\n exclude: opts.exclude,\n paths: paths.length ? paths : undefined,\n deep: global.deep,\n noGround: opts.ground === false,\n scip: typeof opts.scip === 'string' ? opts.scip : undefined,\n noScip: opts.scip === false,\n noTsc: opts.tsc === false,\n grammarsDir: opts.grammars,\n });\n }\n\n if (opts.export) writeExport(result.graph, opts.export);\n\n // `--attest`: sign the freshly-built graph → .vibgrate/attestation.intoto.jsonl.\n let attestation: SignSummary | undefined;\n const attestNotices: string[] = [];\n if (opts.attest) {\n const signed = await signGraphAttestation(root, result.graph, {\n key: opts.attestKey,\n attestation: opts.attestation,\n });\n attestation = signed.summary;\n attestNotices.push(...signed.notices);\n }\n\n if (global.json) {\n json({\n ok: true,\n counts: result.graph.meta.counts,\n languages: result.graph.meta.languages,\n reparsed: result.reparsed,\n reused: result.reused,\n totalFiles: result.totalFiles,\n resolve: result.resolveStats,\n tsc: result.tsc,\n scip: result.scip,\n epistemic: epistemicBreakdown(result.graph.edges),\n artifacts: written,\n corpusHash: result.graph.provenance.corpusHash,\n toolchain: result.graph.provenance.toolchain,\n attestation,\n timingMs: result.timing.totalMs,\n warnings: result.warnings,\n });\n return;\n }\n\n const { counts } = result.graph.meta;\n const incremental =\n result.reused > 0\n ? `incremental: ${result.reparsed} of ${result.totalFiles} files re-parsed`\n : `${result.totalFiles} files parsed`;\n const seconds = (result.timing.totalMs / 1000).toFixed(2);\n info(`${c.cyan('vg')} · mapped ${rel(root)} in ${seconds}s (${incremental})`);\n info(\n ` nodes ${c.bold(String(counts.nodes))} edges ${c.bold(String(counts.edges))} ` +\n `areas ${counts.areas} langs ${result.graph.meta.languages.join(',') || '—'}`,\n );\n const callPct =\n result.resolveStats.callsResolved + result.resolveStats.callsUnresolved > 0\n ? Math.round(\n (100 * result.resolveStats.callsResolved) /\n (result.resolveStats.callsResolved + result.resolveStats.callsUnresolved),\n )\n : 100;\n // When a precise rung ran it is authoritative; callPct is only the heuristic\n // floor (label it so, to avoid understating the precise result below).\n const precise = result.tsc || result.scip;\n const callLabel = precise ? `heuristic floor ${callPct}%` : `calls resolved ${callPct}%`;\n info(c.dim(` ${callLabel} · resolver ${result.graph.provenance.resolver.join(',')}`));\n if (result.tsc) {\n const jsx = result.tsc.jsx > 0 ? `, ${result.tsc.jsx} JSX` : '';\n info(c.dim(` tsc: ${result.tsc.resolved} precise edges across ${result.tsc.files} TS/JS files (${result.tsc.calls} calls${jsx})`));\n }\n if (result.scip) {\n info(c.dim(` scip: ${result.scip.resolved} precise edges from ${result.scip.tool ?? 'index'} (${result.scip.documents} docs)`));\n }\n const ep = epistemicBreakdown(result.graph.edges);\n info(\n c.dim(\n ` edges by evidence · observed ${ep.observed} · name-matched ${ep['name-matched']} · declared ${ep.declared}`,\n ),\n );\n const artifactList = [written.graphPath, written.htmlPath, written.reportPath]\n .filter(Boolean)\n .map((p) => path.relative(root, p as string))\n .join(' ');\n info(` → ${artifactList}`);\n if (result.warnings.length) {\n info(c.yellow(` ${result.warnings.length} parse warning(s) — run with --json for detail`));\n }\n if (attestation) {\n for (const n of attestNotices) info(c.yellow(` ${n}`));\n info(\n c.dim(\n ` attested · keyid ${attestation.keyid} · digest ${attestation.graphDigest.slice(0, 16)}… → ${attestation.out}`,\n ),\n );\n }\n\n maybeWarmEmbeddings(root, result.graph, global, opts.warm !== false);\n}\n\n/**\n * `vg build --verify` — the single verification entry point. Runs the determinism\n * self-check (byte-identical rebuilds + toolchain fingerprint) and, when an\n * attestation is present, verifies it against the on-disk graph. Exit 4 on a\n * determinism failure, exit 2 on an attestation failure.\n */\nasync function verifyGraph(root: string, opts: BuildCmdOpts, global: GlobalOpts): Promise<void> {\n const only = opts.only ? opts.only.split(',').map((s) => s.trim()).filter(Boolean) : undefined;\n const jobs = opts.jobs ? Number(opts.jobs) : undefined;\n const det = await verifyDeterminism({ root, only, exclude: opts.exclude, jobs });\n const attest = verifyGraphAttestation(root, { attestation: opts.attestation, pub: opts.pub });\n const attestFailed = !attest.missing && attest.result?.status === 'failed';\n\n if (global.json) {\n json({\n ok: det.ok && !attestFailed,\n determinism: { ok: det.ok, checks: det.checks, digest: det.digest },\n attestation: attest.missing\n ? null\n : {\n status: attest.result?.status,\n signatureValid: attest.result?.signatureValid,\n signerPinned: attest.result?.signerPinned,\n digestMatches: attest.result?.digestMatches,\n dirty: attest.result?.dirty,\n keyid: attest.result?.keyid,\n reason: attest.result?.reason,\n },\n });\n } else {\n info(`${c.cyan('vg build --verify')} · ${path.relative(process.cwd(), root) || '.'}`);\n for (const check of det.checks) {\n const mark = check.ok ? c.green('✔') : c.red('✘');\n const detail = check.detail ? c.dim(` (${check.detail})`) : '';\n info(` ${mark} ${check.name}${detail}`);\n }\n info(det.ok ? c.green(` deterministic · digest ${det.digest.slice(0, 16)}…`) : c.red(' NON-DETERMINISTIC'));\n if (attest.missing) {\n info(c.dim(` attestation: none (sign one with \\`vg build --attest\\`)`));\n } else {\n const r = attest.result;\n const badge =\n r?.status === 'verified'\n ? c.green('✔ attestation verified')\n : r?.status === 'signature-valid'\n ? c.yellow('~ attestation signature valid')\n : c.red('✘ attestation failed');\n info(` ${badge}${r?.keyid ? c.dim(` · keyid ${r.keyid}`) : ''}`);\n info(c.dim(` ${r?.reason ?? ''}`));\n }\n }\n\n if (!det.ok) throw new CliError('determinism self-check failed', ExitCode.NON_DETERMINISTIC);\n if (attestFailed) throw new CliError('attestation verification failed', ExitCode.GATE_FAILED);\n}\n\n/**\n * After an interactive build we have just committed to a code graph, so the\n * user is likely to run `vg ask`/`vg serve` next — start warming the semantic\n * index in the background now so that first semantic call is instant instead of\n * paying a cold model load. If the model isn't downloaded yet, the background\n * warm fetches it (once, centrally) rather than deferring the whole cost to the\n * first `ask`. Disabled with `--no-warm`; skipped under --json/--quiet/--local\n * and when not at a TTY (so CI never auto-downloads). The detached child runs\n * `vg embed --bg [--download]`; a lock prevents it racing a foreground `ask`.\n */\nfunction maybeWarmEmbeddings(root: string, graph: VgGraph, global: GlobalOpts, warm: boolean): void {\n if (!warm || global.json || global.quiet || global.local) return;\n if (!process.stdout.isTTY && !process.stderr.isTTY) return;\n const cli = process.argv[1];\n if (!cli) return;\n const modelId = resolveEmbedModel();\n const ready = isModelReady(modelId);\n // Already fully warm: model present and every node embedded → nothing to do.\n if (ready && countPending(graph, root, modelId) === 0) return;\n // When the model isn't on this machine yet, start the one-time download now\n // (the graph is built; the next semantic call shouldn't wait for it).\n const args = ready\n ? [cli, 'embed', '-C', root, '--bg']\n : [cli, 'embed', '-C', root, '--bg', '--download'];\n try {\n const child = spawn(process.execPath, args, { detached: true, stdio: 'ignore' });\n child.unref();\n info(\n c.dim(\n ready\n ? ' warming the semantic index in the background — `vg ask` will be instant'\n : ' downloading the semantic model in the background (once) — `vg ask`/`vg serve` will be instant; disable with --no-warm',\n ),\n );\n } catch {\n /* warm-up is best-effort */\n }\n}\n\nfunction writeExport(graph: Parameters<typeof serializeGraph>[0], target: string): void {\n if (target === '-') {\n out(serializeGraph(graph).trimEnd());\n return;\n }\n const ext = path.extname(target).toLowerCase();\n let content: string;\n switch (ext) {\n case '.json':\n content = serializeGraph(graph);\n break;\n case '.md':\n content = renderReport(graph);\n break;\n case '.html':\n content = renderHtml(graph);\n break;\n default:\n throw new CliError(\n `cannot export to \"${ext || target}\" yet — supported in Phase 0: .json, .md, .html, \"-\" (stdout). ` +\n `More formats (graphml, dot, cypher) arrive with \\`vg export\\` in Phase 1.`,\n ExitCode.USAGE_ERROR,\n );\n }\n fs.mkdirSync(path.dirname(path.resolve(target)), { recursive: true });\n fs.writeFileSync(target, content);\n}\n\nfunction collect(value: string, prev: string[]): string[] {\n return [...prev, value];\n}\n\nfunction rel(root: string): string {\n const r = path.relative(process.cwd(), root);\n return r === '' ? '.' : r;\n}\n","import * as path from 'node:path';\nimport * as fs from 'node:fs';\nimport { Command } from 'commander';\nimport { loadGraph } from '../engine/load.js';\nimport { defaultGraphPath, vibgrateDir } from '../engine/artifacts.js';\nimport { cacheDir } from '../engine/cache.js';\nimport { discover } from '../engine/discover.js';\nimport { probeFreshness, driftCount } from '../engine/freshness.js';\nimport { c, info, json } from '../util/output.js';\nimport { applyGlobalOptions, readGlobal, type GlobalOpts } from '../cli-options.js';\n\n/**\n * `vg status` — cache/freshness, counts, staleness, resolver rungs used.\n * Read-only; compares the committed graph against the working tree.\n */\nexport function registerStatus(program: Command): void {\n const cmd = program\n .command('status')\n .description('cache/freshness, counts, staleness, resolver rungs used')\n .action(async function (this: Command) {\n await runStatus(readGlobal(this));\n });\n applyGlobalOptions(cmd);\n}\n\nasync function runStatus(global: GlobalOpts): Promise<void> {\n const root = path.resolve(global.cwd ?? '.');\n const graphPath = global.graph ?? defaultGraphPath(root);\n const graph = loadGraph(root, graphPath);\n const hasCache = fs.existsSync(path.join(cacheDir(root), 'parse-cache.json'));\n\n // Determine staleness deterministically. Preferred path: the freshness\n // snapshot (stat+hash per corpus file, written by every build) gives an\n // exact per-file answer — content edits, adds, AND removes. Fallback when\n // no snapshot exists on this machine: \"files present now\" vs \"the graph's\n // node file set\", which sees adds/removes but not content edits.\n let stale: number | null = null;\n let staleExact = false;\n if (graph) {\n const probe = probeFreshness(root);\n if (probe) {\n stale = driftCount(probe.drift);\n staleExact = true;\n } else {\n const files = discover({ root });\n let changed = 0;\n const graphFiles = new Set(graph.nodes.filter((n) => n.kind === 'file').map((n) => n.file));\n const currentFiles = new Set(files.map((f) => f.rel));\n for (const f of currentFiles) if (!graphFiles.has(f)) changed++;\n for (const f of graphFiles) if (!currentFiles.has(f)) changed++;\n stale = changed;\n }\n }\n\n if (global.json) {\n json({\n root: path.relative(process.cwd(), root) || '.',\n graphPath: path.relative(root, graphPath),\n built: graph !== null,\n generatedAt: graph?.generatedAt ?? null,\n counts: graph?.meta.counts ?? null,\n languages: graph?.meta.languages ?? [],\n cluster: graph?.meta.cluster ?? null,\n resolver: graph?.provenance.resolver ?? [],\n corpusHash: graph?.provenance.corpusHash ?? null,\n cache: hasCache,\n staleFiles: stale,\n staleExact,\n });\n return;\n }\n\n if (!graph) {\n info(`${c.cyan('vg')} · no map yet at ${c.dim(path.relative(root, graphPath))}`);\n info(` run ${c.bold('vg')} to build one`);\n return;\n }\n\n info(`${c.cyan('vg')} · ${path.relative(root, graphPath)}`);\n info(` generated ${graph.generatedAt}`);\n info(\n ` nodes ${c.bold(String(graph.meta.counts.nodes))} edges ${c.bold(\n String(graph.meta.counts.edges),\n )} areas ${graph.meta.counts.areas} langs ${graph.meta.languages.join(',') || '—'}`,\n );\n info(` cluster ${graph.meta.cluster} · resolver ${graph.provenance.resolver.join(',')}`);\n info(` cache ${hasCache ? c.green('warm') : c.dim('cold')} · corpus ${graph.provenance.corpusHash.slice(0, 12)}…`);\n if (stale && stale > 0) {\n info(c.yellow(` ${stale} file(s) changed since last build — run ${c.bold('vg')} to refresh`));\n } else {\n info(c.dim(' up to date'));\n }\n if (vibgrateDir(root)) {\n /* artifact dir exists implicitly */\n }\n}\n","import * as path from 'node:path';\nimport { loadGraph } from '../engine/load.js';\nimport { CliError, ExitCode } from '../util/exit.js';\nimport type { GlobalOpts } from '../cli-options.js';\nimport type { VgGraph } from '../schema.js';\n\nexport function rootOf(global: GlobalOpts): string {\n return path.resolve(global.cwd ?? '.');\n}\n\n/** Load the committed graph, or fail with an actionable NOT_FOUND error. */\nexport function requireGraph(global: GlobalOpts): { root: string; graph: VgGraph } {\n const root = rootOf(global);\n const graph = loadGraph(root, global.graph);\n if (!graph) {\n throw new CliError(\n `no map found — run \\`vg\\` to build one first` +\n (global.graph ? ` (looked at ${global.graph})` : ''),\n ExitCode.NOT_FOUND,\n );\n }\n return { root, graph };\n}\n","import { Command } from 'commander';\nimport { queryGraph, queryGraphSemantic, type QueryResult } from '../engine/query.js';\nimport {\n loadEmbedder,\n getNodeEmbeddings,\n resolveEmbedModel,\n embeddingsCached,\n unavailableMessage,\n type EmbedUnavailable,\n} from '../engine/embeddings.js';\nimport { refreshIfStale } from '../engine/refresh.js';\nimport { driftCount } from '../engine/freshness.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { requireGraph, rootOf } from './util.js';\nimport { c, info, json, out } from '../util/output.js';\nimport { ProgressBar } from '../util/progress.js';\n\n/**\n * `vg ask \"<question>\"` (VG-CLI-SPEC §3.2). Hybrid lexical+structural+semantic\n * retrieval **on by default** — no API key, no flags. A local ONNX embedding\n * model is downloaded once on first use (then cached and fully offline) and\n * blends with the always-on deterministic lexical floor. It degrades gracefully\n * to lexical alone under `--local`, `--no-semantic`, on an unsupported platform,\n * or if the model can't be fetched — `ask` never fails. The context block goes\n * to stdout (pipeable); notes/progress to stderr.\n *\n * Before answering, `ask` auto-refreshes the map if the working tree drifted\n * since the last build (incremental, fail-soft; `--no-refresh` opts out), so\n * answers reflect the code as it is now — not as it was last built.\n */\nexport function registerAsk(program: Command): void {\n const cmd = program\n .command('ask')\n .description('ask the map — returns a budget-bounded context block')\n .argument('<question...>', 'your question (a bare quoted string also works: vg \"…\")')\n .option('-b, --budget <n>', 'approx token budget for the answer', '2000')\n .option('--no-semantic', 'lexical only (skip the local-embedding pass)')\n .option('--no-refresh', 'answer from the map as built — skip the auto-rebuild when files change')\n .action(async function (this: Command, question: string[], opts: { budget?: string; semantic?: boolean; refresh?: boolean }) {\n const global = readGlobal(this);\n const root = rootOf(global);\n // Answer from a map that matches the working tree: a cheap freshness\n // probe, then an incremental rebuild only if files really drifted. A\n // custom --graph is an explicit artifact and is never rebuilt over.\n // Fail-soft — a refresh problem falls back to the last built map.\n if (opts.refresh !== false && !global.graph) {\n const refreshed = await refreshIfStale(root);\n if (refreshed.status === 'refreshed' && !global.json) {\n const n = driftCount(refreshed.drift);\n info(c.dim(` map refreshed — ${n} file(s) drifted (${(refreshed.ms / 1000).toFixed(2)}s)`));\n } else if (refreshed.status === 'error' && !global.json) {\n info(c.yellow(` map refresh failed (${refreshed.message}) — answering from the last built map`));\n }\n }\n const { graph } = requireGraph(global);\n const budget = Number(opts.budget) || 2000;\n const q = question.join(' ');\n // Semantic is the default; --no-semantic or --local opt out.\n const wantSemantic = opts.semantic !== false && !global.local;\n\n let result: QueryResult;\n let mode = 'lexical';\n let note = '';\n\n if (wantSemantic) {\n // A genuine first run for this repo (no cached vectors yet) → show a\n // one-time note + live progress bar for the embedding pass. Otherwise stay quiet.\n const firstRun = !embeddingsCached(root, resolveEmbedModel());\n if (!global.json && firstRun) {\n info(c.dim(' preparing semantic search (first use embeds the map; cached, resumable & offline after)…'));\n }\n let reason: EmbedUnavailable | undefined;\n const embedder = await loadEmbedder({ local: global.local, onUnavailable: (r) => (reason = r) });\n if (embedder) {\n const bar = !global.json && firstRun ? new ProgressBar(c.dim('embedding')) : undefined;\n const vectors = await getNodeEmbeddings(graph, embedder, root, bar ? (d, t) => bar.update(d, t) : undefined);\n bar?.done();\n result = await queryGraphSemantic(graph, q, { budget, embedder, nodeVectors: vectors });\n mode = `semantic (${embedder.id})`;\n } else {\n result = queryGraph(graph, q, { budget });\n note = reason ? unavailableMessage(reason) : 'semantic unavailable; used lexical';\n }\n } else {\n result = queryGraph(graph, q, { budget });\n if (global.local) note = 'semantic skipped under --local; used lexical';\n }\n\n if (global.json) {\n json({\n question: result.question,\n mode,\n note: note || undefined,\n tokensEstimate: result.tokensEstimate,\n matches: result.matches.map((m) => ({\n name: m.node.qualifiedName,\n kind: m.node.kind,\n file: m.node.file,\n line: m.node.span.start,\n score: m.score,\n why: m.why,\n })),\n context: result.context,\n });\n return;\n }\n\n out(result.context);\n info('');\n info(c.dim(`vg · ${result.matches.length} match(es) · ~${result.tokensEstimate} tokens (budget ${budget}) · ${mode}`));\n if (note) info(c.yellow(` ${note}`));\n });\n applyGlobalOptions(cmd);\n}\n","import { Command, Option } from 'commander';\nimport {\n loadEmbedder,\n getNodeEmbeddings,\n resolveEmbedModel,\n countPending,\n embeddingsCached,\n modelCacheInfo,\n clearModelCache,\n unavailableMessage,\n type EmbedUnavailable,\n} from '../engine/embeddings.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { requireGraph, rootOf } from './util.js';\nimport { c, info, json } from '../util/output.js';\nimport { ProgressBar } from '../util/progress.js';\n\nfunction mb(bytes: number): string {\n if (bytes <= 0) return '0 MB';\n if (bytes < 1024 * 1024) return `${Math.max(1, Math.round(bytes / 1024))} KB`;\n return `${Math.round(bytes / (1024 * 1024))} MB`;\n}\n\n/**\n * `vg embed` — precompute the semantic index (node embeddings) so the next\n * `vg ask` is instant. The model is downloaded once per machine into a central,\n * home-folder cache (XDG `~/.cache/vibgrate/models`; no admin/sudo needed) shared\n * across all repos; per-repo vectors live in `.vibgrate/cache/`.\n *\n * `--where` shows the cache location/size; `--clear` removes the model. The\n * hidden `--bg` flag warms silently and never downloads (the `vg build` warm-up).\n */\nexport function registerEmbed(program: Command): void {\n const cmd = program\n .command('embed')\n .description('precompute the semantic index for instant `vg ask` (or --where / --clear)')\n .option('--where', 'show where the model is cached, and its size')\n .option('--clear', 'remove the downloaded model from the shared cache')\n // --bg: the silent background warm-up spawned by `vg build`. It skips the\n // model download by default; `--download` lets that background warm fetch\n // the model too, so a graph build starts the one-time download immediately\n // and the next `vg serve`/`vg ask` is instant instead of paying a cold load.\n .addOption(new Option('--bg').hideHelp())\n .addOption(new Option('--download').hideHelp())\n .action(async function (this: Command, opts: { where?: boolean; clear?: boolean; bg?: boolean; download?: boolean }) {\n const global = readGlobal(this);\n const modelId = resolveEmbedModel();\n\n // --where / --clear don't need a built graph.\n if (opts.where) return showWhere(rootOf(global), modelId, global.json);\n if (opts.clear) return doClear(global.json);\n\n const { graph } = requireGraph(global);\n const root = rootOf(global);\n const bg = opts.bg === true;\n const speak = !bg && !global.json;\n\n if (global.local) {\n if (speak) info(c.dim('vg embed · semantic is off (--local) — lexical search only'));\n return;\n }\n if (countPending(graph, root, modelId) === 0) {\n if (global.json) json({ embedded: 0, pending: 0, upToDate: true, model: modelId });\n else if (speak) info(`${c.cyan('vg embed')} · semantic index already up to date`);\n return;\n }\n\n let reason: EmbedUnavailable | undefined;\n const embedder = await loadEmbedder({\n local: global.local,\n // Background warm-ups skip the download unless explicitly asked to fetch\n // (`--bg --download`, spawned by `vg build` so the model is ready by the\n // time `vg serve`/`vg ask` needs it).\n noDownload: bg && opts.download !== true,\n showDownloadProgress: !bg,\n onUnavailable: (r) => (reason = r),\n });\n if (!embedder) {\n // Calm, specific fallback — never a stack trace. (bg stays silent.)\n if (speak && reason) info(c.dim(`vg embed · ${unavailableMessage(reason)}`));\n return;\n }\n\n const pending = countPending(graph, root, modelId);\n const bar = speak ? new ProgressBar(c.dim('embedding')) : undefined;\n await getNodeEmbeddings(graph, embedder, root, bar ? (d, t) => bar.update(d, t) : undefined);\n bar?.done();\n if (global.json) json({ embedded: pending, model: modelId });\n else if (speak) info(`${c.green('✔')} vg embed · semantic index ready (~${pending} node(s) · model ${modelId})`);\n });\n applyGlobalOptions(cmd);\n}\n\nfunction showWhere(root: string, modelId: string, asJson?: boolean): void {\n const m = modelCacheInfo(modelId);\n const repoCached = embeddingsCached(root, modelId);\n if (asJson) {\n json({ model: modelId, cacheDir: m.dir, present: m.present, bytes: m.bytes, repoEmbeddings: repoCached });\n return;\n }\n info(`${c.cyan('vg embed')} · model cache`);\n info(` model ${c.bold(modelId)}`);\n info(` shared at ${m.dir}`);\n info(` ${m.present ? c.green(`present · ~${mb(m.bytes)}`) : c.dim('not downloaded yet (fetched on first semantic ask)')}`);\n info(` this repo ${repoCached ? c.green('embeddings cached') : c.dim('not embedded yet — run `vg embed`')}`);\n info(c.dim(' no admin/sudo needed — the cache is in your home folder, shared across all repos.'));\n info(c.dim(' turn off: run with --local · relocate: XDG_CACHE_HOME=<dir> · remove: vg embed --clear'));\n}\n\nfunction doClear(asJson?: boolean): void {\n const before = modelCacheInfo();\n const freed = clearModelCache();\n if (asJson) {\n json({ removed: before.present, bytesFreed: freed, dir: before.dir });\n return;\n }\n if (!before.present || freed === 0) {\n info(`${c.cyan('vg embed')} · no model in the shared cache — nothing to remove (${before.dir})`);\n return;\n }\n info(`${c.green('✔')} vg embed · removed the shared model (~${mb(freed)}) from ${before.dir}`);\n info(c.dim(' repos use fast lexical search until the next semantic ask re-downloads it.'));\n}\n","import { CliError, ExitCode } from '../util/exit.js';\nimport type { GraphNode } from '../schema.js';\n\n/**\n * Build a NOT_FOUND error that lists ambiguous candidates with `--pick` hints,\n * so the message is actionable (VG-CLI-SPEC §3.3). `pickFlag` lets multi-argument\n * commands point at the right flag (e.g. `vg path` uses `--pick-a`/`--pick-b`).\n */\nexport function ambiguityError(summary: string, candidates: GraphNode[], pickFlag = '--pick'): CliError {\n if (candidates.length === 0) {\n return new CliError(`${summary} — try \\`vg hubs\\` or a broader name/glob`, ExitCode.NOT_FOUND);\n }\n const lines = candidates\n .slice(0, 10)\n .map((n, i) => ` ${i + 1}. ${n.qualifiedName} (${n.kind}, ${n.file}:${n.span.start})`);\n const more = candidates.length > 10 ? `\\n …and ${candidates.length - 10} more` : '';\n return new CliError(\n `${summary} — pick one with ${pickFlag} <n>:\\n${lines.join('\\n')}${more}`,\n ExitCode.NOT_FOUND,\n );\n}\n","import { Command } from 'commander';\nimport { resolveOne } from '../engine/lookup.js';\nimport { GraphIndex } from '../engine/relations.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { requireGraph } from './util.js';\nimport { ambiguityError } from './ambiguity.js';\nimport { c, info, json } from '../util/output.js';\n\n/**\n * `vg show <name>` (VG-CLI-SPEC §3.3) — the richest single-node view: what it\n * is, its callers and callees and other edges, its area and importance.\n * (Facts + grounding are attached in Phase 2.)\n */\nexport function registerShow(program: Command): void {\n const cmd = program\n .command('show')\n .description('explain a node: what it is, what it calls, what calls it')\n .argument('<name>', 'qualified name, short name, file:line, glob, or id')\n .option('--pick <n>', 'pick the nth candidate when ambiguous')\n .action(function (this: Command, name: string, opts: { pick?: string }) {\n const global = readGlobal(this);\n const { graph } = requireGraph(global);\n const { node, candidates } = resolveOne(graph, name, opts.pick ? Number(opts.pick) : undefined);\n\n if (!node) {\n if (candidates.length === 0) {\n throw ambiguityError(`no node matches \"${name}\"`, []);\n }\n throw ambiguityError(`\"${name}\" is ambiguous`, candidates);\n }\n\n const index = new GraphIndex(graph);\n const callees = dedupe(index.callees(node.id).map((x) => x.node));\n const callers = dedupe(index.callers(node.id).map((x) => x.node));\n const extendsEdges = index.out(node.id, 'extends').concat(index.out(node.id, 'implements'));\n const supertypes = extendsEdges.map((e) => index.node(e.dst)?.qualifiedName).filter(Boolean);\n const area = graph.areas.find((a) => a.id === node.area);\n\n if (global.json) {\n json({\n id: node.id,\n name: node.qualifiedName,\n kind: node.kind,\n file: node.file,\n line: node.span.start,\n signature: node.signature ?? null,\n importance: node.importance,\n centrality: node.centrality,\n isHub: node.isHub,\n area: node.area,\n areaLabel: area?.label ?? null,\n tested: node.tested,\n calls: callees.map((n) => n.qualifiedName),\n calledBy: callers.map((n) => n.qualifiedName),\n extends: supertypes,\n });\n return;\n }\n\n info(`${c.cyan(node.qualifiedName)} ${c.dim(`(${node.kind})`)}`);\n info(` ${c.dim(`${node.file}:${node.span.start}`)}`);\n if (node.signature) info(` ${c.bold(node.signature)}`);\n info(\n ` importance ${node.importance.toFixed(3)}${node.isHub ? c.yellow(' ★ hub') : ''} · area #${node.area}${area ? ` ${c.dim(area.label)}` : ''}`,\n );\n if (supertypes.length) info(` ${c.dim('extends:')} ${supertypes.join(', ')}`);\n info(` ${c.dim('calls')} (${callees.length}): ${callees.slice(0, 12).map((n) => n.qualifiedName).join(', ') || '—'}`);\n info(` ${c.dim('called by')} (${callers.length}): ${callers.slice(0, 12).map((n) => n.qualifiedName).join(', ') || '—'}`);\n });\n applyGlobalOptions(cmd);\n}\n\nfunction dedupe<T extends { id: string }>(nodes: T[]): T[] {\n const seen = new Set<string>();\n const out: T[] = [];\n for (const n of nodes) {\n if (seen.has(n.id)) continue;\n seen.add(n.id);\n out.push(n);\n }\n return out;\n}\n","import { Command } from 'commander';\nimport { resolveOne } from '../engine/lookup.js';\nimport { shortestPath } from '../engine/paths.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { requireGraph } from './util.js';\nimport { ambiguityError } from './ambiguity.js';\nimport { CliError, ExitCode } from '../util/exit.js';\nimport { c, info, json } from '../util/output.js';\n\n/**\n * `vg path <A> <B>` (VG-CLI-SPEC §4.1) — how A connects to B (shortest path).\n */\nexport function registerPath(program: Command): void {\n const cmd = program\n .command('path')\n .description('how A connects to B (shortest path)')\n .argument('<a>', 'source node')\n .argument('<b>', 'target node')\n .option('--pick-a <n>', 'pick the nth candidate for A when ambiguous')\n .option('--pick-b <n>', 'pick the nth candidate for B when ambiguous')\n .action(function (this: Command, a: string, b: string, opts: { pickA?: string; pickB?: string }) {\n const global = readGlobal(this);\n const { graph } = requireGraph(global);\n\n const ra = resolveOne(graph, a, opts.pickA ? Number(opts.pickA) : undefined);\n if (!ra.node) throw ambiguityError(`\"${a}\" ${ra.candidates.length ? 'is ambiguous' : 'not found'}`, ra.candidates, '--pick-a');\n const rb = resolveOne(graph, b, opts.pickB ? Number(opts.pickB) : undefined);\n if (!rb.node) throw ambiguityError(`\"${b}\" ${rb.candidates.length ? 'is ambiguous' : 'not found'}`, rb.candidates, '--pick-b');\n\n const result = shortestPath(graph, ra.node.id, rb.node.id);\n if (!result) {\n throw new CliError(\n `no path between ${ra.node.qualifiedName} and ${rb.node.qualifiedName}`,\n ExitCode.NOT_FOUND,\n );\n }\n\n const byId = new Map(graph.nodes.map((n) => [n.id, n] as const));\n const names = result.ids.map((id) => byId.get(id)?.qualifiedName ?? id);\n\n if (global.json) {\n json({ from: ra.node.qualifiedName, to: rb.node.qualifiedName, hops: names.length - 1, direction: result.direction, path: names });\n return;\n }\n\n info(`${c.cyan('vg path')} · ${names.length - 1} hop(s)${result.direction === 'reverse' ? c.dim(' (reverse)') : ''}`);\n info(' ' + names.map((n) => c.bold(n)).join(c.dim(' → ')));\n });\n applyGlobalOptions(cmd);\n}\n","import { Command } from 'commander';\nimport { resolveOne } from '../engine/lookup.js';\nimport { GraphIndex } from '../engine/relations.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { requireGraph } from './util.js';\nimport { ambiguityError } from './ambiguity.js';\nimport { c, info, json } from '../util/output.js';\nimport type { GraphNode } from '../schema.js';\n\n/**\n * `vg tree <name>` (VG-CLI-SPEC §2/§3) — the call tree rooted at a node\n * (callees by default; `--callers` to invert), depth-bounded and cycle-safe.\n */\nexport function registerTree(program: Command): void {\n const cmd = program\n .command('tree')\n .description('the call tree rooted at a node (callees; --callers to invert)')\n .argument('<name>', 'root node')\n .option('--callers', 'show callers instead of callees')\n .option('--depth <n>', 'max depth', '3')\n .option('--pick <n>', 'pick the nth candidate when ambiguous')\n .action(function (this: Command, name: string, opts: { callers?: boolean; depth?: string; pick?: string }) {\n const global = readGlobal(this);\n const { graph } = requireGraph(global);\n const { node, candidates } = resolveOne(graph, name, opts.pick ? Number(opts.pick) : undefined);\n if (!node) throw ambiguityError(`\"${name}\" ${candidates.length ? 'is ambiguous' : 'not found'}`, candidates);\n\n const index = new GraphIndex(graph);\n const maxDepth = Math.max(1, Number(opts.depth) || 3);\n const direction = opts.callers ? 'callers' : 'callees';\n\n if (global.json) {\n json(toJsonTree(index, node, direction, maxDepth, new Set()));\n return;\n }\n\n info(`${c.cyan('vg tree')} · ${direction} of ${c.bold(node.qualifiedName)} (depth ${maxDepth})`);\n const lines: string[] = [];\n walk(index, node, direction, maxDepth, 0, new Set(), lines, '');\n for (const l of lines) info(l);\n });\n applyGlobalOptions(cmd);\n}\n\nfunction next(index: GraphIndex, node: GraphNode, direction: 'callers' | 'callees'): GraphNode[] {\n const rel = direction === 'callees' ? index.callees(node.id) : index.callers(node.id);\n const seen = new Set<string>();\n const out: GraphNode[] = [];\n for (const { node: n } of rel) {\n if (seen.has(n.id)) continue;\n seen.add(n.id);\n out.push(n);\n }\n return out.sort((a, b) => b.importance - a.importance || a.qualifiedName.localeCompare(b.qualifiedName));\n}\n\nfunction walk(\n index: GraphIndex,\n node: GraphNode,\n direction: 'callers' | 'callees',\n maxDepth: number,\n depth: number,\n visited: Set<string>,\n lines: string[],\n prefix: string,\n): void {\n if (depth === 0) lines.push(`${c.bold(node.qualifiedName)} ${c.dim(`(${node.kind})`)}`);\n if (depth >= maxDepth) return;\n if (visited.has(node.id)) {\n lines.push(`${prefix}${c.dim('↻ (cycle)')}`);\n return;\n }\n visited.add(node.id);\n const children = next(index, node, direction);\n children.forEach((child, i) => {\n const last = i === children.length - 1;\n const branch = last ? '└─ ' : '├─ ';\n const cyc = visited.has(child.id) ? c.dim(' ↻') : '';\n lines.push(`${prefix}${c.dim(branch)}${child.qualifiedName}${cyc}`);\n walk(index, child, direction, maxDepth, depth + 1, new Set(visited), lines, prefix + (last ? ' ' : c.dim('│ ')));\n });\n}\n\nfunction toJsonTree(\n index: GraphIndex,\n node: GraphNode,\n direction: 'callers' | 'callees',\n maxDepth: number,\n visited: Set<string>,\n): unknown {\n if (maxDepth <= 0 || visited.has(node.id)) {\n return { name: node.qualifiedName, kind: node.kind, cycle: visited.has(node.id) };\n }\n const nextVisited = new Set(visited).add(node.id);\n return {\n name: node.qualifiedName,\n kind: node.kind,\n children: next(index, node, direction).map((child) =>\n toJsonTree(index, child, direction, maxDepth - 1, nextVisited),\n ),\n };\n}\n","import { Command } from 'commander';\nimport { renderReport } from '../engine/report.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { requireGraph } from './util.js';\nimport { c, info, json, out } from '../util/output.js';\nimport type { GraphNode, VgGraph } from '../schema.js';\n\n/**\n * Map insights (VG-CLI-SPEC §4.1): `vg map`, `vg hubs`, `vg areas`,\n * `vg oddities`. Read-only views over the committed graph.\n */\nexport function registerInsights(program: Command): void {\n const map = program\n .command('map')\n .description('the overview report (areas, hubs, untested hotspots)')\n .action(function (this: Command) {\n const global = readGlobal(this);\n const { graph } = requireGraph(global);\n if (global.json) json(reportJson(graph));\n else out(renderReport(graph));\n });\n applyGlobalOptions(map);\n\n const hubs = program\n .command('hubs')\n .description('the most-depended-on code (centrality outliers)')\n .option('-n, --limit <n>', 'how many to show', '20')\n .action(function (this: Command, opts: { limit?: string }) {\n const global = readGlobal(this);\n const { graph } = requireGraph(global);\n const limit = Number(opts.limit) || 20;\n const list = graph.nodes\n .filter((n) => n.kind !== 'file' && n.kind !== 'external')\n .sort((a, b) => b.importance - a.importance || a.qualifiedName.localeCompare(b.qualifiedName))\n .slice(0, limit);\n if (global.json) {\n json(list.map(nodeSummary));\n return;\n }\n info(`${c.cyan('vg hubs')} · top ${list.length} by importance`);\n for (const n of list) {\n const hub = n.isHub ? c.yellow(' ★') : '';\n info(` ${pad(n.importance.toFixed(3), 6)} ${c.bold(n.qualifiedName)}${hub} ${c.dim(`${n.file}:${n.span.start}`)}`);\n }\n });\n applyGlobalOptions(hubs);\n\n const areas = program\n .command('areas')\n .description('the natural groupings (communities), each labelled and sized')\n .option('-n, --limit <n>', 'how many to show', '30')\n .action(function (this: Command, opts: { limit?: string }) {\n const global = readGlobal(this);\n const { graph } = requireGraph(global);\n const limit = Number(opts.limit) || 30;\n const list = [...graph.areas].sort((a, b) => b.size - a.size || a.id - b.id).slice(0, limit);\n if (global.json) {\n json(list);\n return;\n }\n info(`${c.cyan('vg areas')} · ${graph.areas.length} communities (${graph.meta.cluster})`);\n for (const a of list) {\n info(\n ` ${c.bold(`#${a.id}`)} ${a.label} ${c.dim(`${a.size} nodes · cohesion ${a.cohesion.toFixed(2)} · ${a.externalEdges} external`)}`,\n );\n }\n });\n applyGlobalOptions(areas);\n\n const oddities = program\n .command('oddities')\n .description('surprising cross-area links (architectural smells)')\n .option('-n, --limit <n>', 'how many to show', '20')\n .action(function (this: Command, opts: { limit?: string }) {\n const global = readGlobal(this);\n const { graph } = requireGraph(global);\n const limit = Number(opts.limit) || 20;\n const byId = new Map(graph.nodes.map((n) => [n.id, n] as const));\n const list = graph.edges\n .filter((e) => typeof e.surprise === 'number' && e.surprise > 0)\n .sort((a, b) => (b.surprise ?? 0) - (a.surprise ?? 0) || a.id.localeCompare(b.id))\n .slice(0, limit);\n if (global.json) {\n json(\n list.map((e) => ({\n kind: e.kind,\n surprise: e.surprise,\n from: byId.get(e.src)?.qualifiedName ?? e.src,\n to: byId.get(e.dst)?.qualifiedName ?? e.dst,\n })),\n );\n return;\n }\n if (!list.length) {\n info(`${c.cyan('vg oddities')} · none found (no cross-area links, or only one area)`);\n return;\n }\n info(`${c.cyan('vg oddities')} · top ${list.length} surprising links`);\n for (const e of list) {\n const from = byId.get(e.src)?.qualifiedName ?? e.src;\n const to = byId.get(e.dst)?.qualifiedName ?? e.dst;\n info(` ${pad((e.surprise ?? 0).toFixed(2), 5)} ${c.bold(from)} ${c.dim(`—${e.kind}→`)} ${c.bold(to)}`);\n }\n });\n applyGlobalOptions(oddities);\n}\n\nfunction nodeSummary(n: GraphNode) {\n return {\n id: n.id,\n name: n.qualifiedName,\n kind: n.kind,\n file: n.file,\n line: n.span.start,\n importance: n.importance,\n isHub: n.isHub,\n area: n.area,\n };\n}\n\nfunction reportJson(graph: VgGraph) {\n return {\n counts: graph.meta.counts,\n languages: graph.meta.languages,\n cluster: graph.meta.cluster,\n areas: graph.areas.length,\n hubs: graph.nodes.filter((n) => n.isHub).length,\n };\n}\n\nfunction pad(s: string, n: number): string {\n return s.padStart(n, ' ');\n}\n","import { Command } from 'commander';\nimport { resolveOne } from '../engine/lookup.js';\nimport { impactOf } from '../engine/impact.js';\nimport { testsToRun, detectRunner } from '../engine/test-query.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { requireGraph, rootOf } from './util.js';\nimport { ambiguityError } from './ambiguity.js';\nimport { CliError, ExitCode } from '../util/exit.js';\nimport { c, info, json } from '../util/output.js';\n\n/**\n * `vg impact <name>` (VG-CLI-SPEC §3.5) — what breaks if you change it: the\n * deterministic structural blast radius (reverse reachability + decay\n * confidence), and with `--tests`, exactly the tests to run before shipping.\n * `--fail-on-untested` is a CI gate (exit 2).\n */\nexport function registerImpact(program: Command): void {\n const cmd = program\n .command('impact')\n .description('what breaks if you change it — and the tests to run')\n .argument('<name>', 'node to assess')\n .option('--depth <n>', 'max depth', '4')\n .option('--tests', 'also select the tests to run for the affected set')\n .option('--fail-on-untested', 'exit 2 if any affected node is untested')\n .option('--pick <n>', 'pick the nth candidate when ambiguous')\n .action(function (this: Command, name: string, opts: { depth?: string; tests?: boolean; failOnUntested?: boolean; pick?: string }) {\n const global = readGlobal(this);\n const { graph } = requireGraph(global);\n const { node, candidates } = resolveOne(graph, name, opts.pick ? Number(opts.pick) : undefined);\n if (!node) throw ambiguityError(`\"${name}\" ${candidates.length ? 'is ambiguous' : 'not found'}`, candidates);\n\n const depth = Number(opts.depth) || 4;\n const result = impactOf(graph, node.id, { depth });\n const withTests = opts.tests || opts.failOnUntested;\n const ti = withTests ? testsToRun(graph, node.id, depth) : undefined;\n const runner = ti ? detectRunner(rootOf(global), node.lang) : undefined;\n\n if (global.json) {\n json({\n ...result,\n tests: ti\n ? { toRun: ti.affectedTestFiles, command: runner?.command(ti.affectedTestFiles), untestedAffected: ti.untestedAffected }\n : undefined,\n });\n } else {\n info(`${c.cyan('Impact of')} ${c.bold(result.root.name)}`);\n info(` Affected (${result.affected.length}) ▸ ${result.direct} direct, ${result.transitive} transitive (depth ≤ ${result.depth})`);\n const preview = result.affected.slice(0, 15);\n for (const a of preview) {\n info(` ${c.dim(`d${a.depth}`)} ${a.name} ${c.dim(`${a.file}:${a.line} · conf ${a.confidence.toFixed(2)}`)}`);\n }\n if (result.affected.length > preview.length) info(c.dim(` …and ${result.affected.length - preview.length} more (use --json)`));\n if (result.minEdgeConfidence < 1) info(c.dim(` lowest edge confidence ${result.minEdgeConfidence.toFixed(2)} (ambiguous/dynamic edges lower it)`));\n if (ti) {\n info(` ${c.cyan(`Tests to run (${ti.affectedTestFiles.length})`)} ▸ ${ti.affectedTestFiles.join(' · ') || c.dim('none found')}`);\n if (runner && ti.affectedTestFiles.length) info(c.dim(` $ ${runner.command(ti.affectedTestFiles)}`));\n if (ti.untestedAffected.length) info(c.yellow(` ${ti.untestedAffected.length} affected node(s) are untested`));\n }\n }\n\n if (opts.failOnUntested && ti && ti.untestedAffected.length > 0) {\n throw new CliError(\n `${ti.untestedAffected.length} affected node(s) are untested: ${ti.untestedAffected.slice(0, 5).map((u) => u.name).join(', ')}`,\n ExitCode.GATE_FAILED,\n );\n }\n });\n applyGlobalOptions(cmd);\n}\n","import { Command } from 'commander';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { requireGraph } from './util.js';\nimport { impactOf } from '../engine/impact.js';\nimport { c, info, json } from '../util/output.js';\nimport type { GraphNode, Unknown, VgGraph } from '../schema.js';\n\n/**\n * `vg unknowns` — the honest inverse of a scanner that hides its blind spots.\n *\n * The graph records every heuristic reference it could not resolve (a call to a\n * name with no reachable definition, a supertype it could not connect), minus any\n * site a precise rung already covered. This command ranks those blind spots by\n * *blast radius*: an unresolved call inside a hub is far more consequential than\n * one in a leaf, because the graph is blind about a node everything depends on.\n * Deterministic: same graph → same ranking.\n */\n\n// Bound the impact BFS work: rank the most-central candidate sites exactly and\n// note if the tail was ordered by centrality alone.\nconst IMPACT_CANDIDATE_CAP = 200;\n\nexport interface Site {\n node: GraphNode;\n refs: Unknown[];\n total: number; // total unresolved occurrences at this site\n blastRadius: number; // transitive dependents (blind-spot reach)\n direct: number;\n transitive: number;\n}\n\nexport interface RankedUnknowns {\n sites: Site[];\n totalSites: number; // distinct sites with unknowns\n /** True when more sites existed than were exactly blast-radius scored (see cap). */\n capped: boolean;\n}\n\nexport function registerUnknowns(program: Command): void {\n const cmd = program\n .command('unknowns')\n .description('what the graph cannot resolve, ranked by blast radius')\n .option('-n, --limit <n>', 'how many sites to show', '20')\n .action(function (this: Command, opts: { limit?: string }) {\n const global = readGlobal(this);\n const { graph } = requireGraph(global);\n const limit = Number(opts.limit) || 20;\n\n const ranked = rankUnknowns(graph, limit);\n const { sites, totalSites, capped } = ranked;\n const totalRefs = (graph.unknowns ?? []).reduce((n, u) => n + u.count, 0);\n\n if (global.json) {\n json({\n unresolvedReferences: totalRefs,\n sites: totalSites,\n shown: sites.length,\n blastRankedCandidateCap: capped ? IMPACT_CANDIDATE_CAP : null,\n top: sites.map((s) => ({\n id: s.node.id,\n name: s.node.qualifiedName,\n kind: s.node.kind,\n file: s.node.file,\n line: s.node.span.start,\n importance: s.node.importance,\n blastRadius: s.blastRadius,\n direct: s.direct,\n transitive: s.transitive,\n unresolved: s.refs.map((r) => ({ name: r.name, kind: r.kind, count: r.count })),\n })),\n });\n return;\n }\n\n if (totalRefs === 0) {\n info(\n `${c.cyan('vg unknowns')} · none — every heuristic reference resolved ` +\n `(or was covered by a precise rung)`,\n );\n return;\n }\n\n info(\n `${c.cyan('vg unknowns')} · ${c.bold(String(totalRefs))} unresolved reference(s) at ` +\n `${totalSites} site(s) · top ${sites.length} by blast radius`,\n );\n for (const s of sites) {\n info(\n ` ${c.yellow(pad(String(s.blastRadius), 5))} ${c.bold(s.node.qualifiedName)} ` +\n c.dim(`${s.node.file}:${s.node.span.start} · importance ${s.node.importance.toFixed(3)}`),\n );\n info(` ${c.dim('cannot resolve:')} ${s.refs.map(fmtRef).join(', ')}`);\n }\n info(\n c.dim(\n ` blast radius = transitive dependents; these are the code paths the graph is blind about`,\n ),\n );\n if (capped) {\n info(\n c.dim(\n ` note: ${totalSites} sites have unknowns; only the top ${IMPACT_CANDIDATE_CAP} by ` +\n `centrality were blast-radius scored (the tail is ordered by centrality alone)`,\n ),\n );\n }\n });\n applyGlobalOptions(cmd);\n}\n\n/** Group unknowns by their originating node and rank by blast radius. */\nexport function rankSites(graph: VgGraph, limit: number): Site[] {\n return rankUnknowns(graph, limit).sites;\n}\n\n/** Group unknowns by originating node, rank by blast radius, and report truncation. */\nexport function rankUnknowns(graph: VgGraph, limit: number): RankedUnknowns {\n const unknowns = graph.unknowns ?? [];\n if (unknowns.length === 0) return { sites: [], totalSites: 0, capped: false };\n\n const byId = new Map(graph.nodes.map((n) => [n.id, n] as const));\n const grouped = new Map<string, Unknown[]>();\n for (const u of unknowns) {\n const list = grouped.get(u.from);\n if (list) list.push(u);\n else grouped.set(u.from, [u]);\n }\n\n // Only sites whose node still exists; pre-rank by centrality so the exact\n // (bounded) impact pass runs on the most consequential candidates first.\n const candidates: { node: GraphNode; refs: Unknown[]; total: number }[] = [];\n for (const [from, refs] of grouped) {\n const node = byId.get(from);\n if (!node) continue;\n candidates.push({ node, refs, total: refs.reduce((n, r) => n + r.count, 0) });\n }\n candidates.sort(\n (a, b) => b.node.importance - a.node.importance || a.node.id.localeCompare(b.node.id),\n );\n\n const scored: Site[] = candidates.slice(0, IMPACT_CANDIDATE_CAP).map((cand) => {\n const impact = impactOf(graph, cand.node.id);\n return {\n ...cand,\n blastRadius: impact.affected.length,\n direct: impact.direct,\n transitive: impact.transitive,\n };\n });\n\n scored.sort(\n (a, b) =>\n b.blastRadius - a.blastRadius ||\n b.node.importance - a.node.importance ||\n b.total - a.total ||\n a.node.id.localeCompare(b.node.id),\n );\n\n return {\n sites: scored.slice(0, limit),\n totalSites: candidates.length,\n capped: candidates.length > IMPACT_CANDIDATE_CAP,\n };\n}\n\nfunction fmtRef(r: Unknown): string {\n const times = r.count > 1 ? ` ×${r.count}` : '';\n const kind = r.kind === 'call' ? '' : ` (${r.kind})`;\n return `${r.name}${kind}${times}`;\n}\n\nfunction pad(s: string, n: number): string {\n return s.padStart(n, ' ');\n}\n","import * as fs from 'node:fs';\nimport { Command } from 'commander';\nimport { defaultGraphPath } from '../engine/artifacts.js';\nimport { serveStdio, createServer, GraphSource, type ServeOptions } from '../mcp/server.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { rootOf } from './util.js';\nimport { CliError, ExitCode } from '../util/exit.js';\nimport { c, info } from '../util/output.js';\n\n/**\n * `vg serve` (VG-CLI-SPEC §3.6) — a LOCAL MCP server over the map. Default\n * transport is stdio (what assistants spawn); `--http` exposes a stateless\n * streamable-HTTP endpoint for local browser/shared hosts. Fully offline,\n * read-only tools only. Independent of Vibgrate's hosted cloud MCP.\n *\n * The map auto-refreshes: tool calls run a cheap freshness probe and trigger\n * an incremental in-process rebuild when the working tree drifted, so the AI\n * always queries an up-to-date graph (see mcp/server.ts). `--no-refresh`\n * pins serving to the map as built; a custom `--graph` implies it.\n */\nexport function registerServe(program: Command): void {\n const cmd = program\n .command('serve')\n .description('start Vibgrate AI Context — local-first MCP serving your code map, drift & version-correct docs to your AI')\n .option('--http', 'serve over streamable HTTP instead of stdio')\n .option('--port <n>', 'port for --http', '7437')\n .option('--host <h>', 'host for --http', '127.0.0.1')\n .option('--savings', 'record local, counts-only usage savings (opt-in; off by default)')\n .option('--dedup', \"collapse a node's heavy relation lists on repeat reads within a session (opt-in; saves tokens)\")\n .option('--no-refresh', 'serve the map as built — skip the auto-rebuild when files change')\n .action(async function (this: Command, opts: { http?: boolean; port?: string; host?: string; savings?: boolean; dedup?: boolean; refresh?: boolean }) {\n const global = readGlobal(this);\n const root = rootOf(global);\n const graphPath = global.graph ?? defaultGraphPath(root);\n // A custom --graph is an explicit artifact — never rebuild over it.\n const refresh = opts.refresh !== false && !global.graph;\n const serveOpts: ServeOptions = {\n savings: opts.savings === true,\n local: global.local === true,\n dedup: opts.dedup === true,\n refresh,\n };\n\n if (!fs.existsSync(graphPath)) {\n throw new CliError(\n `no map found at ${graphPath} — run \\`vg\\` to build one first`,\n ExitCode.NOT_FOUND,\n );\n }\n\n const freshness = refresh ? 'auto-refresh' : 'as built';\n if (opts.http) {\n await serveHttp(graphPath, opts.host ?? '127.0.0.1', Number(opts.port) || 7437, serveOpts, freshness);\n } else {\n // stdio: NOTHING may go to stdout except the protocol stream.\n info(c.dim(`vg · MCP server on stdio (read-only, ${freshness}). Connect your assistant to this process.`));\n await serveStdio(graphPath, serveOpts);\n }\n });\n applyGlobalOptions(cmd);\n}\n\nasync function serveHttp(graphPath: string, host: string, port: number, opts: ServeOptions, freshness: string): Promise<void> {\n const { createServer: createHttp } = await import('node:http');\n const { StreamableHTTPServerTransport } = await import(\n '@modelcontextprotocol/sdk/server/streamableHttp.js'\n );\n\n // One graph source for the whole process: the parsed graph, hot-reload state,\n // and refresh debounce live across requests (re-parsing per request would be\n // wasteful and would probe freshness on every call).\n const source = new GraphSource(graphPath, opts.refresh !== false);\n\n const httpServer = createHttp(async (req, res) => {\n if (req.url !== '/mcp') {\n res.writeHead(404).end('not found');\n return;\n }\n try {\n // Stateless: a fresh server+transport per request (no session state) —\n // simple and robust for a local single-user endpoint. (Per-request, so\n // `--dedup` only accumulates within stdio sessions, not across HTTP calls.)\n const transport = new StreamableHTTPServerTransport({ sessionIdGenerator: undefined });\n const server = createServer(source, opts);\n res.on('close', () => {\n void transport.close();\n void server.close();\n });\n await server.connect(transport);\n await transport.handleRequest(req, res);\n } catch (err) {\n if (!res.headersSent) res.writeHead(500).end('internal error');\n info(c.red(`vg serve: request error: ${(err as Error).message}`));\n }\n });\n\n await new Promise<void>((resolve) => httpServer.listen(port, host, resolve));\n info(c.dim(`vg · MCP server on http://${host}:${port}/mcp (read-only, local, ${freshness})`));\n // Keep the process alive until killed.\n await new Promise<never>(() => {});\n}\n","import { Command } from 'commander';\nimport { loadGraph } from '../engine/load.js';\nimport { ASSISTANTS, assistantById, detectServeLaunch, installAssistant, uninstallAssistant, writeNavigationConfig } from '../install/registry.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { rootOf } from './util.js';\nimport { CliError, ExitCode, usageError } from '../util/exit.js';\nimport { c, info, json } from '../util/output.js';\n\nconst SMALL_REPO_FILES = 150;\n\n/**\n * `vg install <tool…>` (VG-CLI-SPEC §3.7) — wire vg into AI assistants: a skill,\n * an advisory (opt-out) nudge, and an MCP registration where supported.\n * Idempotent; repo-local (the team-shareable default). On small repos the nudge\n * honestly says searching is fine.\n */\nexport function registerInstall(program: Command): void {\n const install = program\n .command('install')\n .description('add vg to your AI assistant(s): skill + MCP + advisory nudge')\n .argument('[tools...]', `assistant ids: ${ASSISTANTS.map((a) => a.id).join(', ')}`)\n .option('--all', 'install for every supported assistant')\n .option('--list', 'show the support matrix and exit')\n .option('--no-hook', 'skip the advisory nudge')\n .action(function (this: Command, tools: string[], opts: { all?: boolean; list?: boolean; hook?: boolean }) {\n const global = readGlobal(this);\n const root = rootOf(global);\n\n if (opts.list) {\n if (global.json) {\n json(ASSISTANTS.map((a) => ({ id: a.id, label: a.label, mcp: !!a.mcp, skill: !!a.skill, nudge: !!a.nudge })));\n } else {\n info(`${c.cyan('vg install')} · supported assistants`);\n const pad = Math.max(...ASSISTANTS.map((a) => a.id.length)) + 2;\n for (const a of ASSISTANTS) {\n info(` ${c.bold(a.id.padEnd(pad))} ${a.label} ${c.dim(`mcp:${a.mcp ? '✓' : '—'} skill:${a.skill ? '✓' : '—'} nudge:${a.nudge ? '✓' : '—'}`)}`);\n }\n }\n return;\n }\n\n const targets = opts.all ? ASSISTANTS : tools.map(resolve);\n if (targets.length === 0) throw usageError('name an assistant (e.g. `vg install claude`) or use --all / --list');\n\n const graph = loadGraph(root, global.graph);\n const fileCount = graph ? graph.nodes.filter((n) => n.kind === 'file').length : 0;\n const smallRepo = graph !== null && fileCount > 0 && fileCount < SMALL_REPO_FILES;\n\n // Detect once — every target registers the same launch command.\n const launch = detectServeLaunch();\n const results = targets.map((a) => ({ id: a.id, ...installAssistant(a, { root, hook: opts.hook, smallRepo, launch }) }));\n // Write the deferred-loading navigation config once (P3): a client-side\n // loading config for Claude-API agents that support defer_loading — the\n // server tool set is unchanged.\n const navConfig = writeNavigationConfig(root);\n\n if (global.json) {\n json({ root, smallRepo, navConfig, launch: { command: launch.command, args: launch.args, note: launch.note ?? null }, results });\n return;\n }\n for (const r of results) {\n info(`${c.green('✔')} ${c.bold(r.id)} — wrote ${r.wrote.join(', ')}${r.skipped.length ? c.dim(` (skipped ${r.skipped.join(', ')})`) : ''}`);\n }\n if (launch.note && results.some((r) => r.note)) info(`${c.yellow('!')} ${launch.note}`);\n if (smallRepo) info(c.dim(` note: small repo (${fileCount} files) — nudge says searching is fine; vg is still used for impact/tests`));\n info(c.dim(` wrote ${navConfig} — deferred-loading config for Claude-API agents (lower per-step token cost)`));\n info(c.dim(' run `vg serve` is wired via MCP; build the map with `vg` if you have not yet'));\n });\n applyGlobalOptions(install);\n\n const uninstall = program\n .command('uninstall')\n .description('remove vg from an AI assistant')\n .argument('<tools...>', 'assistant ids')\n .option('--purge', 'also delete the skill file')\n .action(function (this: Command, tools: string[], opts: { purge?: boolean }) {\n const global = readGlobal(this);\n const root = rootOf(global);\n const results = tools.map(resolve).map((a) => ({ id: a.id, removed: uninstallAssistant(a, root, !!opts.purge) }));\n if (global.json) {\n json({ root, results });\n return;\n }\n for (const r of results) {\n info(`${c.green('✔')} ${c.bold(r.id)} — removed ${r.removed.length ? r.removed.join(', ') : c.dim('nothing (not installed)')}`);\n }\n });\n applyGlobalOptions(uninstall);\n}\n\nfunction resolve(id: string) {\n const a = assistantById(id);\n if (!a) {\n const near = ASSISTANTS.filter(\n (x) => x.id.startsWith(id) || id.startsWith(x.id) || x.id.includes(id) || x.label.toLowerCase().includes(id.toLowerCase()),\n ).map((x) => x.id);\n const hint = near.length ? ` Did you mean: ${near.join(', ')}?` : '';\n throw new CliError(\n `unknown assistant \"${id}\".${hint} Supported: ${ASSISTANTS.map((x) => x.id).join(', ')} (see \\`vg install --list\\`)`,\n ExitCode.USAGE_ERROR,\n );\n }\n return a;\n}\n","import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { execFileSync } from 'node:child_process';\nimport { Command } from 'commander';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { rootOf } from './util.js';\nimport { CliError, ExitCode } from '../util/exit.js';\nimport { c, info } from '../util/output.js';\n\n/**\n * `vg share` (VG-CLI-SPEC §3.8) — make the map committable + self-updating for\n * the team. Installs:\n * - a pre-commit hook that rebuilds and stages `graph.json` *only when it\n * changed* (deterministic, no LLM → no token burn, no churn on no-op commits);\n * - a deterministic merge driver: on conflict it rebuilds the graph from the\n * merged code (the graph is a pure function of code) instead of corrupting\n * JSON with a naive union;\n * - `.vibgrate/.gitignore` keeping `cache/` and volatile artifacts out of git\n * while committing the stable `graph.json` (prompt-cache safe).\n */\n\nconst HOOK_BEGIN = '# vg:begin';\nconst HOOK_END = '# vg:end';\n\nexport function registerShare(program: Command): void {\n const cmd = program\n .command('share')\n .description('make the map committable + auto-updating for your team (git)')\n .option('--undo', 'reverse what `vg share` installed')\n .option('--reports', 'also commit graph.html / GRAPH_REPORT.md (default: gitignored)')\n .action(function (this: Command, opts: { undo?: boolean; reports?: boolean }) {\n const global = readGlobal(this);\n const root = rootOf(global);\n const gitDir = path.join(root, '.git');\n if (!fs.existsSync(gitDir)) {\n throw new CliError('not a git repository — run `vg share` inside a git repo', ExitCode.USAGE_ERROR);\n }\n\n if (opts.undo) {\n undo(root);\n info(`${c.cyan('vg share')} ${c.dim('--undo')} · removed hooks, merge driver, and attributes`);\n return;\n }\n\n writeVibgrateGitignore(root, !!opts.reports);\n writeGitAttributes(root);\n configureMergeDriver(root);\n installPreCommitHook(root);\n\n info(`${c.cyan('vg share')} · the map is now committable + auto-updating`);\n info(` ${c.green('✔')} .vibgrate/.gitignore (cache + volatile artifacts ignored, graph.json committed)`);\n info(` ${c.green('✔')} pre-commit hook (rebuilds + stages graph.json only when it changed)`);\n info(` ${c.green('✔')} deterministic merge driver for .vibgrate/graph.json (rebuild on conflict)`);\n info(c.dim(' commit .vibgrate/graph.json so teammates inherit the map on pull'));\n });\n applyGlobalOptions(cmd);\n}\n\nfunction writeVibgrateGitignore(root: string, reports: boolean): void {\n const dir = path.join(root, '.vibgrate');\n fs.mkdirSync(dir, { recursive: true });\n const lines = ['# Managed by `vg share` — keep graph.json committed, ignore the rest', 'cache/', 'facts.jsonl'];\n if (!reports) lines.push('graph.html', 'GRAPH_REPORT.md');\n fs.writeFileSync(path.join(dir, '.gitignore'), `${lines.join('\\n')}\\n`);\n}\n\nfunction writeGitAttributes(root: string): void {\n const file = path.join(root, '.gitattributes');\n const line = '.vibgrate/graph.json merge=vg';\n let content = fs.existsSync(file) ? fs.readFileSync(file, 'utf8') : '';\n if (!content.split('\\n').some((l) => l.trim() === line)) {\n content = content.length ? `${content.replace(/\\s*$/, '')}\\n${line}\\n` : `${line}\\n`;\n fs.writeFileSync(file, content);\n }\n}\n\nfunction configureMergeDriver(root: string): void {\n // The graph is a pure function of code, so the correct merge is a rebuild.\n git(root, ['config', 'merge.vg.name', 'vg deterministic graph rebuild']);\n git(root, ['config', 'merge.vg.driver', 'vg build >/dev/null 2>&1; cp .vibgrate/graph.json %A']);\n}\n\nfunction installPreCommitHook(root: string): void {\n const hooksDir = hookDir(root);\n fs.mkdirSync(hooksDir, { recursive: true });\n const file = path.join(hooksDir, 'pre-commit');\n const block = [\n HOOK_BEGIN,\n 'if command -v vg >/dev/null 2>&1; then',\n ' vg build >/dev/null 2>&1 || true',\n ' git add .vibgrate/graph.json >/dev/null 2>&1 || true',\n 'fi',\n HOOK_END,\n ].join('\\n');\n\n let content = fs.existsSync(file) ? fs.readFileSync(file, 'utf8') : '#!/bin/sh\\n';\n const re = new RegExp(`${escapeRe(HOOK_BEGIN)}[\\\\s\\\\S]*?${escapeRe(HOOK_END)}`);\n if (re.test(content)) content = content.replace(re, block);\n else content = `${content.replace(/\\s*$/, '')}\\n\\n${block}\\n`;\n if (!content.startsWith('#!')) content = `#!/bin/sh\\n${content}`;\n fs.writeFileSync(file, content);\n fs.chmodSync(file, 0o755);\n}\n\nfunction undo(root: string): void {\n // Remove hook block.\n const hookFile = path.join(hookDir(root), 'pre-commit');\n if (fs.existsSync(hookFile)) {\n const re = new RegExp(`\\\\n*${escapeRe(HOOK_BEGIN)}[\\\\s\\\\S]*?${escapeRe(HOOK_END)}\\\\n*`);\n const next = fs.readFileSync(hookFile, 'utf8').replace(re, '\\n');\n if (next.trim() === '#!/bin/sh') fs.rmSync(hookFile);\n else fs.writeFileSync(hookFile, next);\n }\n // Remove .gitattributes line.\n const attr = path.join(root, '.gitattributes');\n if (fs.existsSync(attr)) {\n const next = fs\n .readFileSync(attr, 'utf8')\n .split('\\n')\n .filter((l) => l.trim() !== '.vibgrate/graph.json merge=vg')\n .join('\\n');\n fs.writeFileSync(attr, next);\n }\n // Drop git config (ignore errors if absent).\n try {\n git(root, ['config', '--remove-section', 'merge.vg']);\n } catch {\n /* section may not exist */\n }\n}\n\nfunction hookDir(root: string): string {\n // Respect a configured hooks path (e.g. husky) when set.\n try {\n const configured = git(root, ['config', '--get', 'core.hooksPath']).trim();\n if (configured) return path.resolve(root, configured);\n } catch {\n /* not set */\n }\n return path.join(root, '.git', 'hooks');\n}\n\nfunction git(root: string, args: string[]): string {\n return execFileSync('git', args, { cwd: root, encoding: 'utf8' });\n}\n\nfunction escapeRe(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import * as fs from 'node:fs';\nimport { Command } from 'commander';\nimport { buildGraph } from '../engine/build.js';\nimport { serializeGraph } from '../engine/serialize.js';\nimport { queryGraph } from '../engine/query.js';\nimport { discover } from '../engine/discover.js';\nimport { resolveLimits, type ResourceLimits } from '../engine/limits.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { rootOf } from './util.js';\nimport { c, info, json } from '../util/output.js';\nimport type { VgGraph } from '../schema.js';\n\n/**\n * `vg benchmark` (VG-ENGINE-TEARDOWN §6) — reproducible, cache-aware,\n * honest-estimate benchmark on the current repo:\n * - cold vs incremental build time, plus throughput (files/s, MB/s);\n * - memory: peak RSS/heap sampled across the cold build, heap retained by\n * the loaded graph, serialized artifact size (all labelled approximate —\n * GC timing and OS accounting make them indicative, not exact);\n * - determinism (two pinned builds must be byte-identical);\n * - token reduction: vg's context block vs a grep/read baseline, per question;\n * - the effective resource limits (VG_MAX_FILE_BYTES etc.) the run built under.\n *\n * Token figures are clearly-labelled estimates (~4 chars/token), scaling with\n * repo size — never a hero number.\n */\nconst PIN = '2020-01-01T00:00:00.000Z';\n\nexport interface BenchmarkResult {\n repo: { files: number; nodes: number; edges: number };\n build: { coldMs: number; incrementalMs: number; reusedOnWarm: number };\n throughput: { corpusBytes: number; filesPerSec: number; mbPerSec: number };\n memory: {\n baselineRssMb: number;\n peakRssMb: number;\n peakHeapMb: number;\n retainedHeapMb: number;\n graphJsonBytes: number;\n bytesPerNode: number;\n note: string;\n };\n limits: ResourceLimits;\n determinism: { byteIdentical: boolean };\n tokenReduction: {\n questions: { question: string; vgTokens: number; baselineTokens: number; ratio: number }[];\n aggregateRatio: number;\n note: string;\n };\n}\n\nexport function registerBenchmark(program: Command): void {\n const cmd = program\n .command('benchmark')\n .description('reproducible build + memory + token-reduction benchmark (honest estimates)')\n .option('--budget <n>', 'token budget for vg answers', '2000')\n .action(async function (this: Command, opts: { budget?: string }) {\n const global = readGlobal(this);\n const root = rootOf(global);\n const budget = Number(opts.budget) || 2000;\n const result = await runBenchmarkSuite(root, budget);\n\n if (global.json) {\n json(result);\n return;\n }\n\n const { repo, build, throughput, memory, determinism, tokenReduction } = result;\n info(`${c.cyan('vg benchmark')} · ${repo.files} files · ${repo.nodes} nodes`);\n info(` build cold ${build.coldMs.toFixed(0)}ms · incremental ${build.incrementalMs.toFixed(0)}ms (reused ${build.reusedOnWarm})`);\n info(` speed ${throughput.filesPerSec.toFixed(0)} files/s · ${throughput.mbPerSec.toFixed(1)} MB/s (cold, ${mb(throughput.corpusBytes).toFixed(1)} MB corpus)`);\n info(\n ` memory peak rss ${memory.peakRssMb.toFixed(0)} MB (baseline ${memory.baselineRssMb.toFixed(0)} MB) · ` +\n `peak heap ${memory.peakHeapMb.toFixed(0)} MB · graph retains ~${memory.retainedHeapMb.toFixed(0)} MB ${c.dim('(approximate)')}`,\n );\n info(` graph ${mb(memory.graphJsonBytes).toFixed(1)} MB serialized · ${memory.bytesPerNode.toFixed(0)} B/node`);\n info(` determinism ${determinism.byteIdentical ? c.green('byte-identical ✓') : c.red('NON-DETERMINISTIC ✗')}`);\n if (tokenReduction.questions.length) {\n info(` token reduction vs grep/read baseline (${c.dim('estimates')}):`);\n for (const q of tokenReduction.questions) {\n info(` ${pad(`${q.ratio.toFixed(1)}×`, 6)} ${c.dim(`vg ${q.vgTokens} vs ~${q.baselineTokens}`)} \"${q.question}\"`);\n }\n info(` ${c.bold(`aggregate ≈ ${tokenReduction.aggregateRatio.toFixed(1)}× fewer tokens`)} ${c.dim('(honest estimate, scales with repo size)')}`);\n }\n });\n applyGlobalOptions(cmd);\n}\n\n/**\n * The benchmark body, exported for tests. Timings and memory figures are\n * environment-dependent by nature (the graph artifact stays deterministic; the\n * measurements of producing it are not).\n */\nexport async function runBenchmarkSuite(root: string, budget: number): Promise<BenchmarkResult> {\n // 1. cold build (no cache), with peak-memory sampling across it.\n const baseline = process.memoryUsage();\n const sampler = startMemorySampler();\n const t0 = now();\n const cold = await buildGraph({ root, generatedAt: PIN, noCache: true });\n const coldMs = now() - t0;\n\n // 2. incremental build (warm cache)\n const t1 = now();\n const warm = await buildGraph({ root, generatedAt: PIN });\n const warmMs = now() - t1;\n\n // 3. determinism: two pinned builds byte-identical\n const a = serializeGraph(cold.graph);\n const b = serializeGraph((await buildGraph({ root, generatedAt: PIN, noCache: true })).graph);\n const peak = sampler.stop();\n const deterministic = a === b;\n\n const after = process.memoryUsage();\n const corpusBytes = cold.fileStats.reduce((s, f) => s + f.size, 0);\n const graphJsonBytes = Buffer.byteLength(a, 'utf8');\n const nodes = cold.graph.meta.counts.nodes;\n\n // 4. token reduction vs a grep/read baseline\n const questions = deriveQuestions(cold.graph);\n const fileSizes = fileSizeIndex(root);\n const perQuestion = questions.map((q) => {\n const vgTokens = queryGraph(cold.graph, q, { budget }).tokensEstimate;\n const baseTokens = grepBaselineTokens(q, fileSizes);\n return { question: q, vgTokens, baselineTokens: baseTokens, ratio: baseTokens > 0 ? round(baseTokens / Math.max(vgTokens, 1)) : 1 };\n });\n const totalVg = perQuestion.reduce((s, x) => s + x.vgTokens, 0);\n const totalBase = perQuestion.reduce((s, x) => s + x.baselineTokens, 0);\n const aggregateRatio = totalVg > 0 ? round(totalBase / totalVg) : 0;\n\n return {\n repo: { files: cold.totalFiles, nodes, edges: cold.graph.meta.counts.edges },\n build: { coldMs: round(coldMs), incrementalMs: round(warmMs), reusedOnWarm: warm.reused },\n throughput: {\n corpusBytes,\n filesPerSec: coldMs > 0 ? round((cold.totalFiles / coldMs) * 1000) : 0,\n // 6-decimal precision: a small corpus at 3 decimals would round to 0.\n mbPerSec: coldMs > 0 ? round6((mb(corpusBytes) / coldMs) * 1000) : 0,\n },\n memory: {\n baselineRssMb: round(mb(baseline.rss)),\n peakRssMb: round(mb(Math.max(peak.rss, baseline.rss))),\n peakHeapMb: round(mb(Math.max(peak.heapUsed, baseline.heapUsed))),\n // Heap growth across the run ≈ what the loaded graphs + caches retain.\n retainedHeapMb: round(Math.max(0, mb(after.heapUsed - baseline.heapUsed))),\n graphJsonBytes,\n bytesPerNode: nodes > 0 ? round(graphJsonBytes / nodes) : 0,\n note: 'sampled at 25ms + phase boundaries; GC timing makes these approximate',\n },\n limits: resolveLimits(),\n determinism: { byteIdentical: deterministic },\n tokenReduction: { questions: perQuestion, aggregateRatio, note: 'estimates (~4 chars/token); scales with repo size' },\n };\n}\n\n/**\n * Track peak RSS / heapUsed while the build runs: a 25ms sampling interval\n * (unref'd so it never holds the process open) catches the high-water mark\n * between phase boundaries; `stop()` takes one final sample so short runs\n * that finish inside one interval still register.\n */\nfunction startMemorySampler(): { stop: () => { rss: number; heapUsed: number } } {\n let rss = 0;\n let heapUsed = 0;\n const sample = (): void => {\n const m = process.memoryUsage();\n if (m.rss > rss) rss = m.rss;\n if (m.heapUsed > heapUsed) heapUsed = m.heapUsed;\n };\n const timer = setInterval(sample, 25);\n timer.unref?.();\n return {\n stop: () => {\n clearInterval(timer);\n sample();\n return { rss, heapUsed };\n },\n };\n}\n\nfunction deriveQuestions(graph: VgGraph): string[] {\n // Deterministic, repo-derived question set: the top hub names. Reproducible\n // and meaningful without hardcoding anything repo-specific.\n return graph.nodes\n .filter((n) => n.kind !== 'file' && n.kind !== 'external')\n .sort((a, b) => b.importance - a.importance || a.qualifiedName.localeCompare(b.qualifiedName))\n .slice(0, 5)\n .map((n) => n.name);\n}\n\nfunction fileSizeIndex(root: string): { rel: string; abs: string; size: number }[] {\n return discover({ root }).map((f) => ({ rel: f.rel, abs: f.abs, size: safeSize(f.abs) }));\n}\n\nfunction grepBaselineTokens(term: string, files: { abs: string; size: number }[]): number {\n // Baseline = an agent greps for the term and reads every matching file.\n const lower = term.toLowerCase();\n let bytes = 0;\n for (const f of files) {\n if (f.size > 512 * 1024) continue; // skip huge files in the baseline\n let content = '';\n try {\n content = fs.readFileSync(f.abs, 'utf8');\n } catch {\n continue;\n }\n if (content.toLowerCase().includes(lower)) bytes += content.length;\n }\n return Math.ceil(bytes / 4);\n}\n\nfunction safeSize(abs: string): number {\n try {\n return fs.statSync(abs).size;\n } catch {\n return 0;\n }\n}\n\nfunction mb(bytes: number): number {\n return bytes / (1024 * 1024);\n}\nfunction now(): number {\n return Number(process.hrtime.bigint() / 1000n) / 1000;\n}\nfunction round(x: number): number {\n return Math.round(x * 1000) / 1000;\n}\nfunction round6(x: number): number {\n return Math.round(x * 1_000_000) / 1_000_000;\n}\nfunction pad(s: string, n: number): string {\n return s.padStart(n, ' ');\n}\n","import { execSync } from 'node:child_process';\nimport { Command } from 'commander';\nimport { resolveOne } from '../engine/lookup.js';\nimport { coveringTests, detectRunner } from '../engine/test-query.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { requireGraph, rootOf } from './util.js';\nimport { ambiguityError } from './ambiguity.js';\nimport { c, info, json } from '../util/output.js';\n\n/**\n * `vg tests <name>` (VG-CLI-SPEC §3.4) — which tests cover it, with the linkage\n * basis and confidence. `--missing` flips to untested nodes nearby; `--run`\n * prints (or `--exec` runs) the minimal command to exercise exactly those tests.\n */\nexport function registerTests(program: Command): void {\n const cmd = program\n .command('tests')\n .description('which tests cover a node (call/coverage linkage)')\n .argument('<name>', 'node to inspect')\n .option('--missing', 'show untested nodes nearby instead')\n .option('--run', 'print the command to run exactly these tests')\n .option('--exec', 'run that command')\n .option('--pick <n>', 'pick the nth candidate when ambiguous')\n .action(function (this: Command, name: string, opts: { missing?: boolean; run?: boolean; exec?: boolean; pick?: string }) {\n const global = readGlobal(this);\n const { root, graph } = requireGraph(global);\n const { node, candidates } = resolveOne(graph, name, opts.pick ? Number(opts.pick) : undefined);\n if (!node) throw ambiguityError(`\"${name}\" ${candidates.length ? 'is ambiguous' : 'not found'}`, candidates);\n\n if (opts.missing) {\n const nearby = graph.nodes\n .filter((n) => n.file === node.file && (n.kind === 'function' || n.kind === 'method') && n.tested === false)\n .sort((a, b) => b.importance - a.importance);\n if (global.json) {\n json({ file: node.file, untested: nearby.map((n) => ({ name: n.qualifiedName, line: n.span.start })) });\n return;\n }\n info(`${c.cyan('vg tests --missing')} · untested in ${node.file} (${nearby.length})`);\n for (const n of nearby) info(` ${c.yellow('○')} ${n.qualifiedName} ${c.dim(`:${n.span.start}`)}`);\n return;\n }\n\n const covers = coveringTests(graph, node);\n const testFiles = covers.filter((c) => c.basis === 'call').map((c) => c.file);\n\n if (opts.run || opts.exec) {\n const runner = detectRunner(rootOf(global), node.lang);\n const command = runner.command(testFiles);\n if (opts.exec) {\n info(c.dim(`$ ${command}`));\n execSync(command, { cwd: root, stdio: 'inherit' });\n return;\n }\n if (global.json) json({ runner: runner.name, command, testFiles });\n else info(command);\n return;\n }\n\n if (global.json) {\n json({ node: node.qualifiedName, tested: node.tested, coverage: node.coverage ?? null, covers });\n return;\n }\n\n info(`${c.cyan('vg tests')} · ${c.bold(node.qualifiedName)} ${node.tested ? c.green('tested') : c.yellow('untested')}`);\n if (typeof node.coverage === 'number') info(c.dim(` line coverage ${(node.coverage * 100).toFixed(0)}%`));\n if (covers.length === 0) {\n info(c.dim(' no covering tests found'));\n return;\n }\n for (const t of covers) {\n info(` ${c.green('✔')} ${t.file} ${c.dim(`(${t.basis}, conf ${t.confidence.toFixed(2)})`)}`);\n }\n });\n applyGlobalOptions(cmd);\n}\n","import { Command } from 'commander';\nimport { resolveOne } from '../engine/lookup.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { requireGraph } from './util.js';\nimport { ambiguityError } from './ambiguity.js';\nimport { c, info, json } from '../util/output.js';\n\n/**\n * `vg facts <name>` (VG-CLI-SPEC §5) — the deterministic open facts for a node,\n * epistemic-typed (declared/static → Observed/Derived; never learned/Hypothesized).\n * Facts are derived with `--deep`.\n */\nexport function registerFacts(program: Command): void {\n const cmd = program\n .command('facts')\n .description('the deterministic facts for a node (contract / invariant / characterization)')\n .argument('<name>', 'node to inspect')\n .option('--pick <n>', 'pick the nth candidate when ambiguous')\n .action(function (this: Command, name: string, opts: { pick?: string }) {\n const global = readGlobal(this);\n const { graph } = requireGraph(global);\n const { node, candidates } = resolveOne(graph, name, opts.pick ? Number(opts.pick) : undefined);\n if (!node) throw ambiguityError(`\"${name}\" ${candidates.length ? 'is ambiguous' : 'not found'}`, candidates);\n\n if (!graph.facts) {\n if (global.json) json({ node: node.qualifiedName, facts: [], note: 'facts require a --deep build' });\n else info(`${c.cyan('vg facts')} · run ${c.bold('vg --deep')} to derive facts (none in this map)`);\n return;\n }\n\n const facts = graph.facts.filter((f) => f.subjectIds.includes(node.id));\n if (global.json) {\n json({ node: node.qualifiedName, facts });\n return;\n }\n info(`${c.cyan('vg facts')} · ${c.bold(node.qualifiedName)} (${facts.length})`);\n if (facts.length === 0) {\n info(c.dim(' no facts derived for this node'));\n return;\n }\n for (const f of facts) {\n info(` ${c.bold(f.kind)} ${c.dim(`[${f.derivedBy}→${f.confidence}]`)}: ${summarize(f.predicate)}`);\n }\n });\n applyGlobalOptions(cmd);\n}\n\nfunction summarize(predicate: unknown): string {\n if (predicate && typeof predicate === 'object') {\n const o = predicate as Record<string, unknown>;\n if (typeof o.signature === 'string') return o.signature;\n if (typeof o.guard === 'string') return `guards: ${o.guard}`;\n if (Array.isArray(o.pinnedBy)) return `pinned by ${(o.pinnedBy as string[]).join(', ')}`;\n }\n return JSON.stringify(predicate);\n}\n","import { Command } from 'commander';\nimport { resolveOne } from '../engine/lookup.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { requireGraph } from './util.js';\nimport { ambiguityError } from './ambiguity.js';\nimport { FREE_PACK } from '../grounding/pack.js';\nimport { c, info, json } from '../util/output.js';\n\n/**\n * `vg guide <name>` (VG-CLI-SPEC §5) — cited relevant standards/practices for a\n * node from the free knowledge pack (own content + OWASP/CWE/NIST). Honest about\n * recommended vs conjectured, with citations.\n */\nexport function registerGuide(program: Command): void {\n const cmd = program\n .command('guide')\n .description('cited relevant standards/practices for a node (free pack)')\n .argument('<name>', 'node to inspect')\n .option('--pick <n>', 'pick the nth candidate when ambiguous')\n .action(function (this: Command, name: string, opts: { pick?: string }) {\n const global = readGlobal(this);\n const { graph } = requireGraph(global);\n const { node, candidates } = resolveOne(graph, name, opts.pick ? Number(opts.pick) : undefined);\n if (!node) throw ambiguityError(`\"${name}\" ${candidates.length ? 'is ambiguous' : 'not found'}`, candidates);\n\n const entries = new Map(FREE_PACK.entries.map((e) => [e.id, e]));\n const grounding = (graph.grounding ?? []).filter((g) => g.src === node.id);\n\n if (global.json) {\n json({\n node: node.qualifiedName,\n guidance: grounding.map((g) => ({\n kind: g.kind,\n rationale: g.rationale,\n confidence: g.confidence,\n topic: entries.get(g.packEntryId)?.topic ?? g.packEntryId,\n summary: entries.get(g.packEntryId)?.summary ?? '',\n citation: g.citation,\n })),\n });\n return;\n }\n\n info(`${c.cyan('vg guide')} · ${c.bold(node.qualifiedName)} (${grounding.length})`);\n if (grounding.length === 0) {\n info(c.dim(' no matching guidance (no security-relevant signals detected)'));\n return;\n }\n for (const g of grounding) {\n const entry = entries.get(g.packEntryId);\n const tag = g.rationale === 'recommended' ? c.green(g.kind) : c.yellow(g.kind);\n info(` ${tag} ${c.dim(`(${g.rationale}, conf ${g.confidence.toFixed(2)})`)}`);\n if (entry) {\n info(` ${entry.summary}`);\n info(c.dim(` ${entry.citation.title} — ${entry.citation.url}`));\n }\n }\n });\n applyGlobalOptions(cmd);\n}\n","import { Command } from 'commander';\nimport { buildVersionTimelines, findPackageAnyEcosystem, gitHistoryAvailable } from '../core-open/index.js';\nimport { readScanArtifact } from '../mcp/vuln-data.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { rootOf } from './util.js';\nimport { CliError, ExitCode } from '../util/exit.js';\nimport { c, info, json } from '../util/output.js';\n\n/**\n * `vg why <package>` — who introduced a dependency, and any open vulnerabilities\n * it carries, from git history. Thin blame/why surface over the Phase-0 version\n * timeline plus the last scan's attributed vulnerability data. Offline + local.\n */\nexport function registerWhy(program: Command): void {\n const cmd = program\n .command('why')\n .description('who introduced a dependency (and any open vulnerabilities), from git history')\n .argument('<package>', 'package name to explain')\n .action(async function (this: Command, pkg: string) {\n const global = readGlobal(this);\n const root = rootOf(global);\n\n if (!(await gitHistoryAvailable(root))) {\n throw new CliError(\n 'git history is required for `vg why` (not a git repository, or git is unavailable)',\n ExitCode.USAGE_ERROR,\n );\n }\n\n const timelines = await buildVersionTimelines(root);\n const pt = timelines ? findPackageAnyEcosystem(timelines, pkg) ?? null : null;\n\n // Open vulnerabilities for this package, from the last `vg scan --vulns`.\n const artifact = readScanArtifact(root);\n const vulnPkg = artifact?.extended?.vulnerabilities?.packages.find((p) => p.package === pkg) ?? null;\n\n if (global.json) {\n json({ package: pkg, history: pt?.changes ?? [], vulnerabilities: vulnPkg?.advisories ?? [] });\n return;\n }\n\n info(`${c.cyan('vg why')} ${c.bold(pkg)}`);\n if (!pt || pt.changes.length === 0) {\n info(c.dim(' no git history found for this package (npm lockfile). It may not be an npm dependency,'));\n info(c.dim(' or the lockfile predates its introduction.'));\n } else {\n for (let i = 0; i < pt.changes.length; i++) {\n const ch = pt.changes[i];\n const verb = i === 0 ? c.green('added') : c.yellow('→');\n const date = ch.commit.date.slice(0, 10);\n info(\n ` ${verb} ${c.bold(ch.version)} ${c.dim(`${ch.commit.shortSha} ${date} ${ch.commit.authorName}`)}`,\n );\n info(c.dim(` ${ch.commit.subject}`));\n }\n }\n\n if (vulnPkg && vulnPkg.advisories.length) {\n info('');\n info(c.red(` ${vulnPkg.advisories.length} open vulnerabilit${vulnPkg.advisories.length === 1 ? 'y' : 'ies'} at ${pkg}@${vulnPkg.version}:`));\n for (const adv of vulnPkg.advisories) {\n const cve = adv.aliases.find((a) => a.startsWith('CVE-'));\n const idLabel = cve && cve !== adv.id ? `${adv.id} (${cve})` : adv.id;\n const cvss = adv.cvss != null ? ` cvss ${adv.cvss}` : '';\n const fixed = adv.fixedVersions.length ? ` — fixed in ${adv.fixedVersions.join(', ')}` : ' — no fix available';\n info(` ${severityTag(adv.severity)} ${idLabel}${c.dim(cvss)}${c.dim(fixed)}`);\n if (adv.introduced) {\n const exposure = adv.exposureDays != null ? `, ${adv.exposureDays}d exposed` : '';\n info(\n c.dim(\n ` introduced by ${adv.introduced.authorName} in ${adv.introduced.shortSha} on ${adv.introduced.date.slice(0, 10)}${exposure}`,\n ),\n );\n }\n }\n } else if (artifact?.extended?.vulnerabilities) {\n info('');\n info(c.green(' no known vulnerabilities for this package in the last scan'));\n } else {\n info('');\n info(c.dim(' run `vg scan --vulns` to check this package for known vulnerabilities'));\n }\n });\n applyGlobalOptions(cmd);\n}\n\nfunction severityTag(severity: string): string {\n switch (severity) {\n case 'critical':\n return c.red('critical');\n case 'high':\n return c.red('high');\n case 'moderate':\n return c.yellow('moderate');\n case 'low':\n return c.dim('low');\n default:\n return c.dim(severity);\n }\n}\n","import { Command } from 'commander';\nimport {\n buildVersionTimelines,\n findPackageAnyEcosystem,\n findVersionCrossings,\n gitHistoryAvailable,\n normalizeConstraint,\n versionSatisfies,\n type VersionCrossing,\n} from '../core-open/index.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { rootOf } from './util.js';\nimport { CliError, ExitCode } from '../util/exit.js';\nimport { c, info, json } from '../util/output.js';\n\n/**\n * `vg bisect <package> <constraint>` — pinpoint the commit where a dependency\n * crossed a version line, from git history. Where `vg why` narrates every version\n * transition, `bisect` answers a targeted question: \"when did we cross *this*\n * line\" — e.g. when a vulnerable dependency was finally patched past the fixed\n * version, or when a major was adopted. A thin surface over the same offline,\n * no-checkout version timeline that attribution uses. Offline + local.\n *\n * `--assert` turns it into a CI gate: exit non-zero when the current resolved\n * version does NOT satisfy the constraint (the fix has not been adopted yet).\n */\nexport function registerBisect(program: Command): void {\n const cmd = program\n .command('bisect')\n .description('pinpoint the commit where a dependency crossed a version line, from git history')\n .argument('<package>', 'package name to bisect')\n .argument('<constraint>', 'target version or semver range (a bare version means \">=\" that version)')\n .option('--assert', 'exit non-zero when the current version does not satisfy the constraint (CI gate)')\n .action(async function (this: Command, pkg: string, constraintArg: string) {\n const global = readGlobal(this);\n const opts = this.opts<{ assert?: boolean }>();\n const root = rootOf(global);\n\n if (!(await gitHistoryAvailable(root))) {\n throw new CliError(\n 'git history is required for `vg bisect` (not a git repository, or git is unavailable)',\n ExitCode.USAGE_ERROR,\n );\n }\n\n const range = normalizeConstraint(constraintArg);\n if (!range) {\n throw new CliError(\n `not a valid version or semver range: ${constraintArg}`,\n ExitCode.USAGE_ERROR,\n );\n }\n\n const timelines = await buildVersionTimelines(root);\n const pt = timelines ? findPackageAnyEcosystem(timelines, pkg) ?? null : null;\n\n // No history for this package (not an npm/pip/... dependency, or the\n // lockfile predates it) — distinct from \"found, but never crossed\".\n if (!pt || pt.changes.length === 0) {\n if (global.json) {\n json({ package: pkg, constraint: range, found: false, satisfiedNow: false, crossings: [] });\n return;\n }\n info(`${c.cyan('vg bisect')} ${c.bold(pkg)} ${c.dim(range)}`);\n info(c.dim(' no git history found for this package (lockfile). It may not be a resolved'));\n info(c.dim(' dependency in a supported ecosystem, or the lockfile predates its introduction.'));\n throw new CliError(`no version history for ${pkg}`, ExitCode.NOT_FOUND);\n }\n\n const crossings = findVersionCrossings(pt, range);\n const current = pt.changes[pt.changes.length - 1];\n const satisfiedNow = versionSatisfies(current.version, range);\n const firstEntered = crossings.find((cr) => cr.kind === 'entered') ?? null;\n\n if (global.json) {\n json({\n package: pt.name,\n ecosystem: pt.ecosystem,\n constraint: range,\n currentVersion: current.version,\n satisfiedNow,\n firstEntered,\n crossings,\n });\n } else {\n info(`${c.cyan('vg bisect')} ${c.bold(pt.name)} ${c.dim(range)}`);\n const verdict = satisfiedNow\n ? c.green(`current ${current.version} satisfies ${range}`)\n : c.yellow(`current ${current.version} does not satisfy ${range}`);\n info(` ${verdict}`);\n info('');\n\n if (!firstEntered) {\n info(c.dim(` never crossed ${range} in git history`));\n info(\n c.dim(\n ` latest in history: ${current.version} ${c.dim(`(${current.commit.shortSha} ${current.commit.date.slice(0, 10)})`)}`,\n ),\n );\n } else {\n info(` ${c.bold('first reached')} ${range}:`);\n printCrossing(firstEntered, true);\n // Surface later flips (a downgrade that left the line, a re-bump) so a\n // regression after the fix isn't silently hidden behind the first hit.\n const rest = crossings.slice(crossings.indexOf(firstEntered) + 1);\n if (rest.length) {\n info('');\n info(c.dim(` ${rest.length} later crossing${rest.length === 1 ? '' : 's'}:`));\n for (const cr of rest) printCrossing(cr, false);\n }\n }\n }\n\n if (opts.assert && !satisfiedNow) {\n throw new CliError(\n `${pt.name}@${current.version} does not satisfy ${range}`,\n ExitCode.GATE_FAILED,\n );\n }\n });\n applyGlobalOptions(cmd);\n}\n\nfunction printCrossing(cr: VersionCrossing, primary: boolean): void {\n const arrow = cr.kind === 'entered' ? c.green('→') : c.yellow('↓');\n const date = cr.commit.date.slice(0, 10);\n const from = cr.previousVersion ? c.dim(` from ${cr.previousVersion}`) : c.dim(' (added)');\n const ver = primary ? c.bold(cr.version) : cr.version;\n info(` ${arrow} ${ver}${from} ${c.dim(`${cr.commit.shortSha} ${date} ${cr.commit.authorName}`)}`);\n info(c.dim(` ${cr.commit.subject}`));\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport type { DepRecord } from './drift.js';\n\n/**\n * Enterprise standards gate (VG-LIB-SUPERSET-PLAN §8/§9 S5 / D9) — the LOCAL, committable half\n * of enterprise sovereignty that complements the hosted `enterprise_strict` rerank (S5.1).\n *\n * A team commits a `.vibgrate/standards.json` policy of BANNED packages, each pointing at the\n * APPROVED alternative + a reason. `vg drift --fail-on standards` checks the project's resolved\n * inventory against it and exits non-zero with remediation on any planted violation — so the\n * banned-→-approved rule is enforced in CI, offline, no key, no platform call.\n *\n * Pure + offline: a tolerant loader (sync fs) + a deterministic checker over the drift inventory.\n */\n\nexport interface StandardRule {\n /** Optional ecosystem scope (npm|pypi|…). When set, only that ecosystem matches. */\n ecosystem?: string;\n /** Banned package name (exact, case-insensitive). */\n name: string;\n /** The approved alternative — the remediation surfaced to the developer. */\n use?: string;\n /** Why it's banned. */\n reason?: string;\n}\n\nexport interface StandardsPolicy {\n banned: StandardRule[];\n}\n\nexport interface StandardViolation {\n ecosystem: string;\n name: string;\n installed: string | null;\n use: string | null;\n reason: string | null;\n}\n\n/** Where a committed policy lives, in precedence order. */\nexport const STANDARDS_FILES = ['.vibgrate/standards.json', 'vibgrate.standards.json'];\n\nfunction asString(v: unknown): string | undefined {\n return typeof v === 'string' && v.trim() ? v.trim() : undefined;\n}\n\n/** Tolerant parse: accepts `{ banned: [...] }` or a bare array; drops malformed rules (need a name). */\nexport function normalizeStandards(raw: unknown): StandardsPolicy {\n const list = Array.isArray(raw) ? raw : Array.isArray((raw as { banned?: unknown })?.banned) ? (raw as { banned: unknown[] }).banned : [];\n const seen = new Set<string>();\n const banned: StandardRule[] = [];\n for (const item of list) {\n if (!item || typeof item !== 'object') continue;\n const r = item as Record<string, unknown>;\n const name = asString(r.name);\n if (!name) continue;\n const ecosystem = asString(r.ecosystem)?.toLowerCase();\n const key = `${ecosystem ?? '*'}\\0${name.toLowerCase()}`;\n if (seen.has(key)) continue;\n seen.add(key);\n banned.push({ name, ...(ecosystem ? { ecosystem } : {}), ...(asString(r.use) ? { use: asString(r.use) } : {}), ...(asString(r.reason) ? { reason: asString(r.reason) } : {}) });\n }\n return { banned };\n}\n\n/** Find + load the nearest committed standards policy from `root`. Returns null if none/invalid. */\nexport function loadStandards(root: string): { policy: StandardsPolicy | null; path: string | null } {\n for (const rel of STANDARDS_FILES) {\n const p = path.join(root, rel);\n let text: string;\n try {\n text = fs.readFileSync(p, 'utf8');\n } catch {\n continue;\n }\n try {\n return { policy: normalizeStandards(JSON.parse(text)), path: p };\n } catch {\n // present but malformed JSON — surface it as a usage problem at the call site\n return { policy: null, path: p };\n }\n }\n return { policy: null, path: null };\n}\n\n/** Deterministic check of the inventory against the policy. One violation per matched dependency. */\nexport function checkStandards(policy: StandardsPolicy, records: DepRecord[]): StandardViolation[] {\n const out: StandardViolation[] = [];\n for (const r of records) {\n const rule = policy.banned.find((b) => b.name.toLowerCase() === r.name.toLowerCase() && (!b.ecosystem || b.ecosystem === r.ecosystem));\n if (rule) out.push({ ecosystem: r.ecosystem, name: r.name, installed: r.installed ?? null, use: rule.use ?? null, reason: rule.reason ?? null });\n }\n return out.sort((a, b) => a.ecosystem.localeCompare(b.ecosystem) || a.name.localeCompare(b.name));\n}\n","import { Command } from 'commander';\nimport { inventory, enrichOnline, ECOSYSTEMS } from '../engine/drift.js';\nimport { loadStandards, checkStandards, STANDARDS_FILES, type StandardViolation } from '../engine/standards.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { rootOf } from './util.js';\nimport { CliError, ExitCode } from '../util/exit.js';\nimport { c, info, json } from '../util/output.js';\n\n/**\n * `vg drift` (VG-CLI-SPEC §5) — dependency currency. Offline by default\n * (inventory + installed versions); `--online` opt-in queries the npm registry\n * for latest versions. Full CVE/EOL governance is the Vibgrate platform.\n */\nexport function registerDrift(program: Command): void {\n const cmd = program\n .command('drift')\n .description('what is outdated across dependencies (offline; --online for currency)')\n .option('--online', 'query the npm registry for latest versions (opt-in network)')\n .option('--fail-on <level>', 'exit 2 on violations — major|minor (version drift) or standards (enterprise policy)')\n .action(async function (this: Command, opts: { online?: boolean; failOn?: string }) {\n const global = readGlobal(this);\n const root = rootOf(global);\n if (opts.online && global.local) {\n throw new CliError('--online conflicts with --local (no network in local mode)', ExitCode.USAGE_ERROR);\n }\n if (opts.failOn && !['major', 'minor', 'standards'].includes(opts.failOn)) {\n throw new CliError(`--fail-on must be one of: major, minor, standards (got \"${opts.failOn}\")`, ExitCode.USAGE_ERROR);\n }\n const inv = inventory(root);\n if (opts.online && !global.local) await enrichOnline(inv.records);\n\n // Enterprise standards gate (D9/S5.2): check the inventory against the committed policy.\n let standards: { policyPath: string | null; defined: boolean; violations: StandardViolation[] } | null = null;\n if (opts.failOn === 'standards') {\n const loaded = loadStandards(root);\n if (loaded.path && !loaded.policy) {\n throw new CliError(`standards policy at ${loaded.path} is not valid JSON`, ExitCode.USAGE_ERROR);\n }\n standards = { policyPath: loaded.path, defined: !!loaded.policy, violations: loaded.policy ? checkStandards(loaded.policy, inv.records) : [] };\n }\n\n if (global.json) {\n json(standards ? { ...inv, standards } : inv);\n } else {\n const breakdown = ECOSYSTEMS.filter((e) => inv.counts[e] > 0).map((e) => `${e} ${inv.counts[e]}`).join(' · ');\n info(`${c.cyan('vg drift')} · ${inv.counts.total} dependencies${breakdown ? ` (${breakdown})` : ''}`);\n if (opts.online) {\n const drifted = inv.records.filter((r) => r.drift && r.drift !== 'current' && r.drift !== 'unknown');\n if (drifted.length === 0) info(c.green(' all checked dependencies are current'));\n for (const r of drifted.sort((a, b) => rank(b.drift) - rank(a.drift))) {\n const tag = r.drift === 'major' ? c.red('major') : r.drift === 'minor' ? c.yellow('minor') : c.dim('patch');\n info(` ${tag} ${r.name} ${c.dim(`${r.installed} → ${r.latest}`)}`);\n }\n } else {\n info(c.dim(' offline inventory — run with --online for currency vs the npm registry'));\n info(c.dim(' CVE/EOL/governance: the Vibgrate platform (vg push)'));\n }\n if (standards) printStandards(standards);\n }\n\n if (standards && standards.violations.length) {\n throw new CliError(`${standards.violations.length} banned dependency(ies) violate standards`, ExitCode.GATE_FAILED);\n }\n if (opts.failOn && opts.failOn !== 'standards') {\n const threshold = opts.failOn === 'minor' ? 2 : 3; // minor includes major\n const bad = inv.records.filter((r) => rank(r.drift) >= threshold);\n if (bad.length) {\n throw new CliError(`${bad.length} dependency(ies) drift at/above ${opts.failOn}`, ExitCode.GATE_FAILED);\n }\n }\n });\n applyGlobalOptions(cmd);\n}\n\nfunction rank(drift?: string): number {\n return drift === 'major' ? 3 : drift === 'minor' ? 2 : drift === 'patch' ? 1 : 0;\n}\n\nfunction printStandards(s: { defined: boolean; violations: StandardViolation[] }): void {\n if (!s.defined) {\n info(c.dim(` no standards policy (${STANDARDS_FILES.join(' or ')}) — nothing to enforce`));\n return;\n }\n if (s.violations.length === 0) {\n info(c.green(' standards: no banned dependencies in use'));\n return;\n }\n info(c.red(` standards: ${s.violations.length} banned dependency(ies)`));\n for (const v of s.violations) {\n const fix = v.use ? c.dim(` → use ${v.use}`) : '';\n const why = v.reason ? c.dim(` (${v.reason})`) : '';\n info(` ${c.red('banned')} ${v.ecosystem}:${v.name}${v.installed ? c.dim(` ${v.installed}`) : ''}${fix}${why}`);\n }\n}\n","import { Command } from 'commander';\nimport { discoverModels } from '../engine/models.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { c, info, json } from '../util/output.js';\n\n/**\n * `vg models` (VG-CLI-SPEC §5) — the local-model fleet discovered on disk\n * (Ollama / LM Studio / llama.cpp gguf). Offline, no network, no launch.\n */\nexport function registerModels(program: Command): void {\n const cmd = program\n .command('models')\n .description('the local model fleet (Ollama / LM Studio / gguf), discovered offline')\n .action(function (this: Command) {\n const global = readGlobal(this);\n const models = discoverModels();\n if (global.json) {\n json({ models });\n return;\n }\n info(`${c.cyan('vg models')} · ${models.length} local model(s) discovered`);\n if (models.length === 0) {\n info(c.dim(' none found (looked in ~/.ollama, ~/.lmstudio, ~/models, ~/.cache)'));\n return;\n }\n for (const m of models) info(` ${c.bold(m.runtime.padEnd(10))} ${m.name}`);\n });\n applyGlobalOptions(cmd);\n}\n","import { Command } from 'commander';\nimport { readSavings, readUsage, type UsageReport } from '../engine/savings.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { rootOf } from './util.js';\nimport { c, info, json } from '../util/output.js';\n\n/**\n * `vg savings` (VG-DEVELOPMENT-PLAN §5) — a local, privacy-safe, honestly\n * estimated report of context tokens / $ saved vs a grep/read baseline.\n * Nothing leaves the machine. Recording is opt-in via `vg serve --savings`.\n */\nexport function registerSavings(program: Command): void {\n const cmd = program\n .command('savings')\n .description('local, privacy-safe report of tokens/$ saved vs a grep baseline (estimates)')\n .option('--days <n>', 'window in days', '30')\n .action(function (this: Command) {\n const global = readGlobal(this);\n const days = Number(this.opts().days) || 30;\n const root = rootOf(global);\n const now = Date.now();\n const report = readSavings(root, days, now);\n const usage = readUsage(root, days, now);\n\n if (global.json) {\n json({ ...report, usage });\n return;\n }\n\n info(`${c.cyan('vg savings')} · last ${days} days ${c.dim('(local, nothing left your machine)')}`);\n if (usage.totals.calls === 0) {\n info(\n c.dim(\n report.enabled\n ? ' no calls recorded yet in this window'\n : ' recording is off. Enable with `vg serve --savings`, then query via MCP.',\n ),\n );\n return;\n }\n\n // Token-savings summary — only the grep-baseline tools (query_graph / get_node).\n if (report.queries > 0) {\n info(` queries ${report.queries} · context tokens ${fmt(report.vgTokens)} (grep/read baseline ≈ ${fmt(report.baselineTokens)}) → ${report.ratio}× fewer`);\n info(` est. cost (${report.rateLabel}): $${report.estCostVg} vs $${report.estCostBaseline} → saved ≈ $${report.saved}`);\n info(c.dim(' estimates with stated assumptions (~4 chars/token; ~400 tokens/file baseline); scales with repo size.'));\n }\n\n // Per-command breakdown — every recorded tool, its outcomes, and success rate.\n printBreakdown(usage);\n });\n applyGlobalOptions(cmd);\n}\n\nfunction fmt(n: number): string {\n if (n >= 1e6) return `${(n / 1e6).toFixed(2)}M`;\n if (n >= 1e3) return `${(n / 1e3).toFixed(1)}k`;\n return String(n);\n}\n\n/** Render the per-command usage table: calls, complete/partial/miss, success %. */\nfunction printBreakdown(usage: UsageReport): void {\n info('');\n info(c.bold(' by command') + c.dim(' (complete = full result · partial = capped/paginated · miss = no result)'));\n const nameW = Math.max(7, ...usage.commands.map((cmd) => cmd.tool.length));\n const header =\n ' ' +\n 'command'.padEnd(nameW) +\n ['calls', 'complete', 'partial', 'miss', 'success%'].map((h) => h.padStart(9)).join('');\n info(c.dim(header));\n for (const cmd of usage.commands) {\n info(\n ' ' +\n cmd.tool.padEnd(nameW) +\n String(cmd.calls).padStart(9) +\n String(cmd.complete).padStart(9) +\n String(cmd.partial).padStart(9) +\n String(cmd.miss).padStart(9) +\n `${cmd.successPct}%`.padStart(9),\n );\n }\n const t = usage.totals;\n info(c.dim(' ' + '─'.repeat(nameW + 45)));\n info(\n ' ' +\n c.bold('total'.padEnd(nameW)) +\n String(t.calls).padStart(9) +\n String(t.complete).padStart(9) +\n String(t.partial).padStart(9) +\n String(t.miss).padStart(9) +\n ''.padStart(9),\n );\n info(c.dim(` avg success across commands: ${usage.avgSuccessPct}%`));\n}\n","import { Command } from 'commander';\nimport {\n loadCatalog,\n resolveLib,\n addLibrary,\n readDoc,\n driftFor,\n resolveVersion,\n localPackageDocs,\n localApiSurface,\n libId,\n} from '../engine/lib.js';\nimport type { DriftNote } from '../engine/lib.js';\nimport { selectForBudget, symbolsFromApi } from '../engine/select.js';\nimport { assessDocQuality } from '../engine/quality.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { fetchHostedDocs, publishPrivateLibrary, type HostedDocsResult } from '../engine/hosted.js';\nimport { resolveDsn } from '../reporting/credentials.js';\nimport { parseDsn } from '../reporting/commands/push.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { rootOf } from './util.js';\nimport { CliError, ExitCode, usageError } from '../util/exit.js';\nimport { c, info, json, out } from '../util/output.js';\n\n/**\n * `vg lib` (VG-CLI-SPEC §5) — library currency: version-correct, drift-annotated\n * usage docs. Family:\n * vg lib list the catalog\n * vg lib <name> version-correct, drift-annotated docs for <name>\n * vg lib add <source> ingest docs (local path; --online for a URL/llms.txt/git repo)\n * vg lib resolve <name> name → catalog id + version\n * vg lib refresh re-ingest local sources\n */\nexport function registerLib(program: Command): void {\n const cmd = program\n .command('lib')\n .description('library currency: version-correct, drift-annotated usage docs')\n .argument('[args...]', 'a library name, or: add <source> | publish <name> | resolve <name> | refresh')\n .option('--name <name>', 'library name for `add`')\n .option('--version <v>', 'pin the doc version for `add`/`publish`')\n .option('--online', '(deprecated; network is on by default) allow network for add/refresh URL sources')\n .option('-b, --budget <n>', 'trim docs to ~N tokens')\n .option('--readme <path>', 'README path for `publish` (default ./README.md)')\n .option('--dts <path>', 'TypeScript declaration (.d.ts) path for `publish`')\n .option('--language <lang>', 'primary language for `publish`')\n .option('--region <region>', 'data-residency region for the hosted catalog (same as scans; default us)')\n .option('--ingest <url>', 'hosted catalog/ingest URL override (host extracted; wins over --region)')\n .action(async function (this: Command, args: string[], opts: { name?: string; version?: string; online?: boolean; budget?: string; readme?: string; dts?: string; language?: string; region?: string; ingest?: string }) {\n const global = readGlobal(this);\n const root = rootOf(global);\n const [verb, ...rest] = args;\n\n // Network is ON BY DEFAULT (local-first, hosted-on-miss). `--local` is the hard airgap:\n // no network ever. `--online` is kept only as a back-compat no-op for add/refresh sources.\n const network = !global.local;\n if (!verb) return listCatalog(root, global.json);\n // add/refresh still gate URL/git fetching behind --online (or network default) to avoid surprise fetches.\n const online = (Boolean(opts.online) || network) && !global.local;\n if (verb === 'add') return addCmd(root, rest, { ...opts, online }, global.json);\n if (verb === 'publish') return publishCmd(root, rest, opts, global, global.json);\n if (verb === 'resolve') return resolveCmd(root, rest, global.json);\n if (verb === 'refresh') return refreshCmd(root, { online }, global.json);\n // `vg lib <name>`: local-first; on a thin/missing local doc, fall through to the hosted\n // catalog automatically unless --local. No flag required.\n return showCmd(root, args.join(' '), opts.budget ? Number(opts.budget) : undefined, global.json, {\n online: network, // hosted-on-miss allowed unless --local\n region: opts.region,\n ingest: opts.ingest,\n });\n });\n applyGlobalOptions(cmd);\n}\n\nfunction listCatalog(root: string, asJson?: boolean): void {\n const catalog = loadCatalog(root);\n const libs = Object.values(catalog.libraries).sort((a, b) => a.name.localeCompare(b.name));\n if (asJson) {\n json(libs.map((l) => ({ id: l.id, name: l.name, version: l.version, source: l.source.type })));\n return;\n }\n info(`${c.cyan('vg lib')} · ${libs.length} library(ies) in the catalog`);\n for (const l of libs) {\n const d = driftFor(root, l);\n const tag = d.drift === 'behind' ? c.yellow(' (docs behind your version)') : d.drift === 'ahead' ? c.dim(' (docs ahead)') : '';\n info(` ${c.bold(l.name)} ${c.dim(`@${l.version}`)} ${c.dim(`[${l.source.type}]`)}${tag}`);\n }\n if (!libs.length) info(c.dim(' empty — add docs with `vg lib add <path|url>`'));\n}\n\nasync function addCmd(root: string, rest: string[], opts: { name?: string; version?: string; online?: boolean }, asJson?: boolean): Promise<void> {\n const source = rest[0];\n if (!source) throw usageError('usage: vg lib add <path|url|git> [--name <name>] [--version <v>] [--online]');\n let entry;\n try {\n entry = await addLibrary(source, { root, name: opts.name, version: opts.version, allowNetwork: opts.online });\n } catch (err) {\n throw new CliError((err as Error).message, ExitCode.ERROR);\n }\n if (asJson) {\n json(entry);\n return;\n }\n info(`${c.green('✔')} added ${c.bold(entry.name)} ${c.dim(`@${entry.version}`)} (${entry.bytes} bytes) → ${entry.docFile}`);\n}\n\nfunction readPackageVersion(root: string): string | undefined {\n try {\n const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8')) as { version?: unknown };\n return typeof pkg.version === 'string' ? pkg.version : undefined;\n } catch {\n return undefined;\n }\n}\nfunction readOptionalFile(p: string): string | undefined {\n try {\n const t = fs.readFileSync(p, 'utf8');\n return t.trim() ? t : undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * `vg lib publish <name>` (S6) — upload a PRIVATE library's docs to the hosted catalog. Requires a\n * DSN (workspace identity) and a paid plan; the index token cost is billed to the MCP-token meter.\n * Reads local README (+ optional .d.ts); private docs stay tenant-isolated.\n */\nasync function publishCmd(\n root: string,\n rest: string[],\n opts: { name?: string; version?: string; readme?: string; dts?: string; language?: string; region?: string; ingest?: string },\n global: { local?: boolean },\n asJson?: boolean,\n): Promise<void> {\n if (global.local) throw usageError('vg lib publish uploads to the hosted catalog — it needs network (remove --local)');\n const name = (rest.join(' ') || opts.name || '').trim();\n if (!name) throw usageError('usage: vg lib publish <name> [--version <v>] [--readme <path>] [--dts <path>] [--language <lang>]');\n\n const dsn = resolveDsn();\n const parsed = dsn ? parseDsn(dsn) : null;\n if (!parsed) throw new CliError('publishing a private library requires a DSN — run `vibgrate login` or set VIBGRATE_DSN', ExitCode.USAGE_ERROR);\n\n const version = (opts.version || readPackageVersion(root) || '').trim();\n if (!version) throw usageError('a --version is required (or run from a package whose package.json has a version)');\n\n const readme = readOptionalFile(opts.readme ? path.resolve(opts.readme) : path.join(root, 'README.md'));\n const dts = opts.dts ? readOptionalFile(path.resolve(opts.dts)) : undefined;\n if (!readme && !dts) throw usageError('nothing to publish — no README.md found and no --dts given');\n\n const result = await publishPrivateLibrary(\n { name, version, readme, dts, language: opts.language },\n { region: opts.region, ingest: opts.ingest, auth: { keyId: parsed.keyId, secret: parsed.secret } },\n );\n if (!result.ok) {\n const msg = result.message || result.error || `publish failed (HTTP ${result.status})`;\n const code = result.status === 402 ? ExitCode.GATE_FAILED : result.status === 401 ? ExitCode.USAGE_ERROR : ExitCode.ERROR;\n throw new CliError(msg, code);\n }\n if (asJson) {\n json(result);\n return;\n }\n info(`${c.green('✔')} published ${c.bold(name)} ${c.dim(`@${version}`)} · ${result.entities} entities · ${result.indexedTokens} tokens indexed (MCP-token meter)`);\n info(c.dim(` private to your workspace · targetId ${result.targetId}`));\n}\n\nfunction resolveCmd(root: string, rest: string[], asJson?: boolean): void {\n const name = rest.join(' ');\n if (!name) throw usageError('usage: vg lib resolve <name>');\n const entry = resolveLib(loadCatalog(root), name);\n if (!entry) throw new CliError(`no library matches \"${name}\" (id ${libId(name)})`, ExitCode.NOT_FOUND);\n if (asJson) json({ id: entry.id, name: entry.name, version: entry.version });\n else info(`${entry.id} ${c.dim(`(${entry.name}@${entry.version})`)}`);\n}\n\nasync function refreshCmd(root: string, opts: { online?: boolean }, asJson?: boolean): Promise<void> {\n const catalog = loadCatalog(root);\n const results: { name: string; ok: boolean }[] = [];\n for (const entry of Object.values(catalog.libraries)) {\n try {\n await addLibrary(entry.source.location, { root, name: entry.name, version: entry.version, allowNetwork: opts.online });\n results.push({ name: entry.name, ok: true });\n } catch {\n results.push({ name: entry.name, ok: false });\n }\n }\n if (asJson) json({ refreshed: results });\n else info(`${c.cyan('vg lib refresh')} · ${results.filter((r) => r.ok).length}/${results.length} re-ingested`);\n}\n\ninterface ShowOpts {\n online?: boolean;\n region?: string;\n ingest?: string;\n}\n\nasync function showCmd(root: string, name: string, budget: number | undefined, asJson?: boolean, opts: ShowOpts = {}): Promise<void> {\n const online = opts.online;\n const catalog = loadCatalog(root);\n const entry = resolveLib(catalog, name);\n const ver = resolveVersion(root, name);\n\n const displayName = entry?.name ?? name;\n let localDoc: string | undefined;\n let docVersion = ver.served ?? '*';\n let docSource: string | undefined;\n let drift: DriftNote | undefined;\n\n if (entry) {\n // 1. Committed catalog (drift-annotated).\n localDoc = readDoc(root, entry);\n docVersion = entry.version;\n drift = driftFor(root, entry);\n } else {\n // 2. Local-first: docs from the installed package on disk, version-correct, offline.\n const local = localPackageDocs(root, name);\n if (local) {\n localDoc = local.docs;\n docVersion = local.version ?? ver.served ?? '*';\n docSource = local.source;\n }\n }\n\n // Quality gate (D18): assess the full local extraction. An insufficient doc (no example /\n // stub / off-topic) — or no local doc at all — is a candidate for hosted escalation.\n const apiSurface = localApiSurface(root, displayName);\n const quality =\n localDoc !== undefined\n ? assessDocQuality([localDoc, apiSurface].filter(Boolean).join('\\n\\n'), { name: displayName, symbols: symbolsFromApi(apiSurface) })\n : { sufficient: false, score: 0, reasons: ['no local docs'] };\n\n // D18 escalation (D7 no-key funnel): only when --online AND local is missing/insufficient.\n // fetchHostedDocs fails closed to null, so the local path never breaks.\n let hosted: HostedDocsResult | null = null;\n if (online && !quality.sufficient) {\n // Identify with the stored DSN (if any) so CLI users get the workspace tier; anon otherwise.\n const dsn = resolveDsn();\n const parsed = dsn ? parseDsn(dsn) : null;\n hosted = await fetchHostedDocs(\n { name: displayName, query: name, maxTokens: budget },\n { region: opts.region, ingest: opts.ingest, auth: parsed ? { keyId: parsed.keyId, secret: parsed.secret } : undefined },\n );\n }\n\n if (localDoc === undefined && !hosted) {\n throw new CliError(\n `no library docs for \"${name}\" — add with \\`vg lib add <path|url> --name ${name}\\` or install the package${online ? '' : ' (or retry with --online for the hosted catalog)'}`,\n ExitCode.NOT_FOUND,\n );\n }\n\n let doc: string;\n if (hosted) {\n doc = hosted.content;\n docSource = 'hosted';\n docVersion = hosted.version ?? docVersion;\n } else {\n doc = selectForBudget({ readme: localDoc!, apiSurface, budget }).text;\n }\n\n if (asJson) {\n json({\n id: entry?.id,\n name: displayName,\n version: docVersion,\n source: docSource ?? 'catalog',\n drift: drift ?? null,\n version_mismatch: ver.mismatch ?? null,\n quality: { sufficient: quality.sufficient, score: quality.score, reasons: quality.reasons },\n escalate: quality.sufficient ? null : 'hosted',\n escalated: Boolean(hosted),\n docs: doc,\n });\n return;\n }\n info(`${c.cyan('vg lib')} · ${c.bold(displayName)} ${c.dim(`@${docVersion}`)}${docSource ? c.dim(` (from ${docSource})`) : ''}`);\n if (ver.mismatch) info(c.yellow(` ⚠ ${ver.mismatch.note}`));\n if (hosted) info(c.green(' ✔ local docs were thin — served richer docs from the hosted catalog'));\n else if (!quality.sufficient) info(c.yellow(` ⚠ local docs look thin (${quality.reasons.join(', ')})${online ? ' — hosted catalog had nothing better' : ' — run without --local for the hosted catalog'}`));\n if (drift?.drift === 'behind') info(c.yellow(` ⚠ docs are for ${drift.cataloged}, but your installed version is ${drift.installed} — refresh the docs`));\n else if (drift?.drift === 'current') info(c.green(` ✔ docs match your installed version (${drift.installed})`));\n info('');\n out(doc);\n}\n","import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { Command } from 'commander';\nimport { exportGraph, formatForExt, type ExportFormat } from '../engine/export.js';\nimport { inventory } from '../engine/drift.js';\nimport { discoverModels } from '../engine/models.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { requireGraph, rootOf } from './util.js';\nimport { usageError } from '../util/exit.js';\nimport { c, info, out } from '../util/output.js';\n\n/**\n * `vg export <file>` (VG-CLI-SPEC §4.2) — one verb, format inferred from the\n * extension: json · ndjson · graphml · dot · cypher · sql · md · html · cdx.json\n * (CycloneDX SBOM/AI-BOM) · spdx.json. `-` writes to stdout.\n */\nexport function registerExport(program: Command): void {\n const cmd = program\n .command('export')\n .description('export the map (format inferred: json|ndjson|graphml|dot|cypher|sql|md|html|cdx.json|spdx.json)')\n .argument('[file]', 'target file (or - for stdout)', 'map.json')\n .action(function (this: Command, file: string) {\n const global = readGlobal(this);\n const { graph } = requireGraph(global);\n const root = rootOf(global);\n\n const format = detectFormat(file);\n if (!format) throw usageError(`unknown export format for \"${file}\"`);\n\n const needsDeps = format === 'cyclonedx' || format === 'spdx';\n const content = exportGraph(format, {\n graph,\n deps: needsDeps ? inventory(root).records : undefined,\n models: needsDeps && !global.local ? discoverModels() : undefined,\n generatedAt: graph.generatedAt,\n });\n\n if (file === '-') {\n out(content.trimEnd());\n return;\n }\n fs.mkdirSync(path.dirname(path.resolve(file)), { recursive: true });\n fs.writeFileSync(file, content);\n info(`${c.green('✔')} wrote ${file} ${c.dim(`(${format})`)}`);\n });\n applyGlobalOptions(cmd);\n}\n\nfunction detectFormat(file: string): ExportFormat | null {\n const lower = file.toLowerCase();\n if (lower.endsWith('.cdx.json')) return 'cyclonedx';\n if (lower.endsWith('.spdx.json')) return 'spdx';\n if (file === '-') return 'json';\n return formatForExt(path.extname(file));\n}\n","import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { Command } from 'commander';\nimport { resolvedGrammarFiles, grammarSetVersion } from '../engine/grammars.js';\nimport { defaultGraphPath } from '../engine/artifacts.js';\nimport { catalogPath, libDir } from '../engine/lib.js';\nimport { stableStringify } from '../engine/serialize.js';\nimport { VERSION } from '../version.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { rootOf } from './util.js';\nimport { CliError, ExitCode } from '../util/exit.js';\nimport { c, info, json } from '../util/output.js';\n\n/**\n * `vg bundle --offline -o <dir>` (VG-INSTALL-MATRIX §9) — assemble an air-gapped\n * bundle: the grammar .wasm set, the current graph, and the library catalog,\n * plus a manifest. Point an offline machine at it with `vg build --grammars`.\n * Deterministic; no network.\n */\nexport function registerBundle(program: Command): void {\n const cmd = program\n .command('bundle')\n .description('build an air-gapped bundle (grammars + graph + library catalog)')\n .option('--offline', 'offline bundle (default; present for clarity)')\n .option('-o, --out <dir>', 'output directory', 'vg-bundle')\n .action(function (this: Command, opts: { out?: string }) {\n const global = readGlobal(this);\n const root = rootOf(global);\n const outDir = path.resolve(root, opts.out ?? 'vg-bundle');\n\n // Per-language resolution (not a directory copy) so the bundle carries\n // the exact grammar files a scan would load — including any vendored\n // overlay that replaces a defective prebuilt.\n let grammarFiles;\n try {\n grammarFiles = resolvedGrammarFiles();\n } catch {\n throw new CliError('no grammars found to bundle (run a build first)', ExitCode.ERROR);\n }\n fs.mkdirSync(path.join(outDir, 'grammars'), { recursive: true });\n let grammarCount = 0;\n for (const { fileName, absPath } of grammarFiles) {\n fs.copyFileSync(absPath, path.join(outDir, 'grammars', fileName));\n grammarCount++;\n }\n\n const included: string[] = [`grammars/ (${grammarCount} .wasm)`];\n\n const graphSrc = global.graph ?? defaultGraphPath(root);\n if (fs.existsSync(graphSrc)) {\n fs.copyFileSync(graphSrc, path.join(outDir, 'graph.json'));\n included.push('graph.json');\n }\n\n const cat = catalogPath(root);\n if (fs.existsSync(cat)) {\n fs.copyFileSync(cat, path.join(outDir, 'vibgrate.lib.json'));\n included.push('vibgrate.lib.json');\n if (fs.existsSync(libDir(root))) {\n fs.cpSync(libDir(root), path.join(outDir, 'lib'), { recursive: true });\n included.push('lib/');\n }\n }\n\n const manifest = {\n tool: 'vg',\n version: VERSION,\n grammars: grammarSetVersion(),\n grammarCount,\n included,\n usage: 'Run `vg build --grammars <this dir>/grammars` to build fully offline.',\n };\n fs.writeFileSync(path.join(outDir, 'MANIFEST.json'), `${stableStringify(manifest, 2)}\\n`);\n\n if (global.json) {\n json({ out: path.relative(root, outDir), ...manifest });\n return;\n }\n info(`${c.cyan('vg bundle')} · wrote ${path.relative(root, outDir)}/`);\n for (const i of included) info(` ${c.green('✔')} ${i}`);\n info(c.dim(` offline: vg build --grammars \"${path.relative(root, outDir)}/grammars\"`));\n });\n applyGlobalOptions(cmd);\n}\n","import * as path from 'node:path';\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { ensureDir, pathExists } from '../utils/fs.js';\nimport { writeDefaultConfig } from '../../core-open/index.js';\n\nexport const initCommand = new Command('init')\n .description('Initialize vibgrate in a project')\n .argument('[path]', 'Path to initialize', '.')\n .option('--baseline', 'Create initial baseline after init')\n .option('--yes', 'Skip confirmation prompts')\n .action(async (targetPath: string, opts: { baseline?: boolean; yes?: boolean }) => {\n const rootDir = path.resolve(targetPath);\n const vibgrateDir = path.join(rootDir, '.vibgrate');\n\n await ensureDir(vibgrateDir);\n console.log(chalk.green('✔') + ` Created ${chalk.bold('.vibgrate/')} directory`);\n\n const configPath = path.join(rootDir, 'vibgrate.config.ts');\n if (await pathExists(configPath)) {\n console.log(chalk.dim(' vibgrate.config.ts already exists, skipping'));\n } else {\n await writeDefaultConfig(rootDir);\n console.log(chalk.green('✔') + ` Created ${chalk.bold('vibgrate.config.ts')}`);\n }\n\n if (opts.baseline) {\n const { runBaseline } = await import('./baseline.js');\n await runBaseline(rootDir);\n }\n\n console.log('');\n console.log(chalk.bold('Next steps:'));\n console.log(` ${chalk.cyan('vibgrate scan')} Scan for upgrade drift`);\n console.log(` ${chalk.cyan('vibgrate baseline')} Create a drift baseline`);\n console.log('');\n });\n","/** Machine-parseable ingest id for CI, AMI, and other automation (plain stdout, no ANSI). */\nexport function emitIngestIdLine(ingestId: string, options?: { unchanged?: boolean }): void {\n console.log(`VIBGRATE_INGEST_ID=${ingestId}`);\n if (options?.unchanged) {\n console.log('VIBGRATE_INGEST_UNCHANGED=1');\n }\n}\n\n/**\n * Machine-parseable drift score for automation (plain stdout, no ANSI). The Vibgrate\n * remediation agent reads this to gate a run on before/after drift, rather than\n * scraping the human-formatted report. Emitted only when a consumer asks for it\n * (VIBGRATE_EMIT_MARKERS=1, set by the migration agent) so normal CLI output is\n * unchanged.\n */\nexport function emitDriftScoreLine(score: number): void {\n if (process.env.VIBGRATE_EMIT_MARKERS !== '1') return;\n console.log(`VIBGRATE_DRIFT_SCORE=${score}`);\n}\n","import * as path from 'node:path';\nimport chalk from 'chalk';\nimport { pathExists } from '../core-open/index.js';\nimport { resolveCliInvocation } from '../util/cli-invocation.js';\n\n// Map of AI assistant config file/dir patterns to the `vg install <name>` argument.\n// Checked in priority order — first match wins.\nconst AI_ASSISTANT_DETECTORS: Array<{ files: string[]; name: string }> = [\n { files: ['CLAUDE.md', '.claude'], name: 'claude' },\n { files: ['.cursor', '.cursorrules'], name: 'cursor' },\n { files: ['.windsurf'], name: 'windsurf' },\n { files: ['.github/copilot-instructions.md', '.copilot'], name: 'copilot' },\n { files: ['.gemini'], name: 'gemini' },\n { files: ['.continuerc.json'], name: 'continue' },\n { files: ['.codex'], name: 'codex' },\n];\n\nexport async function detectAiAssistant(rootDir: string): Promise<string | null> {\n for (const detector of AI_ASSISTANT_DETECTORS) {\n for (const file of detector.files) {\n if (await pathExists(path.join(rootDir, file))) {\n return detector.name;\n }\n }\n }\n return null;\n}\n\nexport function printAiContextPrompt(detectedAssistant: string | null): void {\n const teal = chalk.hex('#3FB0A4');\n const mint = chalk.hex('#4FE3C1');\n // Prefix with whatever actually runs this CLI for the user: `vg` when it's\n // installed on PATH, or `npx @vibgrate/cli` when they ran via npx (where a\n // bare `vg install` would not resolve).\n const cli = resolveCliInvocation();\n const installArgs = detectedAssistant ? `install ${detectedAssistant}` : 'install --all';\n const installCmd = `${cli} ${installArgs}`;\n const detectedNote = detectedAssistant\n ? chalk.dim(` (${detectedAssistant} config detected)`)\n : '';\n\n console.log('');\n console.log(teal(' ╭──────────────────────────────────────────────────╮'));\n console.log(teal(' │') + ' ' + mint('◆') + ' ' + chalk.bold.white('Get AI-aware answers in your editor') + ' ' + teal('│'));\n console.log(teal(' ╰──────────────────────────────────────────────────╯'));\n console.log('');\n console.log(' ' + chalk.bold.white(installCmd) + detectedNote);\n console.log('');\n console.log(' ' + teal('·') + ' ' + chalk.white('Code map in your assistant') + chalk.dim(' — call trees, impact surfaces, import paths'));\n console.log(' ' + teal('·') + ' ' + chalk.white('Offline drift') + chalk.dim(' — DriftScore and upgrade priorities, right inside your editor'));\n console.log(' ' + teal('·') + ' ' + chalk.white('Version-correct library docs') + chalk.dim(' — pinned to your lockfile, no hallucinated APIs'));\n console.log('');\n}\n","import * as path from 'node:path';\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport {\n runCoreScan,\n pathExists,\n parseDsn,\n prepareCompressedUpload,\n fetchScanPreflight,\n computeRepoFingerprint,\n detectVcs,\n resolveRepositoryName,\n parseExcludePatterns,\n} from '../../core-open/index.js';\nimport type { ScanOptions, ScanArtifact } from '../../core-open/index.js';\nimport { inventory } from '../../engine/drift.js';\nimport { loadStandards, checkStandards } from '../../engine/standards.js';\nimport { loadAdvancedScanHook } from '../advanced-hook.js';\nimport { VERSION } from '../version.js';\nimport { resolveIngestHost } from './dsn.js';\nimport { dashHostForIngestHost } from '../regions.js';\nimport { resolveDsn } from '../credentials.js';\nimport { emitIngestIdLine, emitDriftScoreLine } from '../utils/ingest-id-output.js';\nimport { uploadScanArtifact } from '../utils/upload.js';\nimport { buildGraph } from '../../engine/build.js';\nimport { writeArtifacts } from '../../engine/artifacts.js';\nimport { writeSnapshot } from '../../engine/freshness.js';\nimport { detectAiAssistant, printAiContextPrompt } from '../ai-context-prompt.js';\nimport { resolveCliInvocation } from '../../util/cli-invocation.js';\n\n/**\n * Whether `scan` should build the local code map after scoring drift.\n *\n * The code map is a *local artifact* — it writes `.vibgrate/graph.json`, the\n * graph report/html, and a freshness snapshot, and building it runs the\n * memory-heavy in-process TypeScript program. It is therefore skipped whenever\n * the caller has opted out of local artifacts:\n *\n * - `--no-graph` (`opts.graph === false`) — explicit opt-out.\n * - `--max-privacy` — strongest privacy mode, which means \"no local artifacts\".\n * - `--no-local-artifacts` — \"Do not write .vibgrate JSON artifacts to disk\";\n * graph.json is one of those artifacts, so building it violated the flag's\n * contract *and* let the optional map build OOM-kill baseline scans (e.g. the\n * migration `scan --push --no-local-artifacts` path), taking `--push` down\n * with it even though drift and findings were already computed.\n */\nexport function shouldBuildCodeMap(opts: {\n graph?: boolean;\n maxPrivacy?: boolean;\n noLocalArtifacts?: boolean;\n}): boolean {\n return opts.graph !== false && !opts.maxPrivacy && !opts.noLocalArtifacts;\n}\n\n/** Auto-push scan artifact to Vibgrate API */\nasync function autoPush(\n artifact: ScanArtifact,\n rootDir: string,\n opts: ScanOptions,\n): Promise<void> {\n const dsn = resolveDsn(opts.dsn);\n if (!dsn) {\n console.error(chalk.red('No DSN provided for push.'));\n console.error(chalk.dim('Run \"vibgrate login\", set VIBGRATE_DSN, or use the --dsn flag.'));\n if (opts.strict) process.exit(1);\n return;\n }\n\n const parsed = parseDsn(dsn);\n if (!parsed) {\n console.error(chalk.red('Invalid DSN format.'));\n if (opts.strict) process.exit(1);\n return;\n }\n\n // Compact and compress artifact for upload\n const { body, contentEncoding } = await prepareCompressedUpload(artifact);\n const timestamp = String(Date.now());\n\n let host = parsed.host;\n if (opts.region) {\n try {\n host = resolveIngestHost(opts.region);\n } catch (e: unknown) {\n console.error(chalk.red(e instanceof Error ? e.message : String(e)));\n if (opts.strict) process.exit(1);\n return;\n }\n }\n\n const originalSize = JSON.stringify(artifact).length;\n const compressedSize = body.length;\n const ratio = ((1 - compressedSize / originalSize) * 100).toFixed(0);\n console.log(chalk.dim(`Uploading to ${host}... (${(compressedSize / 1024).toFixed(0)} KB, ${ratio}% smaller)`));\n\n try {\n // Auto-retries against the workspace's pinned region on a 409 REGION_MISMATCH.\n const { response, host: uploadedHost } = await uploadScanArtifact({\n scheme: parsed.scheme,\n host,\n keyId: parsed.keyId,\n secret: parsed.secret,\n body,\n contentEncoding,\n timestamp,\n force: opts.force,\n });\n host = uploadedHost;\n\n if (!response.ok) {\n const text = await response.text();\n throw new Error(`HTTP ${response.status}: ${text}`);\n }\n\n const result = await response.json() as {\n status: string;\n ingestId?: string;\n unchanged?: boolean;\n previousIngestId?: string;\n lastScannedAt?: string;\n };\n\n if (result.unchanged) {\n console.log(\n chalk.green('✔')\n + ` Repository unchanged since ${result.lastScannedAt ?? 'last scan'} — skipped upload (no credit used).`,\n );\n if (result.previousIngestId) {\n emitIngestIdLine(result.previousIngestId, { unchanged: true });\n const dashUrl = `https://${dashHostForIngestHost(host)}/${parsed.workspaceId}/scan/${result.previousIngestId}`;\n console.log(chalk.dim(` Previous report: ${dashUrl}`));\n } else if (opts.strict) {\n console.error(chalk.red('Repository unchanged but no previous ingest id returned.'));\n process.exit(1);\n }\n return;\n }\n\n console.log(chalk.green('✔') + ` Scan queued for processing (${result.ingestId ?? 'ok'})`);\n if (result.ingestId) {\n emitIngestIdLine(result.ingestId);\n const dashUrl = `https://${dashHostForIngestHost(host)}/${parsed.workspaceId}/scan/${result.ingestId}`;\n // On Windows, stderr/stdout desync can leave residual content on lines.\n // Use ANSI escape: \\x1B[0G = move to column 0, \\x1B[2K = erase entire line\n const CLEAR_LINE = process.platform === 'win32' ? '\\x1B[0G\\x1B[2K' : '';\n console.log('');\n console.log(CLEAR_LINE + chalk.dim(' Processing continues in the background. Results available shortly.'));\n console.log('');\n console.log(CLEAR_LINE + chalk.cyan('────────────────────────────────────────────────────────────────────────────────'));\n console.log(CLEAR_LINE + chalk.bold(' 📊 View Scan Report'));\n console.log(CLEAR_LINE + ' ' + chalk.underline.cyan(dashUrl));\n console.log(CLEAR_LINE + chalk.cyan('────────────────────────────────────────────────────────────────────────────────'));\n console.log('');\n console.log('');\n }\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e);\n console.error(chalk.red(`Upload failed: ${msg}`));\n if (opts.strict) process.exit(1);\n }\n}\n\n/**\n * Commander collector for the repeatable `--exclude` flag. Each occurrence\n * may itself hold several comma/semicolon-separated globs, so we expand and\n * accumulate them across every use of the flag.\n */\nfunction collectExcludes(value: string, previous: string[]): string[] {\n return [...previous, ...parseExcludePatterns(value)];\n}\n\n/**\n * `--full` extra: report banned dependencies against a committed standards policy\n * (`.vibgrate/standards.json` etc.). Silent when no policy is present, and never\n * changes the exit code — gating stays with `vg drift --fail-on standards`.\n */\nfunction reportStandards(rootDir: string): void {\n const loaded = loadStandards(rootDir);\n if (!loaded.policy) return;\n const violations = checkStandards(loaded.policy, inventory(rootDir).records);\n if (violations.length === 0) {\n console.log(chalk.green('✔') + ' Standards: no banned dependencies in use');\n return;\n }\n console.log(chalk.red(`\\n⚠ Standards: ${violations.length} banned dependency(ies) in use`));\n for (const v of violations) {\n const fix = v.use ? chalk.dim(` → use ${v.use}`) : '';\n const why = v.reason ? chalk.dim(` (${v.reason})`) : '';\n console.log(` ${chalk.red('banned')} ${v.ecosystem}:${v.name}${v.installed ? chalk.dim(` ${v.installed}`) : ''}${fix}${why}`);\n }\n}\n\nfunction parseNonNegativeNumber(value: string | undefined, label: string): number | undefined {\n if (value === undefined) return undefined;\n const parsed = Number(value);\n if (!Number.isFinite(parsed) || parsed < 0) {\n throw new Error(`${label} must be a non-negative number.`);\n }\n return parsed;\n}\n\nexport const scanCommand = new Command('scan')\n .description('Scan a project for upgrade drift')\n .argument('[path]', 'Path to scan', '.')\n .option('--out <file>', 'Output file path')\n .option('--format <format>', 'Output format (text|json|sarif|md)', 'text')\n .option('--fail-on <level>', 'Fail on warn or error')\n .option('--baseline <file>', 'Compare against baseline')\n .option('--changed-only', 'Only scan changed files')\n .option(\n '-e, --exclude <glob>',\n 'Exclude paths matching a glob pattern. Repeatable, and a single value may list several patterns separated by commas or semicolons (e.g. --exclude \"legacy/**,vendor/**\"). Merged with excludes from the config file.',\n collectExcludes,\n [],\n )\n .option('--concurrency <n>', 'Max concurrent npm calls', '8')\n .option('--push', 'Auto-push results to Vibgrate API after scan')\n .option('--dsn <dsn>', 'DSN token for push (or use VIBGRATE_DSN env)')\n .option('--region <region>', 'Override data residency region for push (us, eu)')\n .option('--strict', 'Fail on push errors')\n .option('--ui-purpose', 'Enable optional UI purpose evidence extraction (slower)')\n .option('--no-local-artifacts', 'Do not write .vibgrate JSON artifacts to disk')\n .option('--max-privacy', 'Enable strongest privacy mode (minimal scanners, no local artifacts)')\n .option('--offline', 'Run without network calls; do not upload results')\n .option('--full', 'Comprehensive scan: turns on known-vulnerability detection (= --vulns) and, when a standards policy exists, a banned-dependency report — on top of drift scoring and the code map')\n .option('--vulns', 'Also scan installed dependencies for known vulnerabilities (OSV online, or advisories from --package-manifest when offline)')\n .option('--package-manifest <file>', 'Use local package-version manifest JSON/ZIP (for offline mode)')\n .option('--project-scan-timeout <seconds>', 'Per-project scan timeout in seconds (default: 180)')\n .option('--drift-budget <score>', 'Fail if drift score is above budget (0-100)')\n .option('--drift-worsening <percent>', 'Fail if drift worsens by more than % since baseline')\n .option('--repository-name <name>', 'Override the repository name recorded for this scan (defaults to the directory or package.json name)')\n .option('--force', 'Always create a fresh scan ingest, even if the repository is unchanged since the last scan (skips the unchanged/reuse optimization). Used by scheduled and dashboard-triggered scans.')\n .option('--no-graph', 'Skip building the local code map (the AI/docs index) that scan produces after scoring drift')\n .option('--quiet', 'Suppress promotional output (the free-plan tracking panel and the AI Context install prompt); scan results are unaffected')\n .action(async (targetPath: string, opts: {\n out?: string;\n format: string;\n failOn?: string;\n baseline?: string;\n changedOnly?: boolean;\n exclude: string[];\n concurrency: string;\n push?: boolean;\n dsn?: string;\n region?: string;\n strict?: boolean;\n uiPurpose?: boolean;\n // Commander maps the `--no-local-artifacts` negation flag to\n // `localArtifacts` (default `true`, `false` when the flag is passed) — NOT\n // to `noLocalArtifacts`. Reading the wrong name silently ignored the flag.\n localArtifacts?: boolean;\n maxPrivacy?: boolean;\n offline?: boolean;\n full?: boolean;\n vulns?: boolean;\n packageManifest?: string;\n projectScanTimeout?: string;\n driftBudget?: string;\n driftWorsening?: string;\n repositoryName?: string;\n force?: boolean;\n graph?: boolean;\n quiet?: boolean;\n }) => {\n const rootDir = path.resolve(targetPath);\n if (!(await pathExists(rootDir))) {\n console.error(chalk.red(`Path does not exist: ${rootDir}`));\n process.exit(1);\n }\n\n const hasDsn = !!resolveDsn(opts.dsn);\n const willPush = !opts.offline && (opts.push || hasDsn);\n\n // `--no-local-artifacts` arrives from commander as `localArtifacts === false`\n // (the negation flag's camelCase key), so normalise it once here. Reading\n // `opts.noLocalArtifacts` (which never exists) had silently ignored the flag:\n // every .vibgrate artifact — including the memory-heavy code map — was still\n // written, which OOM-killed migration baseline scans mid-map.\n const noLocalArtifacts = opts.localArtifacts === false;\n\n // Capture first-run before the scan writes .vibgrate/scan_result.json.\n const isFirstRun = !(await pathExists(path.join(rootDir, '.vibgrate', 'scan_result.json')));\n\n // Region the workspace is pinned to, learned from preflight. Used to route\n // the upload to the correct ingest host up front (the push path also\n // self-heals on a 409 REGION_MISMATCH if preflight didn't run).\n let pinnedRegion: string | undefined;\n // Workspace billing tier + upgrade link, learned from preflight. They select\n // the free-plan upsell panel's audience: a free-tier workspace shows the\n // panel with an upgrade CTA; any paid tier suppresses it. Left undefined when\n // preflight does not run (offline / no push), which keeps the panel hidden\n // for authenticated users rather than risk mislabelling a paid plan.\n let planTier: string | undefined;\n let upgradeUrl: string | undefined;\n\n if (willPush && hasDsn) {\n const dsn = resolveDsn(opts.dsn)!;\n const parsed = parseDsn(dsn);\n if (parsed) {\n const ingestHost = opts.region ? resolveIngestHost(opts.region) : parsed.host;\n const vcs = await detectVcs(rootDir);\n const fingerprint = await computeRepoFingerprint(rootDir, vcs);\n const repositoryName = opts.repositoryName?.trim() || await resolveRepositoryName(rootDir);\n try {\n const preflight = await fetchScanPreflight(parsed, ingestHost, {\n repositoryName,\n vcsSha: fingerprint.vcsSha,\n });\n pinnedRegion = preflight.region;\n planTier = preflight.plan?.tier;\n // Prefer the server's canonical upgrade link; otherwise point at the\n // workspace dashboard on the (possibly region-pinned) ingest host.\n upgradeUrl =\n preflight.upgradeUrl ??\n `https://${dashHostForIngestHost(preflight.ingestHost ?? ingestHost)}/${parsed.workspaceId}`;\n if (preflight.vm && !preflight.vm.allowed) {\n console.error(chalk.red(preflight.error ?? 'VM meter usage exhausted'));\n console.error(\n chalk.dim(\n `VM minutes: ${preflight.vm.used}/${preflight.vm.limit} (${preflight.plan.label} plan) — enable overages or upgrade your plan.`,\n ),\n );\n process.exit(1);\n }\n // A new repository that would breach the plan's repository cap is\n // blocked before the (expensive) local scan runs. Re-scanning an\n // already-mapped repository is never blocked here.\n if (preflight.repositories && !preflight.repositories.allowed) {\n console.error(\n chalk.red(\n preflight.error ??\n `Repository limit reached for the ${preflight.plan.label} plan — cannot scan a new repository.`,\n ),\n );\n const max =\n preflight.repositories.max < 0 ? 'unlimited' : String(preflight.repositories.max);\n console.error(\n chalk.dim(\n `Repositories: ${preflight.repositories.total}/${max} (${preflight.plan.label} plan) — archive a repository or upgrade your plan.`,\n ),\n );\n if (preflight.upgradeUrl) {\n console.error(chalk.dim(` Upgrade: ${preflight.upgradeUrl}`));\n }\n process.exit(1);\n }\n if (preflight.status === 'error' || !preflight.scans.allowed) {\n console.error(chalk.red(preflight.error ?? 'Scan ingestion not allowed for this workspace.'));\n console.error(\n chalk.dim(\n `Credits: ${preflight.scans.used}/${preflight.scans.limit} (${preflight.plan.label} plan)`,\n ),\n );\n if (opts.strict) process.exit(1);\n process.exit(1);\n }\n console.log(\n chalk.dim(\n `Plan: ${preflight.plan.label} — scan credits ${preflight.scans.used}/${preflight.scans.limit} this month`,\n ),\n );\n // `--force` opts out of the unchanged short-circuit so scheduled and\n // dashboard-triggered scans always produce a fresh report.\n if (preflight.repository?.unchanged && !opts.force) {\n console.log(\n chalk.green('✔')\n + ` Repository unchanged at ${preflight.repository.lastVcsSha?.slice(0, 7) ?? 'same revision'} — skipping scan.`,\n );\n if (preflight.repository.lastIngestId) {\n emitIngestIdLine(preflight.repository.lastIngestId, { unchanged: true });\n const dashUrl = `https://${dashHostForIngestHost(ingestHost)}/${parsed.workspaceId}/scan/${preflight.repository.lastIngestId}`;\n console.log(chalk.dim(` Latest report: ${dashUrl}`));\n } else if (opts.strict) {\n console.error(chalk.red('Repository unchanged but no previous ingest id available.'));\n process.exit(1);\n }\n return;\n }\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e);\n console.error(chalk.yellow(`Preflight check failed: ${msg}`));\n if (opts.strict) process.exit(1);\n }\n }\n }\n\n const scanOpts: ScanOptions = {\n vibgrateVersion: VERSION,\n out: opts.out,\n format: (opts.format as 'text' | 'json' | 'sarif' | 'md') || 'text',\n failOn: opts.failOn as 'warn' | 'error' | undefined,\n baseline: opts.baseline,\n changedOnly: opts.changedOnly,\n exclude: opts.exclude,\n concurrency: parseInt(opts.concurrency, 10) || 8,\n push: opts.push,\n dsn: opts.dsn,\n // An explicit --region wins; otherwise route to the workspace's pinned\n // region as reported by preflight.\n region: opts.region ?? pinnedRegion,\n strict: opts.strict,\n uiPurpose: opts.uiPurpose,\n noLocalArtifacts,\n maxPrivacy: opts.maxPrivacy,\n offline: opts.offline,\n // `--full` is the comprehensive umbrella: it turns on vulnerability scanning.\n vulns: opts.vulns || opts.full,\n packageManifest: opts.packageManifest,\n driftBudget: parseNonNegativeNumber(opts.driftBudget, '--drift-budget'),\n driftWorseningPercent: parseNonNegativeNumber(opts.driftWorsening, '--drift-worsening'),\n projectScanTimeout: opts.projectScanTimeout ? parseInt(opts.projectScanTimeout, 10) || undefined : undefined,\n repositoryName: opts.repositoryName?.trim() || undefined,\n force: opts.force,\n quiet: opts.quiet,\n // Auth + plan signals for the free-plan upsell panel. `hasDsn` resolves the\n // full credential precedence — `--dsn`, `VIBGRATE_DSN`, and the stored login\n // credential (`~/.vibgrate/credentials.json`) — which the scanner's own\n // dsn/env-only check cannot see. `planTier`/`upgradeUrl` come from preflight.\n // Together they pick the panel audience: signed out → login CTA; signed in\n // on free → upgrade CTA; signed in on a paid plan → no panel. Without the\n // auth signal, a logged-in user running a bare scan was mislabelled\n // \"Vibgrate Free\" and shown the login panel even as the run pushed.\n authenticated: hasDsn,\n planTier,\n upgradeUrl,\n // Prefix for the upsell panel's `login → push` hint — `vg` when installed,\n // `npx @vibgrate/cli` when the user ran via npx (where bare `vg` fails).\n invocation: resolveCliInvocation(),\n };\n\n // `scan` also builds the local code map (the AI/docs index) so one command\n // yields both the DriftScore and a ready graph for `vg ask`/`guide`/`lib`\n // and MCP. We run it as the scan's final `postScan` step so it shares the\n // *single* progress bar (no second bar/logo). Fail-soft — a map problem\n // never fails the scan. Skipped under --no-graph, --max-privacy, and\n // --no-local-artifacts (the map is a local .vibgrate artifact; see\n // shouldBuildCodeMap). An uncatchable OOM in the map build otherwise takes\n // the whole scan — and its --push — down with it.\n const wantGraph = shouldBuildCodeMap({ graph: opts.graph, maxPrivacy: opts.maxPrivacy, noLocalArtifacts });\n if (wantGraph) {\n scanOpts.postScan = async (report) => {\n const result = await buildGraph({\n root: rootDir,\n exclude: opts.exclude,\n onParseProgress: (done, total) => report(done, total, 'parsing'),\n });\n writeArtifacts(result.graph, { root: rootDir });\n // Freshness snapshot → lets `vg serve`/`vg ask` auto-refresh this map\n // when the working tree drifts (see engine/freshness.ts).\n writeSnapshot(rootDir, result.graph.provenance.corpusHash, result.fileStats, {\n exclude: opts.exclude,\n });\n const { counts } = result.graph.meta;\n return `${counts.nodes.toLocaleString()} nodes · ${counts.edges.toLocaleString()} edges`;\n };\n }\n\n // Open base scan. The optional advanced-analysis hook is a no-op in this\n // open build, so the scan runs entirely on the open base engine.\n const advanced = await loadAdvancedScanHook();\n const artifact = await runCoreScan(rootDir, scanOpts, advanced);\n\n // Machine-readable drift score for the remediation agent's before/after gate\n // (no-op unless VIBGRATE_EMIT_MARKERS=1). Emitted from the freshly computed\n // local artifact, so it is available even without --push.\n emitDriftScoreLine(artifact.drift.score);\n\n // `--full` also surfaces the offline standards/policy check (otherwise only\n // reachable via `vg drift --fail-on standards`). Report-only here — it never\n // changes the exit code; use `vg drift --fail-on standards` to gate CI.\n if (opts.full) {\n reportStandards(rootDir);\n }\n\n // Check fail-on thresholds\n if (opts.failOn) {\n const hasErrors = artifact.findings.some((f: { level: string }) => f.level === 'error');\n const hasWarnings = artifact.findings.some((f: { level: string }) => f.level === 'warning');\n\n if (opts.failOn === 'error' && hasErrors) {\n console.error(chalk.red(`\\nFailing: ${artifact.findings.filter((f: { level: string }) => f.level === 'error').length} error finding(s) detected.`));\n process.exit(2);\n }\n if (opts.failOn === 'warn' && (hasErrors || hasWarnings)) {\n console.error(chalk.red(`\\nFailing: findings detected at warn level or above.`));\n process.exit(2);\n }\n }\n\n if (scanOpts.driftBudget !== undefined && artifact.drift.score > scanOpts.driftBudget) {\n console.error(chalk.red(`\\nFailing fitness function: drift score ${artifact.drift.score}/100 exceeds budget ${scanOpts.driftBudget}.`));\n process.exit(2);\n }\n\n if (scanOpts.driftWorseningPercent !== undefined) {\n if (artifact.delta === undefined) {\n console.error(chalk.red('\\nFailing fitness function: --drift-worsening requires --baseline to compare against previous drift.'));\n process.exit(2);\n }\n\n if (artifact.delta > 0) {\n const baselineScore = artifact.drift.score - artifact.delta;\n const denominator = Math.max(Math.abs(baselineScore), 0.0001);\n const worseningPercent = (artifact.delta / denominator) * 100;\n\n if (worseningPercent > scanOpts.driftWorseningPercent) {\n console.error(chalk.red(`\\nFailing fitness function: drift worsened by ${worseningPercent.toFixed(2)}% (threshold ${scanOpts.driftWorseningPercent}%).`));\n process.exit(2);\n }\n }\n }\n\n if (willPush) {\n await autoPush(artifact, rootDir, scanOpts);\n }\n\n // On first run with no cloud connection and text output, prompt the user\n // to wire Vibgrate AI Context into their AI assistant.\n const showAiPrompt =\n scanOpts.format === 'text' &&\n !opts.quiet &&\n !hasDsn &&\n !opts.offline &&\n !noLocalArtifacts &&\n !opts.maxPrivacy &&\n isFirstRun;\n\n if (showAiPrompt) {\n const detectedAssistant = await detectAiAssistant(rootDir);\n printAiContextPrompt(detectedAssistant);\n }\n });\n","import * as fs from 'node:fs';\nimport * as path from 'node:path';\n\n/**\n * Is a prior `vg` scan artifact still up to date with the working tree?\n *\n * `vg fix` reads dependency drift from `.vibgrate/scan_result.json`. If the user\n * edited a dependency manifest — or a lockfile moved because they ran an install\n * or a previous `vg fix` — since that scan, the artifact describes a repository\n * that no longer exists, and the upgrade plan would be built against stale\n * versions (GUARDRAILS §1.4 — output integrity). So before planning, we check\n * whether any dependency manifest or lockfile is *newer* than the artifact and,\n * if so, re-scan.\n *\n * The signal is deliberately scoped to dependency manifests + lockfiles (not the\n * whole source tree): those are the only inputs that change what `vg fix`\n * analyses, and keying on them makes the check cheap and, crucially, loop-free —\n * a re-scan rewrites the artifact, bumping its mtime past every manifest, so the\n * next `vg fix` sees a fresh scan rather than re-scanning forever.\n *\n * Fail-open everywhere: a stat/read error reports \"fresh\". Freshness is an\n * optimisation, not a gate — a transient filesystem hiccup must never wedge\n * `vg fix` into a spurious re-scan (or a crash).\n */\n\n/** Dependency manifests + lockfiles whose modification invalidates a prior scan. */\nconst WATCHED_FILES = new Set([\n // npm\n 'package.json',\n 'package-lock.json',\n 'npm-shrinkwrap.json',\n 'pnpm-lock.yaml',\n 'yarn.lock',\n 'bun.lockb',\n // pypi\n 'requirements.txt',\n 'pyproject.toml',\n 'poetry.lock',\n 'Pipfile',\n 'Pipfile.lock',\n 'uv.lock',\n // go\n 'go.mod',\n 'go.sum',\n // rust\n 'Cargo.toml',\n 'Cargo.lock',\n // ruby\n 'Gemfile',\n 'Gemfile.lock',\n // php\n 'composer.json',\n 'composer.lock',\n // swift\n 'Package.swift',\n 'Package.resolved',\n // dart\n 'pubspec.yaml',\n 'pubspec.lock',\n // java\n 'pom.xml',\n 'build.gradle',\n 'build.gradle.kts',\n 'gradle.lockfile',\n // dotnet\n 'packages.lock.json',\n]);\n\n/** .NET project files carry their dependency versions inline (`<PackageReference>`). */\nconst WATCHED_EXT = /\\.(cs|fs)proj$/i;\n\n/**\n * Directories never worth descending into when hunting for manifests. Mirrors\n * `engine/drift.ts` `findManifests` so both agree on what counts as project\n * source rather than a build/vendor/dependency directory.\n */\nconst SKIP_DIRS = new Set([\n 'node_modules',\n '.git',\n 'dist',\n 'build',\n 'out',\n '.vibgrate',\n 'vendor',\n '.venv',\n 'venv',\n 'env',\n '__pycache__',\n 'target',\n '.next',\n '.nuxt',\n 'coverage',\n '.cache',\n]);\n\nexport interface StalenessResult {\n /** True when a manifest/lockfile is newer than the scan artifact. */\n stale: boolean;\n /**\n * The repo-relative path of the newest changed manifest, for an actionable\n * \"re-scanning because X changed\" message. Undefined when not stale.\n */\n newestChanged?: string;\n}\n\n/**\n * Decide whether `artifactPath` is out of date with the dependency manifests and\n * lockfiles under `rootDir`. See the module comment for the rationale and the\n * fail-open contract.\n */\nexport function scanStaleness(rootDir: string, artifactPath: string): StalenessResult {\n let ref: number;\n try {\n ref = fs.statSync(artifactPath).mtimeMs;\n } catch {\n // No artifact to compare against — the caller handles \"missing\" on its own.\n return { stale: false };\n }\n\n let newest = -Infinity;\n let newestChanged: string | undefined;\n\n // Bounded walk (depth + entry cap), matching engine/drift.ts findManifests, so\n // a pathological tree can never make freshness the slow part of `vg fix`.\n const MAX_ENTRIES = 20000;\n let scanned = 0;\n const walk = (dir: string, depth: number): void => {\n if (depth > 8 || scanned > MAX_ENTRIES) return;\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n for (const e of entries) {\n scanned++;\n if (scanned > MAX_ENTRIES) break;\n if (e.isDirectory()) {\n if (!SKIP_DIRS.has(e.name) && !e.name.startsWith('.')) walk(path.join(dir, e.name), depth + 1);\n continue;\n }\n if (!WATCHED_FILES.has(e.name) && !WATCHED_EXT.test(e.name)) continue;\n const abs = path.join(dir, e.name);\n let mtimeMs: number;\n try {\n mtimeMs = fs.statSync(abs).mtimeMs;\n } catch {\n continue;\n }\n if (mtimeMs > newest) {\n newest = mtimeMs;\n newestChanged = path.relative(rootDir, abs) || e.name;\n }\n }\n };\n walk(rootDir, 0);\n\n return newest > ref ? { stale: true, newestChanged } : { stale: false };\n}\n\n/** Convenience predicate over {@link scanStaleness}. */\nexport function isScanStale(rootDir: string, artifactPath: string): boolean {\n return scanStaleness(rootDir, artifactPath).stale;\n}\n","import * as fs from 'node:fs';\nimport * as path from 'node:path';\n\n/**\n * \"Contract\" extraction for `vg fix`: the named symbols the source imports from\n * a package (its default, namespace, named exports, and destructured requires).\n *\n * These are the API surfaces an upgrade must preserve, so the report can point a\n * developer (or a breaking-change analysis) at exactly what to re-verify against\n * the new version. The parser is pure and exported for tests; {@link collectContracts}\n * is a bounded, deterministic walk of the source tree.\n */\n\nconst SKIP_DIRS = new Set([\n 'node_modules', '.git', 'dist', 'build', 'out', '.vibgrate', 'vendor',\n '.venv', 'venv', 'env', '__pycache__', 'target', '.next', '.nuxt', 'coverage', '.cache',\n]);\nconst MAX_FILES = 8000;\nconst MAX_DEPTH = 12;\nconst MAX_FILE_BYTES = 1_048_576;\n/** Cap on the distinct contract symbols reported per package (keeps output bounded). */\nexport const MAX_CONTRACTS = 40;\n\nconst SOURCE_EXT: Record<'npm' | 'pypi', Set<string>> = {\n npm: new Set(['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs', '.mts', '.cts', '.vue', '.svelte']),\n pypi: new Set(['.py']),\n};\n\nfunction escapeRegExp(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/** Parse the specifiers of one ESM/CJS import clause (`Default, { A, B as C }` / `* as NS`). */\nfunction parseJsClause(clause: string, out: Set<string>): void {\n const trimmed = clause.trim();\n if (!trimmed) return;\n // Namespace import: `* as NS`\n if (/^\\*\\s+as\\s+\\w+/.test(trimmed)) {\n out.add('* (namespace)');\n return;\n }\n // Named block `{ ... }`, with an optional leading default identifier.\n const braceMatch = /\\{([^}]*)\\}/.exec(trimmed);\n const beforeBrace = braceMatch ? trimmed.slice(0, braceMatch.index) : trimmed;\n const defaultId = beforeBrace.replace(/,/g, '').trim();\n if (defaultId && /^\\w+$/.test(defaultId)) out.add('default');\n if (braceMatch) {\n for (const raw of braceMatch[1].split(',')) {\n const name = raw.trim().split(/\\s+as\\s+/)[0]?.trim();\n if (name && /^[\\w$]+$/.test(name)) out.add(name);\n }\n }\n}\n\n/** Extract the imported contract symbols for `pkg` from a single file's `content`. */\nexport function extractContracts(content: string, pkg: string, ecosystem: 'npm' | 'pypi' | 'unknown'): string[] {\n const out = new Set<string>();\n const e = escapeRegExp(pkg);\n if (ecosystem === 'npm') {\n const importRe = new RegExp(`import\\\\s+([^;'\"\\\\n]*?)\\\\s+from\\\\s+['\"]${e}(?:/[^'\"]*)?['\"]`, 'g');\n let m: RegExpExecArray | null;\n while ((m = importRe.exec(content))) parseJsClause(m[1], out);\n const requireDestructureRe = new RegExp(`\\\\{([^}]*)\\\\}\\\\s*=\\\\s*require\\\\(\\\\s*['\"]${e}(?:/[^'\"]*)?['\"]\\\\s*\\\\)`, 'g');\n while ((m = requireDestructureRe.exec(content))) {\n for (const raw of m[1].split(',')) {\n const name = raw.trim().split(':')[0]?.trim();\n if (name && /^[\\w$]+$/.test(name)) out.add(name);\n }\n }\n } else if (ecosystem === 'pypi') {\n const fromRe = new RegExp(`^\\\\s*from\\\\s+${e}(?:\\\\.[\\\\w.]+)?\\\\s+import\\\\s+(.+)$`, 'gm');\n let m: RegExpExecArray | null;\n while ((m = fromRe.exec(content))) {\n const names = m[1].replace(/[()]/g, '').split(',');\n for (const raw of names) {\n const name = raw.trim().split(/\\s+as\\s+/)[0]?.trim();\n if (name === '*') out.add('* (module)');\n else if (name && /^[\\w.]+$/.test(name)) out.add(name);\n }\n }\n const importRe = new RegExp(`^\\\\s*import\\\\s+${e}\\\\b`, 'gm');\n if (importRe.test(content)) out.add(`${pkg} (module)`);\n }\n return [...out].sort();\n}\n\n/**\n * Walk the source tree (bounded) collecting the distinct contract symbols used\n * from `pkg`. Deterministic: files are visited in sorted order and the result is\n * sorted and capped at {@link MAX_CONTRACTS}.\n */\nexport function collectContracts(root: string, pkg: string, ecosystem: 'npm' | 'pypi' | 'unknown'): string[] {\n if (ecosystem === 'unknown') return [];\n const exts = SOURCE_EXT[ecosystem];\n if (!exts) return [];\n const found = new Set<string>();\n let filesSeen = 0;\n\n const walk = (dir: string, depth: number): void => {\n if (depth > MAX_DEPTH || filesSeen >= MAX_FILES) return;\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n entries.sort((a, b) => a.name.localeCompare(b.name));\n for (const entry of entries) {\n if (filesSeen >= MAX_FILES) return;\n if (entry.isDirectory()) {\n if (SKIP_DIRS.has(entry.name) || entry.name.startsWith('.')) continue;\n walk(path.join(dir, entry.name), depth + 1);\n } else if (entry.isFile() && exts.has(path.extname(entry.name))) {\n filesSeen++;\n const full = path.join(dir, entry.name);\n let content: string;\n try {\n if (fs.statSync(full).size > MAX_FILE_BYTES) continue;\n content = fs.readFileSync(full, 'utf8');\n } catch {\n continue;\n }\n for (const sym of extractContracts(content, pkg, ecosystem)) found.add(sym);\n }\n }\n };\n walk(root, 0);\n return [...found].sort().slice(0, MAX_CONTRACTS);\n}\n","import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { extractContracts, MAX_CONTRACTS } from './contracts.js';\n\n/**\n * A single bounded pass over the source tree that, for every candidate package\n * at once, counts import sites and collects the contract symbols in use. Doing\n * this in one walk (rather than one walk per package) keeps `vg fix` fast on\n * repos with many dependencies. Deterministic: sorted traversal, sorted output.\n *\n * This is pure input-gathering the CLI must do locally — it reads the user's own\n * source, which never leaves the machine. The counts and contracts are shipped\n * to the hosted planner; the risk classification they feed is computed there.\n */\n\nexport type SourceEcosystem = 'npm' | 'pypi' | 'unknown';\n\nconst SKIP_DIRS = new Set([\n 'node_modules', '.git', 'dist', 'build', 'out', '.vibgrate', 'vendor',\n '.venv', 'venv', 'env', '__pycache__', 'target', '.next', '.nuxt', 'coverage', '.cache',\n]);\nconst MAX_FILES = 8000;\nconst MAX_DEPTH = 12;\nconst MAX_FILE_BYTES = 1_048_576;\n\nconst EXT_ECOSYSTEM: Record<string, SourceEcosystem> = {\n '.ts': 'npm', '.tsx': 'npm', '.js': 'npm', '.jsx': 'npm', '.mjs': 'npm', '.cjs': 'npm',\n '.mts': 'npm', '.cts': 'npm', '.vue': 'npm', '.svelte': 'npm',\n '.py': 'pypi',\n};\n\nfunction escapeRegExp(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction importPattern(ecosystem: 'npm' | 'pypi', pkg: string): RegExp {\n const e = escapeRegExp(pkg);\n if (ecosystem === 'npm') {\n return new RegExp(`(?:from\\\\s+|require\\\\(\\\\s*|import\\\\(\\\\s*)['\"]${e}(?:/[^'\"]*)?['\"]`, 'g');\n }\n return new RegExp(`^\\\\s*(?:import\\\\s+${e}(?:[.\\\\s]|$)|from\\\\s+${e}(?:[.\\\\s]))`, 'gm');\n}\n\nexport interface PackageUsage {\n importSites: number;\n filesTouched: number;\n contracts: string[];\n}\n\ninterface Tracked {\n name: string;\n ecosystem: 'npm' | 'pypi';\n pattern: RegExp;\n importSites: number;\n filesTouched: number;\n contracts: Set<string>;\n}\n\n/**\n * Walk `root` once, returning per-package usage keyed by package name. Packages\n * with an `unknown` ecosystem are returned with empty usage (no source scanning\n * applies).\n */\nexport function analyzeTree(\n root: string,\n packages: Array<{ name: string; ecosystem: SourceEcosystem }>,\n): Map<string, PackageUsage> {\n const result = new Map<string, PackageUsage>();\n const tracked: Tracked[] = [];\n for (const p of packages) {\n if (p.ecosystem === 'npm' || p.ecosystem === 'pypi') {\n tracked.push({\n name: p.name,\n ecosystem: p.ecosystem,\n pattern: importPattern(p.ecosystem, p.name),\n importSites: 0,\n filesTouched: 0,\n contracts: new Set(),\n });\n } else {\n result.set(p.name, { importSites: 0, filesTouched: 0, contracts: [] });\n }\n }\n if (tracked.length === 0) return result;\n\n let filesSeen = 0;\n const walk = (dir: string, depth: number): void => {\n if (depth > MAX_DEPTH || filesSeen >= MAX_FILES) return;\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n entries.sort((a, b) => a.name.localeCompare(b.name));\n for (const entry of entries) {\n if (filesSeen >= MAX_FILES) return;\n if (entry.isDirectory()) {\n if (SKIP_DIRS.has(entry.name) || entry.name.startsWith('.')) continue;\n walk(path.join(dir, entry.name), depth + 1);\n continue;\n }\n const fileEco = EXT_ECOSYSTEM[path.extname(entry.name)];\n if (!fileEco || fileEco === 'unknown') continue;\n filesSeen++;\n const full = path.join(dir, entry.name);\n let content: string;\n try {\n if (fs.statSync(full).size > MAX_FILE_BYTES) continue;\n content = fs.readFileSync(full, 'utf8');\n } catch {\n continue;\n }\n for (const t of tracked) {\n if (t.ecosystem !== fileEco) continue;\n t.pattern.lastIndex = 0;\n const matches = content.match(t.pattern);\n if (matches && matches.length) {\n t.importSites += matches.length;\n t.filesTouched++;\n if (t.contracts.size < MAX_CONTRACTS) {\n for (const sym of extractContracts(content, t.name, t.ecosystem)) t.contracts.add(sym);\n }\n }\n }\n }\n };\n walk(root, 0);\n\n for (const t of tracked) {\n result.set(t.name, {\n importSites: t.importSites,\n filesTouched: t.filesTouched,\n contracts: [...t.contracts].sort().slice(0, MAX_CONTRACTS),\n });\n }\n return result;\n}\n","/**\n * Transport for the hosted upgrade planner (`POST /v1/fix/plan`).\n *\n * `vg fix` is a thin, DSN-authenticated client: it sends drifted-dependency\n * candidates (versions + the usage/contract signals measured from local source)\n * and renders the plan the server returns. All planning intelligence lives\n * server-side. Mirrors the residency-aware retry of the scan upload transport —\n * a workspace is pinned to one region, so a 409 `REGION_MISMATCH` transparently\n * retries against the named regional host.\n */\n\nimport { ingestHostForRegionId } from '../regions.js';\nimport type { FixPlanRequest, FixPlanResponse } from '../planning/types.js';\n\nexport interface FixPlanInput {\n scheme: string;\n host: string;\n keyId: string;\n secret: string;\n request: FixPlanRequest;\n timestamp: string;\n}\n\nexport interface FixPlanResult {\n response: Response;\n /** The host the final request was sent to — differs from input.host on a region redirect. */\n host: string;\n}\n\nfunction postOnce(input: FixPlanInput, host: string): Promise<Response> {\n return fetch(`${input.scheme}://${host}/v1/fix/plan`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-Vibgrate-Timestamp': input.timestamp,\n Authorization: `VibgrateDSN ${input.keyId}:${input.secret}`,\n Connection: 'close',\n },\n body: JSON.stringify(input.request),\n });\n}\n\nasync function regionRedirectHost(response: Response): Promise<string | undefined> {\n try {\n const payload = (await response.clone().json()) as { code?: string; region?: string };\n if (payload?.code !== 'REGION_MISMATCH' || !payload.region) return undefined;\n return ingestHostForRegionId(payload.region);\n } catch {\n return undefined;\n }\n}\n\n/**\n * Request an upgrade plan from the hosted planner, transparently retrying\n * against the workspace's pinned region on a residency mismatch.\n */\nexport async function requestFixPlan(input: FixPlanInput): Promise<FixPlanResult> {\n let host = input.host;\n let response = await postOnce(input, host);\n\n if (response.status === 409) {\n const target = await regionRedirectHost(response);\n if (target && target !== host) {\n host = target;\n response = await postOnce(input, host);\n }\n }\n return { response, host };\n}\n\n/** Parse a fix-plan response body, tolerating an error envelope. */\nexport async function parseFixPlanResponse(response: Response): Promise<FixPlanResponse> {\n return (await response.json()) as FixPlanResponse;\n}\n","import chalk from 'chalk';\nimport type { VulnSeverity } from '../../core-open/index.js';\nimport type { FixPlanResponse, UpgradePlan, VulnDelta } from './types.js';\n\n/**\n * Human-facing renderers for the planner's response. `--json` bypasses these\n * entirely (the {@link FixPlanResponse} is emitted verbatim); these are for\n * `text` and `md`.\n */\n\nconst SEVERITY_ORDER: VulnSeverity[] = ['critical', 'high', 'moderate', 'low', 'unknown'];\n\nfunction deltaSummary(delta: VulnDelta): string {\n if (delta.total === 0) return 'none';\n const parts = SEVERITY_ORDER.filter((s) => delta.bySeverity[s]).map((s) => `${delta.bySeverity[s]} ${s}`);\n return parts.length ? parts.join(', ') : `${delta.total}`;\n}\n\nfunction riskLabel(score: number): string {\n if (score <= 15) return chalk.green(`${score}/100 low`);\n if (score <= 40) return chalk.yellow(`${score}/100 moderate`);\n return chalk.red(`${score}/100 high`);\n}\n\nfunction planBlock(plan: UpgradePlan, recommended: boolean): string {\n const lines: string[] = [];\n const marker = recommended ? chalk.green('● recommended') : chalk.dim('○');\n lines.push(`${marker} ${chalk.bold(plan.label)} — ${chalk.dim(plan.description)}`);\n const drift =\n typeof plan.expectedDriftScore === 'number' && typeof plan.driftDelta === 'number'\n ? ` · DriftScore →${plan.expectedDriftScore} (${plan.driftDelta <= 0 ? '' : '+'}${plan.driftDelta})`\n : '';\n lines.push(\n ` risk ${riskLabel(plan.riskScore)} · ${plan.upgrades.length} upgrade(s) · ` +\n `fixes ${deltaSummary(plan.fixes)}${drift}`,\n );\n if (plan.introduces.total) {\n lines.push(chalk.red(` ⚠ introduces ${deltaSummary(plan.introduces)} advisory(ies) in target versions`));\n }\n const shown = plan.upgrades.slice(0, 12);\n for (const u of shown) {\n const codemod = u.playbook?.codemod ? chalk.magenta(` [codemod: ${u.playbook.codemod}]`) : '';\n lines.push(` ${chalk.cyan(u.package)} ${chalk.dim(`${u.from ?? '?'} → ${u.to ?? '?'}`)} ${chalk.dim(u.reason)}${codemod}`);\n }\n if (plan.upgrades.length > shown.length) {\n lines.push(chalk.dim(` … and ${plan.upgrades.length - shown.length} more`));\n }\n if (plan.upgrades.length === 0) {\n lines.push(chalk.dim(' (no upgrades in this plan)'));\n }\n return lines.join('\\n');\n}\n\nfunction dataNote(report: FixPlanResponse): string | null {\n if (report.vulnerabilityData === 'unavailable') {\n return chalk.dim('Advisory data was unavailable — vulnerability impact is not shown.');\n }\n if (report.vulnerabilityData === 'partial') {\n return chalk.dim('Advisory data was partial — some ecosystems were not checked.');\n }\n return null;\n}\n\nexport function renderText(report: FixPlanResponse): string {\n const out: string[] = [];\n out.push(chalk.bold('Vibgrate fix — upgrade plan'));\n out.push(\n chalk.dim(\n `${report.totalCandidates} drifted dependency(ies) analysed · ` +\n `${report.deepAnalysis ? 'deep (major) analysis on' : 'preflight only'}`,\n ),\n );\n const note = dataNote(report);\n if (note) out.push(note);\n if (report.exploitability && report.exploitability.kevPackages > 0) {\n const epss = report.exploitability.maxEpss != null ? `, peak EPSS ${(report.exploitability.maxEpss * 100).toFixed(0)}%` : '';\n out.push(chalk.red(`⚠ ${report.exploitability.kevPackages} package(s) carry a KNOWN-EXPLOITED (KEV) advisory${epss} — prioritise these.`));\n }\n out.push('');\n for (const plan of report.plans) {\n out.push(planBlock(plan, plan.tier === report.recommended));\n out.push('');\n }\n out.push(chalk.bold('Recommendation'));\n out.push(` ${chalk.green(report.plans.find((p) => p.tier === report.recommended)?.label ?? report.recommended)} — ${report.rationale}`);\n if (report.unresolved.total) {\n out.push('');\n out.push(chalk.red(`⚠ ${deltaSummary(report.unresolved)} advisory(ies) have no upgrade path in any plan.`));\n }\n return out.join('\\n');\n}\n\nexport function renderMarkdown(report: FixPlanResponse): string {\n const out: string[] = [];\n out.push('# Vibgrate fix — upgrade plan');\n out.push('');\n out.push(\n `${report.totalCandidates} drifted dependency(ies) analysed · ${report.deepAnalysis ? 'deep (major) analysis on' : 'preflight only'}.`,\n );\n const note = dataNote(report);\n if (note) {\n out.push('');\n out.push(`_${report.vulnerabilityData === 'unavailable' ? 'Advisory data was unavailable — vulnerability impact is not shown.' : 'Advisory data was partial — some ecosystems were not checked.'}_`);\n }\n out.push('');\n for (const plan of report.plans) {\n const rec = plan.tier === report.recommended ? ' ✅ **recommended**' : '';\n out.push(`## ${plan.label}${rec}`);\n out.push('');\n out.push(`_${plan.description}_`);\n out.push('');\n out.push(`- Risk: **${plan.riskScore}/100** (${plan.confidence} confidence)`);\n out.push(`- Upgrades: **${plan.upgrades.length}**`);\n out.push(`- Fixes advisories: ${deltaSummary(plan.fixes)}`);\n if (plan.introduces.total) {\n out.push(`- ⚠ Introduces advisories in target versions: ${deltaSummary(plan.introduces)}`);\n }\n out.push('');\n if (plan.upgrades.length) {\n out.push('| Package | From | To | Kind | Reason |');\n out.push('|---|---|---|---|---|');\n for (const u of plan.upgrades) {\n out.push(`| \\`${u.package}\\` | ${u.from ?? '?'} | ${u.to ?? '?'} | ${u.kind} | ${u.reason} |`);\n }\n out.push('');\n }\n }\n out.push('## Recommendation');\n out.push('');\n const recLabel = report.plans.find((p) => p.tier === report.recommended)?.label ?? report.recommended;\n out.push(`**${recLabel}** — ${report.rationale}`);\n if (report.unresolved.total) {\n out.push('');\n out.push(`> ⚠ ${deltaSummary(report.unresolved)} advisory(ies) have no upgrade path in any plan.`);\n }\n return out.join('\\n');\n}\n","import { computeDriftScore } from '../../core-open/index.js';\nimport type { ScanArtifact, ProjectScan } from '../../core-open/index.js';\n\n/**\n * Estimate the DriftScore after applying a plan's upgrades.\n *\n * The DriftScore is a pure function of the scan's per-project state\n * (`computeDriftScore`), so we project the post-upgrade score by mutating a copy\n * of the scan to reflect the plan landing, then recomputing:\n *\n * - each upgraded dependency moves out of its major-age bucket\n * (`majorsBehind ≥ 2 → twoPlusBehind`, `== 1 → oneBehind`) into `current`;\n * - each upgraded framework's `majorsBehind` is zeroed.\n *\n * It is a principled estimate, not a re-scan: patch/minor upgrades (0 majors\n * behind) don't move the major-age buckets, so their gain shows up only through\n * the freshness component when release-date data is present — which is honest,\n * since a patch bump barely changes structural drift. Deterministic.\n */\n\n/** Recompute the DriftScore assuming every package named in `upgraded` lands at latest. */\nexport function estimateDriftScore(artifact: ScanArtifact, upgraded: Set<string>): number {\n const projects: ProjectScan[] = JSON.parse(JSON.stringify(artifact.projects ?? []));\n for (const p of projects) {\n const buckets = p.dependencyAgeBuckets;\n for (const dep of p.dependencies ?? []) {\n if (!upgraded.has(dep.package)) continue;\n const mb = dep.majorsBehind ?? 0;\n if (mb >= 2 && buckets.twoPlusBehind > 0) {\n buckets.twoPlusBehind--;\n buckets.current++;\n } else if (mb === 1 && buckets.oneBehind > 0) {\n buckets.oneBehind--;\n buckets.current++;\n }\n }\n for (const fw of p.frameworks ?? []) {\n if (upgraded.has(fw.name)) fw.majorsBehind = 0;\n }\n }\n return computeDriftScore(projects).score;\n}\n","import { spawnSync } from 'node:child_process';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { PlannedUpgrade } from './types.js';\n\n/**\n * Applies a chosen plan by running each ecosystem's native package manager to\n * pin the target version — which edits the manifest AND installs in one step.\n * `--dry-run` prints the commands without executing. Ecosystems without a clean\n * one-shot pin command are reported as \"manual\", never silently skipped.\n */\n\n/** The npm-family package manager detected for a project. */\nexport type NpmPackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun';\n\nexport interface UpgradeCommand {\n cmd: string;\n args: string[];\n}\n\n/**\n * Build the native command that pins `pkg` to `version` for an ecosystem. Pure\n * and exported for tests. Returns null for ecosystems with no clean one-shot pin\n * (java, hex) — those are reported as manual.\n */\nexport function pmCommandFor(\n ecosystem: string,\n pkg: string,\n version: string,\n pm: NpmPackageManager = 'npm',\n opts: { workspaceRoot?: boolean } = {},\n): UpgradeCommand | null {\n switch (ecosystem) {\n case 'npm':\n // At a pnpm/yarn workspace ROOT the add must be explicit, or pnpm aborts\n // with ERR_PNPM_ADDING_TO_ROOT and yarn refuses the root add.\n if (pm === 'pnpm') return { cmd: 'pnpm', args: opts.workspaceRoot ? ['add', '-w', `${pkg}@${version}`] : ['add', `${pkg}@${version}`] };\n if (pm === 'yarn') return { cmd: 'yarn', args: opts.workspaceRoot ? ['add', '-W', `${pkg}@${version}`] : ['add', `${pkg}@${version}`] };\n if (pm === 'bun') return { cmd: 'bun', args: ['add', `${pkg}@${version}`] };\n return { cmd: 'npm', args: ['install', `${pkg}@${version}`] };\n case 'pypi':\n return { cmd: 'pip', args: ['install', `${pkg}==${version}`] };\n case 'cargo':\n return { cmd: 'cargo', args: ['add', `${pkg}@${version}`] };\n case 'go':\n return { cmd: 'go', args: ['get', `${pkg}@${version.startsWith('v') ? version : `v${version}`}`] };\n case 'composer':\n return { cmd: 'composer', args: ['require', `${pkg}:${version}`] };\n case 'nuget':\n return { cmd: 'dotnet', args: ['add', 'package', pkg, '--version', version] };\n case 'dotnet':\n return { cmd: 'dotnet', args: ['add', 'package', pkg, '--version', version] };\n case 'dart':\n case 'pub':\n return { cmd: 'dart', args: ['pub', 'add', `${pkg}:${version}`] };\n case 'rubygems':\n case 'ruby':\n // Bundler has no clean per-gem pin via CLI; update within the Gemfile's\n // constraint (best-effort). A hard pin needs a manual Gemfile edit.\n return { cmd: 'bundle', args: ['update', pkg] };\n default:\n return null; // java (maven/gradle), hex, swift → manual\n }\n}\n\nexport interface AppliedUpgrade {\n package: string;\n to: string | null;\n status: 'applied' | 'failed' | 'manual' | 'skipped';\n detail?: string;\n}\n\nexport interface RunResult {\n ok: boolean;\n detail?: string;\n /** The package-manager binary was not found on PATH (report as manual, not failed). */\n toolMissing?: boolean;\n}\n\nexport interface ApplyOptions {\n dryRun?: boolean;\n /** npm-family package manager for npm upgrades (from the scan). */\n packageManager?: NpmPackageManager;\n /** Runner override for tests. */\n run?: (cmd: UpgradeCommand, cwd: string) => RunResult;\n}\n\nfunction defaultRun(cmd: UpgradeCommand, cwd: string): RunResult {\n const res = spawnSync(cmd.cmd, cmd.args, { cwd, stdio: 'inherit', shell: false });\n if (res.error) {\n // ENOENT = the toolchain (cargo, pip, go, …) isn't installed here. That's an\n // environment gap the user must resolve, not an upgrade that \"failed\".\n if ((res.error as NodeJS.ErrnoException).code === 'ENOENT') {\n return { ok: false, toolMissing: true, detail: `${cmd.cmd} is not installed or not on PATH` };\n }\n return { ok: false, detail: res.error.message };\n }\n if (res.status !== 0) return { ok: false, detail: `exit ${res.status ?? 'signal'}` };\n return { ok: true };\n}\n\n/** Is `dir` a package-manager workspace root (so an `add` there needs -w/-W)? */\nfunction isWorkspaceRoot(dir: string): boolean {\n try {\n if (existsSync(join(dir, 'pnpm-workspace.yaml'))) return true;\n const pkgPath = join(dir, 'package.json');\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8')) as { workspaces?: unknown };\n if (pkg?.workspaces) return true;\n }\n } catch {\n /* best-effort: treat as non-workspace */\n }\n return false;\n}\n\n/** Apply a plan's upgrades. Returns per-package outcomes (nothing is silently dropped). */\nexport function applyPlan(rootDir: string, upgrades: PlannedUpgrade[], opts: ApplyOptions = {}): AppliedUpgrade[] {\n const run = opts.run ?? defaultRun;\n const workspaceRoot = isWorkspaceRoot(rootDir);\n const results: AppliedUpgrade[] = [];\n for (const u of upgrades) {\n if (!u.to) {\n results.push({ package: u.package, to: u.to, status: 'skipped', detail: 'no target version' });\n continue;\n }\n const command = pmCommandFor(u.ecosystem, u.package, u.to, opts.packageManager, { workspaceRoot });\n if (!command) {\n results.push({ package: u.package, to: u.to, status: 'manual', detail: `${u.ecosystem}: update the manifest to ${u.to} manually` });\n continue;\n }\n if (opts.dryRun) {\n results.push({ package: u.package, to: u.to, status: 'skipped', detail: `would run: ${command.cmd} ${command.args.join(' ')}` });\n continue;\n }\n const outcome = run(command, rootDir);\n results.push({\n package: u.package,\n to: u.to,\n status: outcome.ok ? 'applied' : outcome.toolMissing ? 'manual' : 'failed',\n detail: outcome.toolMissing && outcome.detail ? `${outcome.detail} — upgrade manually` : outcome.detail,\n });\n }\n return results;\n}\n","import * as os from 'node:os';\nimport * as path from 'node:path';\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport {\n runCoreScan,\n projectTypeToVulnEcosystem,\n detectVcs,\n computeRepoFingerprint,\n resolveRepositoryName,\n parseDsn,\n type ScanOptions,\n type ScanArtifact,\n type ProjectType,\n type VulnSeverity,\n} from '../../core-open/index.js';\nimport { pathExists, readJsonFile } from '../utils/fs.js';\nimport { scanStaleness } from '../utils/scan-freshness.js';\nimport { loadAdvancedScanHook } from '../advanced-hook.js';\nimport { VERSION } from '../version.js';\nimport { resolveDsn } from '../credentials.js';\nimport { resolveIngestHost } from './dsn.js';\nimport { dashHostForIngestHost } from '../regions.js';\nimport { resolveCliInvocation } from '../../util/cli-invocation.js';\nimport * as readline from 'node:readline';\nimport { analyzeTree, type SourceEcosystem } from '../planning/usage.js';\nimport { requestFixPlan, parseFixPlanResponse } from '../utils/fix-plan.js';\nimport { renderText, renderMarkdown } from '../planning/render.js';\nimport { estimateDriftScore } from '../planning/expected-drift.js';\nimport { applyPlan, type NpmPackageManager, type AppliedUpgrade } from '../planning/apply.js';\nimport type { FixCandidateInput, FixPlanRequest, FixPlanResponse, PlanTier, UpgradePlan } from '../planning/types.js';\n\nconst SEVERITY_RANK: Record<VulnSeverity, number> = { unknown: 0, low: 1, moderate: 2, high: 3, critical: 4 };\n\n/** Map a scanned project type to the ecosystem id sent to the planner (all ecosystems, not just npm). */\nfunction ecosystemId(type: ProjectType): string {\n return projectTypeToVulnEcosystem(type) ?? type;\n}\n\n/** Which ecosystems we can cheaply read source for, to gather usage + contracts. */\nfunction sourceEcosystem(ecosystem: string): SourceEcosystem {\n if (ecosystem === 'npm') return 'npm';\n if (ecosystem === 'pypi') return 'pypi';\n return 'unknown';\n}\n\ninterface RawCandidate {\n package: string;\n ecosystem: string;\n source: SourceEcosystem;\n from: string | null;\n to: string | null;\n majorsBehind: number | null;\n section?: string;\n}\n\n/** Collect deduped, drifted dependencies across every ecosystem in the scan artifact. */\nfunction collectCandidates(artifact: ScanArtifact): RawCandidate[] {\n const seen = new Set<string>();\n const out: RawCandidate[] = [];\n for (const project of artifact.projects ?? []) {\n const ecosystem = ecosystemId(project.type);\n for (const dep of project.dependencies ?? []) {\n const key = `${ecosystem}\\0${dep.package}`;\n if (seen.has(key)) continue;\n if (!dep.latestStable || dep.latestStable === dep.resolvedVersion) continue;\n if (dep.drift === 'current' || dep.drift === 'unknown') continue;\n seen.add(key);\n out.push({\n package: dep.package,\n ecosystem,\n source: sourceEcosystem(ecosystem),\n from: dep.resolvedVersion,\n to: dep.latestStable,\n majorsBehind: dep.majorsBehind,\n section: dep.section,\n });\n }\n }\n out.sort((a, b) => a.ecosystem.localeCompare(b.ecosystem) || a.package.localeCompare(b.package));\n return out;\n}\n\n/**\n * Runs a drift scan for `vg fix` when no usable prior scan exists. Injectable so\n * tests can exercise the auto-scan decision without a network round-trip; the\n * default runs the real core scan WITHOUT the code map (drift is all `fix`\n * needs), writing JSON quietly to a scratch file so nothing lands on stdout.\n */\nexport type FixScanner = (rootDir: string) => Promise<ScanArtifact>;\n\nconst defaultFixScanner: FixScanner = async (rootDir) => {\n const scratch = path.join(os.tmpdir(), `vg-fix-scan-${process.pid}.json`);\n const scanOpts: ScanOptions = { vibgrateVersion: VERSION, format: 'json', out: scratch, quiet: true, concurrency: 8 };\n const advanced = await loadAdvancedScanHook();\n return runCoreScan(rootDir, scanOpts, advanced);\n};\n\n/**\n * Load the scan artifact `vg fix` plans against, re-scanning when there is no\n * usable prior scan. A scan is re-run when the artifact is **missing** OR when it\n * is **out of date** with the working tree — a manifest edit or a lockfile bump\n * (e.g. from a previous `vg fix`) since the scan means the on-disk drift no\n * longer reflects the repository, so planning against it would upgrade the wrong\n * versions. Freshness is scoped to dependency manifests/lockfiles and fails open\n * (see {@link scanStaleness}).\n */\nexport async function loadArtifact(\n rootDir: string,\n inFile: string,\n scan: FixScanner = defaultFixScanner,\n): Promise<ScanArtifact> {\n const artifactPath = path.isAbsolute(inFile) ? inFile : path.join(rootDir, inFile);\n if (await pathExists(artifactPath)) {\n const staleness = scanStaleness(rootDir, artifactPath);\n if (!staleness.stale) {\n return readJsonFile<ScanArtifact>(artifactPath);\n }\n console.error(\n chalk.dim(\n `Scan is out of date (${staleness.newestChanged ?? 'a dependency manifest'} changed since the last scan) — re-running a drift scan first (code map skipped)…`,\n ),\n );\n } else {\n console.error(chalk.dim('No scan found — running a drift scan first (code map skipped)…'));\n }\n return scan(rootDir);\n}\n\n/** Best-effort, non-sensitive repository identity for dataset association + plan caching. */\nasync function repositoryIdentity(rootDir: string, override?: string): Promise<{ name?: string; vcsSha?: string }> {\n try {\n const vcs = await detectVcs(rootDir);\n const fingerprint = await computeRepoFingerprint(rootDir, vcs);\n const name = override?.trim() || (await resolveRepositoryName(rootDir));\n return { name, vcsSha: fingerprint.vcsSha };\n } catch {\n return { name: override?.trim() || undefined };\n }\n}\n\nexport const fixCommand = new Command('fix')\n .description('Analyse drift and get ranked, risk-tiered upgrade plans from the hosted planner (requires login/DSN; read-only — never edits your project)')\n .argument('[path]', 'Path to analyse', '.')\n .option('--in <file>', 'Scan artifact to read', '.vibgrate/scan_result.json')\n .option('--format <format>', 'Output format (text|json|md)', 'text')\n .option('--dsn <dsn>', 'DSN token (or use VIBGRATE_DSN env / \"vg login\")')\n .option('--region <region>', 'Override data residency region (us, eu)')\n .option('--repository-name <name>', 'Override the repository name recorded for this plan')\n .option('--plan <tier>', 'Apply a specific plan non-interactively (safe|balanced|aggressive)')\n .option('--yes', 'Apply the recommended plan without prompting')\n .option('--dry-run', 'Show what would change without applying')\n .option('--no-apply', 'Only print the plans; never modify the project')\n .option('--fail-on-vulns <severity>', 'Exit non-zero if the recommended plan leaves an advisory at/above this severity unresolved (low|moderate|high|critical)')\n .action(async (targetPath: string, opts: {\n in: string;\n format: string;\n dsn?: string;\n region?: string;\n repositoryName?: string;\n plan?: string;\n yes?: boolean;\n dryRun?: boolean;\n apply?: boolean; // commander maps --no-apply → apply === false\n failOnVulns?: string;\n }) => {\n const rootDir = path.resolve(targetPath);\n if (!(await pathExists(rootDir))) {\n console.error(chalk.red(`Path does not exist: ${rootDir}`));\n process.exit(1);\n }\n\n const failOn = opts.failOnVulns as VulnSeverity | undefined;\n if (failOn && !(failOn in SEVERITY_RANK)) {\n console.error(chalk.red(`Invalid --fail-on-vulns value '${opts.failOnVulns}'. Use one of: low, moderate, high, critical.`));\n process.exit(1);\n }\n\n // `vg fix` is a paid, hosted capability — it needs a DSN. No local planning\n // fallback exists (the planning intelligence is server-side by design).\n const dsn = resolveDsn(opts.dsn);\n if (!dsn) {\n const cli = resolveCliInvocation();\n console.error(chalk.red('vg fix needs a Vibgrate login.'));\n console.error(\n chalk.dim(\n `Run \"${cli} login\" (or set VIBGRATE_DSN / pass --dsn) to analyse upgrades with the hosted planner. ` +\n 'See https://vibgrate.com/cli for details.',\n ),\n );\n process.exit(1);\n }\n const parsed = parseDsn(dsn);\n if (!parsed) {\n console.error(chalk.red('Invalid DSN format. Re-run \"vg login\" or check VIBGRATE_DSN.'));\n process.exit(1);\n }\n\n let host: string;\n try {\n host = opts.region ? resolveIngestHost(opts.region) : parsed.host;\n } catch (e: unknown) {\n console.error(chalk.red(e instanceof Error ? e.message : String(e)));\n process.exit(1);\n }\n\n let artifact: ScanArtifact;\n try {\n artifact = await loadArtifact(rootDir, opts.in);\n } catch (e: unknown) {\n console.error(chalk.red(e instanceof Error ? e.message : String(e)));\n process.exit(1);\n }\n\n const raw = collectCandidates(artifact);\n\n // Gather usage + contracts from local source (never leaves the machine except\n // as the aggregate counts/symbols the planner needs). One bounded walk.\n const usage = analyzeTree(\n rootDir,\n raw.filter((c) => c.source !== 'unknown').map((c) => ({ name: c.package, ecosystem: c.source })),\n );\n\n const candidates: FixCandidateInput[] = raw.map((c) => {\n const u = usage.get(c.package);\n return {\n package: c.package,\n ecosystem: c.ecosystem,\n currentVersion: c.from,\n latestVersion: c.to,\n majorsBehind: c.majorsBehind,\n section: c.section,\n ...(u && (u.importSites > 0 || u.filesTouched > 0)\n ? { usage: { importSites: u.importSites, filesTouched: u.filesTouched } }\n : {}),\n ...(u && u.contracts.length ? { contracts: u.contracts } : {}),\n };\n });\n\n const request: FixPlanRequest = {\n cliVersion: VERSION,\n repository: await repositoryIdentity(rootDir, opts.repositoryName),\n candidates,\n };\n\n let response: FixPlanResponse;\n try {\n const { response: httpResponse } = await requestFixPlan({\n scheme: parsed.scheme,\n host,\n keyId: parsed.keyId,\n secret: parsed.secret,\n request,\n timestamp: String(Date.now()),\n });\n if (!httpResponse.ok) {\n handleHttpError(httpResponse, parsed.workspaceId, host);\n return; // handleHttpError exits, but keep the type-checker happy.\n }\n response = await parseFixPlanResponse(httpResponse);\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e);\n console.error(chalk.red(`Could not reach the upgrade planner: ${msg}`));\n console.error(chalk.dim('Check your connection and try again, or see https://vibgrate.com/help.'));\n process.exit(1);\n }\n\n if (response.status === 'error') {\n console.error(chalk.red(response.error ?? 'The planner returned an error.'));\n if (response.requestId) console.error(chalk.dim(` (ref ${response.requestId})`));\n process.exit(1);\n }\n\n // Augment each plan with an estimated post-upgrade DriftScore (client-side).\n const currentDrift = artifact.drift?.score;\n if (typeof currentDrift === 'number') {\n response.currentDriftScore = currentDrift;\n for (const plan of response.plans) {\n const upgraded = new Set(plan.upgrades.map((u) => u.package));\n const expected = estimateDriftScore(artifact, upgraded);\n plan.expectedDriftScore = expected;\n plan.driftDelta = expected - currentDrift;\n }\n }\n\n emit(response, opts.format);\n\n // Apply flow (text mode only; --no-apply / json / md are report-only).\n if (opts.format === 'text' && opts.apply !== false) {\n await runApplyFlow(rootDir, artifact, response, opts);\n }\n\n if (failOn) {\n // Advisories the *recommended* plan does not remediate = the estate's open\n // advisories minus what the recommended plan fixes, evaluated by severity.\n const recommended = response.plans.find((p) => p.tier === response.recommended);\n const threshold = SEVERITY_RANK[failOn];\n let stillOpen = 0;\n for (const sev of Object.keys(SEVERITY_RANK) as VulnSeverity[]) {\n if (SEVERITY_RANK[sev] < threshold) continue;\n const open = response.unresolved.bySeverity[sev] ?? 0;\n // Anything the recommended plan itself does not fix also counts as open.\n const notFixedByRecommended =\n (response.plans.find((p) => p.tier === 'aggressive')?.fixes.bySeverity[sev] ?? 0) -\n (recommended?.fixes.bySeverity[sev] ?? 0);\n stillOpen += open + Math.max(0, notFixedByRecommended);\n }\n if (stillOpen > 0) {\n console.error(\n chalk.red(`\\nFailing: the recommended plan leaves ${stillOpen} advisory(ies) at/above ${failOn} unresolved.`),\n );\n process.exit(2);\n }\n }\n });\n\n/** Turn a non-2xx planner response into an actionable, non-leaky error and exit. */\nfunction handleHttpError(response: Response, workspaceId: string, host: string): never {\n const upgradeUrl = `https://${dashHostForIngestHost(host)}/${workspaceId}`;\n if (response.status === 401 || response.status === 403) {\n console.error(chalk.red('Not authorised. Your DSN may be invalid or lack access to this workspace.'));\n console.error(chalk.dim('Re-run \"vg login\" or check VIBGRATE_DSN.'));\n process.exit(1);\n }\n if (response.status === 402) {\n console.error(chalk.red('vg fix is a paid capability that is not enabled on your current plan.'));\n console.error(chalk.dim(`Upgrade to enable the hosted upgrade planner: ${upgradeUrl}`));\n process.exit(1);\n }\n if (response.status === 429) {\n console.error(chalk.red('Rate limited by the planner. Wait a moment and try again.'));\n process.exit(1);\n }\n console.error(chalk.red(`The planner returned HTTP ${response.status}.`));\n console.error(chalk.dim('Try again shortly, or see https://vibgrate.com/help.'));\n process.exit(1);\n}\n\nfunction emit(report: FixPlanResponse, format: string): void {\n switch (format) {\n case 'json':\n console.log(JSON.stringify(report, null, 2));\n break;\n case 'md':\n console.log(renderMarkdown(report));\n break;\n case 'text':\n default:\n console.log(renderText(report));\n break;\n }\n}\n\n/** The npm-family package manager to drive npm upgrades, from the scan. */\nfunction npmPackageManager(artifact: ScanArtifact): NpmPackageManager {\n for (const p of artifact.projects ?? []) {\n if ((p.type === 'node' || p.type === 'typescript') && p.packageManager) {\n const pm = p.packageManager;\n if (pm === 'pnpm' || pm === 'yarn' || pm === 'bun' || pm === 'npm') return pm;\n }\n }\n return 'npm';\n}\n\n/** Narrow a scanned project's package-manager string to the npm family (default npm). */\nfunction toNpmPackageManager(pm?: string): NpmPackageManager {\n return pm === 'pnpm' || pm === 'yarn' || pm === 'bun' ? pm : 'npm';\n}\n\n/**\n * Locate the scanned project directory(ies) that actually declare `pkg` in the\n * given ecosystem, each with the package manager to drive there. In a monorepo a\n * dependency lives in one or more workspace members; upgrading it in the member\n * that declares it is both correct (no root pollution) and avoids pnpm's\n * ERR_PNPM_ADDING_TO_ROOT guard. Empty when we can't place it (caller falls back\n * to the repo root).\n */\nfunction projectsDeclaring(\n rootDir: string,\n artifact: ScanArtifact,\n pkg: string,\n ecosystem: string,\n): Array<{ dir: string; pm: NpmPackageManager }> {\n const out: Array<{ dir: string; pm: NpmPackageManager }> = [];\n const seen = new Set<string>();\n for (const project of artifact.projects ?? []) {\n if (ecosystemId(project.type) !== ecosystem) continue;\n if (!(project.dependencies ?? []).some((d) => d.package === pkg)) continue;\n const dir = path.resolve(rootDir, project.path && project.path !== '.' ? project.path : '.');\n if (seen.has(dir)) continue;\n seen.add(dir);\n out.push({ dir, pm: toNpmPackageManager(project.packageManager) });\n }\n return out;\n}\n\n/**\n * Apply the chosen plan, routing each upgrade to the sub-project(s) that declare\n * it (falling back to the repo root when a package can't be located). Groups by\n * target directory so each project's package manager runs once, and tags each\n * result with the relative project path so a monorepo run is legible.\n */\nexport function applyChosenPlan(\n rootDir: string,\n artifact: ScanArtifact,\n upgrades: UpgradePlan['upgrades'],\n opts: { dryRun?: boolean },\n): AppliedUpgrade[] {\n const fallbackPm = npmPackageManager(artifact);\n const groups = new Map<string, { dir: string; pm: NpmPackageManager; upgrades: UpgradePlan['upgrades'] }>();\n for (const u of upgrades) {\n let targets = projectsDeclaring(rootDir, artifact, u.package, u.ecosystem);\n if (targets.length === 0) targets = [{ dir: rootDir, pm: fallbackPm }];\n for (const t of targets) {\n const group = groups.get(t.dir) ?? { dir: t.dir, pm: t.pm, upgrades: [] };\n group.upgrades.push(u);\n groups.set(t.dir, group);\n }\n }\n const results: AppliedUpgrade[] = [];\n for (const group of groups.values()) {\n const applied = applyPlan(group.dir, group.upgrades, { dryRun: opts.dryRun, packageManager: group.pm });\n const rel = path.relative(rootDir, group.dir) || '.';\n for (const r of applied) {\n results.push(rel === '.' ? r : { ...r, detail: [r.detail, `in ${rel}`].filter(Boolean).join(' · ') });\n }\n }\n return results;\n}\n\n/** Interactive plan picker (TTY). Resolves to the chosen tier, or null to cancel. */\nfunction promptPlanSelection(response: FixPlanResponse): Promise<PlanTier | null> {\n const plans = response.plans.filter((p) => p.upgrades.length > 0);\n console.log(chalk.bold('\\nSelect a plan to apply:'));\n plans.forEach((p, i) => {\n const rec = p.tier === response.recommended ? chalk.green(' (recommended)') : '';\n const drift =\n typeof p.expectedDriftScore === 'number' && typeof response.currentDriftScore === 'number'\n ? ` · DriftScore ${response.currentDriftScore}→${p.expectedDriftScore}`\n : '';\n console.log(` ${i + 1}) ${chalk.bold(p.label)}${rec} risk ${p.riskScore}/100 · ${p.upgrades.length} upgrade(s)${drift}`);\n });\n const defaultIdx = plans.findIndex((p) => p.tier === response.recommended);\n const def = defaultIdx >= 0 ? defaultIdx + 1 : 1;\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n return new Promise((resolve) => {\n rl.question(`Plan [1-${plans.length}, default ${def}, q to cancel]: `, (ans) => {\n rl.close();\n const t = ans.trim().toLowerCase();\n if (t === 'q' || t === 'quit') return resolve(null);\n const n = t === '' ? def : Number.parseInt(t, 10);\n if (!Number.isInteger(n) || n < 1 || n > plans.length) return resolve(null);\n resolve(plans[n - 1].tier);\n });\n });\n}\n\n/** Choose a plan (flags → single-plan → interactive → non-interactive default), apply it, and report. */\nasync function runApplyFlow(\n rootDir: string,\n artifact: ScanArtifact,\n response: FixPlanResponse,\n opts: { plan?: string; yes?: boolean; dryRun?: boolean },\n): Promise<void> {\n const nonEmpty = response.plans.filter((p) => p.upgrades.length > 0);\n if (nonEmpty.length === 0) {\n console.log(chalk.green('\\n✔ Nothing to upgrade — every tracked dependency is current.'));\n return;\n }\n\n let chosen: UpgradePlan | undefined;\n if (opts.plan) {\n chosen = response.plans.find((p) => p.tier === opts.plan);\n if (!chosen) {\n console.error(chalk.red(`Unknown plan '${opts.plan}'. Use safe, balanced, or aggressive.`));\n process.exit(1);\n }\n } else if (nonEmpty.length === 1) {\n chosen = nonEmpty[0];\n } else if (opts.yes) {\n chosen = response.plans.find((p) => p.tier === response.recommended) ?? nonEmpty[0];\n } else if (process.stdin.isTTY && process.stdout.isTTY) {\n const tier = await promptPlanSelection(response);\n if (!tier) {\n console.log(chalk.dim('No plan applied.'));\n return;\n }\n chosen = response.plans.find((p) => p.tier === tier);\n } else {\n console.log(chalk.dim('\\nMultiple plans available — re-run with --plan <tier> or --yes to apply, or --dry-run to preview.'));\n return;\n }\n if (!chosen || chosen.upgrades.length === 0) {\n console.log(chalk.dim('Selected plan has no upgrades.'));\n return;\n }\n\n const results = applyChosenPlan(rootDir, artifact, chosen.upgrades, { dryRun: opts.dryRun });\n\n if (opts.dryRun) {\n console.log(chalk.bold(`\\nDry run — ${chosen.label} plan (${chosen.upgrades.length} upgrade(s)):`));\n for (const r of results) {\n if (r.status === 'manual') console.log(chalk.yellow(` ⚠ ${r.package}: ${r.detail}`));\n else console.log(chalk.dim(` ${r.package}: ${r.detail}`));\n }\n if (typeof chosen.expectedDriftScore === 'number') {\n console.log(chalk.dim(`Expected DriftScore after apply: ~${chosen.expectedDriftScore} (was ${response.currentDriftScore ?? '?'}).`));\n }\n return;\n }\n\n const applied = results.filter((r) => r.status === 'applied');\n const failed = results.filter((r) => r.status === 'failed');\n const manual = results.filter((r) => r.status === 'manual');\n\n console.log(chalk.bold(`\\nApplied the ${chosen.label} plan:`));\n console.log(\n chalk.green(` ✔ ${applied.length} upgraded`) +\n (failed.length ? chalk.red(` ✖ ${failed.length} failed`) : '') +\n (manual.length ? chalk.yellow(` ⚠ ${manual.length} need manual work`) : ''),\n );\n for (const r of failed) console.log(chalk.red(` ✖ ${r.package} → ${r.to}: ${r.detail ?? 'failed'}`));\n for (const r of manual) console.log(chalk.yellow(` ⚠ ${r.package} → ${r.to}: ${r.detail}`));\n if (typeof chosen.expectedDriftScore === 'number' && typeof response.currentDriftScore === 'number') {\n const delta = chosen.expectedDriftScore - response.currentDriftScore;\n console.log(\n ` Expected DriftScore: ${response.currentDriftScore} → ~${chosen.expectedDriftScore} (${delta <= 0 ? '' : '+'}${delta}). ` +\n 'Re-run `vg` to confirm the actual score.',\n );\n }\n if (failed.length) process.exitCode = 2;\n}\n","import chalk from 'chalk';\nimport type { ScanArtifact, ExtendedScanResults, InventoryItem, ServiceDependencyItem, ArchitectureResult } from '../types.js';\nimport { VERSION } from '../version.js';\nimport { driftBar } from '../../core-open/ui/bar.js';\nimport { titleBox } from '../../core-open/ui/box.js';\n\nexport function formatText(artifact: ScanArtifact): string {\n const lines: string[] = [];\n\n // Brand colours from docs/design logo bundle\n const teal = chalk.hex('#3FB0A4');\n const mint = chalk.hex('#4FE3C1');\n\n lines.push('');\n lines.push(' ' + teal('╭──────╮') + mint('➜'));\n lines.push(' ' + chalk.dim('┤') + teal('│') + ' ' + mint('◼') + ' ' + mint('◼') + ' ' + teal('│') + chalk.dim('├') + ' ' + chalk.bold.white('vibgrate'));\n lines.push(' ' + chalk.dim('┤') + teal('│') + ' ' + chalk.dim('▁▁') + ' ' + teal('│') + chalk.dim('├') + ' ' + chalk.dim(`Code Intelligence Engine v${VERSION}`));\n lines.push(' ' + teal('╰──────╯'));\n lines.push('');\n lines.push(...titleBox('Vibgrate Drift Report', teal));\n lines.push('');\n\n // Per-project\n for (const project of artifact.projects) {\n lines.push(chalk.bold(` ── ${project.name} `) + chalk.dim(`(${project.type}) ${project.path}`));\n\n if (project.runtime) {\n const behindStr = project.runtimeMajorsBehind !== undefined && project.runtimeMajorsBehind > 0\n ? chalk.yellow(` (${project.runtimeMajorsBehind} major${project.runtimeMajorsBehind > 1 ? 's' : ''} behind)`)\n : chalk.green(' (current)');\n lines.push(` Runtime: ${project.runtime}${behindStr}`);\n }\n\n if (project.targetFramework) {\n lines.push(` Target: ${project.targetFramework}`);\n }\n\n if (project.frameworks.length > 0) {\n lines.push(' Frameworks:');\n for (const fw of project.frameworks) {\n const lag = fw.majorsBehind !== null\n ? (fw.majorsBehind === 0 ? chalk.green('current') : chalk.yellow(`${fw.majorsBehind} behind`))\n : chalk.dim('unknown');\n lines.push(` ${fw.name}: ${fw.currentVersion ?? '?'} → ${fw.latestVersion ?? '?'} (${lag})`);\n }\n }\n\n // Dependency buckets\n const b = project.dependencyAgeBuckets;\n const total = b.current + b.oneBehind + b.twoPlusBehind + b.unknown;\n if (total > 0) {\n lines.push(' Dependencies:');\n lines.push(` ${chalk.green(`${b.current} current`)} ${chalk.yellow(`${b.oneBehind} 1-behind`)} ${chalk.red(`${b.twoPlusBehind} 2+ behind`)} ${chalk.dim(`${b.unknown} unknown`)}`);\n }\n\n lines.push('');\n }\n\n if (artifact.delta !== undefined) {\n // Lower is better: a positive delta means drift increased (worse → red),\n // a negative delta means drift decreased (improved → green).\n const deltaStr = artifact.delta > 0\n ? chalk.red(`+${artifact.delta}`)\n : artifact.delta < 0\n ? chalk.green(`${artifact.delta}`)\n : chalk.dim('0');\n lines.push(chalk.bold(' Drift Delta: ') + deltaStr + ' (vs baseline)');\n lines.push('');\n }\n\n // Extended scan results\n if (artifact.extended) {\n lines.push(...formatExtended(artifact.extended));\n }\n\n // Findings\n if (artifact.findings.length > 0) {\n const errors = artifact.findings.filter((f) => f.level === 'error');\n const warnings = artifact.findings.filter((f) => f.level === 'warning');\n const notes = artifact.findings.filter((f) => f.level === 'note');\n const summary = [\n errors.length > 0 ? chalk.red(`${errors.length} error${errors.length !== 1 ? 's' : ''}`) : '',\n warnings.length > 0 ? chalk.yellow(`${warnings.length} warning${warnings.length !== 1 ? 's' : ''}`) : '',\n notes.length > 0 ? chalk.blue(`${notes.length} note${notes.length !== 1 ? 's' : ''}`) : '',\n ].filter(Boolean).join(chalk.dim(', '));\n\n lines.push(chalk.bold.underline(` Findings`) + chalk.dim(` (${summary})`));\n for (const f of artifact.findings) {\n const icon = f.level === 'error' ? chalk.red('✖') : f.level === 'warning' ? chalk.yellow('⚠') : chalk.blue('ℹ');\n lines.push(` ${icon} ${f.message}`);\n lines.push(chalk.dim(` ${f.ruleId} in ${f.location}`));\n }\n lines.push('');\n }\n\n // Priority actions\n const actions = generatePriorityActions(artifact);\n if (actions.length > 0) {\n lines.push(...titleBox('Top Priority Actions'));\n lines.push('');\n for (let i = 0; i < actions.length; i++) {\n const a = actions[i];\n const num = chalk.bold.cyan(` ${i + 1}.`);\n lines.push(`${num} ${chalk.bold(a.title)}`);\n lines.push(chalk.dim(` ${a.explanation}`));\n if (a.impact) lines.push(` Impact: ${chalk.green(a.impact)}`);\n lines.push('');\n }\n }\n\n // Architecture Layers (just above drift summary)\n if (artifact.extended?.architecture) {\n lines.push(...formatArchitectureDiagram(artifact.extended.architecture));\n }\n\n // NOTE: Mermaid diagrams (relationshipDiagram) are intentionally not rendered in CLI output.\n // They are still included in JSON output for dashboard/API consumption.\n\n if (artifact.solutions && artifact.solutions.length > 0) {\n lines.push(...titleBox('Solution Drift Summary'));\n lines.push('');\n for (const solution of artifact.solutions) {\n const solScore = solution.drift?.score;\n const color = typeof solScore === 'number' ? (solScore <= 30 ? chalk.green : solScore <= 60 ? chalk.yellow : chalk.red) : chalk.dim;\n lines.push(` • ${solution.name} (${solution.projectPaths.length} projects) — ${typeof solScore === 'number' ? color(`${solScore}/100`) : chalk.dim('n/a')}`);\n }\n lines.push('');\n }\n\n // Score summary — drift score is lower-is-better (0 = no drift).\n const scoreColor = artifact.drift.score <= 30 ? chalk.green :\n artifact.drift.score <= 60 ? chalk.yellow : chalk.red;\n\n lines.push(...titleBox('DriftScore Summary'));\n lines.push('');\n lines.push(chalk.bold(' DriftScore: ') + scoreColor.bold(`${artifact.drift.score}/100`));\n lines.push(chalk.bold(' Risk Level: ') + riskBadge(artifact.drift.riskLevel));\n lines.push(chalk.bold(' Projects: ') + `${artifact.projects.length}`);\n\n if (artifact.vcs) {\n const vcsParts: string[] = [artifact.vcs.type];\n if (artifact.vcs.branch) vcsParts.push(artifact.vcs.branch);\n if (artifact.vcs.shortSha) vcsParts.push(chalk.dim(artifact.vcs.shortSha));\n lines.push(chalk.bold(' VCS: ') + vcsParts.join(' '));\n }\n\n lines.push('');\n\n // Score breakdown\n const m = new Set(artifact.drift.measured ?? ['runtime', 'framework', 'dependency', 'eol']);\n lines.push(' ' + chalk.bold.underline('Score Breakdown'));\n lines.push(` Runtime: ${m.has('runtime') ? scoreBar(artifact.drift.components.runtimeScore) : chalk.dim('n/a')}`);\n lines.push(` Frameworks: ${m.has('framework') ? scoreBar(artifact.drift.components.frameworkScore) : chalk.dim('n/a')}`);\n lines.push(` Dependencies: ${m.has('dependency') ? scoreBar(artifact.drift.components.dependencyScore) : chalk.dim('n/a')}`);\n lines.push(` EOL Risk: ${m.has('eol') ? scoreBar(artifact.drift.components.eolScore) : chalk.dim('n/a')}`);\n lines.push('');\n\n const scannedParts: string[] = [`Scanned at ${artifact.timestamp}`];\n if (artifact.durationMs !== undefined) {\n const secs = (artifact.durationMs / 1000).toFixed(1);\n scannedParts.push(`${secs}s`);\n }\n if (artifact.filesScanned !== undefined) {\n scannedParts.push(`${artifact.filesScanned} file${artifact.filesScanned !== 1 ? 's' : ''} scanned`);\n }\n if (artifact.treeSummary) {\n scannedParts.push(`${artifact.treeSummary.totalFiles.toLocaleString()} workspace files`);\n scannedParts.push(`${artifact.treeSummary.totalDirs.toLocaleString()} dirs`);\n }\n lines.push(chalk.dim(` ${scannedParts.join(' · ')}`));\n lines.push('');\n\n return lines.join('\\n');\n}\n\nfunction riskBadge(level: string): string {\n switch (level) {\n case 'low': return chalk.bgGreen.black(' LOW ');\n case 'moderate': return chalk.bgYellow.black(' MODERATE ');\n case 'high': return chalk.bgRed.white(' HIGH ');\n default: return level;\n }\n}\n\nfunction scoreBar(score: number): string {\n // Sub-cell gradient fill (green → the score's own risk colour) for a smoother read.\n return driftBar(score, 20);\n}\n\n// ── Extended results summary ──\n\nconst CATEGORY_LABELS: Record<string, string> = {\n frontend: 'Frontend',\n metaFrameworks: 'Meta-frameworks',\n bundlers: 'Bundlers',\n css: 'CSS / UI',\n backend: 'Backend',\n orm: 'ORM / Database',\n testing: 'Testing',\n lintFormat: 'Lint & Format',\n apiMessaging: 'API & Messaging',\n observability: 'Observability',\n payment: 'Payment',\n auth: 'Auth',\n email: 'Email',\n cloud: 'Cloud',\n databases: 'Databases',\n messaging: 'Messaging',\n crm: 'CRM & Comms',\n storage: 'Storage',\n search: 'Search & AI',\n};\n\nfunction formatExtended(ext: ExtendedScanResults): string[] {\n const lines: string[] = [];\n\n // ── Tooling Inventory ──\n if (ext.toolingInventory) {\n const inv = ext.toolingInventory;\n const categories = Object.entries(inv).filter(([, items]) => items.length > 0);\n if (categories.length > 0) {\n lines.push(chalk.bold.underline(' Tech Stack'));\n for (const [cat, items] of categories) {\n const label = CATEGORY_LABELS[cat] ?? cat;\n const names = (items as InventoryItem[]).map((i: InventoryItem) => chalk.white(i.name)).join(chalk.dim(', '));\n lines.push(` ${chalk.cyan(label)}: ${names}`);\n }\n lines.push('');\n }\n }\n\n // ── Service Dependencies ──\n if (ext.serviceDependencies) {\n const svc = ext.serviceDependencies;\n const categories = Object.entries(svc).filter(([, items]) => items.length > 0);\n if (categories.length > 0) {\n lines.push(chalk.bold.underline(' Services & Integrations'));\n for (const [cat, items] of categories) {\n const label = CATEGORY_LABELS[cat] ?? cat;\n const names = (items as ServiceDependencyItem[]).map((i: ServiceDependencyItem) => {\n const ver = i.version ? chalk.dim(` ${i.version}`) : '';\n return chalk.white(i.name) + ver;\n }).join(chalk.dim(', '));\n lines.push(` ${chalk.cyan(label)}: ${names}`);\n }\n lines.push('');\n }\n }\n\n // ── Breaking Change Exposure ──\n if (ext.breakingChangeExposure) {\n const bc = ext.breakingChangeExposure;\n if (bc.deprecatedPackages.length > 0 || bc.legacyPolyfills.length > 0) {\n lines.push(chalk.bold.underline(' Breaking Change Exposure'));\n\n const exposureColor = bc.exposureScore >= 40 ? chalk.red :\n bc.exposureScore >= 20 ? chalk.yellow : chalk.green;\n lines.push(` Exposure Score: ${exposureColor.bold(`${bc.exposureScore}/100`)}`);\n\n if (bc.deprecatedPackages.length > 0) {\n lines.push(` ${chalk.red('Deprecated')}: ${bc.deprecatedPackages.map((p) => chalk.dim(p)).join(', ')}`);\n }\n if (bc.legacyPolyfills.length > 0) {\n lines.push(` ${chalk.yellow('Polyfills')}: ${bc.legacyPolyfills.map((p) => chalk.dim(p)).join(', ')}`);\n }\n if (bc.peerConflictsDetected) {\n lines.push(` ${chalk.red('⚠')} Peer dependency conflicts detected`);\n }\n lines.push(` Recommendation: ${chalk.bold(bc.overallRecommendation)}`);\n\n const projectsWithPlans = bc.projectIntelligence.filter((p) => p.packages.length > 0).slice(0, 3);\n if (projectsWithPlans.length > 0) {\n lines.push(' Major Upgrade Intelligence:');\n for (const p of projectsWithPlans) {\n lines.push(` - ${p.project} (${p.recommendation})`);\n for (const pkg of p.packages.slice(0, 2)) {\n lines.push(` · ${pkg.package} ${pkg.currentVersion ?? '?'} → ${pkg.targetVersion ?? '?'} | touched ~${pkg.usage.touchedPercent}% | ${pkg.automatable}`);\n }\n }\n }\n lines.push('');\n }\n }\n\n // ── TypeScript Modernity ──\n if (ext.tsModernity && ext.tsModernity.typescriptVersion) {\n const ts = ext.tsModernity;\n lines.push(chalk.bold.underline(' TypeScript'));\n const parts: string[] = [];\n parts.push(`v${ts.typescriptVersion}`);\n if (ts.strict === true) parts.push(chalk.green('strict ✔'));\n else if (ts.strict === false) parts.push(chalk.yellow('strict ✖'));\n if (ts.moduleType) parts.push(ts.moduleType.toUpperCase());\n if (ts.target) parts.push(`target: ${ts.target}`);\n lines.push(` ${parts.join(chalk.dim(' · '))}`);\n lines.push('');\n }\n\n // ── Build & Deploy ──\n if (ext.buildDeploy) {\n const bd = ext.buildDeploy;\n const hasSomething = bd.ci.length > 0 || bd.docker.dockerfileCount > 0 || bd.packageManagers.length > 0;\n if (hasSomething) {\n lines.push(chalk.bold.underline(' Build & Deploy'));\n if (bd.ci.length > 0) lines.push(` CI: ${bd.ci.join(', ')}`);\n if (bd.docker.dockerfileCount > 0) {\n lines.push(` Docker: ${bd.docker.dockerfileCount} Dockerfile${bd.docker.dockerfileCount !== 1 ? 's' : ''} (${bd.docker.baseImages.join(', ')})`);\n }\n if (bd.packageManagers.length > 0) lines.push(` Package Managers: ${bd.packageManagers.join(', ')}`);\n if (bd.monorepoTools.length > 0) lines.push(` Monorepo: ${bd.monorepoTools.join(', ')}`);\n if (bd.iac.length > 0) lines.push(` IaC: ${bd.iac.join(', ')}`);\n lines.push('');\n }\n }\n\n\n\n // ── Product Purpose Evidence ──\n if (ext.uiPurpose) {\n const up = ext.uiPurpose;\n lines.push(chalk.bold.underline(' Product Purpose Signals'));\n lines.push(` Frameworks: ${up.detectedFrameworks.length > 0 ? up.detectedFrameworks.join(', ') : chalk.dim('unknown')}`);\n lines.push(` Evidence: ${up.topEvidence.length}${up.capped ? chalk.dim(` of ${up.evidenceCount} (capped)`) : ''}`);\n\n const top = up.topEvidence.slice(0, 8);\n if (top.length > 0) {\n lines.push(' Top Signals:');\n for (const item of top) {\n lines.push(` - [${item.kind}] ${item.value} ${chalk.dim(`(${item.file})`)}`);\n }\n }\n\n if (up.unknownSignals.length > 0) {\n lines.push(' Unknowns:');\n for (const u of up.unknownSignals.slice(0, 4)) {\n lines.push(` - ${chalk.yellow(u)}`);\n }\n }\n\n lines.push('');\n }\n\n // ── Security Posture (compact) ──\n if (ext.securityPosture) {\n const sec = ext.securityPosture;\n lines.push(chalk.bold.underline(' Security Posture'));\n const checks: string[] = [];\n checks.push(sec.lockfilePresent ? chalk.green('Lockfile ✔') : chalk.red('Lockfile ✖'));\n checks.push(sec.gitignoreCoversEnv ? chalk.green('.env ✔') : chalk.red('.env ✖'));\n checks.push(sec.gitignoreCoversNodeModules ? chalk.green('node_modules ✔') : chalk.yellow('node_modules ✖'));\n if (sec.multipleLockfileTypes) checks.push(chalk.yellow('Multiple lockfiles ⚠'));\n if (sec.envFilesTracked) checks.push(chalk.red('Env files tracked ✖'));\n lines.push(` ${checks.join(chalk.dim(' · '))}`);\n lines.push('');\n }\n // ── Platform Matrix (compact) ──\n if (ext.platformMatrix) {\n const pm = ext.platformMatrix;\n if (pm.nativeModules.length > 0 || pm.dockerBaseImages.length > 0) {\n lines.push(chalk.bold.underline(' Platform'));\n if (pm.nativeModules.length > 0) {\n lines.push(` Native modules: ${pm.nativeModules.map((m) => chalk.dim(m)).join(', ')}`);\n }\n if (pm.osAssumptions.length > 0) {\n lines.push(` OS assumptions: ${pm.osAssumptions.join(', ')}`);\n }\n lines.push('');\n }\n }\n\n\n // ── Code Quality (compact) ──\n if (ext.codeQuality) {\n const cq = ext.codeQuality;\n lines.push(chalk.bold.underline(' Code Quality'));\n lines.push(` Files: ${chalk.white(`${cq.filesAnalyzed}`)} · Functions: ${chalk.white(`${cq.functionsAnalyzed}`)} · Avg complexity: ${chalk.white(`${cq.avgCyclomaticComplexity}`)} · Avg length: ${chalk.white(`${cq.avgFunctionLength}`)} lines`);\n lines.push(` Max nesting: ${cq.maxNestingDepth} · Circular deps: ${cq.circularDependencies} · Dead code: ${cq.deadCodePercent}%`);\n if (cq.godFiles.length > 0) {\n const preview = cq.godFiles.slice(0, 3).map((f) => `${f.path} (${f.lines} lines)`).join(', ');\n lines.push(` ${chalk.yellow('God files')}: ${preview}`);\n }\n lines.push('');\n }\n // ── Dependency Graph (compact) ──\n if (ext.dependencyGraph) {\n const dg = ext.dependencyGraph;\n if (dg.lockfileType) {\n lines.push(chalk.bold.underline(' Dependency Graph'));\n lines.push(` ${dg.lockfileType}: ${chalk.white(`${dg.totalUnique}`)} unique, ${chalk.white(`${dg.totalInstalled}`)} installed`);\n if (dg.duplicatedPackages.length > 0) {\n lines.push(` ${chalk.yellow(`${dg.duplicatedPackages.length} duplicated`)} packages`);\n }\n if (dg.phantomDependencies.length > 0) {\n lines.push(` ${chalk.red(`${dg.phantomDependencies.length} phantom`)} dependencies`);\n }\n lines.push('');\n }\n }\n\n return lines;\n}\n\n// ── Architecture layer diagram ──\n\ninterface PriorityAction {\n title: string;\n explanation: string;\n impact?: string;\n severity: number;\n}\n\nfunction formatArchitectureDiagram(arch: ArchitectureResult): string[] {\n const lines: string[] = [];\n lines.push(...titleBox('Architecture Layers'));\n lines.push('');\n lines.push(chalk.bold(' Archetype: ') + `${arch.archetype}` + chalk.dim(` (${Math.round(arch.archetypeConfidence * 100)}% confidence)`));\n lines.push(` Files classified: ${arch.totalClassified}` + (arch.unclassified > 0 ? chalk.dim(` (${arch.unclassified} unclassified)`) : ''));\n lines.push('');\n if (arch.layers.length > 0) {\n for (const layer of arch.layers) {\n const risk = layer.riskLevel === 'none' ? chalk.dim('none') : layer.riskLevel === 'low' ? chalk.green('low') : layer.riskLevel === 'moderate' ? chalk.yellow('moderate') : chalk.red('high');\n lines.push(` ${chalk.bold(layer.layer)} ${layer.fileCount} file${layer.fileCount !== 1 ? 's' : ''} drift ${scoreBar(layer.driftScore)} risk ${risk}`);\n }\n lines.push('');\n }\n return lines;\n}\n\nfunction generatePriorityActions(artifact: ScanArtifact): PriorityAction[] {\n const actions: PriorityAction[] = [];\n\n // 1. EOL runtimes (highest priority)\n const eolProjects = artifact.projects.filter(\n (p) => p.runtimeMajorsBehind !== undefined && p.runtimeMajorsBehind >= 3,\n );\n if (eolProjects.length > 0) {\n const names = eolProjects.map((p) => p.name).join(', ');\n let detail = `End-of-life runtimes no longer receive security patches and block ecosystem upgrades.`;\n const fileLines: string[] = [];\n for (const p of eolProjects) {\n fileLines.push(`\\n ./${p.path}`);\n fileLines.push(`\\n ${p.runtime} → ${p.runtimeLatest} (${p.runtimeMajorsBehind} major${p.runtimeMajorsBehind! > 1 ? 's' : ''} behind)`);\n }\n detail += fileLines.join('');\n actions.push({\n title: `Upgrade EOL runtime${eolProjects.length > 1 ? 's' : ''} in ${names}`,\n explanation: detail,\n impact: `−${Math.min(eolProjects.length * 10, 30)} drift points (runtime & EOL scores)`,\n severity: 100,\n });\n }\n\n // 2. Severely outdated frameworks (3+ majors behind)\n const severeFrameworks: { name: string; fw: string; behind: number; project: string; projectPath: string }[] = [];\n for (const p of artifact.projects) {\n for (const fw of p.frameworks) {\n if (fw.majorsBehind !== null && fw.majorsBehind >= 3) {\n severeFrameworks.push({ name: fw.name, fw: `${fw.currentVersion} → ${fw.latestVersion}`, behind: fw.majorsBehind, project: p.name, projectPath: p.path });\n }\n }\n }\n if (severeFrameworks.length > 0) {\n const worst = severeFrameworks.sort((a, b) => b.behind - a.behind)[0];\n const others = severeFrameworks.length > 1 ? ` (+${severeFrameworks.length - 1} more)` : '';\n let detail = `${worst.behind} major versions behind. Major framework drift increases breaking change risk and blocks access to security fixes and performance improvements.`;\n const fileLines: string[] = [];\n let shown = 0;\n for (const sf of severeFrameworks) {\n if (shown >= 8) break;\n fileLines.push(`\\n ./${sf.projectPath}`);\n fileLines.push(`\\n ${sf.name}: ${sf.fw} (${sf.behind} major${sf.behind > 1 ? 's' : ''} behind)`);\n shown++;\n }\n const remaining = severeFrameworks.length - shown;\n detail += fileLines.join('');\n if (remaining > 0) detail += `\\n ... and ${remaining} more`;\n actions.push({\n title: `Upgrade ${worst.name} ${worst.fw} in ${worst.project}${others}`,\n explanation: detail,\n impact: `−5–15 drift points`,\n severity: 90,\n });\n }\n\n // 3. High dependency rot (>40% 2+ behind)\n for (const p of artifact.projects) {\n const b = p.dependencyAgeBuckets;\n const total = b.current + b.oneBehind + b.twoPlusBehind;\n if (total === 0) continue;\n const twoPlusPct = Math.round((b.twoPlusBehind / total) * 100);\n if (twoPlusPct >= 40) {\n let detail = `${b.twoPlusBehind} of ${total} dependencies are 2+ majors behind. Run \\`npm outdated\\` and prioritise packages with known CVEs or breaking API changes.`;\n\n // Show the worst offenders with file paths and versions\n const worstDeps = p.dependencies\n .filter((d) => d.majorsBehind !== null && d.majorsBehind >= 2)\n .sort((a, b2) => (b2.majorsBehind ?? 0) - (a.majorsBehind ?? 0));\n if (worstDeps.length > 0) {\n const depLines: string[] = [];\n let shown = 0;\n depLines.push(`\\n ./${p.path}`);\n for (const dep of worstDeps) {\n if (shown >= 8) break;\n const current = dep.resolvedVersion ?? dep.currentSpec;\n const latest = dep.latestStable ?? '?';\n depLines.push(`\\n ${dep.package}: ${current} → ${latest} (${dep.majorsBehind} major${dep.majorsBehind! > 1 ? 's' : ''} behind)`);\n shown++;\n }\n const remaining = worstDeps.length - shown;\n detail += depLines.join('');\n if (remaining > 0) detail += `\\n ... and ${remaining} more`;\n }\n\n actions.push({\n title: `Reduce dependency rot in ${p.name} (${twoPlusPct}% severely outdated)`,\n explanation: detail,\n impact: `−5–10 drift points`,\n severity: 80 + twoPlusPct / 10,\n });\n }\n }\n\n // 4. Framework 2 majors behind (important but not critical)\n const twoMajorFrameworks: { name: string; project: string; projectPath: string; fw: string }[] = [];\n for (const p of artifact.projects) {\n for (const fw of p.frameworks) {\n if (fw.majorsBehind === 2) {\n twoMajorFrameworks.push({ name: fw.name, project: p.name, projectPath: p.path, fw: `${fw.currentVersion} → ${fw.latestVersion}` });\n }\n }\n }\n // Deduplicate by framework name (same framework across projects)\n const uniqueTwo = [...new Map(twoMajorFrameworks.map((f) => [f.name, f])).values()];\n if (uniqueTwo.length > 0) {\n const list = uniqueTwo.slice(0, 3).map((f) => `${f.name} (${f.fw})`).join(', ');\n const moreCount = uniqueTwo.length > 3 ? ` +${uniqueTwo.length - 3} more` : '';\n let detail = `These frameworks are 2 major versions behind. Create upgrade tickets and check migration guides — the gap will widen with each new release.`;\n const fileLines: string[] = [];\n let shown = 0;\n for (const tf of twoMajorFrameworks) {\n if (shown >= 8) break;\n fileLines.push(`\\n ./${tf.projectPath}`);\n fileLines.push(`\\n ${tf.name}: ${tf.fw}`);\n shown++;\n }\n const remaining = twoMajorFrameworks.length - shown;\n detail += fileLines.join('');\n if (remaining > 0) detail += `\\n ... and ${remaining} more`;\n actions.push({\n title: `Plan major framework upgrades: ${list}${moreCount}`,\n explanation: detail,\n impact: `−5–10 drift points`,\n severity: 60,\n });\n }\n\n // 5. Breaking change exposure\n if (artifact.extended?.breakingChangeExposure) {\n const bc = artifact.extended.breakingChangeExposure;\n const total = bc.deprecatedPackages.length + bc.legacyPolyfills.length;\n if (total > 0) {\n const items = [...bc.deprecatedPackages, ...bc.legacyPolyfills].slice(0, 5).join(', ');\n const moreCount = total > 5 ? ` +${total - 5} more` : '';\n let detail = `${total} package${total !== 1 ? 's' : ''} are deprecated or legacy polyfills. These receive no updates and may have known vulnerabilities.`;\n\n // Map deprecated/polyfill packages back to projects with versions\n const allPkgNames = new Set([...bc.deprecatedPackages, ...bc.legacyPolyfills]);\n const fileLines: string[] = [];\n let shown = 0;\n for (const p of artifact.projects) {\n const matches = p.dependencies.filter((d) => allPkgNames.has(d.package));\n if (matches.length === 0) continue;\n if (shown >= 10) break;\n fileLines.push(`\\n ./${p.path}`);\n for (const dep of matches) {\n if (shown >= 10) break;\n const ver = dep.resolvedVersion ?? dep.currentSpec;\n const label = bc.deprecatedPackages.includes(dep.package) ? 'deprecated' : 'polyfill';\n fileLines.push(`\\n ${dep.package}: ${ver} (${label})`);\n shown++;\n }\n }\n const remaining = total - shown;\n detail += fileLines.join('');\n if (remaining > 0) detail += `\\n ... and ${remaining} more`;\n\n actions.push({\n title: `Replace deprecated/legacy packages: ${items}${moreCount}`,\n explanation: detail,\n severity: 55,\n });\n }\n }\n\n // 6. Phantom dependencies\n if (artifact.extended?.dependencyGraph) {\n const dg = artifact.extended.dependencyGraph;\n const phantomCount = dg.phantomDependencies.length;\n if (phantomCount >= 10) {\n let detail = `Packages used in code but not declared in package.json. These rely on transitive installs and can break unpredictably when other packages update.`;\n\n // Build per-project breakdown from details if available\n const details = dg.phantomDependencyDetails;\n if (details && details.length > 0) {\n // Group by sourcePath\n const byPath = new Map<string, { package: string; spec: string }[]>();\n for (const d of details) {\n if (!byPath.has(d.sourcePath)) byPath.set(d.sourcePath, []);\n byPath.get(d.sourcePath)!.push({ package: d.package, spec: d.spec });\n }\n const pathLines: string[] = [];\n let shown = 0;\n for (const [srcPath, pkgs] of byPath) {\n if (shown >= 10) break;\n pathLines.push(`\\n ./${srcPath}`);\n for (const pkg of pkgs) {\n if (shown >= 10) break;\n pathLines.push(`\\n ${pkg.package}: ${pkg.spec}`);\n shown++;\n }\n }\n const remaining = phantomCount - shown;\n detail += pathLines.join('');\n if (remaining > 0) detail += `\\n ... and ${remaining} more`;\n }\n\n actions.push({\n title: `Fix ${phantomCount} phantom dependencies`,\n explanation: detail,\n severity: 45,\n });\n }\n }\n\n // 7. Security posture issues\n if (artifact.extended?.securityPosture) {\n const sec = artifact.extended.securityPosture;\n if (sec.envFilesTracked || !sec.lockfilePresent) {\n const issues: string[] = [];\n if (sec.envFilesTracked) issues.push('.env files are tracked in git');\n if (!sec.lockfilePresent) issues.push('no lockfile found');\n let detail: string;\n if (sec.envFilesTracked) {\n detail = 'Environment files may contain secrets. Add them to .gitignore and rotate any exposed credentials immediately.';\n detail += '\\n ./.gitignore';\n detail += '\\n Add: .env, .env.*, .env.local';\n } else {\n detail = 'Without a lockfile, installs are non-deterministic. Run the install command to generate one and commit it.';\n detail += '\\n ./';\n detail += `\\n Missing: ${sec.lockfileTypes.length > 0 ? sec.lockfileTypes.join(', ') + ' (multiple types detected)' : 'package-lock.json, pnpm-lock.yaml, or yarn.lock'}`;\n }\n actions.push({\n title: `Fix security posture: ${issues.join(', ')}`,\n explanation: detail,\n severity: 95,\n });\n }\n }\n\n // 8. Duplicate packages in dependency graph\n if (artifact.extended?.dependencyGraph) {\n const dupes = artifact.extended.dependencyGraph.duplicatedPackages;\n const highImpactDupes = dupes.filter((d) => d.versions.length >= 3);\n if (highImpactDupes.length >= 3) {\n let detail = `${highImpactDupes.length} packages have 3+ versions installed. Run \\`npm dedupe\\` to reduce bundle size and install time.`;\n const dupeLines: string[] = [];\n let shown = 0;\n for (const d of highImpactDupes) {\n if (shown >= 8) break;\n dupeLines.push(`\\n ${d.name}: ${d.versions.join(', ')} (${d.consumers} consumer${d.consumers !== 1 ? 's' : ''})`);\n shown++;\n }\n const remaining = highImpactDupes.length - shown;\n detail += dupeLines.join('');\n if (remaining > 0) detail += `\\n ... and ${remaining} more`;\n actions.push({\n title: `Deduplicate heavily-versioned packages`,\n explanation: detail,\n severity: 35,\n });\n }\n }\n\n // Sort by severity (most urgent first) and take top 5\n actions.sort((a, b) => b.severity - a.severity);\n return actions.slice(0, 5);\n}\n","import type { ScanArtifact } from '../types.js';\n\n/** Generate a Markdown report from scan artifact */\nexport function formatMarkdown(artifact: ScanArtifact): string {\n const lines: string[] = [];\n\n lines.push('# Vibgrate Drift Report');\n lines.push('');\n lines.push(`| Metric | Value |`);\n lines.push(`|--------|-------|`);\n lines.push(`| **DriftScore** | ${artifact.drift.score}/100 _(lower is better; 0 = no drift)_ |`);\n lines.push(`| **Risk Level** | ${artifact.drift.riskLevel.toUpperCase()} |`);\n lines.push(`| **Projects** | ${artifact.projects.length} |`);\n const scannedMeta: string[] = [artifact.timestamp];\n if (artifact.durationMs !== undefined) scannedMeta.push(`${(artifact.durationMs / 1000).toFixed(1)}s`);\n if (artifact.filesScanned !== undefined) scannedMeta.push(`${artifact.filesScanned} files`);\n if (artifact.treeSummary) scannedMeta.push(`${artifact.treeSummary.totalFiles.toLocaleString()} workspace files · ${artifact.treeSummary.totalDirs.toLocaleString()} dirs`);\n lines.push(`| **Scanned** | ${scannedMeta.join(' · ')} |`);\n if (artifact.vcs) {\n lines.push(`| **VCS** | ${artifact.vcs.type} |`);\n if (artifact.vcs.branch) lines.push(`| **Branch** | ${artifact.vcs.branch} |`);\n if (artifact.vcs.sha) lines.push(`| **Commit** | \\`${artifact.vcs.shortSha}\\` |`);\n }\n lines.push('');\n\n // Score breakdown\n lines.push('## Score Breakdown');\n lines.push('');\n lines.push(`| Component | Score |`);\n lines.push(`|-----------|-------|`);\n lines.push(`| Runtime | ${artifact.drift.components.runtimeScore} |`);\n lines.push(`| Frameworks | ${artifact.drift.components.frameworkScore} |`);\n lines.push(`| Dependencies | ${artifact.drift.components.dependencyScore} |`);\n lines.push(`| EOL Risk | ${artifact.drift.components.eolScore} |`);\n lines.push('');\n\n // Per project\n lines.push('## Projects');\n lines.push('');\n\n for (const project of artifact.projects) {\n lines.push(`### ${project.name} (${project.type})`);\n lines.push('');\n\n if (project.runtime) {\n const lag = project.runtimeMajorsBehind !== undefined && project.runtimeMajorsBehind > 0\n ? ` — ${project.runtimeMajorsBehind} major(s) behind`\n : ' — current';\n lines.push(`- **Runtime:** ${project.runtime}${lag}`);\n }\n\n if (project.frameworks.length > 0) {\n lines.push('- **Frameworks:**');\n for (const fw of project.frameworks) {\n const lag = fw.majorsBehind !== null\n ? (fw.majorsBehind === 0 ? 'current' : `${fw.majorsBehind} behind`)\n : 'unknown';\n lines.push(` - ${fw.name}: ${fw.currentVersion ?? '?'} → ${fw.latestVersion ?? '?'} (${lag})`);\n }\n }\n\n const b = project.dependencyAgeBuckets;\n const total = b.current + b.oneBehind + b.twoPlusBehind + b.unknown;\n if (total > 0) {\n lines.push(`- **Dependencies:** ${b.current} current, ${b.oneBehind} 1-behind, ${b.twoPlusBehind} 2+ behind, ${b.unknown} unknown`);\n }\n\n lines.push('');\n }\n\n\n if (artifact.extended?.uiPurpose) {\n const up = artifact.extended.uiPurpose;\n lines.push('## Product Purpose Signals');\n lines.push('');\n lines.push(`- **Frameworks:** ${up.detectedFrameworks.length > 0 ? up.detectedFrameworks.join(', ') : 'unknown'}`);\n lines.push(`- **Evidence Items:** ${up.topEvidence.length}${up.capped ? ` (capped from ${up.evidenceCount})` : ''}`);\n if (up.topEvidence.length > 0) {\n lines.push('- **Top Evidence:**');\n for (const item of up.topEvidence.slice(0, 10)) {\n lines.push(` - [${item.kind}] ${item.value} (${item.file})`);\n }\n }\n if (up.unknownSignals.length > 0) {\n lines.push('- **Unknowns:**');\n for (const u of up.unknownSignals.slice(0, 5)) {\n lines.push(` - ${u}`);\n }\n }\n lines.push('');\n }\n // Recommended standards (purpose-matched)\n if (artifact.extended?.standards && artifact.extended.standards.recommended.length > 0) {\n const std = artifact.extended.standards;\n lines.push('## Recommended Standards');\n lines.push('');\n const purposes = std.projectPurposes.map((p) => `${p.project} → ${p.category}`).join(', ');\n if (purposes) lines.push(`- **Detected purpose:** ${purposes}`);\n if (std.frameworks.length > 0) {\n lines.push('- **Compliance framework coverage:**');\n for (const f of std.frameworks) {\n lines.push(` - ${f.name}: ${f.recommendedMembers}/${f.totalMembers} member standards apply`);\n }\n }\n lines.push('- **Top standards to consider:**');\n for (const rec of std.recommended.slice(0, 10)) {\n const flag = rec.complianceRelevant ? ' _(compliance)_' : '';\n lines.push(` - **${rec.name}** — ${rec.reason}${flag}`);\n }\n lines.push('');\n }\n // Findings\n if (artifact.findings.length > 0) {\n lines.push('## Findings');\n lines.push('');\n lines.push(`| Level | Rule | Message | Location |`);\n lines.push(`|-------|------|---------|----------|`);\n for (const f of artifact.findings) {\n const emoji = f.level === 'error' ? '🔴' : f.level === 'warning' ? '🟡' : '🔵';\n lines.push(`| ${emoji} ${f.level} | ${f.ruleId} | ${f.message} | ${f.location} |`);\n }\n lines.push('');\n }\n\n if (artifact.delta !== undefined) {\n // Lower is better: a rise (positive delta) means drift worsened; a fall means it improved.\n const dir = artifact.delta > 0 ? '📈' : artifact.delta < 0 ? '📉' : '➡️';\n const trend = artifact.delta > 0 ? ' _(worsened)_' : artifact.delta < 0 ? ' _(improved)_' : '';\n lines.push(`## Drift Delta: ${dir} ${artifact.delta > 0 ? '+' : ''}${artifact.delta} vs baseline${trend}`);\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n","import * as path from 'node:path';\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { pathExists, readJsonFile } from '../utils/fs.js';\nimport { formatText } from '../formatters/text.js';\nimport { formatMarkdown } from '../formatters/markdown.js';\nimport type { ScanArtifact } from '../types.js';\n\nexport const reportCommand = new Command('report')\n .description('Generate a drift report from a scan artifact')\n .option('--in <file>', 'Input artifact file', '.vibgrate/scan_result.json')\n .option('--format <format>', 'Output format (md|text|json)', 'text')\n .action(async (opts: { in: string; format: string }) => {\n const artifactPath = path.resolve(opts.in);\n\n if (!(await pathExists(artifactPath))) {\n console.error(chalk.red(`Artifact not found: ${artifactPath}`));\n console.error(chalk.dim('Run \"vibgrate scan\" first to generate a scan artifact.'));\n process.exit(1);\n }\n\n const artifact = await readJsonFile<ScanArtifact>(artifactPath);\n\n switch (opts.format) {\n case 'md':\n console.log(formatMarkdown(artifact));\n break;\n case 'json':\n console.log(JSON.stringify(artifact, null, 2));\n break;\n case 'text':\n default:\n console.log(formatText(artifact));\n break;\n }\n });\n","import { spawn } from 'node:child_process';\n\n/**\n * Best-effort open of a URL in the user's default browser. Returns true if a\n * launcher was spawned (not a guarantee the browser actually opened). Callers\n * should always print the URL too, in case this fails or we're headless.\n */\nexport function openUrl(url: string): boolean {\n const platform = process.platform;\n let command: string;\n let args: string[];\n\n if (platform === 'darwin') {\n command = 'open';\n args = [url];\n } else if (platform === 'win32') {\n command = 'cmd';\n // `start` needs an empty title arg first when the URL contains special chars.\n args = ['/c', 'start', '', url];\n } else {\n command = 'xdg-open';\n args = [url];\n }\n\n try {\n const child = spawn(command, args, { stdio: 'ignore', detached: true });\n child.on('error', () => {\n /* swallow — caller falls back to printing the URL */\n });\n child.unref();\n return true;\n } catch {\n return false;\n }\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { availableRegionIds } from '../regions.js';\nimport { resolveIngestHost, createWorkspaceDsn } from './dsn.js';\nimport { writeStoredCredentials, credentialsPath, gitignoreEntryForCredentials } from '../credentials.js';\nimport type { StoredCredentials } from '../credentials.js';\nimport { findGitRoot, ensureGitignored } from '../utils/gitignore.js';\nimport { resolveCliInvocation } from '../../util/cli-invocation.js';\nimport * as path from 'node:path';\nimport { openUrl } from '../utils/open-url.js';\n\ninterface StartResponse {\n deviceCode: string;\n userCode: string;\n verificationUri: string;\n verificationUriComplete: string;\n expiresIn: number;\n interval: number;\n}\n\ninterface TokenResponse {\n status:\n | 'authorization_pending'\n | 'complete'\n | 'access_denied'\n | 'expired'\n | 'invalid'\n | 'error';\n dsn?: string;\n keyId?: string;\n workspaceId?: string;\n ingestHost?: string;\n error?: string;\n}\n\nconst delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\n/** True when `file` resolves to a path inside the `dir` tree. */\nfunction isInside(dir: string, file: string): boolean {\n const rel = path.relative(dir, file);\n return !!rel && !rel.startsWith('..') && !path.isAbsolute(rel);\n}\n\nexport const loginCommand = new Command('login')\n .description('Authenticate the CLI with your Vibgrate workspace via the browser')\n .option('--ingest <url>', 'Ingest API URL (overrides --region)')\n .option('--region <region>', `Data residency region (${availableRegionIds().join(', ')})`, 'us')\n .option('--no-browser', 'Do not attempt to open a browser automatically')\n .option(\n '--local',\n 'Store credentials in this project (.vibgrate/credentials.json) instead of ~/.vibgrate',\n )\n .action(async (opts: { ingest?: string; region: string; browser: boolean; local?: boolean }) => {\n let ingestHost: string;\n try {\n ingestHost = resolveIngestHost(opts.region, opts.ingest);\n } catch (e: unknown) {\n console.error(chalk.red(e instanceof Error ? e.message : String(e)));\n process.exit(1);\n }\n\n const base = `https://${ingestHost}/v1/auth/device`;\n\n // 1. Start the device authorization request.\n let start: StartResponse;\n try {\n const res = await fetch(`${base}/start`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', Connection: 'close' },\n body: '{}',\n });\n if (!res.ok) {\n console.error(chalk.red(`Failed to start login (HTTP ${res.status}).`));\n process.exit(1);\n }\n start = (await res.json()) as StartResponse;\n } catch (e: unknown) {\n console.error(chalk.red(`Could not reach ${ingestHost}: ${e instanceof Error ? e.message : String(e)}`));\n process.exit(1);\n }\n\n // 2. Prompt the user to approve in the browser.\n console.log('');\n console.log('To finish signing in, open this URL and approve the request:');\n console.log('');\n console.log(' ' + chalk.cyan(start.verificationUri));\n console.log('');\n console.log(' Your code: ' + chalk.bold(start.userCode));\n console.log('');\n\n if (opts.browser) {\n const opened = openUrl(start.verificationUriComplete);\n if (opened) {\n console.log(chalk.dim('Opening your browser… (if it does not open, use the URL above)'));\n }\n }\n console.log(chalk.dim('Waiting for approval…'));\n\n // 3. Poll for completion.\n const intervalMs = Math.max(2, start.interval || 5) * 1000;\n const deadline = Date.now() + (start.expiresIn || 900) * 1000;\n\n while (Date.now() < deadline) {\n await delay(intervalMs);\n let token: TokenResponse;\n try {\n const res = await fetch(`${base}/token`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', Connection: 'close' },\n body: JSON.stringify({ deviceCode: start.deviceCode }),\n });\n token = (await res.json()) as TokenResponse;\n } catch {\n // Transient network error — keep polling until the deadline.\n continue;\n }\n\n if (token.status === 'authorization_pending') continue;\n\n if (token.status === 'complete') {\n // Resolve the DSN. An existing account comes back with one from the\n // device flow; a brand-new account has no workspace yet, so we\n // provision one automatically in the user's region rather than making\n // the user run \"dsn create\" by hand. Login itself already succeeded —\n // only the workspace setup can still fail here.\n let creds: StoredCredentials;\n if (token.dsn) {\n creds = {\n dsn: token.dsn,\n workspaceId: token.workspaceId,\n keyId: token.keyId,\n ingestHost: token.ingestHost ?? ingestHost,\n savedAt: new Date().toISOString(),\n };\n } else {\n console.log(chalk.dim('Setting up your workspace…'));\n try {\n const provisioned = await createWorkspaceDsn({\n region: opts.region,\n ingest: opts.ingest,\n });\n creds = {\n dsn: provisioned.dsn,\n workspaceId: provisioned.workspaceId,\n keyId: provisioned.keyId,\n ingestHost: provisioned.ingestHost,\n savedAt: new Date().toISOString(),\n };\n } catch (e: unknown) {\n console.error(\n chalk.red('✖ Signed in, but workspace setup failed: ') +\n (e instanceof Error ? e.message : String(e)),\n );\n console.error(\n chalk.dim(' Finish setup with \"vibgrate dsn create --workspace new\".'),\n );\n process.exit(1);\n }\n }\n\n const storeOpts = { local: opts.local === true };\n writeStoredCredentials(creds, storeOpts);\n const credsFile = credentialsPath(storeOpts);\n console.log('');\n console.log(chalk.green('✔') + ' Logged in.');\n if (creds.workspaceId) {\n console.log(' Workspace: ' + chalk.bold(creds.workspaceId));\n }\n console.log(chalk.dim(` Credentials saved to ${credsFile}`));\n\n // Defense in depth (GUARDRAILS §1.1): the DSN we just stored is a\n // credential and must never be committed. Only touch .gitignore when the\n // credentials file actually lives inside the repo (the project-local\n // store) — a home-directory store is already outside version control, so\n // there is nothing to ignore. This is best-effort: never fail an\n // otherwise-successful login over .gitignore housekeeping.\n try {\n const root = findGitRoot();\n if (root && isInside(root, credsFile)) {\n const res = ensureGitignored(gitignoreEntryForCredentials(root, credsFile), root);\n if (res.status === 'created') {\n console.log(chalk.dim(` Created .gitignore and ignored ${res.entry}`));\n } else if (res.status === 'added') {\n console.log(chalk.dim(` Added ${res.entry} to .gitignore`));\n }\n }\n } catch {\n /* non-fatal */\n }\n\n console.log(chalk.dim(` You can now run \"${resolveCliInvocation()} scan --push\".`));\n return;\n }\n\n if (token.status === 'access_denied') {\n console.error(chalk.red('✖ Login was denied in the browser.'));\n process.exit(1);\n }\n if (token.status === 'expired' || token.status === 'invalid') {\n console.error(chalk.red('✖ Login request expired. Run \"vibgrate login\" again.'));\n process.exit(1);\n }\n if (token.status === 'error') {\n console.error(chalk.red(`✖ ${token.error ?? 'Login failed.'}`));\n process.exit(1);\n }\n }\n\n console.error(chalk.red('✖ Timed out waiting for approval. Run \"vibgrate login\" again.'));\n process.exit(1);\n });\n","/**\n * Shell-aware hints for the CLI.\n *\n * When we tell a user how to unset an environment variable, the syntax depends\n * on their shell — `unset` (POSIX sh/bash/zsh), `set -e` (fish),\n * `unsetenv` (csh/tcsh), `Remove-Item Env:` (PowerShell), `set VAR=` (cmd.exe).\n * Printing one hardcoded form is wrong for everyone else, so we pick the command\n * that matches the environment we can actually detect.\n */\n\nexport interface ShellEnv {\n /** Defaults to `process.platform`. */\n platform?: NodeJS.Platform;\n /** Defaults to `process.env.SHELL` (the user's login shell on Unix). */\n shell?: string;\n}\n\n/**\n * Return the command that unsets `varName` in the caller's shell.\n *\n * Detection is best-effort and honest about its limits:\n * - Unix: keyed off `$SHELL` (the login shell). fish and csh/tcsh get their\n * own syntax; everything else falls back to POSIX `unset`, which covers\n * sh/bash/zsh/ksh. `$SHELL` is the *default* shell, not guaranteed to be the\n * one currently running, but it is the only signal available.\n * - Windows: PowerShell and cmd.exe can't be told apart reliably from the\n * environment, so we show both forms rather than guess wrong.\n */\nexport function unsetEnvCommand(varName: string, env: ShellEnv = {}): string {\n const platform = env.platform ?? process.platform;\n\n if (platform === 'win32') {\n return `PowerShell: Remove-Item Env:${varName} | cmd.exe: set ${varName}=`;\n }\n\n const shell = env.shell ?? process.env.SHELL ?? '';\n const base = shell.split('/').pop() ?? '';\n if (base === 'fish') return `set -e ${varName}`;\n if (base === 'csh' || base === 'tcsh') return `unsetenv ${varName}`;\n return `unset ${varName}`;\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { clearStoredCredentials, credentialsPath } from '../credentials.js';\nimport { unsetEnvCommand } from '../utils/shell.js';\n\nexport const logoutCommand = new Command('logout')\n .description('Clear stored Vibgrate login credentials')\n .action(() => {\n const cleared = clearStoredCredentials();\n if (cleared) {\n console.log(chalk.green('✔') + ' Logged out. Stored credentials removed.');\n } else {\n console.log(chalk.dim(`No stored credentials found at ${credentialsPath()}.`));\n }\n\n // The stored file is not the only DSN source: resolveDsn() also honors the\n // VIBGRATE_DSN env var (and a --dsn flag). Deleting the file does not clear\n // those, so the user can still be authenticated after \"logout\". Warn them —\n // but never echo the value itself (GUARDRAILS §1.1), only that it is set.\n if (process.env.VIBGRATE_DSN) {\n console.log('');\n console.log(\n chalk.yellow('⚠') +\n ' VIBGRATE_DSN is still set in your environment, so commands will keep using it.',\n );\n console.log(\n chalk.dim(` Unset it to fully sign out: ${unsetEnvCommand('VIBGRATE_DSN')}`),\n );\n }\n });\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport * as os from 'node:os';\nimport semver from 'semver';\nimport { VERSION } from '../version.js';\n\nconst REGISTRY_URL = 'https://registry.npmjs.org/@vibgrate%2fcli/latest';\nconst CACHE_DIR = path.join(os.homedir(), '.vibgrate');\nconst CACHE_FILE = path.join(CACHE_DIR, 'update-check.json');\nconst CHECK_INTERVAL_MS = 12 * 60 * 60 * 1000; // 12 hours\n\nexport interface UpdateInfo {\n current: string;\n latest: string;\n updateAvailable: boolean;\n}\n\ninterface CachedCheck {\n latest: string;\n checkedAt: number;\n}\n\n/**\n * Check the npm registry for a newer version.\n * Results are cached for 24 hours to avoid unnecessary network requests.\n * Never throws — returns null on any failure.\n */\nexport async function checkForUpdate(): Promise<UpdateInfo | null> {\n try {\n // Try cache first\n const cached = await readCache();\n if (cached && Date.now() - cached.checkedAt < CHECK_INTERVAL_MS) {\n return {\n current: VERSION,\n latest: cached.latest,\n updateAvailable: semver.gt(cached.latest, VERSION),\n };\n }\n\n // Fetch from registry with a short timeout\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 5000);\n timeout.unref?.();\n\n let response: Awaited<ReturnType<typeof fetch>>;\n try {\n response = await fetch(REGISTRY_URL, {\n headers: { Accept: 'application/json' },\n signal: controller.signal,\n });\n } finally {\n clearTimeout(timeout);\n }\n\n if (!response.ok) return null;\n\n const data = (await response.json()) as { version?: string };\n const latest = data.version;\n if (!latest || !semver.valid(latest)) return null;\n\n // Update cache\n await writeCache({ latest, checkedAt: Date.now() });\n\n return {\n current: VERSION,\n latest,\n updateAvailable: semver.gt(latest, VERSION),\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Fetch the latest version from the npm registry (no cache).\n * Returns the version string or null on failure.\n */\nexport async function fetchLatestVersion(): Promise<string | null> {\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 10000);\n timeout.unref?.();\n\n let response: Awaited<ReturnType<typeof fetch>>;\n try {\n response = await fetch(REGISTRY_URL, {\n headers: { Accept: 'application/json' },\n signal: controller.signal,\n });\n } finally {\n clearTimeout(timeout);\n }\n\n if (!response.ok) return null;\n\n const data = (await response.json()) as { version?: string };\n const latest = data.version;\n if (!latest || !semver.valid(latest)) return null;\n\n // Update cache\n await writeCache({ latest, checkedAt: Date.now() });\n\n return latest;\n } catch {\n return null;\n }\n}\n\nasync function readCache(): Promise<CachedCheck | null> {\n try {\n const raw = await fs.readFile(CACHE_FILE, 'utf-8');\n const data = JSON.parse(raw) as CachedCheck;\n if (data.latest && typeof data.checkedAt === 'number') return data;\n return null;\n } catch {\n return null;\n }\n}\n\nasync function writeCache(data: CachedCheck): Promise<void> {\n try {\n await fs.mkdir(CACHE_DIR, { recursive: true });\n await fs.writeFile(CACHE_FILE, JSON.stringify(data), 'utf-8');\n } catch {\n // Non-critical — silently ignore cache write failures\n }\n}\n","import { execSync } from 'node:child_process';\nimport * as readline from 'node:readline';\nimport * as path from 'node:path';\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { VERSION } from '../version.js';\nimport { fetchLatestVersion } from '../utils/update-check.js';\nimport { pathExists } from '../utils/fs.js';\n\nexport type PackageManager = 'pnpm' | 'npm' | 'yarn' | 'bun';\n\n/**\n * Check if the CLI is installed globally by examining where it's running from.\n * Returns the package manager if global, null if local.\n */\nfunction detectGlobalInstall(): PackageManager | null {\n const execPath = process.argv[1] || '';\n // Global npm installs are typically in /usr/local/lib/node_modules or similar\n // Global pnpm installs are in ~/.local/share/pnpm or similar\n if (execPath.includes('/lib/node_modules/') || execPath.includes('\\\\node_modules\\\\')) {\n // Could be local or global node_modules - check for project markers\n if (!execPath.includes(process.cwd())) {\n // Not in current directory - likely global\n if (execPath.includes('pnpm')) return 'pnpm';\n if (execPath.includes('yarn')) return 'yarn';\n if (execPath.includes('bun')) return 'bun';\n return 'npm';\n }\n }\n return null;\n}\n\nfunction getGlobalUpdateCommand(pm: PackageManager, pkg: string, version: string): string {\n const spec = `${pkg}@${version}`;\n switch (pm) {\n case 'pnpm':\n return `pnpm add -g ${spec}`;\n case 'yarn':\n return `yarn global add ${spec}`;\n case 'bun':\n return `bun add -g ${spec}`;\n case 'npm':\n default:\n return `npm install -g ${spec}`;\n }\n}\n\n/**\n * Detect which package manager is being used in the current project\n * by checking for lockfiles in the working directory.\n */\nexport async function detectPackageManager(cwd: string): Promise<PackageManager> {\n if (await pathExists(path.join(cwd, 'pnpm-lock.yaml'))) return 'pnpm';\n if (await pathExists(path.join(cwd, 'bun.lockb'))) return 'bun';\n if (await pathExists(path.join(cwd, 'yarn.lock'))) return 'yarn';\n return 'npm'; // default\n}\n\n/**\n * Detect whether `cwd` is a monorepo/workspace root.\n *\n * pnpm refuses a plain `pnpm add` at a workspace root (ERR_PNPM_ADDING_TO_ROOT)\n * unless `-w`/`--workspace-root` is passed, because adding to the root touches the\n * root `package.json` rather than a package. A pnpm workspace is declared by a\n * `pnpm-workspace.yaml`; npm/yarn workspaces are declared by the `workspaces`\n * field in `package.json`. We treat any of these as a workspace root.\n */\nexport async function detectWorkspaceRoot(cwd: string): Promise<boolean> {\n if (await pathExists(path.join(cwd, 'pnpm-workspace.yaml'))) return true;\n try {\n const pkgPath = path.join(cwd, 'package.json');\n const raw = await (await import('node:fs/promises')).readFile(pkgPath, 'utf-8');\n const pkg = JSON.parse(raw) as { workspaces?: unknown };\n return pkg.workspaces != null;\n } catch {\n return false;\n }\n}\n\nexport interface InstallCommandOptions {\n /** When true and the package manager is pnpm, add the `-w` workspace-root flag. */\n workspaceRoot?: boolean;\n}\n\nexport function getInstallCommand(\n pm: PackageManager,\n pkg: string,\n version: string,\n isDev: boolean,\n opts: InstallCommandOptions = {},\n): string {\n const spec = `${pkg}@${version}`;\n // Only pnpm needs an explicit workspace-root flag; npm/yarn/bun add to the\n // root package.json without complaint.\n const ws = opts.workspaceRoot && pm === 'pnpm' ? ' -w' : '';\n switch (pm) {\n case 'pnpm':\n return isDev ? `pnpm add${ws} -D ${spec}` : `pnpm add${ws} ${spec}`;\n case 'yarn':\n return isDev ? `yarn add --dev ${spec}` : `yarn add ${spec}`;\n case 'bun':\n return isDev ? `bun add -d ${spec}` : `bun add ${spec}`;\n case 'npm':\n default:\n return isDev ? `npm install --save-dev ${spec}` : `npm install ${spec}`;\n }\n}\n\n/**\n * Check if vibgrate is a devDependency (vs dependency) in the project's package.json.\n */\nasync function isDevDependency(cwd: string): Promise<boolean> {\n try {\n const pkgPath = path.join(cwd, 'package.json');\n const raw = await (await import('node:fs/promises')).readFile(pkgPath, 'utf-8');\n const pkg = JSON.parse(raw) as Record<string, Record<string, string>>;\n return Boolean(pkg.devDependencies?.['@vibgrate/cli']);\n } catch {\n return true; // default to devDep for CLI tools\n }\n}\n\n/**\n * Ask the user to confirm updating at a workspace root, which needs `-w` and\n * writes to the root package.json. Returns false when not attached to a TTY so\n * the aggressive add never runs unattended (e.g. in CI) without an explicit flag.\n */\nasync function confirmWorkspaceRoot(pm: PackageManager): Promise<boolean> {\n if (!(process.stdin.isTTY && process.stdout.isTTY)) return false;\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n return new Promise((resolve) => {\n rl.question(chalk.yellow(`Update the ${pm} workspace root with -w? [y/N]: `), (ans) => {\n rl.close();\n const t = ans.trim().toLowerCase();\n resolve(t === 'y' || t === 'yes');\n });\n });\n}\n\nexport const updateCommand = new Command('update')\n .description('Update vibgrate to the latest version')\n .option('--check', 'Only check for updates, do not install')\n .option('--pm <manager>', 'Package manager to use (npm, pnpm, yarn, bun)')\n .option('--global', 'Update global installation')\n .option('-y, --yes', 'Skip confirmation prompts (e.g. installing at a workspace root)')\n .option('-w, --workspace-root', 'Allow updating the pnpm workspace root (implies --yes for that prompt)')\n .action(\n async (opts: {\n check?: boolean;\n pm?: string;\n global?: boolean;\n yes?: boolean;\n workspaceRoot?: boolean;\n }) => {\n console.log(chalk.dim(`Current version: ${VERSION}`));\n console.log(chalk.dim('Checking npm registry...'));\n\n const latest = await fetchLatestVersion();\n\n if (!latest) {\n console.error(chalk.red('Could not reach the npm registry. Check your network connection.'));\n process.exit(1);\n }\n\n const semver = await import('semver');\n if (!semver.gt(latest, VERSION)) {\n console.log(chalk.green('✔') + ` You are on the latest version (${VERSION}).`);\n return;\n }\n\n console.log(chalk.yellow(`Update available: ${VERSION} → ${latest}`));\n\n if (opts.check) {\n console.log(chalk.dim('Run \"vg update\" to install.'));\n return;\n }\n\n const cwd = process.cwd();\n\n // Detect if running from a global install or explicitly requested global update\n const globalPm = detectGlobalInstall();\n const isGlobal = opts.global || globalPm !== null;\n\n const pm: PackageManager = (opts.pm as PackageManager) || (globalPm ?? (await detectPackageManager(cwd)));\n\n let cmd: string;\n if (isGlobal) {\n cmd = getGlobalUpdateCommand(pm, '@vibgrate/cli', latest);\n console.log(chalk.dim(`Updating global installation with ${pm}: ${cmd}`));\n } else {\n const isDev = await isDevDependency(cwd);\n\n // pnpm refuses `pnpm add` at a workspace root without -w. Detect that up\n // front so we can offer to run the workspace-root-aware command instead of\n // failing with ERR_PNPM_ADDING_TO_ROOT.\n let workspaceRoot = false;\n if (pm === 'pnpm' && (await detectWorkspaceRoot(cwd))) {\n console.log(\n chalk.yellow('Detected a pnpm workspace root.') +\n chalk.dim(' Installing here needs the -w flag and updates the root package.json.'),\n );\n const proceed = opts.yes || opts.workspaceRoot || (await confirmWorkspaceRoot(pm));\n if (!proceed) {\n const rootCmd = getInstallCommand(pm, '@vibgrate/cli', latest, isDev, { workspaceRoot: true });\n console.log(chalk.dim(`Skipped. To update the workspace root, run: ${rootCmd}`));\n console.log(chalk.dim('or re-run \"vg update --yes\" (or --workspace-root) to let vg do it.'));\n return;\n }\n workspaceRoot = true;\n }\n\n cmd = getInstallCommand(pm, '@vibgrate/cli', latest, isDev, { workspaceRoot });\n console.log(chalk.dim(`Using ${pm}: ${cmd}`));\n }\n\n try {\n execSync(cmd, { cwd, stdio: 'inherit' });\n console.log(chalk.green('✔') + ` Updated to @vibgrate/cli@${latest}`);\n } catch {\n console.error(chalk.red(`Update failed. Run manually: ${cmd}`));\n process.exit(1);\n }\n },\n );\n","import * as path from 'node:path';\nimport { randomUUID } from 'node:crypto';\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { pathExists, readJsonFile, writeTextFile } from '../utils/fs.js';\n\n/**\n * The in-toto predicate type for an OpenVEX attestation. Passed to\n * `cosign attest --type …` in the release pipeline and verified by buyers.\n */\nexport const OPENVEX_PREDICATE_TYPE = 'openvex';\n\n/** OpenVEX context URI (spec version this generator emits). */\nconst OPENVEX_CONTEXT = 'https://openvex.dev/ns/v0.2.0';\n\n/** Valid OpenVEX statement statuses. */\nconst VEX_STATUSES = ['not_affected', 'affected', 'fixed', 'under_investigation'] as const;\nexport type VexStatus = (typeof VEX_STATUSES)[number];\n\n/** Justifications permitted for a `not_affected` status (OpenVEX spec). */\nconst VEX_JUSTIFICATIONS = [\n 'component_not_present',\n 'vulnerable_code_not_present',\n 'vulnerable_code_not_in_execute_path',\n 'vulnerable_code_cannot_be_controlled_by_adversary',\n 'inline_mitigations_already_exist',\n] as const;\nexport type VexJustification = (typeof VEX_JUSTIFICATIONS)[number];\n\nexport interface VexStatementInput {\n vulnerability: string;\n /** Product references (e.g. `pkg:…` or an image digest). Falls back to the document default. */\n products?: string[];\n status: VexStatus;\n justification?: VexJustification;\n impact_statement?: string;\n action_statement?: string;\n}\n\ninterface OpenVexStatement {\n vulnerability: { name: string };\n products: Array<{ '@id': string }>;\n status: VexStatus;\n justification?: VexJustification;\n impact_statement?: string;\n action_statement?: string;\n}\n\nexport interface OpenVexDocument {\n '@context': string;\n '@id': string;\n author: string;\n timestamp: string;\n version: number;\n statements: OpenVexStatement[];\n}\n\nexport interface BuildVexOptions {\n author: string;\n /** Default product applied to statements that don't carry their own. */\n defaultProduct?: string;\n timestamp?: string;\n id?: string;\n statements: VexStatementInput[];\n}\n\n/** A validation problem found while assembling the document. */\nexport class VexValidationError extends Error {}\n\n/**\n * Builds a spec-compliant OpenVEX document from a set of statements. Pure: given\n * the same inputs (including an explicit `timestamp`/`id`) it returns the same\n * document, so an attested VEX is reproducible. A document with zero statements\n * is valid and honest — it asserts no known affected components.\n */\nexport function buildVexDocument(opts: BuildVexOptions): OpenVexDocument {\n const statements: OpenVexStatement[] = opts.statements.map((s, i) => {\n if (!s.vulnerability || typeof s.vulnerability !== 'string') {\n throw new VexValidationError(`statement[${i}]: \"vulnerability\" is required`);\n }\n if (!VEX_STATUSES.includes(s.status)) {\n throw new VexValidationError(\n `statement[${i}] (${s.vulnerability}): invalid status \"${s.status}\". Expected one of: ${VEX_STATUSES.join(', ')}`,\n );\n }\n\n const products = (s.products && s.products.length > 0\n ? s.products\n : opts.defaultProduct\n ? [opts.defaultProduct]\n : []);\n if (products.length === 0) {\n throw new VexValidationError(\n `statement[${i}] (${s.vulnerability}): no product. Set \"products\" on the statement or pass --product.`,\n );\n }\n\n // OpenVEX requires a justification or impact_statement for not_affected, and\n // an action_statement is expected for affected.\n if (s.status === 'not_affected' && !s.justification && !s.impact_statement) {\n throw new VexValidationError(\n `statement[${i}] (${s.vulnerability}): \"not_affected\" requires a justification or impact_statement.`,\n );\n }\n if (s.justification && !VEX_JUSTIFICATIONS.includes(s.justification)) {\n throw new VexValidationError(\n `statement[${i}] (${s.vulnerability}): invalid justification \"${s.justification}\". Expected one of: ${VEX_JUSTIFICATIONS.join(', ')}`,\n );\n }\n if (s.status === 'affected' && !s.action_statement) {\n throw new VexValidationError(\n `statement[${i}] (${s.vulnerability}): \"affected\" requires an action_statement.`,\n );\n }\n\n const out: OpenVexStatement = {\n vulnerability: { name: s.vulnerability },\n products: products.map((p) => ({ '@id': p })),\n status: s.status,\n };\n if (s.justification) out.justification = s.justification;\n if (s.impact_statement) out.impact_statement = s.impact_statement;\n if (s.action_statement) out.action_statement = s.action_statement;\n return out;\n });\n\n return {\n '@context': OPENVEX_CONTEXT,\n '@id': opts.id ?? `https://vibgrate.com/vex/${randomUUID()}`,\n author: opts.author,\n timestamp: opts.timestamp ?? new Date().toISOString(),\n version: 1,\n statements,\n };\n}\n\n/**\n * Reads statements from a JSON file. Accepts either a bare array of statements or\n * an object with a `statements` array (e.g. an existing OpenVEX document).\n */\nasync function loadStatementsFile(filePath: string): Promise<VexStatementInput[]> {\n const data = await readJsonFile<unknown>(filePath);\n const arr = Array.isArray(data)\n ? data\n : (data && typeof data === 'object' && Array.isArray((data as { statements?: unknown }).statements)\n ? (data as { statements: unknown[] }).statements\n : null);\n if (!arr) {\n throw new VexValidationError(\n `${filePath}: expected a JSON array of statements or an object with a \"statements\" array.`,\n );\n }\n return arr as VexStatementInput[];\n}\n\nfunction collectStatement(value: string, previous: VexStatementInput[]): VexStatementInput[] {\n let parsed: unknown;\n try {\n parsed = JSON.parse(value);\n } catch {\n throw new VexValidationError(`--statement must be a JSON object: ${value.slice(0, 60)}…`);\n }\n return [...previous, parsed as VexStatementInput];\n}\n\nexport const vexCommand = new Command('vex')\n .description('Generate an OpenVEX document (exploitability statements) for attestation')\n .option('--from <file>', 'Read statements from a JSON file (array, or an object with a \"statements\" array)')\n .option(\n '--statement <json>',\n 'Add a statement as inline JSON, e.g. \\'{\"vulnerability\":\"CVE-2024-1\",\"status\":\"not_affected\",\"justification\":\"vulnerable_code_not_present\"}\\'. Repeatable.',\n collectStatement,\n [] as VexStatementInput[],\n )\n .option('--product <ref>', 'Default product reference applied to statements without their own (e.g. an image digest)')\n .option('--author <name>', 'Document author', 'Vibgrate')\n .option('--timestamp <iso>', 'Override the document timestamp (ISO 8601) for reproducible output')\n .option('--id <uri>', 'Override the document @id (otherwise a uuid URN is generated)')\n .option('--out <file>', 'Write the document to a file (default: stdout)')\n .action(async (opts: {\n from?: string;\n statement: VexStatementInput[];\n product?: string;\n author: string;\n timestamp?: string;\n id?: string;\n out?: string;\n }) => {\n try {\n const statements: VexStatementInput[] = [];\n if (opts.from) {\n const fromPath = path.resolve(opts.from);\n if (!(await pathExists(fromPath))) {\n process.stderr.write(chalk.red(`Statements file not found: ${fromPath}\\n`));\n process.exit(1);\n }\n statements.push(...(await loadStatementsFile(fromPath)));\n }\n statements.push(...opts.statement);\n\n const doc = buildVexDocument({\n author: opts.author,\n defaultProduct: opts.product,\n timestamp: opts.timestamp,\n id: opts.id,\n statements,\n });\n\n const json = JSON.stringify(doc, null, 2);\n if (opts.out) {\n await writeTextFile(path.resolve(opts.out), json + '\\n');\n process.stderr.write(\n chalk.green('✔') + ` Wrote OpenVEX document (${doc.statements.length} statement(s)) to ${path.resolve(opts.out)}\\n`,\n );\n } else {\n process.stdout.write(json + '\\n');\n }\n } catch (err) {\n if (err instanceof VexValidationError) {\n process.stderr.write(chalk.red(`VEX validation error: ${err.message}\\n`));\n process.exit(1);\n }\n throw err;\n }\n });\n","import * as path from 'node:path';\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { pathExists, readJsonFile, writeTextFile } from '../utils/fs.js';\nimport type { DependencyRow, ScanArtifact } from '../types.js';\nimport { vexCommand } from './vex.js';\n\ntype SbomFormat = 'cyclonedx' | 'spdx';\n\ninterface FlattenedDependency {\n project: string;\n package: string;\n version: string;\n currentSpec: string;\n drift: DependencyRow['drift'];\n majorsBehind: number | null;\n}\n\n/**\n * Deterministic RFC 9562 version-8 UUID derived from `seed`, so an SBOM's\n * serialNumber / documentNamespace is stable for identical content instead of\n * random. A stable id makes `vg sbom export` reproducible for a given scan and\n * format. Uses a salted FNV-1a hash; a collision is only cosmetic — the SBOM\n * content, not this id, is what a consumer verifies.\n *\n * Kept in sync with the identical helper in the API\n * (`packages/vibgrate-api/src/lib/sbom-export.ts`).\n */\nexport function deterministicUuid(seed: string): string {\n const bytes = new Uint8Array(16);\n for (let block = 0; block < 4; block++) {\n let h = 0x811c9dc5;\n const s = `${block} ${seed}`;\n for (let i = 0; i < s.length; i++) {\n h ^= s.charCodeAt(i);\n h = Math.imul(h, 0x01000193);\n }\n h >>>= 0;\n bytes[block * 4] = (h >>> 24) & 0xff;\n bytes[block * 4 + 1] = (h >>> 16) & 0xff;\n bytes[block * 4 + 2] = (h >>> 8) & 0xff;\n bytes[block * 4 + 3] = h & 0xff;\n }\n bytes[6] = (bytes[6] & 0x0f) | 0x80; // version 8 (custom)\n bytes[8] = (bytes[8] & 0x3f) | 0x80; // variant 10xx\n const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n\n/** Stable seed for the document id: format + root + the ordered dependency set. */\nfunction sbomSerialSeed(format: string, artifact: ScanArtifact, deps: FlattenedDependency[]): string {\n return [\n format,\n artifact.rootPath ?? '',\n artifact.timestamp ?? '',\n artifact.vibgrateVersion ?? '',\n ...deps.map((d) => `${d.package}|${d.version}|${d.currentSpec}|${d.project}|${d.drift}|${d.majorsBehind ?? ''}`),\n ].join('\\n');\n}\n\nexport function flattenDependencies(artifact: ScanArtifact): FlattenedDependency[] {\n const rows: FlattenedDependency[] = [];\n for (const project of artifact.projects) {\n for (const dep of project.dependencies) {\n rows.push({\n project: project.name,\n package: dep.package,\n version: dep.resolvedVersion ?? dep.currentSpec,\n currentSpec: dep.currentSpec,\n drift: dep.drift,\n majorsBehind: dep.majorsBehind,\n });\n }\n }\n return rows;\n}\n\nexport function toCycloneDx(artifact: ScanArtifact): Record<string, unknown> {\n const dependencies = flattenDependencies(artifact);\n return {\n bomFormat: 'CycloneDX',\n specVersion: '1.5',\n serialNumber: `urn:uuid:${deterministicUuid(sbomSerialSeed('cyclonedx', artifact, dependencies))}`,\n version: 1,\n metadata: {\n timestamp: artifact.timestamp,\n tools: [\n {\n vendor: 'Vibgrate',\n name: '@vibgrate/cli',\n version: artifact.vibgrateVersion,\n },\n ],\n component: {\n type: 'application',\n name: artifact.rootPath,\n },\n },\n components: dependencies.map((dep) => ({\n type: 'library',\n name: dep.package,\n version: dep.version,\n properties: [\n { name: 'vibgrate:project', value: dep.project },\n { name: 'vibgrate:currentSpec', value: dep.currentSpec },\n { name: 'vibgrate:drift', value: dep.drift },\n { name: 'vibgrate:majorsBehind', value: String(dep.majorsBehind ?? 'unknown') },\n ],\n })),\n };\n}\n\nexport function toSpdx(artifact: ScanArtifact): Record<string, unknown> {\n const dependencies = flattenDependencies(artifact);\n return {\n spdxVersion: 'SPDX-2.3',\n dataLicense: 'CC0-1.0',\n SPDXID: 'SPDXRef-DOCUMENT',\n name: `${artifact.rootPath}-sbom`,\n documentNamespace: `https://vibgrate.com/spdx/${artifact.rootPath}/${deterministicUuid(sbomSerialSeed('spdx', artifact, dependencies))}`,\n creationInfo: {\n created: artifact.timestamp,\n creators: [`Tool: @vibgrate/cli-${artifact.vibgrateVersion}`],\n },\n packages: dependencies.map((dep, i) => ({\n name: dep.package,\n SPDXID: `SPDXRef-Package-${i + 1}`,\n versionInfo: dep.version,\n downloadLocation: 'NOASSERTION',\n filesAnalyzed: false,\n externalRefs: [\n {\n referenceCategory: 'PACKAGE-MANAGER',\n referenceType: 'purl',\n referenceLocator: `pkg:npm/${encodeURIComponent(dep.package)}@${encodeURIComponent(dep.version)}`,\n },\n ],\n annotations: [\n {\n annotationType: 'OTHER',\n annotator: 'Tool: @vibgrate/cli',\n annotationDate: artifact.timestamp,\n comment: `project=${dep.project}; drift=${dep.drift}; majorsBehind=${dep.majorsBehind ?? 'unknown'}`,\n },\n ],\n })),\n };\n}\n\nfunction projectDependencyMap(artifact: ScanArtifact): Map<string, DependencyRow> {\n const map = new Map<string, DependencyRow>();\n for (const project of artifact.projects) {\n for (const dep of project.dependencies) {\n map.set(`${project.name}:${dep.package}`, dep);\n }\n }\n return map;\n}\n\nexport function formatDeltaText(base: ScanArtifact, current: ScanArtifact): string {\n const baseMap = projectDependencyMap(base);\n const currentMap = projectDependencyMap(current);\n\n const added: string[] = [];\n const removed: string[] = [];\n const changed: string[] = [];\n\n for (const [key, dep] of currentMap.entries()) {\n if (!baseMap.has(key)) {\n added.push(`${key} @ ${dep.resolvedVersion ?? dep.currentSpec}`);\n continue;\n }\n const prev = baseMap.get(key)!;\n const prevVersion = prev.resolvedVersion ?? prev.currentSpec;\n const nowVersion = dep.resolvedVersion ?? dep.currentSpec;\n if (prevVersion !== nowVersion || prev.majorsBehind !== dep.majorsBehind) {\n changed.push(`${key} ${prevVersion} -> ${nowVersion} (majorsBehind ${prev.majorsBehind ?? 'unknown'} -> ${dep.majorsBehind ?? 'unknown'})`);\n }\n }\n\n for (const [key, dep] of baseMap.entries()) {\n if (!currentMap.has(key)) {\n removed.push(`${key} @ ${dep.resolvedVersion ?? dep.currentSpec}`);\n }\n }\n\n const lines = [\n 'Vibgrate SBOM Delta',\n '===================',\n `Baseline: ${base.timestamp}`,\n `Current: ${current.timestamp}`,\n `Drift score delta: ${(current.drift.score - base.drift.score).toFixed(2)} points`,\n '',\n `Added dependencies (${added.length})`,\n ...added.map((d) => ` + ${d}`),\n '',\n `Removed dependencies (${removed.length})`,\n ...removed.map((d) => ` - ${d}`),\n '',\n `Changed dependencies (${changed.length})`,\n ...changed.map((d) => ` * ${d}`),\n ];\n\n return lines.join('\\n');\n}\n\nasync function readArtifactOrExit(filePath: string): Promise<ScanArtifact> {\n const absolutePath = path.resolve(filePath);\n if (!(await pathExists(absolutePath))) {\n console.error(chalk.red(`Artifact not found: ${absolutePath}`));\n process.exit(1);\n }\n return readJsonFile<ScanArtifact>(absolutePath);\n}\n\nconst exportCommand = new Command('export')\n .description('Export scan artifact as SBOM')\n .option('--in <file>', 'Input artifact file', '.vibgrate/scan_result.json')\n .option('--out <file>', 'Output SBOM file')\n .option('--format <format>', 'SBOM format (cyclonedx|spdx)', 'cyclonedx')\n .action(async (opts: { in: string; out?: string; format: string }) => {\n const artifact = await readArtifactOrExit(opts.in);\n const format = opts.format.toLowerCase() as SbomFormat;\n\n if (format !== 'cyclonedx' && format !== 'spdx') {\n console.error(chalk.red('Invalid SBOM format. Use cyclonedx or spdx.'));\n process.exit(1);\n }\n\n const sbom = format === 'cyclonedx' ? toCycloneDx(artifact) : toSpdx(artifact);\n const body = JSON.stringify(sbom, null, 2);\n\n if (opts.out) {\n await writeTextFile(path.resolve(opts.out), body);\n console.log(chalk.green('✔') + ` SBOM written to ${opts.out}`);\n } else {\n console.log(body);\n }\n });\n\nconst deltaCommand = new Command('delta')\n .description('Show SBOM delta between two scan artifacts')\n .requiredOption('--from <file>', 'Baseline scan artifact path')\n .requiredOption('--to <file>', 'Current scan artifact path')\n .option('--out <file>', 'Write report to file')\n .action(async (opts: { from: string; to: string; out?: string }) => {\n const base = await readArtifactOrExit(opts.from);\n const current = await readArtifactOrExit(opts.to);\n const report = formatDeltaText(base, current);\n\n if (opts.out) {\n await writeTextFile(path.resolve(opts.out), report);\n console.log(chalk.green('✔') + ` SBOM delta report written to ${opts.out}`);\n } else {\n console.log(report);\n }\n });\n\nexport const sbomCommand = new Command('sbom')\n .description('Supply-chain evidence: SBOM export/delta and OpenVEX generation')\n .addCommand(exportCommand)\n .addCommand(deltaCommand)\n .addCommand(vexCommand);\n","#!/usr/bin/env node\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { realpathSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\nimport { Command, CommanderError } from 'commander';\nimport { VERSION } from './version.js';\nimport { resolveCliInvocation, NPX_INVOCATION } from './util/cli-invocation.js';\nimport { registerBuild, runBuild } from './commands/build.js';\nimport { registerStatus } from './commands/status.js';\nimport { registerAsk } from './commands/ask.js';\nimport { registerEmbed } from './commands/embed.js';\nimport { registerShow } from './commands/show.js';\nimport { registerPath } from './commands/path.js';\nimport { registerTree } from './commands/tree.js';\nimport { registerInsights } from './commands/insights.js';\nimport { registerImpact } from './commands/impact.js';\nimport { registerUnknowns } from './commands/unknowns.js';\nimport { registerServe } from './commands/serve.js';\nimport { registerInstall } from './commands/install.js';\nimport { registerShare } from './commands/share.js';\nimport { registerBenchmark } from './commands/benchmark.js';\nimport { registerTests } from './commands/tests.js';\nimport { registerFacts } from './commands/facts.js';\nimport { registerGuide } from './commands/guide.js';\nimport { registerWhy } from './commands/why.js';\nimport { registerBisect } from './commands/bisect.js';\nimport { registerDrift } from './commands/drift.js';\nimport { registerModels } from './commands/models.js';\nimport { registerSavings } from './commands/savings.js';\nimport { registerLib } from './commands/lib.js';\nimport { registerExport } from './commands/export.js';\nimport { registerBundle } from './commands/bundle.js';\nimport { CliError, ExitCode } from './util/exit.js';\nimport { c, info, disableColor } from './util/output.js';\n\n// Drift-reporting commands (merged from the Vibgrate CLI). These run on the\n// open base engine (`@vibgrate/core-open`) — no proprietary kernel.\nimport { initCommand } from './reporting/commands/init.js';\nimport { scanCommand } from './reporting/commands/scan.js';\nimport { fixCommand } from './reporting/commands/fix.js';\nimport { baselineCommand } from './reporting/commands/baseline.js';\nimport { reportCommand } from './reporting/commands/report.js';\nimport { dsnCommand } from './reporting/commands/dsn.js';\nimport { loginCommand } from './reporting/commands/login.js';\nimport { logoutCommand } from './reporting/commands/logout.js';\nimport { pushCommand } from './reporting/commands/push.js';\nimport { updateCommand } from './reporting/commands/update.js';\nimport { sbomCommand } from './reporting/commands/sbom.js';\n\n/** The set of registered subcommand names (kept in sync with registration). */\nexport const KNOWN_COMMANDS = new Set([\n 'build',\n 'status',\n 'ask',\n 'embed',\n 'show',\n 'path',\n 'tree',\n 'impact',\n 'unknowns',\n 'tests',\n 'facts',\n 'guide',\n 'why',\n 'bisect',\n 'drift',\n 'models',\n 'savings',\n 'lib',\n 'export',\n 'push',\n 'bundle',\n 'map',\n 'hubs',\n 'areas',\n 'oddities',\n 'serve',\n 'install',\n 'uninstall',\n 'share',\n 'benchmark',\n 'help',\n // Drift-reporting verbs (merged from the Vibgrate CLI).\n 'init',\n 'scan',\n 'fix',\n 'baseline',\n 'report',\n 'login',\n 'logout',\n 'dsn',\n 'update',\n 'sbom',\n]);\n\nexport function buildProgram(): Command {\n const program = new Command();\n program\n .name('vg')\n .description(\n 'vg — local codebase intelligence for AI coding agents: a deterministic, ' +\n 'no-API-key code graph + MCP server, drift reporting, and version-correct library docs',\n )\n .version(VERSION, '--version', 'output the version number')\n .showSuggestionAfterError(true)\n .addHelpText('after', () => {\n // Show commands with the prefix that actually runs this CLI for the reader:\n // `vg` when installed, `npx @vibgrate/cli` when they invoked it via npx.\n const cli = resolveCliInvocation();\n const aliasNote =\n cli === 'vg'\n ? 'The `vibgrate` command is an alias for `vg`.\\n'\n : cli === NPX_INVOCATION\n ? 'Install globally (`npm i -g @vibgrate/cli`) to use the shorter `vg` command.\\n'\n : '';\n return (\n `\\nRun \\`${cli}\\` to scan + map the current folder, \\`${cli} \"<question>\"\\` to ask, ` +\n `\\`${cli} status\\`/\\`${cli} verify\\` for state.\\n` +\n `Drift: \\`${cli} scan\\` / \\`${cli} report\\`. Wire into your AI agent: \\`${cli} install\\`.\\n` +\n `${aliasNote}Docs: https://vibgrate.com/help`\n );\n });\n\n // Global flags live on each subcommand (see cli-options.applyGlobalOptions),\n // so the dispatch can place the command token first and let flags follow.\n registerBuild(program);\n registerStatus(program);\n registerAsk(program);\n registerEmbed(program);\n registerShow(program);\n registerPath(program);\n registerTree(program);\n registerInsights(program);\n registerImpact(program);\n registerUnknowns(program);\n registerServe(program);\n registerInstall(program);\n registerShare(program);\n registerBenchmark(program);\n registerTests(program);\n registerFacts(program);\n registerGuide(program);\n registerWhy(program);\n registerBisect(program);\n registerDrift(program);\n registerModels(program);\n registerSavings(program);\n registerLib(program);\n registerExport(program);\n registerBundle(program);\n\n // Drift-reporting commands (merged from the Vibgrate CLI). `push` here is the\n // real scan-artifact upload, so it replaces the graph engine's no-op `push`.\n program.addCommand(initCommand);\n program.addCommand(scanCommand);\n program.addCommand(fixCommand);\n program.addCommand(baselineCommand);\n program.addCommand(reportCommand);\n program.addCommand(loginCommand);\n program.addCommand(logoutCommand);\n program.addCommand(dsnCommand);\n program.addCommand(pushCommand);\n program.addCommand(updateCommand);\n program.addCommand(sbomCommand);\n\n return program;\n}\n\n/**\n * The \"simple as Google\" dispatch (VG-CLI-SPEC §1):\n * vg → scan + map the current folder\n * vg <path-that-exists> → scan + map that path\n * vg \"<quoted question>\" → ask (contains a space or ends with '?')\n * vg <known-command> … → run that command\n * vg <other-word> → ask (bare-string search)\n */\n/**\n * Flags that consume the following token as their value. Includes global flags\n * and command-level value options, so the dispatcher never mistakes a flag's\n * value (e.g. the `4` in `vg --jobs 4`) for the command/positional.\n */\nconst VALUE_FLAGS = new Set([\n '-C',\n '--cwd',\n '--generated-at',\n '--graph',\n '--jobs',\n '--only',\n '--exclude',\n '--export',\n '-o',\n '--budget',\n '-b',\n]);\n\n/**\n * Build-only flags that `scan` has no equivalent for. When one of these appears\n * on an otherwise-default invocation (`vg --json`, `vg --jobs 4`, `vg . --only ts`),\n * we keep routing to `build` so the flag still means \"map\", rather than handing\n * it to `scan` (which would reject the unknown option).\n */\nconst BUILD_ONLY_FLAGS = new Set([\n '--json',\n '--jobs',\n '--only',\n '--export',\n '--graph',\n '--generated-at',\n '--no-cache',\n '--deep',\n '--scip',\n '--no-scip',\n '--tsc',\n '--no-tsc',\n '--ground',\n '--no-ground',\n '--html',\n '--no-html',\n '--report',\n '--no-report',\n '--warm',\n]);\n\nfunction hasBuildOnlyFlag(args: string[]): boolean {\n return args.some((a) => BUILD_ONLY_FLAGS.has(a.split('=')[0]));\n}\n\nexport function dispatch(argv: string[], cwd: string): string[] {\n const args = [...argv];\n const firstPositionalIdx = findFirstPositional(args);\n\n // No positional at all (e.g. `vg`, `vg --quiet`): default to scan, which also\n // builds the map (one command → DriftScore + AI/docs index). A terminal flag\n // like --help/--version is left for commander; a build-only flag keeps `build`.\n if (firstPositionalIdx === -1) {\n if (args.includes('--help') || args.includes('-h') || args.includes('--version')) {\n return args;\n }\n return [hasBuildOnlyFlag(args) ? 'build' : 'scan', ...args];\n }\n\n const first = args[firstPositionalIdx];\n\n // Explicit command → move it to the front (commander needs the command first;\n // global flags live on the subcommand so they can follow in any order).\n if (KNOWN_COMMANDS.has(first)) {\n const rest = [...args];\n rest.splice(firstPositionalIdx, 1);\n return [first, ...rest];\n }\n\n const looksLikeQuestion = /\\s/.test(first) || first.endsWith('?');\n if (looksLikeQuestion) return ['ask', ...args];\n\n // A path (relative to cwd) → scan + map it (a build-only flag keeps `build`).\n if (fs.existsSync(path.resolve(cwd, first))) {\n return [hasBuildOnlyFlag(args) ? 'build' : 'scan', ...args];\n }\n\n // Recently-moved verbs: a migration hint beats a confusing search fall-through.\n const moved = MOVED_COMMANDS[first];\n if (moved) {\n throw new CliError(`\\`vg ${first}\\` has moved to \\`${moved}\\``, ExitCode.USAGE_ERROR);\n }\n\n // Bare word that is neither a command nor a path → treat as a search query.\n return ['ask', ...args];\n}\n\n/** Verbs folded into the build lifecycle — guide the user to the new form. */\nconst MOVED_COMMANDS: Record<string, string> = {\n verify: 'vg build --verify',\n attest: 'vg build --attest',\n};\n\n/** The first real positional, skipping value-taking global flags and their values. */\nfunction findFirstPositional(args: string[]): number {\n for (let i = 0; i < args.length; i++) {\n const a = args[i];\n if (a.startsWith('-')) {\n // `--flag=value` consumes nothing extra; a bare value-flag consumes next.\n if (VALUE_FLAGS.has(a)) i++;\n continue;\n }\n return i;\n }\n return -1;\n}\n\nexport async function main(argv = process.argv): Promise<void> {\n const raw = argv.slice(2);\n\n // Honor NO_COLOR / --no-color early so even bootstrap messages obey it.\n if (process.env.NO_COLOR || raw.includes('--no-color')) disableColor();\n\n // We need cwd for path-based dispatch; read -C/--cwd from the raw args.\n const cwd = readCwd(raw);\n\n const program = buildProgram();\n program.exitOverride((err) => {\n throw err;\n });\n // Route commander's own output through our streams; errors are handled below.\n program.configureOutput({\n writeErr: (str) => process.stderr.write(str),\n writeOut: (str) => process.stdout.write(str),\n });\n\n try {\n // dispatch() can throw (e.g. a moved-command hint) — keep it inside the\n // handler so those surface as a clean `error:` line, not a raw stack.\n const dispatched = dispatch(raw, cwd);\n await program.parseAsync(dispatched, { from: 'user' });\n } catch (err) {\n handleError(err);\n }\n}\n\nfunction readCwd(raw: string[]): string {\n const i = raw.findIndex((a) => a === '-C' || a === '--cwd');\n if (i >= 0 && raw[i + 1]) return path.resolve(raw[i + 1]);\n const eq = raw.find((a) => a.startsWith('--cwd='));\n if (eq) return path.resolve(eq.slice('--cwd='.length));\n return process.cwd();\n}\n\nfunction handleError(err: unknown): never {\n if (err instanceof CommanderError) {\n // Help/version are not errors.\n if (err.code === 'commander.helpDisplayed' || err.code === 'commander.help') {\n process.exit(ExitCode.OK);\n }\n if (err.code === 'commander.version') process.exit(ExitCode.OK);\n // Unknown command / bad option / missing argument → usage error.\n process.exit(ExitCode.USAGE_ERROR);\n }\n if (err instanceof CliError) {\n info(c.red(`error: ${err.message}`));\n process.exit(err.code);\n }\n const message = err instanceof Error ? err.message : String(err);\n const correlation = Math.random().toString(36).slice(2, 10);\n info(c.red(`error: ${message}`));\n info(c.dim(` (ref ${correlation}) — re-run with --json for detail, or report at https://vibgrate.com/help`));\n process.exit(ExitCode.ERROR);\n}\n\n// Export for programmatic/default-build use and tests.\nexport { runBuild };\n\n// Run only when invoked as the process entry (not when imported by a test or\n// the embedding API). Robust across dev (tsx .ts), the built bin, and bin\n// symlinks by comparing realpaths.\nfunction isEntry(): boolean {\n try {\n if (!process.argv[1]) return false;\n return realpathSync(process.argv[1]) === fileURLToPath(import.meta.url);\n } catch {\n return false;\n }\n}\n\nif (isEntry()) {\n void main();\n}\n"]}
1
+ {"version":3,"sources":["../src/engine/attest.ts","../src/commands/attest-actions.ts","../src/util/output.ts","../src/util/logo.ts","../src/util/progress.ts","../src/cli-options.ts","../src/commands/build.ts","../src/commands/status.ts","../src/commands/util.ts","../src/commands/ask.ts","../src/commands/embed.ts","../src/commands/ambiguity.ts","../src/commands/show.ts","../src/commands/path.ts","../src/commands/tree.ts","../src/commands/insights.ts","../src/commands/impact.ts","../src/commands/unknowns.ts","../src/engine/stats-share.ts","../src/commands/serve.ts","../src/commands/install.ts","../src/commands/share.ts","../src/commands/benchmark.ts","../src/commands/tests.ts","../src/commands/facts.ts","../src/commands/guide.ts","../src/commands/why.ts","../src/commands/bisect.ts","../src/engine/standards.ts","../src/commands/drift.ts","../src/commands/models.ts","../src/commands/savings.ts","../src/commands/lib.ts","../src/commands/export.ts","../src/commands/bundle.ts","../src/reporting/commands/init.ts","../src/reporting/utils/ingest-id-output.ts","../src/reporting/ai-context-prompt.ts","../src/reporting/commands/scan.ts","../src/reporting/utils/scan-freshness.ts","../src/reporting/planning/contracts.ts","../src/reporting/planning/usage.ts","../src/reporting/utils/fix-plan.ts","../src/reporting/planning/render.ts","../src/reporting/planning/expected-drift.ts","../src/reporting/planning/apply.ts","../src/reporting/utils/update-check.ts","../src/reporting/commands/update.ts","../src/reporting/commands/fix.ts","../src/reporting/formatters/text.ts","../src/reporting/formatters/markdown.ts","../src/reporting/commands/report.ts","../src/reporting/utils/open-url.ts","../src/reporting/commands/login.ts","../src/reporting/utils/shell.ts","../src/reporting/commands/logout.ts","../src/reporting/commands/vex.ts","../src/reporting/commands/sbom.ts","../src/cli.ts"],"names":["fs","crypto2","resolve","chalk","path2","rel","fs2","path3","fs3","path4","out","pad","path5","fs4","fs5","path6","next","mb","fs7","c","path","now","parseDsn","fs10","path9","path10","fs11","Command","path11","vibgrateDir","pathExists","path12","teal","mint","path13","fs12","walk","path14","SKIP_DIRS","escapeRegExp","fs14","path16","path17","path18","os2","path19","semver","execSync","path20","os3","readline2","path21","spawn","path22","randomUUID","path23","json","path24","fs16","path25"],"mappings":"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","file":"cli.js","sourcesContent":["import * as crypto from 'node:crypto';\nimport { canonicalize } from './hash.js';\nimport { VERSION } from '../version.js';\nimport type { Toolchain, VgGraph } from '../schema.js';\n\n/**\n * `vg attest` — a signed, reproducible attestation over the code graph.\n *\n * This is the moat made load-bearing: a consumer can cryptographically verify,\n * offline, that a graph was produced by a named toolchain over a named commit and\n * has not changed since. We sign an in-toto Statement wrapped in a DSSE envelope\n * with Ed25519 (`node:crypto`, zero dependencies) — interoperable with\n * `cosign verify-blob-attestation`. Ed25519 signatures are deterministic\n * (RFC 8032), so the same graph + key produce a byte-identical envelope.\n *\n * The subject digest excludes the graph's volatile `generatedAt`, so it is\n * reproducible across rebuilds of identical content — which is exactly what makes\n * the attestation verifiable rather than a timestamped snapshot.\n */\n\nexport const DSSE_PAYLOAD_TYPE = 'application/vnd.in-toto+json';\nexport const IN_TOTO_STATEMENT_TYPE = 'https://in-toto.io/Statement/v1';\nexport const VG_PREDICATE_TYPE = 'https://vibgrate.com/attestation/code-graph/v1';\n\nexport interface CommitInfo {\n sha?: string;\n shortSha?: string;\n branch?: string;\n dirty?: boolean; // uncommitted changes vs sha — never verified-clean when true\n}\n\nexport interface AttestPredicate {\n tool: { name: 'vg'; version: string };\n toolchain?: Toolchain;\n corpusHash: string;\n graphDigest: string; // sha256 of the canonical graph (generatedAt excluded)\n counts: VgGraph['meta']['counts'];\n commit?: CommitInfo;\n sbomDigest?: string; // sha256 of an accompanying SBOM, if attested together\n timestamp?: string; // optional, opt-in (omitted by default for determinism)\n}\n\nexport interface InTotoStatement {\n _type: string;\n subject: { name: string; digest: { sha256: string } }[];\n predicateType: string;\n predicate: AttestPredicate;\n}\n\nexport interface DsseSignature {\n keyid: string;\n sig: string; // base64\n publicKey?: string; // PEM, embedded so the envelope self-verifies for integrity\n}\n\nexport interface DsseEnvelope {\n payloadType: string;\n payload: string; // base64 of the Statement JSON\n signatures: DsseSignature[];\n}\n\nexport function sha256Hex(input: string | Uint8Array): string {\n return crypto.createHash('sha256').update(input).digest('hex');\n}\n\n/**\n * sha256 over the canonical graph with the volatile `generatedAt` excluded, so\n * two builds of identical content attest to the same digest.\n */\nexport function graphSubjectDigest(graph: VgGraph): string {\n const { generatedAt: _omit, ...rest } = graph;\n return sha256Hex(canonicalize(rest));\n}\n\n/** The 16-hex key id: a truncated sha256 over the SPKI DER public key. */\nexport function keyId(publicKey: crypto.KeyObject): string {\n return sha256Hex(publicKey.export({ type: 'spki', format: 'der' })).slice(0, 16);\n}\n\nexport interface StatementInput {\n commit?: CommitInfo;\n sbomDigest?: string;\n timestamp?: string;\n}\n\nexport function buildStatement(graph: VgGraph, input: StatementInput = {}): InTotoStatement {\n const graphDigest = graphSubjectDigest(graph);\n const predicate: AttestPredicate = {\n tool: { name: 'vg', version: VERSION },\n toolchain: graph.provenance.toolchain,\n corpusHash: graph.provenance.corpusHash,\n graphDigest,\n counts: graph.meta.counts,\n };\n if (input.commit) predicate.commit = input.commit;\n if (input.sbomDigest) predicate.sbomDigest = input.sbomDigest;\n if (input.timestamp) predicate.timestamp = input.timestamp;\n return {\n _type: IN_TOTO_STATEMENT_TYPE,\n subject: [{ name: 'graph.json', digest: { sha256: graphDigest } }],\n predicateType: VG_PREDICATE_TYPE,\n predicate,\n };\n}\n\n/**\n * DSSE Pre-Authentication Encoding:\n * \"DSSEv1\" SP len(type) SP type SP len(body) SP body\n * with lengths as ASCII decimal byte counts. Signing the PAE (not the raw body)\n * is what binds the payloadType to the signature.\n */\nexport function dssePae(payloadType: string, body: Uint8Array): Buffer {\n const typeBytes = Buffer.from(payloadType, 'utf8');\n const header = Buffer.from(\n `DSSEv1 ${typeBytes.length} ${payloadType} ${body.length} `,\n 'utf8',\n );\n return Buffer.concat([header, Buffer.from(body)]);\n}\n\n/** Sign a statement, returning a self-contained DSSE envelope. */\nexport function signStatement(statement: InTotoStatement, privateKey: crypto.KeyObject): DsseEnvelope {\n const body = Buffer.from(JSON.stringify(statement), 'utf8');\n const pae = dssePae(DSSE_PAYLOAD_TYPE, body);\n const sig = crypto.sign(null, pae, privateKey);\n // Derive the public key from the private key (via its PEM, for @types/node compat).\n const publicKey = crypto.createPublicKey(privateKey.export({ type: 'pkcs8', format: 'pem' }).toString());\n return {\n payloadType: DSSE_PAYLOAD_TYPE,\n payload: body.toString('base64'),\n signatures: [\n {\n keyid: keyId(publicKey),\n sig: sig.toString('base64'),\n publicKey: publicKey.export({ type: 'spki', format: 'pem' }).toString(),\n },\n ],\n };\n}\n\nexport type AttestStatus = 'verified' | 'signature-valid' | 'failed';\n\nexport interface VerifyResult {\n status: AttestStatus;\n signatureValid: boolean;\n signerPinned: boolean; // signature verified against a caller-supplied trusted key\n digestMatches?: boolean; // recomputed graph digest matches the attested one\n dirty?: boolean; // the attested commit had uncommitted changes\n keyid: string;\n reason: string;\n statement: InTotoStatement;\n}\n\n/**\n * Verify an envelope. Honest states, never a fabricated pass:\n * failed — bad signature, or the on-disk graph no longer matches.\n * signature-valid — cryptographically intact, but signer not pinned (or dirty).\n * verified — pinned signer + matching digest + clean tree.\n */\n/** An empty statement for results where the envelope could not even be parsed. */\nfunction emptyStatement(): InTotoStatement {\n return {\n _type: '',\n subject: [],\n predicateType: '',\n predicate: {\n tool: { name: 'vg', version: '' },\n corpusHash: '',\n graphDigest: '',\n counts: { nodes: 0, edges: 0, areas: 0, tests: 0, untested: 0 },\n },\n };\n}\n\nfunction failedResult(reason: string): VerifyResult {\n return {\n status: 'failed',\n signatureValid: false,\n signerPinned: false,\n keyid: '',\n reason,\n statement: emptyStatement(),\n };\n}\n\nexport function verifyEnvelope(\n env: DsseEnvelope,\n opts: { publicKeyPem?: string; graph?: VgGraph } = {},\n): VerifyResult {\n // A `.intoto.jsonl` is attacker-supplied input: every decode/parse/key step\n // must degrade to an honest `failed`, never crash the command.\n let body: Buffer;\n let statement: InTotoStatement;\n try {\n body = Buffer.from(env?.payload ?? '', 'base64');\n const parsed = JSON.parse(body.toString('utf8')) as InTotoStatement;\n if (!parsed || typeof parsed !== 'object' || !parsed.predicate) {\n throw new Error('missing predicate');\n }\n statement = parsed;\n } catch {\n return failedResult('malformed attestation payload (not a valid in-toto statement)');\n }\n\n const pae = dssePae(env.payloadType, body);\n const sig0 = env.signatures?.[0];\n const keyid = sig0?.keyid ?? '';\n const sig = sig0?.sig ? Buffer.from(sig0.sig, 'base64') : Buffer.alloc(0);\n\n let signatureValid = false;\n let signerPinned = false;\n try {\n if (sig0 && sig.length) {\n if (opts.publicKeyPem) {\n const pinnedKey = crypto.createPublicKey(opts.publicKeyPem);\n signatureValid = crypto.verify(null, pae, pinnedKey, sig);\n signerPinned = signatureValid;\n } else if (sig0.publicKey) {\n const embeddedKey = crypto.createPublicKey(sig0.publicKey);\n signatureValid = crypto.verify(null, pae, embeddedKey, sig);\n }\n }\n } catch {\n // Malformed key or signature bytes → not a valid signature (not a crash).\n signatureValid = false;\n signerPinned = false;\n }\n\n const digestMatches = opts.graph\n ? graphSubjectDigest(opts.graph) === statement.predicate.graphDigest\n : undefined;\n const dirty = statement.predicate.commit?.dirty;\n\n let status: AttestStatus;\n let reason: string;\n if (!signatureValid) {\n status = 'failed';\n reason = sig0 ? 'signature verification failed' : 'no signature in envelope';\n } else if (digestMatches === false) {\n status = 'failed';\n reason = 'graph.json no longer matches the attested digest (content changed since signing)';\n } else if (signerPinned && !dirty) {\n status = 'verified';\n reason =\n digestMatches === true\n ? 'signature valid, signer trusted, graph digest matches'\n : 'signature valid, signer trusted';\n } else {\n status = 'signature-valid';\n reason = dirty\n ? 'signature valid but the attested tree was dirty (uncommitted changes)'\n : 'signature valid but signer not pinned — pass --pub to establish trust';\n }\n\n return { status, signatureValid, signerPinned, digestMatches, dirty, keyid, reason, statement };\n}\n\nexport interface GeneratedKeypair {\n privatePem: string;\n publicPem: string;\n keyid: string;\n}\n\n/** Mint a fresh Ed25519 keypair for signing attestations. */\nexport function generateKeypair(): GeneratedKeypair {\n const { publicKey, privateKey } = crypto.generateKeyPairSync('ed25519');\n return {\n privatePem: privateKey.export({ type: 'pkcs8', format: 'pem' }).toString(),\n publicPem: publicKey.export({ type: 'spki', format: 'pem' }).toString(),\n keyid: keyId(publicKey),\n };\n}\n\n/** Serialize an envelope as a single-line `.intoto.jsonl` record (deterministic). */\nexport function serializeEnvelope(env: DsseEnvelope): string {\n return `${JSON.stringify(env)}\\n`;\n}\n\nexport function parseEnvelope(text: string): DsseEnvelope {\n const line = text.trim().split('\\n')[0];\n return JSON.parse(line) as DsseEnvelope;\n}\n","import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as crypto from 'node:crypto';\nimport { execFile } from 'node:child_process';\nimport { loadGraph } from '../engine/load.js';\nimport { resolveHead, workingTreeDirty } from '../core-open/utils/git-history.js';\nimport {\n buildStatement,\n signStatement,\n verifyEnvelope,\n generateKeypair,\n serializeEnvelope,\n parseEnvelope,\n type CommitInfo,\n type VerifyResult,\n} from '../engine/attest.js';\nimport { CliError, ExitCode } from '../util/exit.js';\nimport type { VgGraph } from '../schema.js';\n\n/**\n * Attestation actions folded into the graph lifecycle: `vg build --attest` signs\n * the graph it just built; `vg build --verify` checks a committed attestation.\n * The crypto lives in engine/attest.ts; this is the file/key/git glue + output.\n */\n\nconst DEFAULT_ATTESTATION = 'attestation.intoto.jsonl';\nconst DEFAULT_KEY = 'attest-key.pem';\n\nexport interface SignOpts {\n /** Signing key PEM path; else $VG_ATTEST_KEY; else .vibgrate/attest-key.pem (auto-minted). */\n key?: string;\n /** Output path for the attestation (default .vibgrate/attestation.intoto.jsonl). */\n attestation?: string;\n}\n\nexport interface SignSummary {\n keyid: string;\n graphDigest: string;\n fingerprint?: string;\n commit?: CommitInfo;\n out: string;\n keyGeneratedAt?: string;\n}\n\n/** Sign an already-built graph, writing a DSSE attestation. Returns a summary +\n * human notices (the caller decides how to render them alongside build output). */\nexport async function signGraphAttestation(\n root: string,\n graph: VgGraph,\n opts: SignOpts,\n): Promise<{ summary: SignSummary; notices: string[] }> {\n const notices: string[] = [];\n const explicitKey = opts.key ?? process.env.VG_ATTEST_KEY;\n const keyPath = explicitKey ? path.resolve(explicitKey) : path.join(root, '.vibgrate', DEFAULT_KEY);\n\n let keyGeneratedAt: string | undefined;\n if (!fs.existsSync(keyPath)) {\n if (explicitKey) {\n throw new CliError(`signing key not found: ${explicitKey}`, ExitCode.USAGE_ERROR);\n }\n // First use with no key: mint one at the default path (loud — it must be kept\n // and gitignored to re-sign reproducibly).\n const kp = generateKeypair();\n fs.mkdirSync(path.dirname(keyPath), { recursive: true });\n fs.writeFileSync(keyPath, kp.privatePem, { mode: 0o600 });\n fs.writeFileSync(`${keyPath}.pub`, kp.publicPem);\n keyGeneratedAt = keyPath;\n notices.push(\n `minted a new Ed25519 signing key at ${rel(root, keyPath)} (keyid ${kp.keyid}) — ` +\n `keep it, add it to .gitignore, and reuse it to re-sign reproducibly`,\n );\n }\n\n let privateKey: crypto.KeyObject;\n try {\n privateKey = crypto.createPrivateKey(fs.readFileSync(keyPath, 'utf8'));\n } catch {\n throw new CliError(`could not read an Ed25519 private key from ${rel(root, keyPath)}`, ExitCode.USAGE_ERROR);\n }\n if (privateKey.asymmetricKeyType !== 'ed25519') {\n throw new CliError(\n `attest requires an Ed25519 key, but ${rel(root, keyPath)} is ${privateKey.asymmetricKeyType ?? 'unknown'}`,\n ExitCode.USAGE_ERROR,\n );\n }\n\n const commit = await gitCommitInfo(root);\n const statement = buildStatement(graph, { commit });\n const envelope = signStatement(statement, privateKey);\n const outPath = opts.attestation\n ? path.resolve(opts.attestation)\n : path.join(root, '.vibgrate', DEFAULT_ATTESTATION);\n fs.mkdirSync(path.dirname(outPath), { recursive: true });\n fs.writeFileSync(outPath, serializeEnvelope(envelope));\n\n return {\n summary: {\n keyid: envelope.signatures[0]?.keyid ?? '',\n graphDigest: statement.predicate.graphDigest,\n fingerprint: statement.predicate.toolchain?.fingerprint,\n commit,\n out: rel(root, outPath),\n keyGeneratedAt: keyGeneratedAt ? rel(root, keyGeneratedAt) : undefined,\n },\n notices,\n };\n}\n\nexport interface VerifyOpts {\n /** Attestation path (default .vibgrate/attestation.intoto.jsonl). */\n attestation?: string;\n /** Public key PEM to pin the signer (else integrity-only verification). */\n pub?: string;\n}\n\nexport interface AttestVerifyOutcome {\n bundlePath: string;\n /** True when no attestation exists at the default path (and none was required). */\n missing: boolean;\n result?: VerifyResult;\n}\n\n/** Verify a committed attestation against the on-disk graph. Returns the outcome\n * (the caller renders + decides the exit code). Throws only when an attestation\n * was explicitly requested but is absent. */\nexport function verifyGraphAttestation(root: string, opts: VerifyOpts): AttestVerifyOutcome {\n const bundlePath = opts.attestation\n ? path.resolve(opts.attestation)\n : path.join(root, '.vibgrate', DEFAULT_ATTESTATION);\n if (!fs.existsSync(bundlePath)) {\n if (opts.attestation || opts.pub) {\n throw new CliError(\n `no attestation at ${rel(root, bundlePath)} — sign one with \\`vg build --attest\\``,\n ExitCode.NOT_FOUND,\n );\n }\n return { bundlePath, missing: true };\n }\n const envelope = parseEnvelope(fs.readFileSync(bundlePath, 'utf8'));\n const publicKeyPem = opts.pub ? fs.readFileSync(path.resolve(opts.pub), 'utf8') : undefined;\n const graph = loadGraph(root) ?? undefined;\n return { bundlePath, missing: false, result: verifyEnvelope(envelope, { publicKeyPem, graph }) };\n}\n\nasync function gitCommitInfo(root: string): Promise<CommitInfo | undefined> {\n const sha = await resolveHead(root);\n if (!sha) return undefined;\n const dirty = await workingTreeDirty(root);\n const branch = await gitBranch(root);\n return { sha, shortSha: sha.slice(0, 7), branch, dirty: dirty === true ? true : dirty === false ? false : undefined };\n}\n\n/** Best-effort current branch name; undefined on detached HEAD or no git. */\nfunction gitBranch(root: string): Promise<string | undefined> {\n return new Promise((resolve) => {\n execFile(\n 'git',\n ['rev-parse', '--abbrev-ref', 'HEAD'],\n { cwd: root, timeout: 5000, windowsHide: true, encoding: 'utf8' },\n (err, stdout) => {\n if (err) return resolve(undefined);\n const name = String(stdout).trim();\n resolve(name && name !== 'HEAD' ? name : undefined);\n },\n );\n });\n}\n\nfunction rel(root: string, p: string): string {\n const r = path.relative(root, p);\n return r.startsWith('..') ? p : r;\n}\n","import chalk from 'chalk';\n\n/**\n * Output conventions (VG-CLI-SPEC §1.1): human output + progress → stderr;\n * machine output (JSON/exports) → stdout. So `vg \"…\" --json | jq` and\n * `vg export - …` pipe cleanly.\n */\n\nexport function info(message = ''): void {\n process.stderr.write(`${message}\\n`);\n}\n\nexport function out(message: string): void {\n process.stdout.write(`${message}\\n`);\n}\n\nexport function json(value: unknown): void {\n process.stdout.write(`${JSON.stringify(value, null, 2)}\\n`);\n}\n\nexport const c = chalk;\n\n/** Honor NO_COLOR / --no-color via chalk's level (set by the CLI bootstrap). */\nexport function disableColor(): void {\n chalk.level = 0;\n}\n","import { c } from './output.js';\nimport { VERSION } from '../version.js';\n\n/**\n * The `vg` brand banner — the same boxy robot mark and brand colours (teal/mint)\n * as the Vibgrate scanner (`vibgrate-cli/src/ui/progress.ts`), replicated here so\n * the open graph package stays standalone.\n *\n * The wordmark is stacked BELOW the mark rather than beside it: the robot's eye\n * (`◼`) and arrow (`➜`) glyphs are East-Asian \"ambiguous\"/wide, so terminals that\n * render them double-width make the rows unequal — text placed to their right\n * (the scanner's layout) then misaligns. Nothing sits beside the art here, so the\n * banner lines up in every terminal. Shown on `vg build` for a human at a TTY;\n * never on `--json`, `--quiet`, or under a pipe.\n */\n\nconst teal = (s: string): string => c.hex('#3FB0A4')(s);\nconst mint = (s: string): string => c.hex('#4FE3C1')(s);\n\n// ── Boxy robot mark — identical glyphs/colours to the scanner's ROBOT ──\nconst ROBOT = [\n ' ' + teal('╭──────╮') + mint('➜'),\n ' ' + c.dim('┤') + teal('│') + ' ' + mint('◼') + ' ' + mint('◼') + ' ' + teal('│') + c.dim('├'),\n ' ' + c.dim('┤') + teal('│') + ' ' + c.dim('▁▁') + ' ' + teal('│') + c.dim('├'),\n ' ' + teal('╰──────╯'),\n] as const;\n\n/**\n * The banner as lines (no I/O) so it is unit-testable. The robot mark is a\n * self-contained block; the wordmark/tagline sit on their OWN lines beneath it\n * (never beside the variable-width glyphs), so the banner aligns in any terminal.\n */\nexport function logoLines(root?: string): string[] {\n return [\n '',\n ` ${ROBOT[0]}`,\n ` ${ROBOT[1]}`,\n ` ${ROBOT[2]}`,\n ` ${ROBOT[3]}`,\n ` ${c.bold.white('Vibgrate')} ${teal('Graph')} ${c.dim(`· Code Intelligence Engine · v${VERSION}`)}`,\n ...(root ? [` ${c.dim(root)}`] : []),\n '',\n ];\n}\n\n/** Print the banner to stderr, only for an interactive human (TTY). */\nexport function printLogo(root?: string): void {\n if (!process.stderr.isTTY) return;\n process.stderr.write(`${logoLines(root).join('\\n')}\\n`);\n}\n","import { c } from './output.js';\nimport { brandProgressBar } from '../core-open/ui/bar.js';\n\n/**\n * A small progress bar matching the scanner's style\n * (`vibgrate-core-open/src/ui/progress.ts`): a smooth sub-cell gradient bar\n * (shared `brandProgressBar`), a braille spinner, percent, elapsed and ETA.\n * Renders to **stderr** in place, and only when stderr is a TTY — under a\n * pipe/CI it stays silent so logs aren't polluted.\n */\n\nconst FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'] as const;\nconst WIDTH = 30;\n\nfunction fmtDuration(ms: number): string {\n const s = Math.max(0, Math.round(ms / 1000));\n if (s < 60) return `${s}s`;\n return `${Math.floor(s / 60)}m${String(s % 60).padStart(2, '0')}s`;\n}\n\n/**\n * Pure render of one progress line (no I/O, no clock) so it is unit-testable.\n * `elapsedMs` and `frame` are passed in by the caller.\n */\nexport function formatProgressLine(\n label: string,\n done: number,\n total: number,\n elapsedMs: number,\n frame: number,\n): string {\n const ratio = total > 0 ? Math.min(done / total, 1) : 0;\n const bar = brandProgressBar(ratio, WIDTH);\n const pct = Math.round(ratio * 100);\n const spin = c.cyan(FRAMES[((frame % FRAMES.length) + FRAMES.length) % FRAMES.length]);\n const eta = ratio > 0.02 && ratio < 1 ? ` · eta ${fmtDuration((elapsedMs / ratio) * (1 - ratio))}` : '';\n return ` ${spin} ${label} ${bar} ${c.bold(`${pct}%`)} ${c.dim(`${done}/${total} · ${fmtDuration(elapsedMs)}${eta}`)}`;\n}\n\n/** Live, in-place progress bar on stderr (no-op when stderr isn't a TTY). */\nexport class ProgressBar {\n private readonly start = Date.now();\n private frame = 0;\n private readonly tty = Boolean(process.stderr.isTTY);\n\n constructor(private readonly label: string) {}\n\n update(done: number, total: number): void {\n if (!this.tty) return;\n const line = formatProgressLine(this.label, done, total, Date.now() - this.start, this.frame++);\n process.stderr.write(`\\r\\x1b[2K${line}`);\n }\n\n /** Clear the bar; optionally print a final summary line. */\n done(summary?: string): void {\n if (!this.tty) return;\n process.stderr.write('\\r\\x1b[2K');\n if (summary) process.stderr.write(`${summary}\\n`);\n }\n}\n","import type { Command } from 'commander';\n\n/** Global flags shared across all `vg` commands (VG-CLI-SPEC §1.1). */\nexport interface GlobalOpts {\n /** -C, --cwd <dir> */\n cwd?: string;\n /** --deep */\n deep?: boolean;\n /** --json */\n json?: boolean;\n /** --generated-at <iso> */\n generatedAt?: string;\n /** --graph <file> (override the map path) */\n graph?: string;\n /** --no-cache (commander exposes this as `cache: false`) */\n noCache?: boolean;\n /** --local (never touch the network) */\n local?: boolean;\n /** --quiet */\n quiet?: boolean;\n /**\n * --client <name> — the AI on the other end (e.g. `claude`, `cursor`). When an\n * AI host runs `vg`, passing this lets navigation calls be counted in the local\n * savings ledger with the command-vs-MCP split, so `vg savings` and the opt-in\n * share-stats upload can attribute usage. Counts only; a coarse label, not\n * identity (sanitized before it's recorded). Absent for human-run commands.\n */\n client?: string;\n}\n\n/**\n * Attach the global flags to a command. They live on every subcommand (rather\n * than only the program) so the \"simple as Google\" dispatch can put the command\n * token first and let flags appear in any order after it.\n */\nexport function applyGlobalOptions(cmd: Command): Command {\n return cmd\n .option('-C, --cwd <dir>', 'run as if started in <dir>', '.')\n .option('--deep', 'do more: precise resolution, all edges, semantic links')\n .option('--json', 'machine-readable JSON on stdout')\n .option('--generated-at <iso>', 'pin the artifact timestamp for byte-deterministic output')\n .option('--graph <file>', 'override the map path')\n .option('--no-cache', 'full rebuild (ignore the incremental cache)')\n .option('--local', 'never touch the network (lexical-only semantic)')\n .option('--quiet', 'suppress progress output')\n .option('--client <name>', 'identify the AI client (e.g. claude) so navigation calls are counted in vg savings')\n .option('--no-color', 'disable colored output');\n}\n\n/** Read the global subset from a command's parsed options. */\nexport function readGlobal(cmd: Command): GlobalOpts {\n const o = cmd.opts<Record<string, unknown>>();\n return {\n cwd: o.cwd as string | undefined,\n deep: o.deep as boolean | undefined,\n json: o.json as boolean | undefined,\n generatedAt: o.generatedAt as string | undefined,\n graph: o.graph as string | undefined,\n noCache: o.cache === false,\n local: o.local as boolean | undefined,\n quiet: o.quiet as boolean | undefined,\n client: o.client as string | undefined,\n };\n}\n","import * as path from 'node:path';\nimport * as fs from 'node:fs';\nimport { spawn } from 'node:child_process';\nimport { Command } from 'commander';\nimport { buildGraph } from '../engine/build.js';\nimport { verifyDeterminism } from '../engine/verify.js';\nimport { epistemicBreakdown } from '../engine/epistemic.js';\nimport { signGraphAttestation, verifyGraphAttestation, type SignSummary } from './attest-actions.js';\nimport { isModelReady, countPending, resolveEmbedModel } from '../engine/embeddings.js';\nimport type { VgGraph } from '../schema.js';\nimport { writeArtifacts } from '../engine/artifacts.js';\nimport { writeSnapshot } from '../engine/freshness.js';\nimport { serializeGraph } from '../engine/serialize.js';\nimport { renderReport } from '../engine/report.js';\nimport { renderHtml } from '../engine/html.js';\nimport { UsageError } from '../engine/discover.js';\nimport { ResourceLimitError } from '../engine/limits.js';\nimport { CliError, ExitCode, usageError } from '../util/exit.js';\nimport { c, info, out, json } from '../util/output.js';\nimport { printLogo } from '../util/logo.js';\nimport { ProgressBar } from '../util/progress.js';\nimport { applyGlobalOptions, readGlobal, type GlobalOpts } from '../cli-options.js';\n\ninterface BuildCmdOpts {\n only?: string;\n exclude?: string[];\n html?: boolean;\n report?: boolean;\n ground?: boolean;\n jobs?: string;\n scip?: string | boolean;\n tsc?: boolean;\n export?: string;\n warm?: boolean;\n grammars?: string;\n attest?: boolean;\n verify?: boolean;\n attestKey?: string;\n attestation?: string;\n pub?: string;\n}\n\nexport function registerBuild(program: Command): void {\n const cmd = program\n .command('build')\n .description('build / update the code map (incremental, deterministic)')\n .argument('[paths...]', 'folders or files to map (default: current folder)')\n .option('--only <langs>', 'restrict to languages, e.g. ts,py,go')\n .option('--exclude <glob>', 'extra ignore glob (repeatable)', collect, [])\n .option('--no-html', 'do not write graph.html')\n .option('--no-report', 'do not write GRAPH_REPORT.md')\n .option('--no-ground', 'do not attach grounding (Phase 2)')\n .option('--jobs <n>', 'worker count (1 = single-threaded)')\n .option('--scip <file>', 'ingest a SCIP index for precise resolution (default: auto-detect index.scip)')\n .option('--no-scip', 'ignore any SCIP index')\n .option('--no-tsc', 'skip the in-process TypeScript resolver (heuristic floor only)')\n .option('--no-warm', 'do not warm the semantic index in the background after building')\n .option('--grammars <dir>', 'directory of grammar .wasm files (offline / air-gapped)')\n .option('-o, --export <file>', 'also write the map to a file (format inferred)')\n .option('--attest', 'sign the built graph → .vibgrate/attestation.intoto.jsonl')\n .option('--verify', 'verify a committed attestation against the graph (no rebuild)')\n .option('--attest-key <path>', 'signing key PEM (else $VG_ATTEST_KEY, else .vibgrate/attest-key.pem)')\n .option('--attestation <file>', 'attestation path (out for --attest, in for --verify)')\n .option('--pub <path>', 'public key PEM to pin the signer (with --verify)')\n .action(async function (this: Command, paths: string[], opts: BuildCmdOpts) {\n await runBuild(paths, opts, readGlobal(this));\n });\n applyGlobalOptions(cmd);\n}\n\nexport async function runBuild(\n paths: string[],\n opts: BuildCmdOpts,\n global: GlobalOpts,\n): Promise<void> {\n const root = path.resolve(global.cwd ?? '.');\n\n // `vg build --verify`: the single verification entry point — determinism\n // self-check plus (if present) attestation verification.\n if (opts.verify) {\n await verifyGraph(root, opts, global);\n return;\n }\n\n // Brand banner + live parse progress for an interactive human while the index\n // builds (TTY only; both are no-ops under --json/--quiet/pipe so machine output\n // stays clean).\n const interactive = !global.json && !global.quiet;\n if (interactive) printLogo(path.basename(root) || root);\n const bar = interactive ? new ProgressBar(c.dim('parsing')) : undefined;\n const jobs = opts.jobs ? Number(opts.jobs) : undefined;\n if (jobs !== undefined && (!Number.isInteger(jobs) || jobs < 1)) {\n throw usageError(`--jobs must be a positive integer (got \"${opts.jobs}\")`);\n }\n\n const only = opts.only ? opts.only.split(',').map((s) => s.trim()).filter(Boolean) : undefined;\n let result;\n try {\n result = await buildGraph({\n root,\n paths: paths.length ? paths : undefined,\n only,\n exclude: opts.exclude,\n jobs,\n noCache: global.noCache,\n deep: global.deep,\n noGround: opts.ground === false,\n scip: typeof opts.scip === 'string' ? opts.scip : undefined,\n noScip: opts.scip === false,\n noTsc: opts.tsc === false,\n generatedAt: global.generatedAt,\n onParseProgress: bar ? (done, total) => bar.update(done, total) : undefined,\n grammarsDir: opts.grammars,\n });\n } catch (err) {\n bar?.done();\n if (err instanceof UsageError) throw usageError(err.message);\n // A resource safeguard fired (file-count cap, heap budget, worker OOM) —\n // the message already carries the remedy; surface it without a stack.\n if (err instanceof ResourceLimitError) throw new CliError(err.message, ExitCode.ERROR);\n throw err;\n }\n bar?.done();\n\n const written = writeArtifacts(result.graph, {\n root,\n html: opts.html,\n report: opts.report,\n graphPath: global.graph,\n });\n\n // Record the freshness snapshot (stat+hash per corpus file, plus this build's\n // scope) so `vg serve`/`vg ask` can auto-refresh the map when the tree drifts.\n // Skipped for a custom --graph target: that is an explicit artifact the\n // auto-refresh machinery must not manage.\n if (!global.graph) {\n writeSnapshot(root, result.graph.provenance.corpusHash, result.fileStats, {\n only,\n exclude: opts.exclude,\n paths: paths.length ? paths : undefined,\n deep: global.deep,\n noGround: opts.ground === false,\n scip: typeof opts.scip === 'string' ? opts.scip : undefined,\n noScip: opts.scip === false,\n noTsc: opts.tsc === false,\n grammarsDir: opts.grammars,\n });\n }\n\n if (opts.export) writeExport(result.graph, opts.export);\n\n // `--attest`: sign the freshly-built graph → .vibgrate/attestation.intoto.jsonl.\n let attestation: SignSummary | undefined;\n const attestNotices: string[] = [];\n if (opts.attest) {\n const signed = await signGraphAttestation(root, result.graph, {\n key: opts.attestKey,\n attestation: opts.attestation,\n });\n attestation = signed.summary;\n attestNotices.push(...signed.notices);\n }\n\n if (global.json) {\n json({\n ok: true,\n counts: result.graph.meta.counts,\n languages: result.graph.meta.languages,\n reparsed: result.reparsed,\n reused: result.reused,\n totalFiles: result.totalFiles,\n resolve: result.resolveStats,\n tsc: result.tsc,\n scip: result.scip,\n epistemic: epistemicBreakdown(result.graph.edges),\n artifacts: written,\n corpusHash: result.graph.provenance.corpusHash,\n toolchain: result.graph.provenance.toolchain,\n attestation,\n timingMs: result.timing.totalMs,\n warnings: result.warnings,\n });\n return;\n }\n\n const { counts } = result.graph.meta;\n const incremental =\n result.reused > 0\n ? `incremental: ${result.reparsed} of ${result.totalFiles} files re-parsed`\n : `${result.totalFiles} files parsed`;\n const seconds = (result.timing.totalMs / 1000).toFixed(2);\n info(`${c.cyan('vg')} · mapped ${rel(root)} in ${seconds}s (${incremental})`);\n info(\n ` nodes ${c.bold(String(counts.nodes))} edges ${c.bold(String(counts.edges))} ` +\n `areas ${counts.areas} langs ${result.graph.meta.languages.join(',') || '—'}`,\n );\n const callPct =\n result.resolveStats.callsResolved + result.resolveStats.callsUnresolved > 0\n ? Math.round(\n (100 * result.resolveStats.callsResolved) /\n (result.resolveStats.callsResolved + result.resolveStats.callsUnresolved),\n )\n : 100;\n // When a precise rung ran it is authoritative; callPct is only the heuristic\n // floor (label it so, to avoid understating the precise result below).\n const precise = result.tsc || result.scip;\n const callLabel = precise ? `heuristic floor ${callPct}%` : `calls resolved ${callPct}%`;\n info(c.dim(` ${callLabel} · resolver ${result.graph.provenance.resolver.join(',')}`));\n if (result.tsc) {\n const jsx = result.tsc.jsx > 0 ? `, ${result.tsc.jsx} JSX` : '';\n info(c.dim(` tsc: ${result.tsc.resolved} precise edges across ${result.tsc.files} TS/JS files (${result.tsc.calls} calls${jsx})`));\n }\n if (result.scip) {\n info(c.dim(` scip: ${result.scip.resolved} precise edges from ${result.scip.tool ?? 'index'} (${result.scip.documents} docs)`));\n }\n const ep = epistemicBreakdown(result.graph.edges);\n info(\n c.dim(\n ` edges by evidence · observed ${ep.observed} · name-matched ${ep['name-matched']} · declared ${ep.declared}`,\n ),\n );\n const artifactList = [written.graphPath, written.htmlPath, written.reportPath]\n .filter(Boolean)\n .map((p) => path.relative(root, p as string))\n .join(' ');\n info(` → ${artifactList}`);\n if (result.warnings.length) {\n info(c.yellow(` ${result.warnings.length} parse warning(s) — run with --json for detail`));\n }\n if (attestation) {\n for (const n of attestNotices) info(c.yellow(` ${n}`));\n info(\n c.dim(\n ` attested · keyid ${attestation.keyid} · digest ${attestation.graphDigest.slice(0, 16)}… → ${attestation.out}`,\n ),\n );\n }\n\n maybeWarmEmbeddings(root, result.graph, global, opts.warm !== false);\n}\n\n/**\n * `vg build --verify` — the single verification entry point. Runs the determinism\n * self-check (byte-identical rebuilds + toolchain fingerprint) and, when an\n * attestation is present, verifies it against the on-disk graph. Exit 4 on a\n * determinism failure, exit 2 on an attestation failure.\n */\nasync function verifyGraph(root: string, opts: BuildCmdOpts, global: GlobalOpts): Promise<void> {\n const only = opts.only ? opts.only.split(',').map((s) => s.trim()).filter(Boolean) : undefined;\n const jobs = opts.jobs ? Number(opts.jobs) : undefined;\n const det = await verifyDeterminism({ root, only, exclude: opts.exclude, jobs });\n const attest = verifyGraphAttestation(root, { attestation: opts.attestation, pub: opts.pub });\n const attestFailed = !attest.missing && attest.result?.status === 'failed';\n\n if (global.json) {\n json({\n ok: det.ok && !attestFailed,\n determinism: { ok: det.ok, checks: det.checks, digest: det.digest },\n attestation: attest.missing\n ? null\n : {\n status: attest.result?.status,\n signatureValid: attest.result?.signatureValid,\n signerPinned: attest.result?.signerPinned,\n digestMatches: attest.result?.digestMatches,\n dirty: attest.result?.dirty,\n keyid: attest.result?.keyid,\n reason: attest.result?.reason,\n },\n });\n } else {\n info(`${c.cyan('vg build --verify')} · ${path.relative(process.cwd(), root) || '.'}`);\n for (const check of det.checks) {\n const mark = check.ok ? c.green('✔') : c.red('✘');\n const detail = check.detail ? c.dim(` (${check.detail})`) : '';\n info(` ${mark} ${check.name}${detail}`);\n }\n info(det.ok ? c.green(` deterministic · digest ${det.digest.slice(0, 16)}…`) : c.red(' NON-DETERMINISTIC'));\n if (attest.missing) {\n info(c.dim(` attestation: none (sign one with \\`vg build --attest\\`)`));\n } else {\n const r = attest.result;\n const badge =\n r?.status === 'verified'\n ? c.green('✔ attestation verified')\n : r?.status === 'signature-valid'\n ? c.yellow('~ attestation signature valid')\n : c.red('✘ attestation failed');\n info(` ${badge}${r?.keyid ? c.dim(` · keyid ${r.keyid}`) : ''}`);\n info(c.dim(` ${r?.reason ?? ''}`));\n }\n }\n\n if (!det.ok) throw new CliError('determinism self-check failed', ExitCode.NON_DETERMINISTIC);\n if (attestFailed) throw new CliError('attestation verification failed', ExitCode.GATE_FAILED);\n}\n\n/**\n * After an interactive build we have just committed to a code graph, so the\n * user is likely to run `vg ask`/`vg serve` next — start warming the semantic\n * index in the background now so that first semantic call is instant instead of\n * paying a cold model load. If the model isn't downloaded yet, the background\n * warm fetches it (once, centrally) rather than deferring the whole cost to the\n * first `ask`. Disabled with `--no-warm`; skipped under --json/--quiet/--local\n * and when not at a TTY (so CI never auto-downloads). The detached child runs\n * `vg embed --bg [--download]`; a lock prevents it racing a foreground `ask`.\n */\nfunction maybeWarmEmbeddings(root: string, graph: VgGraph, global: GlobalOpts, warm: boolean): void {\n if (!warm || global.json || global.quiet || global.local) return;\n if (!process.stdout.isTTY && !process.stderr.isTTY) return;\n const cli = process.argv[1];\n if (!cli) return;\n const modelId = resolveEmbedModel();\n const ready = isModelReady(modelId);\n // Already fully warm: model present and every node embedded → nothing to do.\n if (ready && countPending(graph, root, modelId) === 0) return;\n // When the model isn't on this machine yet, start the one-time download now\n // (the graph is built; the next semantic call shouldn't wait for it).\n const args = ready\n ? [cli, 'embed', '-C', root, '--bg']\n : [cli, 'embed', '-C', root, '--bg', '--download'];\n try {\n const child = spawn(process.execPath, args, { detached: true, stdio: 'ignore' });\n child.unref();\n info(\n c.dim(\n ready\n ? ' warming the semantic index in the background — `vg ask` will be instant'\n : ' downloading the semantic model in the background (once) — `vg ask`/`vg serve` will be instant; disable with --no-warm',\n ),\n );\n } catch {\n /* warm-up is best-effort */\n }\n}\n\nfunction writeExport(graph: Parameters<typeof serializeGraph>[0], target: string): void {\n if (target === '-') {\n out(serializeGraph(graph).trimEnd());\n return;\n }\n const ext = path.extname(target).toLowerCase();\n let content: string;\n switch (ext) {\n case '.json':\n content = serializeGraph(graph);\n break;\n case '.md':\n content = renderReport(graph);\n break;\n case '.html':\n content = renderHtml(graph);\n break;\n default:\n throw new CliError(\n `cannot export to \"${ext || target}\" yet — supported in Phase 0: .json, .md, .html, \"-\" (stdout). ` +\n `More formats (graphml, dot, cypher) arrive with \\`vg export\\` in Phase 1.`,\n ExitCode.USAGE_ERROR,\n );\n }\n fs.mkdirSync(path.dirname(path.resolve(target)), { recursive: true });\n fs.writeFileSync(target, content);\n}\n\nfunction collect(value: string, prev: string[]): string[] {\n return [...prev, value];\n}\n\nfunction rel(root: string): string {\n const r = path.relative(process.cwd(), root);\n return r === '' ? '.' : r;\n}\n","import * as path from 'node:path';\nimport * as fs from 'node:fs';\nimport { Command } from 'commander';\nimport { loadGraph } from '../engine/load.js';\nimport { defaultGraphPath, vibgrateDir } from '../engine/artifacts.js';\nimport { cacheDir } from '../engine/cache.js';\nimport { discover } from '../engine/discover.js';\nimport { probeFreshness, driftCount } from '../engine/freshness.js';\nimport { c, info, json } from '../util/output.js';\nimport { applyGlobalOptions, readGlobal, type GlobalOpts } from '../cli-options.js';\n\n/**\n * `vg status` — cache/freshness, counts, staleness, resolver rungs used.\n * Read-only; compares the committed graph against the working tree.\n */\nexport function registerStatus(program: Command): void {\n const cmd = program\n .command('status')\n .description('cache/freshness, counts, staleness, resolver rungs used')\n .action(async function (this: Command) {\n await runStatus(readGlobal(this));\n });\n applyGlobalOptions(cmd);\n}\n\nasync function runStatus(global: GlobalOpts): Promise<void> {\n const root = path.resolve(global.cwd ?? '.');\n const graphPath = global.graph ?? defaultGraphPath(root);\n const graph = loadGraph(root, graphPath);\n const hasCache = fs.existsSync(path.join(cacheDir(root), 'parse-cache.json'));\n\n // Determine staleness deterministically. Preferred path: the freshness\n // snapshot (stat+hash per corpus file, written by every build) gives an\n // exact per-file answer — content edits, adds, AND removes. Fallback when\n // no snapshot exists on this machine: \"files present now\" vs \"the graph's\n // node file set\", which sees adds/removes but not content edits.\n let stale: number | null = null;\n let staleExact = false;\n if (graph) {\n const probe = probeFreshness(root);\n if (probe) {\n stale = driftCount(probe.drift);\n staleExact = true;\n } else {\n const files = discover({ root });\n let changed = 0;\n const graphFiles = new Set(graph.nodes.filter((n) => n.kind === 'file').map((n) => n.file));\n const currentFiles = new Set(files.map((f) => f.rel));\n for (const f of currentFiles) if (!graphFiles.has(f)) changed++;\n for (const f of graphFiles) if (!currentFiles.has(f)) changed++;\n stale = changed;\n }\n }\n\n if (global.json) {\n json({\n root: path.relative(process.cwd(), root) || '.',\n graphPath: path.relative(root, graphPath),\n built: graph !== null,\n generatedAt: graph?.generatedAt ?? null,\n counts: graph?.meta.counts ?? null,\n languages: graph?.meta.languages ?? [],\n cluster: graph?.meta.cluster ?? null,\n resolver: graph?.provenance.resolver ?? [],\n corpusHash: graph?.provenance.corpusHash ?? null,\n cache: hasCache,\n staleFiles: stale,\n staleExact,\n });\n return;\n }\n\n if (!graph) {\n info(`${c.cyan('vg')} · no map yet at ${c.dim(path.relative(root, graphPath))}`);\n info(` run ${c.bold('vg')} to build one`);\n return;\n }\n\n info(`${c.cyan('vg')} · ${path.relative(root, graphPath)}`);\n info(` generated ${graph.generatedAt}`);\n info(\n ` nodes ${c.bold(String(graph.meta.counts.nodes))} edges ${c.bold(\n String(graph.meta.counts.edges),\n )} areas ${graph.meta.counts.areas} langs ${graph.meta.languages.join(',') || '—'}`,\n );\n info(` cluster ${graph.meta.cluster} · resolver ${graph.provenance.resolver.join(',')}`);\n info(` cache ${hasCache ? c.green('warm') : c.dim('cold')} · corpus ${graph.provenance.corpusHash.slice(0, 12)}…`);\n if (stale && stale > 0) {\n info(c.yellow(` ${stale} file(s) changed since last build — run ${c.bold('vg')} to refresh`));\n } else {\n info(c.dim(' up to date'));\n }\n if (vibgrateDir(root)) {\n /* artifact dir exists implicitly */\n }\n}\n","import * as path from 'node:path';\nimport { loadGraph } from '../engine/load.js';\nimport { CliError, ExitCode } from '../util/exit.js';\nimport type { GlobalOpts } from '../cli-options.js';\nimport type { VgGraph } from '../schema.js';\n\nexport function rootOf(global: GlobalOpts): string {\n return path.resolve(global.cwd ?? '.');\n}\n\n/** Load the committed graph, or fail with an actionable NOT_FOUND error. */\nexport function requireGraph(global: GlobalOpts): { root: string; graph: VgGraph } {\n const root = rootOf(global);\n const graph = loadGraph(root, global.graph);\n if (!graph) {\n throw new CliError(\n `no map found — run \\`vg\\` to build one first` +\n (global.graph ? ` (looked at ${global.graph})` : ''),\n ExitCode.NOT_FOUND,\n );\n }\n return { root, graph };\n}\n","import { Command } from 'commander';\nimport { queryGraph, queryGraphSemantic, type QueryResult } from '../engine/query.js';\nimport {\n loadEmbedder,\n getNodeEmbeddings,\n resolveEmbedModel,\n embeddingsCached,\n unavailableMessage,\n type EmbedUnavailable,\n} from '../engine/embeddings.js';\nimport { refreshIfStale } from '../engine/refresh.js';\nimport { driftCount } from '../engine/freshness.js';\nimport { recordCliCall, CLI_TOOL_ALIASES } from '../engine/savings.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { requireGraph, rootOf } from './util.js';\nimport { c, info, json, out } from '../util/output.js';\nimport { ProgressBar } from '../util/progress.js';\n\n/**\n * `vg ask \"<question>\"` (VG-CLI-SPEC §3.2). Hybrid lexical+structural+semantic\n * retrieval **on by default** — no API key, no flags. A local ONNX embedding\n * model is downloaded once on first use (then cached and fully offline) and\n * blends with the always-on deterministic lexical floor. It degrades gracefully\n * to lexical alone under `--local`, `--no-semantic`, on an unsupported platform,\n * or if the model can't be fetched — `ask` never fails. The context block goes\n * to stdout (pipeable); notes/progress to stderr.\n *\n * Before answering, `ask` auto-refreshes the map if the working tree drifted\n * since the last build (incremental, fail-soft; `--no-refresh` opts out), so\n * answers reflect the code as it is now — not as it was last built.\n */\nexport function registerAsk(program: Command): void {\n const cmd = program\n .command('ask')\n .description('ask the map — returns a budget-bounded context block')\n .argument('<question...>', 'your question (a bare quoted string also works: vg \"…\")')\n .option('-b, --budget <n>', 'approx token budget for the answer', '2000')\n .option('--no-semantic', 'lexical only (skip the local-embedding pass)')\n .option('--no-refresh', 'answer from the map as built — skip the auto-rebuild when files change')\n .action(async function (this: Command, question: string[], opts: { budget?: string; semantic?: boolean; refresh?: boolean }) {\n const global = readGlobal(this);\n const root = rootOf(global);\n // Answer from a map that matches the working tree: a cheap freshness\n // probe, then an incremental rebuild only if files really drifted. A\n // custom --graph is an explicit artifact and is never rebuilt over.\n // Fail-soft — a refresh problem falls back to the last built map.\n if (opts.refresh !== false && !global.graph) {\n const refreshed = await refreshIfStale(root);\n if (refreshed.status === 'refreshed' && !global.json) {\n const n = driftCount(refreshed.drift);\n info(c.dim(` map refreshed — ${n} file(s) drifted (${(refreshed.ms / 1000).toFixed(2)}s)`));\n } else if (refreshed.status === 'error' && !global.json) {\n info(c.yellow(` map refresh failed (${refreshed.message}) — answering from the last built map`));\n }\n }\n const { graph } = requireGraph(global);\n const budget = Number(opts.budget) || 2000;\n const q = question.join(' ');\n // Semantic is the default; --no-semantic or --local opt out.\n const wantSemantic = opts.semantic !== false && !global.local;\n\n let result: QueryResult;\n let mode = 'lexical';\n let note = '';\n\n if (wantSemantic) {\n // A genuine first run for this repo (no cached vectors yet) → show a\n // one-time note + live progress bar for the embedding pass. Otherwise stay quiet.\n const firstRun = !embeddingsCached(root, resolveEmbedModel());\n if (!global.json && firstRun) {\n info(c.dim(' preparing semantic search (first use embeds the map; cached, resumable & offline after)…'));\n }\n let reason: EmbedUnavailable | undefined;\n const embedder = await loadEmbedder({ local: global.local, onUnavailable: (r) => (reason = r) });\n if (embedder) {\n const bar = !global.json && firstRun ? new ProgressBar(c.dim('embedding')) : undefined;\n const vectors = await getNodeEmbeddings(graph, embedder, root, bar ? (d, t) => bar.update(d, t) : undefined);\n bar?.done();\n result = await queryGraphSemantic(graph, q, { budget, embedder, nodeVectors: vectors });\n mode = `semantic (${embedder.id})`;\n } else {\n result = queryGraph(graph, q, { budget });\n note = reason ? unavailableMessage(reason) : 'semantic unavailable; used lexical';\n }\n } else {\n result = queryGraph(graph, q, { budget });\n if (global.local) note = 'semantic skipped under --local; used lexical';\n }\n\n // Count this call in the local ledger when an AI host identified itself\n // (`--client`). `ask` is the CLI twin of the MCP `query_graph` tool, so it\n // records under that shared name with source `cli` — that's the\n // command-vs-MCP split `vg savings` reports.\n if (global.client) {\n const files = new Set(result.matches.map((m) => m.node.file).filter(Boolean));\n recordCliCall(\n root,\n {\n tool: CLI_TOOL_ALIASES.ask,\n client: global.client,\n outcome: result.matches.length === 0 ? 'miss' : 'complete',\n vgTokens: result.tokensEstimate,\n baselineFiles: files.size,\n },\n Date.now(),\n );\n }\n\n if (global.json) {\n json({\n question: result.question,\n mode,\n note: note || undefined,\n tokensEstimate: result.tokensEstimate,\n matches: result.matches.map((m) => ({\n name: m.node.qualifiedName,\n kind: m.node.kind,\n file: m.node.file,\n line: m.node.span.start,\n score: m.score,\n why: m.why,\n })),\n context: result.context,\n });\n return;\n }\n\n out(result.context);\n info('');\n info(c.dim(`vg · ${result.matches.length} match(es) · ~${result.tokensEstimate} tokens (budget ${budget}) · ${mode}`));\n if (note) info(c.yellow(` ${note}`));\n });\n applyGlobalOptions(cmd);\n}\n","import { Command, Option } from 'commander';\nimport {\n loadEmbedder,\n getNodeEmbeddings,\n resolveEmbedModel,\n countPending,\n embeddingsCached,\n modelCacheInfo,\n clearModelCache,\n unavailableMessage,\n type EmbedUnavailable,\n} from '../engine/embeddings.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { requireGraph, rootOf } from './util.js';\nimport { c, info, json } from '../util/output.js';\nimport { ProgressBar } from '../util/progress.js';\n\nfunction mb(bytes: number): string {\n if (bytes <= 0) return '0 MB';\n if (bytes < 1024 * 1024) return `${Math.max(1, Math.round(bytes / 1024))} KB`;\n return `${Math.round(bytes / (1024 * 1024))} MB`;\n}\n\n/**\n * `vg embed` — precompute the semantic index (node embeddings) so the next\n * `vg ask` is instant. The model is downloaded once per machine into a central,\n * home-folder cache (XDG `~/.cache/vibgrate/models`; no admin/sudo needed) shared\n * across all repos; per-repo vectors live in `.vibgrate/cache/`.\n *\n * `--where` shows the cache location/size; `--clear` removes the model. The\n * hidden `--bg` flag warms silently and never downloads (the `vg build` warm-up).\n */\nexport function registerEmbed(program: Command): void {\n const cmd = program\n .command('embed')\n .description('precompute the semantic index for instant `vg ask` (or --where / --clear)')\n .option('--where', 'show where the model is cached, and its size')\n .option('--clear', 'remove the downloaded model from the shared cache')\n // --bg: the silent background warm-up spawned by `vg build`. It skips the\n // model download by default; `--download` lets that background warm fetch\n // the model too, so a graph build starts the one-time download immediately\n // and the next `vg serve`/`vg ask` is instant instead of paying a cold load.\n .addOption(new Option('--bg').hideHelp())\n .addOption(new Option('--download').hideHelp())\n .action(async function (this: Command, opts: { where?: boolean; clear?: boolean; bg?: boolean; download?: boolean }) {\n const global = readGlobal(this);\n const modelId = resolveEmbedModel();\n\n // --where / --clear don't need a built graph.\n if (opts.where) return showWhere(rootOf(global), modelId, global.json);\n if (opts.clear) return doClear(global.json);\n\n const { graph } = requireGraph(global);\n const root = rootOf(global);\n const bg = opts.bg === true;\n const speak = !bg && !global.json;\n\n if (global.local) {\n if (speak) info(c.dim('vg embed · semantic is off (--local) — lexical search only'));\n return;\n }\n if (countPending(graph, root, modelId) === 0) {\n if (global.json) json({ embedded: 0, pending: 0, upToDate: true, model: modelId });\n else if (speak) info(`${c.cyan('vg embed')} · semantic index already up to date`);\n return;\n }\n\n let reason: EmbedUnavailable | undefined;\n const embedder = await loadEmbedder({\n local: global.local,\n // Background warm-ups skip the download unless explicitly asked to fetch\n // (`--bg --download`, spawned by `vg build` so the model is ready by the\n // time `vg serve`/`vg ask` needs it).\n noDownload: bg && opts.download !== true,\n showDownloadProgress: !bg,\n onUnavailable: (r) => (reason = r),\n });\n if (!embedder) {\n // Calm, specific fallback — never a stack trace. (bg stays silent.)\n if (speak && reason) info(c.dim(`vg embed · ${unavailableMessage(reason)}`));\n return;\n }\n\n const pending = countPending(graph, root, modelId);\n const bar = speak ? new ProgressBar(c.dim('embedding')) : undefined;\n await getNodeEmbeddings(graph, embedder, root, bar ? (d, t) => bar.update(d, t) : undefined);\n bar?.done();\n if (global.json) json({ embedded: pending, model: modelId });\n else if (speak) info(`${c.green('✔')} vg embed · semantic index ready (~${pending} node(s) · model ${modelId})`);\n });\n applyGlobalOptions(cmd);\n}\n\nfunction showWhere(root: string, modelId: string, asJson?: boolean): void {\n const m = modelCacheInfo(modelId);\n const repoCached = embeddingsCached(root, modelId);\n if (asJson) {\n json({ model: modelId, cacheDir: m.dir, present: m.present, bytes: m.bytes, repoEmbeddings: repoCached });\n return;\n }\n info(`${c.cyan('vg embed')} · model cache`);\n info(` model ${c.bold(modelId)}`);\n info(` shared at ${m.dir}`);\n info(` ${m.present ? c.green(`present · ~${mb(m.bytes)}`) : c.dim('not downloaded yet (fetched on first semantic ask)')}`);\n info(` this repo ${repoCached ? c.green('embeddings cached') : c.dim('not embedded yet — run `vg embed`')}`);\n info(c.dim(' no admin/sudo needed — the cache is in your home folder, shared across all repos.'));\n info(c.dim(' turn off: run with --local · relocate: XDG_CACHE_HOME=<dir> · remove: vg embed --clear'));\n}\n\nfunction doClear(asJson?: boolean): void {\n const before = modelCacheInfo();\n const freed = clearModelCache();\n if (asJson) {\n json({ removed: before.present, bytesFreed: freed, dir: before.dir });\n return;\n }\n if (!before.present || freed === 0) {\n info(`${c.cyan('vg embed')} · no model in the shared cache — nothing to remove (${before.dir})`);\n return;\n }\n info(`${c.green('✔')} vg embed · removed the shared model (~${mb(freed)}) from ${before.dir}`);\n info(c.dim(' repos use fast lexical search until the next semantic ask re-downloads it.'));\n}\n","import { CliError, ExitCode } from '../util/exit.js';\nimport type { GraphNode } from '../schema.js';\n\n/**\n * Build a NOT_FOUND error that lists ambiguous candidates with `--pick` hints,\n * so the message is actionable (VG-CLI-SPEC §3.3). `pickFlag` lets multi-argument\n * commands point at the right flag (e.g. `vg path` uses `--pick-a`/`--pick-b`).\n */\nexport function ambiguityError(summary: string, candidates: GraphNode[], pickFlag = '--pick'): CliError {\n if (candidates.length === 0) {\n return new CliError(`${summary} — try \\`vg hubs\\` or a broader name/glob`, ExitCode.NOT_FOUND);\n }\n const lines = candidates\n .slice(0, 10)\n .map((n, i) => ` ${i + 1}. ${n.qualifiedName} (${n.kind}, ${n.file}:${n.span.start})`);\n const more = candidates.length > 10 ? `\\n …and ${candidates.length - 10} more` : '';\n return new CliError(\n `${summary} — pick one with ${pickFlag} <n>:\\n${lines.join('\\n')}${more}`,\n ExitCode.NOT_FOUND,\n );\n}\n","import { Command } from 'commander';\nimport { resolveOne } from '../engine/lookup.js';\nimport { indexFor } from '../engine/relations.js';\nimport { recordCliCall, CLI_TOOL_ALIASES } from '../engine/savings.js';\nimport { countTokens } from '../engine/tokens.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { requireGraph, rootOf } from './util.js';\nimport { ambiguityError } from './ambiguity.js';\nimport { c, info, json } from '../util/output.js';\n\n/**\n * `vg show <name>` (VG-CLI-SPEC §3.3) — the richest single-node view: what it\n * is, its callers and callees and other edges, its area and importance.\n * (Facts + grounding are attached in Phase 2.)\n */\nexport function registerShow(program: Command): void {\n const cmd = program\n .command('show')\n .description('explain a node: what it is, what it calls, what calls it')\n .argument('<name>', 'qualified name, short name, file:line, glob, or id')\n .option('--pick <n>', 'pick the nth candidate when ambiguous')\n .action(function (this: Command, name: string, opts: { pick?: string }) {\n const global = readGlobal(this);\n const { graph } = requireGraph(global);\n const { node, candidates } = resolveOne(graph, name, opts.pick ? Number(opts.pick) : undefined);\n\n if (!node) {\n if (candidates.length === 0) {\n throw ambiguityError(`no node matches \"${name}\"`, []);\n }\n throw ambiguityError(`\"${name}\" is ambiguous`, candidates);\n }\n\n const index = indexFor(graph);\n const callees = dedupe(index.callees(node.id).map((x) => x.node));\n const callers = dedupe(index.callers(node.id).map((x) => x.node));\n const extendsEdges = index.out(node.id, 'extends').concat(index.out(node.id, 'implements'));\n const supertypes = extendsEdges.map((e) => index.node(e.dst)?.qualifiedName).filter(Boolean);\n const area = graph.areas.find((a) => a.id === node.area);\n\n // `show` is the CLI twin of the MCP `get_node` tool — record it under that\n // shared name (source `cli`) when an AI host identified itself. Baseline =\n // the node's file plus each caller/callee file a grep/read agent would open.\n if (global.client) {\n const files = new Set<string>([node.file]);\n for (const n of [...callees, ...callers]) if (n.file) files.add(n.file);\n const shown =\n node.qualifiedName +\n (node.signature ?? '') +\n callees.map((n) => n.qualifiedName).join('') +\n callers.map((n) => n.qualifiedName).join('');\n recordCliCall(\n rootOf(global),\n {\n tool: CLI_TOOL_ALIASES.show,\n client: global.client,\n outcome: 'complete',\n vgTokens: countTokens(shown),\n baselineFiles: files.size,\n },\n Date.now(),\n );\n }\n\n if (global.json) {\n json({\n id: node.id,\n name: node.qualifiedName,\n kind: node.kind,\n file: node.file,\n line: node.span.start,\n signature: node.signature ?? null,\n importance: node.importance,\n centrality: node.centrality,\n isHub: node.isHub,\n area: node.area,\n areaLabel: area?.label ?? null,\n tested: node.tested,\n calls: callees.map((n) => n.qualifiedName),\n calledBy: callers.map((n) => n.qualifiedName),\n extends: supertypes,\n });\n return;\n }\n\n info(`${c.cyan(node.qualifiedName)} ${c.dim(`(${node.kind})`)}`);\n info(` ${c.dim(`${node.file}:${node.span.start}`)}`);\n if (node.signature) info(` ${c.bold(node.signature)}`);\n info(\n ` importance ${node.importance.toFixed(3)}${node.isHub ? c.yellow(' ★ hub') : ''} · area #${node.area}${area ? ` ${c.dim(area.label)}` : ''}`,\n );\n if (supertypes.length) info(` ${c.dim('extends:')} ${supertypes.join(', ')}`);\n info(` ${c.dim('calls')} (${callees.length}): ${callees.slice(0, 12).map((n) => n.qualifiedName).join(', ') || '—'}`);\n info(` ${c.dim('called by')} (${callers.length}): ${callers.slice(0, 12).map((n) => n.qualifiedName).join(', ') || '—'}`);\n });\n applyGlobalOptions(cmd);\n}\n\nfunction dedupe<T extends { id: string }>(nodes: T[]): T[] {\n const seen = new Set<string>();\n const out: T[] = [];\n for (const n of nodes) {\n if (seen.has(n.id)) continue;\n seen.add(n.id);\n out.push(n);\n }\n return out;\n}\n","import { Command } from 'commander';\nimport { resolveOne } from '../engine/lookup.js';\nimport { shortestPath } from '../engine/paths.js';\nimport { recordCliCall, CLI_TOOL_ALIASES } from '../engine/savings.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { requireGraph, rootOf } from './util.js';\nimport { ambiguityError } from './ambiguity.js';\nimport { CliError, ExitCode } from '../util/exit.js';\nimport { c, info, json } from '../util/output.js';\n\n/**\n * `vg path <A> <B>` (VG-CLI-SPEC §4.1) — how A connects to B (shortest path).\n */\nexport function registerPath(program: Command): void {\n const cmd = program\n .command('path')\n .description('how A connects to B (shortest path)')\n .argument('<a>', 'source node')\n .argument('<b>', 'target node')\n .option('--pick-a <n>', 'pick the nth candidate for A when ambiguous')\n .option('--pick-b <n>', 'pick the nth candidate for B when ambiguous')\n .action(function (this: Command, a: string, b: string, opts: { pickA?: string; pickB?: string }) {\n const global = readGlobal(this);\n const { graph } = requireGraph(global);\n\n const ra = resolveOne(graph, a, opts.pickA ? Number(opts.pickA) : undefined);\n if (!ra.node) throw ambiguityError(`\"${a}\" ${ra.candidates.length ? 'is ambiguous' : 'not found'}`, ra.candidates, '--pick-a');\n const rb = resolveOne(graph, b, opts.pickB ? Number(opts.pickB) : undefined);\n if (!rb.node) throw ambiguityError(`\"${b}\" ${rb.candidates.length ? 'is ambiguous' : 'not found'}`, rb.candidates, '--pick-b');\n\n const result = shortestPath(graph, ra.node.id, rb.node.id);\n // Record the call for the command-vs-MCP split when an AI identified itself\n // (before the not-found throw, so a no-path attempt is counted as a miss).\n if (global.client) {\n recordCliCall(\n rootOf(global),\n { tool: CLI_TOOL_ALIASES.path, client: global.client, outcome: result ? 'complete' : 'miss' },\n Date.now(),\n );\n }\n if (!result) {\n throw new CliError(\n `no path between ${ra.node.qualifiedName} and ${rb.node.qualifiedName}`,\n ExitCode.NOT_FOUND,\n );\n }\n\n const byId = new Map(graph.nodes.map((n) => [n.id, n] as const));\n const names = result.ids.map((id) => byId.get(id)?.qualifiedName ?? id);\n\n if (global.json) {\n json({ from: ra.node.qualifiedName, to: rb.node.qualifiedName, hops: names.length - 1, direction: result.direction, path: names });\n return;\n }\n\n info(`${c.cyan('vg path')} · ${names.length - 1} hop(s)${result.direction === 'reverse' ? c.dim(' (reverse)') : ''}`);\n info(' ' + names.map((n) => c.bold(n)).join(c.dim(' → ')));\n });\n applyGlobalOptions(cmd);\n}\n","import { Command } from 'commander';\nimport { resolveOne } from '../engine/lookup.js';\nimport { GraphIndex, indexFor } from '../engine/relations.js';\nimport { recordCliCall, CLI_TOOL_ALIASES } from '../engine/savings.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { requireGraph, rootOf } from './util.js';\nimport { ambiguityError } from './ambiguity.js';\nimport { c, info, json } from '../util/output.js';\nimport type { GraphNode } from '../schema.js';\n\n/**\n * `vg tree <name>` (VG-CLI-SPEC §2/§3) — the call tree rooted at a node\n * (callees by default; `--callers` to invert), depth-bounded and cycle-safe.\n */\nexport function registerTree(program: Command): void {\n const cmd = program\n .command('tree')\n .description('the call tree rooted at a node (callees; --callers to invert)')\n .argument('<name>', 'root node')\n .option('--callers', 'show callers instead of callees')\n .option('--depth <n>', 'max depth', '3')\n .option('--pick <n>', 'pick the nth candidate when ambiguous')\n .action(function (this: Command, name: string, opts: { callers?: boolean; depth?: string; pick?: string }) {\n const global = readGlobal(this);\n const { graph } = requireGraph(global);\n const { node, candidates } = resolveOne(graph, name, opts.pick ? Number(opts.pick) : undefined);\n if (!node) throw ambiguityError(`\"${name}\" ${candidates.length ? 'is ambiguous' : 'not found'}`, candidates);\n\n const index = indexFor(graph);\n const maxDepth = Math.max(1, Number(opts.depth) || 3);\n const direction = opts.callers ? 'callers' : 'callees';\n // Record the call for the command-vs-MCP split when an AI identified itself.\n if (global.client) {\n recordCliCall(\n rootOf(global),\n { tool: CLI_TOOL_ALIASES.tree, client: global.client, outcome: 'complete' },\n Date.now(),\n );\n }\n\n if (global.json) {\n json(toJsonTree(index, node, direction, maxDepth, new Set()));\n return;\n }\n\n info(`${c.cyan('vg tree')} · ${direction} of ${c.bold(node.qualifiedName)} (depth ${maxDepth})`);\n const lines: string[] = [];\n walk(index, node, direction, maxDepth, 0, new Set(), lines, '');\n for (const l of lines) info(l);\n });\n applyGlobalOptions(cmd);\n}\n\nfunction next(index: GraphIndex, node: GraphNode, direction: 'callers' | 'callees'): GraphNode[] {\n const rel = direction === 'callees' ? index.callees(node.id) : index.callers(node.id);\n const seen = new Set<string>();\n const out: GraphNode[] = [];\n for (const { node: n } of rel) {\n if (seen.has(n.id)) continue;\n seen.add(n.id);\n out.push(n);\n }\n return out.sort((a, b) => b.importance - a.importance || a.qualifiedName.localeCompare(b.qualifiedName));\n}\n\nfunction walk(\n index: GraphIndex,\n node: GraphNode,\n direction: 'callers' | 'callees',\n maxDepth: number,\n depth: number,\n visited: Set<string>,\n lines: string[],\n prefix: string,\n): void {\n if (depth === 0) lines.push(`${c.bold(node.qualifiedName)} ${c.dim(`(${node.kind})`)}`);\n if (depth >= maxDepth) return;\n if (visited.has(node.id)) {\n lines.push(`${prefix}${c.dim('↻ (cycle)')}`);\n return;\n }\n visited.add(node.id);\n const children = next(index, node, direction);\n children.forEach((child, i) => {\n const last = i === children.length - 1;\n const branch = last ? '└─ ' : '├─ ';\n const cyc = visited.has(child.id) ? c.dim(' ↻') : '';\n lines.push(`${prefix}${c.dim(branch)}${child.qualifiedName}${cyc}`);\n walk(index, child, direction, maxDepth, depth + 1, new Set(visited), lines, prefix + (last ? ' ' : c.dim('│ ')));\n });\n}\n\nfunction toJsonTree(\n index: GraphIndex,\n node: GraphNode,\n direction: 'callers' | 'callees',\n maxDepth: number,\n visited: Set<string>,\n): unknown {\n if (maxDepth <= 0 || visited.has(node.id)) {\n return { name: node.qualifiedName, kind: node.kind, cycle: visited.has(node.id) };\n }\n const nextVisited = new Set(visited).add(node.id);\n return {\n name: node.qualifiedName,\n kind: node.kind,\n children: next(index, node, direction).map((child) =>\n toJsonTree(index, child, direction, maxDepth - 1, nextVisited),\n ),\n };\n}\n","import { Command } from 'commander';\nimport { renderReport } from '../engine/report.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { requireGraph } from './util.js';\nimport { c, info, json, out } from '../util/output.js';\nimport type { GraphNode, VgGraph } from '../schema.js';\n\n/**\n * Map insights (VG-CLI-SPEC §4.1): `vg map`, `vg hubs`, `vg areas`,\n * `vg oddities`. Read-only views over the committed graph.\n */\nexport function registerInsights(program: Command): void {\n const map = program\n .command('map')\n .description('the overview report (areas, hubs, untested hotspots)')\n .action(function (this: Command) {\n const global = readGlobal(this);\n const { graph } = requireGraph(global);\n if (global.json) json(reportJson(graph));\n else out(renderReport(graph));\n });\n applyGlobalOptions(map);\n\n const hubs = program\n .command('hubs')\n .description('the most-depended-on code (centrality outliers)')\n .option('-n, --limit <n>', 'how many to show', '20')\n .action(function (this: Command, opts: { limit?: string }) {\n const global = readGlobal(this);\n const { graph } = requireGraph(global);\n const limit = Number(opts.limit) || 20;\n const list = graph.nodes\n .filter((n) => n.kind !== 'file' && n.kind !== 'external')\n .sort((a, b) => b.importance - a.importance || a.qualifiedName.localeCompare(b.qualifiedName))\n .slice(0, limit);\n if (global.json) {\n json(list.map(nodeSummary));\n return;\n }\n info(`${c.cyan('vg hubs')} · top ${list.length} by importance`);\n for (const n of list) {\n const hub = n.isHub ? c.yellow(' ★') : '';\n info(` ${pad(n.importance.toFixed(3), 6)} ${c.bold(n.qualifiedName)}${hub} ${c.dim(`${n.file}:${n.span.start}`)}`);\n }\n });\n applyGlobalOptions(hubs);\n\n const areas = program\n .command('areas')\n .description('the natural groupings (communities), each labelled and sized')\n .option('-n, --limit <n>', 'how many to show', '30')\n .action(function (this: Command, opts: { limit?: string }) {\n const global = readGlobal(this);\n const { graph } = requireGraph(global);\n const limit = Number(opts.limit) || 30;\n const list = [...graph.areas].sort((a, b) => b.size - a.size || a.id - b.id).slice(0, limit);\n if (global.json) {\n json(list);\n return;\n }\n info(`${c.cyan('vg areas')} · ${graph.areas.length} communities (${graph.meta.cluster})`);\n for (const a of list) {\n info(\n ` ${c.bold(`#${a.id}`)} ${a.label} ${c.dim(`${a.size} nodes · cohesion ${a.cohesion.toFixed(2)} · ${a.externalEdges} external`)}`,\n );\n }\n });\n applyGlobalOptions(areas);\n\n const oddities = program\n .command('oddities')\n .description('surprising cross-area links (architectural smells)')\n .option('-n, --limit <n>', 'how many to show', '20')\n .action(function (this: Command, opts: { limit?: string }) {\n const global = readGlobal(this);\n const { graph } = requireGraph(global);\n const limit = Number(opts.limit) || 20;\n const byId = new Map(graph.nodes.map((n) => [n.id, n] as const));\n const list = graph.edges\n .filter((e) => typeof e.surprise === 'number' && e.surprise > 0)\n .sort((a, b) => (b.surprise ?? 0) - (a.surprise ?? 0) || a.id.localeCompare(b.id))\n .slice(0, limit);\n if (global.json) {\n json(\n list.map((e) => ({\n kind: e.kind,\n surprise: e.surprise,\n from: byId.get(e.src)?.qualifiedName ?? e.src,\n to: byId.get(e.dst)?.qualifiedName ?? e.dst,\n })),\n );\n return;\n }\n if (!list.length) {\n info(`${c.cyan('vg oddities')} · none found (no cross-area links, or only one area)`);\n return;\n }\n info(`${c.cyan('vg oddities')} · top ${list.length} surprising links`);\n for (const e of list) {\n const from = byId.get(e.src)?.qualifiedName ?? e.src;\n const to = byId.get(e.dst)?.qualifiedName ?? e.dst;\n info(` ${pad((e.surprise ?? 0).toFixed(2), 5)} ${c.bold(from)} ${c.dim(`—${e.kind}→`)} ${c.bold(to)}`);\n }\n });\n applyGlobalOptions(oddities);\n}\n\nfunction nodeSummary(n: GraphNode) {\n return {\n id: n.id,\n name: n.qualifiedName,\n kind: n.kind,\n file: n.file,\n line: n.span.start,\n importance: n.importance,\n isHub: n.isHub,\n area: n.area,\n };\n}\n\nfunction reportJson(graph: VgGraph) {\n return {\n counts: graph.meta.counts,\n languages: graph.meta.languages,\n cluster: graph.meta.cluster,\n areas: graph.areas.length,\n hubs: graph.nodes.filter((n) => n.isHub).length,\n };\n}\n\nfunction pad(s: string, n: number): string {\n return s.padStart(n, ' ');\n}\n","import { Command } from 'commander';\nimport { resolveOne } from '../engine/lookup.js';\nimport { impactOf } from '../engine/impact.js';\nimport { testsToRun, detectRunner } from '../engine/test-query.js';\nimport { recordCliCall, CLI_TOOL_ALIASES } from '../engine/savings.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { requireGraph, rootOf } from './util.js';\nimport { ambiguityError } from './ambiguity.js';\nimport { CliError, ExitCode } from '../util/exit.js';\nimport { c, info, json } from '../util/output.js';\n\n/**\n * `vg impact <name>` (VG-CLI-SPEC §3.5) — what breaks if you change it: the\n * deterministic structural blast radius (reverse reachability + decay\n * confidence), and with `--tests`, exactly the tests to run before shipping.\n * `--fail-on-untested` is a CI gate (exit 2).\n */\nexport function registerImpact(program: Command): void {\n const cmd = program\n .command('impact')\n .description('what breaks if you change it — and the tests to run')\n .argument('<name>', 'node to assess')\n .option('--depth <n>', 'max depth', '4')\n .option('--tests', 'also select the tests to run for the affected set')\n .option('--fail-on-untested', 'exit 2 if any affected node is untested')\n .option('--pick <n>', 'pick the nth candidate when ambiguous')\n .action(function (this: Command, name: string, opts: { depth?: string; tests?: boolean; failOnUntested?: boolean; pick?: string }) {\n const global = readGlobal(this);\n const { graph } = requireGraph(global);\n const { node, candidates } = resolveOne(graph, name, opts.pick ? Number(opts.pick) : undefined);\n if (!node) throw ambiguityError(`\"${name}\" ${candidates.length ? 'is ambiguous' : 'not found'}`, candidates);\n\n const depth = Number(opts.depth) || 4;\n const result = impactOf(graph, node.id, { depth });\n // Record the call for the command-vs-MCP split when an AI identified itself.\n if (global.client) {\n recordCliCall(\n rootOf(global),\n { tool: CLI_TOOL_ALIASES.impact, client: global.client, outcome: 'complete' },\n Date.now(),\n );\n }\n const withTests = opts.tests || opts.failOnUntested;\n const ti = withTests ? testsToRun(graph, node.id, depth) : undefined;\n const runner = ti ? detectRunner(rootOf(global), node.lang) : undefined;\n\n if (global.json) {\n json({\n ...result,\n tests: ti\n ? { toRun: ti.affectedTestFiles, command: runner?.command(ti.affectedTestFiles), untestedAffected: ti.untestedAffected }\n : undefined,\n });\n } else {\n info(`${c.cyan('Impact of')} ${c.bold(result.root.name)}`);\n info(` Affected (${result.affected.length}) ▸ ${result.direct} direct, ${result.transitive} transitive (depth ≤ ${result.depth})`);\n const preview = result.affected.slice(0, 15);\n for (const a of preview) {\n info(` ${c.dim(`d${a.depth}`)} ${a.name} ${c.dim(`${a.file}:${a.line} · conf ${a.confidence.toFixed(2)}`)}`);\n }\n if (result.affected.length > preview.length) info(c.dim(` …and ${result.affected.length - preview.length} more (use --json)`));\n if (result.minEdgeConfidence < 1) info(c.dim(` lowest edge confidence ${result.minEdgeConfidence.toFixed(2)} (ambiguous/dynamic edges lower it)`));\n if (ti) {\n info(` ${c.cyan(`Tests to run (${ti.affectedTestFiles.length})`)} ▸ ${ti.affectedTestFiles.join(' · ') || c.dim('none found')}`);\n if (runner && ti.affectedTestFiles.length) info(c.dim(` $ ${runner.command(ti.affectedTestFiles)}`));\n if (ti.untestedAffected.length) info(c.yellow(` ${ti.untestedAffected.length} affected node(s) are untested`));\n }\n }\n\n if (opts.failOnUntested && ti && ti.untestedAffected.length > 0) {\n throw new CliError(\n `${ti.untestedAffected.length} affected node(s) are untested: ${ti.untestedAffected.slice(0, 5).map((u) => u.name).join(', ')}`,\n ExitCode.GATE_FAILED,\n );\n }\n });\n applyGlobalOptions(cmd);\n}\n","import { Command } from 'commander';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { requireGraph } from './util.js';\nimport { impactOf } from '../engine/impact.js';\nimport { c, info, json } from '../util/output.js';\nimport type { GraphNode, Unknown, VgGraph } from '../schema.js';\n\n/**\n * `vg unknowns` — the honest inverse of a scanner that hides its blind spots.\n *\n * The graph records every heuristic reference it could not resolve (a call to a\n * name with no reachable definition, a supertype it could not connect), minus any\n * site a precise rung already covered. This command ranks those blind spots by\n * *blast radius*: an unresolved call inside a hub is far more consequential than\n * one in a leaf, because the graph is blind about a node everything depends on.\n * Deterministic: same graph → same ranking.\n */\n\n// Bound the impact BFS work: rank the most-central candidate sites exactly and\n// note if the tail was ordered by centrality alone.\nconst IMPACT_CANDIDATE_CAP = 200;\n\nexport interface Site {\n node: GraphNode;\n refs: Unknown[];\n total: number; // total unresolved occurrences at this site\n blastRadius: number; // transitive dependents (blind-spot reach)\n direct: number;\n transitive: number;\n}\n\nexport interface RankedUnknowns {\n sites: Site[];\n totalSites: number; // distinct sites with unknowns\n /** True when more sites existed than were exactly blast-radius scored (see cap). */\n capped: boolean;\n}\n\nexport function registerUnknowns(program: Command): void {\n const cmd = program\n .command('unknowns')\n .description('what the graph cannot resolve, ranked by blast radius')\n .option('-n, --limit <n>', 'how many sites to show', '20')\n .action(function (this: Command, opts: { limit?: string }) {\n const global = readGlobal(this);\n const { graph } = requireGraph(global);\n const limit = Number(opts.limit) || 20;\n\n const ranked = rankUnknowns(graph, limit);\n const { sites, totalSites, capped } = ranked;\n const totalRefs = (graph.unknowns ?? []).reduce((n, u) => n + u.count, 0);\n\n if (global.json) {\n json({\n unresolvedReferences: totalRefs,\n sites: totalSites,\n shown: sites.length,\n blastRankedCandidateCap: capped ? IMPACT_CANDIDATE_CAP : null,\n top: sites.map((s) => ({\n id: s.node.id,\n name: s.node.qualifiedName,\n kind: s.node.kind,\n file: s.node.file,\n line: s.node.span.start,\n importance: s.node.importance,\n blastRadius: s.blastRadius,\n direct: s.direct,\n transitive: s.transitive,\n unresolved: s.refs.map((r) => ({ name: r.name, kind: r.kind, count: r.count })),\n })),\n });\n return;\n }\n\n if (totalRefs === 0) {\n info(\n `${c.cyan('vg unknowns')} · none — every heuristic reference resolved ` +\n `(or was covered by a precise rung)`,\n );\n return;\n }\n\n info(\n `${c.cyan('vg unknowns')} · ${c.bold(String(totalRefs))} unresolved reference(s) at ` +\n `${totalSites} site(s) · top ${sites.length} by blast radius`,\n );\n for (const s of sites) {\n info(\n ` ${c.yellow(pad(String(s.blastRadius), 5))} ${c.bold(s.node.qualifiedName)} ` +\n c.dim(`${s.node.file}:${s.node.span.start} · importance ${s.node.importance.toFixed(3)}`),\n );\n info(` ${c.dim('cannot resolve:')} ${s.refs.map(fmtRef).join(', ')}`);\n }\n info(\n c.dim(\n ` blast radius = transitive dependents; these are the code paths the graph is blind about`,\n ),\n );\n if (capped) {\n info(\n c.dim(\n ` note: ${totalSites} sites have unknowns; only the top ${IMPACT_CANDIDATE_CAP} by ` +\n `centrality were blast-radius scored (the tail is ordered by centrality alone)`,\n ),\n );\n }\n });\n applyGlobalOptions(cmd);\n}\n\n/** Group unknowns by their originating node and rank by blast radius. */\nexport function rankSites(graph: VgGraph, limit: number): Site[] {\n return rankUnknowns(graph, limit).sites;\n}\n\n/** Group unknowns by originating node, rank by blast radius, and report truncation. */\nexport function rankUnknowns(graph: VgGraph, limit: number): RankedUnknowns {\n const unknowns = graph.unknowns ?? [];\n if (unknowns.length === 0) return { sites: [], totalSites: 0, capped: false };\n\n const byId = new Map(graph.nodes.map((n) => [n.id, n] as const));\n const grouped = new Map<string, Unknown[]>();\n for (const u of unknowns) {\n const list = grouped.get(u.from);\n if (list) list.push(u);\n else grouped.set(u.from, [u]);\n }\n\n // Only sites whose node still exists; pre-rank by centrality so the exact\n // (bounded) impact pass runs on the most consequential candidates first.\n const candidates: { node: GraphNode; refs: Unknown[]; total: number }[] = [];\n for (const [from, refs] of grouped) {\n const node = byId.get(from);\n if (!node) continue;\n candidates.push({ node, refs, total: refs.reduce((n, r) => n + r.count, 0) });\n }\n candidates.sort(\n (a, b) => b.node.importance - a.node.importance || a.node.id.localeCompare(b.node.id),\n );\n\n const scored: Site[] = candidates.slice(0, IMPACT_CANDIDATE_CAP).map((cand) => {\n const impact = impactOf(graph, cand.node.id);\n return {\n ...cand,\n blastRadius: impact.affected.length,\n direct: impact.direct,\n transitive: impact.transitive,\n };\n });\n\n scored.sort(\n (a, b) =>\n b.blastRadius - a.blastRadius ||\n b.node.importance - a.node.importance ||\n b.total - a.total ||\n a.node.id.localeCompare(b.node.id),\n );\n\n return {\n sites: scored.slice(0, limit),\n totalSites: candidates.length,\n capped: candidates.length > IMPACT_CANDIDATE_CAP,\n };\n}\n\nfunction fmtRef(r: Unknown): string {\n const times = r.count > 1 ? ` ×${r.count}` : '';\n const kind = r.kind === 'call' ? '' : ` (${r.kind})`;\n return `${r.name}${kind}${times}`;\n}\n\nfunction pad(s: string, n: number): string {\n return s.padStart(n, ' ');\n}\n","import * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\nimport { randomUUID } from 'node:crypto';\nimport { cacheDir } from './cache.js';\nimport { VERSION } from '../version.js';\nimport { resolveIngestHost } from '../reporting/regions.js';\nimport type { SavingEntry, Source, Outcome } from './savings.js';\n\n/**\n * Opt-in usage-stats sharing for `vg serve --share-stats`.\n *\n * This is the ONLY path in `vg serve` that sends anything off the machine, and\n * it is off unless the operator explicitly asks for it. What we send is the\n * same counts-only ledger `vg savings` reports locally — per (source, client,\n * tool, outcome): how many calls and the vg-vs-grep token figures — plus the vg\n * version, OS/arch, and a random per-install id. We never send code, file paths,\n * question text, repo identity, or any credential. See GUARDRAILS §3.4.\n *\n * Design:\n * - The local ledger (savings.jsonl) is the single source of truth; the flusher\n * reads only the tail past a persisted byte offset, so a batch is sent once.\n * - Fire-and-forget with a short timeout. A network problem never blocks a tool\n * call and never throws — the offset only advances on a confirmed 2xx, so a\n * failed batch is retried on the next flush.\n * - Fully offline-safe: under `--local` the sharer is never constructed.\n */\n\n/** Payload schema version — must match the server's `mcpUsageStatsSchema`. */\nconst SCHEMA_VERSION = '1';\n/** Where the offset (and cached install id) live, per repo, beside the ledger. */\nconst OFFSET_FILE = 'stats-share.json';\n/** The machine-global anonymous install id lives here (stable across repos). */\nconst INSTALL_ID_DIR = path.join(os.homedir(), '.vibgrate');\nconst INSTALL_ID_FILE = path.join(INSTALL_ID_DIR, 'install-id');\n/** Give a flush POST a hard ceiling so a hung endpoint never stalls shutdown. */\nconst SEND_TIMEOUT_MS = 4000;\n\n/** One aggregated row of the shared batch — counts only. */\nexport interface StatsRow {\n source: Source;\n client: string;\n tool: string;\n outcome: Outcome;\n calls: number;\n vgTokens: number;\n baselineTokens: number;\n}\n\n/** The counts-only batch POSTed to the ingest endpoint. */\nexport interface StatsBatch {\n schemaVersion: string;\n installId: string;\n vgVersion: string;\n os: string;\n arch: string;\n windowStart: string;\n windowEnd: string;\n totalCalls: number;\n rows: StatsRow[];\n}\n\n/**\n * Read (or lazily create) the anonymous per-install id — a random UUID stored in\n * `~/.vibgrate/install-id`. It is *not* tied to the user, the repo, or any\n * account; it only lets us de-duplicate batches from the same install when\n * aggregating. If the home dir isn't writable we fall back to an ephemeral id\n * so sharing still works (it just can't be de-duplicated across restarts).\n */\nexport function installId(): string {\n try {\n const existing = fs.readFileSync(INSTALL_ID_FILE, 'utf8').trim();\n if (isUuid(existing)) return existing;\n } catch {\n /* not created yet */\n }\n const id = randomUuid();\n try {\n fs.mkdirSync(INSTALL_ID_DIR, { recursive: true });\n fs.writeFileSync(INSTALL_ID_FILE, id + '\\n', { mode: 0o600 });\n } catch {\n /* home dir read-only — use the ephemeral id for this process */\n }\n return id;\n}\n\nfunction isUuid(s: string): boolean {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(s);\n}\n\nfunction randomUuid(): string {\n return randomUUID();\n}\n\n/** Resolve the ingest endpoint: env override wins, else the default region host. */\nexport function statsEndpoint(): string {\n const override = process.env.VIBGRATE_STATS_ENDPOINT;\n if (override && /^https?:\\/\\//.test(override)) return override;\n return `https://${resolveIngestHost()}/v1/ingest/cli-mcp-usage`;\n}\n\nfunction offsetPath(root: string): string {\n return path.join(cacheDir(root), OFFSET_FILE);\n}\n\nfunction ledgerFilePath(root: string): string {\n return path.join(cacheDir(root), 'savings.jsonl');\n}\n\nfunction readOffset(root: string): number {\n try {\n const raw = JSON.parse(fs.readFileSync(offsetPath(root), 'utf8')) as { offset?: number };\n return typeof raw.offset === 'number' && raw.offset >= 0 ? raw.offset : 0;\n } catch {\n return 0;\n }\n}\n\nfunction writeOffset(root: string, offset: number): void {\n try {\n fs.mkdirSync(cacheDir(root), { recursive: true });\n fs.writeFileSync(offsetPath(root), JSON.stringify({ offset }) + '\\n');\n } catch {\n /* best-effort; a lost offset just means one batch may re-send */\n }\n}\n\n/**\n * Aggregate the ledger entries after `fromOffset` into a counts-only batch.\n * Returns the batch (or null if there's nothing new) and the new byte offset to\n * persist once the batch is confirmed sent.\n */\nexport function buildBatch(\n root: string,\n fromOffset: number,\n id = installId(),\n): { batch: StatsBatch | null; newOffset: number } {\n const file = ledgerFilePath(root);\n let size = 0;\n try {\n size = fs.statSync(file).size;\n } catch {\n return { batch: null, newOffset: 0 };\n }\n // The ledger was truncated/recreated under us — re-read from the top.\n const start = fromOffset > size ? 0 : fromOffset;\n if (start >= size) return { batch: null, newOffset: size };\n\n let text = '';\n try {\n const fd = fs.openSync(file, 'r');\n try {\n const buf = Buffer.alloc(size - start);\n fs.readSync(fd, buf, 0, buf.length, start);\n text = buf.toString('utf8');\n } finally {\n fs.closeSync(fd);\n }\n } catch {\n return { batch: null, newOffset: fromOffset };\n }\n\n // Only whole lines are complete; a trailing partial line (mid-append) is left\n // for the next flush by rewinding the offset to the last newline.\n const lastNl = text.lastIndexOf('\\n');\n if (lastNl < 0) return { batch: null, newOffset: start };\n const consumed = start + lastNl + 1;\n const rows = new Map<string, StatsRow>();\n let total = 0;\n let minTs = Infinity;\n let maxTs = -Infinity;\n for (const line of text.slice(0, lastNl).split('\\n')) {\n if (!line.trim()) continue;\n let e: SavingEntry;\n try {\n e = JSON.parse(line) as SavingEntry;\n } catch {\n continue;\n }\n const source: Source = e.source ?? 'mcp';\n const client = e.client ?? 'unknown';\n const outcome: Outcome = e.outcome ?? 'complete';\n const key = `${source}|${client}|${e.tool}|${outcome}`;\n const row = rows.get(key) ?? {\n source,\n client,\n tool: e.tool,\n outcome,\n calls: 0,\n vgTokens: 0,\n baselineTokens: 0,\n };\n row.calls++;\n row.vgTokens += e.vgTokens ?? 0;\n row.baselineTokens += e.baselineTokens ?? 0;\n rows.set(key, row);\n total++;\n if (typeof e.ts === 'number') {\n if (e.ts < minTs) minTs = e.ts;\n if (e.ts > maxTs) maxTs = e.ts;\n }\n }\n if (total === 0 || !Number.isFinite(minTs)) return { batch: null, newOffset: consumed };\n const batch: StatsBatch = {\n schemaVersion: SCHEMA_VERSION,\n installId: id,\n vgVersion: VERSION,\n os: process.platform,\n arch: process.arch,\n windowStart: new Date(minTs).toISOString(),\n windowEnd: new Date(maxTs).toISOString(),\n totalCalls: total,\n rows: [...rows.values()],\n };\n return { batch, newOffset: consumed };\n}\n\n/**\n * POST a batch to the endpoint. Never throws; returns whether it was accepted.\n * A short timeout keeps a hung endpoint from stalling the caller (e.g. shutdown).\n */\nasync function postBatch(batch: StatsBatch): Promise<boolean> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), SEND_TIMEOUT_MS);\n timer.unref?.();\n try {\n const res = await fetch(statsEndpoint(), {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', Connection: 'close' },\n body: JSON.stringify(batch),\n signal: controller.signal,\n });\n return res.ok;\n } catch {\n return false;\n } finally {\n clearTimeout(timer);\n }\n}\n\n/**\n * Periodic + on-shutdown flusher for one serve session. Holds the install id and\n * the persisted offset so each flush reads only new ledger lines and advances the\n * offset only when the batch is confirmed sent.\n */\nexport class StatsSharer {\n private readonly id = installId();\n private offset: number;\n private flushing = false;\n\n constructor(private readonly root: string) {\n this.offset = readOffset(root);\n }\n\n /**\n * Flush any new ledger entries. Single-flight (a slow POST won't overlap the\n * next tick). Best-effort: any failure is swallowed and retried next time.\n */\n async flush(): Promise<void> {\n if (this.flushing) return;\n this.flushing = true;\n try {\n const { batch, newOffset } = buildBatch(this.root, this.offset, this.id);\n if (!batch) {\n // Nothing to send, but still advance past consumed blank/partial space.\n if (newOffset > this.offset) {\n this.offset = newOffset;\n writeOffset(this.root, newOffset);\n }\n return;\n }\n const ok = await postBatch(batch);\n if (ok) {\n this.offset = newOffset;\n writeOffset(this.root, newOffset);\n }\n } catch {\n /* never let sharing break serving */\n } finally {\n this.flushing = false;\n }\n }\n}\n","import * as fs from 'node:fs';\nimport { Command } from 'commander';\nimport { defaultGraphPath } from '../engine/artifacts.js';\nimport { serveStdio, createServer, GraphSource, type ServeOptions } from '../mcp/server.js';\nimport { StatsSharer, statsEndpoint } from '../engine/stats-share.js';\nimport { refreshIfStale } from '../engine/refresh.js';\nimport { driftCount } from '../engine/freshness.js';\nimport { runBuild } from './build.js';\nimport { applyGlobalOptions, readGlobal, type GlobalOpts } from '../cli-options.js';\nimport { rootOf } from './util.js';\nimport { CliError, ExitCode } from '../util/exit.js';\nimport { c, info } from '../util/output.js';\n\n/** How often the opt-in `--share-stats` flusher uploads new ledger entries. */\nconst SHARE_FLUSH_INTERVAL_MS = 5 * 60 * 1000;\n\n/**\n * `vg serve` (VG-CLI-SPEC §3.6) — a LOCAL MCP server over the map. Default\n * transport is stdio (what assistants spawn); `--http` exposes a stateless\n * streamable-HTTP endpoint for local browser/shared hosts. Fully offline,\n * read-only tools only. Independent of Vibgrate's hosted cloud MCP.\n *\n * The map auto-refreshes: tool calls run a cheap freshness probe and trigger\n * an incremental in-process rebuild when the working tree drifted, so the AI\n * always queries an up-to-date graph (see mcp/server.ts). `--no-refresh`\n * pins serving to the map as built; a custom `--graph` implies it.\n *\n * Before the server accepts its first request it also brings the map in sync\n * once, up front: a missing map is built from scratch and a stale map is\n * rebuilt incrementally (see `ensureServableGraph`). That way the first tool\n * call already sees an up-to-date graph instead of waiting for the in-process\n * probe — which only fires once tool calls start arriving — to notice drift.\n */\nexport function registerServe(program: Command): void {\n const cmd = program\n .command('serve')\n .description('start Vibgrate AI Context — local-first MCP serving your code map, drift & version-correct docs to your AI')\n .option('--http', 'serve over streamable HTTP instead of stdio')\n .option('--port <n>', 'port for --http', '7437')\n .option('--host <h>', 'host for --http', '127.0.0.1')\n .option('--savings', 'record local, counts-only usage savings (opt-in; off by default)')\n .option('--share-stats', 'ALSO upload the counts-only usage ledger to Vibgrate to improve the local MCP (opt-in; off by default; implies --savings; disabled under --local)')\n .option('--dedup', \"collapse a node's heavy relation lists on repeat reads within a session (opt-in; saves tokens)\")\n .option('--no-refresh', 'serve the map as built — skip the auto-rebuild when files change')\n .action(async function (this: Command, opts: { http?: boolean; port?: string; host?: string; savings?: boolean; shareStats?: boolean; dedup?: boolean; refresh?: boolean }) {\n const global = readGlobal(this);\n const root = rootOf(global);\n const graphPath = global.graph ?? defaultGraphPath(root);\n // A custom --graph is an explicit artifact — never rebuild over it.\n const refresh = opts.refresh !== false && !global.graph;\n // Sharing needs the network, so `--local` (air-gapped) hard-disables the\n // upload — but still lets `--savings` record locally. Sharing implies\n // recording so there's something to send.\n const local = global.local === true;\n const shareStats = opts.shareStats === true && !local;\n const serveOpts: ServeOptions = {\n savings: opts.savings === true || shareStats,\n shareStats,\n local,\n dedup: opts.dedup === true,\n refresh,\n };\n\n // Check the map is up to date and, when it isn't, run the build before we\n // start serving — build a missing map from scratch, rebuild a stale one\n // incrementally. Skipped under `--no-refresh`/`--graph`, which serve the\n // map exactly as built.\n await ensureServableGraph(root, graphPath, global, refresh);\n\n if (opts.shareStats === true && local) {\n info(c.dim('vg · --share-stats ignored under --local (air-gapped): recording locally, not uploading.'));\n }\n if (shareStats) startSharing(root);\n\n const freshness = refresh ? 'auto-refresh' : 'as built';\n if (opts.http) {\n await serveHttp(graphPath, opts.host ?? '127.0.0.1', Number(opts.port) || 7437, serveOpts, freshness);\n } else {\n // stdio: NOTHING may go to stdout except the protocol stream.\n info(c.dim(`vg · MCP server on stdio (read-only, ${freshness}). Connect your assistant to this process.`));\n await serveStdio(graphPath, serveOpts);\n }\n });\n applyGlobalOptions(cmd);\n}\n\n/**\n * Ensure there is an up-to-date map to serve before the MCP server starts.\n *\n * When auto-refresh is on (the default; disabled by `--no-refresh` or a pinned\n * `--graph`):\n * - **No map yet** → run the ordinary `vg build` so a fresh checkout can `vg\n * serve` without a separate build step first. Forced out of `--json` so the\n * build summary never lands on stdout — under stdio that channel is the MCP\n * protocol stream and carries nothing else.\n * - **Map present but stale** → the incremental refresh (`refreshIfStale`),\n * replaying the last build's scope. Fail-soft: a refresh error degrades to\n * serving the last built map rather than refusing to start.\n *\n * With auto-refresh off we serve the map exactly as built and only verify one\n * exists. Either way, if there is still no map afterwards we stop with an\n * actionable error instead of starting a server with nothing to answer from.\n *\n * `opts.inline` forces single-threaded build/refresh (tests only).\n */\nexport async function ensureServableGraph(\n root: string,\n graphPath: string,\n global: GlobalOpts,\n refresh: boolean,\n opts: { inline?: boolean } = {},\n): Promise<void> {\n if (refresh) {\n if (!fs.existsSync(graphPath)) {\n info(c.dim('vg · no map found — building it before serving…'));\n await runBuild(\n [],\n { html: false, report: false, jobs: opts.inline ? '1' : undefined },\n { ...global, json: false },\n );\n } else {\n const refreshed = await refreshIfStale(root, { inline: opts.inline });\n if (refreshed.status === 'refreshed') {\n const n = driftCount(refreshed.drift);\n info(c.dim(`vg · map refreshed before serving — ${n} file(s) drifted (${(refreshed.ms / 1000).toFixed(2)}s)`));\n } else if (refreshed.status === 'error') {\n info(c.yellow(`vg · map refresh failed (${refreshed.message}) — serving the last built map`));\n }\n }\n }\n\n if (!fs.existsSync(graphPath)) {\n throw new CliError(\n `no map found at ${graphPath} — run \\`vg\\` to build one first`,\n ExitCode.NOT_FOUND,\n );\n }\n}\n\n/**\n * Start the opt-in usage-stats upload for this serve session: a clear one-time\n * disclosure, a periodic flush of the counts-only ledger, and a final flush when\n * the process is asked to stop. Everything is best-effort — a network problem\n * never affects serving. Nothing here is reached unless the operator passed\n * `--share-stats` (and is not `--local`).\n */\nfunction startSharing(root: string): void {\n const sharer = new StatsSharer(root);\n // Transparency (GUARDRAILS §3.4): say exactly what is shared, where, and how to\n // stop. To stderr, so it never pollutes the stdio protocol stream.\n info(\n c.dim(\n `vg · sharing counts-only usage stats with Vibgrate (${statsEndpoint()}) to improve the local MCP. ` +\n 'No code, paths, or questions are sent. Stop by omitting --share-stats.',\n ),\n );\n const timer = setInterval(() => void sharer.flush(), SHARE_FLUSH_INTERVAL_MS);\n timer.unref?.(); // the server, not this timer, keeps the process alive\n\n let flushed = false;\n const finalFlush = (): void => {\n if (flushed) return;\n flushed = true;\n void sharer.flush();\n };\n process.once('SIGINT', () => {\n finalFlush();\n process.exit(0);\n });\n process.once('SIGTERM', () => {\n finalFlush();\n process.exit(0);\n });\n process.once('beforeExit', finalFlush);\n}\n\nasync function serveHttp(graphPath: string, host: string, port: number, opts: ServeOptions, freshness: string): Promise<void> {\n const { createServer: createHttp } = await import('node:http');\n const { StreamableHTTPServerTransport } = await import(\n '@modelcontextprotocol/sdk/server/streamableHttp.js'\n );\n\n // One graph source for the whole process: the parsed graph, hot-reload state,\n // and refresh debounce live across requests (re-parsing per request would be\n // wasteful and would probe freshness on every call).\n const source = new GraphSource(graphPath, opts.refresh !== false);\n\n const httpServer = createHttp(async (req, res) => {\n if (req.url !== '/mcp') {\n res.writeHead(404).end('not found');\n return;\n }\n try {\n // Stateless: a fresh server+transport per request (no session state) —\n // simple and robust for a local single-user endpoint. (Per-request, so\n // `--dedup` only accumulates within stdio sessions, not across HTTP calls.)\n const transport = new StreamableHTTPServerTransport({ sessionIdGenerator: undefined });\n const server = createServer(source, opts);\n res.on('close', () => {\n void transport.close();\n void server.close();\n });\n await server.connect(transport);\n await transport.handleRequest(req, res);\n } catch (err) {\n if (!res.headersSent) res.writeHead(500).end('internal error');\n info(c.red(`vg serve: request error: ${(err as Error).message}`));\n }\n });\n\n await new Promise<void>((resolve) => httpServer.listen(port, host, resolve));\n info(c.dim(`vg · MCP server on http://${host}:${port}/mcp (read-only, local, ${freshness})`));\n // Keep the process alive until killed.\n await new Promise<never>(() => {});\n}\n","import { Command } from 'commander';\nimport { loadGraph } from '../engine/load.js';\nimport { ASSISTANTS, assistantById, detectServeLaunch, installAssistant, uninstallAssistant, writeNavigationConfig } from '../install/registry.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { rootOf } from './util.js';\nimport { CliError, ExitCode, usageError } from '../util/exit.js';\nimport { c, info, json } from '../util/output.js';\n\nconst SMALL_REPO_FILES = 150;\n\n/**\n * `vg install <tool…>` (VG-CLI-SPEC §3.7) — wire vg into AI assistants: a skill,\n * an advisory (opt-out) nudge, and an MCP registration where supported.\n * Idempotent; repo-local (the team-shareable default). On small repos the nudge\n * honestly says searching is fine.\n */\nexport function registerInstall(program: Command): void {\n const install = program\n .command('install')\n .description('add vg to your AI assistant(s): skill + MCP + advisory nudge')\n .argument('[tools...]', `assistant ids: ${ASSISTANTS.map((a) => a.id).join(', ')}`)\n .option('--all', 'install for every supported assistant')\n .option('--list', 'show the support matrix and exit')\n .option('--no-hook', 'skip the advisory nudge')\n .action(function (this: Command, tools: string[], opts: { all?: boolean; list?: boolean; hook?: boolean }) {\n const global = readGlobal(this);\n const root = rootOf(global);\n\n if (opts.list) {\n if (global.json) {\n json(ASSISTANTS.map((a) => ({ id: a.id, label: a.label, mcp: !!a.mcp, skill: !!a.skill, nudge: !!a.nudge })));\n } else {\n info(`${c.cyan('vg install')} · supported assistants`);\n const pad = Math.max(...ASSISTANTS.map((a) => a.id.length)) + 2;\n for (const a of ASSISTANTS) {\n info(` ${c.bold(a.id.padEnd(pad))} ${a.label} ${c.dim(`mcp:${a.mcp ? '✓' : '—'} skill:${a.skill ? '✓' : '—'} nudge:${a.nudge ? '✓' : '—'}`)}`);\n }\n }\n return;\n }\n\n const targets = opts.all ? ASSISTANTS : tools.map(resolve);\n if (targets.length === 0) throw usageError('name an assistant (e.g. `vg install claude`) or use --all / --list');\n\n const graph = loadGraph(root, global.graph);\n const fileCount = graph ? graph.nodes.filter((n) => n.kind === 'file').length : 0;\n const smallRepo = graph !== null && fileCount > 0 && fileCount < SMALL_REPO_FILES;\n\n // Detect once — every target registers the same launch command.\n const launch = detectServeLaunch();\n const results = targets.map((a) => ({ id: a.id, ...installAssistant(a, { root, hook: opts.hook, smallRepo, launch }) }));\n // Write the deferred-loading navigation config once (P3): a client-side\n // loading config for Claude-API agents that support defer_loading — the\n // server tool set is unchanged.\n const navConfig = writeNavigationConfig(root);\n\n if (global.json) {\n json({ root, smallRepo, navConfig, launch: { command: launch.command, args: launch.args, note: launch.note ?? null }, results });\n return;\n }\n for (const r of results) {\n info(`${c.green('✔')} ${c.bold(r.id)} — wrote ${r.wrote.join(', ')}${r.skipped.length ? c.dim(` (skipped ${r.skipped.join(', ')})`) : ''}`);\n }\n if (launch.note && results.some((r) => r.note)) info(`${c.yellow('!')} ${launch.note}`);\n if (smallRepo) info(c.dim(` note: small repo (${fileCount} files) — nudge says searching is fine; vg is still used for impact/tests`));\n info(c.dim(` wrote ${navConfig} — deferred-loading config for Claude-API agents (lower per-step token cost)`));\n info(c.dim(' run `vg serve` is wired via MCP; build the map with `vg` if you have not yet'));\n });\n applyGlobalOptions(install);\n\n const uninstall = program\n .command('uninstall')\n .description('remove vg from an AI assistant')\n .argument('<tools...>', 'assistant ids')\n .option('--purge', 'also delete the skill file')\n .action(function (this: Command, tools: string[], opts: { purge?: boolean }) {\n const global = readGlobal(this);\n const root = rootOf(global);\n const results = tools.map(resolve).map((a) => ({ id: a.id, removed: uninstallAssistant(a, root, !!opts.purge) }));\n if (global.json) {\n json({ root, results });\n return;\n }\n for (const r of results) {\n info(`${c.green('✔')} ${c.bold(r.id)} — removed ${r.removed.length ? r.removed.join(', ') : c.dim('nothing (not installed)')}`);\n }\n });\n applyGlobalOptions(uninstall);\n}\n\nfunction resolve(id: string) {\n const a = assistantById(id);\n if (!a) {\n const near = ASSISTANTS.filter(\n (x) => x.id.startsWith(id) || id.startsWith(x.id) || x.id.includes(id) || x.label.toLowerCase().includes(id.toLowerCase()),\n ).map((x) => x.id);\n const hint = near.length ? ` Did you mean: ${near.join(', ')}?` : '';\n throw new CliError(\n `unknown assistant \"${id}\".${hint} Supported: ${ASSISTANTS.map((x) => x.id).join(', ')} (see \\`vg install --list\\`)`,\n ExitCode.USAGE_ERROR,\n );\n }\n return a;\n}\n","import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { execFileSync } from 'node:child_process';\nimport { Command } from 'commander';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { rootOf } from './util.js';\nimport { CliError, ExitCode } from '../util/exit.js';\nimport { c, info } from '../util/output.js';\n\n/**\n * `vg share` (VG-CLI-SPEC §3.8) — make the map committable + self-updating for\n * the team. Installs:\n * - a pre-commit hook that rebuilds and stages `graph.json` *only when it\n * changed* (deterministic, no LLM → no token burn, no churn on no-op commits);\n * - a deterministic merge driver: on conflict it rebuilds the graph from the\n * merged code (the graph is a pure function of code) instead of corrupting\n * JSON with a naive union;\n * - `.vibgrate/.gitignore` keeping `cache/` and volatile artifacts out of git\n * while committing the stable `graph.json` (prompt-cache safe).\n */\n\nconst HOOK_BEGIN = '# vg:begin';\nconst HOOK_END = '# vg:end';\n\nexport function registerShare(program: Command): void {\n const cmd = program\n .command('share')\n .description('make the map committable + auto-updating for your team (git)')\n .option('--undo', 'reverse what `vg share` installed')\n .option('--reports', 'also commit graph.html / GRAPH_REPORT.md (default: gitignored)')\n .action(function (this: Command, opts: { undo?: boolean; reports?: boolean }) {\n const global = readGlobal(this);\n const root = rootOf(global);\n const gitDir = path.join(root, '.git');\n if (!fs.existsSync(gitDir)) {\n throw new CliError('not a git repository — run `vg share` inside a git repo', ExitCode.USAGE_ERROR);\n }\n\n if (opts.undo) {\n undo(root);\n info(`${c.cyan('vg share')} ${c.dim('--undo')} · removed hooks, merge driver, and attributes`);\n return;\n }\n\n writeVibgrateGitignore(root, !!opts.reports);\n writeGitAttributes(root);\n configureMergeDriver(root);\n installPreCommitHook(root);\n\n info(`${c.cyan('vg share')} · the map is now committable + auto-updating`);\n info(` ${c.green('✔')} .vibgrate/.gitignore (cache + volatile artifacts ignored, graph.json committed)`);\n info(` ${c.green('✔')} pre-commit hook (rebuilds + stages graph.json only when it changed)`);\n info(` ${c.green('✔')} deterministic merge driver for .vibgrate/graph.json (rebuild on conflict)`);\n info(c.dim(' commit .vibgrate/graph.json so teammates inherit the map on pull'));\n });\n applyGlobalOptions(cmd);\n}\n\nfunction writeVibgrateGitignore(root: string, reports: boolean): void {\n const dir = path.join(root, '.vibgrate');\n fs.mkdirSync(dir, { recursive: true });\n const lines = ['# Managed by `vg share` — keep graph.json committed, ignore the rest', 'cache/', 'facts.jsonl'];\n if (!reports) lines.push('graph.html', 'GRAPH_REPORT.md');\n fs.writeFileSync(path.join(dir, '.gitignore'), `${lines.join('\\n')}\\n`);\n}\n\nfunction writeGitAttributes(root: string): void {\n const file = path.join(root, '.gitattributes');\n const line = '.vibgrate/graph.json merge=vg';\n let content = fs.existsSync(file) ? fs.readFileSync(file, 'utf8') : '';\n if (!content.split('\\n').some((l) => l.trim() === line)) {\n content = content.length ? `${content.replace(/\\s*$/, '')}\\n${line}\\n` : `${line}\\n`;\n fs.writeFileSync(file, content);\n }\n}\n\nfunction configureMergeDriver(root: string): void {\n // The graph is a pure function of code, so the correct merge is a rebuild.\n git(root, ['config', 'merge.vg.name', 'vg deterministic graph rebuild']);\n git(root, ['config', 'merge.vg.driver', 'vg build >/dev/null 2>&1; cp .vibgrate/graph.json %A']);\n}\n\nfunction installPreCommitHook(root: string): void {\n const hooksDir = hookDir(root);\n fs.mkdirSync(hooksDir, { recursive: true });\n const file = path.join(hooksDir, 'pre-commit');\n const block = [\n HOOK_BEGIN,\n 'if command -v vg >/dev/null 2>&1; then',\n ' vg build >/dev/null 2>&1 || true',\n ' git add .vibgrate/graph.json >/dev/null 2>&1 || true',\n 'fi',\n HOOK_END,\n ].join('\\n');\n\n let content = fs.existsSync(file) ? fs.readFileSync(file, 'utf8') : '#!/bin/sh\\n';\n const re = new RegExp(`${escapeRe(HOOK_BEGIN)}[\\\\s\\\\S]*?${escapeRe(HOOK_END)}`);\n if (re.test(content)) content = content.replace(re, block);\n else content = `${content.replace(/\\s*$/, '')}\\n\\n${block}\\n`;\n if (!content.startsWith('#!')) content = `#!/bin/sh\\n${content}`;\n fs.writeFileSync(file, content);\n fs.chmodSync(file, 0o755);\n}\n\nfunction undo(root: string): void {\n // Remove hook block.\n const hookFile = path.join(hookDir(root), 'pre-commit');\n if (fs.existsSync(hookFile)) {\n const re = new RegExp(`\\\\n*${escapeRe(HOOK_BEGIN)}[\\\\s\\\\S]*?${escapeRe(HOOK_END)}\\\\n*`);\n const next = fs.readFileSync(hookFile, 'utf8').replace(re, '\\n');\n if (next.trim() === '#!/bin/sh') fs.rmSync(hookFile);\n else fs.writeFileSync(hookFile, next);\n }\n // Remove .gitattributes line.\n const attr = path.join(root, '.gitattributes');\n if (fs.existsSync(attr)) {\n const next = fs\n .readFileSync(attr, 'utf8')\n .split('\\n')\n .filter((l) => l.trim() !== '.vibgrate/graph.json merge=vg')\n .join('\\n');\n fs.writeFileSync(attr, next);\n }\n // Drop git config (ignore errors if absent).\n try {\n git(root, ['config', '--remove-section', 'merge.vg']);\n } catch {\n /* section may not exist */\n }\n}\n\nfunction hookDir(root: string): string {\n // Respect a configured hooks path (e.g. husky) when set.\n try {\n const configured = git(root, ['config', '--get', 'core.hooksPath']).trim();\n if (configured) return path.resolve(root, configured);\n } catch {\n /* not set */\n }\n return path.join(root, '.git', 'hooks');\n}\n\nfunction git(root: string, args: string[]): string {\n return execFileSync('git', args, { cwd: root, encoding: 'utf8' });\n}\n\nfunction escapeRe(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import * as fs from 'node:fs';\nimport { Command } from 'commander';\nimport { buildGraph } from '../engine/build.js';\nimport { serializeGraph } from '../engine/serialize.js';\nimport { queryGraph } from '../engine/query.js';\nimport { discover } from '../engine/discover.js';\nimport { resolveLimits, type ResourceLimits } from '../engine/limits.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { rootOf } from './util.js';\nimport { c, info, json } from '../util/output.js';\nimport type { VgGraph } from '../schema.js';\n\n/**\n * `vg benchmark` (VG-ENGINE-TEARDOWN §6) — reproducible, cache-aware,\n * honest-estimate benchmark on the current repo:\n * - cold vs incremental build time, plus throughput (files/s, MB/s);\n * - memory: peak RSS/heap sampled across the cold build, heap retained by\n * the loaded graph, serialized artifact size (all labelled approximate —\n * GC timing and OS accounting make them indicative, not exact);\n * - determinism (two pinned builds must be byte-identical);\n * - token reduction: vg's context block vs a grep/read baseline, per question;\n * - the effective resource limits (VG_MAX_FILE_BYTES etc.) the run built under.\n *\n * Token figures are clearly-labelled estimates (~4 chars/token), scaling with\n * repo size — never a hero number.\n */\nconst PIN = '2020-01-01T00:00:00.000Z';\n\nexport interface BenchmarkResult {\n repo: { files: number; nodes: number; edges: number };\n build: { coldMs: number; incrementalMs: number; reusedOnWarm: number };\n throughput: { corpusBytes: number; filesPerSec: number; mbPerSec: number };\n memory: {\n baselineRssMb: number;\n peakRssMb: number;\n peakHeapMb: number;\n retainedHeapMb: number;\n graphJsonBytes: number;\n bytesPerNode: number;\n note: string;\n };\n limits: ResourceLimits;\n determinism: { byteIdentical: boolean };\n tokenReduction: {\n questions: { question: string; vgTokens: number; baselineTokens: number; ratio: number }[];\n aggregateRatio: number;\n note: string;\n };\n}\n\nexport function registerBenchmark(program: Command): void {\n const cmd = program\n .command('benchmark')\n .description('reproducible build + memory + token-reduction benchmark (honest estimates)')\n .option('--budget <n>', 'token budget for vg answers', '2000')\n .action(async function (this: Command, opts: { budget?: string }) {\n const global = readGlobal(this);\n const root = rootOf(global);\n const budget = Number(opts.budget) || 2000;\n const result = await runBenchmarkSuite(root, budget);\n\n if (global.json) {\n json(result);\n return;\n }\n\n const { repo, build, throughput, memory, determinism, tokenReduction } = result;\n info(`${c.cyan('vg benchmark')} · ${repo.files} files · ${repo.nodes} nodes`);\n info(` build cold ${build.coldMs.toFixed(0)}ms · incremental ${build.incrementalMs.toFixed(0)}ms (reused ${build.reusedOnWarm})`);\n info(` speed ${throughput.filesPerSec.toFixed(0)} files/s · ${throughput.mbPerSec.toFixed(1)} MB/s (cold, ${mb(throughput.corpusBytes).toFixed(1)} MB corpus)`);\n info(\n ` memory peak rss ${memory.peakRssMb.toFixed(0)} MB (baseline ${memory.baselineRssMb.toFixed(0)} MB) · ` +\n `peak heap ${memory.peakHeapMb.toFixed(0)} MB · graph retains ~${memory.retainedHeapMb.toFixed(0)} MB ${c.dim('(approximate)')}`,\n );\n info(` graph ${mb(memory.graphJsonBytes).toFixed(1)} MB serialized · ${memory.bytesPerNode.toFixed(0)} B/node`);\n info(` determinism ${determinism.byteIdentical ? c.green('byte-identical ✓') : c.red('NON-DETERMINISTIC ✗')}`);\n if (tokenReduction.questions.length) {\n info(` token reduction vs grep/read baseline (${c.dim('estimates')}):`);\n for (const q of tokenReduction.questions) {\n info(` ${pad(`${q.ratio.toFixed(1)}×`, 6)} ${c.dim(`vg ${q.vgTokens} vs ~${q.baselineTokens}`)} \"${q.question}\"`);\n }\n info(` ${c.bold(`aggregate ≈ ${tokenReduction.aggregateRatio.toFixed(1)}× fewer tokens`)} ${c.dim('(honest estimate, scales with repo size)')}`);\n }\n });\n applyGlobalOptions(cmd);\n}\n\n/**\n * The benchmark body, exported for tests. Timings and memory figures are\n * environment-dependent by nature (the graph artifact stays deterministic; the\n * measurements of producing it are not).\n */\nexport async function runBenchmarkSuite(root: string, budget: number): Promise<BenchmarkResult> {\n // 1. cold build (no cache), with peak-memory sampling across it.\n const baseline = process.memoryUsage();\n const sampler = startMemorySampler();\n const t0 = now();\n const cold = await buildGraph({ root, generatedAt: PIN, noCache: true });\n const coldMs = now() - t0;\n\n // 2. incremental build (warm cache)\n const t1 = now();\n const warm = await buildGraph({ root, generatedAt: PIN });\n const warmMs = now() - t1;\n\n // 3. determinism: two pinned builds byte-identical\n const a = serializeGraph(cold.graph);\n const b = serializeGraph((await buildGraph({ root, generatedAt: PIN, noCache: true })).graph);\n const peak = sampler.stop();\n const deterministic = a === b;\n\n const after = process.memoryUsage();\n const corpusBytes = cold.fileStats.reduce((s, f) => s + f.size, 0);\n const graphJsonBytes = Buffer.byteLength(a, 'utf8');\n const nodes = cold.graph.meta.counts.nodes;\n\n // 4. token reduction vs a grep/read baseline\n const questions = deriveQuestions(cold.graph);\n const fileSizes = fileSizeIndex(root);\n const perQuestion = questions.map((q) => {\n const vgTokens = queryGraph(cold.graph, q, { budget }).tokensEstimate;\n const baseTokens = grepBaselineTokens(q, fileSizes);\n return { question: q, vgTokens, baselineTokens: baseTokens, ratio: baseTokens > 0 ? round(baseTokens / Math.max(vgTokens, 1)) : 1 };\n });\n const totalVg = perQuestion.reduce((s, x) => s + x.vgTokens, 0);\n const totalBase = perQuestion.reduce((s, x) => s + x.baselineTokens, 0);\n const aggregateRatio = totalVg > 0 ? round(totalBase / totalVg) : 0;\n\n return {\n repo: { files: cold.totalFiles, nodes, edges: cold.graph.meta.counts.edges },\n build: { coldMs: round(coldMs), incrementalMs: round(warmMs), reusedOnWarm: warm.reused },\n throughput: {\n corpusBytes,\n filesPerSec: coldMs > 0 ? round((cold.totalFiles / coldMs) * 1000) : 0,\n // 6-decimal precision: a small corpus at 3 decimals would round to 0.\n mbPerSec: coldMs > 0 ? round6((mb(corpusBytes) / coldMs) * 1000) : 0,\n },\n memory: {\n baselineRssMb: round(mb(baseline.rss)),\n peakRssMb: round(mb(Math.max(peak.rss, baseline.rss))),\n peakHeapMb: round(mb(Math.max(peak.heapUsed, baseline.heapUsed))),\n // Heap growth across the run ≈ what the loaded graphs + caches retain.\n retainedHeapMb: round(Math.max(0, mb(after.heapUsed - baseline.heapUsed))),\n graphJsonBytes,\n bytesPerNode: nodes > 0 ? round(graphJsonBytes / nodes) : 0,\n note: 'sampled at 25ms + phase boundaries; GC timing makes these approximate',\n },\n limits: resolveLimits(),\n determinism: { byteIdentical: deterministic },\n tokenReduction: { questions: perQuestion, aggregateRatio, note: 'estimates (~4 chars/token); scales with repo size' },\n };\n}\n\n/**\n * Track peak RSS / heapUsed while the build runs: a 25ms sampling interval\n * (unref'd so it never holds the process open) catches the high-water mark\n * between phase boundaries; `stop()` takes one final sample so short runs\n * that finish inside one interval still register.\n */\nfunction startMemorySampler(): { stop: () => { rss: number; heapUsed: number } } {\n let rss = 0;\n let heapUsed = 0;\n const sample = (): void => {\n const m = process.memoryUsage();\n if (m.rss > rss) rss = m.rss;\n if (m.heapUsed > heapUsed) heapUsed = m.heapUsed;\n };\n const timer = setInterval(sample, 25);\n timer.unref?.();\n return {\n stop: () => {\n clearInterval(timer);\n sample();\n return { rss, heapUsed };\n },\n };\n}\n\nfunction deriveQuestions(graph: VgGraph): string[] {\n // Deterministic, repo-derived question set: the top hub names. Reproducible\n // and meaningful without hardcoding anything repo-specific.\n return graph.nodes\n .filter((n) => n.kind !== 'file' && n.kind !== 'external')\n .sort((a, b) => b.importance - a.importance || a.qualifiedName.localeCompare(b.qualifiedName))\n .slice(0, 5)\n .map((n) => n.name);\n}\n\nfunction fileSizeIndex(root: string): { rel: string; abs: string; size: number }[] {\n return discover({ root }).map((f) => ({ rel: f.rel, abs: f.abs, size: safeSize(f.abs) }));\n}\n\nfunction grepBaselineTokens(term: string, files: { abs: string; size: number }[]): number {\n // Baseline = an agent greps for the term and reads every matching file.\n const lower = term.toLowerCase();\n let bytes = 0;\n for (const f of files) {\n if (f.size > 512 * 1024) continue; // skip huge files in the baseline\n let content = '';\n try {\n content = fs.readFileSync(f.abs, 'utf8');\n } catch {\n continue;\n }\n if (content.toLowerCase().includes(lower)) bytes += content.length;\n }\n return Math.ceil(bytes / 4);\n}\n\nfunction safeSize(abs: string): number {\n try {\n return fs.statSync(abs).size;\n } catch {\n return 0;\n }\n}\n\nfunction mb(bytes: number): number {\n return bytes / (1024 * 1024);\n}\nfunction now(): number {\n return Number(process.hrtime.bigint() / 1000n) / 1000;\n}\nfunction round(x: number): number {\n return Math.round(x * 1000) / 1000;\n}\nfunction round6(x: number): number {\n return Math.round(x * 1_000_000) / 1_000_000;\n}\nfunction pad(s: string, n: number): string {\n return s.padStart(n, ' ');\n}\n","import { execSync } from 'node:child_process';\nimport { Command } from 'commander';\nimport { resolveOne } from '../engine/lookup.js';\nimport { coveringTests, detectRunner } from '../engine/test-query.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { requireGraph, rootOf } from './util.js';\nimport { ambiguityError } from './ambiguity.js';\nimport { c, info, json } from '../util/output.js';\n\n/**\n * `vg tests <name>` (VG-CLI-SPEC §3.4) — which tests cover it, with the linkage\n * basis and confidence. `--missing` flips to untested nodes nearby; `--run`\n * prints (or `--exec` runs) the minimal command to exercise exactly those tests.\n */\nexport function registerTests(program: Command): void {\n const cmd = program\n .command('tests')\n .description('which tests cover a node (call/coverage linkage)')\n .argument('<name>', 'node to inspect')\n .option('--missing', 'show untested nodes nearby instead')\n .option('--run', 'print the command to run exactly these tests')\n .option('--exec', 'run that command')\n .option('--pick <n>', 'pick the nth candidate when ambiguous')\n .action(function (this: Command, name: string, opts: { missing?: boolean; run?: boolean; exec?: boolean; pick?: string }) {\n const global = readGlobal(this);\n const { root, graph } = requireGraph(global);\n const { node, candidates } = resolveOne(graph, name, opts.pick ? Number(opts.pick) : undefined);\n if (!node) throw ambiguityError(`\"${name}\" ${candidates.length ? 'is ambiguous' : 'not found'}`, candidates);\n\n if (opts.missing) {\n const nearby = graph.nodes\n .filter((n) => n.file === node.file && (n.kind === 'function' || n.kind === 'method') && n.tested === false)\n .sort((a, b) => b.importance - a.importance);\n if (global.json) {\n json({ file: node.file, untested: nearby.map((n) => ({ name: n.qualifiedName, line: n.span.start })) });\n return;\n }\n info(`${c.cyan('vg tests --missing')} · untested in ${node.file} (${nearby.length})`);\n for (const n of nearby) info(` ${c.yellow('○')} ${n.qualifiedName} ${c.dim(`:${n.span.start}`)}`);\n return;\n }\n\n const covers = coveringTests(graph, node);\n const testFiles = covers.filter((c) => c.basis === 'call').map((c) => c.file);\n\n if (opts.run || opts.exec) {\n const runner = detectRunner(rootOf(global), node.lang);\n const command = runner.command(testFiles);\n if (opts.exec) {\n info(c.dim(`$ ${command}`));\n execSync(command, { cwd: root, stdio: 'inherit' });\n return;\n }\n if (global.json) json({ runner: runner.name, command, testFiles });\n else info(command);\n return;\n }\n\n if (global.json) {\n json({ node: node.qualifiedName, tested: node.tested, coverage: node.coverage ?? null, covers });\n return;\n }\n\n info(`${c.cyan('vg tests')} · ${c.bold(node.qualifiedName)} ${node.tested ? c.green('tested') : c.yellow('untested')}`);\n if (typeof node.coverage === 'number') info(c.dim(` line coverage ${(node.coverage * 100).toFixed(0)}%`));\n if (covers.length === 0) {\n info(c.dim(' no covering tests found'));\n return;\n }\n for (const t of covers) {\n info(` ${c.green('✔')} ${t.file} ${c.dim(`(${t.basis}, conf ${t.confidence.toFixed(2)})`)}`);\n }\n });\n applyGlobalOptions(cmd);\n}\n","import { Command } from 'commander';\nimport { resolveOne } from '../engine/lookup.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { requireGraph } from './util.js';\nimport { ambiguityError } from './ambiguity.js';\nimport { c, info, json } from '../util/output.js';\n\n/**\n * `vg facts <name>` (VG-CLI-SPEC §5) — the deterministic open facts for a node,\n * epistemic-typed (declared/static → Observed/Derived; never learned/Hypothesized).\n * Facts are derived with `--deep`.\n */\nexport function registerFacts(program: Command): void {\n const cmd = program\n .command('facts')\n .description('the deterministic facts for a node (contract / invariant / characterization)')\n .argument('<name>', 'node to inspect')\n .option('--pick <n>', 'pick the nth candidate when ambiguous')\n .action(function (this: Command, name: string, opts: { pick?: string }) {\n const global = readGlobal(this);\n const { graph } = requireGraph(global);\n const { node, candidates } = resolveOne(graph, name, opts.pick ? Number(opts.pick) : undefined);\n if (!node) throw ambiguityError(`\"${name}\" ${candidates.length ? 'is ambiguous' : 'not found'}`, candidates);\n\n if (!graph.facts) {\n if (global.json) json({ node: node.qualifiedName, facts: [], note: 'facts require a --deep build' });\n else info(`${c.cyan('vg facts')} · run ${c.bold('vg --deep')} to derive facts (none in this map)`);\n return;\n }\n\n const facts = graph.facts.filter((f) => f.subjectIds.includes(node.id));\n if (global.json) {\n json({ node: node.qualifiedName, facts });\n return;\n }\n info(`${c.cyan('vg facts')} · ${c.bold(node.qualifiedName)} (${facts.length})`);\n if (facts.length === 0) {\n info(c.dim(' no facts derived for this node'));\n return;\n }\n for (const f of facts) {\n info(` ${c.bold(f.kind)} ${c.dim(`[${f.derivedBy}→${f.confidence}]`)}: ${summarize(f.predicate)}`);\n }\n });\n applyGlobalOptions(cmd);\n}\n\nfunction summarize(predicate: unknown): string {\n if (predicate && typeof predicate === 'object') {\n const o = predicate as Record<string, unknown>;\n if (typeof o.signature === 'string') return o.signature;\n if (typeof o.guard === 'string') return `guards: ${o.guard}`;\n if (Array.isArray(o.pinnedBy)) return `pinned by ${(o.pinnedBy as string[]).join(', ')}`;\n }\n return JSON.stringify(predicate);\n}\n","import { Command } from 'commander';\nimport { resolveOne } from '../engine/lookup.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { requireGraph } from './util.js';\nimport { ambiguityError } from './ambiguity.js';\nimport { FREE_PACK } from '../grounding/pack.js';\nimport { c, info, json } from '../util/output.js';\n\n/**\n * `vg guide <name>` (VG-CLI-SPEC §5) — cited relevant standards/practices for a\n * node from the free knowledge pack (own content + OWASP/CWE/NIST). Honest about\n * recommended vs conjectured, with citations.\n */\nexport function registerGuide(program: Command): void {\n const cmd = program\n .command('guide')\n .description('cited relevant standards/practices for a node (free pack)')\n .argument('<name>', 'node to inspect')\n .option('--pick <n>', 'pick the nth candidate when ambiguous')\n .action(function (this: Command, name: string, opts: { pick?: string }) {\n const global = readGlobal(this);\n const { graph } = requireGraph(global);\n const { node, candidates } = resolveOne(graph, name, opts.pick ? Number(opts.pick) : undefined);\n if (!node) throw ambiguityError(`\"${name}\" ${candidates.length ? 'is ambiguous' : 'not found'}`, candidates);\n\n const entries = new Map(FREE_PACK.entries.map((e) => [e.id, e]));\n const grounding = (graph.grounding ?? []).filter((g) => g.src === node.id);\n\n if (global.json) {\n json({\n node: node.qualifiedName,\n guidance: grounding.map((g) => ({\n kind: g.kind,\n rationale: g.rationale,\n confidence: g.confidence,\n topic: entries.get(g.packEntryId)?.topic ?? g.packEntryId,\n summary: entries.get(g.packEntryId)?.summary ?? '',\n citation: g.citation,\n })),\n });\n return;\n }\n\n info(`${c.cyan('vg guide')} · ${c.bold(node.qualifiedName)} (${grounding.length})`);\n if (grounding.length === 0) {\n info(c.dim(' no matching guidance (no security-relevant signals detected)'));\n return;\n }\n for (const g of grounding) {\n const entry = entries.get(g.packEntryId);\n const tag = g.rationale === 'recommended' ? c.green(g.kind) : c.yellow(g.kind);\n info(` ${tag} ${c.dim(`(${g.rationale}, conf ${g.confidence.toFixed(2)})`)}`);\n if (entry) {\n info(` ${entry.summary}`);\n info(c.dim(` ${entry.citation.title} — ${entry.citation.url}`));\n }\n }\n });\n applyGlobalOptions(cmd);\n}\n","import { Command } from 'commander';\nimport { buildVersionTimelines, findPackageAnyEcosystem, gitHistoryAvailable } from '../core-open/index.js';\nimport { readScanArtifact } from '../mcp/vuln-data.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { rootOf } from './util.js';\nimport { CliError, ExitCode } from '../util/exit.js';\nimport { c, info, json } from '../util/output.js';\n\n/**\n * `vg why <package>` — who introduced a dependency, and any open vulnerabilities\n * it carries, from git history. Thin blame/why surface over the Phase-0 version\n * timeline plus the last scan's attributed vulnerability data. Offline + local.\n */\nexport function registerWhy(program: Command): void {\n const cmd = program\n .command('why')\n .description('who introduced a dependency (and any open vulnerabilities), from git history')\n .argument('<package>', 'package name to explain')\n .action(async function (this: Command, pkg: string) {\n const global = readGlobal(this);\n const root = rootOf(global);\n\n if (!(await gitHistoryAvailable(root))) {\n throw new CliError(\n 'git history is required for `vg why` (not a git repository, or git is unavailable)',\n ExitCode.USAGE_ERROR,\n );\n }\n\n const timelines = await buildVersionTimelines(root);\n const pt = timelines ? findPackageAnyEcosystem(timelines, pkg) ?? null : null;\n\n // Open vulnerabilities for this package, from the last `vg scan --vulns`.\n const artifact = readScanArtifact(root);\n const vulnPkg = artifact?.extended?.vulnerabilities?.packages.find((p) => p.package === pkg) ?? null;\n\n if (global.json) {\n json({ package: pkg, history: pt?.changes ?? [], vulnerabilities: vulnPkg?.advisories ?? [] });\n return;\n }\n\n info(`${c.cyan('vg why')} ${c.bold(pkg)}`);\n if (!pt || pt.changes.length === 0) {\n info(c.dim(' no git history found for this package (npm lockfile). It may not be an npm dependency,'));\n info(c.dim(' or the lockfile predates its introduction.'));\n } else {\n for (let i = 0; i < pt.changes.length; i++) {\n const ch = pt.changes[i];\n const verb = i === 0 ? c.green('added') : c.yellow('→');\n const date = ch.commit.date.slice(0, 10);\n info(\n ` ${verb} ${c.bold(ch.version)} ${c.dim(`${ch.commit.shortSha} ${date} ${ch.commit.authorName}`)}`,\n );\n info(c.dim(` ${ch.commit.subject}`));\n }\n }\n\n if (vulnPkg && vulnPkg.advisories.length) {\n info('');\n info(c.red(` ${vulnPkg.advisories.length} open vulnerabilit${vulnPkg.advisories.length === 1 ? 'y' : 'ies'} at ${pkg}@${vulnPkg.version}:`));\n for (const adv of vulnPkg.advisories) {\n const cve = adv.aliases.find((a) => a.startsWith('CVE-'));\n const idLabel = cve && cve !== adv.id ? `${adv.id} (${cve})` : adv.id;\n const cvss = adv.cvss != null ? ` cvss ${adv.cvss}` : '';\n const fixed = adv.fixedVersions.length ? ` — fixed in ${adv.fixedVersions.join(', ')}` : ' — no fix available';\n info(` ${severityTag(adv.severity)} ${idLabel}${c.dim(cvss)}${c.dim(fixed)}`);\n if (adv.introduced) {\n const exposure = adv.exposureDays != null ? `, ${adv.exposureDays}d exposed` : '';\n info(\n c.dim(\n ` introduced by ${adv.introduced.authorName} in ${adv.introduced.shortSha} on ${adv.introduced.date.slice(0, 10)}${exposure}`,\n ),\n );\n }\n }\n } else if (artifact?.extended?.vulnerabilities) {\n info('');\n info(c.green(' no known vulnerabilities for this package in the last scan'));\n } else {\n info('');\n info(c.dim(' run `vg scan --vulns` to check this package for known vulnerabilities'));\n }\n });\n applyGlobalOptions(cmd);\n}\n\nfunction severityTag(severity: string): string {\n switch (severity) {\n case 'critical':\n return c.red('critical');\n case 'high':\n return c.red('high');\n case 'moderate':\n return c.yellow('moderate');\n case 'low':\n return c.dim('low');\n default:\n return c.dim(severity);\n }\n}\n","import { Command } from 'commander';\nimport {\n buildVersionTimelines,\n findPackageAnyEcosystem,\n findVersionCrossings,\n gitHistoryAvailable,\n normalizeConstraint,\n versionSatisfies,\n type VersionCrossing,\n} from '../core-open/index.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { rootOf } from './util.js';\nimport { CliError, ExitCode } from '../util/exit.js';\nimport { c, info, json } from '../util/output.js';\n\n/**\n * `vg bisect <package> <constraint>` — pinpoint the commit where a dependency\n * crossed a version line, from git history. Where `vg why` narrates every version\n * transition, `bisect` answers a targeted question: \"when did we cross *this*\n * line\" — e.g. when a vulnerable dependency was finally patched past the fixed\n * version, or when a major was adopted. A thin surface over the same offline,\n * no-checkout version timeline that attribution uses. Offline + local.\n *\n * `--assert` turns it into a CI gate: exit non-zero when the current resolved\n * version does NOT satisfy the constraint (the fix has not been adopted yet).\n */\nexport function registerBisect(program: Command): void {\n const cmd = program\n .command('bisect')\n .description('pinpoint the commit where a dependency crossed a version line, from git history')\n .argument('<package>', 'package name to bisect')\n .argument('<constraint>', 'target version or semver range (a bare version means \">=\" that version)')\n .option('--assert', 'exit non-zero when the current version does not satisfy the constraint (CI gate)')\n .action(async function (this: Command, pkg: string, constraintArg: string) {\n const global = readGlobal(this);\n const opts = this.opts<{ assert?: boolean }>();\n const root = rootOf(global);\n\n if (!(await gitHistoryAvailable(root))) {\n throw new CliError(\n 'git history is required for `vg bisect` (not a git repository, or git is unavailable)',\n ExitCode.USAGE_ERROR,\n );\n }\n\n const range = normalizeConstraint(constraintArg);\n if (!range) {\n throw new CliError(\n `not a valid version or semver range: ${constraintArg}`,\n ExitCode.USAGE_ERROR,\n );\n }\n\n const timelines = await buildVersionTimelines(root);\n const pt = timelines ? findPackageAnyEcosystem(timelines, pkg) ?? null : null;\n\n // No history for this package (not an npm/pip/... dependency, or the\n // lockfile predates it) — distinct from \"found, but never crossed\".\n if (!pt || pt.changes.length === 0) {\n if (global.json) {\n json({ package: pkg, constraint: range, found: false, satisfiedNow: false, crossings: [] });\n return;\n }\n info(`${c.cyan('vg bisect')} ${c.bold(pkg)} ${c.dim(range)}`);\n info(c.dim(' no git history found for this package (lockfile). It may not be a resolved'));\n info(c.dim(' dependency in a supported ecosystem, or the lockfile predates its introduction.'));\n throw new CliError(`no version history for ${pkg}`, ExitCode.NOT_FOUND);\n }\n\n const crossings = findVersionCrossings(pt, range);\n const current = pt.changes[pt.changes.length - 1];\n const satisfiedNow = versionSatisfies(current.version, range);\n const firstEntered = crossings.find((cr) => cr.kind === 'entered') ?? null;\n\n if (global.json) {\n json({\n package: pt.name,\n ecosystem: pt.ecosystem,\n constraint: range,\n currentVersion: current.version,\n satisfiedNow,\n firstEntered,\n crossings,\n });\n } else {\n info(`${c.cyan('vg bisect')} ${c.bold(pt.name)} ${c.dim(range)}`);\n const verdict = satisfiedNow\n ? c.green(`current ${current.version} satisfies ${range}`)\n : c.yellow(`current ${current.version} does not satisfy ${range}`);\n info(` ${verdict}`);\n info('');\n\n if (!firstEntered) {\n info(c.dim(` never crossed ${range} in git history`));\n info(\n c.dim(\n ` latest in history: ${current.version} ${c.dim(`(${current.commit.shortSha} ${current.commit.date.slice(0, 10)})`)}`,\n ),\n );\n } else {\n info(` ${c.bold('first reached')} ${range}:`);\n printCrossing(firstEntered, true);\n // Surface later flips (a downgrade that left the line, a re-bump) so a\n // regression after the fix isn't silently hidden behind the first hit.\n const rest = crossings.slice(crossings.indexOf(firstEntered) + 1);\n if (rest.length) {\n info('');\n info(c.dim(` ${rest.length} later crossing${rest.length === 1 ? '' : 's'}:`));\n for (const cr of rest) printCrossing(cr, false);\n }\n }\n }\n\n if (opts.assert && !satisfiedNow) {\n throw new CliError(\n `${pt.name}@${current.version} does not satisfy ${range}`,\n ExitCode.GATE_FAILED,\n );\n }\n });\n applyGlobalOptions(cmd);\n}\n\nfunction printCrossing(cr: VersionCrossing, primary: boolean): void {\n const arrow = cr.kind === 'entered' ? c.green('→') : c.yellow('↓');\n const date = cr.commit.date.slice(0, 10);\n const from = cr.previousVersion ? c.dim(` from ${cr.previousVersion}`) : c.dim(' (added)');\n const ver = primary ? c.bold(cr.version) : cr.version;\n info(` ${arrow} ${ver}${from} ${c.dim(`${cr.commit.shortSha} ${date} ${cr.commit.authorName}`)}`);\n info(c.dim(` ${cr.commit.subject}`));\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport type { DepRecord } from './drift.js';\n\n/**\n * Enterprise standards gate (VG-LIB-SUPERSET-PLAN §8/§9 S5 / D9) — the LOCAL, committable half\n * of enterprise sovereignty that complements the hosted `enterprise_strict` rerank (S5.1).\n *\n * A team commits a `.vibgrate/standards.json` policy of BANNED packages, each pointing at the\n * APPROVED alternative + a reason. `vg drift --fail-on standards` checks the project's resolved\n * inventory against it and exits non-zero with remediation on any planted violation — so the\n * banned-→-approved rule is enforced in CI, offline, no key, no platform call.\n *\n * Pure + offline: a tolerant loader (sync fs) + a deterministic checker over the drift inventory.\n */\n\nexport interface StandardRule {\n /** Optional ecosystem scope (npm|pypi|…). When set, only that ecosystem matches. */\n ecosystem?: string;\n /** Banned package name (exact, case-insensitive). */\n name: string;\n /** The approved alternative — the remediation surfaced to the developer. */\n use?: string;\n /** Why it's banned. */\n reason?: string;\n}\n\nexport interface StandardsPolicy {\n banned: StandardRule[];\n}\n\nexport interface StandardViolation {\n ecosystem: string;\n name: string;\n installed: string | null;\n use: string | null;\n reason: string | null;\n}\n\n/** Where a committed policy lives, in precedence order. */\nexport const STANDARDS_FILES = ['.vibgrate/standards.json', 'vibgrate.standards.json'];\n\nfunction asString(v: unknown): string | undefined {\n return typeof v === 'string' && v.trim() ? v.trim() : undefined;\n}\n\n/** Tolerant parse: accepts `{ banned: [...] }` or a bare array; drops malformed rules (need a name). */\nexport function normalizeStandards(raw: unknown): StandardsPolicy {\n const list = Array.isArray(raw) ? raw : Array.isArray((raw as { banned?: unknown })?.banned) ? (raw as { banned: unknown[] }).banned : [];\n const seen = new Set<string>();\n const banned: StandardRule[] = [];\n for (const item of list) {\n if (!item || typeof item !== 'object') continue;\n const r = item as Record<string, unknown>;\n const name = asString(r.name);\n if (!name) continue;\n const ecosystem = asString(r.ecosystem)?.toLowerCase();\n const key = `${ecosystem ?? '*'}\\0${name.toLowerCase()}`;\n if (seen.has(key)) continue;\n seen.add(key);\n banned.push({ name, ...(ecosystem ? { ecosystem } : {}), ...(asString(r.use) ? { use: asString(r.use) } : {}), ...(asString(r.reason) ? { reason: asString(r.reason) } : {}) });\n }\n return { banned };\n}\n\n/** Find + load the nearest committed standards policy from `root`. Returns null if none/invalid. */\nexport function loadStandards(root: string): { policy: StandardsPolicy | null; path: string | null } {\n for (const rel of STANDARDS_FILES) {\n const p = path.join(root, rel);\n let text: string;\n try {\n text = fs.readFileSync(p, 'utf8');\n } catch {\n continue;\n }\n try {\n return { policy: normalizeStandards(JSON.parse(text)), path: p };\n } catch {\n // present but malformed JSON — surface it as a usage problem at the call site\n return { policy: null, path: p };\n }\n }\n return { policy: null, path: null };\n}\n\n/** Deterministic check of the inventory against the policy. One violation per matched dependency. */\nexport function checkStandards(policy: StandardsPolicy, records: DepRecord[]): StandardViolation[] {\n const out: StandardViolation[] = [];\n for (const r of records) {\n const rule = policy.banned.find((b) => b.name.toLowerCase() === r.name.toLowerCase() && (!b.ecosystem || b.ecosystem === r.ecosystem));\n if (rule) out.push({ ecosystem: r.ecosystem, name: r.name, installed: r.installed ?? null, use: rule.use ?? null, reason: rule.reason ?? null });\n }\n return out.sort((a, b) => a.ecosystem.localeCompare(b.ecosystem) || a.name.localeCompare(b.name));\n}\n","import { Command } from 'commander';\nimport { inventory, enrichOnline, ECOSYSTEMS } from '../engine/drift.js';\nimport { loadStandards, checkStandards, STANDARDS_FILES, type StandardViolation } from '../engine/standards.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { rootOf } from './util.js';\nimport { CliError, ExitCode } from '../util/exit.js';\nimport { c, info, json } from '../util/output.js';\n\n/**\n * `vg drift` (VG-CLI-SPEC §5) — dependency currency. Offline by default\n * (inventory + installed versions); `--online` opt-in queries the npm registry\n * for latest versions. Full CVE/EOL governance is the Vibgrate platform.\n */\nexport function registerDrift(program: Command): void {\n const cmd = program\n .command('drift')\n .description('what is outdated across dependencies (offline; --online for currency)')\n .option('--online', 'query the npm registry for latest versions (opt-in network)')\n .option('--fail-on <level>', 'exit 2 on violations — major|minor (version drift) or standards (enterprise policy)')\n .action(async function (this: Command, opts: { online?: boolean; failOn?: string }) {\n const global = readGlobal(this);\n const root = rootOf(global);\n if (opts.online && global.local) {\n throw new CliError('--online conflicts with --local (no network in local mode)', ExitCode.USAGE_ERROR);\n }\n if (opts.failOn && !['major', 'minor', 'standards'].includes(opts.failOn)) {\n throw new CliError(`--fail-on must be one of: major, minor, standards (got \"${opts.failOn}\")`, ExitCode.USAGE_ERROR);\n }\n const inv = inventory(root);\n if (opts.online && !global.local) await enrichOnline(inv.records);\n\n // Enterprise standards gate (D9/S5.2): check the inventory against the committed policy.\n let standards: { policyPath: string | null; defined: boolean; violations: StandardViolation[] } | null = null;\n if (opts.failOn === 'standards') {\n const loaded = loadStandards(root);\n if (loaded.path && !loaded.policy) {\n throw new CliError(`standards policy at ${loaded.path} is not valid JSON`, ExitCode.USAGE_ERROR);\n }\n standards = { policyPath: loaded.path, defined: !!loaded.policy, violations: loaded.policy ? checkStandards(loaded.policy, inv.records) : [] };\n }\n\n if (global.json) {\n json(standards ? { ...inv, standards } : inv);\n } else {\n const breakdown = ECOSYSTEMS.filter((e) => inv.counts[e] > 0).map((e) => `${e} ${inv.counts[e]}`).join(' · ');\n info(`${c.cyan('vg drift')} · ${inv.counts.total} dependencies${breakdown ? ` (${breakdown})` : ''}`);\n if (opts.online) {\n const drifted = inv.records.filter((r) => r.drift && r.drift !== 'current' && r.drift !== 'unknown');\n if (drifted.length === 0) info(c.green(' all checked dependencies are current'));\n for (const r of drifted.sort((a, b) => rank(b.drift) - rank(a.drift))) {\n const tag = r.drift === 'major' ? c.red('major') : r.drift === 'minor' ? c.yellow('minor') : c.dim('patch');\n info(` ${tag} ${r.name} ${c.dim(`${r.installed} → ${r.latest}`)}`);\n }\n } else {\n info(c.dim(' offline inventory — run with --online for currency vs the npm registry'));\n info(c.dim(' CVE/EOL/governance: the Vibgrate platform (vg push)'));\n }\n if (standards) printStandards(standards);\n }\n\n if (standards && standards.violations.length) {\n throw new CliError(`${standards.violations.length} banned dependency(ies) violate standards`, ExitCode.GATE_FAILED);\n }\n if (opts.failOn && opts.failOn !== 'standards') {\n const threshold = opts.failOn === 'minor' ? 2 : 3; // minor includes major\n const bad = inv.records.filter((r) => rank(r.drift) >= threshold);\n if (bad.length) {\n throw new CliError(`${bad.length} dependency(ies) drift at/above ${opts.failOn}`, ExitCode.GATE_FAILED);\n }\n }\n });\n applyGlobalOptions(cmd);\n}\n\nfunction rank(drift?: string): number {\n return drift === 'major' ? 3 : drift === 'minor' ? 2 : drift === 'patch' ? 1 : 0;\n}\n\nfunction printStandards(s: { defined: boolean; violations: StandardViolation[] }): void {\n if (!s.defined) {\n info(c.dim(` no standards policy (${STANDARDS_FILES.join(' or ')}) — nothing to enforce`));\n return;\n }\n if (s.violations.length === 0) {\n info(c.green(' standards: no banned dependencies in use'));\n return;\n }\n info(c.red(` standards: ${s.violations.length} banned dependency(ies)`));\n for (const v of s.violations) {\n const fix = v.use ? c.dim(` → use ${v.use}`) : '';\n const why = v.reason ? c.dim(` (${v.reason})`) : '';\n info(` ${c.red('banned')} ${v.ecosystem}:${v.name}${v.installed ? c.dim(` ${v.installed}`) : ''}${fix}${why}`);\n }\n}\n","import { Command } from 'commander';\nimport { discoverModels } from '../engine/models.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { c, info, json } from '../util/output.js';\n\n/**\n * `vg models` (VG-CLI-SPEC §5) — the local-model fleet discovered on disk\n * (Ollama / LM Studio / llama.cpp gguf). Offline, no network, no launch.\n */\nexport function registerModels(program: Command): void {\n const cmd = program\n .command('models')\n .description('the local model fleet (Ollama / LM Studio / gguf), discovered offline')\n .action(function (this: Command) {\n const global = readGlobal(this);\n const models = discoverModels();\n if (global.json) {\n json({ models });\n return;\n }\n info(`${c.cyan('vg models')} · ${models.length} local model(s) discovered`);\n if (models.length === 0) {\n info(c.dim(' none found (looked in ~/.ollama, ~/.lmstudio, ~/models, ~/.cache)'));\n return;\n }\n for (const m of models) info(` ${c.bold(m.runtime.padEnd(10))} ${m.name}`);\n });\n applyGlobalOptions(cmd);\n}\n","import { Command } from 'commander';\nimport { readSavings, readUsage, type UsageReport } from '../engine/savings.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { rootOf } from './util.js';\nimport { c, info, json } from '../util/output.js';\n\n/**\n * `vg savings` (VG-DEVELOPMENT-PLAN §5) — a local, privacy-safe, honestly\n * estimated report of context tokens / $ saved vs a grep/read baseline.\n * Nothing leaves the machine. Recording is opt-in via `vg serve --savings`.\n */\nexport function registerSavings(program: Command): void {\n const cmd = program\n .command('savings')\n .description('local, privacy-safe report of tokens/$ saved vs a grep baseline (estimates)')\n .option('--days <n>', 'window in days', '30')\n .action(function (this: Command) {\n const global = readGlobal(this);\n const days = Number(this.opts().days) || 30;\n const root = rootOf(global);\n const now = Date.now();\n const report = readSavings(root, days, now);\n const usage = readUsage(root, days, now);\n\n if (global.json) {\n json({ ...report, usage });\n return;\n }\n\n info(`${c.cyan('vg savings')} · last ${days} days ${c.dim('(local, nothing left your machine)')}`);\n if (usage.totals.calls === 0) {\n info(\n c.dim(\n report.enabled\n ? ' no calls recorded yet in this window'\n : ' recording is off. Enable it for MCP with `vg serve --savings`, and for CLI calls by passing `--client=<ai>` to vg.',\n ),\n );\n return;\n }\n\n // Token-savings summary — only the grep-baseline tools (query_graph / get_node).\n if (report.queries > 0) {\n info(` queries ${report.queries} · context tokens ${fmt(report.vgTokens)} (grep/read baseline ≈ ${fmt(report.baselineTokens)}) → ${report.ratio}× fewer`);\n info(` est. cost (${report.rateLabel}): $${report.estCostVg} vs $${report.estCostBaseline} → saved ≈ $${report.saved}`);\n info(c.dim(' estimates with stated assumptions (~4 chars/token; ~400 tokens/file baseline); scales with repo size.'));\n }\n\n // Per-command breakdown — every recorded tool, its outcomes, and success rate.\n printBreakdown(usage);\n // The command-vs-MCP split and which AI is calling.\n printSplit(usage);\n });\n applyGlobalOptions(cmd);\n}\n\nfunction fmt(n: number): string {\n if (n >= 1e6) return `${(n / 1e6).toFixed(2)}M`;\n if (n >= 1e3) return `${(n / 1e3).toFixed(1)}k`;\n return String(n);\n}\n\n/** Render the per-command usage table: calls, complete/partial/miss, success %. */\nfunction printBreakdown(usage: UsageReport): void {\n info('');\n info(c.bold(' by command') + c.dim(' (complete = full result · partial = capped/paginated · miss = no result)'));\n const nameW = Math.max(7, ...usage.commands.map((cmd) => cmd.tool.length));\n const header =\n ' ' +\n 'command'.padEnd(nameW) +\n ['calls', 'complete', 'partial', 'miss', 'success%'].map((h) => h.padStart(9)).join('');\n info(c.dim(header));\n for (const cmd of usage.commands) {\n info(\n ' ' +\n cmd.tool.padEnd(nameW) +\n String(cmd.calls).padStart(9) +\n String(cmd.complete).padStart(9) +\n String(cmd.partial).padStart(9) +\n String(cmd.miss).padStart(9) +\n `${cmd.successPct}%`.padStart(9),\n );\n }\n const t = usage.totals;\n info(c.dim(' ' + '─'.repeat(nameW + 45)));\n info(\n ' ' +\n c.bold('total'.padEnd(nameW)) +\n String(t.calls).padStart(9) +\n String(t.complete).padStart(9) +\n String(t.partial).padStart(9) +\n String(t.miss).padStart(9) +\n ''.padStart(9),\n );\n info(c.dim(` avg success across commands: ${usage.avgSuccessPct}%`));\n}\n\n/**\n * Render the command-vs-MCP split (how calls arrived) and which AI client made\n * them — the signals that show whether assistants use the MCP tools or shell out\n * to `vg`, and that feed the opt-in share-stats upload.\n */\nfunction printSplit(usage: UsageReport): void {\n const label = (key: string): string => (key === 'mcp' ? 'MCP tools' : key === 'cli' ? 'vg CLI' : key);\n if (usage.sources.length) {\n info('');\n info(c.bold(' by source') + c.dim(' (how the call arrived)'));\n for (const s of usage.sources) {\n const pct = usage.totals.calls ? Math.round((s.calls / usage.totals.calls) * 100) : 0;\n info(` ${label(s.key).padEnd(12)} ${String(s.calls).padStart(6)} calls ${c.dim(`(${pct}%)`)}`);\n }\n }\n if (usage.clients.length) {\n info('');\n info(c.bold(' by client') + c.dim(' (which AI is calling; pass --client to vg to attribute CLI calls)'));\n for (const cl of usage.clients) {\n info(` ${cl.key.padEnd(12)} ${String(cl.calls).padStart(6)} calls`);\n }\n }\n}\n","import { Command } from 'commander';\nimport {\n loadCatalog,\n resolveLib,\n addLibrary,\n readDoc,\n driftFor,\n resolveVersion,\n localPackageDocs,\n localApiSurface,\n libId,\n} from '../engine/lib.js';\nimport type { DriftNote } from '../engine/lib.js';\nimport { selectForBudget, symbolsFromApi } from '../engine/select.js';\nimport { assessDocQuality } from '../engine/quality.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { fetchHostedDocs, publishPrivateLibrary, type HostedDocsResult } from '../engine/hosted.js';\nimport { resolveDsn } from '../reporting/credentials.js';\nimport { parseDsn } from '../reporting/commands/push.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { rootOf } from './util.js';\nimport { CliError, ExitCode, usageError } from '../util/exit.js';\nimport { c, info, json, out } from '../util/output.js';\n\n/**\n * `vg lib` (VG-CLI-SPEC §5) — library currency: version-correct, drift-annotated\n * usage docs. Family:\n * vg lib list the catalog\n * vg lib <name> version-correct, drift-annotated docs for <name>\n * vg lib add <source> ingest docs (local path; --online for a URL/llms.txt/git repo)\n * vg lib resolve <name> name → catalog id + version\n * vg lib refresh re-ingest local sources\n */\nexport function registerLib(program: Command): void {\n const cmd = program\n .command('lib')\n .description('library currency: version-correct, drift-annotated usage docs')\n .argument('[args...]', 'a library name, or: add <source> | publish <name> | resolve <name> | refresh')\n .option('--name <name>', 'library name for `add`')\n .option('--version <v>', 'pin the doc version for `add`/`publish`')\n .option('--online', '(deprecated; network is on by default) allow network for add/refresh URL sources')\n .option('-b, --budget <n>', 'trim docs to ~N tokens')\n .option('--readme <path>', 'README path for `publish` (default ./README.md)')\n .option('--dts <path>', 'TypeScript declaration (.d.ts) path for `publish`')\n .option('--language <lang>', 'primary language for `publish`')\n .option('--region <region>', 'data-residency region for the hosted catalog (same as scans; default us)')\n .option('--ingest <url>', 'hosted catalog/ingest URL override (host extracted; wins over --region)')\n .action(async function (this: Command, args: string[], opts: { name?: string; version?: string; online?: boolean; budget?: string; readme?: string; dts?: string; language?: string; region?: string; ingest?: string }) {\n const global = readGlobal(this);\n const root = rootOf(global);\n const [verb, ...rest] = args;\n\n // Network is ON BY DEFAULT (local-first, hosted-on-miss). `--local` is the hard airgap:\n // no network ever. `--online` is kept only as a back-compat no-op for add/refresh sources.\n const network = !global.local;\n if (!verb) return listCatalog(root, global.json);\n // add/refresh still gate URL/git fetching behind --online (or network default) to avoid surprise fetches.\n const online = (Boolean(opts.online) || network) && !global.local;\n if (verb === 'add') return addCmd(root, rest, { ...opts, online }, global.json);\n if (verb === 'publish') return publishCmd(root, rest, opts, global, global.json);\n if (verb === 'resolve') return resolveCmd(root, rest, global.json);\n if (verb === 'refresh') return refreshCmd(root, { online }, global.json);\n // `vg lib <name>`: local-first; on a thin/missing local doc, fall through to the hosted\n // catalog automatically unless --local. No flag required.\n return showCmd(root, args.join(' '), opts.budget ? Number(opts.budget) : undefined, global.json, {\n online: network, // hosted-on-miss allowed unless --local\n region: opts.region,\n ingest: opts.ingest,\n });\n });\n applyGlobalOptions(cmd);\n}\n\nfunction listCatalog(root: string, asJson?: boolean): void {\n const catalog = loadCatalog(root);\n const libs = Object.values(catalog.libraries).sort((a, b) => a.name.localeCompare(b.name));\n if (asJson) {\n json(libs.map((l) => ({ id: l.id, name: l.name, version: l.version, source: l.source.type })));\n return;\n }\n info(`${c.cyan('vg lib')} · ${libs.length} library(ies) in the catalog`);\n for (const l of libs) {\n const d = driftFor(root, l);\n const tag = d.drift === 'behind' ? c.yellow(' (docs behind your version)') : d.drift === 'ahead' ? c.dim(' (docs ahead)') : '';\n info(` ${c.bold(l.name)} ${c.dim(`@${l.version}`)} ${c.dim(`[${l.source.type}]`)}${tag}`);\n }\n if (!libs.length) info(c.dim(' empty — add docs with `vg lib add <path|url>`'));\n}\n\nasync function addCmd(root: string, rest: string[], opts: { name?: string; version?: string; online?: boolean }, asJson?: boolean): Promise<void> {\n const source = rest[0];\n if (!source) throw usageError('usage: vg lib add <path|url|git> [--name <name>] [--version <v>] [--online]');\n let entry;\n try {\n entry = await addLibrary(source, { root, name: opts.name, version: opts.version, allowNetwork: opts.online });\n } catch (err) {\n throw new CliError((err as Error).message, ExitCode.ERROR);\n }\n if (asJson) {\n json(entry);\n return;\n }\n info(`${c.green('✔')} added ${c.bold(entry.name)} ${c.dim(`@${entry.version}`)} (${entry.bytes} bytes) → ${entry.docFile}`);\n}\n\nfunction readPackageVersion(root: string): string | undefined {\n try {\n const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8')) as { version?: unknown };\n return typeof pkg.version === 'string' ? pkg.version : undefined;\n } catch {\n return undefined;\n }\n}\nfunction readOptionalFile(p: string): string | undefined {\n try {\n const t = fs.readFileSync(p, 'utf8');\n return t.trim() ? t : undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * `vg lib publish <name>` (S6) — upload a PRIVATE library's docs to the hosted catalog. Requires a\n * DSN (workspace identity) and a paid plan; the index token cost is billed to the MCP-token meter.\n * Reads local README (+ optional .d.ts); private docs stay tenant-isolated.\n */\nasync function publishCmd(\n root: string,\n rest: string[],\n opts: { name?: string; version?: string; readme?: string; dts?: string; language?: string; region?: string; ingest?: string },\n global: { local?: boolean },\n asJson?: boolean,\n): Promise<void> {\n if (global.local) throw usageError('vg lib publish uploads to the hosted catalog — it needs network (remove --local)');\n const name = (rest.join(' ') || opts.name || '').trim();\n if (!name) throw usageError('usage: vg lib publish <name> [--version <v>] [--readme <path>] [--dts <path>] [--language <lang>]');\n\n const dsn = resolveDsn();\n const parsed = dsn ? parseDsn(dsn) : null;\n if (!parsed) throw new CliError('publishing a private library requires a DSN — run `vibgrate login` or set VIBGRATE_DSN', ExitCode.USAGE_ERROR);\n\n const version = (opts.version || readPackageVersion(root) || '').trim();\n if (!version) throw usageError('a --version is required (or run from a package whose package.json has a version)');\n\n const readme = readOptionalFile(opts.readme ? path.resolve(opts.readme) : path.join(root, 'README.md'));\n const dts = opts.dts ? readOptionalFile(path.resolve(opts.dts)) : undefined;\n if (!readme && !dts) throw usageError('nothing to publish — no README.md found and no --dts given');\n\n const result = await publishPrivateLibrary(\n { name, version, readme, dts, language: opts.language },\n { region: opts.region, ingest: opts.ingest, auth: { keyId: parsed.keyId, secret: parsed.secret } },\n );\n if (!result.ok) {\n const msg = result.message || result.error || `publish failed (HTTP ${result.status})`;\n const code = result.status === 402 ? ExitCode.GATE_FAILED : result.status === 401 ? ExitCode.USAGE_ERROR : ExitCode.ERROR;\n throw new CliError(msg, code);\n }\n if (asJson) {\n json(result);\n return;\n }\n info(`${c.green('✔')} published ${c.bold(name)} ${c.dim(`@${version}`)} · ${result.entities} entities · ${result.indexedTokens} tokens indexed (MCP-token meter)`);\n info(c.dim(` private to your workspace · targetId ${result.targetId}`));\n}\n\nfunction resolveCmd(root: string, rest: string[], asJson?: boolean): void {\n const name = rest.join(' ');\n if (!name) throw usageError('usage: vg lib resolve <name>');\n const entry = resolveLib(loadCatalog(root), name);\n if (!entry) throw new CliError(`no library matches \"${name}\" (id ${libId(name)})`, ExitCode.NOT_FOUND);\n if (asJson) json({ id: entry.id, name: entry.name, version: entry.version });\n else info(`${entry.id} ${c.dim(`(${entry.name}@${entry.version})`)}`);\n}\n\nasync function refreshCmd(root: string, opts: { online?: boolean }, asJson?: boolean): Promise<void> {\n const catalog = loadCatalog(root);\n const results: { name: string; ok: boolean }[] = [];\n for (const entry of Object.values(catalog.libraries)) {\n try {\n await addLibrary(entry.source.location, { root, name: entry.name, version: entry.version, allowNetwork: opts.online });\n results.push({ name: entry.name, ok: true });\n } catch {\n results.push({ name: entry.name, ok: false });\n }\n }\n if (asJson) json({ refreshed: results });\n else info(`${c.cyan('vg lib refresh')} · ${results.filter((r) => r.ok).length}/${results.length} re-ingested`);\n}\n\ninterface ShowOpts {\n online?: boolean;\n region?: string;\n ingest?: string;\n}\n\nasync function showCmd(root: string, name: string, budget: number | undefined, asJson?: boolean, opts: ShowOpts = {}): Promise<void> {\n const online = opts.online;\n const catalog = loadCatalog(root);\n const entry = resolveLib(catalog, name);\n const ver = resolveVersion(root, name);\n\n const displayName = entry?.name ?? name;\n let localDoc: string | undefined;\n let docVersion = ver.served ?? '*';\n let docSource: string | undefined;\n let drift: DriftNote | undefined;\n\n if (entry) {\n // 1. Committed catalog (drift-annotated).\n localDoc = readDoc(root, entry);\n docVersion = entry.version;\n drift = driftFor(root, entry);\n } else {\n // 2. Local-first: docs from the installed package on disk, version-correct, offline.\n const local = localPackageDocs(root, name);\n if (local) {\n localDoc = local.docs;\n docVersion = local.version ?? ver.served ?? '*';\n docSource = local.source;\n }\n }\n\n // Quality gate (D18): assess the full local extraction. An insufficient doc (no example /\n // stub / off-topic) — or no local doc at all — is a candidate for hosted escalation.\n const apiSurface = localApiSurface(root, displayName);\n const quality =\n localDoc !== undefined\n ? assessDocQuality([localDoc, apiSurface].filter(Boolean).join('\\n\\n'), { name: displayName, symbols: symbolsFromApi(apiSurface) })\n : { sufficient: false, score: 0, reasons: ['no local docs'] };\n\n // D18 escalation (D7 no-key funnel): only when --online AND local is missing/insufficient.\n // fetchHostedDocs fails closed to null, so the local path never breaks.\n let hosted: HostedDocsResult | null = null;\n if (online && !quality.sufficient) {\n // Identify with the stored DSN (if any) so CLI users get the workspace tier; anon otherwise.\n const dsn = resolveDsn();\n const parsed = dsn ? parseDsn(dsn) : null;\n hosted = await fetchHostedDocs(\n { name: displayName, query: name, maxTokens: budget },\n { region: opts.region, ingest: opts.ingest, auth: parsed ? { keyId: parsed.keyId, secret: parsed.secret } : undefined },\n );\n }\n\n if (localDoc === undefined && !hosted) {\n throw new CliError(\n `no library docs for \"${name}\" — add with \\`vg lib add <path|url> --name ${name}\\` or install the package${online ? '' : ' (or retry with --online for the hosted catalog)'}`,\n ExitCode.NOT_FOUND,\n );\n }\n\n let doc: string;\n if (hosted) {\n doc = hosted.content;\n docSource = 'hosted';\n docVersion = hosted.version ?? docVersion;\n } else {\n doc = selectForBudget({ readme: localDoc!, apiSurface, budget }).text;\n }\n\n if (asJson) {\n json({\n id: entry?.id,\n name: displayName,\n version: docVersion,\n source: docSource ?? 'catalog',\n drift: drift ?? null,\n version_mismatch: ver.mismatch ?? null,\n quality: { sufficient: quality.sufficient, score: quality.score, reasons: quality.reasons },\n escalate: quality.sufficient ? null : 'hosted',\n escalated: Boolean(hosted),\n docs: doc,\n });\n return;\n }\n info(`${c.cyan('vg lib')} · ${c.bold(displayName)} ${c.dim(`@${docVersion}`)}${docSource ? c.dim(` (from ${docSource})`) : ''}`);\n if (ver.mismatch) info(c.yellow(` ⚠ ${ver.mismatch.note}`));\n if (hosted) info(c.green(' ✔ local docs were thin — served richer docs from the hosted catalog'));\n else if (!quality.sufficient) info(c.yellow(` ⚠ local docs look thin (${quality.reasons.join(', ')})${online ? ' — hosted catalog had nothing better' : ' — run without --local for the hosted catalog'}`));\n if (drift?.drift === 'behind') info(c.yellow(` ⚠ docs are for ${drift.cataloged}, but your installed version is ${drift.installed} — refresh the docs`));\n else if (drift?.drift === 'current') info(c.green(` ✔ docs match your installed version (${drift.installed})`));\n info('');\n out(doc);\n}\n","import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { Command } from 'commander';\nimport { exportGraph, formatForExt, type ExportFormat } from '../engine/export.js';\nimport { inventory } from '../engine/drift.js';\nimport { discoverModels } from '../engine/models.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { requireGraph, rootOf } from './util.js';\nimport { usageError } from '../util/exit.js';\nimport { c, info, out } from '../util/output.js';\n\n/**\n * `vg export <file>` (VG-CLI-SPEC §4.2) — one verb, format inferred from the\n * extension: json · ndjson · graphml · dot · cypher · sql · md · html · cdx.json\n * (CycloneDX SBOM/AI-BOM) · spdx.json. `-` writes to stdout.\n */\nexport function registerExport(program: Command): void {\n const cmd = program\n .command('export')\n .description('export the map (format inferred: json|ndjson|graphml|dot|cypher|sql|md|html|cdx.json|spdx.json)')\n .argument('[file]', 'target file (or - for stdout)', 'map.json')\n .action(function (this: Command, file: string) {\n const global = readGlobal(this);\n const { graph } = requireGraph(global);\n const root = rootOf(global);\n\n const format = detectFormat(file);\n if (!format) throw usageError(`unknown export format for \"${file}\"`);\n\n const needsDeps = format === 'cyclonedx' || format === 'spdx';\n const content = exportGraph(format, {\n graph,\n deps: needsDeps ? inventory(root).records : undefined,\n models: needsDeps && !global.local ? discoverModels() : undefined,\n generatedAt: graph.generatedAt,\n });\n\n if (file === '-') {\n out(content.trimEnd());\n return;\n }\n fs.mkdirSync(path.dirname(path.resolve(file)), { recursive: true });\n fs.writeFileSync(file, content);\n info(`${c.green('✔')} wrote ${file} ${c.dim(`(${format})`)}`);\n });\n applyGlobalOptions(cmd);\n}\n\nfunction detectFormat(file: string): ExportFormat | null {\n const lower = file.toLowerCase();\n if (lower.endsWith('.cdx.json')) return 'cyclonedx';\n if (lower.endsWith('.spdx.json')) return 'spdx';\n if (file === '-') return 'json';\n return formatForExt(path.extname(file));\n}\n","import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { Command } from 'commander';\nimport { resolvedGrammarFiles, grammarSetVersion } from '../engine/grammars.js';\nimport { defaultGraphPath } from '../engine/artifacts.js';\nimport { catalogPath, libDir } from '../engine/lib.js';\nimport { stableStringify } from '../engine/serialize.js';\nimport { VERSION } from '../version.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\nimport { rootOf } from './util.js';\nimport { CliError, ExitCode } from '../util/exit.js';\nimport { c, info, json } from '../util/output.js';\n\n/**\n * `vg bundle --offline -o <dir>` (VG-INSTALL-MATRIX §9) — assemble an air-gapped\n * bundle: the grammar .wasm set, the current graph, and the library catalog,\n * plus a manifest. Point an offline machine at it with `vg build --grammars`.\n * Deterministic; no network.\n */\nexport function registerBundle(program: Command): void {\n const cmd = program\n .command('bundle')\n .description('build an air-gapped bundle (grammars + graph + library catalog)')\n .option('--offline', 'offline bundle (default; present for clarity)')\n .option('-o, --out <dir>', 'output directory', 'vg-bundle')\n .action(function (this: Command, opts: { out?: string }) {\n const global = readGlobal(this);\n const root = rootOf(global);\n const outDir = path.resolve(root, opts.out ?? 'vg-bundle');\n\n // Per-language resolution (not a directory copy) so the bundle carries\n // the exact grammar files a scan would load — including any vendored\n // overlay that replaces a defective prebuilt.\n let grammarFiles;\n try {\n grammarFiles = resolvedGrammarFiles();\n } catch {\n throw new CliError('no grammars found to bundle (run a build first)', ExitCode.ERROR);\n }\n fs.mkdirSync(path.join(outDir, 'grammars'), { recursive: true });\n let grammarCount = 0;\n for (const { fileName, absPath } of grammarFiles) {\n fs.copyFileSync(absPath, path.join(outDir, 'grammars', fileName));\n grammarCount++;\n }\n\n const included: string[] = [`grammars/ (${grammarCount} .wasm)`];\n\n const graphSrc = global.graph ?? defaultGraphPath(root);\n if (fs.existsSync(graphSrc)) {\n fs.copyFileSync(graphSrc, path.join(outDir, 'graph.json'));\n included.push('graph.json');\n }\n\n const cat = catalogPath(root);\n if (fs.existsSync(cat)) {\n fs.copyFileSync(cat, path.join(outDir, 'vibgrate.lib.json'));\n included.push('vibgrate.lib.json');\n if (fs.existsSync(libDir(root))) {\n fs.cpSync(libDir(root), path.join(outDir, 'lib'), { recursive: true });\n included.push('lib/');\n }\n }\n\n const manifest = {\n tool: 'vg',\n version: VERSION,\n grammars: grammarSetVersion(),\n grammarCount,\n included,\n usage: 'Run `vg build --grammars <this dir>/grammars` to build fully offline.',\n };\n fs.writeFileSync(path.join(outDir, 'MANIFEST.json'), `${stableStringify(manifest, 2)}\\n`);\n\n if (global.json) {\n json({ out: path.relative(root, outDir), ...manifest });\n return;\n }\n info(`${c.cyan('vg bundle')} · wrote ${path.relative(root, outDir)}/`);\n for (const i of included) info(` ${c.green('✔')} ${i}`);\n info(c.dim(` offline: vg build --grammars \"${path.relative(root, outDir)}/grammars\"`));\n });\n applyGlobalOptions(cmd);\n}\n","import * as path from 'node:path';\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { ensureDir, pathExists } from '../utils/fs.js';\nimport { writeDefaultConfig } from '../../core-open/index.js';\n\nexport const initCommand = new Command('init')\n .description('Initialize vibgrate in a project')\n .argument('[path]', 'Path to initialize', '.')\n .option('--baseline', 'Create initial baseline after init')\n .option('--yes', 'Skip confirmation prompts')\n .action(async (targetPath: string, opts: { baseline?: boolean; yes?: boolean }) => {\n const rootDir = path.resolve(targetPath);\n const vibgrateDir = path.join(rootDir, '.vibgrate');\n\n await ensureDir(vibgrateDir);\n console.log(chalk.green('✔') + ` Created ${chalk.bold('.vibgrate/')} directory`);\n\n const configPath = path.join(rootDir, 'vibgrate.config.ts');\n if (await pathExists(configPath)) {\n console.log(chalk.dim(' vibgrate.config.ts already exists, skipping'));\n } else {\n await writeDefaultConfig(rootDir);\n console.log(chalk.green('✔') + ` Created ${chalk.bold('vibgrate.config.ts')}`);\n }\n\n if (opts.baseline) {\n const { runBaseline } = await import('./baseline.js');\n await runBaseline(rootDir);\n }\n\n console.log('');\n console.log(chalk.bold('Next steps:'));\n console.log(` ${chalk.cyan('vibgrate scan')} Scan for upgrade drift`);\n console.log(` ${chalk.cyan('vibgrate baseline')} Create a drift baseline`);\n console.log('');\n });\n","/** Machine-parseable ingest id for CI, AMI, and other automation (plain stdout, no ANSI). */\nexport function emitIngestIdLine(ingestId: string, options?: { unchanged?: boolean }): void {\n console.log(`VIBGRATE_INGEST_ID=${ingestId}`);\n if (options?.unchanged) {\n console.log('VIBGRATE_INGEST_UNCHANGED=1');\n }\n}\n\n/**\n * Machine-parseable drift score for automation (plain stdout, no ANSI). The Vibgrate\n * remediation agent reads this to gate a run on before/after drift, rather than\n * scraping the human-formatted report. Emitted only when a consumer asks for it\n * (VIBGRATE_EMIT_MARKERS=1, set by the migration agent) so normal CLI output is\n * unchanged.\n */\nexport function emitDriftScoreLine(score: number): void {\n if (process.env.VIBGRATE_EMIT_MARKERS !== '1') return;\n console.log(`VIBGRATE_DRIFT_SCORE=${score}`);\n}\n","import * as path from 'node:path';\nimport chalk from 'chalk';\nimport { pathExists } from '../core-open/index.js';\nimport { resolveCliInvocation } from '../util/cli-invocation.js';\n\n// Map of AI assistant config file/dir patterns to the `vg install <name>` argument.\n// Checked in priority order — first match wins.\nconst AI_ASSISTANT_DETECTORS: Array<{ files: string[]; name: string }> = [\n { files: ['CLAUDE.md', '.claude'], name: 'claude' },\n { files: ['.cursor', '.cursorrules'], name: 'cursor' },\n { files: ['.windsurf'], name: 'windsurf' },\n { files: ['.github/copilot-instructions.md', '.copilot'], name: 'copilot' },\n { files: ['.gemini'], name: 'gemini' },\n { files: ['.continuerc.json'], name: 'continue' },\n { files: ['.codex'], name: 'codex' },\n];\n\nexport async function detectAiAssistant(rootDir: string): Promise<string | null> {\n for (const detector of AI_ASSISTANT_DETECTORS) {\n for (const file of detector.files) {\n if (await pathExists(path.join(rootDir, file))) {\n return detector.name;\n }\n }\n }\n return null;\n}\n\nexport function printAiContextPrompt(detectedAssistant: string | null): void {\n const teal = chalk.hex('#3FB0A4');\n const mint = chalk.hex('#4FE3C1');\n // Prefix with whatever actually runs this CLI for the user: `vg` when it's\n // installed on PATH, or `npx @vibgrate/cli` when they ran via npx (where a\n // bare `vg install` would not resolve).\n const cli = resolveCliInvocation();\n const installArgs = detectedAssistant ? `install ${detectedAssistant}` : 'install --all';\n const installCmd = `${cli} ${installArgs}`;\n const detectedNote = detectedAssistant\n ? chalk.dim(` (${detectedAssistant} config detected)`)\n : '';\n\n console.log('');\n console.log(teal(' ╭──────────────────────────────────────────────────╮'));\n console.log(teal(' │') + ' ' + mint('◆') + ' ' + chalk.bold.white('Get AI-aware answers in your editor') + ' ' + teal('│'));\n console.log(teal(' ╰──────────────────────────────────────────────────╯'));\n console.log('');\n console.log(' ' + chalk.bold.white(installCmd) + detectedNote);\n console.log('');\n console.log(' ' + teal('·') + ' ' + chalk.white('Code map in your assistant') + chalk.dim(' — call trees, impact surfaces, import paths'));\n console.log(' ' + teal('·') + ' ' + chalk.white('Offline drift') + chalk.dim(' — DriftScore and upgrade priorities, right inside your editor'));\n console.log(' ' + teal('·') + ' ' + chalk.white('Version-correct library docs') + chalk.dim(' — pinned to your lockfile, no hallucinated APIs'));\n console.log('');\n}\n","import * as path from 'node:path';\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport {\n runCoreScan,\n pathExists,\n parseDsn,\n prepareCompressedUpload,\n fetchScanPreflight,\n computeRepoFingerprint,\n detectVcs,\n resolveRepositoryName,\n parseExcludePatterns,\n} from '../../core-open/index.js';\nimport type { ScanOptions, ScanArtifact } from '../../core-open/index.js';\nimport { inventory } from '../../engine/drift.js';\nimport { loadStandards, checkStandards } from '../../engine/standards.js';\nimport { loadAdvancedScanHook } from '../advanced-hook.js';\nimport { VERSION } from '../version.js';\nimport { resolveIngestHost } from './dsn.js';\nimport { dashHostForIngestHost } from '../regions.js';\nimport { resolveDsn } from '../credentials.js';\nimport { emitIngestIdLine, emitDriftScoreLine } from '../utils/ingest-id-output.js';\nimport { uploadScanArtifact } from '../utils/upload.js';\nimport { buildGraph } from '../../engine/build.js';\nimport { writeArtifacts } from '../../engine/artifacts.js';\nimport { writeSnapshot } from '../../engine/freshness.js';\nimport { detectAiAssistant, printAiContextPrompt } from '../ai-context-prompt.js';\nimport { resolveCliInvocation } from '../../util/cli-invocation.js';\n\n/**\n * Whether `scan` should build the local code map after scoring drift.\n *\n * The code map is a *local artifact* — it writes `.vibgrate/graph.json`, the\n * graph report/html, and a freshness snapshot, and building it runs the\n * memory-heavy in-process TypeScript program. It is therefore skipped whenever\n * the caller has opted out of local artifacts:\n *\n * - `--no-graph` (`opts.graph === false`) — explicit opt-out.\n * - `--max-privacy` — strongest privacy mode, which means \"no local artifacts\".\n * - `--no-local-artifacts` — \"Do not write .vibgrate JSON artifacts to disk\";\n * graph.json is one of those artifacts, so building it violated the flag's\n * contract *and* let the optional map build OOM-kill baseline scans (e.g. the\n * migration `scan --push --no-local-artifacts` path), taking `--push` down\n * with it even though drift and findings were already computed.\n */\nexport function shouldBuildCodeMap(opts: {\n graph?: boolean;\n maxPrivacy?: boolean;\n noLocalArtifacts?: boolean;\n}): boolean {\n return opts.graph !== false && !opts.maxPrivacy && !opts.noLocalArtifacts;\n}\n\n/** Auto-push scan artifact to Vibgrate API */\nasync function autoPush(\n artifact: ScanArtifact,\n rootDir: string,\n opts: ScanOptions,\n): Promise<void> {\n const dsn = resolveDsn(opts.dsn);\n if (!dsn) {\n console.error(chalk.red('No DSN provided for push.'));\n console.error(chalk.dim('Run \"vibgrate login\", set VIBGRATE_DSN, or use the --dsn flag.'));\n if (opts.strict) process.exit(1);\n return;\n }\n\n const parsed = parseDsn(dsn);\n if (!parsed) {\n console.error(chalk.red('Invalid DSN format.'));\n if (opts.strict) process.exit(1);\n return;\n }\n\n // Compact and compress artifact for upload\n const { body, contentEncoding } = await prepareCompressedUpload(artifact);\n const timestamp = String(Date.now());\n\n let host = parsed.host;\n if (opts.region) {\n try {\n host = resolveIngestHost(opts.region);\n } catch (e: unknown) {\n console.error(chalk.red(e instanceof Error ? e.message : String(e)));\n if (opts.strict) process.exit(1);\n return;\n }\n }\n\n const originalSize = JSON.stringify(artifact).length;\n const compressedSize = body.length;\n const ratio = ((1 - compressedSize / originalSize) * 100).toFixed(0);\n console.log(chalk.dim(`Uploading to ${host}... (${(compressedSize / 1024).toFixed(0)} KB, ${ratio}% smaller)`));\n\n try {\n // Auto-retries against the workspace's pinned region on a 409 REGION_MISMATCH.\n const { response, host: uploadedHost } = await uploadScanArtifact({\n scheme: parsed.scheme,\n host,\n keyId: parsed.keyId,\n secret: parsed.secret,\n body,\n contentEncoding,\n timestamp,\n force: opts.force,\n });\n host = uploadedHost;\n\n if (!response.ok) {\n const text = await response.text();\n throw new Error(`HTTP ${response.status}: ${text}`);\n }\n\n const result = await response.json() as {\n status: string;\n ingestId?: string;\n unchanged?: boolean;\n previousIngestId?: string;\n lastScannedAt?: string;\n };\n\n if (result.unchanged) {\n console.log(\n chalk.green('✔')\n + ` Repository unchanged since ${result.lastScannedAt ?? 'last scan'} — skipped upload (no credit used).`,\n );\n if (result.previousIngestId) {\n emitIngestIdLine(result.previousIngestId, { unchanged: true });\n const dashUrl = `https://${dashHostForIngestHost(host)}/${parsed.workspaceId}/scan/${result.previousIngestId}`;\n console.log(chalk.dim(` Previous report: ${dashUrl}`));\n } else if (opts.strict) {\n console.error(chalk.red('Repository unchanged but no previous ingest id returned.'));\n process.exit(1);\n }\n return;\n }\n\n console.log(chalk.green('✔') + ` Scan queued for processing (${result.ingestId ?? 'ok'})`);\n if (result.ingestId) {\n emitIngestIdLine(result.ingestId);\n const dashUrl = `https://${dashHostForIngestHost(host)}/${parsed.workspaceId}/scan/${result.ingestId}`;\n // On Windows, stderr/stdout desync can leave residual content on lines.\n // Use ANSI escape: \\x1B[0G = move to column 0, \\x1B[2K = erase entire line\n const CLEAR_LINE = process.platform === 'win32' ? '\\x1B[0G\\x1B[2K' : '';\n console.log('');\n console.log(CLEAR_LINE + chalk.dim(' Processing continues in the background. Results available shortly.'));\n console.log('');\n console.log(CLEAR_LINE + chalk.cyan('────────────────────────────────────────────────────────────────────────────────'));\n console.log(CLEAR_LINE + chalk.bold(' 📊 View Scan Report'));\n console.log(CLEAR_LINE + ' ' + chalk.underline.cyan(dashUrl));\n console.log(CLEAR_LINE + chalk.cyan('────────────────────────────────────────────────────────────────────────────────'));\n console.log('');\n console.log('');\n }\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e);\n console.error(chalk.red(`Upload failed: ${msg}`));\n if (opts.strict) process.exit(1);\n }\n}\n\n/**\n * Commander collector for the repeatable `--exclude` flag. Each occurrence\n * may itself hold several comma/semicolon-separated globs, so we expand and\n * accumulate them across every use of the flag.\n */\nfunction collectExcludes(value: string, previous: string[]): string[] {\n return [...previous, ...parseExcludePatterns(value)];\n}\n\n/**\n * `--full` extra: report banned dependencies against a committed standards policy\n * (`.vibgrate/standards.json` etc.). Silent when no policy is present, and never\n * changes the exit code — gating stays with `vg drift --fail-on standards`.\n */\nfunction reportStandards(rootDir: string): void {\n const loaded = loadStandards(rootDir);\n if (!loaded.policy) return;\n const violations = checkStandards(loaded.policy, inventory(rootDir).records);\n if (violations.length === 0) {\n console.log(chalk.green('✔') + ' Standards: no banned dependencies in use');\n return;\n }\n console.log(chalk.red(`\\n⚠ Standards: ${violations.length} banned dependency(ies) in use`));\n for (const v of violations) {\n const fix = v.use ? chalk.dim(` → use ${v.use}`) : '';\n const why = v.reason ? chalk.dim(` (${v.reason})`) : '';\n console.log(` ${chalk.red('banned')} ${v.ecosystem}:${v.name}${v.installed ? chalk.dim(` ${v.installed}`) : ''}${fix}${why}`);\n }\n}\n\nfunction parseNonNegativeNumber(value: string | undefined, label: string): number | undefined {\n if (value === undefined) return undefined;\n const parsed = Number(value);\n if (!Number.isFinite(parsed) || parsed < 0) {\n throw new Error(`${label} must be a non-negative number.`);\n }\n return parsed;\n}\n\nexport const scanCommand = new Command('scan')\n .description('Scan a project for upgrade drift')\n .argument('[path]', 'Path to scan', '.')\n .option('--out <file>', 'Output file path')\n .option('--format <format>', 'Output format (text|json|sarif|md)', 'text')\n .option('--fail-on <level>', 'Fail on warn or error')\n .option('--baseline <file>', 'Compare against baseline')\n .option('--changed-only', 'Only scan changed files')\n .option(\n '-e, --exclude <glob>',\n 'Exclude paths matching a glob pattern. Repeatable, and a single value may list several patterns separated by commas or semicolons (e.g. --exclude \"legacy/**,vendor/**\"). Merged with excludes from the config file.',\n collectExcludes,\n [],\n )\n .option('--concurrency <n>', 'Max concurrent npm calls', '8')\n .option('--push', 'Auto-push results to Vibgrate API after scan')\n .option('--dsn <dsn>', 'DSN token for push (or use VIBGRATE_DSN env)')\n .option('--region <region>', 'Override data residency region for push (us, eu)')\n .option('--strict', 'Fail on push errors')\n .option('--ui-purpose', 'Enable optional UI purpose evidence extraction (slower)')\n .option('--no-local-artifacts', 'Do not write .vibgrate JSON artifacts to disk')\n .option('--max-privacy', 'Enable strongest privacy mode (minimal scanners, no local artifacts)')\n .option('--offline', 'Run without network calls; do not upload results')\n .option('--full', 'Comprehensive scan: turns on known-vulnerability detection (= --vulns) and, when a standards policy exists, a banned-dependency report — on top of drift scoring and the code map')\n .option('--vulns', 'Also scan installed dependencies for known vulnerabilities (OSV online, or advisories from --package-manifest when offline)')\n .option('--package-manifest <file>', 'Use local package-version manifest JSON/ZIP (for offline mode)')\n .option('--project-scan-timeout <seconds>', 'Per-project scan timeout in seconds (default: 180)')\n .option('--drift-budget <score>', 'Fail if drift score is above budget (0-100)')\n .option('--drift-worsening <percent>', 'Fail if drift worsens by more than % since baseline')\n .option('--repository-name <name>', 'Override the repository name recorded for this scan (defaults to the directory or package.json name)')\n .option('--force', 'Always create a fresh scan ingest, even if the repository is unchanged since the last scan (skips the unchanged/reuse optimization). Used by scheduled and dashboard-triggered scans.')\n .option('--no-graph', 'Skip building the local code map (the AI/docs index) that scan produces after scoring drift')\n .option('--quiet', 'Suppress promotional output (the free-plan tracking panel and the AI Context install prompt); scan results are unaffected')\n .action(async (targetPath: string, opts: {\n out?: string;\n format: string;\n failOn?: string;\n baseline?: string;\n changedOnly?: boolean;\n exclude: string[];\n concurrency: string;\n push?: boolean;\n dsn?: string;\n region?: string;\n strict?: boolean;\n uiPurpose?: boolean;\n // Commander maps the `--no-local-artifacts` negation flag to\n // `localArtifacts` (default `true`, `false` when the flag is passed) — NOT\n // to `noLocalArtifacts`. Reading the wrong name silently ignored the flag.\n localArtifacts?: boolean;\n maxPrivacy?: boolean;\n offline?: boolean;\n full?: boolean;\n vulns?: boolean;\n packageManifest?: string;\n projectScanTimeout?: string;\n driftBudget?: string;\n driftWorsening?: string;\n repositoryName?: string;\n force?: boolean;\n graph?: boolean;\n quiet?: boolean;\n }) => {\n const rootDir = path.resolve(targetPath);\n if (!(await pathExists(rootDir))) {\n console.error(chalk.red(`Path does not exist: ${rootDir}`));\n process.exit(1);\n }\n\n const hasDsn = !!resolveDsn(opts.dsn);\n const willPush = !opts.offline && (opts.push || hasDsn);\n\n // `--no-local-artifacts` arrives from commander as `localArtifacts === false`\n // (the negation flag's camelCase key), so normalise it once here. Reading\n // `opts.noLocalArtifacts` (which never exists) had silently ignored the flag:\n // every .vibgrate artifact — including the memory-heavy code map — was still\n // written, which OOM-killed migration baseline scans mid-map.\n const noLocalArtifacts = opts.localArtifacts === false;\n\n // Capture first-run before the scan writes .vibgrate/scan_result.json.\n const isFirstRun = !(await pathExists(path.join(rootDir, '.vibgrate', 'scan_result.json')));\n\n // Region the workspace is pinned to, learned from preflight. Used to route\n // the upload to the correct ingest host up front (the push path also\n // self-heals on a 409 REGION_MISMATCH if preflight didn't run).\n let pinnedRegion: string | undefined;\n // Workspace billing tier + upgrade link, learned from preflight. They select\n // the free-plan upsell panel's audience: a free-tier workspace shows the\n // panel with an upgrade CTA; any paid tier suppresses it. Left undefined when\n // preflight does not run (offline / no push), which keeps the panel hidden\n // for authenticated users rather than risk mislabelling a paid plan.\n let planTier: string | undefined;\n let upgradeUrl: string | undefined;\n\n if (willPush && hasDsn) {\n const dsn = resolveDsn(opts.dsn)!;\n const parsed = parseDsn(dsn);\n if (parsed) {\n const ingestHost = opts.region ? resolveIngestHost(opts.region) : parsed.host;\n const vcs = await detectVcs(rootDir);\n const fingerprint = await computeRepoFingerprint(rootDir, vcs);\n const repositoryName = opts.repositoryName?.trim() || await resolveRepositoryName(rootDir);\n try {\n const preflight = await fetchScanPreflight(parsed, ingestHost, {\n repositoryName,\n vcsSha: fingerprint.vcsSha,\n });\n pinnedRegion = preflight.region;\n planTier = preflight.plan?.tier;\n // Prefer the server's canonical upgrade link; otherwise point at the\n // workspace dashboard on the (possibly region-pinned) ingest host.\n upgradeUrl =\n preflight.upgradeUrl ??\n `https://${dashHostForIngestHost(preflight.ingestHost ?? ingestHost)}/${parsed.workspaceId}`;\n if (preflight.vm && !preflight.vm.allowed) {\n console.error(chalk.red(preflight.error ?? 'VM meter usage exhausted'));\n console.error(\n chalk.dim(\n `VM minutes: ${preflight.vm.used}/${preflight.vm.limit} (${preflight.plan.label} plan) — enable overages or upgrade your plan.`,\n ),\n );\n process.exit(1);\n }\n // A new repository that would breach the plan's repository cap is\n // blocked before the (expensive) local scan runs. Re-scanning an\n // already-mapped repository is never blocked here.\n if (preflight.repositories && !preflight.repositories.allowed) {\n console.error(\n chalk.red(\n preflight.error ??\n `Repository limit reached for the ${preflight.plan.label} plan — cannot scan a new repository.`,\n ),\n );\n const max =\n preflight.repositories.max < 0 ? 'unlimited' : String(preflight.repositories.max);\n console.error(\n chalk.dim(\n `Repositories: ${preflight.repositories.total}/${max} (${preflight.plan.label} plan) — archive a repository or upgrade your plan.`,\n ),\n );\n if (preflight.upgradeUrl) {\n console.error(chalk.dim(` Upgrade: ${preflight.upgradeUrl}`));\n }\n process.exit(1);\n }\n if (preflight.status === 'error' || !preflight.scans.allowed) {\n console.error(chalk.red(preflight.error ?? 'Scan ingestion not allowed for this workspace.'));\n console.error(\n chalk.dim(\n `Credits: ${preflight.scans.used}/${preflight.scans.limit} (${preflight.plan.label} plan)`,\n ),\n );\n if (opts.strict) process.exit(1);\n process.exit(1);\n }\n console.log(\n chalk.dim(\n `Plan: ${preflight.plan.label} — scan credits ${preflight.scans.used}/${preflight.scans.limit} this month`,\n ),\n );\n // `--force` opts out of the unchanged short-circuit so scheduled and\n // dashboard-triggered scans always produce a fresh report.\n if (preflight.repository?.unchanged && !opts.force) {\n console.log(\n chalk.green('✔')\n + ` Repository unchanged at ${preflight.repository.lastVcsSha?.slice(0, 7) ?? 'same revision'} — skipping scan.`,\n );\n if (preflight.repository.lastIngestId) {\n emitIngestIdLine(preflight.repository.lastIngestId, { unchanged: true });\n const dashUrl = `https://${dashHostForIngestHost(ingestHost)}/${parsed.workspaceId}/scan/${preflight.repository.lastIngestId}`;\n console.log(chalk.dim(` Latest report: ${dashUrl}`));\n } else if (opts.strict) {\n console.error(chalk.red('Repository unchanged but no previous ingest id available.'));\n process.exit(1);\n }\n return;\n }\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e);\n console.error(chalk.yellow(`Preflight check failed: ${msg}`));\n if (opts.strict) process.exit(1);\n }\n }\n }\n\n const scanOpts: ScanOptions = {\n vibgrateVersion: VERSION,\n out: opts.out,\n format: (opts.format as 'text' | 'json' | 'sarif' | 'md') || 'text',\n failOn: opts.failOn as 'warn' | 'error' | undefined,\n baseline: opts.baseline,\n changedOnly: opts.changedOnly,\n exclude: opts.exclude,\n concurrency: parseInt(opts.concurrency, 10) || 8,\n push: opts.push,\n dsn: opts.dsn,\n // An explicit --region wins; otherwise route to the workspace's pinned\n // region as reported by preflight.\n region: opts.region ?? pinnedRegion,\n strict: opts.strict,\n uiPurpose: opts.uiPurpose,\n noLocalArtifacts,\n maxPrivacy: opts.maxPrivacy,\n offline: opts.offline,\n // `--full` is the comprehensive umbrella: it turns on vulnerability scanning.\n vulns: opts.vulns || opts.full,\n packageManifest: opts.packageManifest,\n driftBudget: parseNonNegativeNumber(opts.driftBudget, '--drift-budget'),\n driftWorseningPercent: parseNonNegativeNumber(opts.driftWorsening, '--drift-worsening'),\n projectScanTimeout: opts.projectScanTimeout ? parseInt(opts.projectScanTimeout, 10) || undefined : undefined,\n repositoryName: opts.repositoryName?.trim() || undefined,\n force: opts.force,\n quiet: opts.quiet,\n // Auth + plan signals for the free-plan upsell panel. `hasDsn` resolves the\n // full credential precedence — `--dsn`, `VIBGRATE_DSN`, and the stored login\n // credential (`~/.vibgrate/credentials.json`) — which the scanner's own\n // dsn/env-only check cannot see. `planTier`/`upgradeUrl` come from preflight.\n // Together they pick the panel audience: signed out → login CTA; signed in\n // on free → upgrade CTA; signed in on a paid plan → no panel. Without the\n // auth signal, a logged-in user running a bare scan was mislabelled\n // \"Vibgrate Free\" and shown the login panel even as the run pushed.\n authenticated: hasDsn,\n planTier,\n upgradeUrl,\n // Prefix for the upsell panel's `login → push` hint — `vg` when installed,\n // `npx @vibgrate/cli` when the user ran via npx (where bare `vg` fails).\n invocation: resolveCliInvocation(),\n };\n\n // `scan` also builds the local code map (the AI/docs index) so one command\n // yields both the DriftScore and a ready graph for `vg ask`/`guide`/`lib`\n // and MCP. We run it as the scan's final `postScan` step so it shares the\n // *single* progress bar (no second bar/logo). Fail-soft — a map problem\n // never fails the scan. Skipped under --no-graph, --max-privacy, and\n // --no-local-artifacts (the map is a local .vibgrate artifact; see\n // shouldBuildCodeMap). An uncatchable OOM in the map build otherwise takes\n // the whole scan — and its --push — down with it.\n const wantGraph = shouldBuildCodeMap({ graph: opts.graph, maxPrivacy: opts.maxPrivacy, noLocalArtifacts });\n if (wantGraph) {\n scanOpts.postScan = async (report) => {\n const result = await buildGraph({\n root: rootDir,\n exclude: opts.exclude,\n onParseProgress: (done, total) => report(done, total, 'parsing'),\n });\n writeArtifacts(result.graph, { root: rootDir });\n // Freshness snapshot → lets `vg serve`/`vg ask` auto-refresh this map\n // when the working tree drifts (see engine/freshness.ts).\n writeSnapshot(rootDir, result.graph.provenance.corpusHash, result.fileStats, {\n exclude: opts.exclude,\n });\n const { counts } = result.graph.meta;\n return `${counts.nodes.toLocaleString()} nodes · ${counts.edges.toLocaleString()} edges`;\n };\n }\n\n // Open base scan. The optional advanced-analysis hook is a no-op in this\n // open build, so the scan runs entirely on the open base engine.\n const advanced = await loadAdvancedScanHook();\n const artifact = await runCoreScan(rootDir, scanOpts, advanced);\n\n // Machine-readable drift score for the remediation agent's before/after gate\n // (no-op unless VIBGRATE_EMIT_MARKERS=1). Emitted from the freshly computed\n // local artifact, so it is available even without --push.\n emitDriftScoreLine(artifact.drift.score);\n\n // `--full` also surfaces the offline standards/policy check (otherwise only\n // reachable via `vg drift --fail-on standards`). Report-only here — it never\n // changes the exit code; use `vg drift --fail-on standards` to gate CI.\n if (opts.full) {\n reportStandards(rootDir);\n }\n\n // Check fail-on thresholds\n if (opts.failOn) {\n const hasErrors = artifact.findings.some((f: { level: string }) => f.level === 'error');\n const hasWarnings = artifact.findings.some((f: { level: string }) => f.level === 'warning');\n\n if (opts.failOn === 'error' && hasErrors) {\n console.error(chalk.red(`\\nFailing: ${artifact.findings.filter((f: { level: string }) => f.level === 'error').length} error finding(s) detected.`));\n process.exit(2);\n }\n if (opts.failOn === 'warn' && (hasErrors || hasWarnings)) {\n console.error(chalk.red(`\\nFailing: findings detected at warn level or above.`));\n process.exit(2);\n }\n }\n\n if (scanOpts.driftBudget !== undefined && artifact.drift.score > scanOpts.driftBudget) {\n console.error(chalk.red(`\\nFailing fitness function: drift score ${artifact.drift.score}/100 exceeds budget ${scanOpts.driftBudget}.`));\n process.exit(2);\n }\n\n if (scanOpts.driftWorseningPercent !== undefined) {\n if (artifact.delta === undefined) {\n console.error(chalk.red('\\nFailing fitness function: --drift-worsening requires --baseline to compare against previous drift.'));\n process.exit(2);\n }\n\n if (artifact.delta > 0) {\n const baselineScore = artifact.drift.score - artifact.delta;\n const denominator = Math.max(Math.abs(baselineScore), 0.0001);\n const worseningPercent = (artifact.delta / denominator) * 100;\n\n if (worseningPercent > scanOpts.driftWorseningPercent) {\n console.error(chalk.red(`\\nFailing fitness function: drift worsened by ${worseningPercent.toFixed(2)}% (threshold ${scanOpts.driftWorseningPercent}%).`));\n process.exit(2);\n }\n }\n }\n\n if (willPush) {\n await autoPush(artifact, rootDir, scanOpts);\n }\n\n // On first run with no cloud connection and text output, prompt the user\n // to wire Vibgrate AI Context into their AI assistant.\n const showAiPrompt =\n scanOpts.format === 'text' &&\n !opts.quiet &&\n !hasDsn &&\n !opts.offline &&\n !noLocalArtifacts &&\n !opts.maxPrivacy &&\n isFirstRun;\n\n if (showAiPrompt) {\n const detectedAssistant = await detectAiAssistant(rootDir);\n printAiContextPrompt(detectedAssistant);\n }\n });\n","import * as fs from 'node:fs';\nimport * as path from 'node:path';\n\n/**\n * Is a prior `vg` scan artifact still up to date with the working tree?\n *\n * `vg fix` reads dependency drift from `.vibgrate/scan_result.json`. If the user\n * edited a dependency manifest — or a lockfile moved because they ran an install\n * or a previous `vg fix` — since that scan, the artifact describes a repository\n * that no longer exists, and the upgrade plan would be built against stale\n * versions (GUARDRAILS §1.4 — output integrity). So before planning, we check\n * whether any dependency manifest or lockfile is *newer* than the artifact and,\n * if so, re-scan.\n *\n * The signal is deliberately scoped to dependency manifests + lockfiles (not the\n * whole source tree): those are the only inputs that change what `vg fix`\n * analyses, and keying on them makes the check cheap and, crucially, loop-free —\n * a re-scan rewrites the artifact, bumping its mtime past every manifest, so the\n * next `vg fix` sees a fresh scan rather than re-scanning forever.\n *\n * Fail-open everywhere: a stat/read error reports \"fresh\". Freshness is an\n * optimisation, not a gate — a transient filesystem hiccup must never wedge\n * `vg fix` into a spurious re-scan (or a crash).\n */\n\n/** Dependency manifests + lockfiles whose modification invalidates a prior scan. */\nconst WATCHED_FILES = new Set([\n // npm\n 'package.json',\n 'package-lock.json',\n 'npm-shrinkwrap.json',\n 'pnpm-lock.yaml',\n 'yarn.lock',\n 'bun.lockb',\n // pypi\n 'requirements.txt',\n 'pyproject.toml',\n 'poetry.lock',\n 'Pipfile',\n 'Pipfile.lock',\n 'uv.lock',\n // go\n 'go.mod',\n 'go.sum',\n // rust\n 'Cargo.toml',\n 'Cargo.lock',\n // ruby\n 'Gemfile',\n 'Gemfile.lock',\n // php\n 'composer.json',\n 'composer.lock',\n // swift\n 'Package.swift',\n 'Package.resolved',\n // dart\n 'pubspec.yaml',\n 'pubspec.lock',\n // java\n 'pom.xml',\n 'build.gradle',\n 'build.gradle.kts',\n 'gradle.lockfile',\n // dotnet\n 'packages.lock.json',\n]);\n\n/** .NET project files carry their dependency versions inline (`<PackageReference>`). */\nconst WATCHED_EXT = /\\.(cs|fs)proj$/i;\n\n/**\n * Directories never worth descending into when hunting for manifests. Mirrors\n * `engine/drift.ts` `findManifests` so both agree on what counts as project\n * source rather than a build/vendor/dependency directory.\n */\nconst SKIP_DIRS = new Set([\n 'node_modules',\n '.git',\n 'dist',\n 'build',\n 'out',\n '.vibgrate',\n 'vendor',\n '.venv',\n 'venv',\n 'env',\n '__pycache__',\n 'target',\n '.next',\n '.nuxt',\n 'coverage',\n '.cache',\n]);\n\nexport interface StalenessResult {\n /** True when a manifest/lockfile is newer than the scan artifact. */\n stale: boolean;\n /**\n * The repo-relative path of the newest changed manifest, for an actionable\n * \"re-scanning because X changed\" message. Undefined when not stale.\n */\n newestChanged?: string;\n}\n\n/**\n * Decide whether `artifactPath` is out of date with the dependency manifests and\n * lockfiles under `rootDir`. See the module comment for the rationale and the\n * fail-open contract.\n */\nexport function scanStaleness(rootDir: string, artifactPath: string): StalenessResult {\n let ref: number;\n try {\n ref = fs.statSync(artifactPath).mtimeMs;\n } catch {\n // No artifact to compare against — the caller handles \"missing\" on its own.\n return { stale: false };\n }\n\n let newest = -Infinity;\n let newestChanged: string | undefined;\n\n // Bounded walk (depth + entry cap), matching engine/drift.ts findManifests, so\n // a pathological tree can never make freshness the slow part of `vg fix`.\n const MAX_ENTRIES = 20000;\n let scanned = 0;\n const walk = (dir: string, depth: number): void => {\n if (depth > 8 || scanned > MAX_ENTRIES) return;\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n for (const e of entries) {\n scanned++;\n if (scanned > MAX_ENTRIES) break;\n if (e.isDirectory()) {\n if (!SKIP_DIRS.has(e.name) && !e.name.startsWith('.')) walk(path.join(dir, e.name), depth + 1);\n continue;\n }\n if (!WATCHED_FILES.has(e.name) && !WATCHED_EXT.test(e.name)) continue;\n const abs = path.join(dir, e.name);\n let mtimeMs: number;\n try {\n mtimeMs = fs.statSync(abs).mtimeMs;\n } catch {\n continue;\n }\n if (mtimeMs > newest) {\n newest = mtimeMs;\n newestChanged = path.relative(rootDir, abs) || e.name;\n }\n }\n };\n walk(rootDir, 0);\n\n return newest > ref ? { stale: true, newestChanged } : { stale: false };\n}\n\n/** Convenience predicate over {@link scanStaleness}. */\nexport function isScanStale(rootDir: string, artifactPath: string): boolean {\n return scanStaleness(rootDir, artifactPath).stale;\n}\n","import * as fs from 'node:fs';\nimport * as path from 'node:path';\n\n/**\n * \"Contract\" extraction for `vg fix`: the named symbols the source imports from\n * a package (its default, namespace, named exports, and destructured requires).\n *\n * These are the API surfaces an upgrade must preserve, so the report can point a\n * developer (or a breaking-change analysis) at exactly what to re-verify against\n * the new version. The parser is pure and exported for tests; {@link collectContracts}\n * is a bounded, deterministic walk of the source tree.\n */\n\nconst SKIP_DIRS = new Set([\n 'node_modules', '.git', 'dist', 'build', 'out', '.vibgrate', 'vendor',\n '.venv', 'venv', 'env', '__pycache__', 'target', '.next', '.nuxt', 'coverage', '.cache',\n]);\nconst MAX_FILES = 8000;\nconst MAX_DEPTH = 12;\nconst MAX_FILE_BYTES = 1_048_576;\n/** Cap on the distinct contract symbols reported per package (keeps output bounded). */\nexport const MAX_CONTRACTS = 40;\n\nconst SOURCE_EXT: Record<'npm' | 'pypi', Set<string>> = {\n npm: new Set(['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs', '.mts', '.cts', '.vue', '.svelte']),\n pypi: new Set(['.py']),\n};\n\nfunction escapeRegExp(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/** Parse the specifiers of one ESM/CJS import clause (`Default, { A, B as C }` / `* as NS`). */\nfunction parseJsClause(clause: string, out: Set<string>): void {\n const trimmed = clause.trim();\n if (!trimmed) return;\n // Namespace import: `* as NS`\n if (/^\\*\\s+as\\s+\\w+/.test(trimmed)) {\n out.add('* (namespace)');\n return;\n }\n // Named block `{ ... }`, with an optional leading default identifier.\n const braceMatch = /\\{([^}]*)\\}/.exec(trimmed);\n const beforeBrace = braceMatch ? trimmed.slice(0, braceMatch.index) : trimmed;\n const defaultId = beforeBrace.replace(/,/g, '').trim();\n if (defaultId && /^\\w+$/.test(defaultId)) out.add('default');\n if (braceMatch) {\n for (const raw of braceMatch[1].split(',')) {\n const name = raw.trim().split(/\\s+as\\s+/)[0]?.trim();\n if (name && /^[\\w$]+$/.test(name)) out.add(name);\n }\n }\n}\n\n/** Extract the imported contract symbols for `pkg` from a single file's `content`. */\nexport function extractContracts(content: string, pkg: string, ecosystem: 'npm' | 'pypi' | 'unknown'): string[] {\n const out = new Set<string>();\n const e = escapeRegExp(pkg);\n if (ecosystem === 'npm') {\n const importRe = new RegExp(`import\\\\s+([^;'\"\\\\n]*?)\\\\s+from\\\\s+['\"]${e}(?:/[^'\"]*)?['\"]`, 'g');\n let m: RegExpExecArray | null;\n while ((m = importRe.exec(content))) parseJsClause(m[1], out);\n const requireDestructureRe = new RegExp(`\\\\{([^}]*)\\\\}\\\\s*=\\\\s*require\\\\(\\\\s*['\"]${e}(?:/[^'\"]*)?['\"]\\\\s*\\\\)`, 'g');\n while ((m = requireDestructureRe.exec(content))) {\n for (const raw of m[1].split(',')) {\n const name = raw.trim().split(':')[0]?.trim();\n if (name && /^[\\w$]+$/.test(name)) out.add(name);\n }\n }\n } else if (ecosystem === 'pypi') {\n const fromRe = new RegExp(`^\\\\s*from\\\\s+${e}(?:\\\\.[\\\\w.]+)?\\\\s+import\\\\s+(.+)$`, 'gm');\n let m: RegExpExecArray | null;\n while ((m = fromRe.exec(content))) {\n const names = m[1].replace(/[()]/g, '').split(',');\n for (const raw of names) {\n const name = raw.trim().split(/\\s+as\\s+/)[0]?.trim();\n if (name === '*') out.add('* (module)');\n else if (name && /^[\\w.]+$/.test(name)) out.add(name);\n }\n }\n const importRe = new RegExp(`^\\\\s*import\\\\s+${e}\\\\b`, 'gm');\n if (importRe.test(content)) out.add(`${pkg} (module)`);\n }\n return [...out].sort();\n}\n\n/**\n * Walk the source tree (bounded) collecting the distinct contract symbols used\n * from `pkg`. Deterministic: files are visited in sorted order and the result is\n * sorted and capped at {@link MAX_CONTRACTS}.\n */\nexport function collectContracts(root: string, pkg: string, ecosystem: 'npm' | 'pypi' | 'unknown'): string[] {\n if (ecosystem === 'unknown') return [];\n const exts = SOURCE_EXT[ecosystem];\n if (!exts) return [];\n const found = new Set<string>();\n let filesSeen = 0;\n\n const walk = (dir: string, depth: number): void => {\n if (depth > MAX_DEPTH || filesSeen >= MAX_FILES) return;\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n entries.sort((a, b) => a.name.localeCompare(b.name));\n for (const entry of entries) {\n if (filesSeen >= MAX_FILES) return;\n if (entry.isDirectory()) {\n if (SKIP_DIRS.has(entry.name) || entry.name.startsWith('.')) continue;\n walk(path.join(dir, entry.name), depth + 1);\n } else if (entry.isFile() && exts.has(path.extname(entry.name))) {\n filesSeen++;\n const full = path.join(dir, entry.name);\n let content: string;\n try {\n if (fs.statSync(full).size > MAX_FILE_BYTES) continue;\n content = fs.readFileSync(full, 'utf8');\n } catch {\n continue;\n }\n for (const sym of extractContracts(content, pkg, ecosystem)) found.add(sym);\n }\n }\n };\n walk(root, 0);\n return [...found].sort().slice(0, MAX_CONTRACTS);\n}\n","import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { extractContracts, MAX_CONTRACTS } from './contracts.js';\n\n/**\n * A single bounded pass over the source tree that, for every candidate package\n * at once, counts import sites and collects the contract symbols in use. Doing\n * this in one walk (rather than one walk per package) keeps `vg fix` fast on\n * repos with many dependencies. Deterministic: sorted traversal, sorted output.\n *\n * This is pure input-gathering the CLI must do locally — it reads the user's own\n * source, which never leaves the machine. The counts and contracts are shipped\n * to the hosted planner; the risk classification they feed is computed there.\n */\n\nexport type SourceEcosystem = 'npm' | 'pypi' | 'unknown';\n\nconst SKIP_DIRS = new Set([\n 'node_modules', '.git', 'dist', 'build', 'out', '.vibgrate', 'vendor',\n '.venv', 'venv', 'env', '__pycache__', 'target', '.next', '.nuxt', 'coverage', '.cache',\n]);\nconst MAX_FILES = 8000;\nconst MAX_DEPTH = 12;\nconst MAX_FILE_BYTES = 1_048_576;\n\nconst EXT_ECOSYSTEM: Record<string, SourceEcosystem> = {\n '.ts': 'npm', '.tsx': 'npm', '.js': 'npm', '.jsx': 'npm', '.mjs': 'npm', '.cjs': 'npm',\n '.mts': 'npm', '.cts': 'npm', '.vue': 'npm', '.svelte': 'npm',\n '.py': 'pypi',\n};\n\nfunction escapeRegExp(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction importPattern(ecosystem: 'npm' | 'pypi', pkg: string): RegExp {\n const e = escapeRegExp(pkg);\n if (ecosystem === 'npm') {\n return new RegExp(`(?:from\\\\s+|require\\\\(\\\\s*|import\\\\(\\\\s*)['\"]${e}(?:/[^'\"]*)?['\"]`, 'g');\n }\n return new RegExp(`^\\\\s*(?:import\\\\s+${e}(?:[.\\\\s]|$)|from\\\\s+${e}(?:[.\\\\s]))`, 'gm');\n}\n\nexport interface PackageUsage {\n importSites: number;\n filesTouched: number;\n contracts: string[];\n}\n\ninterface Tracked {\n name: string;\n ecosystem: 'npm' | 'pypi';\n pattern: RegExp;\n importSites: number;\n filesTouched: number;\n contracts: Set<string>;\n}\n\n/**\n * Walk `root` once, returning per-package usage keyed by package name. Packages\n * with an `unknown` ecosystem are returned with empty usage (no source scanning\n * applies).\n */\nexport function analyzeTree(\n root: string,\n packages: Array<{ name: string; ecosystem: SourceEcosystem }>,\n): Map<string, PackageUsage> {\n const result = new Map<string, PackageUsage>();\n const tracked: Tracked[] = [];\n for (const p of packages) {\n if (p.ecosystem === 'npm' || p.ecosystem === 'pypi') {\n tracked.push({\n name: p.name,\n ecosystem: p.ecosystem,\n pattern: importPattern(p.ecosystem, p.name),\n importSites: 0,\n filesTouched: 0,\n contracts: new Set(),\n });\n } else {\n result.set(p.name, { importSites: 0, filesTouched: 0, contracts: [] });\n }\n }\n if (tracked.length === 0) return result;\n\n let filesSeen = 0;\n const walk = (dir: string, depth: number): void => {\n if (depth > MAX_DEPTH || filesSeen >= MAX_FILES) return;\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n entries.sort((a, b) => a.name.localeCompare(b.name));\n for (const entry of entries) {\n if (filesSeen >= MAX_FILES) return;\n if (entry.isDirectory()) {\n if (SKIP_DIRS.has(entry.name) || entry.name.startsWith('.')) continue;\n walk(path.join(dir, entry.name), depth + 1);\n continue;\n }\n const fileEco = EXT_ECOSYSTEM[path.extname(entry.name)];\n if (!fileEco || fileEco === 'unknown') continue;\n filesSeen++;\n const full = path.join(dir, entry.name);\n let content: string;\n try {\n if (fs.statSync(full).size > MAX_FILE_BYTES) continue;\n content = fs.readFileSync(full, 'utf8');\n } catch {\n continue;\n }\n for (const t of tracked) {\n if (t.ecosystem !== fileEco) continue;\n t.pattern.lastIndex = 0;\n const matches = content.match(t.pattern);\n if (matches && matches.length) {\n t.importSites += matches.length;\n t.filesTouched++;\n if (t.contracts.size < MAX_CONTRACTS) {\n for (const sym of extractContracts(content, t.name, t.ecosystem)) t.contracts.add(sym);\n }\n }\n }\n }\n };\n walk(root, 0);\n\n for (const t of tracked) {\n result.set(t.name, {\n importSites: t.importSites,\n filesTouched: t.filesTouched,\n contracts: [...t.contracts].sort().slice(0, MAX_CONTRACTS),\n });\n }\n return result;\n}\n","/**\n * Transport for the hosted upgrade planner (`POST /v1/fix/plan`).\n *\n * `vg fix` is a thin, DSN-authenticated client: it sends drifted-dependency\n * candidates (versions + the usage/contract signals measured from local source)\n * and renders the plan the server returns. All planning intelligence lives\n * server-side. Mirrors the residency-aware retry of the scan upload transport —\n * a workspace is pinned to one region, so a 409 `REGION_MISMATCH` transparently\n * retries against the named regional host.\n */\n\nimport { ingestHostForRegionId } from '../regions.js';\nimport type { FixPlanRequest, FixPlanResponse } from '../planning/types.js';\n\nexport interface FixPlanInput {\n scheme: string;\n host: string;\n keyId: string;\n secret: string;\n request: FixPlanRequest;\n timestamp: string;\n}\n\nexport interface FixPlanResult {\n response: Response;\n /** The host the final request was sent to — differs from input.host on a region redirect. */\n host: string;\n}\n\nfunction postOnce(input: FixPlanInput, host: string): Promise<Response> {\n return fetch(`${input.scheme}://${host}/v1/fix/plan`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-Vibgrate-Timestamp': input.timestamp,\n Authorization: `VibgrateDSN ${input.keyId}:${input.secret}`,\n Connection: 'close',\n },\n body: JSON.stringify(input.request),\n });\n}\n\nasync function regionRedirectHost(response: Response): Promise<string | undefined> {\n try {\n const payload = (await response.clone().json()) as { code?: string; region?: string };\n if (payload?.code !== 'REGION_MISMATCH' || !payload.region) return undefined;\n return ingestHostForRegionId(payload.region);\n } catch {\n return undefined;\n }\n}\n\n/**\n * Request an upgrade plan from the hosted planner, transparently retrying\n * against the workspace's pinned region on a residency mismatch.\n */\nexport async function requestFixPlan(input: FixPlanInput): Promise<FixPlanResult> {\n let host = input.host;\n let response = await postOnce(input, host);\n\n if (response.status === 409) {\n const target = await regionRedirectHost(response);\n if (target && target !== host) {\n host = target;\n response = await postOnce(input, host);\n }\n }\n return { response, host };\n}\n\n/** Parse a fix-plan response body, tolerating an error envelope. */\nexport async function parseFixPlanResponse(response: Response): Promise<FixPlanResponse> {\n return (await response.json()) as FixPlanResponse;\n}\n","import chalk from 'chalk';\nimport type { VulnSeverity } from '../../core-open/index.js';\nimport type { FixPlanResponse, UpgradePlan, VulnDelta } from './types.js';\n\n/**\n * Human-facing renderers for the planner's response. `--json` bypasses these\n * entirely (the {@link FixPlanResponse} is emitted verbatim); these are for\n * `text` and `md`.\n */\n\nconst SEVERITY_ORDER: VulnSeverity[] = ['critical', 'high', 'moderate', 'low', 'unknown'];\n\nfunction deltaSummary(delta: VulnDelta): string {\n if (delta.total === 0) return 'none';\n const parts = SEVERITY_ORDER.filter((s) => delta.bySeverity[s]).map((s) => `${delta.bySeverity[s]} ${s}`);\n return parts.length ? parts.join(', ') : `${delta.total}`;\n}\n\nfunction riskLabel(score: number): string {\n if (score <= 15) return chalk.green(`${score}/100 low`);\n if (score <= 40) return chalk.yellow(`${score}/100 moderate`);\n return chalk.red(`${score}/100 high`);\n}\n\nfunction planBlock(plan: UpgradePlan, recommended: boolean): string {\n const lines: string[] = [];\n const marker = recommended ? chalk.green('● recommended') : chalk.dim('○');\n lines.push(`${marker} ${chalk.bold(plan.label)} — ${chalk.dim(plan.description)}`);\n const drift =\n typeof plan.expectedDriftScore === 'number' && typeof plan.driftDelta === 'number'\n ? ` · DriftScore →${plan.expectedDriftScore} (${plan.driftDelta <= 0 ? '' : '+'}${plan.driftDelta})`\n : '';\n lines.push(\n ` risk ${riskLabel(plan.riskScore)} · ${plan.upgrades.length} upgrade(s) · ` +\n `fixes ${deltaSummary(plan.fixes)}${drift}`,\n );\n if (plan.introduces.total) {\n lines.push(chalk.red(` ⚠ introduces ${deltaSummary(plan.introduces)} advisory(ies) in target versions`));\n }\n const shown = plan.upgrades.slice(0, 12);\n for (const u of shown) {\n const codemod = u.playbook?.codemod ? chalk.magenta(` [codemod: ${u.playbook.codemod}]`) : '';\n lines.push(` ${chalk.cyan(u.package)} ${chalk.dim(`${u.from ?? '?'} → ${u.to ?? '?'}`)} ${chalk.dim(u.reason)}${codemod}`);\n }\n if (plan.upgrades.length > shown.length) {\n lines.push(chalk.dim(` … and ${plan.upgrades.length - shown.length} more`));\n }\n if (plan.upgrades.length === 0) {\n lines.push(chalk.dim(' (no upgrades in this plan)'));\n }\n return lines.join('\\n');\n}\n\nfunction dataNote(report: FixPlanResponse): string | null {\n if (report.vulnerabilityData === 'unavailable') {\n return chalk.dim('Advisory data was unavailable — vulnerability impact is not shown.');\n }\n if (report.vulnerabilityData === 'partial') {\n return chalk.dim('Advisory data was partial — some ecosystems were not checked.');\n }\n return null;\n}\n\nexport function renderText(report: FixPlanResponse): string {\n const out: string[] = [];\n out.push(chalk.bold('Vibgrate fix — upgrade plan'));\n out.push(\n chalk.dim(\n `${report.totalCandidates} drifted dependency(ies) analysed · ` +\n `${report.deepAnalysis ? 'deep (major) analysis on' : 'preflight only'}`,\n ),\n );\n const note = dataNote(report);\n if (note) out.push(note);\n if (report.exploitability && report.exploitability.kevPackages > 0) {\n const epss = report.exploitability.maxEpss != null ? `, peak EPSS ${(report.exploitability.maxEpss * 100).toFixed(0)}%` : '';\n out.push(chalk.red(`⚠ ${report.exploitability.kevPackages} package(s) carry a KNOWN-EXPLOITED (KEV) advisory${epss} — prioritise these.`));\n }\n out.push('');\n for (const plan of report.plans) {\n out.push(planBlock(plan, plan.tier === report.recommended));\n out.push('');\n }\n out.push(chalk.bold('Recommendation'));\n out.push(` ${chalk.green(report.plans.find((p) => p.tier === report.recommended)?.label ?? report.recommended)} — ${report.rationale}`);\n if (report.unresolved.total) {\n out.push('');\n out.push(chalk.red(`⚠ ${deltaSummary(report.unresolved)} advisory(ies) have no upgrade path in any plan.`));\n }\n return out.join('\\n');\n}\n\nexport function renderMarkdown(report: FixPlanResponse): string {\n const out: string[] = [];\n out.push('# Vibgrate fix — upgrade plan');\n out.push('');\n out.push(\n `${report.totalCandidates} drifted dependency(ies) analysed · ${report.deepAnalysis ? 'deep (major) analysis on' : 'preflight only'}.`,\n );\n const note = dataNote(report);\n if (note) {\n out.push('');\n out.push(`_${report.vulnerabilityData === 'unavailable' ? 'Advisory data was unavailable — vulnerability impact is not shown.' : 'Advisory data was partial — some ecosystems were not checked.'}_`);\n }\n out.push('');\n for (const plan of report.plans) {\n const rec = plan.tier === report.recommended ? ' ✅ **recommended**' : '';\n out.push(`## ${plan.label}${rec}`);\n out.push('');\n out.push(`_${plan.description}_`);\n out.push('');\n out.push(`- Risk: **${plan.riskScore}/100** (${plan.confidence} confidence)`);\n out.push(`- Upgrades: **${plan.upgrades.length}**`);\n out.push(`- Fixes advisories: ${deltaSummary(plan.fixes)}`);\n if (plan.introduces.total) {\n out.push(`- ⚠ Introduces advisories in target versions: ${deltaSummary(plan.introduces)}`);\n }\n out.push('');\n if (plan.upgrades.length) {\n out.push('| Package | From | To | Kind | Reason |');\n out.push('|---|---|---|---|---|');\n for (const u of plan.upgrades) {\n out.push(`| \\`${u.package}\\` | ${u.from ?? '?'} | ${u.to ?? '?'} | ${u.kind} | ${u.reason} |`);\n }\n out.push('');\n }\n }\n out.push('## Recommendation');\n out.push('');\n const recLabel = report.plans.find((p) => p.tier === report.recommended)?.label ?? report.recommended;\n out.push(`**${recLabel}** — ${report.rationale}`);\n if (report.unresolved.total) {\n out.push('');\n out.push(`> ⚠ ${deltaSummary(report.unresolved)} advisory(ies) have no upgrade path in any plan.`);\n }\n return out.join('\\n');\n}\n","import { computeDriftScore } from '../../core-open/index.js';\nimport type { ScanArtifact, ProjectScan } from '../../core-open/index.js';\n\n/**\n * Estimate the DriftScore after applying a plan's upgrades.\n *\n * The DriftScore is a pure function of the scan's per-project state\n * (`computeDriftScore`), so we project the post-upgrade score by mutating a copy\n * of the scan to reflect the plan landing, then recomputing:\n *\n * - each upgraded dependency moves out of its major-age bucket\n * (`majorsBehind ≥ 2 → twoPlusBehind`, `== 1 → oneBehind`) into `current`;\n * - each upgraded framework's `majorsBehind` is zeroed.\n *\n * It is a principled estimate, not a re-scan: patch/minor upgrades (0 majors\n * behind) don't move the major-age buckets, so their gain shows up only through\n * the freshness component when release-date data is present — which is honest,\n * since a patch bump barely changes structural drift. Deterministic.\n */\n\n/** Recompute the DriftScore assuming every package named in `upgraded` lands at latest. */\nexport function estimateDriftScore(artifact: ScanArtifact, upgraded: Set<string>): number {\n const projects: ProjectScan[] = JSON.parse(JSON.stringify(artifact.projects ?? []));\n for (const p of projects) {\n const buckets = p.dependencyAgeBuckets;\n for (const dep of p.dependencies ?? []) {\n if (!upgraded.has(dep.package)) continue;\n const mb = dep.majorsBehind ?? 0;\n if (mb >= 2 && buckets.twoPlusBehind > 0) {\n buckets.twoPlusBehind--;\n buckets.current++;\n } else if (mb === 1 && buckets.oneBehind > 0) {\n buckets.oneBehind--;\n buckets.current++;\n }\n }\n for (const fw of p.frameworks ?? []) {\n if (upgraded.has(fw.name)) fw.majorsBehind = 0;\n }\n }\n return computeDriftScore(projects).score;\n}\n","import { spawnSync } from 'node:child_process';\nimport * as path from 'node:path';\nimport type { PlannedUpgrade } from './types.js';\n\n/**\n * Applies a chosen plan by running each ecosystem's native package manager to\n * pin the target version — which edits the manifest AND installs in one step.\n * `--dry-run` prints the commands without executing. Ecosystems without a clean\n * one-shot pin command are reported as \"manual\", never silently skipped.\n *\n * In a monorepo, a dependency lives in a specific workspace package's manifest,\n * not necessarily the repo root. Running the pin command at the root would edit\n * the wrong `package.json` (and pnpm refuses a bare `pnpm add` at a workspace\n * root: ERR_PNPM_ADDING_TO_ROOT). So callers resolve each upgrade to the\n * workspace package(s) that own it and we run the command in that package's\n * directory. Only when a dependency is declared in the root manifest of a pnpm\n * workspace do we add `-w`.\n */\n\n/** The npm-family package manager detected for a project. */\nexport type NpmPackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun';\n\nexport interface UpgradeCommand {\n cmd: string;\n args: string[];\n}\n\n/**\n * A manifest that owns an upgrade, as a directory relative to the repo root\n * (`'.'` or `''` = the root manifest).\n */\nexport interface WorkspaceTarget {\n /** Directory of the owning manifest, relative to the repo root. */\n dir: string;\n /**\n * True only when `dir` is the root of a pnpm workspace — the one case where\n * `pnpm add` needs `-w`. Workspace *members* never need it.\n */\n isWorkspaceRoot: boolean;\n}\n\n/** A `dir` referring to the repo root rather than a nested workspace package. */\nfunction isRootDir(dir: string): boolean {\n return dir === '' || dir === '.';\n}\n\nexport interface PmCommandOptions {\n /** When true and the package manager is pnpm, add the `-w` workspace-root flag. */\n workspaceRoot?: boolean;\n}\n\n/**\n * Build the native command that pins `pkg` to `version` for an ecosystem. Pure\n * and exported for tests. Returns null for ecosystems with no clean one-shot pin\n * (java, hex) — those are reported as manual.\n */\nexport function pmCommandFor(\n ecosystem: string,\n pkg: string,\n version: string,\n pm: NpmPackageManager = 'npm',\n opts: PmCommandOptions = {},\n): UpgradeCommand | null {\n // Only pnpm needs an explicit flag to write the workspace-root manifest.\n const ws = opts.workspaceRoot && pm === 'pnpm' ? ['-w'] : [];\n switch (ecosystem) {\n case 'npm':\n if (pm === 'pnpm') return { cmd: 'pnpm', args: ['add', ...ws, `${pkg}@${version}`] };\n if (pm === 'yarn') return { cmd: 'yarn', args: ['add', `${pkg}@${version}`] };\n if (pm === 'bun') return { cmd: 'bun', args: ['add', `${pkg}@${version}`] };\n return { cmd: 'npm', args: ['install', `${pkg}@${version}`] };\n case 'pypi':\n return { cmd: 'pip', args: ['install', `${pkg}==${version}`] };\n case 'cargo':\n return { cmd: 'cargo', args: ['add', `${pkg}@${version}`] };\n case 'go':\n return { cmd: 'go', args: ['get', `${pkg}@${version.startsWith('v') ? version : `v${version}`}`] };\n case 'composer':\n return { cmd: 'composer', args: ['require', `${pkg}:${version}`] };\n case 'nuget':\n return { cmd: 'dotnet', args: ['add', 'package', pkg, '--version', version] };\n case 'dotnet':\n return { cmd: 'dotnet', args: ['add', 'package', pkg, '--version', version] };\n case 'dart':\n case 'pub':\n return { cmd: 'dart', args: ['pub', 'add', `${pkg}:${version}`] };\n case 'rubygems':\n case 'ruby':\n // Bundler has no clean per-gem pin via CLI; update within the Gemfile's\n // constraint (best-effort). A hard pin needs a manual Gemfile edit.\n return { cmd: 'bundle', args: ['update', pkg] };\n default:\n return null; // java (maven/gradle), hex, swift → manual\n }\n}\n\nexport interface AppliedUpgrade {\n package: string;\n to: string | null;\n status: 'applied' | 'failed' | 'manual' | 'skipped';\n detail?: string;\n}\n\nexport interface RunResult {\n ok: boolean;\n detail?: string;\n /** The package-manager binary was not found on PATH (report as manual, not failed). */\n toolMissing?: boolean;\n}\n\nexport interface ApplyOptions {\n dryRun?: boolean;\n /** npm-family package manager for npm upgrades (from the scan). */\n packageManager?: NpmPackageManager;\n /**\n * Resolve which workspace manifest(s) own an upgrade, so the pin command runs\n * in the right directory instead of blindly at the repo root. Returns the\n * owning targets; an empty array falls back to the root manifest. Defaults to\n * a single root target (repo-root install, no `-w`).\n */\n resolveTargets?: (upgrade: PlannedUpgrade) => WorkspaceTarget[];\n /** Runner override for tests. */\n run?: (cmd: UpgradeCommand, cwd: string) => RunResult;\n}\n\nfunction defaultRun(cmd: UpgradeCommand, cwd: string): RunResult {\n const res = spawnSync(cmd.cmd, cmd.args, { cwd, stdio: 'inherit', shell: false });\n if (res.error) {\n // ENOENT = the toolchain (cargo, pip, go, …) isn't installed here. That's an\n // environment gap the user must resolve, not an upgrade that \"failed\".\n if ((res.error as NodeJS.ErrnoException).code === 'ENOENT') {\n return { ok: false, toolMissing: true, detail: `${cmd.cmd} is not installed or not on PATH` };\n }\n return { ok: false, detail: res.error.message };\n }\n if (res.status !== 0) return { ok: false, detail: `exit ${res.status ?? 'signal'}` };\n return { ok: true };\n}\n\nconst ROOT_TARGET: WorkspaceTarget[] = [{ dir: '.', isWorkspaceRoot: false }];\n\n/** Apply a plan's upgrades. Returns per-package outcomes (nothing is silently dropped). */\nexport function applyPlan(rootDir: string, upgrades: PlannedUpgrade[], opts: ApplyOptions = {}): AppliedUpgrade[] {\n const run = opts.run ?? defaultRun;\n const resolveTargets = opts.resolveTargets ?? (() => ROOT_TARGET);\n const results: AppliedUpgrade[] = [];\n for (const u of upgrades) {\n if (!u.to) {\n results.push({ package: u.package, to: u.to, status: 'skipped', detail: 'no target version' });\n continue;\n }\n // Probe ecosystem support once (it never varies by target directory).\n if (!pmCommandFor(u.ecosystem, u.package, u.to, opts.packageManager)) {\n results.push({ package: u.package, to: u.to, status: 'manual', detail: `${u.ecosystem}: update the manifest to ${u.to} manually` });\n continue;\n }\n const targets = resolveTargets(u);\n const effective = targets.length > 0 ? targets : ROOT_TARGET;\n // Only tag a directory when disambiguation matters (a nested package, or\n // more than one owner) so single-root results read cleanly.\n const labelled = effective.length > 1;\n const where = (t: WorkspaceTarget) => (labelled || !isRootDir(t.dir) ? `${t.dir || '.'}: ` : '');\n\n if (opts.dryRun) {\n const detail = effective\n .map((t) => {\n const c = pmCommandFor(u.ecosystem, u.package, u.to as string, opts.packageManager, { workspaceRoot: t.isWorkspaceRoot });\n return `would run: ${c!.cmd} ${c!.args.join(' ')}${labelled || !isRootDir(t.dir) ? ` (in ${t.dir || '.'})` : ''}`;\n })\n .join('; ');\n results.push({ package: u.package, to: u.to, status: 'skipped', detail });\n continue;\n }\n const outcomes = effective.map((t) => {\n const c = pmCommandFor(u.ecosystem, u.package, u.to as string, opts.packageManager, { workspaceRoot: t.isWorkspaceRoot });\n return { t, res: run(c!, path.join(rootDir, t.dir)) };\n });\n const failures = outcomes.filter((o) => !o.res.ok);\n if (failures.length === 0) {\n results.push({\n package: u.package,\n to: u.to,\n status: 'applied',\n detail: labelled ? `applied in ${effective.map((t) => t.dir || '.').join(', ')}` : undefined,\n });\n } else if (failures.every((o) => o.res.toolMissing)) {\n // The toolchain (cargo, pip, go, …) isn't installed here — an environment\n // gap for the user to resolve, not an upgrade that \"failed\". Report manual.\n results.push({\n package: u.package,\n to: u.to,\n status: 'manual',\n detail: failures.map((o) => `${where(o.t)}${o.res.detail ?? 'tool missing'} — upgrade manually`).join('; '),\n });\n } else {\n results.push({\n package: u.package,\n to: u.to,\n status: 'failed',\n detail: failures.map((o) => `${where(o.t)}${o.res.detail ?? 'failed'}`).join('; '),\n });\n }\n }\n return results;\n}\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport * as os from 'node:os';\nimport semver from 'semver';\nimport { VERSION } from '../version.js';\n\nconst REGISTRY_URL = 'https://registry.npmjs.org/@vibgrate%2fcli/latest';\nconst CACHE_DIR = path.join(os.homedir(), '.vibgrate');\nconst CACHE_FILE = path.join(CACHE_DIR, 'update-check.json');\nconst CHECK_INTERVAL_MS = 12 * 60 * 60 * 1000; // 12 hours\n\nexport interface UpdateInfo {\n current: string;\n latest: string;\n updateAvailable: boolean;\n}\n\ninterface CachedCheck {\n latest: string;\n checkedAt: number;\n}\n\n/**\n * Check the npm registry for a newer version.\n * Results are cached for 24 hours to avoid unnecessary network requests.\n * Never throws — returns null on any failure.\n */\nexport async function checkForUpdate(): Promise<UpdateInfo | null> {\n try {\n // Try cache first\n const cached = await readCache();\n if (cached && Date.now() - cached.checkedAt < CHECK_INTERVAL_MS) {\n return {\n current: VERSION,\n latest: cached.latest,\n updateAvailable: semver.gt(cached.latest, VERSION),\n };\n }\n\n // Fetch from registry with a short timeout\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 5000);\n timeout.unref?.();\n\n let response: Awaited<ReturnType<typeof fetch>>;\n try {\n response = await fetch(REGISTRY_URL, {\n headers: { Accept: 'application/json' },\n signal: controller.signal,\n });\n } finally {\n clearTimeout(timeout);\n }\n\n if (!response.ok) return null;\n\n const data = (await response.json()) as { version?: string };\n const latest = data.version;\n if (!latest || !semver.valid(latest)) return null;\n\n // Update cache\n await writeCache({ latest, checkedAt: Date.now() });\n\n return {\n current: VERSION,\n latest,\n updateAvailable: semver.gt(latest, VERSION),\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Fetch the latest version from the npm registry (no cache).\n * Returns the version string or null on failure.\n */\nexport async function fetchLatestVersion(): Promise<string | null> {\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 10000);\n timeout.unref?.();\n\n let response: Awaited<ReturnType<typeof fetch>>;\n try {\n response = await fetch(REGISTRY_URL, {\n headers: { Accept: 'application/json' },\n signal: controller.signal,\n });\n } finally {\n clearTimeout(timeout);\n }\n\n if (!response.ok) return null;\n\n const data = (await response.json()) as { version?: string };\n const latest = data.version;\n if (!latest || !semver.valid(latest)) return null;\n\n // Update cache\n await writeCache({ latest, checkedAt: Date.now() });\n\n return latest;\n } catch {\n return null;\n }\n}\n\nasync function readCache(): Promise<CachedCheck | null> {\n try {\n const raw = await fs.readFile(CACHE_FILE, 'utf-8');\n const data = JSON.parse(raw) as CachedCheck;\n if (data.latest && typeof data.checkedAt === 'number') return data;\n return null;\n } catch {\n return null;\n }\n}\n\nasync function writeCache(data: CachedCheck): Promise<void> {\n try {\n await fs.mkdir(CACHE_DIR, { recursive: true });\n await fs.writeFile(CACHE_FILE, JSON.stringify(data), 'utf-8');\n } catch {\n // Non-critical — silently ignore cache write failures\n }\n}\n","import { execSync } from 'node:child_process';\nimport * as readline from 'node:readline';\nimport * as path from 'node:path';\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { VERSION } from '../version.js';\nimport { fetchLatestVersion } from '../utils/update-check.js';\nimport { pathExists } from '../utils/fs.js';\n\nexport type PackageManager = 'pnpm' | 'npm' | 'yarn' | 'bun';\n\n/**\n * Check if the CLI is installed globally by examining where it's running from.\n * Returns the package manager if global, null if local.\n */\nfunction detectGlobalInstall(): PackageManager | null {\n const execPath = process.argv[1] || '';\n // Global npm installs are typically in /usr/local/lib/node_modules or similar\n // Global pnpm installs are in ~/.local/share/pnpm or similar\n if (execPath.includes('/lib/node_modules/') || execPath.includes('\\\\node_modules\\\\')) {\n // Could be local or global node_modules - check for project markers\n if (!execPath.includes(process.cwd())) {\n // Not in current directory - likely global\n if (execPath.includes('pnpm')) return 'pnpm';\n if (execPath.includes('yarn')) return 'yarn';\n if (execPath.includes('bun')) return 'bun';\n return 'npm';\n }\n }\n return null;\n}\n\nfunction getGlobalUpdateCommand(pm: PackageManager, pkg: string, version: string): string {\n const spec = `${pkg}@${version}`;\n switch (pm) {\n case 'pnpm':\n return `pnpm add -g ${spec}`;\n case 'yarn':\n return `yarn global add ${spec}`;\n case 'bun':\n return `bun add -g ${spec}`;\n case 'npm':\n default:\n return `npm install -g ${spec}`;\n }\n}\n\n/**\n * Detect which package manager is being used in the current project\n * by checking for lockfiles in the working directory.\n */\nexport async function detectPackageManager(cwd: string): Promise<PackageManager> {\n if (await pathExists(path.join(cwd, 'pnpm-lock.yaml'))) return 'pnpm';\n if (await pathExists(path.join(cwd, 'bun.lockb'))) return 'bun';\n if (await pathExists(path.join(cwd, 'yarn.lock'))) return 'yarn';\n return 'npm'; // default\n}\n\n/**\n * Detect whether `cwd` is a monorepo/workspace root.\n *\n * pnpm refuses a plain `pnpm add` at a workspace root (ERR_PNPM_ADDING_TO_ROOT)\n * unless `-w`/`--workspace-root` is passed, because adding to the root touches the\n * root `package.json` rather than a package. A pnpm workspace is declared by a\n * `pnpm-workspace.yaml`; npm/yarn workspaces are declared by the `workspaces`\n * field in `package.json`. We treat any of these as a workspace root.\n */\nexport async function detectWorkspaceRoot(cwd: string): Promise<boolean> {\n if (await pathExists(path.join(cwd, 'pnpm-workspace.yaml'))) return true;\n try {\n const pkgPath = path.join(cwd, 'package.json');\n const raw = await (await import('node:fs/promises')).readFile(pkgPath, 'utf-8');\n const pkg = JSON.parse(raw) as { workspaces?: unknown };\n return pkg.workspaces != null;\n } catch {\n return false;\n }\n}\n\nexport interface InstallCommandOptions {\n /** When true and the package manager is pnpm, add the `-w` workspace-root flag. */\n workspaceRoot?: boolean;\n}\n\nexport function getInstallCommand(\n pm: PackageManager,\n pkg: string,\n version: string,\n isDev: boolean,\n opts: InstallCommandOptions = {},\n): string {\n const spec = `${pkg}@${version}`;\n // Only pnpm needs an explicit workspace-root flag; npm/yarn/bun add to the\n // root package.json without complaint.\n const ws = opts.workspaceRoot && pm === 'pnpm' ? ' -w' : '';\n switch (pm) {\n case 'pnpm':\n return isDev ? `pnpm add${ws} -D ${spec}` : `pnpm add${ws} ${spec}`;\n case 'yarn':\n return isDev ? `yarn add --dev ${spec}` : `yarn add ${spec}`;\n case 'bun':\n return isDev ? `bun add -d ${spec}` : `bun add ${spec}`;\n case 'npm':\n default:\n return isDev ? `npm install --save-dev ${spec}` : `npm install ${spec}`;\n }\n}\n\n/**\n * Check if vibgrate is a devDependency (vs dependency) in the project's package.json.\n */\nasync function isDevDependency(cwd: string): Promise<boolean> {\n try {\n const pkgPath = path.join(cwd, 'package.json');\n const raw = await (await import('node:fs/promises')).readFile(pkgPath, 'utf-8');\n const pkg = JSON.parse(raw) as Record<string, Record<string, string>>;\n return Boolean(pkg.devDependencies?.['@vibgrate/cli']);\n } catch {\n return true; // default to devDep for CLI tools\n }\n}\n\n/**\n * Ask the user to confirm updating at a workspace root, which needs `-w` and\n * writes to the root package.json. Returns false when not attached to a TTY so\n * the aggressive add never runs unattended (e.g. in CI) without an explicit flag.\n */\nasync function confirmWorkspaceRoot(pm: PackageManager): Promise<boolean> {\n if (!(process.stdin.isTTY && process.stdout.isTTY)) return false;\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n return new Promise((resolve) => {\n rl.question(chalk.yellow(`Update the ${pm} workspace root with -w? [y/N]: `), (ans) => {\n rl.close();\n const t = ans.trim().toLowerCase();\n resolve(t === 'y' || t === 'yes');\n });\n });\n}\n\nexport const updateCommand = new Command('update')\n .description('Update vibgrate to the latest version')\n .option('--check', 'Only check for updates, do not install')\n .option('--pm <manager>', 'Package manager to use (npm, pnpm, yarn, bun)')\n .option('--global', 'Update global installation')\n .option('-y, --yes', 'Skip confirmation prompts (e.g. installing at a workspace root)')\n .option('-w, --workspace-root', 'Allow updating the pnpm workspace root (implies --yes for that prompt)')\n .action(\n async (opts: {\n check?: boolean;\n pm?: string;\n global?: boolean;\n yes?: boolean;\n workspaceRoot?: boolean;\n }) => {\n console.log(chalk.dim(`Current version: ${VERSION}`));\n console.log(chalk.dim('Checking npm registry...'));\n\n const latest = await fetchLatestVersion();\n\n if (!latest) {\n console.error(chalk.red('Could not reach the npm registry. Check your network connection.'));\n process.exit(1);\n }\n\n const semver = await import('semver');\n if (!semver.gt(latest, VERSION)) {\n console.log(chalk.green('✔') + ` You are on the latest version (${VERSION}).`);\n return;\n }\n\n console.log(chalk.yellow(`Update available: ${VERSION} → ${latest}`));\n\n if (opts.check) {\n console.log(chalk.dim('Run \"vg update\" to install.'));\n return;\n }\n\n const cwd = process.cwd();\n\n // Detect if running from a global install or explicitly requested global update\n const globalPm = detectGlobalInstall();\n const isGlobal = opts.global || globalPm !== null;\n\n const pm: PackageManager = (opts.pm as PackageManager) || (globalPm ?? (await detectPackageManager(cwd)));\n\n let cmd: string;\n if (isGlobal) {\n cmd = getGlobalUpdateCommand(pm, '@vibgrate/cli', latest);\n console.log(chalk.dim(`Updating global installation with ${pm}: ${cmd}`));\n } else {\n const isDev = await isDevDependency(cwd);\n\n // pnpm refuses `pnpm add` at a workspace root without -w. Detect that up\n // front so we can offer to run the workspace-root-aware command instead of\n // failing with ERR_PNPM_ADDING_TO_ROOT.\n let workspaceRoot = false;\n if (pm === 'pnpm' && (await detectWorkspaceRoot(cwd))) {\n console.log(\n chalk.yellow('Detected a pnpm workspace root.') +\n chalk.dim(' Installing here needs the -w flag and updates the root package.json.'),\n );\n const proceed = opts.yes || opts.workspaceRoot || (await confirmWorkspaceRoot(pm));\n if (!proceed) {\n const rootCmd = getInstallCommand(pm, '@vibgrate/cli', latest, isDev, { workspaceRoot: true });\n console.log(chalk.dim(`Skipped. To update the workspace root, run: ${rootCmd}`));\n console.log(chalk.dim('or re-run \"vg update --yes\" (or --workspace-root) to let vg do it.'));\n return;\n }\n workspaceRoot = true;\n }\n\n cmd = getInstallCommand(pm, '@vibgrate/cli', latest, isDev, { workspaceRoot });\n console.log(chalk.dim(`Using ${pm}: ${cmd}`));\n }\n\n try {\n execSync(cmd, { cwd, stdio: 'inherit' });\n console.log(chalk.green('✔') + ` Updated to @vibgrate/cli@${latest}`);\n } catch {\n console.error(chalk.red(`Update failed. Run manually: ${cmd}`));\n process.exit(1);\n }\n },\n );\n","import * as os from 'node:os';\nimport * as path from 'node:path';\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport {\n runCoreScan,\n projectTypeToVulnEcosystem,\n detectVcs,\n computeRepoFingerprint,\n resolveRepositoryName,\n parseDsn,\n type ScanOptions,\n type ScanArtifact,\n type ProjectType,\n type VulnSeverity,\n} from '../../core-open/index.js';\nimport { pathExists, readJsonFile } from '../utils/fs.js';\nimport { scanStaleness } from '../utils/scan-freshness.js';\nimport { loadAdvancedScanHook } from '../advanced-hook.js';\nimport { VERSION } from '../version.js';\nimport { resolveDsn } from '../credentials.js';\nimport { resolveIngestHost } from './dsn.js';\nimport { dashHostForIngestHost } from '../regions.js';\nimport { resolveCliInvocation } from '../../util/cli-invocation.js';\nimport * as readline from 'node:readline';\nimport { analyzeTree, type SourceEcosystem } from '../planning/usage.js';\nimport { requestFixPlan, parseFixPlanResponse } from '../utils/fix-plan.js';\nimport { renderText, renderMarkdown } from '../planning/render.js';\nimport { estimateDriftScore } from '../planning/expected-drift.js';\nimport { applyPlan, type NpmPackageManager, type WorkspaceTarget } from '../planning/apply.js';\nimport { detectWorkspaceRoot } from './update.js';\nimport type { FixCandidateInput, FixPlanRequest, FixPlanResponse, PlanTier, PlannedUpgrade, UpgradePlan } from '../planning/types.js';\n\nconst SEVERITY_RANK: Record<VulnSeverity, number> = { unknown: 0, low: 1, moderate: 2, high: 3, critical: 4 };\n\n/** Map a scanned project type to the ecosystem id sent to the planner (all ecosystems, not just npm). */\nfunction ecosystemId(type: ProjectType): string {\n return projectTypeToVulnEcosystem(type) ?? type;\n}\n\n/** Which ecosystems we can cheaply read source for, to gather usage + contracts. */\nfunction sourceEcosystem(ecosystem: string): SourceEcosystem {\n if (ecosystem === 'npm') return 'npm';\n if (ecosystem === 'pypi') return 'pypi';\n return 'unknown';\n}\n\ninterface RawCandidate {\n package: string;\n ecosystem: string;\n source: SourceEcosystem;\n from: string | null;\n to: string | null;\n majorsBehind: number | null;\n section?: string;\n}\n\n/** Collect deduped, drifted dependencies across every ecosystem in the scan artifact. */\nfunction collectCandidates(artifact: ScanArtifact): RawCandidate[] {\n const seen = new Set<string>();\n const out: RawCandidate[] = [];\n for (const project of artifact.projects ?? []) {\n const ecosystem = ecosystemId(project.type);\n for (const dep of project.dependencies ?? []) {\n const key = `${ecosystem}\\0${dep.package}`;\n if (seen.has(key)) continue;\n if (!dep.latestStable || dep.latestStable === dep.resolvedVersion) continue;\n if (dep.drift === 'current' || dep.drift === 'unknown') continue;\n seen.add(key);\n out.push({\n package: dep.package,\n ecosystem,\n source: sourceEcosystem(ecosystem),\n from: dep.resolvedVersion,\n to: dep.latestStable,\n majorsBehind: dep.majorsBehind,\n section: dep.section,\n });\n }\n }\n out.sort((a, b) => a.ecosystem.localeCompare(b.ecosystem) || a.package.localeCompare(b.package));\n return out;\n}\n\n/**\n * Runs a drift scan for `vg fix` when no usable prior scan exists. Injectable so\n * tests can exercise the auto-scan decision without a network round-trip; the\n * default runs the real core scan WITHOUT the code map (drift is all `fix`\n * needs), writing JSON quietly to a scratch file so nothing lands on stdout.\n */\nexport type FixScanner = (rootDir: string) => Promise<ScanArtifact>;\n\nconst defaultFixScanner: FixScanner = async (rootDir) => {\n const scratch = path.join(os.tmpdir(), `vg-fix-scan-${process.pid}.json`);\n const scanOpts: ScanOptions = { vibgrateVersion: VERSION, format: 'json', out: scratch, quiet: true, concurrency: 8 };\n const advanced = await loadAdvancedScanHook();\n return runCoreScan(rootDir, scanOpts, advanced);\n};\n\n/**\n * Load the scan artifact `vg fix` plans against, re-scanning when there is no\n * usable prior scan. A scan is re-run when the artifact is **missing** OR when it\n * is **out of date** with the working tree — a manifest edit or a lockfile bump\n * (e.g. from a previous `vg fix`) since the scan means the on-disk drift no\n * longer reflects the repository, so planning against it would upgrade the wrong\n * versions. Freshness is scoped to dependency manifests/lockfiles and fails open\n * (see {@link scanStaleness}).\n */\nexport async function loadArtifact(\n rootDir: string,\n inFile: string,\n scan: FixScanner = defaultFixScanner,\n): Promise<ScanArtifact> {\n const artifactPath = path.isAbsolute(inFile) ? inFile : path.join(rootDir, inFile);\n if (await pathExists(artifactPath)) {\n const staleness = scanStaleness(rootDir, artifactPath);\n if (!staleness.stale) {\n return readJsonFile<ScanArtifact>(artifactPath);\n }\n console.error(\n chalk.dim(\n `Scan is out of date (${staleness.newestChanged ?? 'a dependency manifest'} changed since the last scan) — re-running a drift scan first (code map skipped)…`,\n ),\n );\n } else {\n console.error(chalk.dim('No scan found — running a drift scan first (code map skipped)…'));\n }\n return scan(rootDir);\n}\n\n/** Best-effort, non-sensitive repository identity for dataset association + plan caching. */\nasync function repositoryIdentity(rootDir: string, override?: string): Promise<{ name?: string; vcsSha?: string }> {\n try {\n const vcs = await detectVcs(rootDir);\n const fingerprint = await computeRepoFingerprint(rootDir, vcs);\n const name = override?.trim() || (await resolveRepositoryName(rootDir));\n return { name, vcsSha: fingerprint.vcsSha };\n } catch {\n return { name: override?.trim() || undefined };\n }\n}\n\nexport const fixCommand = new Command('fix')\n .description('Analyse drift and get ranked, risk-tiered upgrade plans from the hosted planner (requires login/DSN; read-only — never edits your project)')\n .argument('[path]', 'Path to analyse', '.')\n .option('--in <file>', 'Scan artifact to read', '.vibgrate/scan_result.json')\n .option('--format <format>', 'Output format (text|json|md)', 'text')\n .option('--dsn <dsn>', 'DSN token (or use VIBGRATE_DSN env / \"vg login\")')\n .option('--region <region>', 'Override data residency region (us, eu)')\n .option('--repository-name <name>', 'Override the repository name recorded for this plan')\n .option('--plan <tier>', 'Apply a specific plan non-interactively (safe|balanced|aggressive)')\n .option('--yes', 'Apply the recommended plan without prompting')\n .option('--dry-run', 'Show what would change without applying')\n .option('--no-apply', 'Only print the plans; never modify the project')\n .option('--fail-on-vulns <severity>', 'Exit non-zero if the recommended plan leaves an advisory at/above this severity unresolved (low|moderate|high|critical)')\n .action(async (targetPath: string, opts: {\n in: string;\n format: string;\n dsn?: string;\n region?: string;\n repositoryName?: string;\n plan?: string;\n yes?: boolean;\n dryRun?: boolean;\n apply?: boolean; // commander maps --no-apply → apply === false\n failOnVulns?: string;\n }) => {\n const rootDir = path.resolve(targetPath);\n if (!(await pathExists(rootDir))) {\n console.error(chalk.red(`Path does not exist: ${rootDir}`));\n process.exit(1);\n }\n\n const failOn = opts.failOnVulns as VulnSeverity | undefined;\n if (failOn && !(failOn in SEVERITY_RANK)) {\n console.error(chalk.red(`Invalid --fail-on-vulns value '${opts.failOnVulns}'. Use one of: low, moderate, high, critical.`));\n process.exit(1);\n }\n\n // `vg fix` is a paid, hosted capability — it needs a DSN. No local planning\n // fallback exists (the planning intelligence is server-side by design).\n const dsn = resolveDsn(opts.dsn);\n if (!dsn) {\n const cli = resolveCliInvocation();\n console.error(chalk.red('vg fix needs a Vibgrate login.'));\n console.error(\n chalk.dim(\n `Run \"${cli} login\" (or set VIBGRATE_DSN / pass --dsn) to analyse upgrades with the hosted planner. ` +\n 'See https://vibgrate.com/cli for details.',\n ),\n );\n process.exit(1);\n }\n const parsed = parseDsn(dsn);\n if (!parsed) {\n console.error(chalk.red('Invalid DSN format. Re-run \"vg login\" or check VIBGRATE_DSN.'));\n process.exit(1);\n }\n\n let host: string;\n try {\n host = opts.region ? resolveIngestHost(opts.region) : parsed.host;\n } catch (e: unknown) {\n console.error(chalk.red(e instanceof Error ? e.message : String(e)));\n process.exit(1);\n }\n\n let artifact: ScanArtifact;\n try {\n artifact = await loadArtifact(rootDir, opts.in);\n } catch (e: unknown) {\n console.error(chalk.red(e instanceof Error ? e.message : String(e)));\n process.exit(1);\n }\n\n const raw = collectCandidates(artifact);\n\n // Gather usage + contracts from local source (never leaves the machine except\n // as the aggregate counts/symbols the planner needs). One bounded walk.\n const usage = analyzeTree(\n rootDir,\n raw.filter((c) => c.source !== 'unknown').map((c) => ({ name: c.package, ecosystem: c.source })),\n );\n\n const candidates: FixCandidateInput[] = raw.map((c) => {\n const u = usage.get(c.package);\n return {\n package: c.package,\n ecosystem: c.ecosystem,\n currentVersion: c.from,\n latestVersion: c.to,\n majorsBehind: c.majorsBehind,\n section: c.section,\n ...(u && (u.importSites > 0 || u.filesTouched > 0)\n ? { usage: { importSites: u.importSites, filesTouched: u.filesTouched } }\n : {}),\n ...(u && u.contracts.length ? { contracts: u.contracts } : {}),\n };\n });\n\n const request: FixPlanRequest = {\n cliVersion: VERSION,\n repository: await repositoryIdentity(rootDir, opts.repositoryName),\n candidates,\n };\n\n let response: FixPlanResponse;\n try {\n const { response: httpResponse } = await requestFixPlan({\n scheme: parsed.scheme,\n host,\n keyId: parsed.keyId,\n secret: parsed.secret,\n request,\n timestamp: String(Date.now()),\n });\n if (!httpResponse.ok) {\n handleHttpError(httpResponse, parsed.workspaceId, host);\n return; // handleHttpError exits, but keep the type-checker happy.\n }\n response = await parseFixPlanResponse(httpResponse);\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : String(e);\n console.error(chalk.red(`Could not reach the upgrade planner: ${msg}`));\n console.error(chalk.dim('Check your connection and try again, or see https://vibgrate.com/help.'));\n process.exit(1);\n }\n\n if (response.status === 'error') {\n console.error(chalk.red(response.error ?? 'The planner returned an error.'));\n if (response.requestId) console.error(chalk.dim(` (ref ${response.requestId})`));\n process.exit(1);\n }\n\n // Augment each plan with an estimated post-upgrade DriftScore (client-side).\n const currentDrift = artifact.drift?.score;\n if (typeof currentDrift === 'number') {\n response.currentDriftScore = currentDrift;\n for (const plan of response.plans) {\n const upgraded = new Set(plan.upgrades.map((u) => u.package));\n const expected = estimateDriftScore(artifact, upgraded);\n plan.expectedDriftScore = expected;\n plan.driftDelta = expected - currentDrift;\n }\n }\n\n emit(response, opts.format);\n\n // Apply flow (text mode only; --no-apply / json / md are report-only).\n if (opts.format === 'text' && opts.apply !== false) {\n await runApplyFlow(rootDir, artifact, response, opts);\n }\n\n if (failOn) {\n // Advisories the *recommended* plan does not remediate = the estate's open\n // advisories minus what the recommended plan fixes, evaluated by severity.\n const recommended = response.plans.find((p) => p.tier === response.recommended);\n const threshold = SEVERITY_RANK[failOn];\n let stillOpen = 0;\n for (const sev of Object.keys(SEVERITY_RANK) as VulnSeverity[]) {\n if (SEVERITY_RANK[sev] < threshold) continue;\n const open = response.unresolved.bySeverity[sev] ?? 0;\n // Anything the recommended plan itself does not fix also counts as open.\n const notFixedByRecommended =\n (response.plans.find((p) => p.tier === 'aggressive')?.fixes.bySeverity[sev] ?? 0) -\n (recommended?.fixes.bySeverity[sev] ?? 0);\n stillOpen += open + Math.max(0, notFixedByRecommended);\n }\n if (stillOpen > 0) {\n console.error(\n chalk.red(`\\nFailing: the recommended plan leaves ${stillOpen} advisory(ies) at/above ${failOn} unresolved.`),\n );\n process.exit(2);\n }\n }\n });\n\n/** Turn a non-2xx planner response into an actionable, non-leaky error and exit. */\nfunction handleHttpError(response: Response, workspaceId: string, host: string): never {\n const upgradeUrl = `https://${dashHostForIngestHost(host)}/${workspaceId}`;\n if (response.status === 401 || response.status === 403) {\n console.error(chalk.red('Not authorised. Your DSN may be invalid or lack access to this workspace.'));\n console.error(chalk.dim('Re-run \"vg login\" or check VIBGRATE_DSN.'));\n process.exit(1);\n }\n if (response.status === 402) {\n console.error(chalk.red('vg fix is a paid capability that is not enabled on your current plan.'));\n console.error(chalk.dim(`Upgrade to enable the hosted upgrade planner: ${upgradeUrl}`));\n process.exit(1);\n }\n if (response.status === 429) {\n console.error(chalk.red('Rate limited by the planner. Wait a moment and try again.'));\n process.exit(1);\n }\n console.error(chalk.red(`The planner returned HTTP ${response.status}.`));\n console.error(chalk.dim('Try again shortly, or see https://vibgrate.com/help.'));\n process.exit(1);\n}\n\nfunction emit(report: FixPlanResponse, format: string): void {\n switch (format) {\n case 'json':\n console.log(JSON.stringify(report, null, 2));\n break;\n case 'md':\n console.log(renderMarkdown(report));\n break;\n case 'text':\n default:\n console.log(renderText(report));\n break;\n }\n}\n\n/** Normalise a project's scan path to a directory relative to the repo root. */\nfunction relProjectDir(rootDir: string, projectPath: string): string {\n const rel = path.isAbsolute(projectPath) ? path.relative(rootDir, projectPath) : projectPath;\n return rel === '' ? '.' : rel;\n}\n\n/**\n * Build a resolver mapping each upgrade to the workspace manifest(s) that\n * actually declare it, so the pin command edits the right `package.json` (and\n * a monorepo dep never lands in the root manifest by accident).\n *\n * Ownership is keyed by `${ecosystem}\\0${package}` — identical to how\n * {@link collectCandidates} keys candidates — but drawn from *every* project in\n * the artifact, not deduped, so a dependency declared in several workspace\n * packages resolves to all of them. Dirs are sorted for deterministic output.\n * A dependency with no located owner falls back to the root manifest (with\n * `-w` when the root is a pnpm workspace, so the command no longer crashes).\n */\nexport async function buildTargetResolver(\n rootDir: string,\n artifact: ScanArtifact,\n): Promise<(upgrade: PlannedUpgrade) => WorkspaceTarget[]> {\n const rootIsWorkspace = await detectWorkspaceRoot(rootDir);\n const owners = new Map<string, Set<string>>();\n for (const project of artifact.projects ?? []) {\n const ecosystem = ecosystemId(project.type);\n const dir = relProjectDir(rootDir, project.path);\n for (const dep of project.dependencies ?? []) {\n const key = `${ecosystem}\\0${dep.package}`;\n (owners.get(key) ?? owners.set(key, new Set()).get(key)!).add(dir);\n }\n }\n const rootFallback: WorkspaceTarget[] = [{ dir: '.', isWorkspaceRoot: rootIsWorkspace }];\n return (upgrade) => {\n const dirs = owners.get(`${upgrade.ecosystem}\\0${upgrade.package}`);\n if (!dirs || dirs.size === 0) return rootFallback;\n return [...dirs]\n .sort((a, b) => a.localeCompare(b))\n .map((dir) => ({ dir, isWorkspaceRoot: dir === '.' && rootIsWorkspace }));\n };\n}\n\n/** The npm-family package manager to drive npm upgrades, from the scan. */\nfunction npmPackageManager(artifact: ScanArtifact): NpmPackageManager {\n for (const p of artifact.projects ?? []) {\n if ((p.type === 'node' || p.type === 'typescript') && p.packageManager) {\n const pm = p.packageManager;\n if (pm === 'pnpm' || pm === 'yarn' || pm === 'bun' || pm === 'npm') return pm;\n }\n }\n return 'npm';\n}\n\n/** Interactive plan picker (TTY). Resolves to the chosen tier, or null to cancel. */\nfunction promptPlanSelection(response: FixPlanResponse): Promise<PlanTier | null> {\n const plans = response.plans.filter((p) => p.upgrades.length > 0);\n console.log(chalk.bold('\\nSelect a plan to apply:'));\n plans.forEach((p, i) => {\n const rec = p.tier === response.recommended ? chalk.green(' (recommended)') : '';\n const drift =\n typeof p.expectedDriftScore === 'number' && typeof response.currentDriftScore === 'number'\n ? ` · DriftScore ${response.currentDriftScore}→${p.expectedDriftScore}`\n : '';\n console.log(` ${i + 1}) ${chalk.bold(p.label)}${rec} risk ${p.riskScore}/100 · ${p.upgrades.length} upgrade(s)${drift}`);\n });\n const defaultIdx = plans.findIndex((p) => p.tier === response.recommended);\n const def = defaultIdx >= 0 ? defaultIdx + 1 : 1;\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n return new Promise((resolve) => {\n rl.question(`Plan [1-${plans.length}, default ${def}, q to cancel]: `, (ans) => {\n rl.close();\n const t = ans.trim().toLowerCase();\n if (t === 'q' || t === 'quit') return resolve(null);\n const n = t === '' ? def : Number.parseInt(t, 10);\n if (!Number.isInteger(n) || n < 1 || n > plans.length) return resolve(null);\n resolve(plans[n - 1].tier);\n });\n });\n}\n\n/** Choose a plan (flags → single-plan → interactive → non-interactive default), apply it, and report. */\nasync function runApplyFlow(\n rootDir: string,\n artifact: ScanArtifact,\n response: FixPlanResponse,\n opts: { plan?: string; yes?: boolean; dryRun?: boolean },\n): Promise<void> {\n const nonEmpty = response.plans.filter((p) => p.upgrades.length > 0);\n if (nonEmpty.length === 0) {\n console.log(chalk.green('\\n✔ Nothing to upgrade — every tracked dependency is current.'));\n return;\n }\n\n let chosen: UpgradePlan | undefined;\n if (opts.plan) {\n chosen = response.plans.find((p) => p.tier === opts.plan);\n if (!chosen) {\n console.error(chalk.red(`Unknown plan '${opts.plan}'. Use safe, balanced, or aggressive.`));\n process.exit(1);\n }\n } else if (nonEmpty.length === 1) {\n chosen = nonEmpty[0];\n } else if (opts.yes) {\n chosen = response.plans.find((p) => p.tier === response.recommended) ?? nonEmpty[0];\n } else if (process.stdin.isTTY && process.stdout.isTTY) {\n const tier = await promptPlanSelection(response);\n if (!tier) {\n console.log(chalk.dim('No plan applied.'));\n return;\n }\n chosen = response.plans.find((p) => p.tier === tier);\n } else {\n console.log(chalk.dim('\\nMultiple plans available — re-run with --plan <tier> or --yes to apply, or --dry-run to preview.'));\n return;\n }\n if (!chosen || chosen.upgrades.length === 0) {\n console.log(chalk.dim('Selected plan has no upgrades.'));\n return;\n }\n\n const pm = npmPackageManager(artifact);\n const resolveTargets = await buildTargetResolver(rootDir, artifact);\n const results = applyPlan(rootDir, chosen.upgrades, { dryRun: opts.dryRun, packageManager: pm, resolveTargets });\n\n if (opts.dryRun) {\n console.log(chalk.bold(`\\nDry run — ${chosen.label} plan (${chosen.upgrades.length} upgrade(s)):`));\n for (const r of results) {\n if (r.status === 'manual') console.log(chalk.yellow(` ⚠ ${r.package}: ${r.detail}`));\n else console.log(chalk.dim(` ${r.package}: ${r.detail}`));\n }\n if (typeof chosen.expectedDriftScore === 'number') {\n console.log(chalk.dim(`Expected DriftScore after apply: ~${chosen.expectedDriftScore} (was ${response.currentDriftScore ?? '?'}).`));\n }\n return;\n }\n\n const applied = results.filter((r) => r.status === 'applied');\n const failed = results.filter((r) => r.status === 'failed');\n const manual = results.filter((r) => r.status === 'manual');\n\n console.log(chalk.bold(`\\nApplied the ${chosen.label} plan:`));\n console.log(\n chalk.green(` ✔ ${applied.length} upgraded`) +\n (failed.length ? chalk.red(` ✖ ${failed.length} failed`) : '') +\n (manual.length ? chalk.yellow(` ⚠ ${manual.length} need manual work`) : ''),\n );\n for (const r of failed) console.log(chalk.red(` ✖ ${r.package} → ${r.to}: ${r.detail ?? 'failed'}`));\n for (const r of manual) console.log(chalk.yellow(` ⚠ ${r.package} → ${r.to}: ${r.detail}`));\n if (typeof chosen.expectedDriftScore === 'number' && typeof response.currentDriftScore === 'number') {\n const delta = chosen.expectedDriftScore - response.currentDriftScore;\n console.log(\n ` Expected DriftScore: ${response.currentDriftScore} → ~${chosen.expectedDriftScore} (${delta <= 0 ? '' : '+'}${delta}). ` +\n 'Re-run `vg` to confirm the actual score.',\n );\n }\n if (failed.length) process.exitCode = 2;\n}\n","import chalk from 'chalk';\nimport type { ScanArtifact, ExtendedScanResults, InventoryItem, ServiceDependencyItem, ArchitectureResult } from '../types.js';\nimport { VERSION } from '../version.js';\nimport { driftBar } from '../../core-open/ui/bar.js';\nimport { titleBox } from '../../core-open/ui/box.js';\n\nexport function formatText(artifact: ScanArtifact): string {\n const lines: string[] = [];\n\n // Brand colours from docs/design logo bundle\n const teal = chalk.hex('#3FB0A4');\n const mint = chalk.hex('#4FE3C1');\n\n lines.push('');\n lines.push(' ' + teal('╭──────╮') + mint('➜'));\n lines.push(' ' + chalk.dim('┤') + teal('│') + ' ' + mint('◼') + ' ' + mint('◼') + ' ' + teal('│') + chalk.dim('├') + ' ' + chalk.bold.white('vibgrate'));\n lines.push(' ' + chalk.dim('┤') + teal('│') + ' ' + chalk.dim('▁▁') + ' ' + teal('│') + chalk.dim('├') + ' ' + chalk.dim(`Code Intelligence Engine v${VERSION}`));\n lines.push(' ' + teal('╰──────╯'));\n lines.push('');\n lines.push(...titleBox('Vibgrate Drift Report', teal));\n lines.push('');\n\n // Per-project\n for (const project of artifact.projects) {\n lines.push(chalk.bold(` ── ${project.name} `) + chalk.dim(`(${project.type}) ${project.path}`));\n\n if (project.runtime) {\n const behindStr = project.runtimeMajorsBehind !== undefined && project.runtimeMajorsBehind > 0\n ? chalk.yellow(` (${project.runtimeMajorsBehind} major${project.runtimeMajorsBehind > 1 ? 's' : ''} behind)`)\n : chalk.green(' (current)');\n lines.push(` Runtime: ${project.runtime}${behindStr}`);\n }\n\n if (project.targetFramework) {\n lines.push(` Target: ${project.targetFramework}`);\n }\n\n if (project.frameworks.length > 0) {\n lines.push(' Frameworks:');\n for (const fw of project.frameworks) {\n const lag = fw.majorsBehind !== null\n ? (fw.majorsBehind === 0 ? chalk.green('current') : chalk.yellow(`${fw.majorsBehind} behind`))\n : chalk.dim('unknown');\n lines.push(` ${fw.name}: ${fw.currentVersion ?? '?'} → ${fw.latestVersion ?? '?'} (${lag})`);\n }\n }\n\n // Dependency buckets\n const b = project.dependencyAgeBuckets;\n const total = b.current + b.oneBehind + b.twoPlusBehind + b.unknown;\n if (total > 0) {\n lines.push(' Dependencies:');\n lines.push(` ${chalk.green(`${b.current} current`)} ${chalk.yellow(`${b.oneBehind} 1-behind`)} ${chalk.red(`${b.twoPlusBehind} 2+ behind`)} ${chalk.dim(`${b.unknown} unknown`)}`);\n }\n\n lines.push('');\n }\n\n if (artifact.delta !== undefined) {\n // Lower is better: a positive delta means drift increased (worse → red),\n // a negative delta means drift decreased (improved → green).\n const deltaStr = artifact.delta > 0\n ? chalk.red(`+${artifact.delta}`)\n : artifact.delta < 0\n ? chalk.green(`${artifact.delta}`)\n : chalk.dim('0');\n lines.push(chalk.bold(' Drift Delta: ') + deltaStr + ' (vs baseline)');\n lines.push('');\n }\n\n // Extended scan results\n if (artifact.extended) {\n lines.push(...formatExtended(artifact.extended));\n }\n\n // Findings\n if (artifact.findings.length > 0) {\n const errors = artifact.findings.filter((f) => f.level === 'error');\n const warnings = artifact.findings.filter((f) => f.level === 'warning');\n const notes = artifact.findings.filter((f) => f.level === 'note');\n const summary = [\n errors.length > 0 ? chalk.red(`${errors.length} error${errors.length !== 1 ? 's' : ''}`) : '',\n warnings.length > 0 ? chalk.yellow(`${warnings.length} warning${warnings.length !== 1 ? 's' : ''}`) : '',\n notes.length > 0 ? chalk.blue(`${notes.length} note${notes.length !== 1 ? 's' : ''}`) : '',\n ].filter(Boolean).join(chalk.dim(', '));\n\n lines.push(chalk.bold.underline(` Findings`) + chalk.dim(` (${summary})`));\n for (const f of artifact.findings) {\n const icon = f.level === 'error' ? chalk.red('✖') : f.level === 'warning' ? chalk.yellow('⚠') : chalk.blue('ℹ');\n lines.push(` ${icon} ${f.message}`);\n lines.push(chalk.dim(` ${f.ruleId} in ${f.location}`));\n }\n lines.push('');\n }\n\n // Priority actions\n const actions = generatePriorityActions(artifact);\n if (actions.length > 0) {\n lines.push(...titleBox('Top Priority Actions'));\n lines.push('');\n for (let i = 0; i < actions.length; i++) {\n const a = actions[i];\n const num = chalk.bold.cyan(` ${i + 1}.`);\n lines.push(`${num} ${chalk.bold(a.title)}`);\n lines.push(chalk.dim(` ${a.explanation}`));\n if (a.impact) lines.push(` Impact: ${chalk.green(a.impact)}`);\n lines.push('');\n }\n }\n\n // Architecture Layers (just above drift summary)\n if (artifact.extended?.architecture) {\n lines.push(...formatArchitectureDiagram(artifact.extended.architecture));\n }\n\n // NOTE: Mermaid diagrams (relationshipDiagram) are intentionally not rendered in CLI output.\n // They are still included in JSON output for dashboard/API consumption.\n\n if (artifact.solutions && artifact.solutions.length > 0) {\n lines.push(...titleBox('Solution Drift Summary'));\n lines.push('');\n for (const solution of artifact.solutions) {\n const solScore = solution.drift?.score;\n const color = typeof solScore === 'number' ? (solScore <= 30 ? chalk.green : solScore <= 60 ? chalk.yellow : chalk.red) : chalk.dim;\n lines.push(` • ${solution.name} (${solution.projectPaths.length} projects) — ${typeof solScore === 'number' ? color(`${solScore}/100`) : chalk.dim('n/a')}`);\n }\n lines.push('');\n }\n\n // Score summary — drift score is lower-is-better (0 = no drift).\n const scoreColor = artifact.drift.score <= 30 ? chalk.green :\n artifact.drift.score <= 60 ? chalk.yellow : chalk.red;\n\n lines.push(...titleBox('DriftScore Summary'));\n lines.push('');\n lines.push(chalk.bold(' DriftScore: ') + scoreColor.bold(`${artifact.drift.score}/100`));\n lines.push(chalk.bold(' Risk Level: ') + riskBadge(artifact.drift.riskLevel));\n lines.push(chalk.bold(' Projects: ') + `${artifact.projects.length}`);\n\n if (artifact.vcs) {\n const vcsParts: string[] = [artifact.vcs.type];\n if (artifact.vcs.branch) vcsParts.push(artifact.vcs.branch);\n if (artifact.vcs.shortSha) vcsParts.push(chalk.dim(artifact.vcs.shortSha));\n lines.push(chalk.bold(' VCS: ') + vcsParts.join(' '));\n }\n\n lines.push('');\n\n // Score breakdown\n const m = new Set(artifact.drift.measured ?? ['runtime', 'framework', 'dependency', 'eol']);\n lines.push(' ' + chalk.bold.underline('Score Breakdown'));\n lines.push(` Runtime: ${m.has('runtime') ? scoreBar(artifact.drift.components.runtimeScore) : chalk.dim('n/a')}`);\n lines.push(` Frameworks: ${m.has('framework') ? scoreBar(artifact.drift.components.frameworkScore) : chalk.dim('n/a')}`);\n lines.push(` Dependencies: ${m.has('dependency') ? scoreBar(artifact.drift.components.dependencyScore) : chalk.dim('n/a')}`);\n lines.push(` EOL Risk: ${m.has('eol') ? scoreBar(artifact.drift.components.eolScore) : chalk.dim('n/a')}`);\n lines.push('');\n\n const scannedParts: string[] = [`Scanned at ${artifact.timestamp}`];\n if (artifact.durationMs !== undefined) {\n const secs = (artifact.durationMs / 1000).toFixed(1);\n scannedParts.push(`${secs}s`);\n }\n if (artifact.filesScanned !== undefined) {\n scannedParts.push(`${artifact.filesScanned} file${artifact.filesScanned !== 1 ? 's' : ''} scanned`);\n }\n if (artifact.treeSummary) {\n scannedParts.push(`${artifact.treeSummary.totalFiles.toLocaleString()} workspace files`);\n scannedParts.push(`${artifact.treeSummary.totalDirs.toLocaleString()} dirs`);\n }\n lines.push(chalk.dim(` ${scannedParts.join(' · ')}`));\n lines.push('');\n\n return lines.join('\\n');\n}\n\nfunction riskBadge(level: string): string {\n switch (level) {\n case 'low': return chalk.bgGreen.black(' LOW ');\n case 'moderate': return chalk.bgYellow.black(' MODERATE ');\n case 'high': return chalk.bgRed.white(' HIGH ');\n default: return level;\n }\n}\n\nfunction scoreBar(score: number): string {\n // Sub-cell gradient fill (green → the score's own risk colour) for a smoother read.\n return driftBar(score, 20);\n}\n\n// ── Extended results summary ──\n\nconst CATEGORY_LABELS: Record<string, string> = {\n frontend: 'Frontend',\n metaFrameworks: 'Meta-frameworks',\n bundlers: 'Bundlers',\n css: 'CSS / UI',\n backend: 'Backend',\n orm: 'ORM / Database',\n testing: 'Testing',\n lintFormat: 'Lint & Format',\n apiMessaging: 'API & Messaging',\n observability: 'Observability',\n payment: 'Payment',\n auth: 'Auth',\n email: 'Email',\n cloud: 'Cloud',\n databases: 'Databases',\n messaging: 'Messaging',\n crm: 'CRM & Comms',\n storage: 'Storage',\n search: 'Search & AI',\n};\n\nfunction formatExtended(ext: ExtendedScanResults): string[] {\n const lines: string[] = [];\n\n // ── Tooling Inventory ──\n if (ext.toolingInventory) {\n const inv = ext.toolingInventory;\n const categories = Object.entries(inv).filter(([, items]) => items.length > 0);\n if (categories.length > 0) {\n lines.push(chalk.bold.underline(' Tech Stack'));\n for (const [cat, items] of categories) {\n const label = CATEGORY_LABELS[cat] ?? cat;\n const names = (items as InventoryItem[]).map((i: InventoryItem) => chalk.white(i.name)).join(chalk.dim(', '));\n lines.push(` ${chalk.cyan(label)}: ${names}`);\n }\n lines.push('');\n }\n }\n\n // ── Service Dependencies ──\n if (ext.serviceDependencies) {\n const svc = ext.serviceDependencies;\n const categories = Object.entries(svc).filter(([, items]) => items.length > 0);\n if (categories.length > 0) {\n lines.push(chalk.bold.underline(' Services & Integrations'));\n for (const [cat, items] of categories) {\n const label = CATEGORY_LABELS[cat] ?? cat;\n const names = (items as ServiceDependencyItem[]).map((i: ServiceDependencyItem) => {\n const ver = i.version ? chalk.dim(` ${i.version}`) : '';\n return chalk.white(i.name) + ver;\n }).join(chalk.dim(', '));\n lines.push(` ${chalk.cyan(label)}: ${names}`);\n }\n lines.push('');\n }\n }\n\n // ── Breaking Change Exposure ──\n if (ext.breakingChangeExposure) {\n const bc = ext.breakingChangeExposure;\n if (bc.deprecatedPackages.length > 0 || bc.legacyPolyfills.length > 0) {\n lines.push(chalk.bold.underline(' Breaking Change Exposure'));\n\n const exposureColor = bc.exposureScore >= 40 ? chalk.red :\n bc.exposureScore >= 20 ? chalk.yellow : chalk.green;\n lines.push(` Exposure Score: ${exposureColor.bold(`${bc.exposureScore}/100`)}`);\n\n if (bc.deprecatedPackages.length > 0) {\n lines.push(` ${chalk.red('Deprecated')}: ${bc.deprecatedPackages.map((p) => chalk.dim(p)).join(', ')}`);\n }\n if (bc.legacyPolyfills.length > 0) {\n lines.push(` ${chalk.yellow('Polyfills')}: ${bc.legacyPolyfills.map((p) => chalk.dim(p)).join(', ')}`);\n }\n if (bc.peerConflictsDetected) {\n lines.push(` ${chalk.red('⚠')} Peer dependency conflicts detected`);\n }\n lines.push(` Recommendation: ${chalk.bold(bc.overallRecommendation)}`);\n\n const projectsWithPlans = bc.projectIntelligence.filter((p) => p.packages.length > 0).slice(0, 3);\n if (projectsWithPlans.length > 0) {\n lines.push(' Major Upgrade Intelligence:');\n for (const p of projectsWithPlans) {\n lines.push(` - ${p.project} (${p.recommendation})`);\n for (const pkg of p.packages.slice(0, 2)) {\n lines.push(` · ${pkg.package} ${pkg.currentVersion ?? '?'} → ${pkg.targetVersion ?? '?'} | touched ~${pkg.usage.touchedPercent}% | ${pkg.automatable}`);\n }\n }\n }\n lines.push('');\n }\n }\n\n // ── TypeScript Modernity ──\n if (ext.tsModernity && ext.tsModernity.typescriptVersion) {\n const ts = ext.tsModernity;\n lines.push(chalk.bold.underline(' TypeScript'));\n const parts: string[] = [];\n parts.push(`v${ts.typescriptVersion}`);\n if (ts.strict === true) parts.push(chalk.green('strict ✔'));\n else if (ts.strict === false) parts.push(chalk.yellow('strict ✖'));\n if (ts.moduleType) parts.push(ts.moduleType.toUpperCase());\n if (ts.target) parts.push(`target: ${ts.target}`);\n lines.push(` ${parts.join(chalk.dim(' · '))}`);\n lines.push('');\n }\n\n // ── Build & Deploy ──\n if (ext.buildDeploy) {\n const bd = ext.buildDeploy;\n const hasSomething = bd.ci.length > 0 || bd.docker.dockerfileCount > 0 || bd.packageManagers.length > 0;\n if (hasSomething) {\n lines.push(chalk.bold.underline(' Build & Deploy'));\n if (bd.ci.length > 0) lines.push(` CI: ${bd.ci.join(', ')}`);\n if (bd.docker.dockerfileCount > 0) {\n lines.push(` Docker: ${bd.docker.dockerfileCount} Dockerfile${bd.docker.dockerfileCount !== 1 ? 's' : ''} (${bd.docker.baseImages.join(', ')})`);\n }\n if (bd.packageManagers.length > 0) lines.push(` Package Managers: ${bd.packageManagers.join(', ')}`);\n if (bd.monorepoTools.length > 0) lines.push(` Monorepo: ${bd.monorepoTools.join(', ')}`);\n if (bd.iac.length > 0) lines.push(` IaC: ${bd.iac.join(', ')}`);\n lines.push('');\n }\n }\n\n\n\n // ── Product Purpose Evidence ──\n if (ext.uiPurpose) {\n const up = ext.uiPurpose;\n lines.push(chalk.bold.underline(' Product Purpose Signals'));\n lines.push(` Frameworks: ${up.detectedFrameworks.length > 0 ? up.detectedFrameworks.join(', ') : chalk.dim('unknown')}`);\n lines.push(` Evidence: ${up.topEvidence.length}${up.capped ? chalk.dim(` of ${up.evidenceCount} (capped)`) : ''}`);\n\n const top = up.topEvidence.slice(0, 8);\n if (top.length > 0) {\n lines.push(' Top Signals:');\n for (const item of top) {\n lines.push(` - [${item.kind}] ${item.value} ${chalk.dim(`(${item.file})`)}`);\n }\n }\n\n if (up.unknownSignals.length > 0) {\n lines.push(' Unknowns:');\n for (const u of up.unknownSignals.slice(0, 4)) {\n lines.push(` - ${chalk.yellow(u)}`);\n }\n }\n\n lines.push('');\n }\n\n // ── Security Posture (compact) ──\n if (ext.securityPosture) {\n const sec = ext.securityPosture;\n lines.push(chalk.bold.underline(' Security Posture'));\n const checks: string[] = [];\n checks.push(sec.lockfilePresent ? chalk.green('Lockfile ✔') : chalk.red('Lockfile ✖'));\n checks.push(sec.gitignoreCoversEnv ? chalk.green('.env ✔') : chalk.red('.env ✖'));\n checks.push(sec.gitignoreCoversNodeModules ? chalk.green('node_modules ✔') : chalk.yellow('node_modules ✖'));\n if (sec.multipleLockfileTypes) checks.push(chalk.yellow('Multiple lockfiles ⚠'));\n if (sec.envFilesTracked) checks.push(chalk.red('Env files tracked ✖'));\n lines.push(` ${checks.join(chalk.dim(' · '))}`);\n lines.push('');\n }\n // ── Platform Matrix (compact) ──\n if (ext.platformMatrix) {\n const pm = ext.platformMatrix;\n if (pm.nativeModules.length > 0 || pm.dockerBaseImages.length > 0) {\n lines.push(chalk.bold.underline(' Platform'));\n if (pm.nativeModules.length > 0) {\n lines.push(` Native modules: ${pm.nativeModules.map((m) => chalk.dim(m)).join(', ')}`);\n }\n if (pm.osAssumptions.length > 0) {\n lines.push(` OS assumptions: ${pm.osAssumptions.join(', ')}`);\n }\n lines.push('');\n }\n }\n\n\n // ── Code Quality (compact) ──\n if (ext.codeQuality) {\n const cq = ext.codeQuality;\n lines.push(chalk.bold.underline(' Code Quality'));\n lines.push(` Files: ${chalk.white(`${cq.filesAnalyzed}`)} · Functions: ${chalk.white(`${cq.functionsAnalyzed}`)} · Avg complexity: ${chalk.white(`${cq.avgCyclomaticComplexity}`)} · Avg length: ${chalk.white(`${cq.avgFunctionLength}`)} lines`);\n lines.push(` Max nesting: ${cq.maxNestingDepth} · Circular deps: ${cq.circularDependencies} · Dead code: ${cq.deadCodePercent}%`);\n if (cq.godFiles.length > 0) {\n const preview = cq.godFiles.slice(0, 3).map((f) => `${f.path} (${f.lines} lines)`).join(', ');\n lines.push(` ${chalk.yellow('God files')}: ${preview}`);\n }\n lines.push('');\n }\n // ── Dependency Graph (compact) ──\n if (ext.dependencyGraph) {\n const dg = ext.dependencyGraph;\n if (dg.lockfileType) {\n lines.push(chalk.bold.underline(' Dependency Graph'));\n lines.push(` ${dg.lockfileType}: ${chalk.white(`${dg.totalUnique}`)} unique, ${chalk.white(`${dg.totalInstalled}`)} installed`);\n if (dg.duplicatedPackages.length > 0) {\n lines.push(` ${chalk.yellow(`${dg.duplicatedPackages.length} duplicated`)} packages`);\n }\n if (dg.phantomDependencies.length > 0) {\n lines.push(` ${chalk.red(`${dg.phantomDependencies.length} phantom`)} dependencies`);\n }\n lines.push('');\n }\n }\n\n return lines;\n}\n\n// ── Architecture layer diagram ──\n\ninterface PriorityAction {\n title: string;\n explanation: string;\n impact?: string;\n severity: number;\n}\n\nfunction formatArchitectureDiagram(arch: ArchitectureResult): string[] {\n const lines: string[] = [];\n lines.push(...titleBox('Architecture Layers'));\n lines.push('');\n lines.push(chalk.bold(' Archetype: ') + `${arch.archetype}` + chalk.dim(` (${Math.round(arch.archetypeConfidence * 100)}% confidence)`));\n lines.push(` Files classified: ${arch.totalClassified}` + (arch.unclassified > 0 ? chalk.dim(` (${arch.unclassified} unclassified)`) : ''));\n lines.push('');\n if (arch.layers.length > 0) {\n for (const layer of arch.layers) {\n const risk = layer.riskLevel === 'none' ? chalk.dim('none') : layer.riskLevel === 'low' ? chalk.green('low') : layer.riskLevel === 'moderate' ? chalk.yellow('moderate') : chalk.red('high');\n lines.push(` ${chalk.bold(layer.layer)} ${layer.fileCount} file${layer.fileCount !== 1 ? 's' : ''} drift ${scoreBar(layer.driftScore)} risk ${risk}`);\n }\n lines.push('');\n }\n return lines;\n}\n\nfunction generatePriorityActions(artifact: ScanArtifact): PriorityAction[] {\n const actions: PriorityAction[] = [];\n\n // 1. EOL runtimes (highest priority)\n const eolProjects = artifact.projects.filter(\n (p) => p.runtimeMajorsBehind !== undefined && p.runtimeMajorsBehind >= 3,\n );\n if (eolProjects.length > 0) {\n const names = eolProjects.map((p) => p.name).join(', ');\n let detail = `End-of-life runtimes no longer receive security patches and block ecosystem upgrades.`;\n const fileLines: string[] = [];\n for (const p of eolProjects) {\n fileLines.push(`\\n ./${p.path}`);\n fileLines.push(`\\n ${p.runtime} → ${p.runtimeLatest} (${p.runtimeMajorsBehind} major${p.runtimeMajorsBehind! > 1 ? 's' : ''} behind)`);\n }\n detail += fileLines.join('');\n actions.push({\n title: `Upgrade EOL runtime${eolProjects.length > 1 ? 's' : ''} in ${names}`,\n explanation: detail,\n impact: `−${Math.min(eolProjects.length * 10, 30)} drift points (runtime & EOL scores)`,\n severity: 100,\n });\n }\n\n // 2. Severely outdated frameworks (3+ majors behind)\n const severeFrameworks: { name: string; fw: string; behind: number; project: string; projectPath: string }[] = [];\n for (const p of artifact.projects) {\n for (const fw of p.frameworks) {\n if (fw.majorsBehind !== null && fw.majorsBehind >= 3) {\n severeFrameworks.push({ name: fw.name, fw: `${fw.currentVersion} → ${fw.latestVersion}`, behind: fw.majorsBehind, project: p.name, projectPath: p.path });\n }\n }\n }\n if (severeFrameworks.length > 0) {\n const worst = severeFrameworks.sort((a, b) => b.behind - a.behind)[0];\n const others = severeFrameworks.length > 1 ? ` (+${severeFrameworks.length - 1} more)` : '';\n let detail = `${worst.behind} major versions behind. Major framework drift increases breaking change risk and blocks access to security fixes and performance improvements.`;\n const fileLines: string[] = [];\n let shown = 0;\n for (const sf of severeFrameworks) {\n if (shown >= 8) break;\n fileLines.push(`\\n ./${sf.projectPath}`);\n fileLines.push(`\\n ${sf.name}: ${sf.fw} (${sf.behind} major${sf.behind > 1 ? 's' : ''} behind)`);\n shown++;\n }\n const remaining = severeFrameworks.length - shown;\n detail += fileLines.join('');\n if (remaining > 0) detail += `\\n ... and ${remaining} more`;\n actions.push({\n title: `Upgrade ${worst.name} ${worst.fw} in ${worst.project}${others}`,\n explanation: detail,\n impact: `−5–15 drift points`,\n severity: 90,\n });\n }\n\n // 3. High dependency rot (>40% 2+ behind)\n for (const p of artifact.projects) {\n const b = p.dependencyAgeBuckets;\n const total = b.current + b.oneBehind + b.twoPlusBehind;\n if (total === 0) continue;\n const twoPlusPct = Math.round((b.twoPlusBehind / total) * 100);\n if (twoPlusPct >= 40) {\n let detail = `${b.twoPlusBehind} of ${total} dependencies are 2+ majors behind. Run \\`npm outdated\\` and prioritise packages with known CVEs or breaking API changes.`;\n\n // Show the worst offenders with file paths and versions\n const worstDeps = p.dependencies\n .filter((d) => d.majorsBehind !== null && d.majorsBehind >= 2)\n .sort((a, b2) => (b2.majorsBehind ?? 0) - (a.majorsBehind ?? 0));\n if (worstDeps.length > 0) {\n const depLines: string[] = [];\n let shown = 0;\n depLines.push(`\\n ./${p.path}`);\n for (const dep of worstDeps) {\n if (shown >= 8) break;\n const current = dep.resolvedVersion ?? dep.currentSpec;\n const latest = dep.latestStable ?? '?';\n depLines.push(`\\n ${dep.package}: ${current} → ${latest} (${dep.majorsBehind} major${dep.majorsBehind! > 1 ? 's' : ''} behind)`);\n shown++;\n }\n const remaining = worstDeps.length - shown;\n detail += depLines.join('');\n if (remaining > 0) detail += `\\n ... and ${remaining} more`;\n }\n\n actions.push({\n title: `Reduce dependency rot in ${p.name} (${twoPlusPct}% severely outdated)`,\n explanation: detail,\n impact: `−5–10 drift points`,\n severity: 80 + twoPlusPct / 10,\n });\n }\n }\n\n // 4. Framework 2 majors behind (important but not critical)\n const twoMajorFrameworks: { name: string; project: string; projectPath: string; fw: string }[] = [];\n for (const p of artifact.projects) {\n for (const fw of p.frameworks) {\n if (fw.majorsBehind === 2) {\n twoMajorFrameworks.push({ name: fw.name, project: p.name, projectPath: p.path, fw: `${fw.currentVersion} → ${fw.latestVersion}` });\n }\n }\n }\n // Deduplicate by framework name (same framework across projects)\n const uniqueTwo = [...new Map(twoMajorFrameworks.map((f) => [f.name, f])).values()];\n if (uniqueTwo.length > 0) {\n const list = uniqueTwo.slice(0, 3).map((f) => `${f.name} (${f.fw})`).join(', ');\n const moreCount = uniqueTwo.length > 3 ? ` +${uniqueTwo.length - 3} more` : '';\n let detail = `These frameworks are 2 major versions behind. Create upgrade tickets and check migration guides — the gap will widen with each new release.`;\n const fileLines: string[] = [];\n let shown = 0;\n for (const tf of twoMajorFrameworks) {\n if (shown >= 8) break;\n fileLines.push(`\\n ./${tf.projectPath}`);\n fileLines.push(`\\n ${tf.name}: ${tf.fw}`);\n shown++;\n }\n const remaining = twoMajorFrameworks.length - shown;\n detail += fileLines.join('');\n if (remaining > 0) detail += `\\n ... and ${remaining} more`;\n actions.push({\n title: `Plan major framework upgrades: ${list}${moreCount}`,\n explanation: detail,\n impact: `−5–10 drift points`,\n severity: 60,\n });\n }\n\n // 5. Breaking change exposure\n if (artifact.extended?.breakingChangeExposure) {\n const bc = artifact.extended.breakingChangeExposure;\n const total = bc.deprecatedPackages.length + bc.legacyPolyfills.length;\n if (total > 0) {\n const items = [...bc.deprecatedPackages, ...bc.legacyPolyfills].slice(0, 5).join(', ');\n const moreCount = total > 5 ? ` +${total - 5} more` : '';\n let detail = `${total} package${total !== 1 ? 's' : ''} are deprecated or legacy polyfills. These receive no updates and may have known vulnerabilities.`;\n\n // Map deprecated/polyfill packages back to projects with versions\n const allPkgNames = new Set([...bc.deprecatedPackages, ...bc.legacyPolyfills]);\n const fileLines: string[] = [];\n let shown = 0;\n for (const p of artifact.projects) {\n const matches = p.dependencies.filter((d) => allPkgNames.has(d.package));\n if (matches.length === 0) continue;\n if (shown >= 10) break;\n fileLines.push(`\\n ./${p.path}`);\n for (const dep of matches) {\n if (shown >= 10) break;\n const ver = dep.resolvedVersion ?? dep.currentSpec;\n const label = bc.deprecatedPackages.includes(dep.package) ? 'deprecated' : 'polyfill';\n fileLines.push(`\\n ${dep.package}: ${ver} (${label})`);\n shown++;\n }\n }\n const remaining = total - shown;\n detail += fileLines.join('');\n if (remaining > 0) detail += `\\n ... and ${remaining} more`;\n\n actions.push({\n title: `Replace deprecated/legacy packages: ${items}${moreCount}`,\n explanation: detail,\n severity: 55,\n });\n }\n }\n\n // 6. Phantom dependencies\n if (artifact.extended?.dependencyGraph) {\n const dg = artifact.extended.dependencyGraph;\n const phantomCount = dg.phantomDependencies.length;\n if (phantomCount >= 10) {\n let detail = `Packages used in code but not declared in package.json. These rely on transitive installs and can break unpredictably when other packages update.`;\n\n // Build per-project breakdown from details if available\n const details = dg.phantomDependencyDetails;\n if (details && details.length > 0) {\n // Group by sourcePath\n const byPath = new Map<string, { package: string; spec: string }[]>();\n for (const d of details) {\n if (!byPath.has(d.sourcePath)) byPath.set(d.sourcePath, []);\n byPath.get(d.sourcePath)!.push({ package: d.package, spec: d.spec });\n }\n const pathLines: string[] = [];\n let shown = 0;\n for (const [srcPath, pkgs] of byPath) {\n if (shown >= 10) break;\n pathLines.push(`\\n ./${srcPath}`);\n for (const pkg of pkgs) {\n if (shown >= 10) break;\n pathLines.push(`\\n ${pkg.package}: ${pkg.spec}`);\n shown++;\n }\n }\n const remaining = phantomCount - shown;\n detail += pathLines.join('');\n if (remaining > 0) detail += `\\n ... and ${remaining} more`;\n }\n\n actions.push({\n title: `Fix ${phantomCount} phantom dependencies`,\n explanation: detail,\n severity: 45,\n });\n }\n }\n\n // 7. Security posture issues\n if (artifact.extended?.securityPosture) {\n const sec = artifact.extended.securityPosture;\n if (sec.envFilesTracked || !sec.lockfilePresent) {\n const issues: string[] = [];\n if (sec.envFilesTracked) issues.push('.env files are tracked in git');\n if (!sec.lockfilePresent) issues.push('no lockfile found');\n let detail: string;\n if (sec.envFilesTracked) {\n detail = 'Environment files may contain secrets. Add them to .gitignore and rotate any exposed credentials immediately.';\n detail += '\\n ./.gitignore';\n detail += '\\n Add: .env, .env.*, .env.local';\n } else {\n detail = 'Without a lockfile, installs are non-deterministic. Run the install command to generate one and commit it.';\n detail += '\\n ./';\n detail += `\\n Missing: ${sec.lockfileTypes.length > 0 ? sec.lockfileTypes.join(', ') + ' (multiple types detected)' : 'package-lock.json, pnpm-lock.yaml, or yarn.lock'}`;\n }\n actions.push({\n title: `Fix security posture: ${issues.join(', ')}`,\n explanation: detail,\n severity: 95,\n });\n }\n }\n\n // 8. Duplicate packages in dependency graph\n if (artifact.extended?.dependencyGraph) {\n const dupes = artifact.extended.dependencyGraph.duplicatedPackages;\n const highImpactDupes = dupes.filter((d) => d.versions.length >= 3);\n if (highImpactDupes.length >= 3) {\n let detail = `${highImpactDupes.length} packages have 3+ versions installed. Run \\`npm dedupe\\` to reduce bundle size and install time.`;\n const dupeLines: string[] = [];\n let shown = 0;\n for (const d of highImpactDupes) {\n if (shown >= 8) break;\n dupeLines.push(`\\n ${d.name}: ${d.versions.join(', ')} (${d.consumers} consumer${d.consumers !== 1 ? 's' : ''})`);\n shown++;\n }\n const remaining = highImpactDupes.length - shown;\n detail += dupeLines.join('');\n if (remaining > 0) detail += `\\n ... and ${remaining} more`;\n actions.push({\n title: `Deduplicate heavily-versioned packages`,\n explanation: detail,\n severity: 35,\n });\n }\n }\n\n // Sort by severity (most urgent first) and take top 5\n actions.sort((a, b) => b.severity - a.severity);\n return actions.slice(0, 5);\n}\n","import type { ScanArtifact } from '../types.js';\n\n/** Generate a Markdown report from scan artifact */\nexport function formatMarkdown(artifact: ScanArtifact): string {\n const lines: string[] = [];\n\n lines.push('# Vibgrate Drift Report');\n lines.push('');\n lines.push(`| Metric | Value |`);\n lines.push(`|--------|-------|`);\n lines.push(`| **DriftScore** | ${artifact.drift.score}/100 _(lower is better; 0 = no drift)_ |`);\n lines.push(`| **Risk Level** | ${artifact.drift.riskLevel.toUpperCase()} |`);\n lines.push(`| **Projects** | ${artifact.projects.length} |`);\n const scannedMeta: string[] = [artifact.timestamp];\n if (artifact.durationMs !== undefined) scannedMeta.push(`${(artifact.durationMs / 1000).toFixed(1)}s`);\n if (artifact.filesScanned !== undefined) scannedMeta.push(`${artifact.filesScanned} files`);\n if (artifact.treeSummary) scannedMeta.push(`${artifact.treeSummary.totalFiles.toLocaleString()} workspace files · ${artifact.treeSummary.totalDirs.toLocaleString()} dirs`);\n lines.push(`| **Scanned** | ${scannedMeta.join(' · ')} |`);\n if (artifact.vcs) {\n lines.push(`| **VCS** | ${artifact.vcs.type} |`);\n if (artifact.vcs.branch) lines.push(`| **Branch** | ${artifact.vcs.branch} |`);\n if (artifact.vcs.sha) lines.push(`| **Commit** | \\`${artifact.vcs.shortSha}\\` |`);\n }\n lines.push('');\n\n // Score breakdown\n lines.push('## Score Breakdown');\n lines.push('');\n lines.push(`| Component | Score |`);\n lines.push(`|-----------|-------|`);\n lines.push(`| Runtime | ${artifact.drift.components.runtimeScore} |`);\n lines.push(`| Frameworks | ${artifact.drift.components.frameworkScore} |`);\n lines.push(`| Dependencies | ${artifact.drift.components.dependencyScore} |`);\n lines.push(`| EOL Risk | ${artifact.drift.components.eolScore} |`);\n lines.push('');\n\n // Per project\n lines.push('## Projects');\n lines.push('');\n\n for (const project of artifact.projects) {\n lines.push(`### ${project.name} (${project.type})`);\n lines.push('');\n\n if (project.runtime) {\n const lag = project.runtimeMajorsBehind !== undefined && project.runtimeMajorsBehind > 0\n ? ` — ${project.runtimeMajorsBehind} major(s) behind`\n : ' — current';\n lines.push(`- **Runtime:** ${project.runtime}${lag}`);\n }\n\n if (project.frameworks.length > 0) {\n lines.push('- **Frameworks:**');\n for (const fw of project.frameworks) {\n const lag = fw.majorsBehind !== null\n ? (fw.majorsBehind === 0 ? 'current' : `${fw.majorsBehind} behind`)\n : 'unknown';\n lines.push(` - ${fw.name}: ${fw.currentVersion ?? '?'} → ${fw.latestVersion ?? '?'} (${lag})`);\n }\n }\n\n const b = project.dependencyAgeBuckets;\n const total = b.current + b.oneBehind + b.twoPlusBehind + b.unknown;\n if (total > 0) {\n lines.push(`- **Dependencies:** ${b.current} current, ${b.oneBehind} 1-behind, ${b.twoPlusBehind} 2+ behind, ${b.unknown} unknown`);\n }\n\n lines.push('');\n }\n\n\n if (artifact.extended?.uiPurpose) {\n const up = artifact.extended.uiPurpose;\n lines.push('## Product Purpose Signals');\n lines.push('');\n lines.push(`- **Frameworks:** ${up.detectedFrameworks.length > 0 ? up.detectedFrameworks.join(', ') : 'unknown'}`);\n lines.push(`- **Evidence Items:** ${up.topEvidence.length}${up.capped ? ` (capped from ${up.evidenceCount})` : ''}`);\n if (up.topEvidence.length > 0) {\n lines.push('- **Top Evidence:**');\n for (const item of up.topEvidence.slice(0, 10)) {\n lines.push(` - [${item.kind}] ${item.value} (${item.file})`);\n }\n }\n if (up.unknownSignals.length > 0) {\n lines.push('- **Unknowns:**');\n for (const u of up.unknownSignals.slice(0, 5)) {\n lines.push(` - ${u}`);\n }\n }\n lines.push('');\n }\n // Recommended standards (purpose-matched)\n if (artifact.extended?.standards && artifact.extended.standards.recommended.length > 0) {\n const std = artifact.extended.standards;\n lines.push('## Recommended Standards');\n lines.push('');\n const purposes = std.projectPurposes.map((p) => `${p.project} → ${p.category}`).join(', ');\n if (purposes) lines.push(`- **Detected purpose:** ${purposes}`);\n if (std.frameworks.length > 0) {\n lines.push('- **Compliance framework coverage:**');\n for (const f of std.frameworks) {\n lines.push(` - ${f.name}: ${f.recommendedMembers}/${f.totalMembers} member standards apply`);\n }\n }\n lines.push('- **Top standards to consider:**');\n for (const rec of std.recommended.slice(0, 10)) {\n const flag = rec.complianceRelevant ? ' _(compliance)_' : '';\n lines.push(` - **${rec.name}** — ${rec.reason}${flag}`);\n }\n lines.push('');\n }\n // Findings\n if (artifact.findings.length > 0) {\n lines.push('## Findings');\n lines.push('');\n lines.push(`| Level | Rule | Message | Location |`);\n lines.push(`|-------|------|---------|----------|`);\n for (const f of artifact.findings) {\n const emoji = f.level === 'error' ? '🔴' : f.level === 'warning' ? '🟡' : '🔵';\n lines.push(`| ${emoji} ${f.level} | ${f.ruleId} | ${f.message} | ${f.location} |`);\n }\n lines.push('');\n }\n\n if (artifact.delta !== undefined) {\n // Lower is better: a rise (positive delta) means drift worsened; a fall means it improved.\n const dir = artifact.delta > 0 ? '📈' : artifact.delta < 0 ? '📉' : '➡️';\n const trend = artifact.delta > 0 ? ' _(worsened)_' : artifact.delta < 0 ? ' _(improved)_' : '';\n lines.push(`## Drift Delta: ${dir} ${artifact.delta > 0 ? '+' : ''}${artifact.delta} vs baseline${trend}`);\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n","import * as path from 'node:path';\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { pathExists, readJsonFile } from '../utils/fs.js';\nimport { formatText } from '../formatters/text.js';\nimport { formatMarkdown } from '../formatters/markdown.js';\nimport type { ScanArtifact } from '../types.js';\n\nexport const reportCommand = new Command('report')\n .description('Generate a drift report from a scan artifact')\n .option('--in <file>', 'Input artifact file', '.vibgrate/scan_result.json')\n .option('--format <format>', 'Output format (md|text|json)', 'text')\n .action(async (opts: { in: string; format: string }) => {\n const artifactPath = path.resolve(opts.in);\n\n if (!(await pathExists(artifactPath))) {\n console.error(chalk.red(`Artifact not found: ${artifactPath}`));\n console.error(chalk.dim('Run \"vibgrate scan\" first to generate a scan artifact.'));\n process.exit(1);\n }\n\n const artifact = await readJsonFile<ScanArtifact>(artifactPath);\n\n switch (opts.format) {\n case 'md':\n console.log(formatMarkdown(artifact));\n break;\n case 'json':\n console.log(JSON.stringify(artifact, null, 2));\n break;\n case 'text':\n default:\n console.log(formatText(artifact));\n break;\n }\n });\n","import { spawn } from 'node:child_process';\n\n/**\n * Best-effort open of a URL in the user's default browser. Returns true if a\n * launcher was spawned (not a guarantee the browser actually opened). Callers\n * should always print the URL too, in case this fails or we're headless.\n */\nexport function openUrl(url: string): boolean {\n const platform = process.platform;\n let command: string;\n let args: string[];\n\n if (platform === 'darwin') {\n command = 'open';\n args = [url];\n } else if (platform === 'win32') {\n command = 'cmd';\n // `start` needs an empty title arg first when the URL contains special chars.\n args = ['/c', 'start', '', url];\n } else {\n command = 'xdg-open';\n args = [url];\n }\n\n try {\n const child = spawn(command, args, { stdio: 'ignore', detached: true });\n child.on('error', () => {\n /* swallow — caller falls back to printing the URL */\n });\n child.unref();\n return true;\n } catch {\n return false;\n }\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { availableRegionIds } from '../regions.js';\nimport { resolveIngestHost, createWorkspaceDsn } from './dsn.js';\nimport { writeStoredCredentials, credentialsPath, gitignoreEntryForCredentials } from '../credentials.js';\nimport type { StoredCredentials } from '../credentials.js';\nimport { findGitRoot, ensureGitignored } from '../utils/gitignore.js';\nimport { resolveCliInvocation } from '../../util/cli-invocation.js';\nimport * as path from 'node:path';\nimport { openUrl } from '../utils/open-url.js';\n\ninterface StartResponse {\n deviceCode: string;\n userCode: string;\n verificationUri: string;\n verificationUriComplete: string;\n expiresIn: number;\n interval: number;\n}\n\ninterface TokenResponse {\n status:\n | 'authorization_pending'\n | 'complete'\n | 'access_denied'\n | 'expired'\n | 'invalid'\n | 'error';\n dsn?: string;\n keyId?: string;\n workspaceId?: string;\n ingestHost?: string;\n error?: string;\n}\n\nconst delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\n/** True when `file` resolves to a path inside the `dir` tree. */\nfunction isInside(dir: string, file: string): boolean {\n const rel = path.relative(dir, file);\n return !!rel && !rel.startsWith('..') && !path.isAbsolute(rel);\n}\n\nexport const loginCommand = new Command('login')\n .description('Authenticate the CLI with your Vibgrate workspace via the browser')\n .option('--ingest <url>', 'Ingest API URL (overrides --region)')\n .option('--region <region>', `Data residency region (${availableRegionIds().join(', ')})`, 'us')\n .option('--no-browser', 'Do not attempt to open a browser automatically')\n .option(\n '--local',\n 'Store credentials in this project (.vibgrate/credentials.json) instead of ~/.vibgrate',\n )\n .action(async (opts: { ingest?: string; region: string; browser: boolean; local?: boolean }) => {\n let ingestHost: string;\n try {\n ingestHost = resolveIngestHost(opts.region, opts.ingest);\n } catch (e: unknown) {\n console.error(chalk.red(e instanceof Error ? e.message : String(e)));\n process.exit(1);\n }\n\n const base = `https://${ingestHost}/v1/auth/device`;\n\n // 1. Start the device authorization request.\n let start: StartResponse;\n try {\n const res = await fetch(`${base}/start`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', Connection: 'close' },\n body: '{}',\n });\n if (!res.ok) {\n console.error(chalk.red(`Failed to start login (HTTP ${res.status}).`));\n process.exit(1);\n }\n start = (await res.json()) as StartResponse;\n } catch (e: unknown) {\n console.error(chalk.red(`Could not reach ${ingestHost}: ${e instanceof Error ? e.message : String(e)}`));\n process.exit(1);\n }\n\n // 2. Prompt the user to approve in the browser.\n console.log('');\n console.log('To finish signing in, open this URL and approve the request:');\n console.log('');\n console.log(' ' + chalk.cyan(start.verificationUri));\n console.log('');\n console.log(' Your code: ' + chalk.bold(start.userCode));\n console.log('');\n\n if (opts.browser) {\n const opened = openUrl(start.verificationUriComplete);\n if (opened) {\n console.log(chalk.dim('Opening your browser… (if it does not open, use the URL above)'));\n }\n }\n console.log(chalk.dim('Waiting for approval…'));\n\n // 3. Poll for completion.\n const intervalMs = Math.max(2, start.interval || 5) * 1000;\n const deadline = Date.now() + (start.expiresIn || 900) * 1000;\n\n while (Date.now() < deadline) {\n await delay(intervalMs);\n let token: TokenResponse;\n try {\n const res = await fetch(`${base}/token`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', Connection: 'close' },\n body: JSON.stringify({ deviceCode: start.deviceCode }),\n });\n token = (await res.json()) as TokenResponse;\n } catch {\n // Transient network error — keep polling until the deadline.\n continue;\n }\n\n if (token.status === 'authorization_pending') continue;\n\n if (token.status === 'complete') {\n // Resolve the DSN. An existing account comes back with one from the\n // device flow; a brand-new account has no workspace yet, so we\n // provision one automatically in the user's region rather than making\n // the user run \"dsn create\" by hand. Login itself already succeeded —\n // only the workspace setup can still fail here.\n let creds: StoredCredentials;\n if (token.dsn) {\n creds = {\n dsn: token.dsn,\n workspaceId: token.workspaceId,\n keyId: token.keyId,\n ingestHost: token.ingestHost ?? ingestHost,\n savedAt: new Date().toISOString(),\n };\n } else {\n console.log(chalk.dim('Setting up your workspace…'));\n try {\n const provisioned = await createWorkspaceDsn({\n region: opts.region,\n ingest: opts.ingest,\n });\n creds = {\n dsn: provisioned.dsn,\n workspaceId: provisioned.workspaceId,\n keyId: provisioned.keyId,\n ingestHost: provisioned.ingestHost,\n savedAt: new Date().toISOString(),\n };\n } catch (e: unknown) {\n console.error(\n chalk.red('✖ Signed in, but workspace setup failed: ') +\n (e instanceof Error ? e.message : String(e)),\n );\n console.error(\n chalk.dim(' Finish setup with \"vibgrate dsn create --workspace new\".'),\n );\n process.exit(1);\n }\n }\n\n const storeOpts = { local: opts.local === true };\n writeStoredCredentials(creds, storeOpts);\n const credsFile = credentialsPath(storeOpts);\n console.log('');\n console.log(chalk.green('✔') + ' Logged in.');\n if (creds.workspaceId) {\n console.log(' Workspace: ' + chalk.bold(creds.workspaceId));\n }\n console.log(chalk.dim(` Credentials saved to ${credsFile}`));\n\n // Defense in depth (GUARDRAILS §1.1): the DSN we just stored is a\n // credential and must never be committed. Only touch .gitignore when the\n // credentials file actually lives inside the repo (the project-local\n // store) — a home-directory store is already outside version control, so\n // there is nothing to ignore. This is best-effort: never fail an\n // otherwise-successful login over .gitignore housekeeping.\n try {\n const root = findGitRoot();\n if (root && isInside(root, credsFile)) {\n const res = ensureGitignored(gitignoreEntryForCredentials(root, credsFile), root);\n if (res.status === 'created') {\n console.log(chalk.dim(` Created .gitignore and ignored ${res.entry}`));\n } else if (res.status === 'added') {\n console.log(chalk.dim(` Added ${res.entry} to .gitignore`));\n }\n }\n } catch {\n /* non-fatal */\n }\n\n console.log(chalk.dim(` You can now run \"${resolveCliInvocation()} scan --push\".`));\n return;\n }\n\n if (token.status === 'access_denied') {\n console.error(chalk.red('✖ Login was denied in the browser.'));\n process.exit(1);\n }\n if (token.status === 'expired' || token.status === 'invalid') {\n console.error(chalk.red('✖ Login request expired. Run \"vibgrate login\" again.'));\n process.exit(1);\n }\n if (token.status === 'error') {\n console.error(chalk.red(`✖ ${token.error ?? 'Login failed.'}`));\n process.exit(1);\n }\n }\n\n console.error(chalk.red('✖ Timed out waiting for approval. Run \"vibgrate login\" again.'));\n process.exit(1);\n });\n","/**\n * Shell-aware hints for the CLI.\n *\n * When we tell a user how to unset an environment variable, the syntax depends\n * on their shell — `unset` (POSIX sh/bash/zsh), `set -e` (fish),\n * `unsetenv` (csh/tcsh), `Remove-Item Env:` (PowerShell), `set VAR=` (cmd.exe).\n * Printing one hardcoded form is wrong for everyone else, so we pick the command\n * that matches the environment we can actually detect.\n */\n\nexport interface ShellEnv {\n /** Defaults to `process.platform`. */\n platform?: NodeJS.Platform;\n /** Defaults to `process.env.SHELL` (the user's login shell on Unix). */\n shell?: string;\n}\n\n/**\n * Return the command that unsets `varName` in the caller's shell.\n *\n * Detection is best-effort and honest about its limits:\n * - Unix: keyed off `$SHELL` (the login shell). fish and csh/tcsh get their\n * own syntax; everything else falls back to POSIX `unset`, which covers\n * sh/bash/zsh/ksh. `$SHELL` is the *default* shell, not guaranteed to be the\n * one currently running, but it is the only signal available.\n * - Windows: PowerShell and cmd.exe can't be told apart reliably from the\n * environment, so we show both forms rather than guess wrong.\n */\nexport function unsetEnvCommand(varName: string, env: ShellEnv = {}): string {\n const platform = env.platform ?? process.platform;\n\n if (platform === 'win32') {\n return `PowerShell: Remove-Item Env:${varName} | cmd.exe: set ${varName}=`;\n }\n\n const shell = env.shell ?? process.env.SHELL ?? '';\n const base = shell.split('/').pop() ?? '';\n if (base === 'fish') return `set -e ${varName}`;\n if (base === 'csh' || base === 'tcsh') return `unsetenv ${varName}`;\n return `unset ${varName}`;\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { clearStoredCredentials, credentialsPath } from '../credentials.js';\nimport { unsetEnvCommand } from '../utils/shell.js';\n\nexport const logoutCommand = new Command('logout')\n .description('Clear stored Vibgrate login credentials')\n .action(() => {\n const cleared = clearStoredCredentials();\n if (cleared) {\n console.log(chalk.green('✔') + ' Logged out. Stored credentials removed.');\n } else {\n console.log(chalk.dim(`No stored credentials found at ${credentialsPath()}.`));\n }\n\n // The stored file is not the only DSN source: resolveDsn() also honors the\n // VIBGRATE_DSN env var (and a --dsn flag). Deleting the file does not clear\n // those, so the user can still be authenticated after \"logout\". Warn them —\n // but never echo the value itself (GUARDRAILS §1.1), only that it is set.\n if (process.env.VIBGRATE_DSN) {\n console.log('');\n console.log(\n chalk.yellow('⚠') +\n ' VIBGRATE_DSN is still set in your environment, so commands will keep using it.',\n );\n console.log(\n chalk.dim(` Unset it to fully sign out: ${unsetEnvCommand('VIBGRATE_DSN')}`),\n );\n }\n });\n","import * as path from 'node:path';\nimport { randomUUID } from 'node:crypto';\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { pathExists, readJsonFile, writeTextFile } from '../utils/fs.js';\n\n/**\n * The in-toto predicate type for an OpenVEX attestation. Passed to\n * `cosign attest --type …` in the release pipeline and verified by buyers.\n */\nexport const OPENVEX_PREDICATE_TYPE = 'openvex';\n\n/** OpenVEX context URI (spec version this generator emits). */\nconst OPENVEX_CONTEXT = 'https://openvex.dev/ns/v0.2.0';\n\n/** Valid OpenVEX statement statuses. */\nconst VEX_STATUSES = ['not_affected', 'affected', 'fixed', 'under_investigation'] as const;\nexport type VexStatus = (typeof VEX_STATUSES)[number];\n\n/** Justifications permitted for a `not_affected` status (OpenVEX spec). */\nconst VEX_JUSTIFICATIONS = [\n 'component_not_present',\n 'vulnerable_code_not_present',\n 'vulnerable_code_not_in_execute_path',\n 'vulnerable_code_cannot_be_controlled_by_adversary',\n 'inline_mitigations_already_exist',\n] as const;\nexport type VexJustification = (typeof VEX_JUSTIFICATIONS)[number];\n\nexport interface VexStatementInput {\n vulnerability: string;\n /** Product references (e.g. `pkg:…` or an image digest). Falls back to the document default. */\n products?: string[];\n status: VexStatus;\n justification?: VexJustification;\n impact_statement?: string;\n action_statement?: string;\n}\n\ninterface OpenVexStatement {\n vulnerability: { name: string };\n products: Array<{ '@id': string }>;\n status: VexStatus;\n justification?: VexJustification;\n impact_statement?: string;\n action_statement?: string;\n}\n\nexport interface OpenVexDocument {\n '@context': string;\n '@id': string;\n author: string;\n timestamp: string;\n version: number;\n statements: OpenVexStatement[];\n}\n\nexport interface BuildVexOptions {\n author: string;\n /** Default product applied to statements that don't carry their own. */\n defaultProduct?: string;\n timestamp?: string;\n id?: string;\n statements: VexStatementInput[];\n}\n\n/** A validation problem found while assembling the document. */\nexport class VexValidationError extends Error {}\n\n/**\n * Builds a spec-compliant OpenVEX document from a set of statements. Pure: given\n * the same inputs (including an explicit `timestamp`/`id`) it returns the same\n * document, so an attested VEX is reproducible. A document with zero statements\n * is valid and honest — it asserts no known affected components.\n */\nexport function buildVexDocument(opts: BuildVexOptions): OpenVexDocument {\n const statements: OpenVexStatement[] = opts.statements.map((s, i) => {\n if (!s.vulnerability || typeof s.vulnerability !== 'string') {\n throw new VexValidationError(`statement[${i}]: \"vulnerability\" is required`);\n }\n if (!VEX_STATUSES.includes(s.status)) {\n throw new VexValidationError(\n `statement[${i}] (${s.vulnerability}): invalid status \"${s.status}\". Expected one of: ${VEX_STATUSES.join(', ')}`,\n );\n }\n\n const products = (s.products && s.products.length > 0\n ? s.products\n : opts.defaultProduct\n ? [opts.defaultProduct]\n : []);\n if (products.length === 0) {\n throw new VexValidationError(\n `statement[${i}] (${s.vulnerability}): no product. Set \"products\" on the statement or pass --product.`,\n );\n }\n\n // OpenVEX requires a justification or impact_statement for not_affected, and\n // an action_statement is expected for affected.\n if (s.status === 'not_affected' && !s.justification && !s.impact_statement) {\n throw new VexValidationError(\n `statement[${i}] (${s.vulnerability}): \"not_affected\" requires a justification or impact_statement.`,\n );\n }\n if (s.justification && !VEX_JUSTIFICATIONS.includes(s.justification)) {\n throw new VexValidationError(\n `statement[${i}] (${s.vulnerability}): invalid justification \"${s.justification}\". Expected one of: ${VEX_JUSTIFICATIONS.join(', ')}`,\n );\n }\n if (s.status === 'affected' && !s.action_statement) {\n throw new VexValidationError(\n `statement[${i}] (${s.vulnerability}): \"affected\" requires an action_statement.`,\n );\n }\n\n const out: OpenVexStatement = {\n vulnerability: { name: s.vulnerability },\n products: products.map((p) => ({ '@id': p })),\n status: s.status,\n };\n if (s.justification) out.justification = s.justification;\n if (s.impact_statement) out.impact_statement = s.impact_statement;\n if (s.action_statement) out.action_statement = s.action_statement;\n return out;\n });\n\n return {\n '@context': OPENVEX_CONTEXT,\n '@id': opts.id ?? `https://vibgrate.com/vex/${randomUUID()}`,\n author: opts.author,\n timestamp: opts.timestamp ?? new Date().toISOString(),\n version: 1,\n statements,\n };\n}\n\n/**\n * Reads statements from a JSON file. Accepts either a bare array of statements or\n * an object with a `statements` array (e.g. an existing OpenVEX document).\n */\nasync function loadStatementsFile(filePath: string): Promise<VexStatementInput[]> {\n const data = await readJsonFile<unknown>(filePath);\n const arr = Array.isArray(data)\n ? data\n : (data && typeof data === 'object' && Array.isArray((data as { statements?: unknown }).statements)\n ? (data as { statements: unknown[] }).statements\n : null);\n if (!arr) {\n throw new VexValidationError(\n `${filePath}: expected a JSON array of statements or an object with a \"statements\" array.`,\n );\n }\n return arr as VexStatementInput[];\n}\n\nfunction collectStatement(value: string, previous: VexStatementInput[]): VexStatementInput[] {\n let parsed: unknown;\n try {\n parsed = JSON.parse(value);\n } catch {\n throw new VexValidationError(`--statement must be a JSON object: ${value.slice(0, 60)}…`);\n }\n return [...previous, parsed as VexStatementInput];\n}\n\nexport const vexCommand = new Command('vex')\n .description('Generate an OpenVEX document (exploitability statements) for attestation')\n .option('--from <file>', 'Read statements from a JSON file (array, or an object with a \"statements\" array)')\n .option(\n '--statement <json>',\n 'Add a statement as inline JSON, e.g. \\'{\"vulnerability\":\"CVE-2024-1\",\"status\":\"not_affected\",\"justification\":\"vulnerable_code_not_present\"}\\'. Repeatable.',\n collectStatement,\n [] as VexStatementInput[],\n )\n .option('--product <ref>', 'Default product reference applied to statements without their own (e.g. an image digest)')\n .option('--author <name>', 'Document author', 'Vibgrate')\n .option('--timestamp <iso>', 'Override the document timestamp (ISO 8601) for reproducible output')\n .option('--id <uri>', 'Override the document @id (otherwise a uuid URN is generated)')\n .option('--out <file>', 'Write the document to a file (default: stdout)')\n .action(async (opts: {\n from?: string;\n statement: VexStatementInput[];\n product?: string;\n author: string;\n timestamp?: string;\n id?: string;\n out?: string;\n }) => {\n try {\n const statements: VexStatementInput[] = [];\n if (opts.from) {\n const fromPath = path.resolve(opts.from);\n if (!(await pathExists(fromPath))) {\n process.stderr.write(chalk.red(`Statements file not found: ${fromPath}\\n`));\n process.exit(1);\n }\n statements.push(...(await loadStatementsFile(fromPath)));\n }\n statements.push(...opts.statement);\n\n const doc = buildVexDocument({\n author: opts.author,\n defaultProduct: opts.product,\n timestamp: opts.timestamp,\n id: opts.id,\n statements,\n });\n\n const json = JSON.stringify(doc, null, 2);\n if (opts.out) {\n await writeTextFile(path.resolve(opts.out), json + '\\n');\n process.stderr.write(\n chalk.green('✔') + ` Wrote OpenVEX document (${doc.statements.length} statement(s)) to ${path.resolve(opts.out)}\\n`,\n );\n } else {\n process.stdout.write(json + '\\n');\n }\n } catch (err) {\n if (err instanceof VexValidationError) {\n process.stderr.write(chalk.red(`VEX validation error: ${err.message}\\n`));\n process.exit(1);\n }\n throw err;\n }\n });\n","import * as path from 'node:path';\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { pathExists, readJsonFile, writeTextFile } from '../utils/fs.js';\nimport type { DependencyRow, ScanArtifact } from '../types.js';\nimport { vexCommand } from './vex.js';\n\ntype SbomFormat = 'cyclonedx' | 'spdx';\n\ninterface FlattenedDependency {\n project: string;\n package: string;\n version: string;\n currentSpec: string;\n drift: DependencyRow['drift'];\n majorsBehind: number | null;\n}\n\n/**\n * Deterministic RFC 9562 version-8 UUID derived from `seed`, so an SBOM's\n * serialNumber / documentNamespace is stable for identical content instead of\n * random. A stable id makes `vg sbom export` reproducible for a given scan and\n * format. Uses a salted FNV-1a hash; a collision is only cosmetic — the SBOM\n * content, not this id, is what a consumer verifies.\n *\n * Kept in sync with the identical helper in the API\n * (`packages/vibgrate-api/src/lib/sbom-export.ts`).\n */\nexport function deterministicUuid(seed: string): string {\n const bytes = new Uint8Array(16);\n for (let block = 0; block < 4; block++) {\n let h = 0x811c9dc5;\n const s = `${block} ${seed}`;\n for (let i = 0; i < s.length; i++) {\n h ^= s.charCodeAt(i);\n h = Math.imul(h, 0x01000193);\n }\n h >>>= 0;\n bytes[block * 4] = (h >>> 24) & 0xff;\n bytes[block * 4 + 1] = (h >>> 16) & 0xff;\n bytes[block * 4 + 2] = (h >>> 8) & 0xff;\n bytes[block * 4 + 3] = h & 0xff;\n }\n bytes[6] = (bytes[6] & 0x0f) | 0x80; // version 8 (custom)\n bytes[8] = (bytes[8] & 0x3f) | 0x80; // variant 10xx\n const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n\n/** Stable seed for the document id: format + root + the ordered dependency set. */\nfunction sbomSerialSeed(format: string, artifact: ScanArtifact, deps: FlattenedDependency[]): string {\n return [\n format,\n artifact.rootPath ?? '',\n artifact.timestamp ?? '',\n artifact.vibgrateVersion ?? '',\n ...deps.map((d) => `${d.package}|${d.version}|${d.currentSpec}|${d.project}|${d.drift}|${d.majorsBehind ?? ''}`),\n ].join('\\n');\n}\n\nexport function flattenDependencies(artifact: ScanArtifact): FlattenedDependency[] {\n const rows: FlattenedDependency[] = [];\n for (const project of artifact.projects) {\n for (const dep of project.dependencies) {\n rows.push({\n project: project.name,\n package: dep.package,\n version: dep.resolvedVersion ?? dep.currentSpec,\n currentSpec: dep.currentSpec,\n drift: dep.drift,\n majorsBehind: dep.majorsBehind,\n });\n }\n }\n return rows;\n}\n\nexport function toCycloneDx(artifact: ScanArtifact): Record<string, unknown> {\n const dependencies = flattenDependencies(artifact);\n return {\n bomFormat: 'CycloneDX',\n specVersion: '1.5',\n serialNumber: `urn:uuid:${deterministicUuid(sbomSerialSeed('cyclonedx', artifact, dependencies))}`,\n version: 1,\n metadata: {\n timestamp: artifact.timestamp,\n tools: [\n {\n vendor: 'Vibgrate',\n name: '@vibgrate/cli',\n version: artifact.vibgrateVersion,\n },\n ],\n component: {\n type: 'application',\n name: artifact.rootPath,\n },\n },\n components: dependencies.map((dep) => ({\n type: 'library',\n name: dep.package,\n version: dep.version,\n properties: [\n { name: 'vibgrate:project', value: dep.project },\n { name: 'vibgrate:currentSpec', value: dep.currentSpec },\n { name: 'vibgrate:drift', value: dep.drift },\n { name: 'vibgrate:majorsBehind', value: String(dep.majorsBehind ?? 'unknown') },\n ],\n })),\n };\n}\n\nexport function toSpdx(artifact: ScanArtifact): Record<string, unknown> {\n const dependencies = flattenDependencies(artifact);\n return {\n spdxVersion: 'SPDX-2.3',\n dataLicense: 'CC0-1.0',\n SPDXID: 'SPDXRef-DOCUMENT',\n name: `${artifact.rootPath}-sbom`,\n documentNamespace: `https://vibgrate.com/spdx/${artifact.rootPath}/${deterministicUuid(sbomSerialSeed('spdx', artifact, dependencies))}`,\n creationInfo: {\n created: artifact.timestamp,\n creators: [`Tool: @vibgrate/cli-${artifact.vibgrateVersion}`],\n },\n packages: dependencies.map((dep, i) => ({\n name: dep.package,\n SPDXID: `SPDXRef-Package-${i + 1}`,\n versionInfo: dep.version,\n downloadLocation: 'NOASSERTION',\n filesAnalyzed: false,\n externalRefs: [\n {\n referenceCategory: 'PACKAGE-MANAGER',\n referenceType: 'purl',\n referenceLocator: `pkg:npm/${encodeURIComponent(dep.package)}@${encodeURIComponent(dep.version)}`,\n },\n ],\n annotations: [\n {\n annotationType: 'OTHER',\n annotator: 'Tool: @vibgrate/cli',\n annotationDate: artifact.timestamp,\n comment: `project=${dep.project}; drift=${dep.drift}; majorsBehind=${dep.majorsBehind ?? 'unknown'}`,\n },\n ],\n })),\n };\n}\n\nfunction projectDependencyMap(artifact: ScanArtifact): Map<string, DependencyRow> {\n const map = new Map<string, DependencyRow>();\n for (const project of artifact.projects) {\n for (const dep of project.dependencies) {\n map.set(`${project.name}:${dep.package}`, dep);\n }\n }\n return map;\n}\n\nexport function formatDeltaText(base: ScanArtifact, current: ScanArtifact): string {\n const baseMap = projectDependencyMap(base);\n const currentMap = projectDependencyMap(current);\n\n const added: string[] = [];\n const removed: string[] = [];\n const changed: string[] = [];\n\n for (const [key, dep] of currentMap.entries()) {\n if (!baseMap.has(key)) {\n added.push(`${key} @ ${dep.resolvedVersion ?? dep.currentSpec}`);\n continue;\n }\n const prev = baseMap.get(key)!;\n const prevVersion = prev.resolvedVersion ?? prev.currentSpec;\n const nowVersion = dep.resolvedVersion ?? dep.currentSpec;\n if (prevVersion !== nowVersion || prev.majorsBehind !== dep.majorsBehind) {\n changed.push(`${key} ${prevVersion} -> ${nowVersion} (majorsBehind ${prev.majorsBehind ?? 'unknown'} -> ${dep.majorsBehind ?? 'unknown'})`);\n }\n }\n\n for (const [key, dep] of baseMap.entries()) {\n if (!currentMap.has(key)) {\n removed.push(`${key} @ ${dep.resolvedVersion ?? dep.currentSpec}`);\n }\n }\n\n const lines = [\n 'Vibgrate SBOM Delta',\n '===================',\n `Baseline: ${base.timestamp}`,\n `Current: ${current.timestamp}`,\n `Drift score delta: ${(current.drift.score - base.drift.score).toFixed(2)} points`,\n '',\n `Added dependencies (${added.length})`,\n ...added.map((d) => ` + ${d}`),\n '',\n `Removed dependencies (${removed.length})`,\n ...removed.map((d) => ` - ${d}`),\n '',\n `Changed dependencies (${changed.length})`,\n ...changed.map((d) => ` * ${d}`),\n ];\n\n return lines.join('\\n');\n}\n\nasync function readArtifactOrExit(filePath: string): Promise<ScanArtifact> {\n const absolutePath = path.resolve(filePath);\n if (!(await pathExists(absolutePath))) {\n console.error(chalk.red(`Artifact not found: ${absolutePath}`));\n process.exit(1);\n }\n return readJsonFile<ScanArtifact>(absolutePath);\n}\n\nconst exportCommand = new Command('export')\n .description('Export scan artifact as SBOM')\n .option('--in <file>', 'Input artifact file', '.vibgrate/scan_result.json')\n .option('--out <file>', 'Output SBOM file')\n .option('--format <format>', 'SBOM format (cyclonedx|spdx)', 'cyclonedx')\n .action(async (opts: { in: string; out?: string; format: string }) => {\n const artifact = await readArtifactOrExit(opts.in);\n const format = opts.format.toLowerCase() as SbomFormat;\n\n if (format !== 'cyclonedx' && format !== 'spdx') {\n console.error(chalk.red('Invalid SBOM format. Use cyclonedx or spdx.'));\n process.exit(1);\n }\n\n const sbom = format === 'cyclonedx' ? toCycloneDx(artifact) : toSpdx(artifact);\n const body = JSON.stringify(sbom, null, 2);\n\n if (opts.out) {\n await writeTextFile(path.resolve(opts.out), body);\n console.log(chalk.green('✔') + ` SBOM written to ${opts.out}`);\n } else {\n console.log(body);\n }\n });\n\nconst deltaCommand = new Command('delta')\n .description('Show SBOM delta between two scan artifacts')\n .requiredOption('--from <file>', 'Baseline scan artifact path')\n .requiredOption('--to <file>', 'Current scan artifact path')\n .option('--out <file>', 'Write report to file')\n .action(async (opts: { from: string; to: string; out?: string }) => {\n const base = await readArtifactOrExit(opts.from);\n const current = await readArtifactOrExit(opts.to);\n const report = formatDeltaText(base, current);\n\n if (opts.out) {\n await writeTextFile(path.resolve(opts.out), report);\n console.log(chalk.green('✔') + ` SBOM delta report written to ${opts.out}`);\n } else {\n console.log(report);\n }\n });\n\nexport const sbomCommand = new Command('sbom')\n .description('Supply-chain evidence: SBOM export/delta and OpenVEX generation')\n .addCommand(exportCommand)\n .addCommand(deltaCommand)\n .addCommand(vexCommand);\n","#!/usr/bin/env node\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { realpathSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\nimport { Command, CommanderError } from 'commander';\nimport { VERSION } from './version.js';\nimport { resolveCliInvocation, NPX_INVOCATION } from './util/cli-invocation.js';\nimport { registerBuild, runBuild } from './commands/build.js';\nimport { registerStatus } from './commands/status.js';\nimport { registerAsk } from './commands/ask.js';\nimport { registerEmbed } from './commands/embed.js';\nimport { registerShow } from './commands/show.js';\nimport { registerPath } from './commands/path.js';\nimport { registerTree } from './commands/tree.js';\nimport { registerInsights } from './commands/insights.js';\nimport { registerImpact } from './commands/impact.js';\nimport { registerUnknowns } from './commands/unknowns.js';\nimport { registerServe } from './commands/serve.js';\nimport { registerInstall } from './commands/install.js';\nimport { registerShare } from './commands/share.js';\nimport { registerBenchmark } from './commands/benchmark.js';\nimport { registerTests } from './commands/tests.js';\nimport { registerFacts } from './commands/facts.js';\nimport { registerGuide } from './commands/guide.js';\nimport { registerWhy } from './commands/why.js';\nimport { registerBisect } from './commands/bisect.js';\nimport { registerDrift } from './commands/drift.js';\nimport { registerModels } from './commands/models.js';\nimport { registerSavings } from './commands/savings.js';\nimport { registerLib } from './commands/lib.js';\nimport { registerExport } from './commands/export.js';\nimport { registerBundle } from './commands/bundle.js';\nimport { CliError, ExitCode } from './util/exit.js';\nimport { c, info, disableColor } from './util/output.js';\n\n// Drift-reporting commands (merged from the Vibgrate CLI). These run on the\n// open base engine (`@vibgrate/core-open`) — no proprietary kernel.\nimport { initCommand } from './reporting/commands/init.js';\nimport { scanCommand } from './reporting/commands/scan.js';\nimport { fixCommand } from './reporting/commands/fix.js';\nimport { baselineCommand } from './reporting/commands/baseline.js';\nimport { reportCommand } from './reporting/commands/report.js';\nimport { dsnCommand } from './reporting/commands/dsn.js';\nimport { loginCommand } from './reporting/commands/login.js';\nimport { logoutCommand } from './reporting/commands/logout.js';\nimport { pushCommand } from './reporting/commands/push.js';\nimport { updateCommand } from './reporting/commands/update.js';\nimport { sbomCommand } from './reporting/commands/sbom.js';\n\n/** The set of registered subcommand names (kept in sync with registration). */\nexport const KNOWN_COMMANDS = new Set([\n 'build',\n 'status',\n 'ask',\n 'embed',\n 'show',\n 'path',\n 'tree',\n 'impact',\n 'unknowns',\n 'tests',\n 'facts',\n 'guide',\n 'why',\n 'bisect',\n 'drift',\n 'models',\n 'savings',\n 'lib',\n 'export',\n 'push',\n 'bundle',\n 'map',\n 'hubs',\n 'areas',\n 'oddities',\n 'serve',\n 'install',\n 'uninstall',\n 'share',\n 'benchmark',\n 'help',\n // Drift-reporting verbs (merged from the Vibgrate CLI).\n 'init',\n 'scan',\n 'fix',\n 'baseline',\n 'report',\n 'login',\n 'logout',\n 'dsn',\n 'update',\n 'sbom',\n]);\n\nexport function buildProgram(): Command {\n const program = new Command();\n program\n .name('vg')\n .description(\n 'vg — local codebase intelligence for AI coding agents: a deterministic, ' +\n 'no-API-key code graph + MCP server, drift reporting, and version-correct library docs',\n )\n .version(VERSION, '--version', 'output the version number')\n .showSuggestionAfterError(true)\n .addHelpText('after', () => {\n // Show commands with the prefix that actually runs this CLI for the reader:\n // `vg` when installed, `npx @vibgrate/cli` when they invoked it via npx.\n const cli = resolveCliInvocation();\n const aliasNote =\n cli === 'vg'\n ? 'The `vibgrate` command is an alias for `vg`.\\n'\n : cli === NPX_INVOCATION\n ? 'Install globally (`npm i -g @vibgrate/cli`) to use the shorter `vg` command.\\n'\n : '';\n return (\n `\\nRun \\`${cli}\\` to scan + map the current folder, \\`${cli} \"<question>\"\\` to ask, ` +\n `\\`${cli} status\\` for state, \\`${cli} build --verify\\` to re-verify the map.\\n` +\n `Drift: \\`${cli} scan\\` / \\`${cli} report\\`. Wire into your AI agent: \\`${cli} install\\`.\\n` +\n `${aliasNote}Docs: https://vibgrate.com/help`\n );\n });\n\n // Global flags live on each subcommand (see cli-options.applyGlobalOptions),\n // so the dispatch can place the command token first and let flags follow.\n registerBuild(program);\n registerStatus(program);\n registerAsk(program);\n registerEmbed(program);\n registerShow(program);\n registerPath(program);\n registerTree(program);\n registerInsights(program);\n registerImpact(program);\n registerUnknowns(program);\n registerServe(program);\n registerInstall(program);\n registerShare(program);\n registerBenchmark(program);\n registerTests(program);\n registerFacts(program);\n registerGuide(program);\n registerWhy(program);\n registerBisect(program);\n registerDrift(program);\n registerModels(program);\n registerSavings(program);\n registerLib(program);\n registerExport(program);\n registerBundle(program);\n\n // Drift-reporting commands (merged from the Vibgrate CLI). `push` here is the\n // real scan-artifact upload, so it replaces the graph engine's no-op `push`.\n program.addCommand(initCommand);\n program.addCommand(scanCommand);\n program.addCommand(fixCommand);\n program.addCommand(baselineCommand);\n program.addCommand(reportCommand);\n program.addCommand(loginCommand);\n program.addCommand(logoutCommand);\n program.addCommand(dsnCommand);\n program.addCommand(pushCommand);\n program.addCommand(updateCommand);\n program.addCommand(sbomCommand);\n\n return program;\n}\n\n/**\n * The \"simple as Google\" dispatch (VG-CLI-SPEC §1):\n * vg → scan + map the current folder\n * vg <path-that-exists> → scan + map that path\n * vg \"<quoted question>\" → ask (contains a space or ends with '?')\n * vg <known-command> … → run that command\n * vg <other-word> → ask (bare-string search)\n */\n/**\n * Flags that consume the following token as their value. Includes global flags\n * and command-level value options, so the dispatcher never mistakes a flag's\n * value (e.g. the `4` in `vg --jobs 4`) for the command/positional.\n */\nconst VALUE_FLAGS = new Set([\n '-C',\n '--cwd',\n '--generated-at',\n '--graph',\n '--jobs',\n '--only',\n '--exclude',\n '--export',\n '-o',\n '--budget',\n '-b',\n]);\n\n/**\n * Build-only flags that `scan` has no equivalent for. When one of these appears\n * on an otherwise-default invocation (`vg --json`, `vg --jobs 4`, `vg . --only ts`),\n * we keep routing to `build` so the flag still means \"map\", rather than handing\n * it to `scan` (which would reject the unknown option).\n */\nconst BUILD_ONLY_FLAGS = new Set([\n '--json',\n '--jobs',\n '--only',\n '--export',\n '--graph',\n '--generated-at',\n '--no-cache',\n '--deep',\n '--scip',\n '--no-scip',\n '--tsc',\n '--no-tsc',\n '--ground',\n '--no-ground',\n '--html',\n '--no-html',\n '--report',\n '--no-report',\n '--warm',\n]);\n\nfunction hasBuildOnlyFlag(args: string[]): boolean {\n return args.some((a) => BUILD_ONLY_FLAGS.has(a.split('=')[0]));\n}\n\nexport function dispatch(argv: string[], cwd: string): string[] {\n const args = [...argv];\n const firstPositionalIdx = findFirstPositional(args);\n\n // No positional at all (e.g. `vg`, `vg --quiet`): default to scan, which also\n // builds the map (one command → DriftScore + AI/docs index). A terminal flag\n // like --help/--version is left for commander; a build-only flag keeps `build`.\n if (firstPositionalIdx === -1) {\n if (args.includes('--help') || args.includes('-h') || args.includes('--version')) {\n return args;\n }\n return [hasBuildOnlyFlag(args) ? 'build' : 'scan', ...args];\n }\n\n const first = args[firstPositionalIdx];\n\n // Explicit command → move it to the front (commander needs the command first;\n // global flags live on the subcommand so they can follow in any order).\n if (KNOWN_COMMANDS.has(first)) {\n const rest = [...args];\n rest.splice(firstPositionalIdx, 1);\n return [first, ...rest];\n }\n\n const looksLikeQuestion = /\\s/.test(first) || first.endsWith('?');\n if (looksLikeQuestion) return ['ask', ...args];\n\n // A path (relative to cwd) → scan + map it (a build-only flag keeps `build`).\n if (fs.existsSync(path.resolve(cwd, first))) {\n return [hasBuildOnlyFlag(args) ? 'build' : 'scan', ...args];\n }\n\n // Recently-moved verbs: a migration hint beats a confusing search fall-through.\n const moved = MOVED_COMMANDS[first];\n if (moved) {\n throw new CliError(`\\`vg ${first}\\` has moved to \\`${moved}\\``, ExitCode.USAGE_ERROR);\n }\n\n // Bare word that is neither a command nor a path → treat as a search query.\n return ['ask', ...args];\n}\n\n/** Verbs folded into the build lifecycle — guide the user to the new form. */\nconst MOVED_COMMANDS: Record<string, string> = {\n verify: 'vg build --verify',\n attest: 'vg build --attest',\n};\n\n/** The first real positional, skipping value-taking global flags and their values. */\nfunction findFirstPositional(args: string[]): number {\n for (let i = 0; i < args.length; i++) {\n const a = args[i];\n if (a.startsWith('-')) {\n // `--flag=value` consumes nothing extra; a bare value-flag consumes next.\n if (VALUE_FLAGS.has(a)) i++;\n continue;\n }\n return i;\n }\n return -1;\n}\n\nexport async function main(argv = process.argv): Promise<void> {\n const raw = argv.slice(2);\n\n // Honor NO_COLOR / --no-color early so even bootstrap messages obey it.\n if (process.env.NO_COLOR || raw.includes('--no-color')) disableColor();\n\n // We need cwd for path-based dispatch; read -C/--cwd from the raw args.\n const cwd = readCwd(raw);\n\n const program = buildProgram();\n program.exitOverride((err) => {\n throw err;\n });\n // Route commander's own output through our streams; errors are handled below.\n program.configureOutput({\n writeErr: (str) => process.stderr.write(str),\n writeOut: (str) => process.stdout.write(str),\n });\n\n try {\n // dispatch() can throw (e.g. a moved-command hint) — keep it inside the\n // handler so those surface as a clean `error:` line, not a raw stack.\n const dispatched = dispatch(raw, cwd);\n await program.parseAsync(dispatched, { from: 'user' });\n } catch (err) {\n handleError(err);\n }\n}\n\nfunction readCwd(raw: string[]): string {\n const i = raw.findIndex((a) => a === '-C' || a === '--cwd');\n if (i >= 0 && raw[i + 1]) return path.resolve(raw[i + 1]);\n const eq = raw.find((a) => a.startsWith('--cwd='));\n if (eq) return path.resolve(eq.slice('--cwd='.length));\n return process.cwd();\n}\n\nfunction handleError(err: unknown): never {\n if (err instanceof CommanderError) {\n // Help/version are not errors.\n if (err.code === 'commander.helpDisplayed' || err.code === 'commander.help') {\n process.exit(ExitCode.OK);\n }\n if (err.code === 'commander.version') process.exit(ExitCode.OK);\n // Unknown command / bad option / missing argument → usage error.\n process.exit(ExitCode.USAGE_ERROR);\n }\n if (err instanceof CliError) {\n info(c.red(`error: ${err.message}`));\n process.exit(err.code);\n }\n const message = err instanceof Error ? err.message : String(err);\n const correlation = Math.random().toString(36).slice(2, 10);\n info(c.red(`error: ${message}`));\n info(c.dim(` (ref ${correlation}) — re-run with --json for detail, or report at https://vibgrate.com/help`));\n process.exit(ExitCode.ERROR);\n}\n\n// Export for programmatic/default-build use and tests.\nexport { runBuild };\n\n// Run only when invoked as the process entry (not when imported by a test or\n// the embedding API). Robust across dev (tsx .ts), the built bin, and bin\n// symlinks by comparing realpaths.\nfunction isEntry(): boolean {\n try {\n if (!process.argv[1]) return false;\n return realpathSync(process.argv[1]) === fileURLToPath(import.meta.url);\n } catch {\n return false;\n }\n}\n\nif (isEntry()) {\n void main();\n}\n"]}