@vibgrate/cli 2026.703.5 → 2026.704.1

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/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/verify.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/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/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":["chalk","path","fs","path2","fs2","path3","path4","out","rel","fs3","resolve","pad","path5","next","fs5","c","parseDsn","fs8","path8","fs9","Command","path10","vibgrateDir","pathExists","path11","teal","mint","path12","path13","spawn","path14","path15","semver","execSync","path16","json","path17","fs11","path18"],"mappings":";;;;;;;;;;;;;;;;;;;;AAQO,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,GAAIA,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;;;ACpBO,SAAS,cAAc,OAAA,EAAwB;AACpD,EAAA,MAAM,GAAA,GAAM,OAAA,CACT,OAAA,CAAQ,OAAO,CAAA,CACf,WAAA,CAAY,0DAA0D,CAAA,CACtE,QAAA,CAAS,YAAA,EAAc,mDAAmD,CAAA,CAC1E,OAAO,gBAAA,EAAkB,sCAAsC,CAAA,CAC/D,MAAA,CAAO,kBAAA,EAAoB,gCAAA,EAAkC,OAAA,EAAS,EAAE,CAAA,CACxE,MAAA,CAAO,WAAA,EAAa,yBAAyB,CAAA,CAC7C,MAAA,CAAO,aAAA,EAAe,8BAA8B,EACpD,MAAA,CAAO,aAAA,EAAe,mCAAmC,CAAA,CACzD,MAAA,CAAO,YAAA,EAAc,oCAAoC,CAAA,CACzD,MAAA,CAAO,eAAA,EAAiB,8EAA8E,CAAA,CACtG,MAAA,CAAO,WAAA,EAAa,uBAAuB,CAAA,CAC3C,OAAO,UAAA,EAAY,gEAAgE,CAAA,CACnF,MAAA,CAAO,WAAA,EAAa,iEAAiE,CAAA,CACrF,MAAA,CAAO,oBAAoB,yDAAyD,CAAA,CACpF,MAAA,CAAO,qBAAA,EAAuB,gDAAgD,CAAA,CAC9E,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,KAAA,CAAA,OAAA,CAAQ,MAAA,CAAO,GAAA,IAAO,GAAG,CAAA;AAI3C,EAAA,MAAM,WAAA,GAAc,CAAC,MAAA,CAAO,IAAA,IAAQ,CAAC,MAAA,CAAO,KAAA;AAC5C,EAAA,IAAI,WAAA,EAAa,SAAA,CAAeA,KAAA,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;AAC3D,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;AAEtD,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,OAAA;AAAA,MACX,UAAA,EAAY,MAAA,CAAO,KAAA,CAAM,UAAA,CAAW,UAAA;AAAA,MACpC,QAAA,EAAU,OAAO,MAAA,CAAO;AAAA,KACzB,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,EAAa,GAAA,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,YAAA,GAAe,CAAC,OAAA,CAAQ,SAAA,EAAW,QAAQ,QAAA,EAAU,OAAA,CAAQ,UAAU,CAAA,CAC1E,MAAA,CAAO,OAAO,CAAA,CACd,GAAA,CAAI,CAAC,CAAA,KAAWA,KAAA,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;AAEA,EAAA,mBAAA,CAAoB,MAAM,MAAA,CAAO,KAAA,EAAO,MAAA,EAAQ,IAAA,CAAK,SAAS,KAAK,CAAA;AACrE;AAWA,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,UAAU,iBAAA,EAAkB;AAClC,EAAA,IAAI,CAAC,YAAA,CAAa,OAAO,CAAA,EAAG;AAC5B,EAAA,IAAI,YAAA,CAAa,KAAA,EAAO,IAAA,EAAM,OAAO,MAAM,CAAA,EAAG;AAC9C,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA;AAC1B,EAAA,IAAI,CAAC,GAAA,EAAK;AACV,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,QAAA,EAAU,CAAC,KAAK,OAAA,EAAS,IAAA,EAAM,IAAA,EAAM,MAAM,CAAA,EAAG;AAAA,MACxE,QAAA,EAAU,IAAA;AAAA,MACV,KAAA,EAAO;AAAA,KACR,CAAA;AACD,IAAA,KAAA,CAAM,KAAA,EAAM;AACZ,IAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,gFAA2E,CAAC,CAAA;AAAA,EACzF,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,KAAA,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,EAAGC,GAAA,CAAA,SAAA,CAAeD,cAAaA,KAAA,CAAA,OAAA,CAAQ,MAAM,CAAC,CAAA,EAAG,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AACpE,EAAGC,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,SAAS,IAAI,IAAA,EAAsB;AACjC,EAAA,MAAM,CAAA,GAASD,KAAA,CAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,IAAO,IAAI,CAAA;AAC3C,EAAA,OAAO,CAAA,KAAM,KAAK,GAAA,GAAM,CAAA;AAC1B;AC3OO,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,GAAYE,KAAA,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,KAAA,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,KAAA,CAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,EAAI,EAAG,IAAI,CAAA,IAAK,GAAA;AAAA,MAC5C,SAAA,EAAgBA,KAAA,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,KAAA,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,KAAA,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;ACnFO,SAAS,eAAe,OAAA,EAAwB;AACrD,EAAA,MAAM,MAAM,OAAA,CACT,OAAA,CAAQ,QAAQ,CAAA,CAChB,WAAA,CAAY,6CAA6C,CAAA,CACzD,MAAA,CAAO,gBAAA,EAAkB,mCAAmC,EAC5D,MAAA,CAAO,YAAA,EAAc,cAAc,CAAA,CACnC,MAAA,CAAO,eAA+B,IAAA,EAAwC;AAC7E,IAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,IAAA,MAAM,IAAA,GAAYE,KAAA,CAAA,OAAA,CAAQ,MAAA,CAAO,GAAA,IAAO,GAAG,CAAA;AAC3C,IAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,CAAkB;AAAA,MACrC,IAAA;AAAA,MACA,MAAM,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;AAAA,MAC9E,MAAM,IAAA,CAAK,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,GAAI;AAAA,KACvC,CAAA;AAED,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAA,CAAK,EAAE,EAAA,EAAI,MAAA,CAAO,EAAA,EAAI,MAAA,EAAQ,OAAO,MAAA,EAAQ,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAQ,CAAA;AAAA,IACtE,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,WAAW,CAAC,CAAA,MAAA,EAAWA,KAAA,CAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,EAAI,EAAG,IAAI,CAAA,IAAK,GAAG,CAAA,CAAE,CAAA;AAC5E,MAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,QAAA,MAAM,IAAA,GAAO,MAAM,EAAA,GAAK,CAAA,CAAE,MAAM,QAAG,CAAA,GAAI,CAAA,CAAE,GAAA,CAAI,QAAG,CAAA;AAChD,QAAA,MAAM,MAAA,GAAS,MAAM,MAAA,GAAS,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,KAAA,CAAM,MAAM,CAAA,CAAA,CAAG,CAAA,GAAI,EAAA;AAC5D,QAAA,IAAA,CAAK,KAAK,IAAI,CAAA,CAAA,EAAI,MAAM,IAAI,CAAA,EAAG,MAAM,CAAA,CAAE,CAAA;AAAA,MACzC;AACA,MAAA,IAAA,CAAK,OAAO,EAAA,GAAK,CAAA,CAAE,KAAA,CAAM,CAAA,4BAAA,EAA4B,OAAO,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,MAAA,CAAG,CAAA,GAAI,CAAA,CAAE,GAAA,CAAI,qBAAqB,CAAC,CAAA;AAAA,IACpH;AAEA,IAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,MAAA,MAAM,IAAI,QAAA,CAAS,+BAAA,EAAiC,QAAA,CAAS,iBAAiB,CAAA;AAAA,IAChF;AAAA,EACF,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,GAAG,CAAA;AACxB;ACtCO,SAAS,OAAO,MAAA,EAA4B;AACjD,EAAA,OAAYC,KAAA,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,CAAA,CACf,WAAA,CAAY,2EAA2E,CAAA,CACvF,MAAA,CAAO,SAAA,EAAW,8CAA8C,CAAA,CAChE,MAAA,CAAO,WAAW,mDAAmD,CAAA,CAErE,SAAA,CAAU,IAAI,MAAA,CAAO,MAAM,CAAA,CAAE,QAAA,EAAU,CAAA,CACvC,MAAA,CAAO,eAA+B,IAAA,EAA0D;AAC/F,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,MACd,UAAA,EAAY,EAAA;AAAA;AAAA,MACZ,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;;;AC3GO,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,MAAMC,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,MAAMD,OAAmB,EAAC;AAC1B,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,CAAA,EAAE,IAAKC,IAAAA,EAAK;AAC7B,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA,EAAG;AACpB,IAAA,IAAA,CAAK,GAAA,CAAI,EAAE,EAAE,CAAA;AACb,IAAAD,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;AChDO,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,CAAIE,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,CAACC,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,MAAMC,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,IAAID,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;AAEvH,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAA,CAAK,EAAE,IAAA,EAAM,SAAA,EAAW,MAAA,EAAQ,EAAE,SAAS,MAAA,CAAO,OAAA,EAAS,IAAA,EAAM,MAAA,CAAO,MAAM,IAAA,EAAM,MAAA,CAAO,QAAQ,IAAA,EAAK,EAAG,SAAS,CAAA;AACpH,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,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;AC7EA,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,GAAcE,KAAA,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,KAAA,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,WAAK,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,KAAA,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,KAAA,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,KAAA,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,KAAA,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,KAAA,CAAA,OAAA,CAAQ,IAAA,EAAM,UAAU,CAAA;AAAA,EACtD,CAAA,CAAA,MAAQ;AAAA,EAER;AACA,EAAA,OAAYA,KAAA,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;AC/HA,IAAM,GAAA,GAAM,0BAAA;AAEL,SAAS,kBAAkB,OAAA,EAAwB;AACxD,EAAA,MAAM,GAAA,GAAM,OAAA,CACT,OAAA,CAAQ,WAAW,EACnB,WAAA,CAAY,mEAAmE,CAAA,CAC/E,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;AAGtC,IAAA,MAAM,KAAK,GAAA,EAAI;AACf,IAAA,MAAM,IAAA,GAAO,MAAM,UAAA,CAAW,EAAE,MAAM,WAAA,EAAa,GAAA,EAAK,OAAA,EAAS,IAAA,EAAM,CAAA;AACvE,IAAA,MAAM,MAAA,GAAS,KAAI,GAAI,EAAA;AAGvB,IAAA,MAAM,KAAK,GAAA,EAAI;AACf,IAAA,MAAM,OAAO,MAAM,UAAA,CAAW,EAAE,IAAA,EAAM,WAAA,EAAa,KAAK,CAAA;AACxD,IAAA,MAAM,MAAA,GAAS,KAAI,GAAI,EAAA;AAGvB,IAAA,MAAM,CAAA,GAAI,cAAA,CAAe,IAAA,CAAK,KAAK,CAAA;AACnC,IAAA,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,IAAA,MAAM,gBAAgB,CAAA,KAAM,CAAA;AAG5B,IAAA,MAAM,SAAA,GAAY,eAAA,CAAgB,IAAA,CAAK,KAAK,CAAA;AAC5C,IAAA,MAAM,SAAA,GAAY,cAAc,IAAI,CAAA;AACpC,IAAA,MAAM,WAAA,GAAc,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM;AACvC,MAAA,MAAM,QAAA,GAAW,WAAW,IAAA,CAAK,KAAA,EAAO,GAAG,EAAE,MAAA,EAAQ,CAAA,CAAE,cAAA;AACvD,MAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,CAAA,EAAG,SAAS,CAAA;AAClD,MAAA,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,IACpI,CAAC,CAAA;AACD,IAAA,MAAM,OAAA,GAAU,YAAY,MAAA,CAAO,CAAC,GAAG,CAAA,KAAM,CAAA,GAAI,CAAA,CAAE,QAAA,EAAU,CAAC,CAAA;AAC9D,IAAA,MAAM,SAAA,GAAY,YAAY,MAAA,CAAO,CAAC,GAAG,CAAA,KAAM,CAAA,GAAI,CAAA,CAAE,cAAA,EAAgB,CAAC,CAAA;AACtE,IAAA,MAAM,iBAAiB,OAAA,GAAU,CAAA,GAAI,KAAA,CAAM,SAAA,GAAY,OAAO,CAAA,GAAI,CAAA;AAElE,IAAA,MAAM,MAAA,GAAS;AAAA,MACb,MAAM,EAAE,KAAA,EAAO,IAAA,CAAK,UAAA,EAAY,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,OAAO,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,OAAO,KAAA,EAAM;AAAA,MACzG,KAAA,EAAO,EAAE,MAAA,EAAQ,KAAA,CAAM,MAAM,CAAA,EAAG,aAAA,EAAe,KAAA,CAAM,MAAM,CAAA,EAAG,YAAA,EAAc,IAAA,CAAK,MAAA,EAAO;AAAA,MACxF,WAAA,EAAa,EAAE,aAAA,EAAe,aAAA,EAAc;AAAA,MAC5C,gBAAgB,EAAE,SAAA,EAAW,WAAA,EAAa,cAAA,EAAgB,MAAM,mDAAA;AAAoD,KACtH;AAEA,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAA,CAAK,MAAM,CAAA;AACX,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,IAAA,CAAK,cAAc,CAAC,CAAA,MAAA,EAAM,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,YAAA,EAAY,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,MAAA,CAAQ,CAAA;AAC1F,IAAA,IAAA,CAAK,kBAAkB,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAC,CAAA,oBAAA,EAAoB,MAAA,CAAO,KAAA,CAAM,cAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,WAAA,EAAc,IAAA,CAAK,MAAM,CAAA,CAAA,CAAG,CAAA;AAC1I,IAAA,IAAA,CAAK,CAAA,eAAA,EAAkB,aAAA,GAAgB,CAAA,CAAE,KAAA,CAAM,uBAAkB,IAAI,CAAA,CAAE,GAAA,CAAI,0BAAqB,CAAC,CAAA,CAAE,CAAA;AACnG,IAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,MAAA,IAAA,CAAK,CAAA,yCAAA,EAA4C,CAAA,CAAE,GAAA,CAAI,WAAW,CAAC,CAAA,EAAA,CAAI,CAAA;AACvE,MAAA,KAAA,MAAW,KAAK,WAAA,EAAa;AAC3B,QAAA,IAAA,CAAK,CAAA,IAAA,EAAOD,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,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,CAAK,CAAA,iBAAA,EAAe,eAAe,OAAA,CAAQ,CAAC,CAAC,CAAA,iBAAA,CAAgB,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,0CAA0C,CAAC,CAAA,CAAE,CAAA;AAAA,IACnI;AAAA,EACF,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,GAAG,CAAA;AACxB;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,GAAaG,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,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,SAASH,IAAAA,CAAI,GAAW,CAAA,EAAmB;AACzC,EAAA,OAAO,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA;AAC1B;ACvHO,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,CAACI,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,MAAWP,QAAO,eAAA,EAAiB;AACjC,IAAA,MAAM,CAAA,GAAIP,cAAAA,CAAK,IAAA,CAAK,IAAA,EAAMO,IAAG,CAAA;AAC7B,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI;AACF,MAAA,IAAA,GAAON,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,MAAMK,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,MAAA,GAAS,YAAY,MAAA,CAAO,MAAM,GAAG,IAAA,EAAM,IAAA,CAAK,KAAK,CAAA;AAE3D,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,IAAA,CAAK,MAAM,CAAA;AACX,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,CAAC,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,YAAY,CAAA,EAAG;AAC3C,MAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,2EAA2E,CAAC,CAAA;AACvF,MAAA;AAAA,IACF;AACA,IAAA,IAAI,MAAA,CAAO,YAAY,CAAA,EAAG;AACxB,MAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,0CAA0C,CAAC,CAAA;AACtD,MAAA;AAAA,IACF;AACA,IAAA,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,IAAA,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,IAAA,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,yGAAyG,CAAC,CAAA;AAAA,EACvH,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;ACZO,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,CAAML,YAAAA,CAAG,YAAA,CAAaD,cAAAA,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,GAAIC,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,GAAMc,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,cAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA,GAAIA,cAAAA,CAAK,IAAA,CAAK,IAAA,EAAM,WAAW,CAAC,CAAA;AACtG,EAAA,MAAM,GAAA,GAAM,KAAK,GAAA,GAAM,gBAAA,CAAiBA,eAAK,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,6FAA6F,CAAA,CACzG,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,cAAaA,KAAA,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,KAAA,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,GAAc,KAAA,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,CAAe,WAAK,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,MAAGA,iBAAa,OAAA,EAAc,KAAA,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,IAAOA,GAAA,CAAA,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3B,MAAGA,GAAA,CAAA,YAAA,CAAa,QAAA,EAAe,KAAA,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,IAAOA,GAAA,CAAA,UAAA,CAAW,GAAG,CAAA,EAAG;AACtB,MAAGA,GAAA,CAAA,YAAA,CAAa,GAAA,EAAU,KAAA,CAAA,IAAA,CAAK,MAAA,EAAQ,mBAAmB,CAAC,CAAA;AAC3D,MAAA,QAAA,CAAS,KAAK,mBAAmB,CAAA;AACjC,MAAA,IAAOA,GAAA,CAAA,UAAA,CAAW,MAAA,CAAO,IAAI,CAAC,CAAA,EAAG;AAC/B,QAAGA,GAAA,CAAA,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA,EAAQ,KAAA,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,IAAGA,GAAA,CAAA,aAAA,CAAmB,WAAK,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,KAAU,KAAA,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,eAAiB,KAAA,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,EAAwC,KAAA,CAAA,QAAA,CAAS,MAAM,MAAM,CAAC,YAAY,CAAC,CAAA;AAAA,EACxF,CAAC,CAAA;AACH,EAAA,kBAAA,CAAmB,GAAG,CAAA;AACxB;AC7EO,IAAM,WAAA,GAAc,IAAIC,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,cAAQ,UAAU,CAAA;AACvC,EAAA,MAAMC,YAAAA,GAAmBD,KAAA,CAAA,IAAA,CAAK,OAAA,EAAS,WAAW,CAAA;AAElD,EAAA,MAAM,UAAUC,YAAW,CAAA;AAC3B,EAAA,OAAA,CAAQ,GAAA,CAAItB,MAAAA,CAAM,KAAA,CAAM,QAAG,CAAA,GAAI,YAAYA,MAAAA,CAAM,IAAA,CAAK,YAAY,CAAC,CAAA,UAAA,CAAY,CAAA;AAE/E,EAAA,MAAM,UAAA,GAAkBqB,KAAA,CAAA,IAAA,CAAK,OAAA,EAAS,oBAAoB,CAAA;AAC1D,EAAA,IAAI,MAAME,UAAAA,CAAW,UAAU,CAAA,EAAG;AAChC,IAAA,OAAA,CAAQ,GAAA,CAAIvB,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;ACZA,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,MAAMuB,YAAA,CAAgBC,KAAA,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,GAAOzB,MAAAA,CAAM,GAAA,CAAI,SAAS,CAAA;AAChC,EAAA,MAAM0B,KAAAA,GAAO1B,MAAAA,CAAM,GAAA,CAAI,SAAS,CAAA;AAChC,EAAA,MAAM,UAAA,GAAa,iBAAA,GAAoB,CAAA,WAAA,EAAc,iBAAiB,CAAA,CAAA,GAAK,kBAAA;AAC3E,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,CAAIyB,KAAAA,CAAK,4TAAwD,CAAC,CAAA;AAC1E,EAAA,OAAA,CAAQ,IAAIA,KAAAA,CAAK,UAAK,CAAA,GAAI,IAAA,GAAOC,MAAK,QAAG,CAAA,GAAI,IAAA,GAAO1B,MAAAA,CAAM,KAAK,KAAA,CAAM,qCAAqC,IAAI,YAAA,GAAeyB,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,GAAOzB,MAAAA,CAAM,KAAK,KAAA,CAAM,UAAU,IAAI,YAAY,CAAA;AAC9D,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,EAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,GAAOyB,KAAAA,CAAK,MAAG,CAAA,GAAI,GAAA,GAAMzB,MAAAA,CAAM,KAAA,CAAM,4BAA4B,CAAA,GAAIA,MAAAA,CAAM,GAAA,CAAI,mDAA8C,CAAC,CAAA;AAC1I,EAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,GAAOyB,KAAAA,CAAK,MAAG,CAAA,GAAI,GAAA,GAAMzB,MAAAA,CAAM,KAAA,CAAM,eAAe,CAAA,GAAIA,MAAAA,CAAM,GAAA,CAAI,qEAAgE,CAAC,CAAA;AAC/I,EAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,GAAOyB,KAAAA,CAAK,MAAG,CAAA,GAAI,GAAA,GAAMzB,MAAAA,CAAM,KAAA,CAAM,8BAA8B,CAAA,GAAIA,MAAAA,CAAM,GAAA,CAAI,uDAAkD,CAAC,CAAA;AAChJ,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAChB;;;ACDO,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,IAAIoB,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,cAAQ,UAAU,CAAA;AACvC,EAAA,IAAI,CAAE,MAAMJ,YAAA,CAAW,OAAO,CAAA,EAAI;AAChC,IAAA,OAAA,CAAQ,MAAMvB,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,MAAMuB,YAAA,CAAgBI,WAAK,OAAA,EAAS,WAAA,EAAa,kBAAkB,CAAC,CAAA;AAKzF,EAAA,IAAI,YAAA;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,IAAI,SAAA,CAAU,EAAA,IAAM,CAAC,SAAA,CAAU,GAAG,OAAA,EAAS;AACzC,UAAA,OAAA,CAAQ,MAAM3B,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;AAAA,GACd;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;ACjfI,SAAS,WAAW,QAAA,EAAgC;AACzD,EAAA,MAAM,QAAkB,EAAC;AAGzB,EAAA,MAAMyB,KAAAA,GAAOzB,MAAAA,CAAM,GAAA,CAAI,SAAS,CAAA;AAChC,EAAA,MAAM0B,KAAAA,GAAO1B,MAAAA,CAAM,GAAA,CAAI,SAAS,CAAA;AAEhC,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,KAAK,KAAA,GAAQyB,KAAAA,CAAK,kDAAU,CAAA,GAAIC,KAAAA,CAAK,QAAG,CAAC,CAAA;AAC/C,EAAA,KAAA,CAAM,IAAA,CAAK,IAAA,GAAO1B,MAAAA,CAAM,GAAA,CAAI,QAAG,CAAA,GAAIyB,KAAAA,CAAK,QAAG,CAAA,GAAI,GAAA,GAAMC,KAAAA,CAAK,QAAG,IAAI,IAAA,GAAOA,KAAAA,CAAK,QAAG,CAAA,GAAI,GAAA,GAAMD,KAAAA,CAAK,QAAG,CAAA,GAAIzB,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,GAAIyB,KAAAA,CAAK,QAAG,CAAA,GAAI,IAAA,GAAOzB,MAAAA,CAAM,GAAA,CAAI,cAAI,CAAA,GAAI,IAAA,GAAOyB,KAAAA,CAAK,QAAG,CAAA,GAAIzB,MAAAA,CAAM,GAAA,CAAI,QAAG,CAAA,GAAI,IAAA,GAAOA,MAAAA,CAAM,GAAA,CAAI,CAAA,2BAAA,EAA8B,OAAO,CAAA,CAAE,CAAC,CAAA;AACrK,EAAA,KAAA,CAAM,IAAA,CAAK,KAAA,GAAQyB,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,KAAKzB,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,qBAAqB,CAAC,CAAA;AAC7C,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,oBAAA,EAAuB,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA,wCAAA,CAA0C,CAAA;AAChG,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,IAAIoB,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,GAAoBQ,KAAA,CAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,CAAA;AAEzC,EAAA,IAAI,CAAE,MAAML,UAAAA,CAAW,YAAY,CAAA,EAAI;AACrC,IAAA,OAAA,CAAQ,MAAMvB,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,GAAQ6B,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;;;ACDA,IAAM,KAAA,GAAQ,CAAC,EAAA,KAAe,IAAI,OAAA,CAAQ,CAACnB,SAAAA,KAAY,UAAA,CAAWA,SAAAA,EAAS,EAAE,CAAC,CAAA;AAEvE,IAAM,YAAA,GAAe,IAAIU,OAAAA,CAAQ,OAAO,CAAA,CAC5C,WAAA,CAAY,mEAAmE,CAAA,CAC/E,MAAA,CAAO,gBAAA,EAAkB,qCAAqC,CAAA,CAC9D,MAAA,CAAO,mBAAA,EAAqB,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,CAAO,OAAO,IAAA,KAAgE;AAC7E,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,CAAMpB,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,sBAAA,CAAuB,KAAK,CAAA;AAC5B,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,0BAA0B,eAAA,EAAiB,EAAE,CAAC,CAAA;AAOpE,MAAA,IAAI;AACF,QAAA,MAAM,OAAO,WAAA,EAAY;AACzB,QAAA,IAAI,IAAA,EAAM;AACR,UAAA,MAAM,GAAA,GAAM,gBAAA,CAAiB,4BAAA,CAA6B,IAAI,GAAG,IAAI,CAAA;AACrE,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,GAAA,CAAIA,MAAAA,CAAM,GAAA,CAAI,2CAA2C,CAAC,CAAA;AAClE,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;;;ACvKI,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,IAAIoB,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,CAAIpB,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,GAAiB8B,KAAA,CAAA,IAAA,CAAQ,EAAA,CAAA,OAAA,EAAQ,EAAG,WAAW,CAAA;AACrD,IAAM,UAAA,GAAkBA,KAAA,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;;;AChHA,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,eAAe,qBAAqB,GAAA,EAAsC;AACxE,EAAA,IAAI,MAAMP,UAAAA,CAAgBQ,KAAA,CAAA,IAAA,CAAK,KAAK,gBAAgB,CAAC,GAAG,OAAO,MAAA;AAC/D,EAAA,IAAI,MAAMR,UAAAA,CAAgBQ,KAAA,CAAA,IAAA,CAAK,KAAK,WAAW,CAAC,GAAG,OAAO,KAAA;AAC1D,EAAA,IAAI,MAAMR,UAAAA,CAAgBQ,KAAA,CAAA,IAAA,CAAK,KAAK,WAAW,CAAC,GAAG,OAAO,MAAA;AAC1D,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,iBAAA,CAAkB,EAAA,EAAoB,GAAA,EAAa,OAAA,EAAiB,KAAA,EAAwB;AACnG,EAAA,MAAM,IAAA,GAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA;AAC9B,EAAA,QAAQ,EAAA;AAAI,IACV,KAAK,MAAA;AACH,MAAA,OAAO,KAAA,GAAQ,CAAA,YAAA,EAAe,IAAI,CAAA,CAAA,GAAK,YAAY,IAAI,CAAA,CAAA;AAAA,IACzD,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,KAAA,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;AAEO,IAAM,aAAA,GAAgB,IAAIX,OAAAA,CAAQ,QAAQ,EAC9C,WAAA,CAAY,uCAAuC,CAAA,CACnD,MAAA,CAAO,SAAA,EAAW,wCAAwC,EAC1D,MAAA,CAAO,gBAAA,EAAkB,+CAA+C,CAAA,CACxE,MAAA,CAAO,YAAY,4BAA4B,CAAA,CAC/C,MAAA,CAAO,OAAO,IAAA,KAA6D;AAC1E,EAAA,OAAA,CAAQ,IAAIpB,MAAAA,CAAM,GAAA,CAAI,CAAA,iBAAA,EAAoB,OAAO,EAAE,CAAC,CAAA;AACpD,EAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,GAAA,CAAI,0BAA0B,CAAC,CAAA;AAEjD,EAAA,MAAM,MAAA,GAAS,MAAM,kBAAA,EAAmB;AAExC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,kEAAkE,CAAC,CAAA;AAC3F,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAMgC,OAAAA,GAAS,MAAM,OAAO,QAAQ,CAAA;AACpC,EAAA,IAAI,CAACA,OAAAA,CAAO,EAAA,CAAG,MAAA,EAAQ,OAAO,CAAA,EAAG;AAC/B,IAAA,OAAA,CAAQ,IAAIhC,MAAAA,CAAM,KAAA,CAAM,QAAG,CAAA,GAAI,CAAA,gCAAA,EAAmC,OAAO,CAAA,EAAA,CAAI,CAAA;AAC7E,IAAA;AAAA,EACF;AAEA,EAAA,OAAA,CAAQ,GAAA,CAAIA,OAAM,MAAA,CAAO,CAAA,kBAAA,EAAqB,OAAO,CAAA,QAAA,EAAM,MAAM,EAAE,CAAC,CAAA;AAEpE,EAAA,IAAI,KAAK,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,GAAA,CAAI,mCAAmC,CAAC,CAAA;AAC1D,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,GAAA,GAAM,QAAQ,GAAA,EAAI;AAGxB,EAAA,MAAM,WAAW,mBAAA,EAAoB;AACrC,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,IAAU,QAAA,KAAa,IAAA;AAE7C,EAAA,MAAM,KAAsB,IAAA,CAAK,EAAA,KAA0B,QAAA,IAAY,MAAM,qBAAqB,GAAG,CAAA,CAAA;AAErG,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,GAAA,GAAM,sBAAA,CAAuB,EAAA,EAAI,eAAA,EAAiB,MAAM,CAAA;AACxD,IAAA,OAAA,CAAQ,GAAA,CAAIA,OAAM,GAAA,CAAI,CAAA,kCAAA,EAAqC,EAAE,CAAA,EAAA,EAAK,GAAG,EAAE,CAAC,CAAA;AAAA,EAC1E,CAAA,MAAO;AACL,IAAA,MAAM,KAAA,GAAQ,MAAM,eAAA,CAAgB,GAAG,CAAA;AACvC,IAAA,GAAA,GAAM,iBAAA,CAAkB,EAAA,EAAI,eAAA,EAAiB,MAAA,EAAQ,KAAK,CAAA;AAC1D,IAAA,OAAA,CAAQ,GAAA,CAAIA,OAAM,GAAA,CAAI,CAAA,MAAA,EAAS,EAAE,CAAA,EAAA,EAAK,GAAG,EAAE,CAAC,CAAA;AAAA,EAC9C;AAEA,EAAA,IAAI;AACF,IAAAiC,SAAS,GAAA,EAAK,EAAE,GAAA,EAAK,KAAA,EAAO,WAAW,CAAA;AACvC,IAAA,OAAA,CAAQ,IAAIjC,MAAAA,CAAM,KAAA,CAAM,QAAG,CAAA,GAAI,CAAA,0BAAA,EAA6B,MAAM,CAAA,CAAE,CAAA;AAAA,EACtE,CAAA,CAAA,MAAQ;AACN,IAAA,OAAA,CAAQ,MAAMA,MAAAA,CAAM,GAAA,CAAI,CAAA,6BAAA,EAAgC,GAAG,EAAE,CAAC,CAAA;AAC9D,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACF,CAAC,CAAA;AC/HH,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,IAAIa,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,GAAgBc,KAAA,CAAA,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AACvC,MAAA,IAAI,CAAE,MAAMX,UAAAA,CAAW,QAAQ,CAAA,EAAI;AACjC,QAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAMvB,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,MAAMmC,KAAAA,GAAO,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,MAAM,CAAC,CAAA;AACxC,IAAA,IAAI,KAAK,GAAA,EAAK;AACZ,MAAA,MAAM,cAAmBD,KAAA,CAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,EAAGC,QAAO,IAAI,CAAA;AACvD,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,QACbnC,MAAAA,CAAM,KAAA,CAAM,QAAG,CAAA,GAAI,CAAA,yBAAA,EAA4B,GAAA,CAAI,UAAA,CAAW,MAAM,CAAA,kBAAA,EAA0BkC,KAAA,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,CAAMnC,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,GAAoBoC,cAAQ,QAAQ,CAAA;AAC1C,EAAA,IAAI,CAAE,MAAMb,UAAAA,CAAW,YAAY,CAAA,EAAI;AACrC,IAAA,OAAA,CAAQ,MAAMvB,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,IAAIoB,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,CAAMpB,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,CAAmBoC,KAAA,CAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,GAAG,IAAI,CAAA;AAChD,IAAA,OAAA,CAAQ,GAAA,CAAIpC,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,IAAIoB,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,CAAmBgB,KAAA,CAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,GAAG,MAAM,CAAA;AAClD,IAAA,OAAA,CAAQ,GAAA,CAAIpC,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,IAAIoB,OAAAA,CAAQ,MAAM,EAC1C,WAAA,CAAY,iEAAiE,CAAA,CAC7E,UAAA,CAAW,aAAa,CAAA,CACxB,UAAA,CAAW,YAAY,CAAA,CACvB,WAAW,UAAU,CAAA;;;ACrNjB,IAAM,cAAA,uBAAqB,GAAA,CAAI;AAAA,EACpC,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;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,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,QAAQ,OAAA,EAAS,WAAA,EAAa,2BAA2B,CAAA,CACzD,wBAAA,CAAyB,IAAI,CAAA,CAC7B,WAAA;AAAA,IACC,OAAA;AAAA,IACA;AAAA,GAIF;AAIF,EAAA,aAAA,CAAc,OAAO,CAAA;AACrB,EAAA,cAAA,CAAe,OAAO,CAAA;AACtB,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,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,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,IAAOiB,GAAA,CAAA,UAAA,CAAgBC,KAAA,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,OAAO,CAAC,KAAA,EAAO,GAAG,IAAI,CAAA;AACxB;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;AACvB,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,GAAA,EAAK,GAAG,CAAA;AAEpC,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;AACF,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,KAAA,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,KAAA,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 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(`· deterministic code graph · 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 { 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 { 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}\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 .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 // 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 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 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 artifacts: written,\n corpusHash: result.graph.provenance.corpusHash,\n timingMs: result.timing.totalMs,\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 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\n maybeWarmEmbeddings(root, result.graph, global, opts.warm !== false);\n}\n\n/**\n * After an interactive build, warm the semantic index in the background so the\n * first `vg ask` is instant — but only when it won't surprise-download: the model\n * must already be cached on this machine (downloaded once, centrally, by an\n * earlier `vg ask`/`vg embed`). Disabled with `--no-warm`; skipped under\n * --json/--quiet/--local and when not at a TTY (so CI, which has no TTY, never\n * warms). The detached child runs `vg embed --bg` (no download, silent) and a\n * 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 modelId = resolveEmbedModel();\n if (!isModelReady(modelId)) return; // model not downloaded yet → leave it to the first `ask`\n if (countPending(graph, root, modelId) === 0) return; // already warm\n const cli = process.argv[1];\n if (!cli) return;\n try {\n const child = spawn(process.execPath, [cli, 'embed', '-C', root, '--bg'], {\n detached: true,\n stdio: 'ignore',\n });\n child.unref();\n info(c.dim(' warming the semantic index in the background — `vg ask` will be instant'));\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 { Command } from 'commander';\nimport { verifyDeterminism } from '../engine/verify.js';\nimport { ExitCode, CliError } from '../util/exit.js';\nimport { c, info, json } from '../util/output.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\n\n/**\n * `vg verify` — determinism self-check. Re-derives the graph and asserts\n * byte-equality run-to-run and cache-vs-full. Exit 4 on mismatch (the contract\n * that keeps the headline determinism claim from wobbling — run in CI).\n */\nexport function registerVerify(program: Command): void {\n const cmd = program\n .command('verify')\n .description('determinism self-check (exit 4 on mismatch)')\n .option('--only <langs>', 'restrict to languages, e.g. ts,py')\n .option('--jobs <n>', 'worker count')\n .action(async function (this: Command, opts: { only?: string; jobs?: string }) {\n const global = readGlobal(this);\n const root = path.resolve(global.cwd ?? '.');\n const result = await verifyDeterminism({\n root,\n only: opts.only ? opts.only.split(',').map((s) => s.trim()).filter(Boolean) : undefined,\n jobs: opts.jobs ? Number(opts.jobs) : undefined,\n });\n\n if (global.json) {\n json({ ok: result.ok, checks: result.checks, digest: result.digest });\n } else {\n info(`${c.cyan('vg verify')} · ${path.relative(process.cwd(), root) || '.'}`);\n for (const check of result.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(result.ok ? c.green(` deterministic · digest ${result.digest.slice(0, 16)}…`) : c.red(' NON-DETERMINISTIC'));\n }\n\n if (!result.ok) {\n throw new CliError('determinism self-check failed', ExitCode.NON_DETERMINISTIC);\n }\n });\n applyGlobalOptions(cmd);\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, no-download background warm-up spawned by `vg build`.\n .addOption(new Option('--bg').hideHelp())\n .action(async function (this: Command, opts: { where?: boolean; clear?: boolean; bg?: 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 noDownload: bg, // background warm-up never downloads\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 * 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 } 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\n if (global.json) {\n json({ root, smallRepo, 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(' 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 { 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;\n * - determinism (two pinned builds must be byte-identical);\n * - token reduction: vg's context block vs a grep/read baseline, per question.\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 function registerBenchmark(program: Command): void {\n const cmd = program\n .command('benchmark')\n .description('reproducible build + 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\n // 1. cold build (no cache)\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 deterministic = a === b;\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 const result = {\n repo: { files: cold.totalFiles, nodes: cold.graph.meta.counts.nodes, edges: cold.graph.meta.counts.edges },\n build: { coldMs: round(coldMs), incrementalMs: round(warmMs), reusedOnWarm: warm.reused },\n determinism: { byteIdentical: deterministic },\n tokenReduction: { questions: perQuestion, aggregateRatio, note: 'estimates (~4 chars/token); scales with repo size' },\n };\n\n if (global.json) {\n json(result);\n return;\n }\n\n info(`${c.cyan('vg benchmark')} · ${result.repo.files} files · ${result.repo.nodes} nodes`);\n info(` build cold ${result.build.coldMs.toFixed(0)}ms · incremental ${result.build.incrementalMs.toFixed(0)}ms (reused ${warm.reused})`);\n info(` determinism ${deterministic ? c.green('byte-identical ✓') : c.red('NON-DETERMINISTIC ✗')}`);\n if (perQuestion.length) {\n info(` token reduction vs grep/read baseline (${c.dim('estimates')}):`);\n for (const q of perQuestion) {\n info(` ${pad(`${q.ratio.toFixed(1)}×`, 6)} ${c.dim(`vg ${q.vgTokens} vs ~${q.baselineTokens}`)} \"${q.question}\"`);\n }\n info(` ${c.bold(`aggregate ≈ ${aggregateRatio.toFixed(1)}× fewer tokens`)} ${c.dim('(honest estimate, scales with repo size)')}`);\n }\n });\n applyGlobalOptions(cmd);\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 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 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 } 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 report = readSavings(rootOf(global), days, Date.now());\n\n if (global.json) {\n json(report);\n return;\n }\n\n info(`${c.cyan('vg savings')} · last ${days} days ${c.dim('(local, nothing left your machine)')}`);\n if (!report.enabled && report.queries === 0) {\n info(c.dim(' recording is off. Enable with `vg serve --savings`, then query via MCP.'));\n return;\n }\n if (report.queries === 0) {\n info(c.dim(' no queries recorded yet in this window'));\n return;\n }\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 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","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 · 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|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';\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 const installCmd = detectedAssistant ? `vg install ${detectedAssistant}` : 'vg install --all';\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';\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\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 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 };\n\n // `scan` also builds the local code map (the AI/docs index) so one command\n // yields both the Drift Score 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 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(`Drift 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('Drift Score Summary'));\n lines.push('');\n lines.push(chalk.bold(' Drift Score: ') + 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(`| **Drift Score** | ${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 { 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\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 .action(async (opts: { ingest?: string; region: string; browser: 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 writeStoredCredentials(creds);\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 ${credentialsPath()}`));\n\n // Defense in depth (GUARDRAILS §1.1): the DSN we just stored is a\n // credential and must never be committed. When run inside a git repo,\n // make sure the credentials file is git-ignored, creating .gitignore if\n // the repo doesn't have one. This is best-effort — never fail an\n // otherwise-successful login over .gitignore housekeeping.\n try {\n const root = findGitRoot();\n if (root) {\n const res = ensureGitignored(gitignoreEntryForCredentials(root), 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 \"vibgrate 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 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\ntype 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 */\nasync 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\nfunction getInstallCommand(pm: PackageManager, pkg: string, version: string, isDev: boolean): string {\n const spec = `${pkg}@${version}`;\n switch (pm) {\n case 'pnpm':\n return isDev ? `pnpm add -D ${spec}` : `pnpm add ${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\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 .action(async (opts: { check?: boolean; pm?: string; global?: boolean }) => {\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 \"vibgrate 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 cmd = getInstallCommand(pm, '@vibgrate/cli', latest, isDev);\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","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 { registerBuild, runBuild } from './commands/build.js';\nimport { registerStatus } from './commands/status.js';\nimport { registerVerify } from './commands/verify.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 { 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 { 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 'verify',\n 'ask',\n 'embed',\n 'show',\n 'path',\n 'tree',\n 'impact',\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 '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(\n 'after',\n '\\nRun `vg` to scan + map the current folder, `vg \"<question>\"` to ask, ' +\n '`vg status`/`vg verify` for state.\\n' +\n 'Drift: `vg scan` / `vg report`. Wire into your AI agent: `vg install`.\\n' +\n 'The `vibgrate` command is an alias for `vg`.\\nDocs: https://vibgrate.com/help',\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 registerVerify(program);\n registerAsk(program);\n registerEmbed(program);\n registerShow(program);\n registerPath(program);\n registerTree(program);\n registerInsights(program);\n registerImpact(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(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 → Drift Score + 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 // Bare word that is neither a command nor a path → treat as a search query.\n return ['ask', ...args];\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 const dispatched = dispatch(raw, cwd);\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 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/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/verify.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/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/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":["chalk","path","fs","path2","fs2","path3","path4","out","rel","fs3","resolve","pad","path5","next","mb","fs5","c","parseDsn","fs8","path8","fs9","Command","path10","vibgrateDir","pathExists","path11","teal","mint","path12","path13","spawn","path14","path15","path16","semver","execSync","path17","json","path18","fs11","path19"],"mappings":"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","file":"cli.js","sourcesContent":["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(`· deterministic code graph · 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 { 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}\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 .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 // 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 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 artifacts: written,\n corpusHash: result.graph.provenance.corpusHash,\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 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\n maybeWarmEmbeddings(root, result.graph, global, opts.warm !== false);\n}\n\n/**\n * After an interactive build, warm the semantic index in the background so the\n * first `vg ask` is instant — but only when it won't surprise-download: the model\n * must already be cached on this machine (downloaded once, centrally, by an\n * earlier `vg ask`/`vg embed`). Disabled with `--no-warm`; skipped under\n * --json/--quiet/--local and when not at a TTY (so CI, which has no TTY, never\n * warms). The detached child runs `vg embed --bg` (no download, silent) and a\n * 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 modelId = resolveEmbedModel();\n if (!isModelReady(modelId)) return; // model not downloaded yet → leave it to the first `ask`\n if (countPending(graph, root, modelId) === 0) return; // already warm\n const cli = process.argv[1];\n if (!cli) return;\n try {\n const child = spawn(process.execPath, [cli, 'embed', '-C', root, '--bg'], {\n detached: true,\n stdio: 'ignore',\n });\n child.unref();\n info(c.dim(' warming the semantic index in the background — `vg ask` will be instant'));\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 { Command } from 'commander';\nimport { verifyDeterminism } from '../engine/verify.js';\nimport { ExitCode, CliError } from '../util/exit.js';\nimport { c, info, json } from '../util/output.js';\nimport { applyGlobalOptions, readGlobal } from '../cli-options.js';\n\n/**\n * `vg verify` — determinism self-check. Re-derives the graph and asserts\n * byte-equality run-to-run and cache-vs-full. Exit 4 on mismatch (the contract\n * that keeps the headline determinism claim from wobbling — run in CI).\n */\nexport function registerVerify(program: Command): void {\n const cmd = program\n .command('verify')\n .description('determinism self-check (exit 4 on mismatch)')\n .option('--only <langs>', 'restrict to languages, e.g. ts,py')\n .option('--jobs <n>', 'worker count')\n .action(async function (this: Command, opts: { only?: string; jobs?: string }) {\n const global = readGlobal(this);\n const root = path.resolve(global.cwd ?? '.');\n const result = await verifyDeterminism({\n root,\n only: opts.only ? opts.only.split(',').map((s) => s.trim()).filter(Boolean) : undefined,\n jobs: opts.jobs ? Number(opts.jobs) : undefined,\n });\n\n if (global.json) {\n json({ ok: result.ok, checks: result.checks, digest: result.digest });\n } else {\n info(`${c.cyan('vg verify')} · ${path.relative(process.cwd(), root) || '.'}`);\n for (const check of result.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(result.ok ? c.green(` deterministic · digest ${result.digest.slice(0, 16)}…`) : c.red(' NON-DETERMINISTIC'));\n }\n\n if (!result.ok) {\n throw new CliError('determinism self-check failed', ExitCode.NON_DETERMINISTIC);\n }\n });\n applyGlobalOptions(cmd);\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, no-download background warm-up spawned by `vg build`.\n .addOption(new Option('--bg').hideHelp())\n .action(async function (this: Command, opts: { where?: boolean; clear?: boolean; bg?: 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 noDownload: bg, // background warm-up never downloads\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 * 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 } 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\n if (global.json) {\n json({ root, smallRepo, 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(' 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 } 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 report = readSavings(rootOf(global), days, Date.now());\n\n if (global.json) {\n json(report);\n return;\n }\n\n info(`${c.cyan('vg savings')} · last ${days} days ${c.dim('(local, nothing left your machine)')}`);\n if (!report.enabled && report.queries === 0) {\n info(c.dim(' recording is off. Enable with `vg serve --savings`, then query via MCP.'));\n return;\n }\n if (report.queries === 0) {\n info(c.dim(' no queries recorded yet in this window'));\n return;\n }\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 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","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 · 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|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\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 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 // 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 Drift Score 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 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(`Drift 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('Drift Score Summary'));\n lines.push('');\n lines.push(chalk.bold(' Drift Score: ') + 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(`| **Drift Score** | ${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 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\ntype 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 */\nasync 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\nfunction getInstallCommand(pm: PackageManager, pkg: string, version: string, isDev: boolean): string {\n const spec = `${pkg}@${version}`;\n switch (pm) {\n case 'pnpm':\n return isDev ? `pnpm add -D ${spec}` : `pnpm add ${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\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 .action(async (opts: { check?: boolean; pm?: string; global?: boolean }) => {\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 \"vibgrate 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 cmd = getInstallCommand(pm, '@vibgrate/cli', latest, isDev);\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","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 { registerVerify } from './commands/verify.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 { 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 { 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 'verify',\n 'ask',\n 'embed',\n 'show',\n 'path',\n 'tree',\n 'impact',\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 '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 registerVerify(program);\n registerAsk(program);\n registerEmbed(program);\n registerShow(program);\n registerPath(program);\n registerTree(program);\n registerInsights(program);\n registerImpact(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(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 → Drift Score + 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 // Bare word that is neither a command nor a path → treat as a search query.\n return ['ask', ...args];\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 const dispatched = dispatch(raw, cwd);\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 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"]}