hermex 0.0.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/parser.ts","../src/analyze-usage.ts","../src/commands/shared.ts","../src/commands/analyze.ts","../src/commands/compare.ts","../src/utils/git-utils.ts","../src/utils/lockfile-parser.ts","../src/utils/file-utils.ts","../src/github-analysis.ts","../src/utils/formatters.ts","../src/commands/github.ts","../src/cli.ts"],"names":["fs","parseSync","_a","_b","pattern","glob","path","chalk","ora","tmp","simpleGit","lockfile","yaml","Command","findFiles","Table"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAM,8BAAN,MAAkC;AAAA,EAChC,WAAA,CAAY,cAAc,2BAAA,EAA6B;AACrD,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AACnB,IAAA,IAAA,CAAK,aAAA,GAAgB;AAAA,MACnB,aAAA,sBAAmB,GAAA,EAAI;AAAA,MACvB,YAAA,sBAAkB,GAAA,EAAI;AAAA,MACtB,gBAAA,sBAAsB,GAAA,EAAI;AAAA,MAC1B,cAAA,sBAAoB,GAAA,EAAI;AAAA,MACxB,cAAA,sBAAoB,GAAA,EAAI;AAAA,MACxB,mBAAA,sBAAyB,GAAA,EAAI;AAAA,MAC7B,iBAAA,sBAAuB,GAAA,EAAI;AAAA,MAC3B,WAAA,sBAAiB,GAAA,EAAI;AAAA,MACrB,cAAA,sBAAoB,GAAA,EAAI;AAAA,MACxB,gBAAA,sBAAsB,GAAA,EAAI;AAAA,MAC1B,aAAA,sBAAmB,GAAA,EAAI;AAAA,MACvB,cAAA,sBAAoB,GAAA,EAAI;AAAA,MACxB,QAAA,sBAAc,GAAA,EAAI;AAAA,MAClB,WAAA,sBAAiB,GAAA,EAAI;AAAA,MACrB,YAAA,sBAAkB,GAAA,EAAI;AAAA,MACtB,aAAA,sBAAmB,GAAA,EAAI;AAAA,MACvB,kBAAA,sBAAwB,GAAA,EAAI;AAAA,MAC5B,WAAA,sBAAiB,GAAA,EAAI;AAAA,MACrB,QAAA,sBAAc,GAAA,EAAI;AAAA,MAClB,iBAAA,sBAAuB,GAAA,EAAI;AAAA,MAC3B,aAAA,sBAAmB,GAAA;AAAI,KACzB;AACA,IAAA,IAAA,CAAK,cAAA,uBAAqB,GAAA,EAAI;AAC9B,IAAA,IAAA,CAAK,cAAA,uBAAqB,GAAA,EAAI;AAAA,EAChC;AAAA,EAEA,YAAY,QAAA,EAAU;AACpB,IAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,qBAAA,EAAmB,QAAQ,CAAA,CAAE,CAAA;AAEzC,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAOA,oBAAA,CAAG,YAAA,CAAa,QAAA,EAAU,MAAM,CAAA;AAC7C,MAAA,MAAM,GAAA,GAAMC,eAAU,IAAA,EAAM;AAAA,QAC1B,MAAA,EAAQ,YAAA;AAAA,QACR,GAAA,EAAK,IAAA;AAAA,QACL,UAAA,EAAY,IAAA;AAAA,QACZ,aAAA,EAAe;AAAA,OAChB,CAAA;AAED,MAAA,IAAA,CAAK,UAAU,GAAG,CAAA;AAClB,MAAA,OAAO,KAAK,cAAA,EAAe;AAAA,IAC7B,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,qBAAA,EAAmB,QAAQ,CAAA,CAAA,CAAA,EAAK,MAAM,OAAO,CAAA;AAC3D,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,SAAA,CAAU,IAAA,EAAM,MAAA,GAAS,IAAA,EAAM;AAC7B,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,QAAQ,KAAK,IAAA;AAAM,MACjB,KAAK,QAAA;AACH,QAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAC,IAAA,KAAS,KAAK,SAAA,CAAU,IAAA,EAAM,IAAI,CAAC,CAAA;AACtD,QAAA;AAAA,MAEF,KAAK,mBAAA;AACH,QAAA,IAAA,CAAK,cAAc,IAAI,CAAA;AACvB,QAAA;AAAA,MAEF,KAAK,gBAAA;AACH,QAAA,IAAA,CAAK,qBAAA,CAAsB,MAAM,MAAM,CAAA;AACvC,QAAA;AAAA,MAEF,KAAK,qBAAA;AACH,QAAA,IAAA,CAAK,2BAA2B,IAAI,CAAA;AACpC,QAAA;AAAA,MAEF,KAAK,YAAA;AAAA,MACL,KAAK,aAAA;AACH,QAAA,IAAA,CAAK,iBAAA,CAAkB,MAAM,MAAM,CAAA;AACnC,QAAA;AAAA,MAEF,KAAK,mBAAA;AACH,QAAA,IAAA,CAAK,wBAAA,CAAyB,MAAM,MAAM,CAAA;AAC1C,QAAA;AAAA,MAEF,KAAK,iBAAA;AACH,QAAA,IAAA,CAAK,sBAAA,CAAuB,MAAM,MAAM,CAAA;AACxC,QAAA;AAAA,MAEF,KAAK,kBAAA;AACH,QAAA,IAAA,CAAK,uBAAA,CAAwB,MAAM,MAAM,CAAA;AACzC,QAAA;AAAA,MAEF,KAAK,kBAAA;AACH,QAAA,IAAA,CAAK,uBAAA,CAAwB,MAAM,MAAM,CAAA;AACzC,QAAA;AAAA,MAEF,KAAK,uBAAA;AACH,QAAA,IAAA,CAAK,4BAAA,CAA6B,MAAM,MAAM,CAAA;AAC9C,QAAA;AAAA,MAEF,KAAK,qBAAA;AAAA,MACL,KAAK,oBAAA;AAAA,MACL,KAAK,yBAAA;AACH,QAAA,IAAA,CAAK,2BAA2B,IAAI,CAAA;AACpC,QAAA;AAAA,MAEF,KAAK,kBAAA;AACH,QAAA,IAAA,CAAK,wBAAwB,IAAI,CAAA;AACjC,QAAA;AAAA,MAEF;AAEE,QAAA,IAAA,CAAK,cAAc,IAAI,CAAA;AACvB,QAAA;AAAA;AACJ,EACF;AAAA,EAEA,cAAc,IAAA,EAAM;AAClB,IAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AAEvC,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,MAAM,KAAA,GAAQ,KAAK,GAAG,CAAA;AACtB,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,QAAA,KAAA,CAAM,QAAQ,CAAC,KAAA,KAAU,KAAK,SAAA,CAAU,KAAA,EAAO,IAAI,CAAC,CAAA;AAAA,MACtD,WAAW,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,MAAM,IAAA,EAAM;AAC3D,QAAA,IAAA,CAAK,SAAA,CAAU,OAAO,IAAI,CAAA;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,cAAc,IAAA,EAAM;AAClB,IAAA,MAAM,MAAA,GAAS,KAAK,MAAA,CAAO,KAAA;AAE3B,IAAA,IAAI,CAAC,IAAA,CAAK,eAAA,CAAgB,MAAM,CAAA,EAAG;AAEnC,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,gCAAA,EAA4B,MAAM,CAAA,CAAE,CAAA;AAEhD,IAAA,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,CAAC,IAAA,KAAS;AAxItC,MAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAyIM,MAAA,QAAQ,KAAK,IAAA;AAAM,QACjB,KAAK,wBAAA;AACH,UAAA,IAAA,CAAK,aAAA,CAAc,eAAe,GAAA,CAAI;AAAA,YACpC,IAAA,EAAM,KAAK,KAAA,CAAM,KAAA;AAAA,YACjB,MAAA;AAAA,YACA,IAAA,EAAA,CAAA,CAAM,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,KAAA,KAAS;AAAA,WAC3B,CAAA;AACD,UAAA,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AACxC,UAAA;AAAA,QAEF,KAAK,0BAAA;AACH,UAAA,IAAA,CAAK,aAAA,CAAc,iBAAiB,GAAA,CAAI;AAAA,YACtC,IAAA,EAAM,KAAK,KAAA,CAAM,KAAA;AAAA,YACjB,MAAA;AAAA,YACA,IAAA,EAAA,CAAA,CAAM,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,KAAA,KAAS;AAAA,WAC3B,CAAA;AACD,UAAA,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AACxC,UAAA;AAAA,QAEF,KAAK,iBAAA;AACH,UAAA,MAAM,eAAe,IAAA,CAAK,QAAA,GACtB,KAAK,QAAA,CAAS,KAAA,GACd,KAAK,KAAA,CAAM,KAAA;AACf,UAAA,MAAM,SAAA,GAAY,KAAK,KAAA,CAAM,KAAA;AAE7B,UAAA,IAAA,CAAK,aAAA,CAAc,aAAa,GAAA,CAAI;AAAA,YAClC,QAAA,EAAU,YAAA;AAAA,YACV,KAAA,EAAO,SAAA;AAAA,YACP,MAAA;AAAA,YACA,IAAA,EAAA,CAAA,CAAM,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,KAAA,KAAS;AAAA,WAC3B,CAAA;AAED,UAAA,IAAI,iBAAiB,SAAA,EAAW;AAC9B,YAAA,IAAA,CAAK,aAAA,CAAc,cAAA,CAAe,GAAA,CAAI,SAAA,EAAW;AAAA,cAC/C,QAAA,EAAU,YAAA;AAAA,cACV,MAAA;AAAA,cACA,IAAA,EAAA,CAAA,CAAM,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,KAAA,KAAS;AAAA,aAC3B,CAAA;AAAA,UACH;AAEA,UAAA,IAAA,CAAK,cAAA,CAAe,IAAI,SAAS,CAAA;AACjC,UAAA;AAAA;AACJ,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,qBAAA,CAAsB,MAAM,MAAA,EAAQ;AAvLtC,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAyLI,IAAA,IAAA,CAAA,CACE,UAAK,MAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,WAAU,MAAA,IAAA,CAAA,CACtB,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,WAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,MAAA,KAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,KAAA,MAAU,aAC9B,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,MAAA,KAAL,mBAAa,QAAA,KAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAuB,WAAU,MAAA,EACnC;AACA,MAAA,IAAA,CAAK,kBAAkB,IAAI,CAAA;AAAA,IAC7B;AAGA,IAAA,IAAA,CAAA,CAAI,EAAA,GAAA,IAAA,CAAK,MAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,IAAA,MAAS,QAAA,EAAU;AAClC,MAAA,IAAA,CAAK,qBAAqB,IAAI,CAAA;AAAA,IAChC;AAGA,IAAA,IAAI,IAAA,CAAK,YAAA,CAAa,IAAI,CAAA,EAAG;AAC3B,MAAA,IAAA,CAAK,gBAAgB,IAAI,CAAA;AAAA,IAC3B;AAGA,IAAA,IAAA,CAAA,CAAI,gBAAK,MAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,MAAA,KAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,WAAU,OAAA,EAAS;AAC1C,MAAA,IAAA,CAAA,CAAI,gBAAK,MAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,QAAA,KAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAuB,WAAU,MAAA,EAAQ;AAC3C,QAAA,IAAA,CAAK,iBAAiB,IAAI,CAAA;AAAA,MAC5B,aAAW,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,MAAA,KAAL,mBAAa,QAAA,KAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAuB,WAAU,YAAA,EAAc;AACxD,QAAA,IAAA,CAAK,uBAAuB,IAAI,CAAA;AAAA,MAClC;AAAA,IACF;AAGA,IAAA,IAAA,CAAA,CACE,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,MAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,QAAA,KAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAuB,KAAA,MAAU,cAAA,IAAA,CAAA,CACjC,EAAA,GAAA,IAAA,CAAK,MAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,KAAA,MAAU,cAAA,EACvB;AACA,MAAA,IAAA,CAAK,mBAAmB,IAAI,CAAA;AAAA,IAC9B;AAEA,IAAA,IAAA,CAAK,cAAc,IAAI,CAAA;AAAA,EACzB;AAAA,EAEA,kBAAkB,IAAA,EAAM;AA/N1B,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAgOI,IAAA,MAAM,GAAA,GAAA,CAAM,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,CAAA,CAAA;AAC7B,IAAA,IAAA,CACE,2BAAK,IAAA,MAAS,yBAAA,IAAA,CAAA,CACd,SAAI,IAAA,KAAJ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAU,UAAS,gBAAA,EACnB;AACA,MAAA,MAAM,aAAa,GAAA,CAAI,IAAA;AACvB,MAAA,IAAA,CAAA,CAAI,EAAA,GAAA,UAAA,CAAW,MAAA,KAAX,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,IAAA,MAAS,QAAA,EAAU;AACxC,QAAA,MAAM,MAAA,GAAA,CAAS,EAAA,GAAA,CAAA,EAAA,GAAA,UAAA,CAAW,SAAA,KAAX,IAAA,GAAA,MAAA,GAAA,EAAA,CAAuB,OAAvB,IAAA,GAAA,MAAA,GAAA,EAAA,CAA2B,KAAA;AAC1C,QAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,MAAM,CAAA,EAAG;AAChC,UAAA,IAAA,CAAK,aAAA,CAAc,YAAY,GAAA,CAAI;AAAA,YACjC,MAAA;AAAA,YACA,IAAA,EAAA,CAAA,CAAM,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,KAAA,KAAS;AAAA,WAC3B,CAAA;AACD,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,6BAAA,EAAyB,MAAM,CAAA,CAAE,CAAA;AAAA,QAC/C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,qBAAqB,IAAA,EAAM;AAnP7B,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAoPI,IAAA,MAAM,MAAA,GAAA,CAAS,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,OAAjB,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,KAAA;AACpC,IAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,MAAM,CAAA,EAAG;AAChC,MAAA,IAAA,CAAK,aAAA,CAAc,eAAe,GAAA,CAAI;AAAA,QACpC,MAAA;AAAA,QACA,IAAA,EAAA,CAAA,CAAM,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,KAAA,KAAS;AAAA,OAC3B,CAAA;AACD,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,6BAAA,EAA2B,MAAM,CAAA,CAAE,CAAA;AAAA,IACjD;AAAA,EACF;AAAA,EAEA,2BAA2B,IAAA,EAAM;AA9PnC,IAAA,IAAA,EAAA;AA+PI,IAAA,CAAA,EAAA,GAAA,IAAA,CAAK,YAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,OAAA,CAAQ,CAAC,IAAA,KAAS;AA/PzC,MAAA,IAAAC,GAAAA,EAAA,EAAA,EAAA,EAAA;AAgQM,MAAA,IAAA,CAAA,CAAIA,MAAA,IAAA,CAAK,EAAA,KAAL,IAAA,GAAA,MAAA,GAAAA,GAAAA,CAAS,UAAS,YAAA,EAAc;AAClC,QAAA,MAAM,OAAA,GAAU,KAAK,EAAA,CAAG,KAAA;AAGxB,QAAA,IAAI,KAAK,IAAA,EAAM;AACb,UAAA,MAAM,UAAA,GAAa,IAAA,CAAK,qBAAA,CAAsB,IAAA,CAAK,IAAI,CAAA;AACvD,UAAA,IAAI,UAAA,IAAc,IAAA,CAAK,kBAAA,CAAmB,UAAU,CAAA,EAAG;AACrD,YAAA,IAAA,CAAK,aAAA,CAAc,mBAAA,CAAoB,GAAA,CAAI,OAAA,EAAS;AAAA,cAClD,UAAA;AAAA,cACA,IAAA,EAAA,CAAA,CAAM,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,KAAA,KAAS;AAAA,aAC3B,CAAA;AACD,YAAA,IAAA,CAAK,cAAA,CAAe,IAAI,OAAO,CAAA;AAC/B,YAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,+BAAA,EAA2B,OAAO,CAAA,GAAA,EAAM,UAAU,CAAA,CAAE,CAAA;AAAA,UAClE;AAAA,QACF;AAAA,MACF;AAGA,MAAA,IAAA,CAAA,CAAI,EAAA,GAAA,IAAA,CAAK,EAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAS,IAAA,MAAS,eAAA,EAAiB;AACrC,QAAA,IAAA,CAAK,2BAAA,CAA4B,IAAA,CAAK,EAAA,EAAI,IAAA,CAAK,IAAI,CAAA;AAAA,MACrD;AAAA,IACF,CAAA,CAAA;AAEA,IAAA,IAAA,CAAK,cAAc,IAAI,CAAA;AAAA,EACzB;AAAA,EAEA,2BAAA,CAA4B,SAAS,IAAA,EAAM;AA1R7C,IAAA,IAAA,EAAA;AA2RI,IAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,UAAA,KAAR,IAAA,GAAA,MAAA,GAAA,EAAA,CAAoB,OAAA,CAAQ,CAAC,IAAA,KAAS;AA3R1C,MAAA,IAAAA,GAAAA,EAAA,EAAA;AA4RM,MAAA,IACE,IAAA,CAAK,SAAS,2BAAA,IAAA,CAAA,CACdA,GAAAA,GAAA,KAAK,GAAA,KAAL,IAAA,GAAA,MAAA,GAAAA,GAAAA,CAAU,IAAA,MAAS,YAAA,EACnB;AACA,QAAA,MAAM,QAAA,GAAW,KAAK,GAAA,CAAI,KAAA;AAE1B,QAAA,IAAA,CACE,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,UAAS,YAAA,IACf,IAAA,CAAK,eAAe,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA,EAClC;AACA,UAAA,IAAA,CAAK,aAAA,CAAc,kBAAkB,GAAA,CAAI;AAAA,YACvC,QAAA,EAAU,QAAA;AAAA,YACV,QAAQ,IAAA,CAAK,KAAA;AAAA,YACb,IAAA,EAAA,CAAA,CAAM,EAAA,GAAA,OAAA,CAAQ,IAAA,KAAR,IAAA,GAAA,MAAA,GAAA,EAAA,CAAc,KAAA,KAAS;AAAA,WAC9B,CAAA;AACD,UAAA,IAAA,CAAK,cAAA,CAAe,IAAI,QAAQ,CAAA;AAChC,UAAA,OAAA,CAAQ,IAAI,CAAA,yBAAA,EAAqB,QAAQ,CAAA,MAAA,EAAS,IAAA,CAAK,KAAK,CAAA,CAAE,CAAA;AAAA,QAChE;AAAA,MACF;AAAA,IACF,CAAA,CAAA;AAAA,EACF;AAAA,EAEA,iBAAA,CAAkB,MAAM,MAAA,EAAQ;AAC9B,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,IAAA,CAAK,wBAAA,CAAyB,IAAA,CAAK,OAAA,EAAS,IAAI,CAAA;AAAA,IAClD;AACA,IAAA,IAAA,CAAK,cAAc,IAAI,CAAA;AAAA,EACzB;AAAA,EAEA,wBAAA,CAAyB,MAAM,MAAA,EAAQ;AAzTzC,IAAA,IAAA,EAAA;AA0TI,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,iBAAA,CAAkB,IAAA,CAAK,IAAI,CAAA;AAEpD,IAAA,IACE,IAAA,CAAK,eAAe,GAAA,CAAI,WAAW,KACnC,IAAA,CAAK,2BAAA,CAA4B,IAAA,CAAK,IAAI,CAAA,EAC1C;AACA,MAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,oBAAA,CAAqB,IAAA,CAAK,UAAU,CAAA;AAC/D,MAAA,MAAM,KAAA,GAAQ;AAAA,QACZ,SAAA,EAAW,WAAA;AAAA,QACX,KAAA,EAAO,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,UAAU,CAAA;AAAA,QAC3C,aAAA;AAAA,QACA,IAAA,EAAA,CAAA,CAAM,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,KAAA,KAAS,CAAA;AAAA,QAC1B,OAAA,EAAS,IAAA,CAAK,eAAA,CAAgB,MAAM;AAAA,OACtC;AAEA,MAAA,IAAI,CAAC,IAAA,CAAK,aAAA,CAAc,QAAA,CAAS,GAAA,CAAI,WAAW,CAAA,EAAG;AACjD,QAAA,IAAA,CAAK,aAAA,CAAc,QAAA,CAAS,GAAA,CAAI,WAAA,EAAa,EAAE,CAAA;AAAA,MACjD;AACA,MAAA,IAAA,CAAK,cAAc,QAAA,CAAS,GAAA,CAAI,WAAW,CAAA,CAAE,KAAK,KAAK,CAAA;AAGvD,MAAA,IAAI,CAAC,IAAA,CAAK,aAAA,CAAc,aAAA,CAAc,GAAA,CAAI,WAAW,CAAA,EAAG;AACtD,QAAA,IAAA,CAAK,aAAA,CAAc,aAAA,CAAc,GAAA,CAAI,WAAA,EAAa;AAAA,UAChD,UAAA,sBAAgB,GAAA,EAAI;AAAA,UACpB,WAAA,EAAa,CAAA;AAAA,UACb,WAAA,EAAa,CAAA;AAAA,UACb,YAAA,EAAc;AAAA,SACf,CAAA;AAAA,MACH;AACA,MAAA,MAAM,mBAAA,GACJ,IAAA,CAAK,aAAA,CAAc,aAAA,CAAc,IAAI,WAAW,CAAA;AAClD,MAAA,mBAAA,CAAoB,WAAA,EAAA;AACpB,MAAA,aAAA,CAAc,UAAA,CAAW,OAAA;AAAA,QAAQ,CAAC,IAAA,KAChC,mBAAA,CAAoB,UAAA,CAAW,IAAI,IAAI;AAAA,OACzC;AACA,MAAA,IAAI,aAAA,CAAc,WAAW,mBAAA,CAAoB,WAAA,EAAA;AACjD,MAAA,IAAI,aAAA,CAAc,iBAAiB,mBAAA,CAAoB,YAAA,EAAA;AAEvD,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,sBAAA,EAAkB,WAAW,CAAA,CAAA,CAAG,CAAA;AAAA,IAC9C;AAAA,EACF;AAAA,EAEA,kBAAkB,QAAA,EAAU;AAC1B,IAAA,IAAI,CAAC,UAAU,OAAO,EAAA;AAEtB,IAAA,QAAQ,SAAS,IAAA;AAAM,MACrB,KAAK,YAAA;AACH,QAAA,OAAO,QAAA,CAAS,KAAA;AAAA,MAClB,KAAK,qBAAA;AACH,QAAA,OAAO,CAAA,EAAG,KAAK,iBAAA,CAAkB,QAAA,CAAS,MAAM,CAAC,CAAA,CAAA,EAAI,QAAA,CAAS,QAAA,CAAS,KAAK,CAAA,CAAA;AAAA,MAC9E;AACE,QAAA,OAAO,EAAA;AAAA;AACX,EACF;AAAA,EAEA,4BAA4B,QAAA,EAAU;AACpC,IAAA,IAAA,CAAI,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,UAAS,qBAAA,EAAuB;AAC5C,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,iBAAA,CAAkB,QAAA,CAAS,MAAM,CAAA;AACzD,MAAA,OAAO,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,UAAU,CAAA;AAAA,IAC3C;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,gBAAgB,UAAA,EAAY;AAC1B,IAAA,IAAI,CAAC,UAAA,EAAY,OAAO,EAAC;AAEzB,IAAA,OAAO,UAAA,CACJ,GAAA,CAAI,CAAC,IAAA,KAAS;AA7XrB,MAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA8XQ,MAAA,IAAI,IAAA,CAAK,SAAS,cAAA,EAAgB;AAChC,QAAA,OAAO;AAAA,UACL,IAAA,EAAA,CAAA,CAAM,UAAK,IAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,YAAS,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,IAAA,KAAX,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,KAAA,CAAA;AAAA,UAC3C,KAAA,EAAO,IAAA,CAAK,wBAAA,CAAyB,IAAA,CAAK,KAAK;AAAA,SACjD;AAAA,MACF,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,KAAS,eAAA,EAAiB;AACxC,QAAA,OAAO;AAAA,UACL,IAAA,EAAM,KAAA;AAAA,UACN,KAAA,EAAO,UAAA;AAAA,UACP,QAAA,EAAU;AAAA,SACZ;AAAA,MACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA,CACA,MAAA,CAAO,OAAO,CAAA;AAAA,EACnB;AAAA,EAEA,yBAAyB,KAAA,EAAO;AAC9B,IAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAEnB,IAAA,QAAQ,MAAM,IAAA;AAAM,MAClB,KAAK,eAAA;AACH,QAAA,OAAO,KAAA,CAAM,KAAA;AAAA,MACf,KAAK,wBAAA;AACH,QAAA,OAAO,IAAA,CAAK,sBAAA,CAAuB,KAAA,CAAM,UAAU,CAAA;AAAA,MACrD;AACE,QAAA,OAAO,WAAA;AAAA;AACX,EACF;AAAA,EAEA,uBAAuB,IAAA,EAAM;AAC3B,IAAA,IAAI,CAAC,MAAM,OAAO,WAAA;AAElB,IAAA,QAAQ,KAAK,IAAA;AAAM,MACjB,KAAK,eAAA;AAAA,MACL,KAAK,gBAAA;AAAA,MACL,KAAK,gBAAA;AACH,QAAA,OAAO,IAAA,CAAK,KAAA;AAAA,MACd,KAAK,YAAA;AACH,QAAA,OAAO,CAAA,CAAA,EAAI,KAAK,KAAK,CAAA,CAAA,CAAA;AAAA,MACvB,KAAK,yBAAA;AAAA,MACL,KAAK,oBAAA;AACH,QAAA,OAAO,YAAA;AAAA,MACT,KAAK,kBAAA;AACH,QAAA,OAAO,UAAA;AAAA,MACT,KAAK,iBAAA;AACH,QAAA,OAAO,SAAA;AAAA,MACT;AACE,QAAA,OAAO,cAAA;AAAA;AACX,EACF;AAAA,EAEA,qBAAqB,UAAA,EAAY;AAC/B,IAAA,MAAM,QAAA,GAAW;AAAA,MACf,UAAA,sBAAgB,GAAA,EAAI;AAAA,MACpB,SAAA,EAAW,KAAA;AAAA,MACX,eAAA,EAAiB,KAAA;AAAA,MACjB,gBAAA,EAAkB,KAAA;AAAA,MAClB,aAAa;AAAC,KAChB;AAEA,IAAA,IAAI,CAAC,YAAY,OAAO,QAAA;AAExB,IAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,IAAA,KAAS;AA7bjC,MAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA8bM,MAAA,IAAI,IAAA,CAAK,SAAS,cAAA,EAAgB;AAChC,QAAA,MAAM,QAAA,GAAA,CAAA,CAAW,UAAK,IAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,YAAS,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,IAAA,KAAX,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,KAAA,CAAA;AACtD,QAAA,IAAI,QAAA,EAAU;AACZ,UAAA,QAAA,CAAS,UAAA,CAAW,IAAI,QAAQ,CAAA;AAEhC,UAAA,MAAM,UAAA,GAAa;AAAA,YACjB,IAAA,EAAM,QAAA;AAAA,YACN,IAAA,EAAM,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,KAAK,CAAA;AAAA,YACjC,cAAA,EAAgB,QAAA,CAAS,UAAA,CAAW,IAAI,CAAA;AAAA,YACxC,SAAA,EAAW,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,KAAK;AAAA,WAC1C;AAEA,UAAA,IAAI,WAAW,cAAA,EAAgB;AAC7B,YAAA,QAAA,CAAS,gBAAA,GAAmB,IAAA;AAAA,UAC9B;AACA,UAAA,IAAI,WAAW,SAAA,EAAW;AACxB,YAAA,QAAA,CAAS,eAAA,GAAkB,IAAA;AAAA,UAC7B;AAEA,UAAA,QAAA,CAAS,WAAA,CAAY,KAAK,UAAU,CAAA;AAAA,QACtC;AAAA,MACF,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,KAAS,eAAA,EAAiB;AACxC,QAAA,QAAA,CAAS,SAAA,GAAY,IAAA;AACrB,QAAA,QAAA,CAAS,YAAY,IAAA,CAAK;AAAA,UACxB,IAAA,EAAM,KAAA;AAAA,UACN,IAAA,EAAM,QAAA;AAAA,UACN,QAAA,EAAU,IAAA;AAAA,UACV,SAAA,EAAW,IAAA;AAAA,UACX,OAAA,EAAS;AAAA,SACV,CAAA;AACD,QAAA,QAAA,CAAS,eAAA,GAAkB,IAAA;AAAA,MAC7B;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,YAAY,KAAA,EAAO;AACjB,IAAA,IAAI,CAAC,OAAO,OAAO,SAAA;AAEnB,IAAA,QAAQ,MAAM,IAAA;AAAM,MAClB,KAAK,eAAA;AACH,QAAA,OAAO,QAAA;AAAA,MACT,KAAK,wBAAA;AACH,QAAA,MAAM,OAAO,KAAA,CAAM,UAAA;AACnB,QAAA,IAAI,CAAC,MAAM,OAAO,SAAA;AAClB,QAAA,QAAQ,KAAK,IAAA;AAAM,UACjB,KAAK,gBAAA;AACH,YAAA,OAAO,QAAA;AAAA,UACT,KAAK,gBAAA;AACH,YAAA,OAAO,SAAA;AAAA,UACT,KAAK,eAAA;AACH,YAAA,OAAO,QAAA;AAAA,UACT,KAAK,yBAAA;AAAA,UACL,KAAK,oBAAA;AACH,YAAA,OAAO,UAAA;AAAA,UACT,KAAK,kBAAA;AACH,YAAA,OAAO,QAAA;AAAA,UACT,KAAK,iBAAA;AACH,YAAA,OAAO,OAAA;AAAA,UACT,KAAK,YAAA;AACH,YAAA,OAAO,UAAA;AAAA,UACT;AACE,YAAA,OAAO,YAAA;AAAA;AACX,MACF;AACE,QAAA,OAAO,SAAA;AAAA;AACX,EACF;AAAA,EAEA,cAAc,KAAA,EAAO;AACnB,IAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AACnB,IAAA,IAAI,KAAA,CAAM,SAAS,wBAAA,EAA0B;AAC3C,MAAA,MAAM,OAAO,KAAA,CAAM,UAAA;AACnB,MAAA,IAAI,CAAC,MAAM,OAAO,KAAA;AAClB,MAAA,OACE,IAAA,CAAK,IAAA,KAAS,kBAAA,IACd,IAAA,CAAK,IAAA,KAAS,qBACd,IAAA,CAAK,IAAA,KAAS,gBAAA,IACd,IAAA,CAAK,IAAA,KAAS,uBAAA;AAAA,IAElB;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,sBAAA,CAAuB,MAAM,MAAA,EAAQ;AAnhBvC,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAqhBI,IAAA,MAAM,iBAAgB,EAAA,GAAA,IAAA,CAAK,QAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,IAAA,CAAK,CAAC,IAAA,KAAS;AAClD,MAAA,IAAA,CAAI,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,UAAS,YAAA,EAAc;AAC/B,QAAA,OAAO,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA;AAAA,MAC3C;AACA,MAAA,OAAO,KAAA;AAAA,IACT,CAAA,CAAA;AAEA,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,IAAA,CAAK,aAAA,CAAc,cAAc,GAAA,CAAI;AAAA,QACnC,UAAA,EAAA,CAAY,UAAK,QAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,IAAI,CAAC,IAAA,KAAS,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,KAAA,CAAA,CAAO,MAAA,CAAO,OAAA,CAAA;AAAA,QAC7D,IAAA,EAAA,CAAA,CAAM,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,KAAA,KAAS;AAAA,OAC3B,CAAA;AACD,MAAA,OAAA,CAAQ,IAAI,CAAA,qCAAA,CAAgC,CAAA;AAAA,IAC9C;AAEA,IAAA,IAAA,CAAK,cAAc,IAAI,CAAA;AAAA,EACzB;AAAA,EAEA,uBAAA,CAAwB,MAAM,MAAA,EAAQ;AAviBxC,IAAA,IAAA,EAAA,EAAA,EAAA;AAyiBI,IAAA,MAAM,kBAAiB,EAAA,GAAA,IAAA,CAAK,UAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,MAAA,CAAO,CAAC,IAAA,KAAS;AAziB7D,MAAA,IAAAA,GAAAA;AA0iBM,MAAA,IACE,IAAA,CAAK,SAAS,kBAAA,IAAA,CAAA,CACdA,GAAAA,GAAA,KAAK,KAAA,KAAL,IAAA,GAAA,MAAA,GAAAA,GAAAA,CAAY,IAAA,MAAS,YAAA,EACrB;AACA,QAAA,OAAO,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,MACjD;AACA,MAAA,OAAO,KAAA;AAAA,IACT,CAAA,CAAA;AAEA,IAAA,IAAA,CAAI,cAAA,IAAA,IAAA,GAAA,MAAA,GAAA,cAAA,CAAgB,UAAS,CAAA,EAAG;AAC9B,MAAA,IAAA,CAAK,aAAA,CAAc,eAAe,GAAA,CAAI;AAAA,QACpC,QAAA,EAAU,cAAA,CAAe,GAAA,CAAI,CAAC,IAAA,KAAM;AArjB5C,UAAA,IAAAA,GAAAA,EAAAC,GAAAA;AAqjBgD,UAAA,OAAA;AAAA,YACtC,OAAKD,GAAAA,GAAA,IAAA,CAAK,GAAA,KAAL,IAAA,GAAA,MAAA,GAAAA,IAAU,KAAA,KAAS,YAAA;AAAA,YACxB,SAAA,EAAA,CAAWC,GAAAA,GAAA,IAAA,CAAK,KAAA,KAAL,gBAAAA,GAAAA,CAAY;AAAA,WACzB;AAAA,QAAA,CAAE,CAAA;AAAA,QACF,IAAA,EAAA,CAAA,CAAM,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,KAAA,KAAS;AAAA,OAC3B,CAAA;AACD,MAAA,OAAA,CAAQ,IAAI,CAAA,qDAAA,CAA2C,CAAA;AAAA,IACzD;AAEA,IAAA,IAAA,CAAK,cAAc,IAAI,CAAA;AAAA,EACzB;AAAA,EAEA,4BAAA,CAA6B,MAAM,MAAA,EAAQ;AAjkB7C,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAkkBI,IAAA,MAAM,UAAA,GAAA,CAAA,CACJ,UAAK,UAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,UAAS,YAAA,GAAe,IAAA,CAAK,WAAW,KAAA,GAAQ,IAAA;AACnE,IAAA,MAAM,SAAA,GAAA,CAAA,CACJ,UAAK,SAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAgB,UAAS,YAAA,GAAe,IAAA,CAAK,UAAU,KAAA,GAAQ,IAAA;AAEjE,IAAA,IACG,UAAA,IAAc,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,UAAU,CAAA,IAChD,SAAA,IAAa,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,SAAS,CAAA,EAC/C;AACA,MAAA,IAAA,CAAK,aAAA,CAAc,iBAAiB,GAAA,CAAI;AAAA,QACtC,UAAA;AAAA,QACA,SAAA;AAAA,QACA,IAAA,EAAA,CAAA,CAAM,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,KAAA,KAAS;AAAA,OAC3B,CAAA;AACD,MAAA,OAAA,CAAQ,IAAI,CAAA,2CAAA,CAAsC,CAAA;AAAA,IACpD;AAEA,IAAA,IAAA,CAAK,cAAc,IAAI,CAAA;AAAA,EACzB;AAAA,EAEA,2BAA2B,IAAA,EAAM;AAtlBnC,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAwlBI,IAAA,IAAI,IAAA,CAAK,aAAA,CAAc,IAAI,CAAA,EAAG;AAC5B,MAAA,IAAA,CAAK,aAAA,CAAc,SAAS,GAAA,CAAI;AAAA,QAC9B,IAAA,EAAA,CAAA,CAAM,EAAA,GAAA,IAAA,CAAK,UAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,KAAA,KAAS,aAAA;AAAA,QAChC,IAAA,EAAA,CAAA,CAAM,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,KAAA,KAAS;AAAA,OAC3B,CAAA;AACD,MAAA,OAAA,CAAQ,IAAI,CAAA,8BAAA,EAAA,CAA0B,EAAA,GAAA,IAAA,CAAK,UAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,KAAK,CAAA,CAAE,CAAA;AAAA,IAChE;AAEA,IAAA,IAAA,CAAK,cAAc,IAAI,CAAA;AAAA,EACzB;AAAA,EAEA,wBAAwB,IAAA,EAAM;AAE5B,IAAA,IAAA,CAAK,cAAc,IAAI,CAAA;AAAA,EACzB;AAAA,EAEA,aAAa,IAAA,EAAM;AAxmBrB,IAAA,IAAA,EAAA,EAAA,EAAA;AA0mBI,IAAA,OAAA,CAAA,CACE,UAAK,MAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,UAAS,YAAA,KAAA,CACtB,EAAA,GAAA,IAAA,CAAK,cAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAgB,IAAA;AAAA,MACd,CAAC,QACC,GAAA,CAAI,IAAA,KAAS,gBAAgB,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,GAAA,CAAI,KAAK;AAAA,KAAA,CAAA;AAAA,EAGtE;AAAA,EAEA,cAAc,IAAA,EAAM;AAElB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,IAAU,EAAC;AAC/B,IAAA,OAAO,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAO;AAtnB/B,MAAA,IAAA,EAAA;AAsnBkC,MAAA,OAAA,CAAA,CAAA,EAAA,GAAA,KAAA,CAAM,GAAA,KAAN,mBAAW,IAAA,MAAS,YAAA;AAAA,IAAA,CAAY,CAAA;AAAA,EAChE;AAAA,EAEA,gBAAgB,IAAA,EAAM;AAznBxB,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA0nBI,IAAA,IAAA,CAAK,aAAA,CAAc,SAAS,GAAA,CAAI;AAAA,MAC9B,QAAA,EAAA,CAAU,EAAA,GAAA,IAAA,CAAK,MAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,KAAA;AAAA,MACvB,SAAA,EAAA,CAAW,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,OAAjB,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,KAAA;AAAA,MAChC,IAAA,EAAA,CAAA,CAAM,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,KAAA,KAAS;AAAA,KAC3B,CAAA;AAAA,EACH;AAAA,EAEA,iBAAiB,IAAA,EAAM;AAjoBzB,IAAA,IAAA,EAAA,EAAA,EAAA;AAkoBI,IAAA,MAAM,SAAA,GAAA,CAAY,EAAA,GAAA,IAAA,CAAK,SAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,CAAA,CAAA;AACnC,IAAA,IAAA,CACE,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,UAAS,YAAA,IACpB,IAAA,CAAK,eAAe,GAAA,CAAI,SAAA,CAAU,KAAK,CAAA,EACvC;AACA,MAAA,IAAA,CAAK,aAAA,CAAc,mBAAmB,GAAA,CAAI;AAAA,QACxC,WAAW,SAAA,CAAU,KAAA;AAAA,QACrB,IAAA,EAAA,CAAA,CAAM,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,KAAA,KAAS;AAAA,OAC3B,CAAA;AACD,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,8BAAA,EAA0B,SAAA,CAAU,KAAK,CAAA,CAAE,CAAA;AAAA,IACzD;AAAA,EACF;AAAA,EAEA,uBAAuB,IAAA,EAAM;AA/oB/B,IAAA,IAAA,EAAA;AAgpBI,IAAA,IAAA,CAAK,aAAA,CAAc,cAAc,GAAA,CAAI;AAAA,MACnC,IAAA,EAAA,CAAA,CAAM,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,KAAA,KAAS;AAAA,KAC3B,CAAA;AACD,IAAA,OAAA,CAAQ,IAAI,CAAA,oCAAA,CAA4B,CAAA;AAAA,EAC1C;AAAA,EAEA,mBAAmB,IAAA,EAAM;AAtpB3B,IAAA,IAAA,EAAA;AAupBI,IAAA,IAAA,CAAK,aAAA,CAAc,YAAY,GAAA,CAAI;AAAA,MACjC,IAAA,EAAA,CAAA,CAAM,EAAA,GAAA,IAAA,CAAK,IAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,KAAA,KAAS;AAAA,KAC3B,CAAA;AACD,IAAA,OAAA,CAAQ,IAAI,CAAA,4BAAA,CAAuB,CAAA;AAAA,EACrC;AAAA,EAEA,uBAAA,CAAwB,MAAM,MAAA,EAAQ;AA7pBxC,IAAA,IAAA,EAAA,EAAA,EAAA;AA+pBI,IAAA,IAAA,CAAA,CACE,EAAA,GAAA,IAAA,CAAK,MAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,IAAA,MAAS,YAAA,IACtB,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,EACzC;AACA,MAAA,MAAM,aAAA,GAAgB,KAAK,MAAA,CAAO,KAAA;AAClC,MAAA,MAAM,YAAA,GAAA,CAAe,EAAA,GAAA,IAAA,CAAK,QAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,KAAA;AAEpC,MAAA,IAAI,YAAA,EAAc;AAEhB,QAAA,IAAA,CAAK,cAAA,CAAe,IAAI,YAAY,CAAA;AACpC,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,4BAAA,EAAwB,aAAa,CAAA,CAAA,EAAI,YAAY,CAAA,CAAE,CAAA;AAAA,MACrE;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,cAAc,IAAI,CAAA;AAAA,EACzB;AAAA,EAEA,sBAAsB,IAAA,EAAM;AAC1B,IAAA,QAAQ,KAAK,IAAA;AAAM,MACjB,KAAK,YAAA;AACH,QAAA,OAAO,IAAA,CAAK,KAAA;AAAA,MACd,KAAK,kBAAA;AACH,QAAA,OAAO,CAAA,EAAG,KAAK,qBAAA,CAAsB,IAAA,CAAK,MAAM,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA,CAAA;AAAA,MAC1E,KAAK,uBAAA;AACH,QAAA,OAAO,CAAA,EAAG,IAAA,CAAK,qBAAA,CAAsB,IAAA,CAAK,UAAU,CAAC,CAAA,GAAA,EAAM,IAAA,CAAK,qBAAA,CAAsB,IAAA,CAAK,SAAS,CAAC,CAAA,CAAA;AAAA,MACvG;AACE,QAAA,OAAO,IAAA;AAAA;AACX,EACF;AAAA,EAEA,gBAAgB,MAAA,EAAQ;AACtB,IAAA,IAAI,CAAC,QAAQ,OAAO,SAAA;AAEpB,IAAA,QAAQ,OAAO,IAAA;AAAM,MACnB,KAAK,YAAA;AACH,QAAA,OAAO,KAAA;AAAA,MACT,KAAK,gBAAA;AACH,QAAA,OAAO,eAAA;AAAA,MACT,KAAK,iBAAA;AACH,QAAA,OAAO,OAAA;AAAA,MACT,KAAK,uBAAA;AACH,QAAA,OAAO,aAAA;AAAA,MACT;AACE,QAAA,OAAO,OAAA;AAAA;AACX,EACF;AAAA,EAEA,gBAAgB,MAAA,EAAQ;AACtB,IAAA,OACE,MAAA,KACC,OAAO,UAAA,CAAW,IAAA,CAAK,WAAW,CAAA,IAAK,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,WAAW,CAAA,CAAA;AAAA,EAE5E;AAAA,EAEA,mBAAmB,IAAA,EAAM;AACvB,IAAA,OAAO,IAAA,CAAK,eAAe,GAAA,CAAI,IAAI,KAAK,IAAA,CAAK,cAAA,CAAe,IAAI,IAAI,CAAA;AAAA,EACtE;AAAA,EAEA,cAAA,GAAiB;AACf,IAAA,MAAM,MAAA,GAAS;AAAA,MACb,OAAA,EAAS;AAAA,QACP,YAAA,EACE,IAAA,CAAK,aAAA,CAAc,cAAA,CAAe,IAAA,GAClC,IAAA,CAAK,aAAA,CAAc,YAAA,CAAa,IAAA,GAChC,IAAA,CAAK,aAAA,CAAc,gBAAA,CAAiB,IAAA;AAAA,QACtC,eAAA,EAAiB,KAAK,cAAA,CAAe,IAAA;AAAA,QACrC,kBAAA,EAAoB,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,aAAa,CAAA,CAAE,MAAA;AAAA,UAClD,CAAC,KAAK,GAAA,KAAQ;AACZ,YAAA,MAAM,OAAA,GAAU,IAAA,CAAK,aAAA,CAAc,GAAG,CAAA;AACtC,YAAA,IAAI,OAAA,YAAmB,GAAA,EAAK,OAAO,GAAA,GAAM,OAAA,CAAQ,IAAA;AACjD,YAAA,IAAI,OAAA,YAAmB,GAAA,EAAK,OAAO,GAAA,GAAM,OAAA,CAAQ,IAAA;AACjD,YAAA,OAAO,GAAA;AAAA,UACT,CAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,MACA,QAAA,EAAU;AAAA,QACR,OAAA,EAAS;AAAA,UACP,OAAA,EAAS,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,cAAc,cAAc,CAAA;AAAA,UACrD,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,cAAc,YAAY,CAAA;AAAA,UACjD,SAAA,EAAW,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,cAAc,gBAAgB,CAAA;AAAA,UACzD,OAAA,EAAS,MAAM,IAAA,CAAK,IAAA,CAAK,cAAc,cAAA,CAAe,OAAA,EAAS,CAAA,CAAE,GAAA;AAAA,YAC/D,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,MAAO;AAAA,cACjB,KAAA,EAAO,GAAA;AAAA,cACP,GAAG;AAAA,aACL;AAAA;AACF,SACF;AAAA,QACA,KAAA,EAAO;AAAA,UACL,GAAA,EAAK,MAAM,IAAA,CAAK,IAAA,CAAK,cAAc,QAAA,CAAS,OAAA,EAAS,CAAA,CAAE,GAAA;AAAA,YACrD,CAAC,CAAC,SAAA,EAAW,MAAM,CAAA,MAAO;AAAA,cACxB,SAAA;AAAA,cACA,OAAO,MAAA,CAAO,MAAA;AAAA,cACd;AAAA,aACF;AAAA,WACF;AAAA,UACA,WAAW,KAAA,CAAM,IAAA;AAAA,YACf,IAAA,CAAK,aAAA,CAAc,mBAAA,CAAoB,OAAA;AAAQ,YAC/C,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,MAAO;AAAA,YACvB,QAAA,EAAU,GAAA;AAAA,YACV,GAAG;AAAA,WACL,CAAE,CAAA;AAAA,UACF,aAAA,EAAe,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,cAAc,iBAAiB,CAAA;AAAA,UAC9D,WAAA,EAAa,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,cAAc,gBAAgB,CAAA;AAAA,UAC3D,MAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,cAAc,aAAa,CAAA;AAAA,UACnD,OAAA,EAAS,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,cAAc,cAAc;AAAA,SACvD;AAAA,QACA,QAAA,EAAU;AAAA,UACR,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,cAAc,WAAW,CAAA;AAAA,UAC/C,OAAA,EAAS,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,cAAc,cAAc,CAAA;AAAA,UACrD,GAAA,EAAK,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,cAAc,QAAQ,CAAA;AAAA,UAC3C,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,cAAc,kBAAkB,CAAA;AAAA,UACtD,UAAA,EAAY,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,cAAc,aAAa,CAAA;AAAA,UACvD,MAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,cAAc,WAAW;AAAA,SACnD;AAAA,QACA,KAAA,EAAO,MAAM,IAAA,CAAK,IAAA,CAAK,cAAc,aAAA,CAAc,OAAA,EAAS,CAAA,CAAE,GAAA;AAAA,UAC5D,CAAC,CAAC,SAAA,EAAW,KAAK,CAAA,MAAO;AAAA,YACvB,SAAA;AAAA,YACA,UAAA,EAAY,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,UAAU,CAAA;AAAA,YACvC,kBAAkB,KAAA,CAAM,WAAA;AAAA,YACxB,aAAa,KAAA,CAAM,WAAA;AAAA,YACnB,mBAAmB,KAAA,CAAM,YAAA;AAAA,YACzB,eACE,KAAA,CAAM,WAAA,GAAc,IAChB,CAAA,EAAG,KAAA,CAAM,WAAW,CAAA,uDAAA,CAAA,GACpB;AAAA,WACR;AAAA;AACF,OACF;AAAA,MACA,YAAY,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,cAAc,EAAE,IAAA;AAAK,KACnD;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,YAAY,MAAA,EAAQ;AAClB,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,GAAO,GAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAA;AACjC,IAAA,OAAA,CAAQ,IAAI,iDAA0C,CAAA;AACtD,IAAA,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAA;AAE1B,IAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,kBAAA,CAAe,CAAA;AAC3B,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,kBAAA,EAAqB,MAAA,CAAO,OAAA,CAAQ,YAAY,CAAA,CAAE,CAAA;AAC9D,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,qBAAA,EAAwB,MAAA,CAAO,OAAA,CAAQ,eAAe,CAAA,CAAE,CAAA;AACpE,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,mBAAA,EAAsB,MAAA,CAAO,OAAA,CAAQ,kBAAkB,CAAA,CAAE,CAAA;AAErE,IAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,0BAAA,CAAuB,CAAA;AACnC,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC9C,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,CAAA,oBAAA,EAAuB,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,QAAQ,MAAM,CAAA,EAAA;AAAA,OAC/D;AACA,MAAA,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAC/C,QAAA,OAAA,CAAQ,IAAI,CAAA,OAAA,EAAU,GAAA,CAAI,IAAI,CAAA,OAAA,EAAU,GAAA,CAAI,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,MACvD,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,KAAA,CAAM,SAAS,CAAA,EAAG;AAC5C,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,CAAA,kBAAA,EAAqB,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,MAAM,MAAM,CAAA,EAAA;AAAA,OAC3D;AACA,MAAA,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAC7C,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,CAAA,QAAA,EAAW,GAAA,CAAI,QAAQ,CAAA,EAAG,IAAI,QAAA,KAAa,GAAA,CAAI,KAAA,GAAQ,CAAA,IAAA,EAAO,IAAI,KAAK,CAAA,CAAA,GAAK,EAAE,CAAA,QAAA,EAAW,IAAI,MAAM,CAAA,CAAA;AAAA,SACrG;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,SAAA,CAAU,SAAS,CAAA,EAAG;AAChD,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,CAAA,sBAAA,EAAyB,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,UAAU,MAAM,CAAA,EAAA;AAAA,OACnE;AACA,MAAA,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,SAAA,CAAU,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACjD,QAAA,OAAA,CAAQ,IAAI,CAAA,YAAA,EAAe,GAAA,CAAI,IAAI,CAAA,OAAA,EAAU,GAAA,CAAI,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,MAC5D,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC9C,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,CAAA,oBAAA,EAAuB,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,QAAQ,MAAM,CAAA,EAAA;AAAA,OAC/D;AACA,MAAA,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAC/C,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,CAAA,OAAA,EAAU,IAAI,KAAK,CAAA,aAAA,EAAgB,IAAI,QAAQ,CAAA,QAAA,EAAW,IAAI,MAAM,CAAA,CAAA;AAAA,SACtE;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,6BAAA,CAA0B,CAAA;AACtC,IAAA,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,CAAC,KAAA,KAAU;AAC3C,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,CAAA,cAAA,EAAiB,KAAA,CAAM,SAAS,CAAA,OAAA,EAAU,MAAM,KAAK,CAAA,OAAA;AAAA,OACvD;AACA,MAAA,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA,EAAG,CAAC,EAAE,OAAA,CAAQ,CAAC,KAAK,GAAA,KAAQ;AAC7C,QAAA,MAAM,KAAA,GACJ,IAAI,KAAA,CAAM,MAAA,GAAS,IAAI,CAAA,MAAA,EAAS,GAAA,CAAI,KAAA,CAAM,MAAM,CAAA,MAAA,CAAA,GAAW,EAAA;AAC7D,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,CAAA,KAAA,EAAQ,GAAA,GAAM,CAAC,CAAA,GAAA,EAAM,KAAA,CAAM,SAAS,CAAA,EAAG,KAAK,CAAA,SAAA,EAAY,GAAA,CAAI,IAAI,CAAA,CAAA;AAAA,SAClE;AAAA,MACF,CAAC,CAAA;AACD,MAAA,IAAI,KAAA,CAAM,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC3B,QAAA,OAAA,CAAQ,IAAI,CAAA,aAAA,EAAgB,KAAA,CAAM,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,KAAA,CAAO,CAAA;AAAA,MAC5D;AAAA,IACF,CAAC,CAAA;AAED,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,SAAA,CAAU,SAAS,CAAA,EAAG;AAC9C,MAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,+BAAA,CAA4B,CAAA;AACxC,MAAA,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,SAAA,CAAU,OAAA,CAAQ,CAAC,QAAA,KAAa;AACpD,QAAA,OAAA,CAAQ,IAAI,CAAA,GAAA,EAAM,QAAA,CAAS,QAAQ,CAAA,GAAA,EAAM,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,MAChE,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,QAAA,CAAS,IAAA,CAAK,SAAS,CAAA,EAAG;AAC5C,MAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,uBAAA,CAAoB,CAAA;AAChC,MAAA,MAAA,CAAO,QAAA,CAAS,QAAA,CAAS,IAAA,CAAK,OAAA,CAAQ,CAAC,IAAA,KAAS;AAC9C,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,uBAAA,EAA0B,IAAA,CAAK,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,MACtD,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,QAAA,CAAS,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC/C,MAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,uBAAA,CAAsB,CAAA;AAClC,MAAA,MAAA,CAAO,QAAA,CAAS,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,CAAC,OAAA,KAAY;AACpD,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,0BAAA,EAA6B,OAAA,CAAQ,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,MAC5D,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,WAAA,CAAY,SAAS,CAAA,EAAG;AAChD,MAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,4BAAA,CAAyB,CAAA;AACrC,MAAA,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,WAAA,CAAY,OAAA,CAAQ,CAAC,IAAA,KAAS;AAClD,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,QAAQ,IAAA,CAAK,UAAA,IAAc,MAAM,CAAA,GAAA,EAAM,IAAA,CAAK,aAAa,MAAM,CAAA;AAAA,SACjE;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,gCAAA,CAA6B,CAAA;AACzC,IAAA,MAAA,CAAO,UAAA,CAAW,OAAA,CAAQ,CAAC,IAAA,KAAS;AAClC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,KAAA,EAAQ,IAAI,CAAA,CAAE,CAAA;AAAA,IAC5B,CAAC,CAAA;AAED,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,GAAO,GAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAA;AAAA,EACnC;AACF,CAAA;AC34BA,IAAM,oBAAA,GAAN,cAAmC,2BAAA,CAA4B;AAAA,EAC7D,WAAA,CAAY,cAAc,2BAAA,EAA6B;AACrD,IAAA,KAAA,CAAM,WAAW,CAAA;AACjB,IAAA,IAAA,CAAK,UAAA,uBAAiB,GAAA,EAAI;AAC1B,IAAA,IAAA,CAAK,kBAAA,uBAAyB,GAAA,EAAI;AAClC,IAAA,IAAA,CAAK,eAAA,uBAAsB,GAAA,EAAI;AAAA,EACjC;AAAA,EAEA,eAAA,GAAkB;AAEhB,IAAA,MAAM,QAAA,GAAW;AAAA,MACf,uBAAA,EAAyB;AAAA,QACvB,MAAA,EAAQ,CAAA;AAAA,QACR,WAAA,EAAa,oCAAA;AAAA,QACb,QAAA,EAAU,CAAC,sCAAsC;AAAA,OACnD;AAAA,MACA,yBAAA,EAA2B;AAAA,QACzB,MAAA,EAAQ,CAAA;AAAA,QACR,WAAA,EAAa,4BAAA;AAAA,QACb,QAAA,EAAU,CAAC,wDAAwD;AAAA,OACrE;AAAA,MACA,kBAAA,EAAoB;AAAA,QAClB,MAAA,EAAQ,CAAA;AAAA,QACR,WAAA,EAAa,yBAAA;AAAA,QACb,QAAA,EAAU,CAAC,4CAA4C;AAAA,OACzD;AAAA,MACA,qBAAA,EAAuB;AAAA,QACrB,MAAA,EAAQ,CAAA;AAAA,QACR,WAAA,EAAa,mCAAA;AAAA,QACb,QAAA,EAAU,CAAC,uCAAuC;AAAA,OACpD;AAAA,MACA,wBAAA,EAA0B;AAAA,QACxB,MAAA,EAAQ,CAAA;AAAA,QACR,WAAA,EAAa,iCAAA;AAAA,QACb,QAAA,EAAU,CAAC,mDAAmD;AAAA,OAChE;AAAA,MACA,gBAAA,EAAkB;AAAA,QAChB,MAAA,EAAQ,CAAA;AAAA,QACR,WAAA,EAAa,8BAAA;AAAA,QACb,QAAA,EAAU,CAAC,wCAAwC;AAAA,OACrD;AAAA,MACA,eAAA,EAAiB;AAAA,QACf,MAAA,EAAQ,CAAA;AAAA,QACR,WAAA,EAAa,sBAAA;AAAA,QACb,QAAA,EAAU,CAAC,uCAAuC;AAAA,OACpD;AAAA,MACA,iBAAA,EAAmB;AAAA,QACjB,MAAA,EAAQ,CAAA;AAAA,QACR,WAAA,EAAa,6BAAA;AAAA,QACb,QAAA,EAAU,CAAC,kBAAkB;AAAA,OAC/B;AAAA,MACA,cAAA,EAAgB;AAAA,QACd,MAAA,EAAQ,CAAA;AAAA,QACR,WAAA,EAAa,iCAAA;AAAA,QACb,QAAA,EAAU,CAAC,mBAAmB;AAAA,OAChC;AAAA,MACA,cAAA,EAAgB;AAAA,QACd,MAAA,EAAQ,CAAA;AAAA,QACR,WAAA,EAAa,wBAAA;AAAA,QACb,QAAA,EAAU,CAAC,kCAAkC;AAAA,OAC/C;AAAA,MACA,gBAAA,EAAkB;AAAA,QAChB,MAAA,EAAQ,CAAA;AAAA,QACR,WAAA,EAAa,yBAAA;AAAA,QACb,QAAA,EAAU,CAAC,4BAA4B;AAAA,OACzC;AAAA,MACA,qBAAA,EAAuB;AAAA,QACrB,MAAA,EAAQ,CAAA;AAAA,QACR,WAAA,EAAa,2BAAA;AAAA,QACb,QAAA,EAAU,CAAC,yCAAyC;AAAA,OACtD;AAAA,MACA,qBAAA,EAAuB;AAAA,QACrB,MAAA,EAAQ,CAAA;AAAA,QACR,WAAA,EAAa,+BAAA;AAAA,QACb,QAAA,EAAU,CAAC,cAAc;AAAA,OAC3B;AAAA,MACA,aAAA,EAAe;AAAA,QACb,MAAA,EAAQ,CAAA;AAAA,QACR,WAAA,EAAa,+BAAA;AAAA,QACb,QAAA,EAAU,CAAC,kDAAkD;AAAA,OAC/D;AAAA,MACA,cAAA,EAAgB;AAAA,QACd,MAAA,EAAQ,CAAA;AAAA,QACR,WAAA,EAAa,gCAAA;AAAA,QACb,QAAA,EAAU,CAAC,yCAAyC;AAAA,OACtD;AAAA,MACA,qBAAA,EAAuB;AAAA,QACrB,MAAA,EAAQ,CAAA;AAAA,QACR,WAAA,EAAa,+BAAA;AAAA,QACb,QAAA,EAAU,CAAC,2CAA2C;AAAA;AACxD,KACF;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,cAAc,MAAA,EAAQ;AACpB,IAAA,MAAM,QAAA,GAAW,KAAK,eAAA,EAAgB;AACtC,IAAA,MAAM,aAAA,uBAAoB,GAAA,EAAI;AAG9B,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC9C,MAAA,aAAA,CAAc,IAAI,uBAAA,EAAyB;AAAA,QACzC,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,MAAA;AAAA,QACvC,UAAA,EAAY,CAAA;AAAA,QACZ,UAAU,MAAA,CAAO,QAAA,CAAS,QAAQ,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAC;AAAA,OACrD,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC9C,MAAA,aAAA,CAAc,IAAI,yBAAA,EAA2B;AAAA,QAC3C,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,MAAA;AAAA,QACvC,UAAA,EAAY,CAAA;AAAA,QACZ,UAAU,MAAA,CAAO,QAAA,CAAS,QAAQ,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAC;AAAA,OACrD,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,SAAA,CAAU,SAAS,CAAA,EAAG;AAChD,MAAA,aAAA,CAAc,IAAI,kBAAA,EAAoB;AAAA,QACpC,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,SAAA,CAAU,MAAA;AAAA,QACzC,UAAA,EAAY,CAAA;AAAA,QACZ,UAAU,MAAA,CAAO,QAAA,CAAS,QAAQ,SAAA,CAAU,KAAA,CAAM,GAAG,CAAC;AAAA,OACvD,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,SAAA,CAAU,SAAS,CAAA,EAAG;AAC9C,MAAA,aAAA,CAAc,IAAI,qBAAA,EAAuB;AAAA,QACvC,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,SAAA,CAAU,MAAA;AAAA,QACvC,UAAA,EAAY,CAAA;AAAA,QACZ,UAAU,MAAA,CAAO,QAAA,CAAS,MAAM,SAAA,CAAU,KAAA,CAAM,GAAG,CAAC;AAAA,OACrD,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,WAAA,CAAY,SAAS,CAAA,EAAG;AAChD,MAAA,aAAA,CAAc,IAAI,wBAAA,EAA0B;AAAA,QAC1C,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,WAAA,CAAY,MAAA;AAAA,QACzC,UAAA,EAAY,CAAA;AAAA,QACZ,UAAU,MAAA,CAAO,QAAA,CAAS,MAAM,WAAA,CAAY,KAAA,CAAM,GAAG,CAAC;AAAA,OACvD,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC5C,MAAA,aAAA,CAAc,IAAI,gBAAA,EAAkB;AAAA,QAClC,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,OAAA,CAAQ,MAAA;AAAA,QACrC,UAAA,EAAY,CAAA;AAAA,QACZ,UAAU,MAAA,CAAO,QAAA,CAAS,MAAM,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAC;AAAA,OACnD,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,MAAA,CAAO,SAAS,CAAA,EAAG;AAC3C,MAAA,aAAA,CAAc,IAAI,eAAA,EAAiB;AAAA,QACjC,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,MAAA,CAAO,MAAA;AAAA,QACpC,UAAA,EAAY,CAAA;AAAA,QACZ,UAAU,MAAA,CAAO,QAAA,CAAS,MAAM,MAAA,CAAO,KAAA,CAAM,GAAG,CAAC;AAAA,OAClD,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,QAAA,CAAS,IAAA,CAAK,SAAS,CAAA,EAAG;AAC5C,MAAA,aAAA,CAAc,IAAI,cAAA,EAAgB;AAAA,QAChC,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,QAAA,CAAS,IAAA,CAAK,MAAA;AAAA,QACrC,UAAA,EAAY,CAAA;AAAA,QACZ,UAAU,MAAA,CAAO,QAAA,CAAS,SAAS,IAAA,CAAK,KAAA,CAAM,GAAG,CAAC;AAAA,OACnD,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,QAAA,CAAS,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC/C,MAAA,aAAA,CAAc,IAAI,gBAAA,EAAkB;AAAA,QAClC,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,QAAA,CAAS,OAAA,CAAQ,MAAA;AAAA,QACxC,UAAA,EAAY,CAAA;AAAA,QACZ,UAAU,MAAA,CAAO,QAAA,CAAS,SAAS,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAC;AAAA,OACtD,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,aAAA,CAAc,SAAS,CAAA,EAAG;AAClD,MAAA,aAAA,CAAc,IAAI,qBAAA,EAAuB;AAAA,QACvC,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,aAAA,CAAc,MAAA;AAAA,QAC3C,UAAA,EAAY,CAAA;AAAA,QACZ,UAAU,MAAA,CAAO,QAAA,CAAS,MAAM,aAAA,CAAc,KAAA,CAAM,GAAG,CAAC;AAAA,OACzD,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,QAAA,CAAS,IAAA,CAAK,SAAS,CAAA,EAAG;AAC5C,MAAA,aAAA,CAAc,IAAI,qBAAA,EAAuB;AAAA,QACvC,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,QAAA,CAAS,IAAA,CAAK,MAAA;AAAA,QACrC,UAAA,EAAY,CAAA;AAAA,QACZ,UAAU,MAAA,CAAO,QAAA,CAAS,SAAS,IAAA,CAAK,KAAA,CAAM,GAAG,CAAC;AAAA,OACnD,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,QAAA,CAAS,UAAA,CAAW,SAAS,CAAA,EAAG;AAClD,MAAA,aAAA,CAAc,IAAI,aAAA,EAAe;AAAA,QAC/B,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,QAAA,CAAS,UAAA,CAAW,MAAA;AAAA,QAC3C,UAAA,EAAY,CAAA;AAAA,QACZ,UAAU,MAAA,CAAO,QAAA,CAAS,SAAS,UAAA,CAAW,KAAA,CAAM,GAAG,CAAC;AAAA,OACzD,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,QAAA,CAAS,MAAA,CAAO,SAAS,CAAA,EAAG;AAC9C,MAAA,aAAA,CAAc,IAAI,cAAA,EAAgB;AAAA,QAChC,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,QAAA,CAAS,MAAA,CAAO,MAAA;AAAA,QACvC,UAAA,EAAY,CAAA;AAAA,QACZ,UAAU,MAAA,CAAO,QAAA,CAAS,SAAS,MAAA,CAAO,KAAA,CAAM,GAAG,CAAC;AAAA,OACrD,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,EAAE,UAAU,aAAA,EAAc;AAAA,EACnC;AAAA,EAEA,wBAAwB,aAAA,EAAe;AACrC,IAAA,IAAI,UAAA,GAAa,CAAA;AACjB,IAAA,IAAI,gBAAA,GAAmB,CAAA;AAEvB,IAAA,aAAA,CAAc,OAAA,CAAQ,CAAC,IAAA,EAAM,WAAA,KAAgB;AAC3C,MAAA,MAAM,SAAS,IAAA,CAAK,UAAA;AACpB,MAAA,MAAM,KAAA,GAAQ,SAAS,IAAA,CAAK,KAAA;AAC5B,MAAA,UAAA,IAAc,KAAA;AACd,MAAA,gBAAA,IAAoB,MAAA,GAAS,EAAA;AAAA,IAC/B,CAAC,CAAA;AAED,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,UAAA;AAAA,MACP,WAAA,EAAa,gBAAA;AAAA,MACb,YAAY,IAAA,CAAK,KAAA;AAAA,QACd,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,gBAAA,EAAkB,CAAC,CAAA,GAAK;AAAA,OACjD;AAAA,MACA,KAAA,EAAO,IAAA,CAAK,kBAAA,CAAmB,UAAU;AAAA,KAC3C;AAAA,EACF;AAAA,EAEA,mBAAmB,KAAA,EAAO;AACxB,IAAA,IAAI,KAAA,IAAS,IAAI,OAAO,QAAA;AACxB,IAAA,IAAI,KAAA,IAAS,IAAI,OAAO,UAAA;AACxB,IAAA,IAAI,KAAA,IAAS,IAAI,OAAO,SAAA;AACxB,IAAA,IAAI,KAAA,IAAS,KAAK,OAAO,cAAA;AACzB,IAAA,OAAO,mBAAA;AAAA,EACT;AAAA,EAEA,uBAAA,CAAwB,eAAe,UAAA,EAAY;AACjD,IAAA,MAAM,kBAAkB,EAAC;AAEzB,IAAA,IACE,cAAc,GAAA,CAAI,gBAAgB,KAClC,aAAA,CAAc,GAAA,CAAI,cAAc,CAAA,EAChC;AACA,MAAA,eAAA,CAAgB,IAAA,CAAK;AAAA,QACnB,IAAA,EAAM,aAAA;AAAA,QACN,QAAA,EAAU,MAAA;AAAA,QACV,OAAA,EAAS,wDAAA;AAAA,QACT,MAAA,EAAQ;AAAA,OACT,CAAA;AAAA,IACH;AAEA,IAAA,IACE,cAAc,GAAA,CAAI,gBAAgB,KAClC,aAAA,CAAc,GAAA,CAAI,eAAe,CAAA,EACjC;AACA,MAAA,eAAA,CAAgB,IAAA,CAAK;AAAA,QACnB,IAAA,EAAM,iBAAA;AAAA,QACN,QAAA,EAAU,QAAA;AAAA,QACV,OAAA,EAAS,yCAAA;AAAA,QACT,MAAA,EAAQ;AAAA,OACT,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,UAAA,CAAW,UAAU,mBAAA,EAAqB;AAC5C,MAAA,eAAA,CAAgB,IAAA,CAAK;AAAA,QACnB,IAAA,EAAM,cAAA;AAAA,QACN,QAAA,EAAU,MAAA;AAAA,QACV,OAAA,EAAS,6CAAA;AAAA,QACT,MAAA,EAAQ;AAAA,OACT,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,aAAA,CAAc,OAAO,CAAA,EAAG;AAC1B,MAAA,eAAA,CAAgB,IAAA,CAAK;AAAA,QACnB,IAAA,EAAM,aAAA;AAAA,QACN,QAAA,EAAU,QAAA;AAAA,QACV,OAAA,EAAS,qCAAA;AAAA,QACT,MAAA,EAAQ;AAAA,OACT,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,eAAA;AAAA,EACT;AAAA,EAEA,mBAAmB,MAAA,EAAQ;AACzB,IAAA,MAAM,EAAE,QAAA,EAAU,aAAA,EAAc,GAAI,IAAA,CAAK,cAAc,MAAM,CAAA;AAC7D,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,uBAAA,CAAwB,aAAa,CAAA;AAC7D,IAAA,MAAM,kBAAkB,IAAA,CAAK,uBAAA;AAAA,MAC3B,aAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,GAAO,WAAA,CAAK,MAAA,CAAO,EAAE,CAAC,CAAA;AAClC,IAAA,OAAA,CAAQ,IAAI,4CAAqC,CAAA;AACjD,IAAA,OAAA,CAAQ,GAAA,CAAI,WAAA,CAAK,MAAA,CAAO,EAAE,CAAC,CAAA;AAE3B,IAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,8BAAA,CAA2B,CAAA;AACvC,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,CAAA,kBAAA,EAAqB,UAAA,CAAW,KAAK,CAAA,CAAA,EAAI,WAAW,WAAW,CAAA;AAAA,KACjE;AACA,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,CAAA,qBAAA,EAAwB,UAAA,CAAW,KAAK,CAAA,EAAA,EAAK,WAAW,UAAU,CAAA,EAAA;AAAA,KACpE;AAEA,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN;AAAA,6BAAA,EAA2B,cAAc,IAAI,CAAA,IAAA,EAAO,OAAO,IAAA,CAAK,QAAQ,EAAE,MAAM,CAAA,EAAA;AAAA,KAClF;AAGA,IAAA,MAAM,iBAAiB,KAAA,CAAM,IAAA,CAAK,aAAA,CAAc,OAAA,EAAS,CAAA,CAAE,IAAA;AAAA,MACzD,CAAC,GAAG,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,CAAE,UAAA,GAAa,CAAA,CAAE,CAAC,CAAA,CAAE;AAAA,KACnC;AAEA,IAAA,cAAA,CAAe,OAAA,CAAQ,CAAC,CAAC,WAAA,EAAa,IAAI,CAAA,KAAM;AAC9C,MAAA,MAAM,WAAA,GAAc,SAAS,WAAW,CAAA;AACxC,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN;AAAA,GAAA,EAAQ,KAAK,iBAAA,CAAkB,IAAA,CAAK,UAAU,CAAC,IAAI,WAAW,CAAA,CAAA;AAAA,OAChE;AACA,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,iBAAA,EAAoB,IAAA,CAAK,UAAU,CAAA,GAAA,CAAK,CAAA;AACpD,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,gBAAA,EAAmB,IAAA,CAAK,KAAK,CAAA,CAAE,CAAA;AAC3C,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,kBAAA,EAAqB,WAAA,CAAY,WAAW,CAAA,CAAE,CAAA;AAE1D,MAAA,IAAI,IAAA,CAAK,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAC5B,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,CAAA,eAAA,EAAkB,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,QAAA,CAAS,CAAC,CAAA,EAAG,IAAA,EAAM,SAAS,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,GAAA;AAAA,SACnF;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,8BAAA,CAA2B,CAAA;AACvC,IAAA,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,CAAC,KAAA,KAAU;AAC3C,MAAA,OAAA,CAAQ,IAAI,CAAA,GAAA,EAAM,KAAA,CAAM,SAAS,CAAA,EAAA,EAAK,KAAA,CAAM,KAAK,CAAA,KAAA,CAAO,CAAA;AAAA,IAC1D,CAAC,CAAA;AAED,IAAA,IAAI,eAAA,CAAgB,SAAS,CAAA,EAAG;AAC9B,MAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,0BAAA,CAAuB,CAAA;AACnC,MAAA,eAAA,CAAgB,OAAA,CAAQ,CAAC,GAAA,EAAK,GAAA,KAAQ;AACpC,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,GAAA,EAAM,GAAA,GAAM,CAAC,CAAA,GAAA,EAAM,IAAI,QAAQ,CAAA,EAAA,EAAK,GAAA,CAAI,IAAI,CAAA,CAAA,CAAG,CAAA;AAC3D,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,GAAA,CAAI,OAAO,CAAA,CAAE,CAAA;AACzC,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,GAAA,CAAI,MAAM,CAAA,CAAE,CAAA;AAAA,MAC3C,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,2BAAA,CAAwB,CAAA;AACpC,IAAA,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,CAAQ,CAAC,WAAA,KAAgB;AAC7C,MAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,GAAA,CAAI,WAAW,CAAA;AAC3C,MAAA,OAAA,CAAQ,IAAI,CAAA,GAAA,EAAM,KAAA,GAAQ,WAAM,QAAG,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,CAAA;AAAA,IACtD,CAAC,CAAA;AAED,IAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,wBAAA,CAAqB,CAAA;AACjC,IAAA,MAAM,UAAW,aAAA,CAAc,IAAA,GAAO,OAAO,IAAA,CAAK,QAAQ,EAAE,MAAA,GAAU,GAAA;AACtE,IAAA,OAAA,CAAQ,IAAI,CAAA,qBAAA,EAAwB,IAAA,CAAK,KAAA,CAAM,OAAO,CAAC,CAAA,CAAA,CAAG,CAAA;AAC1D,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,CAAA,oBAAA,EAAuB,IAAA,CAAK,iBAAA,CAAkB,UAAA,CAAW,KAAK,CAAC,CAAA;AAAA,KACjE;AAEA,IAAA,OAAO,EAAE,aAAA,EAAe,UAAA,EAAY,eAAA,EAAgB;AAAA,EACtD;AAAA,EAEA,kBAAkB,UAAA,EAAY;AAC5B,IAAA,IAAI,UAAA,IAAc,GAAG,OAAO,WAAA;AAC5B,IAAA,IAAI,UAAA,IAAc,GAAG,OAAO,WAAA;AAC5B,IAAA,IAAI,UAAA,IAAc,GAAG,OAAO,WAAA;AAC5B,IAAA,OAAO,WAAA;AAAA,EACT;AAAA,EAEA,kBAAkB,KAAA,EAAO;AACvB,IAAA,IAAI,KAAA,IAAS,IAAI,OAAO,OAAA;AACxB,IAAA,IAAI,KAAA,IAAS,IAAI,OAAO,UAAA;AACxB,IAAA,IAAI,KAAA,IAAS,IAAI,OAAO,OAAA;AACxB,IAAA,OAAO,WAAA;AAAA,EACT;AAAA,EAEA,qBAAqB,YAAA,EAAc;AACjC,IAAA,MAAM,aAAa,EAAC;AACpB,IAAA,MAAM,gBAAA,GAAmB;AAAA,MACvB,UAAA,EAAY,CAAA;AAAA,MACZ,eAAA,sBAAqB,GAAA,EAAI;AAAA,MACzB,gBAAA,sBAAsB,GAAA,EAAI;AAAA,MAC1B,wBAAwB;AAAC,KAC3B;AAEA,IAAA,YAAA,CAAa,OAAA,CAAQ,CAAC,OAAA,KAAY;AAChC,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,iBAAA,CAAkB,OAAO,CAAA;AAC5C,MAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS;AACtB,QAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,qBAAA,EAAmB,IAAI,CAAA,CAAE,CAAA;AACrC,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA;AACpC,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,UAAA,CAAW,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,CAAA;AAChC,UAAA,gBAAA,CAAiB,UAAA,EAAA;AAGjB,UAAA,MAAA,CAAO,UAAA,CAAW,OAAA;AAAA,YAAQ,CAAC,IAAA,KACzB,gBAAA,CAAiB,eAAA,CAAgB,IAAI,IAAI;AAAA,WAC3C;AAGA,UAAA,MAAM,EAAE,aAAA,EAAe,UAAA,EAAW,GAAI,IAAA,CAAK,cAAc,MAAM,CAAA;AAC/D,UAAA,gBAAA,CAAiB,uBAAuB,IAAA,CAAK;AAAA,YAC3C,IAAA;AAAA,YACA,OAAO,UAAA,CAAW,KAAA;AAAA,YAClB,OAAO,UAAA,CAAW;AAAA,WACnB,CAAA;AAGD,UAAA,aAAA,CAAc,OAAA,CAAQ,CAAC,IAAA,EAAMC,QAAAA,KAAY;AACvC,YAAA,MAAM,OAAA,GAAU,gBAAA,CAAiB,gBAAA,CAAiB,GAAA,CAAIA,QAAO,CAAA,IAAK,CAAA;AAClE,YAAA,gBAAA,CAAiB,gBAAA,CAAiB,GAAA,CAAIA,QAAAA,EAAS,OAAA,GAAU,CAAC,CAAA;AAAA,UAC5D,CAAC,CAAA;AAAA,QACH;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,OAAO,EAAE,YAAY,gBAAA,EAAiB;AAAA,EACxC;AAAA,EAEA,kBAAkB,OAAA,EAAS;AACzB,IAAA,MAAMC,KAAAA,GAAO,UAAQ,MAAM,CAAA;AAC3B,IAAA,IAAI;AACF,MAAA,OAAOA,KAAAA,CAAK,KAAK,OAAO,CAAA;AAAA,IAC1B,SAAS,CAAA,EAAG;AACV,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,mCAAA,EAAsC,OAAO,CAAA,CAAE,CAAA;AAC5D,MAAA,OAAO,EAAC;AAAA,IACV;AAAA,EACF;AACF,CAAA;AC1ZA,eAAsB,SAAA,CACpB,OAAA,EACA,cAAA,EACA,QAAA,EACmB;AACnB,EAAA,MAAM,QAAA,GAAW,MAAMA,SAAA,CAAK,OAAA,EAAS;AAAA,IACnC,QAAQ,cAAA,IAAkB;AAAA,MACxB,oBAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,KAAA,EAAO,IAAA;AAAA,IACP,QAAA,EAAU,IAAA;AAAA;AAAA,IAEV,SAAA,EAAW;AAAA,GACZ,CAAA;AAGD,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,MAAA,CAAO,CAAC,IAAA,KAAS;AAtC/C,IAAA,IAAA,EAAA;AAuCI,IAAA,MAAM,OAAM,EAAA,GAAA,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,OAAhB,IAAA,GAAA,MAAA,GAAA,EAAA,CAAuB,WAAA,EAAA;AACnC,IAAA,OAAO,CAAC,OAAO,KAAA,EAAO,IAAA,EAAM,IAAI,CAAA,CAAE,QAAA,CAAS,OAAO,EAAE,CAAA;AAAA,EACtD,CAAC,CAAA;AAED,EAAA,OAAO,QAAA,GAAW,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAA,GAAI,UAAA;AACpD;AAKO,SAAS,sBAAA,CACd,WAAA,EACA,SAAA,GAAoB,MAAA,EACZ;AACR,EAAA,MAAM,SAAA,GAAA,qBAAgB,IAAA,EAAK,EAAE,aAAY,CAAE,OAAA,CAAQ,SAAS,GAAG,CAAA;AAC/D,EAAA,OAAO,CAAA,EAAG,WAAW,CAAA,QAAA,EAAW,SAAS,IAAI,SAAS,CAAA,CAAA;AACxD;AAKO,SAAS,iBAAA,CACd,IAAA,EACA,WAAA,EACA,kBAAA,GAA0C,EAAC,EACtC;AACL,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,QAAA,EAAU;AAAA,MACR,GAAG,IAAA,CAAK,QAAA;AAAA,MACR,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,MAClC,WAAA;AAAA,MACA,GAAG;AAAA;AACL,GACF;AACF;AAKO,SAAS,WAAW,OAAA,EAAoC;AAC7D,EAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAa,UAAA,EAAY,MAAA,GAAS,QAAO,GAAI,OAAA;AAE3D,EAAA,IAAI,WAAW,SAAA,EAAW;AACxB,IAAA,OAAO,EAAA;AAAA,EACT;AAGA,EAAA,MAAM,QAAA,GAAW,UAAA,IAAc,sBAAA,CAAuB,WAAW,CAAA;AAGjE,EAAA,MAAM,aAAaC,qBAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,GAAA,IAAO,iBAAiB,CAAA;AAC7D,EAAA,IAAI,CAACN,oBAAAA,CAAG,UAAA,CAAW,UAAU,CAAA,EAAG;AAC9B,IAAAA,qBAAG,SAAA,CAAU,UAAA,EAAY,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,EAC9C;AAGA,EAAA,MAAM,SAAA,GAAYM,sBAAK,UAAA,CAAW,QAAQ,IACtC,QAAA,GACAA,qBAAA,CAAK,IAAA,CAAK,UAAA,EAAY,QAAQ,CAAA;AAGlC,EAAA,MAAM,kBAAA,GAAqB,iBAAA,CAAkB,IAAA,EAAM,WAAW,CAAA;AAE9D,EAAAN,oBAAAA,CAAG,cAAc,SAAA,EAAW,IAAA,CAAK,UAAU,kBAAA,EAAoB,IAAA,EAAM,CAAC,CAAC,CAAA;AAEvE,EAAA,OAAA,CAAQ,GAAA,CAAIO,wBAAM,IAAA,CAAK;AAAA,gCAAA,EAA8B,SAAS,EAAE,CAAC,CAAA;AAEjE,EAAA,OAAO,SAAA;AACT;AAyCO,SAAS,aAAa,IAAA,EAAsB;AACjD,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,CAAA;AACH,MAAA,OAAO,WAAA;AAAA,IACT,KAAK,CAAA;AACH,MAAA,OAAO,WAAA;AAAA,IACT,KAAK,CAAA;AACH,MAAA,OAAO,WAAA;AAAA,IACT;AACE,MAAA,OAAO,WAAA;AAAA;AAEb;;;AC/IA,eAAsB,cAAA,CACpB,SACA,OAAA,EACe;AACf,EAAA,MAAM,OAAA,GAAUC,qBAAA,CAAI,6BAA6B,CAAA,CAAE,KAAA,EAAM;AAEzD,EAAA,IAAI;AAEF,IAAA,MAAM,QAAQ,MAAM,SAAA,CAAU,SAAS,OAAA,CAAQ,MAAA,EAAQ,QAAQ,QAAQ,CAAA;AAEvE,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,OAAA,CAAQ,IAAA,CAAKD,uBAAAA,CAAM,GAAA,CAAI,mCAAA,GAAsC,OAAO,CAAC,CAAA;AACrE,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,QAAQA,uBAAAA,CAAM,KAAA,CAAM,SAAS,KAAA,CAAM,MAAM,mBAAmB,CAAC,CAAA;AAGrE,IAAA,OAAA,CAAQ,MAAM,oBAAoB,CAAA;AAClC,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,UAAA,GACrB,IAAI,oBAAA,CAAqB,OAAA,CAAQ,OAAO,CAAA,GACxC,IAAI,2BAAA,CAA4B,OAAA,CAAQ,OAAO,CAAA;AAEnD,IAAA,MAAM,gBAAA,GAAmB;AAAA,MACvB,QAAA,EAAU;AAAA,QACR,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QAClC,WAAA,EAAa,SAAA;AAAA,QACb,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,OAAA;AAAA,QACA,aAAA,EAAe,CAAA;AAAA,QACf,eAAA,EAAiB,CAAA;AAAA,QACjB,YAAY,KAAA,CAAM;AAAA,OACpB;AAAA,MACA,OAAO,EAAC;AAAA,MACR,UAAA,EAAY;AAAA,QACV,aAAA,sBAAmB,GAAA,EAAI;AAAA,QACvB,YAAA,EAAc,CAAA;AAAA,QACd,kBAAA,EAAoB,CAAA;AAAA,QACpB,kBAAkB,EAAC;AAAA,QACnB,oBAAoB,EAAC;AAAA,QACrB,gBAAgB,EAAC;AAAA,QACjB,QAAQ;AAAC;AACX,KACF;AAGA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,MAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,MAAA,OAAA,CAAQ,IAAA,GAAO,CAAA,oBAAA,EAAuB,CAAA,GAAI,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,MAAM,CAAA,EAAA,EAAKD,qBAAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,CAAA;AAEnF,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,QAAA,CAAS,WAAA,CAAY,IAAI,CAAA;AAExC,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,gBAAA,CAAiB,QAAA,CAAS,aAAA,EAAA;AAE1B,UAAA,MAAM,UAAA,GAAkB;AAAA,YACtB,IAAA,EAAM,IAAA;AAAA,YACN,YAAY,MAAA,CAAO,UAAA;AAAA,YACnB,SAAS,MAAA,CAAO,OAAA;AAAA,YAChB,UAAU,MAAA,CAAO;AAAA,WACnB;AAEA,UAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,YAAA,MAAM,QAAA,GAAW,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA;AAC9C,YAAA,MAAM,aAAa,QAAA,CAAS,uBAAA;AAAA,cAC1B,QAAA,CAAS;AAAA,aACX;AACA,YAAA,UAAA,CAAW,UAAA,GAAa,UAAA;AACxB,YAAA,gBAAA,CAAiB,UAAA,CAAW,eAAe,IAAA,CAAK;AAAA,cAC9C,IAAA;AAAA,cACA,OAAO,UAAA,CAAW,KAAA;AAAA,cAClB,OAAO,UAAA,CAAW;AAAA,aACnB,CAAA;AAAA,UACH;AAEA,UAAA,gBAAA,CAAiB,KAAA,CAAM,KAAK,UAAU,CAAA;AAGtC,UAAA,MAAA,CAAO,UAAA,CAAW,OAAA;AAAA,YAAQ,CAAC,IAAA,KACzB,gBAAA,CAAiB,UAAA,CAAW,aAAA,CAAc,IAAI,IAAI;AAAA,WACpD;AACA,UAAA,gBAAA,CAAiB,UAAA,CAAW,YAAA,IAC1B,MAAA,CAAO,OAAA,CAAQ,YAAA;AACjB,UAAA,gBAAA,CAAiB,UAAA,CAAW,kBAAA,IAC1B,MAAA,CAAO,OAAA,CAAQ,kBAAA;AAGjB,UAAA,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,CAAC,KAAA,KAAe;AAChD,YAAA,gBAAA,CAAiB,UAAA,CAAW,kBAAA,CAAmB,KAAA,CAAM,SAAS,CAAA,GAAA,CAC3D,gBAAA,CAAiB,UAAA,CAAW,kBAAA,CAC3B,KAAA,CAAM,SACR,CAAA,IAAK,CAAA,IAAK,KAAA,CAAM,KAAA;AAAA,UACpB,CAAC,CAAA;AAGD,UAAA,MAAA,CAAO,KAAK,MAAA,CAAO,QAAQ,CAAA,CAAE,OAAA,CAAQ,CAAC,QAAA,KAAa;AACjD,YAAA,MAAA,CAAO,IAAA,CAAK,OAAO,QAAA,CAAS,QAAQ,CAAC,CAAA,CAAE,OAAA,CAAQ,CAAC,WAAA,KAAgB;AAC9D,cAAA,MAAMF,QAAAA,GAAU,MAAA,CAAO,QAAA,CAAS,QAAQ,EAAE,WAAW,CAAA;AACrD,cAAA,MAAM,QAAQ,KAAA,CAAM,OAAA,CAAQA,QAAO,CAAA,GAAIA,SAAQ,MAAA,GAAS,CAAA;AACxD,cAAA,IAAI,QAAQ,CAAA,EAAG;AACb,gBAAA,MAAM,GAAA,GAAM,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA;AACtC,gBAAA,gBAAA,CAAiB,UAAA,CAAW,iBAAiB,GAAG,CAAA,GAAA,CAC7C,iBAAiB,UAAA,CAAW,gBAAA,CAAiB,GAAG,CAAA,IAAK,CAAA,IACtD,KAAA;AAAA,cACJ;AAAA,YACF,CAAC,CAAA;AAAA,UACH,CAAC,CAAA;AAAA,QACH;AAAA,MACF,SAAS,KAAA,EAAY;AACnB,QAAA,gBAAA,CAAiB,QAAA,CAAS,eAAA,EAAA;AAC1B,QAAA,gBAAA,CAAiB,UAAA,CAAW,OAAO,IAAA,CAAK;AAAA,UACtC,IAAA;AAAA,UACA,OAAO,KAAA,CAAM;AAAA,SACd,CAAA;AAAA,MACH;AAAA,IACF;AAGA,IAAA,gBAAA,CAAiB,UAAA,CAAW,gBAAgB,KAAA,CAAM,IAAA;AAAA,MAChD,iBAAiB,UAAA,CAAW;AAAA,KAC9B;AAEA,IAAA,OAAA,CAAQ,OAAA;AAAA,MACNG,uBAAAA,CAAM,KAAA;AAAA,QACJ,CAAA,4BAAA,EAA+B,gBAAA,CAAiB,QAAA,CAAS,aAAa,CAAA,MAAA;AAAA;AACxE,KACF;AAGA,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,MAAA,IAAU,OAAA,CAAQ,WAAW,MAAA,EAAQ;AAC1D,MAAA,UAAA,CAAW;AAAA,QACT,IAAA,EAAM,gBAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,YAAY,OAAA,CAAQ,MAAA;AAAA,QACpB,QAAQ,OAAA,CAAQ;AAAA,OACjB,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,SAAA,IAAa,OAAA,CAAQ,WAAW,MAAA,EAAQ;AAC7D,MAAA,qBAAA,CAAsB,kBAAkB,OAAO,CAAA;AAAA,IACjD;AAAA,EACF,SAAS,KAAA,EAAY;AACnB,IAAA,OAAA,CAAQ,KAAKA,uBAAAA,CAAM,GAAA,CAAI,mBAAA,GAAsB,KAAA,CAAM,OAAO,CAAC,CAAA;AAC3D,IAAA,OAAA,CAAQ,MAAM,KAAK,CAAA;AAAA,EACrB;AACF;AAEA,SAAS,qBAAA,CAAsB,QAAa,OAAA,EAA+B;AACzE,EAAA,OAAA,CAAQ,GAAA,CAAI,OAAOA,uBAAAA,CAAM,IAAA,CAAK,KAAK,QAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA;AAClD,EAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,IAAA,CAAK,wCAAiC,CAAC,CAAA;AAC9D,EAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAM,IAAA,CAAK,IAAA,CAAK,SAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA;AAE3C,EAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,sBAAe,CAAC,CAAA;AACvC,EAAA,OAAA,CAAQ,GAAA,CAAI,cAAcA,uBAAAA,CAAM,IAAA,CAAK,OAAO,QAAA,CAAS,OAAO,CAAC,CAAA,CAAE,CAAA;AAC/D,EAAA,OAAA,CAAQ,GAAA;AAAA,IACN,CAAA,kBAAA,EAAqBA,uBAAAA,CAAM,KAAA,CAAM,MAAA,CAAO,QAAA,CAAS,aAAa,CAAC,CAAA,GAAA,EAAM,MAAA,CAAO,QAAA,CAAS,UAAU,CAAA;AAAA,GACjG;AACA,EAAA,IAAI,MAAA,CAAO,QAAA,CAAS,eAAA,GAAkB,CAAA,EAAG;AACvC,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,wBAAwBA,uBAAAA,CAAM,GAAA,CAAI,MAAA,CAAO,QAAA,CAAS,eAAe,CAAC,CAAA;AAAA,KACpE;AAAA,EACF;AACA,EAAA,OAAA,CAAQ,GAAA;AAAA,IACN,uBAAuBA,uBAAAA,CAAM,MAAA,CAAO,OAAO,UAAA,CAAW,aAAA,CAAc,MAAM,CAAC,CAAA;AAAA,GAC7E;AACA,EAAA,OAAA,CAAQ,GAAA;AAAA,IACN,oBAAoBA,uBAAAA,CAAM,MAAA,CAAO,MAAA,CAAO,UAAA,CAAW,YAAY,CAAC,CAAA;AAAA,GAClE;AACA,EAAA,OAAA,CAAQ,GAAA;AAAA,IACN,2BAA2BA,uBAAAA,CAAM,MAAA,CAAO,MAAA,CAAO,UAAA,CAAW,kBAAkB,CAAC,CAAA;AAAA,GAC/E;AAEA,EAAA,IAAI,CAAC,QAAQ,WAAA,EAAa;AACxB,IAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,6BAAsB,CAAC,CAAA;AAC9C,IAAA,MAAM,aAAA,GAAgB,OAAO,OAAA,CAAQ,MAAA,CAAO,WAAW,kBAAkB,CAAA,CACtE,KAAK,CAAC,CAAA,EAAQ,MAAW,CAAA,CAAE,CAAC,IAAI,CAAA,CAAE,CAAC,CAAC,CAAA,CACpC,KAAA,CAAM,GAAG,EAAE,CAAA;AAEd,IAAA,aAAA,CAAc,QAAQ,CAAC,CAAC,IAAA,EAAM,KAAK,GAAkB,KAAA,KAAkB;AACrE,MAAA,MAAM,OAAO,KAAA,GAAQ,CAAA;AACrB,MAAA,MAAM,KAAA,GAAQ,aAAa,IAAI,CAAA;AAC/B,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,EAAA,EAAKA,uBAAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,EAAKA,uBAAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA,KAAA;AAAA,OACjE;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,gCAAyB,CAAC,CAAA;AACjD,IAAA,MAAM,WAAA,GAAc,OAAO,OAAA,CAAQ,MAAA,CAAO,WAAW,gBAAgB,CAAA,CAClE,KAAK,CAAC,CAAA,EAAQ,MAAW,CAAA,CAAE,CAAC,IAAI,CAAA,CAAE,CAAC,CAAC,CAAA,CACpC,KAAA,CAAM,GAAG,EAAE,CAAA;AAEd,IAAA,WAAA,CAAY,QAAQ,CAAC,CAAC,OAAA,EAAS,KAAK,GAAkB,KAAA,KAAkB;AACtE,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,KAAA,GAAQ,CAAC,CAAA,EAAA,EAAK,OAAO,CAAA,EAAA,EAAKA,uBAAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,IAClE,CAAC,CAAA;AAED,IAAA,IAAI,MAAA,CAAO,UAAA,CAAW,cAAA,CAAe,MAAA,GAAS,CAAA,EAAG;AAC/C,MAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,kCAA2B,CAAC,CAAA;AACnD,MAAA,MAAM,aAAA,GACJ,MAAA,CAAO,UAAA,CAAW,cAAA,CAAe,MAAA;AAAA,QAC/B,CAAC,GAAA,EAAa,CAAA,KAAW,GAAA,GAAM,CAAA,CAAE,KAAA;AAAA,QACjC;AAAA,OACF,GAAI,MAAA,CAAO,UAAA,CAAW,cAAA,CAAe,MAAA;AACvC,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,yBAAyBA,uBAAAA,CAAM,MAAA,CAAO,cAAc,OAAA,CAAQ,CAAC,CAAC,CAAC,CAAA;AAAA,OACjE;AAEA,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,UAAA,CAAW,cAAA,CACnC,KAAK,CAAC,CAAA,EAAQ,CAAA,KAAW,CAAA,CAAE,QAAQ,CAAA,CAAE,KAAK,CAAA,CAC1C,KAAA,CAAM,GAAG,CAAC,CAAA;AACb,MAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,yBAAyB,CAAC,CAAA;AACjD,MAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,IAAA,EAAW,KAAA,KAAkB;AAChD,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,KAAK,KAAA,GAAQ,CAAC,CAAA,EAAA,EAAKD,qBAAAA,CAAK,SAAS,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,EAAKC,wBAAM,MAAA,CAAO,IAAA,CAAK,KAAK,CAAC,CAAA,EAAA,EAAK,KAAK,KAAK,CAAA,CAAA;AAAA,SACzF;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,IAAI,MAAA,CAAO,UAAA,CAAW,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AACvC,IAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,GAAA,CAAI,yBAAe,CAAC,CAAA;AAC3C,IAAA,MAAA,CAAO,UAAA,CAAW,OAAO,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,OAAA,CAAQ,CAAC,KAAA,KAAe;AAC3D,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,CAAA,EAAA,EAAKA,uBAAAA,CAAM,GAAA,CAAI,QAAG,CAAC,CAAA,CAAA,EAAID,qBAAAA,CAAK,QAAA,CAAS,KAAA,CAAM,IAAI,CAAC,CAAA,EAAA,EAAK,MAAM,KAAK,CAAA;AAAA,OAClE;AAAA,IACF,CAAC,CAAA;AACD,IAAA,IAAI,MAAA,CAAO,UAAA,CAAW,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AACvC,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,CAAA,UAAA,EAAa,MAAA,CAAO,UAAA,CAAW,MAAA,CAAO,SAAS,CAAC,CAAA,YAAA;AAAA,OAClD;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,GAAOC,uBAAAA,CAAM,IAAA,CAAK,IAAA,CAAK,SAAI,MAAA,CAAO,EAAE,CAAC,CAAA,GAAI,IAAI,CAAA;AAC3D;AChPA,eAAsB,cAAA,CACpB,SACA,OAAA,EACe;AACf,EAAA,MAAM,OAAA,GAAUC,qBAAAA,CAAI,6BAA6B,CAAA,CAAE,KAAA,EAAM;AAEzD,EAAA,IAAI;AACF,IAAA,MAAM,QAAQ,MAAM,SAAA,CAAU,OAAA,EAAS,IAAI,GAAI,CAAA;AAE/C,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,OAAA,CAAQ,IAAA,CAAKD,uBAAAA,CAAM,GAAA,CAAI,mCAAA,GAAsC,OAAO,CAAC,CAAA;AACrE,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,QAAQA,uBAAAA,CAAM,KAAA,CAAM,SAAS,KAAA,CAAM,MAAM,QAAQ,CAAC,CAAA;AAE1D,IAAA,MAAM,iBAAA,GAAoB;AAAA,MACxB,QAAA,EAAU;AAAA,QACR,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QAClC,WAAA,EAAa,SAAA;AAAA,QACb,OAAA;AAAA,QACA,eAAe,KAAA,CAAM,MAAA;AAAA,QACrB,WAAW,OAAA,CAAQ;AAAA,OACrB;AAAA,MACA,WAAW;AAAC,KACd;AAGA,IAAA,KAAA,MAAW,OAAA,IAAW,QAAQ,SAAA,EAAW;AACvC,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,UAAA,EAAa,OAAO,CAAA,GAAA,CAAK,CAAA;AAEvC,MAAA,MAAM,QAAA,GAAW,IAAI,oBAAA,CAAqB,OAAO,CAAA;AACjD,MAAA,IAAI,eAAA,GAAkB,CAAA;AACtB,MAAA,IAAI,aAAA,GAAgB,CAAA;AACpB,MAAA,MAAM,UAAA,uBAAiB,GAAA,EAAY;AAEnC,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,GAAS,QAAA,CAAS,WAAA,CAAY,IAAI,CAAA;AACxC,UAAA,IAAI,MAAA,EAAQ;AACV,YAAA,eAAA,IAAmB,OAAO,OAAA,CAAQ,eAAA;AAClC,YAAA,aAAA,IAAiB,OAAO,OAAA,CAAQ,kBAAA;AAChC,YAAA,MAAA,CAAO,WAAW,OAAA,CAAQ,CAAC,SAAiB,UAAA,CAAW,GAAA,CAAI,IAAI,CAAC,CAAA;AAAA,UAClE;AAAA,QACF,SAAS,KAAA,EAAO;AAAA,QAEhB;AAAA,MACF;AAEA,MAAA,MAAM,aAAA,GAAgB;AAAA,QACpB,IAAA,EAAM,OAAA;AAAA,QACN,iBAAiB,UAAA,CAAW,IAAA;AAAA,QAC5B,kBAAA,EAAoB,aAAA;AAAA,QACpB,eAAe,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA,CAAE,KAAA,CAAM,GAAG,EAAE;AAAA,OACnD;AAEA,MAAA,iBAAA,CAAkB,SAAA,CAAU,KAAK,aAAa,CAAA;AAC9C,MAAA,OAAA,CAAQ,OAAA;AAAA,QACNA,wBAAM,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,EAAA,EAAK,UAAA,CAAW,IAAI,CAAA,iBAAA,CAAmB;AAAA,OAC/D;AAAA,IACF;AAGA,IAAA,iBAAA,CAAkB,SAAA,CAAU,IAAA;AAAA,MAC1B,CAAC,CAAA,EAAQ,CAAA,KAAW,CAAA,CAAE,kBAAkB,CAAA,CAAE;AAAA,KAC5C;AAGA,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,MAAA,IAAU,OAAA,CAAQ,WAAW,MAAA,EAAQ;AAC1D,MAAA,UAAA,CAAW;AAAA,QACT,IAAA,EAAM,iBAAA;AAAA,QACN,WAAA,EAAa,SAAA;AAAA,QACb,YAAY,OAAA,CAAQ,MAAA;AAAA,QACpB,QAAQ,OAAA,CAAQ;AAAA,OACjB,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,SAAA,IAAa,OAAA,CAAQ,WAAW,MAAA,EAAQ;AAC7D,MAAA,qBAAA,CAAsB,iBAAiB,CAAA;AAAA,IACzC;AAAA,EACF,SAAS,KAAA,EAAY;AACnB,IAAA,OAAA,CAAQ,KAAKA,uBAAAA,CAAM,GAAA,CAAI,qBAAA,GAAwB,KAAA,CAAM,OAAO,CAAC,CAAA;AAC7D,IAAA,OAAA,CAAQ,MAAM,KAAK,CAAA;AAAA,EACrB;AACF;AAEA,SAAS,sBAAsB,OAAA,EAAoB;AACjD,EAAA,OAAA,CAAQ,GAAA,CAAI,OAAOA,uBAAAA,CAAM,IAAA,CAAK,KAAK,QAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA;AAClD,EAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,IAAA,CAAK,uCAAgC,CAAC,CAAA;AAC7D,EAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAM,IAAA,CAAK,IAAA,CAAK,SAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA;AAE3C,EAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,sBAAe,CAAC,CAAA;AACvC,EAAA,OAAA,CAAQ,SAAA,CAAU,OAAA,CAAQ,CAAC,GAAA,EAAU,KAAA,KAAkB;AACrD,IAAA,MAAM,OAAO,KAAA,GAAQ,CAAA;AACrB,IAAA,MAAM,KAAA,GAAQ,aAAa,IAAI,CAAA;AAC/B,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,EAAI,IAAI,KAAKA,uBAAAA,CAAM,IAAA,CAAK,IAAI,IAAI,CAAC,KAAKA,uBAAAA,CAAM,MAAA,CAAO,IAAI,eAAe,CAAC,gBAAgBA,uBAAAA,CAAM,MAAA,CAAO,GAAA,CAAI,kBAAkB,CAAC,CAAA,eAAA;AAAA,KACvI;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,GAAOA,uBAAAA,CAAM,IAAA,CAAK,IAAA,CAAK,SAAI,MAAA,CAAO,EAAE,CAAC,CAAA,GAAI,IAAI,CAAA;AAC3D;ACOO,SAAS,eAAe,GAAA,EAA6B;AAE1D,EAAA,IAAI,kBAAA,CAAmB,IAAA,CAAK,GAAG,CAAA,EAAG;AAChC,IAAA,MAAM,CAAC,KAAA,EAAO,IAAI,CAAA,GAAI,GAAA,CAAI,MAAM,GAAG,CAAA;AACnC,IAAA,OAAO;AAAA,MACL,KAAA;AAAA,MACA,IAAA,EAAM,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA;AAAA,MAC7B,GAAA,EAAK,CAAA,mBAAA,EAAsB,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AAAA,MACxC,SAAA,EAAW;AAAA,KACb;AAAA,EACF;AAGA,EAAA,MAAM,UAAA,GAAa,GAAA,CAAI,KAAA,CAAM,gCAAgC,CAAA;AAC7D,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,WAAW,CAAC,CAAA;AAAA,MACnB,IAAA,EAAM,WAAW,CAAC,CAAA;AAAA,MAClB,GAAA;AAAA,MACA,SAAA,EAAW,GAAG,UAAA,CAAW,CAAC,CAAC,CAAA,CAAA,EAAI,UAAA,CAAW,CAAC,CAAC,CAAA;AAAA,KAC9C;AAAA,EACF;AAEA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR,uBAAuB,GAAG,CAAA,8DAAA;AAAA,GAC5B;AACF;AAMO,SAAS,aAAA,GAAwC;AACtD,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAAE,oBAAA,CAAI,GAAA;AAAA,MACF,EAAE,aAAA,EAAe,IAAA,EAAM,MAAA,EAAQ,iBAAA,EAAkB;AAAA,MACjD,CAAC,GAAA,EAAK,OAAA,EAAS,OAAA,KAAY;AACzB,QAAA,IAAI,GAAA,SAAY,GAAG,CAAA;AACnB,QAAA,OAAA,CAAQ,EAAE,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,CAAA;AAAA,MACpC;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AACH;AASA,eAAsB,eAAA,CACpB,OAAA,EACA,SAAA,EACA,OAAA,GAAwB,EAAC,EACA;AACzB,EAAA,MAAM,EAAE,MAAA,GAAS,MAAA,EAAQ,KAAA,GAAQ,GAAE,GAAI,OAAA;AACvC,EAAA,MAAM,QAAA,GAAW,eAAe,OAAO,CAAA;AACvC,EAAA,MAAM,SAAA,GAAYH,qBAAAA,CAAK,IAAA,CAAK,SAAA,EAAW,CAAA,EAAG,SAAS,KAAK,CAAA,CAAA,EAAI,QAAA,CAAS,IAAI,CAAA,CAAE,CAAA;AAE3E,EAAA,MAAM,MAAMI,0BAAA,EAAU;AAEtB,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,SAAA;AAAA,IACA,MAAM,QAAA,EAAS;AAAA,IACf,UAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,CAAI,KAAA,CAAM,QAAA,CAAS,GAAA,EAAK,WAAW,YAAY,CAAA;AACrD,IAAA,OAAO;AAAA,MACL,GAAG,QAAA;AAAA,MACH,SAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA,EAAS;AAAA,KACX;AAAA,EACF,SAAS,KAAA,EAAO;AAEd,IAAA,IACE,KAAA,YAAiB,SACjB,KAAA,CAAM,OAAA,CAAQ,SAAS,WAAW,CAAA,IAClC,WAAW,MAAA,EACX;AACA,MAAA,IAAI;AACF,QAAA,MAAM,eAAA,GAAkB;AAAA,UACtB,SAAA;AAAA,UACA,GAAA;AAAA,UACA,UAAA;AAAA,UACA,QAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,MAAM,GAAA,CAAI,KAAA,CAAM,QAAA,CAAS,GAAA,EAAK,WAAW,eAAe,CAAA;AACxD,QAAA,OAAO;AAAA,UACL,GAAG,QAAA;AAAA,UACH,SAAA;AAAA,UACA,MAAA,EAAQ,QAAA;AAAA,UACR,OAAA,EAAS;AAAA,SACX;AAAA,MACF,SAAS,UAAA,EAAY;AACnB,QAAA,MAAM,UAAA;AAAA,MACR;AAAA,IACF;AACA,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AASA,eAAsB,iBAAA,CACpB,QAAA,EACA,SAAA,EACA,OAAA,GAAwB,EAAC,EACH;AACtB,EAAA,MAAM,OAAA,GAAUF,qBAAAA,CAAI,yBAAyB,CAAA,CAAE,KAAA,EAAM;AACrD,EAAA,MAAM,cAAgC,EAAC;AACvC,EAAA,MAAM,SAAgD,EAAC;AAEvD,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,IAAI;AACF,MAAA,OAAA,CAAQ,IAAA,GAAO,WAAW,OAAO,CAAA,GAAA,CAAA;AACjC,MAAA,MAAM,QAAA,GAAW,MAAM,eAAA,CAAgB,OAAA,EAAS,WAAW,OAAO,CAAA;AAClE,MAAA,WAAA,CAAY,KAAK,QAAQ,CAAA;AACzB,MAAA,OAAA,CAAQ,OAAA;AAAA,QACND,uBAAAA,CAAM,KAAA;AAAA,UACJ,CAAA,cAAA,EAAY,QAAA,CAAS,SAAS,CAAA,EAAA,EAAK,SAAS,MAAM,CAAA,QAAA;AAAA;AACpD,OACF;AACA,MAAA,OAAA,CAAQ,KAAA,EAAM;AAAA,IAChB,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,GAAA,EAAK,OAAA;AAAA,QACL,KAAA,EAAO;AAAA,OACR,CAAA;AACD,MAAA,OAAA,CAAQ,IAAA,CAAKA,wBAAM,GAAA,CAAI,CAAA,uBAAA,EAAqB,OAAO,CAAA,EAAA,EAAK,OAAO,EAAE,CAAC,CAAA;AAClE,MAAA,OAAA,CAAQ,KAAA,EAAM;AAAA,IAChB;AAAA,EACF;AAEA,EAAA,OAAA,CAAQ,IAAA,EAAK;AAEb,EAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAC5B,IAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,EAC5D;AAEA,EAAA,OAAA,CAAQ,GAAA;AAAA,IACNA,uBAAAA,CAAM,KAAA;AAAA,MACJ;AAAA,oBAAA,EAAyB,WAAA,CAAY,MAAM,CAAA,IAAA,EAAO,QAAA,CAAS,MAAM,CAAA;AAAA;AAAA;AACnE,GACF;AAEA,EAAA,OAAO,EAAE,aAAa,MAAA,EAAO;AAC/B;AAQA,eAAsB,eAAA,CACpB,IAAA,EACA,OAAA,GAAkB,sBAAA,EACC;AACnB,EAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,IAAA,MAAM,IAAI,MAAM,qCAAqC,CAAA;AAAA,EACvD;AAGA,EAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,OAAO,GAAG,CAAA;AACxD,EAAA,MAAM,aAAA,GAAgB,CAAA,EAAG,cAAc,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA;AAElD,EAAA,MAAM,KAAA,GAAQ,MAAMF,SAAAA,CAAK,aAAA,EAAe;AAAA,IACtC,MAAA,EAAQ,CAAC,oBAAA,EAAsB,YAAA,EAAc,eAAe,YAAY,CAAA;AAAA,IACxE,KAAA,EAAO,IAAA;AAAA,IACP,oBAAA,EAAsB;AAAA,GACvB,CAAA;AAED,EAAA,OAAO,KAAA;AACT;AAQA,eAAsB,gBAAA,CACpB,KAAA,EACA,OAAA,GAAkB,sBAAA,EACI;AACtB,EAAA,MAAM,cAA2B,EAAC;AAElC,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,KAAA,GAAQ,MAAM,eAAA,CAAgB,IAAA,EAAM,OAAO,CAAA;AACjD,IAAA,WAAA,CAAY,IAAA,CAAK,SAAS,CAAA,GAAI;AAAA,MAC5B,IAAA;AAAA,MACA,KAAA;AAAA,MACA,OAAO,KAAA,CAAM;AAAA,KACf;AAAA,EACF;AAEA,EAAA,OAAO,WAAA;AACT;AAOA,eAAsB,aAAa,QAAA,EAAsC;AACvE,EAAA,IAAI;AACF,IAAA,MAAM,eAAA,GAAkBC,qBAAAA,CAAK,IAAA,CAAK,QAAA,EAAU,cAAc,CAAA;AAC1D,IAAA,IAAI,WAAA,GAAmB,IAAA;AAEvB,IAAA,IAAIN,oBAAAA,CAAG,UAAA,CAAW,eAAe,CAAA,EAAG;AAClC,MAAA,WAAA,GAAc,KAAK,KAAA,CAAMA,oBAAAA,CAAG,YAAA,CAAa,eAAA,EAAiB,MAAM,CAAC,CAAA;AAAA,IACnE;AAGA,IAAA,MAAM,cAAA,GAAiB,QAAA,CAAS,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA;AAClD,IAAA,MAAM,KAAA,GAAQ,MAAMK,SAAAA,CAAK,CAAA,EAAG,cAAc,CAAA,qBAAA,CAAA,EAAyB;AAAA,MACjE,MAAA,EAAQ,CAAC,oBAAA,EAAsB,YAAA,EAAc,aAAa,CAAA;AAAA,MAC1D,KAAA,EAAO,IAAA;AAAA,MACP,oBAAA,EAAsB;AAAA,KACvB,CAAA;AAED,IAAA,MAAM,SAAA,GAAY;AAAA,MAChB,GAAA,EAAK,CAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA,MACL,EAAA,EAAI,CAAA;AAAA,MACJ,EAAA,EAAI;AAAA,KACN;AAEA,IAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS;AACtB,MAAA,MAAM,MAAMC,qBAAAA,CAAK,OAAA,CAAQ,IAAI,CAAA,CAAE,MAAM,CAAC,CAAA;AACtC,MAAA,IAAI,SAAA,CAAU,cAAA,CAAe,GAAG,CAAA,EAAG;AACjC,QAAA,SAAA,CAAU,GAAG,CAAA,EAAA;AAAA,MACf;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO;AAAA,MACL,WAAA;AAAA,MACA,IAAA,EAAA,CAAM,2CAAa,IAAA,KAAQ,SAAA;AAAA,MAC3B,OAAA,EAAA,CAAS,2CAAa,OAAA,KAAW,SAAA;AAAA,MACjC,YAAA,EAAA,CAAc,WAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,WAAA,CAAa,YAAA,KAAgB,EAAC;AAAA,MAC5C,eAAA,EAAA,CAAiB,WAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,WAAA,CAAa,eAAA,KAAmB,EAAC;AAAA,MAClD,YAAY,KAAA,CAAM,MAAA;AAAA,MAClB;AAAA,KACF;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,OAAA;AAAA,MACP,IAAA,EAAM,SAAA;AAAA,MACN,OAAA,EAAS,SAAA;AAAA,MACT,cAAc,EAAC;AAAA,MACf,iBAAiB,EAAC;AAAA,MAClB,UAAA,EAAY,CAAA;AAAA,MACZ,SAAA,EAAW,EAAE,GAAA,EAAK,CAAA,EAAG,KAAK,CAAA,EAAG,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAA;AAAE,KAC5C;AAAA,EACF;AACF;AAOO,SAAS,uBACd,eAAA,EACgB;AAChB,EAAA,MAAM,QAAA,GAA2B;AAAA,IAC/B,iBAAiB,EAAC;AAAA,IAClB,cAAc,EAAC;AAAA,IACf,kBAAkB,EAAC;AAAA,IACnB,oBAAoB,EAAC;AAAA,IACrB,iBAAiB,EAAC;AAAA,IAClB,eAAe;AAAC,GAClB;AAEA,EAAA,MAAM,kBAAA,uBAAyB,GAAA,EAAY;AAC3C,EAAA,MAAM,eAAA,uBAAsB,GAAA,EAAY;AAExC,EAAA,MAAA,CAAO,OAAA,CAAQ,eAAA,CAAgB,YAAY,CAAA,CAAE,OAAA;AAAA,IAC3C,CAAC,CAAC,QAAA,EAAU,QAAQ,CAAA,KAAM;AAExB,MAAA,QAAA,CAAS,SAAS,UAAA,CAAW,OAAA;AAAA,QAAQ,CAAC,IAAA,KACpC,kBAAA,CAAmB,GAAA,CAAI,IAAI;AAAA,OAC7B;AACA,MAAA,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,QAAA,CAAS,OAAO,CAAA,CAAE,OAAA;AAAA,QAAQ,CAAC,GAAA,KAC9C,eAAA,CAAgB,GAAA,CAAI,GAAG;AAAA,OACzB;AAGA,MAAA,QAAA,CAAS,gBAAA,CAAiB,QAAQ,CAAA,GAAI,QAAA,CAAS,QAAA,CAAS,UAAA;AAGxD,MAAA,MAAA,CAAO,OAAA,CAAQ,QAAA,CAAS,QAAA,CAAS,cAAc,CAAA,CAAE,OAAA;AAAA,QAC/C,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,KAAM;AACjB,UAAA,QAAA,CAAS,mBAAmB,IAAI,CAAA,GAAA,CAC7B,SAAS,kBAAA,CAAmB,IAAI,KAAK,CAAA,IAAK,KAAA;AAAA,QAC/C;AAAA,OACF;AAGA,MAAA,MAAA,CAAO,OAAA,CAAQ,QAAA,CAAS,QAAA,CAAS,OAAO,CAAA,CAAE,QAAQ,CAAC,CAAC,GAAA,EAAK,IAAI,CAAA,KAAM;AACjE,QAAA,QAAA,CAAS,eAAA,CAAgB,GAAG,CAAA,GAAA,CACzB,QAAA,CAAS,gBAAgB,GAAG,CAAA,IAAK,KAAK,IAAA,CAAK,KAAA;AAAA,MAChD,CAAC,CAAA;AAGD,MAAA,QAAA,CAAS,cAAc,IAAA,CAAK;AAAA,QAC1B,IAAA,EAAM,QAAA;AAAA,QACN,UAAA,EAAY,QAAA,CAAS,QAAA,CAAS,UAAA,CAAW,MAAA;AAAA,QACzC,KAAA,EAAO,SAAS,KAAA,CAAM,MAAA;AAAA,QACtB,MAAA,EAAQ,QAAA,CAAS,QAAA,CAAS,MAAA,CAAO,MAAA;AAAA,QACjC,aAAA,EAAe,MAAA,CAAO,OAAA,CAAQ,QAAA,CAAS,SAAS,cAAc,CAAA,CAC3D,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,CAAC,IAAI,CAAA,CAAE,CAAC,CAAC,CAAA,CAC1B,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CACV,IAAI,CAAC,CAAC,IAAA,EAAM,KAAK,OAAO,EAAE,SAAA,EAAW,IAAA,EAAM,IAAA,EAAM,OAAM,CAAE;AAAA,OAC7D,CAAA;AAAA,IACH;AAAA,GACF;AAEA,EAAA,QAAA,CAAS,eAAA,GAAkB,KAAA,CAAM,IAAA,CAAK,kBAAkB,CAAA;AACxD,EAAA,QAAA,CAAS,YAAA,GAAe,KAAA,CAAM,IAAA,CAAK,eAAe,CAAA;AAElD,EAAA,OAAO,QAAA;AACT;AAQO,SAAS,cAAA,CACd,OAAA,EACA,MAAA,EACA,SAAA,GAAqB,KAAA,EACf;AACN,EAAA,IAAI,CAAC,aAAa,OAAA,EAAS;AACzB,IAAA,IAAI;AACF,MAAA,OAAA,EAAQ;AACR,MAAA,OAAA,CAAQ,GAAA,CAAIC,uBAAAA,CAAM,IAAA,CAAK,4CAAqC,CAAC,CAAA;AAAA,IAC/D,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,MAAA,OAAA,CAAQ,KAAKA,uBAAAA,CAAM,MAAA,CAAO,CAAA,4BAAA,EAA+B,OAAO,EAAE,CAAC,CAAA;AAAA,IACrE;AAAA,EACF,CAAA,MAAA,IAAW,aAAa,MAAA,EAAQ;AAC9B,IAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAM,IAAA,CAAK;AAAA,gCAAA,EAA8B,MAAM,EAAE,CAAC,CAAA;AAAA,EAChE;AACF;AC3cO,SAAS,iBAAiB,YAAA,EAA8C;AAC7E,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAUP,oBAAAA,CAAG,YAAA,CAAa,YAAA,EAAc,MAAM,CAAA;AACpD,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AACnC,IAAA,MAAM,WAAmC,EAAC;AAG1C,IAAA,IAAI,SAAS,QAAA,EAAU;AACrB,MAAA,MAAA,CAAO,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA,CAAE,OAAA;AAAA,QAChC,CAAC,CAAC,OAAA,EAAS,OAAO,CAAA,KAAqB;AACrC,UAAA,IAAI,CAAC,OAAA,IAAW,OAAA,KAAY,EAAA,EAAI;AAGhC,UAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,iBAAA,EAAmB,EAAE,CAAA;AAErD,UAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,YAAA,QAAA,CAAS,OAAO,IAAI,OAAA,CAAQ,OAAA;AAAA,UAC9B;AAAA,QACF;AAAA,OACF;AAAA,IACF;AAGA,IAAA,IAAI,SAAS,YAAA,IAAgB,MAAA,CAAO,KAAK,QAAQ,CAAA,CAAE,WAAW,CAAA,EAAG;AAC/D,MAAA,IAAS,eAAA,GAAT,SAAyB,IAAA,EAAW,MAAA,GAAS,EAAA,EAAU;AACrD,QAAA,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,IAAA,EAAM,IAAI,CAAA,KAAqB;AAC5D,UAAA,MAAM,WAAW,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,GAAK,IAAA;AAChD,UAAA,IAAI,KAAK,OAAA,EAAS;AAChB,YAAA,QAAA,CAAS,QAAQ,IAAI,IAAA,CAAK,OAAA;AAAA,UAC5B;AACA,UAAA,IAAI,KAAK,YAAA,EAAc;AACrB,YAAA,eAAA,CAAgB,IAAA,CAAK,cAAc,QAAQ,CAAA;AAAA,UAC7C;AAAA,QACF,CAAC,CAAA;AAAA,MACH,CAAA;AACA,MAAA,eAAA,CAAgB,SAAS,YAAY,CAAA;AAAA,IACvC;AAEA,IAAA,OAAO,QAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,4CAAA,EAA+C,OAAO,CAAA,CAAE,CAAA;AACrE,IAAA,OAAO,EAAC;AAAA,EACV;AACF;AAOO,SAAS,cAAc,YAAA,EAA8C;AAC1E,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAUA,oBAAAA,CAAG,YAAA,CAAa,YAAA,EAAc,MAAM,CAAA;AACpD,IAAA,MAAM,MAAA,GAASW,yBAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AAErC,IAAA,IAAI,MAAA,CAAO,SAAS,SAAA,EAAW;AAC7B,MAAA,OAAA,CAAQ,KAAK,oCAAoC,CAAA;AACjD,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,WAAmC,EAAC;AAE1C,IAAA,MAAA,CAAO,OAAA,CAAQ,OAAO,MAAM,CAAA,CAAE,QAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAqB;AAGrE,MAAA,IAAI,OAAA,GAAU,GAAA;AAGd,MAAA,IAAI,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAG;AACvB,QAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,mBAAmB,CAAA;AAC3C,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,OAAA,GAAU,MAAM,CAAC,CAAA;AAAA,QACnB;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,WAAW,CAAA;AACnC,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,OAAA,GAAU,MAAM,CAAC,CAAA;AAAA,QACnB;AAAA,MACF;AAEA,MAAA,IAAI,MAAM,OAAA,KAAY,CAAC,SAAS,OAAO,CAAA,IAAK,MAAM,OAAA,CAAA,EAAU;AAC1D,QAAA,QAAA,CAAS,OAAO,IAAI,KAAA,CAAM,OAAA;AAAA,MAC5B;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO,QAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,oCAAA,EAAuC,OAAO,CAAA,CAAE,CAAA;AAC7D,IAAA,OAAO,EAAC;AAAA,EACV;AACF;AAOO,SAAS,cAAc,YAAA,EAA8C;AAC1E,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAUX,oBAAAA,CAAG,YAAA,CAAa,YAAA,EAAc,MAAM,CAAA;AACpD,IAAA,MAAM,QAAA,GAAWY,qBAAA,CAAK,IAAA,CAAK,OAAO,CAAA;AAClC,IAAA,MAAM,WAAmC,EAAC;AAG1C,IAAA,IAAI,SAAS,SAAA,EAAW;AACtB,MAAA,MAAM,YAAA,GAAe,QAAA,CAAS,SAAA,CAAU,GAAG,CAAA;AAC3C,MAAA,IAAI,YAAA,EAAc;AAEhB,QAAA,IAAI,aAAa,YAAA,EAAc;AAC7B,UAAA,MAAA,CAAO,OAAA,CAAQ,YAAA,CAAa,YAAY,CAAA,CAAE,OAAA;AAAA,YACxC,CAAC,CAAC,IAAA,EAAM,IAAI,CAAA,KAAqB;AAC/B,cAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,CAAK,OAAA,EAAS;AAC5C,gBAAA,QAAA,CAAS,IAAI,IAAI,IAAA,CAAK,OAAA;AAAA,cACxB;AAAA,YACF;AAAA,WACF;AAAA,QACF;AAEA,QAAA,IAAI,aAAa,eAAA,EAAiB;AAChC,UAAA,MAAA,CAAO,OAAA,CAAQ,YAAA,CAAa,eAAe,CAAA,CAAE,OAAA;AAAA,YAC3C,CAAC,CAAC,IAAA,EAAM,IAAI,CAAA,KAAqB;AAC/B,cAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,CAAK,OAAA,EAAS;AAC5C,gBAAA,QAAA,CAAS,IAAI,IAAI,IAAA,CAAK,OAAA;AAAA,cACxB;AAAA,YACF;AAAA,WACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,SAAS,QAAA,IAAY,MAAA,CAAO,KAAK,QAAQ,CAAA,CAAE,WAAW,CAAA,EAAG;AAC3D,MAAA,MAAA,CAAO,KAAK,QAAA,CAAS,QAAQ,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAE9C,QAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,oCAAoC,CAAA;AAC5D,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,MAAM,GAAG,OAAA,EAAS,OAAO,CAAA,GAAI,KAAA;AAC7B,UAAA,QAAA,CAAS,OAAO,CAAA,GAAI,OAAA;AAAA,QACtB;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAGA,IAAA,IAAI,SAAS,YAAA,IAAgB,MAAA,CAAO,KAAK,QAAQ,CAAA,CAAE,WAAW,CAAA,EAAG;AAC/D,MAAA,MAAA,CAAO,OAAA,CAAQ,QAAA,CAAS,YAAY,CAAA,CAAE,OAAA;AAAA,QACpC,CAAC,CAAC,IAAA,EAAM,WAAW,CAAA,KAAqB;AAEtC,UAAA,IACE,OAAO,WAAA,KAAgB,QAAA,IACvB,CAAC,WAAA,CAAY,UAAA,CAAW,OAAO,CAAA,EAC/B;AACA,YAAA,QAAA,CAAS,IAAI,CAAA,GAAI,WAAA;AAAA,UACnB,CAAA,MAAA,IAAW,OAAO,WAAA,KAAgB,QAAA,IAAY,YAAY,OAAA,EAAS;AACjE,YAAA,QAAA,CAAS,IAAI,IAAI,WAAA,CAAY,OAAA;AAAA,UAC/B;AAAA,QACF;AAAA,OACF;AAAA,IACF;AAEA,IAAA,OAAO,QAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,yCAAA,EAA4C,OAAO,CAAA,CAAE,CAAA;AAClE,IAAA,OAAO,EAAC;AAAA,EACV;AACF;AAOO,SAAS,qBAAqB,WAAA,EAAqC;AACxE,EAAA,MAAM,SAAA,GAAY;AAAA,IAChB;AAAA,MACE,IAAA,EAAM,mBAAA;AAAA,MACN,MAAA,EAAQ,gBAAA;AAAA,MACR,IAAA,EAAM;AAAA,KACR;AAAA,IACA,EAAE,IAAA,EAAM,WAAA,EAAa,MAAA,EAAQ,aAAA,EAAe,MAAM,MAAA,EAAgB;AAAA,IAClE,EAAE,IAAA,EAAM,gBAAA,EAAkB,MAAA,EAAQ,aAAA,EAAe,MAAM,MAAA;AAAgB,GACzE;AAEA,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,MAAU,SAAA,EAAW;AAC9C,IAAA,MAAM,YAAA,GAAeN,qBAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,IAAI,CAAA;AAChD,IAAA,IAAIN,oBAAAA,CAAG,UAAA,CAAW,YAAY,CAAA,EAAG;AAC/B,MAAA,MAAM,QAAA,GAAW,OAAO,YAAY,CAAA;AACpC,MAAA,OAAO;AAAA,QACL,QAAA;AAAA,QACA,YAAA,EAAc,IAAA;AAAA,QACd,YAAA;AAAA,QACA,KAAA,EAAO;AAAA,OACT;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,UAAU,EAAC;AAAA,IACX,YAAA,EAAc,IAAA;AAAA,IACd,YAAA,EAAc,IAAA;AAAA,IACd,KAAA,EAAO;AAAA,GACT;AACF;ACpKO,SAAS,SAAS,QAAA,EAA0B;AACjD,EAAA,OAAOA,oBAAAA,CAAG,YAAA,CAAa,QAAA,EAAU,MAAM,CAAA;AACzC;AAwHO,SAAS,aAAsB,QAAA,EAAqB;AACzD,EAAA,MAAM,OAAA,GAAU,SAAS,QAAQ,CAAA;AACjC,EAAA,OAAO,IAAA,CAAK,MAAM,OAAO,CAAA;AAC3B;;;ACvBA,eAAsB,yBAAA,CACpB,QAAA,EACA,QAAA,EACA,OAAA,GAA2B,EAAC,EACI;AAChC,EAAA,MAAM;AAAA,IACJ,MAAA,GAAS,MAAA;AAAA,IACT,OAAA,GAAU,sBAAA;AAAA,IACV,KAAA,GAAQ,CAAA;AAAA,IACR,SAAA,GAAY;AAAA,GACd,GAAI,OAAA;AAEJ,EAAA,OAAA,CAAQ,GAAA,CAAIO,uBAAAA,CAAM,IAAA,CAAK,IAAA,CAAK,0CAAmC,CAAC,CAAA;AAChE,EAAA,OAAA,CAAQ,IAAIA,uBAAAA,CAAM,IAAA,CAAK,4BAA4B,QAAA,CAAS,MAAM,EAAE,CAAC,CAAA;AACrE,EAAA,OAAA,CAAQ,IAAIA,uBAAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAY,OAAO,EAAE,CAAC,CAAA;AAC7C,EAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,CAAA,QAAA,EAAW,MAAM;AAAA,CAAI,CAAC,CAAA;AAG7C,EAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAQ,GAAI,MAAM,aAAA,EAAc;AAEtD,EAAA,IAAI;AAEF,IAAA,MAAM,EAAE,WAAA,EAAa,MAAA,EAAQ,WAAA,KAAgB,MAAM,iBAAA;AAAA,MACjD,QAAA;AAAA,MACA,MAAA;AAAA,MACA,EAAE,QAAQ,KAAA;AAAM,KAClB;AAGA,IAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,gDAAyC,CAAC,CAAA;AACjE,IAAA,MAAM,WAAA,GAAc,MAAM,gBAAA,CAAiB,WAAA,EAAa,OAAO,CAAA;AAG/D,IAAA,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,QAAA,EAAU,IAAI,CAAA,KAAM;AACxD,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAKA,uBAAAA,CAAM,IAAA,CAAK,QAAQ,CAAC,CAAA,EAAA,EAAK,IAAA,CAAK,KAAK,CAAA,MAAA,CAAQ,CAAA;AAAA,IAC9D,CAAC,CAAA;AAGD,IAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,kDAA2C,CAAC,CAAA;AACnE,IAAA,MAAM,YAAuC,EAAC;AAC9C,IAAA,MAAM,eAA+C,EAAC;AAEtD,IAAA,KAAA,MAAW,QAAQ,WAAA,EAAa;AAC9B,MAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AAErB,MAAA,MAAM,KAAA,GAAQ,MAAM,YAAA,CAAa,IAAA,CAAK,SAAS,CAAA;AAC/C,MAAA,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA,GAAI,KAAA;AAG5B,MAAA,MAAM,YAAA,GAAe,oBAAA,CAAqB,IAAA,CAAK,SAAS,CAAA;AACxD,MAAA,YAAA,CAAa,IAAA,CAAK,SAAS,CAAA,GAAI,YAAA;AAE/B,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,CAAA,EAAA,EAAKA,uBAAAA,CAAM,IAAA,CAAK,IAAA,CAAK,SAAS,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,IAAI,CAAA,CAAA,EAAI,KAAA,CAAM,OAAO,CAAA,EAAA,EAAK,MAAM,UAAU,CAAA,OAAA;AAAA,OACtF;AAEA,MAAA,IAAI,aAAa,KAAA,EAAO;AACtB,QAAA,OAAA,CAAQ,GAAA;AAAA,UACNA,uBAAAA,CAAM,IAAA;AAAA,YACJ,CAAA,cAAA,EAAiB,aAAa,YAAY,CAAA,EAAA,EAAK,OAAO,IAAA,CAAK,YAAA,CAAa,QAAQ,CAAA,CAAE,MAAM,CAAA,UAAA;AAAA;AAC1F,SACF;AAAA,MACF;AAAA,IACF;AAGA,IAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,yCAAkC,CAAC,CAAA;AAC1D,IAAA,MAAM,UAAoD,EAAC;AAC3D,IAAA,MAAM,OAAA,GAAUC,qBAAAA,CAAI,cAAc,CAAA,CAAE,KAAA,EAAM;AAE1C,IAAA,KAAA,MAAW,CAAC,QAAA,EAAU,QAAQ,KAAK,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC9D,MAAA,OAAA,CAAQ,IAAA,GAAO,aAAa,QAAQ,CAAA,GAAA,CAAA;AAEpC,MAAA,MAAM,WAAA,GAAwC;AAAA,QAC5C,OAAO,QAAA,CAAS,KAAA;AAAA,QAChB,KAAA,EAAO,UAAU,QAAQ,CAAA;AAAA,QACzB,QAAA,EAAU,aAAa,QAAQ,CAAA;AAAA,QAC/B,QAAA,EAAU;AAAA,UACR,YAAY,EAAC;AAAA,UACb,SAAS,EAAC;AAAA,UACV,gBAAgB,EAAC;AAAA,UACjB,QAAQ;AAAC;AACX,OACF;AAEA,MAAA,MAAM,aAAA,uBAAoB,GAAA,EAAY;AACtC,MAAA,MAAM,kBAAA,uBAAyB,GAAA,EAG7B;AACF,MAAA,MAAM,WAAA,uBAAkB,GAAA,EAGtB;AAGF,MAAA,KAAA,MAAW,IAAA,IAAQ,SAAS,KAAA,EAAO;AACjC,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,GAAS,QAAA,CAAS,WAAA,CAAY,IAAI,CAAA;AACxC,UAAA,IAAI,MAAA,EAAQ;AAEV,YAAA,MAAA,CAAO,WAAW,OAAA,CAAQ,CAAC,SAAS,aAAA,CAAc,GAAA,CAAI,IAAI,CAAC,CAAA;AAG3D,YAAA,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,CAAC,KAAA,KAAU;AAC3C,cAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,GAAA,CAAI,KAAA,CAAM,SAAS,CAAA;AACvD,cAAA,IAAI,CAAC,QAAA,EAAU;AACb,gBAAA,kBAAA,CAAmB,GAAA,CAAI,MAAM,SAAA,EAAW;AAAA,kBACtC,OAAO,KAAA,CAAM,KAAA;AAAA,kBACb,KAAA,kBAAO,IAAI,GAAA,CAAI,CAAC,IAAI,CAAC;AAAA,iBACtB,CAAA;AAAA,cACH,CAAA,MAAO;AACL,gBAAA,QAAA,CAAS,SAAS,KAAA,CAAM,KAAA;AACxB,gBAAA,QAAA,CAAS,KAAA,CAAM,IAAI,IAAI,CAAA;AAAA,cACzB;AAAA,YACF,CAAC,CAAA;AAGD,YAAA;AAAA,cACE,GAAG,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,OAAA;AAAA,cAC3B,GAAG,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ;AAAA,aAC7B,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACjB,cAAA,MAAM,IAAA,GAAO,GAAA,CAAI,IAAA,IAAQ,GAAA,CAAI,KAAA,IAAS,EAAA;AACtC,cAAA,MAAM,MAAA,GAAS,GAAA,CAAI,MAAA,IAAU,GAAA,CAAI,IAAA;AAEjC,cAAA,MAAM,QAAA,GAAW,WAAA,CAAY,GAAA,CAAI,IAAI,CAAA;AACrC,cAAA,IAAI,CAAC,QAAA,EAAU;AACb,gBAAA,WAAA,CAAY,IAAI,IAAA,EAAM;AAAA,kBACpB,KAAA,EAAO,CAAA;AAAA,kBACP,KAAA,kBAAO,IAAI,GAAA,CAAI,CAAC,IAAI,CAAC,CAAA;AAAA,kBACrB;AAAA,iBACD,CAAA;AAAA,cACH,CAAA,MAAO;AACL,gBAAA,QAAA,CAAS,KAAA,EAAA;AACT,gBAAA,QAAA,CAAS,KAAA,CAAM,IAAI,IAAI,CAAA;AAAA,cACzB;AAAA,YACF,CAAC,CAAA;AAAA,UACH;AAAA,QACF,SAAS,KAAA,EAAO;AACd,UAAA,MAAM,UACJ,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACvD,UAAA,WAAA,CAAY,QAAA,CAAS,OAAO,IAAA,CAAK;AAAA,YAC/B,IAAA;AAAA,YACA,KAAA,EAAO;AAAA,WACR,CAAA;AAAA,QACH;AAAA,MACF;AAGA,MAAA,WAAA,CAAY,QAAA,CAAS,UAAA,GAAa,KAAA,CAAM,IAAA,CAAK,aAAa,CAAA;AAE1D,MAAA,kBAAA,CAAmB,OAAA,CAAQ,CAAC,KAAA,EAAO,GAAA,KAAQ;AACzC,QAAA,WAAA,CAAY,QAAA,CAAS,cAAA,CAAe,GAAG,CAAA,GAAI;AAAA,UACzC,OAAO,KAAA,CAAM,KAAA;AAAA,UACb,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,KAAK;AAAA,SAC/B;AAAA,MACF,CAAC,CAAA;AAED,MAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,KAAA,EAAO,GAAA,KAAQ;AAClC,QAAA,WAAA,CAAY,QAAA,CAAS,OAAA,CAAQ,GAAG,CAAA,GAAI;AAAA,UAClC,OAAO,KAAA,CAAM,KAAA;AAAA,UACb,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAAA,UAC7B,QAAQ,KAAA,CAAM;AAAA,SAChB;AAAA,MACF,CAAC,CAAA;AAED,MAAA,OAAA,CAAQ,QAAQ,CAAA,GAAI,WAAA;AACpB,MAAA,OAAA,CAAQ,OAAA;AAAA,QACND,uBAAAA,CAAM,KAAA;AAAA,UACJ,mBAAc,QAAQ,CAAA,EAAA,EAAK,WAAA,CAAY,QAAA,CAAS,WAAW,MAAM,CAAA,iBAAA;AAAA;AACnE,OACF;AACA,MAAA,OAAA,CAAQ,KAAA,EAAM;AAAA,IAChB;AAEA,IAAA,OAAA,CAAQ,IAAA,EAAK;AAGb,IAAA,MAAM,eAAA,GAAyC;AAAA,MAC7C,YAAA,EAAc,OAAA;AAAA,MACd,QAAA,EAAU;AAAA,QACR,UAAA,EAAA,iBAAY,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QACnC,mBAAmB,WAAA,CAAY,MAAA;AAAA,QAC/B,cAAc,WAAA,CAAY,MAAA;AAAA,QAC1B,OAAA;AAAA,QACA,MAAA;AAAA,QACA,SAAA;AAAA,QACA,SAAA,EAAW;AAAA,OACb;AAAA,MACA;AAAA,KACF;AAGA,IAAA,cAAA,CAAe,OAAA,EAAS,QAAQ,SAAS,CAAA;AAEzC,IAAA,OAAO,eAAA;AAAA,EACT,SAAS,KAAA,EAAO;AAEd,IAAA,cAAA,CAAe,OAAA,EAAS,QAAQ,KAAK,CAAA;AACrC,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAOO,SAAS,2BAA2B,UAAA,EAA8B;AACvE,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,aAAiC,UAAU,CAAA;AAC1D,IAAA,OAAO,MAAA,CAAO,gBAAgB,EAAC;AAAA,EACjC,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4BAAA,EAA+B,OAAO,CAAA,CAAE,CAAA;AAAA,EAC1D;AACF;AAuCO,SAAS,0BAAA,CACd,iBACA,WAAA,EACsB;AAEtB,EAAA,MAAM,QAAA,GAAW,uBAAuB,eAAe,CAAA;AAGvD,EAAA,MAAM,6BAAoE,EAAC;AAE3E,EAAA,MAAA,CAAO,OAAA,CAAQ,eAAA,CAAgB,YAAY,CAAA,CAAE,OAAA;AAAA,IAC3C,CAAC,CAAC,QAAA,EAAU,QAAQ,CAAA,KAAM;AA5a9B,MAAA,IAAA,EAAA;AA6aM,MAAA,MAAM,YAAA,GAAe,QAAA,CAAS,QAAA,IAAY,EAAC;AAC3C,MAAA,MAAM,OAAA,GAAA,CAAU,EAAA,GAAA,YAAA,CAAa,QAAA,KAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAwB,WAAA,CAAA;AAExC,MAAA,MAAA,CAAO,OAAA,CAAQ,QAAA,CAAS,QAAA,CAAS,cAAc,CAAA,CAAE,OAAA;AAAA,QAC/C,CAAC,CAAC,SAAA,EAAW,KAAK,CAAA,KAAM;AACtB,UAAA,MAAM,GAAA,GAAM,OAAA,GACR,CAAA,EAAG,SAAS,CAAA,MAAA,EAAS,WAAW,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,GAC3C,CAAA,EAAG,SAAS,CAAA,MAAA,EAAS,WAAW,CAAA,CAAA;AAEpC,UAAA,IAAI,CAAC,0BAAA,CAA2B,GAAG,CAAA,EAAG;AACpC,YAAA,0BAAA,CAA2B,GAAG,CAAA,GAAI;AAAA,cAChC,SAAA;AAAA,cACA,OAAA,EAAS,WAAA;AAAA,cACT,SAAS,OAAA,IAAW,SAAA;AAAA,cACpB,KAAA,EAAO,CAAA;AAAA,cACP,OAAO;AAAC,aACV;AAAA,UACF;AAEA,UAAA,0BAAA,CAA2B,GAAG,CAAA,CAAE,KAAA,IAAS,KAAA,CAAM,KAAA,IAAS,CAAA;AACxD,UAAA,0BAAA,CAA2B,GAAG,CAAA,CAAE,KAAA,CAAM,IAAA,CAAK;AAAA,YACzC,IAAA,EAAM,QAAA;AAAA,YACN,KAAA,EAAO,MAAM,KAAA,IAAS;AAAA,WACvB,CAAA;AAAA,QACH;AAAA,OACF;AAAA,IACF;AAAA,GACF;AAEA,EAAA,OAAO;AAAA,IACL,QAAA,EAAU;AAAA,MACR,GAAG,eAAA,CAAgB,QAAA;AAAA,MACnB,OAAA,EAAS,WAAA;AAAA,MACT,YAAA,EAAc,MAAA,CAAO,IAAA,CAAK,eAAA,CAAgB,YAAY;AAAA,KACxD;AAAA,IACA,QAAA,EAAU;AAAA,MACR,GAAG,QAAA;AAAA,MACH;AAAA,KACF;AAAA,IACA,cAAc,eAAA,CAAgB,YAAA;AAAA,IAC9B,aAAa,eAAA,CAAgB;AAAA,GAC/B;AACF;AC/PO,SAAS,kBAAA,CACd,MAAA,EACA,OAAA,GAAgC,EAAC,EAC3B;AACN,EAAA,MAAM,EAAE,QAAA,EAAU,QAAA,EAAU,YAAA,EAAa,GAAI,MAAA;AAE7C,EAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAM,IAAA,CAAK,IAAA,CAAK,OAAO,GAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA;AAClD,EAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,IAAA,CAAK,iDAA0C,CAAC,CAAA;AACvE,EAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAM,IAAA,CAAK,IAAA,CAAK,IAAI,MAAA,CAAO,EAAE,CAAA,GAAI,IAAI,CAAC,CAAA;AAGlD,EAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,oBAAa,CAAC,CAAA;AACrC,EAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,CAAA,WAAA,EAAcA,uBAAAA,CAAM,KAAK,QAAA,CAAS,OAAO,CAAC,CAAA,CAAE,CAAC,CAAA;AACpE,EAAA,OAAA,CAAQ,GAAA;AAAA,IACNA,wBAAM,IAAA,CAAK,CAAA,yBAAA,EAA4B,QAAA,CAAS,YAAA,CAAa,MAAM,CAAA,CAAE;AAAA,GACvE;AACA,EAAA,OAAA,CAAQ,GAAA;AAAA,IACNA,wBAAM,IAAA,CAAK,CAAA,0BAAA,EAA6B,QAAA,CAAS,eAAA,CAAgB,MAAM,CAAA,CAAE;AAAA,GAC3E;AACA,EAAA,OAAA,CAAQ,GAAA;AAAA,IACNA,wBAAM,IAAA,CAAK,CAAA,uBAAA,EAA0B,QAAA,CAAS,YAAA,CAAa,MAAM,CAAA,CAAE;AAAA,GACrE;AAGA,EAAA,MAAM,gBAAgB,MAAA,CAAO,OAAA,CAAQ,SAAS,kBAAkB,CAAA,CAC7D,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,CAAC,IAAI,CAAA,CAAE,CAAC,CAAC,CAAA,CAC1B,KAAA,CAAM,GAAG,EAAE,CAAA;AAEd,EAAA,IAAI,aAAA,CAAc,SAAS,CAAA,EAAG;AAC5B,IAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,gDAAyC,CAAC,CAAA;AACjE,IAAA,aAAA,CAAc,QAAQ,CAAC,CAAC,IAAA,EAAM,KAAK,GAAG,GAAA,KAAQ;AAC5C,MAAA,MAAM,OAAO,GAAA,GAAM,CAAA;AACnB,MAAA,MAAM,KAAA,GACJ,SAAS,CAAA,GAAI,WAAA,GAAO,SAAS,CAAA,GAAI,WAAA,GAAO,IAAA,KAAS,CAAA,GAAI,WAAA,GAAO,IAAA;AAC9D,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,EAAA,EAAKA,uBAAAA,CAAM,KAAA,CAAM,IAAI,CAAC,CAAA,EAAA,EAAKA,uBAAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA,KAAA;AAAA,OAClE;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,QAAA,CAAS,aAAA,IAAiB,QAAA,CAAS,aAAA,CAAc,SAAS,CAAA,EAAG;AAC/D,IAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,qCAA8B,CAAC,CAAA;AACtD,IAAA,QAAA,CAAS,aAAA,CAAc,OAAA,CAAQ,CAAC,OAAA,EAAS,GAAA,KAAQ;AAC/C,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAKA,uBAAAA,CAAM,IAAA,CAAK,MAAM,CAAA,GAAI,GAAG,CAAC,CAAA,CAAA,EAAIA,uBAAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAC,CAAA,CAAE,CAAA;AACxE,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,iBAAA,EAAoB,OAAA,CAAQ,UAAU,CAAA,CAAE,CAAA;AACpD,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,YAAA,EAAe,OAAA,CAAQ,KAAK,CAAA,CAAE,CAAA;AAC1C,MAAA,IAAI,OAAA,CAAQ,aAAA,IAAiB,OAAA,CAAQ,aAAA,CAAc,SAAS,CAAA,EAAG;AAC7D,QAAA,OAAA,CAAQ,IAAI,CAAA,oBAAA,CAAsB,CAAA;AAClC,QAAA,OAAA,CAAQ,cAAc,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,OAAA,CAAQ,CAAC,IAAA,KAAS;AAClD,UAAA,OAAA,CAAQ,IAAI,CAAA,SAAA,EAAY,IAAA,CAAK,SAAS,CAAA,EAAA,EAAK,IAAA,CAAK,IAAI,CAAA,KAAA,CAAO,CAAA;AAAA,QAC7D,CAAC,CAAA;AAAA,MACH;AACA,MAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,IAChB,CAAC,CAAA;AAAA,EACH;AAGA,EAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,mCAA4B,CAAC,CAAA;AACpD,EAAA,MAAA,CAAO,OAAA,CAAQ,SAAS,gBAAgB,CAAA,CAAE,QAAQ,CAAC,CAAC,IAAA,EAAM,UAAU,CAAA,KAAM;AACxE,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,KAAKA,uBAAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,EAAK,WAAW,MAAM,CAAA,kBAAA;AAAA,KAC7C;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAM,IAAA,CAAK,IAAA,CAAK,OAAO,GAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA;AAGlD,EAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,mBAAY,CAAC,CAAA;AACpC,EAAA,OAAA,CAAQ,IAAI,kEAA6D,CAAA;AACzE,EAAA,OAAA,CAAQ,IAAI,4DAAuD,CAAA;AACnE,EAAA,OAAA,CAAQ,IAAI,4DAAuD,CAAA;AACnE,EAAA,OAAA,CAAQ,IAAI,kEAA6D,CAAA;AACzE,EAAA,OAAA,CAAQ,IAAI,0DAAqD,CAAA;AAGjE,EAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,iCAA0B,CAAC,CAAA;AAClD,EAAA,OAAA,CAAQ,GAAA;AAAA,IACNA,wBAAM,IAAA,CAAK,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAAA,CAMX;AAAA,GACF;AAEA,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAChB;;;ACxRA,eAAsB,aAAA,CACpB,OACA,OAAA,EACe;AACf,EAAA,MAAM,OAAA,GAAUC,qBAAAA,CAAI,iCAAiC,CAAA,CAAE,KAAA,EAAM;AAE7D,EAAA,IAAI;AAEF,IAAA,IAAI,QAAA,GAAW,SAAS,EAAC;AAEzB,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,OAAA,CAAQ,IAAA,GAAO,CAAA,0BAAA,EAA6B,OAAA,CAAQ,MAAM,CAAA,GAAA,CAAA;AAC1D,MAAA,IAAI;AACF,QAAA,QAAA,GAAW,0BAAA,CAA2B,QAAQ,MAAM,CAAA;AACpD,QAAA,OAAA,CAAQ,OAAA;AAAA,UACND,uBAAAA,CAAM,KAAA,CAAM,CAAA,OAAA,EAAU,QAAA,CAAS,MAAM,CAAA,yBAAA,CAA2B;AAAA,SAClE;AACA,QAAA,OAAA,CAAQ,KAAA,EAAM;AAAA,MAChB,SAAS,KAAA,EAAY;AACnB,QAAA,OAAA,CAAQ,KAAKA,uBAAAA,CAAM,GAAA,CAAI,+BAA+B,KAAA,CAAM,OAAO,EAAE,CAAC,CAAA;AACtE,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAAA,IACF;AAEA,IAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,MAAA,OAAA,CAAQ,IAAA;AAAA,QACNA,uBAAAA,CAAM,GAAA;AAAA,UACJ;AAAA;AACF,OACF;AACA,MAAA,OAAA,CAAQ,GAAA;AAAA,QACNA,uBAAAA,CAAM,OAAO,uDAAuD;AAAA,OACtE;AACA,MAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,MAAA,CAAO,4CAA4C,CAAC,CAAA;AACtE,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,OAAA,CAAQ,OAAA,CAAQA,uBAAAA,CAAM,KAAA,CAAM,6BAA6B,CAAC,CAAA;AAG1D,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,UAAA,GACrB,IAAI,oBAAA,CAAqB,OAAA,CAAQ,OAAO,CAAA,GACxC,IAAI,2BAAA,CAA4B,OAAA,CAAQ,OAAO,CAAA;AAGnD,IAAA,MAAM,OAAA,GAAU,MAAM,yBAAA,CAA0B,QAAA,EAAU,QAAA,EAAU;AAAA,MAClE,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,KAAA,EAAO,QAAA,CAAS,OAAA,CAAQ,KAAA,IAAS,GAAG,CAAA;AAAA,MACpC,WAAW,OAAA,CAAQ;AAAA,KACpB,CAAA;AAGD,IAAA,MAAM,UAAA,GAAa,0BAAA,CAA2B,OAAA,EAAS,OAAA,CAAQ,OAAO,CAAA;AAGtE,IAAA,UAAA,CAAW,QAAA,GAAW;AAAA,MACpB,GAAG,UAAA,CAAW,QAAA;AAAA,MACd,WAAA,EAAa,QAAA;AAAA,MACb,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,KACpC;AAGA,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,MAAA,IAAU,OAAA,CAAQ,WAAW,MAAA,EAAQ;AAC1D,MAAA,UAAA,CAAW;AAAA,QACT,IAAA,EAAM,UAAA;AAAA,QACN,WAAA,EAAa,QAAA;AAAA,QACb,YAAY,OAAA,CAAQ,MAAA;AAAA,QACpB,QAAQ,OAAA,CAAQ;AAAA,OACjB,CAAA;AAAA,IACH;AAGA,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,SAAA,IAAa,OAAA,CAAQ,WAAW,MAAA,EAAQ;AAC7D,MAAA,kBAAA,CAAmB,YAAY,OAAO,CAAA;AAAA,IACxC;AAAA,EACF,SAAS,KAAA,EAAY;AACnB,IAAA,OAAA,CAAQ,KAAKA,uBAAAA,CAAM,GAAA,CAAI,0BAAA,GAA6B,KAAA,CAAM,OAAO,CAAC,CAAA;AAClE,IAAA,OAAA,CAAQ,MAAM,KAAK,CAAA;AACnB,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACF;;;AC5FA,IAAM,OAAA,GAAU,IAAIM,iBAAA,EAAQ;AAG5B,OAAA,CACG,KAAK,sBAAsB,CAAA,CAC3B,YAAY,yDAAyD,CAAA,CACrE,QAAQ,OAAO,CAAA;AAGlB,OAAA,CACG,OAAA,CAAQ,SAAS,CAAA,CACjB,WAAA;AAAA,EACC;AACF,CAAA,CACC,QAAA;AAAA,EACC,WAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA;AAAA,EACC,sBAAA;AAAA,EACA,+CAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA;AAAA,EACC,qBAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA;AAAA,EACC,qBAAA;AAAA,EACA,uCAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA,CAAO,kBAAA,EAAoB,6BAAA,EAA+B,KAAK,CAAA,CAC/D,MAAA;AAAA,EACC,oBAAA;AAAA,EACA,0CAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA;AAAA,EACC,wBAAA;AAAA,EACA,iDAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA,CAAO,wBAAwB,oCAAA,EAAsC,MAAM,EAC3E,MAAA,CAAO,OAAO,SAAS,OAAA,KAAY;AAClC,EAAA,MAAM,cAAA,CAAe,SAAS,OAAO,CAAA;AACvC,CAAC,CAAA;AAGH,OAAA,CACG,OAAA,CAAQ,SAAS,CAAA,CACjB,WAAA,CAAY,kDAAkD,CAAA,CAC9D,QAAA,CAAS,WAAA,EAAa,mCAAmC,CAAA,CACzD,MAAA,CAAO,4BAAA,EAA8B,0BAAA,EAA4B;AAAA,EAChE,eAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAC,CAAA,CACA,MAAA;AAAA,EACC,qBAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA;AAAA,EACC,qBAAA;AAAA,EACA,uCAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA,CAAO,OAAO,OAAA,EAAS,OAAA,KAAY;AAClC,EAAA,MAAM,cAAA,CAAe,SAAS,OAAO,CAAA;AACvC,CAAC,CAAA;AAGH,OAAA,CACG,OAAA,CAAQ,SAAS,CAAA,CACjB,WAAA,CAAY,6CAA6C,CAAA,CACzD,QAAA,CAAS,WAAA,EAAa,mCAAmC,CAAA,CACzD,MAAA;AAAA,EACC,sBAAA;AAAA,EACA,yBAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA,CAAO,kBAAkB,kCAAA,EAAoC,IAAI,EACjE,MAAA,CAAO,OAAO,SAAS,OAAA,KAAY;AAClC,EAAA,MAAM,cAAA,CAAe,SAAS,OAAO,CAAA;AACvC,CAAC,CAAA;AAGH,OAAA,CACG,OAAA,CAAQ,UAAU,CAAA,CAClB,WAAA,CAAY,kCAAkC,CAAA,CAC9C,QAAA,CAAS,WAAA,EAAa,mCAAmC,CAAA,CACzD,MAAA;AAAA,EACC,sBAAA;AAAA,EACA,yBAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA,CAAO,eAAe,yCAAA,EAA2C,WAAW,EAC5E,MAAA,CAAO,OAAO,SAAS,OAAA,KAAY;AAClC,EAAA,MAAM,eAAA,CAAgB,SAAS,OAAO,CAAA;AACxC,CAAC,CAAA;AAGH,OAAA,CACG,OAAA,CAAQ,OAAO,CAAA,CACf,WAAA,CAAY,gDAAgD,CAAA,CAC5D,QAAA,CAAS,WAAA,EAAa,mCAAmC,CAAA,CACzD,MAAA;AAAA,EACC,sBAAA;AAAA,EACA,yBAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA,CAAO,WAAW,mBAAA,EAAqB,KAAK,EAC5C,MAAA,CAAO,OAAO,SAAS,OAAA,KAAY;AAClC,EAAA,MAAM,YAAA,CAAa,SAAS,OAAO,CAAA;AACrC,CAAC,CAAA;AAGH,OAAA,CACG,OAAA,CAAQ,OAAO,CAAA,CACf,WAAA,CAAY,6CAA6C,CAAA,CACzD,QAAA,CAAS,WAAA,EAAa,mCAAmC,CAAA,CACzD,MAAA;AAAA,EACC,sBAAA;AAAA,EACA,yBAAA;AAAA,EACA;AACF,CAAA,CACC,OAAO,iBAAA,EAAmB,sCAAA,EAAwC,MAAM,CAAA,CACxE,MAAA,CAAO,sBAAsB,6BAAA,EAA+B,IAAI,CAAA,CAChE,MAAA,CAAO,WAAW,qBAAA,EAAuB,KAAK,EAC9C,MAAA,CAAO,OAAO,SAAS,OAAA,KAAY;AAClC,EAAA,MAAM,YAAA,CAAa,SAAS,OAAO,CAAA;AACrC,CAAC,CAAA;AAGH,OAAA,CACG,OAAA,CAAQ,QAAQ,CAAA,CAChB,WAAA,CAAY,6BAA6B,CAAA,CACzC,QAAA;AAAA,EACC,YAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA;AAAA,EACC,sBAAA;AAAA,EACA,yBAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA,CAAO,qBAAA,EAAuB,mBAAA,EAAqB,MAAM,CAAA,CACzD,MAAA;AAAA,EACC,sBAAA;AAAA,EACA,yBAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA;AAAA,EACC,qBAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA;AAAA,EACC,qBAAA;AAAA,EACA,uCAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA,CAAO,gBAAgB,yCAAA,EAA2C,KAAK,EACvE,MAAA,CAAO,kBAAA,EAAoB,aAAA,EAAe,GAAG,CAAA,CAC7C,MAAA,CAAO,oBAAoB,6BAAA,EAA+B,KAAK,EAC/D,MAAA,CAAO,iBAAA,EAAmB,0CAA0C,CAAA,CACpE,MAAA,CAAO,OAAO,KAAA,EAAO,OAAA,KAAY;AAChC,EAAA,MAAM,aAAA,CAAc,OAAO,OAAO,CAAA;AACpC,CAAC,CAAA;AAMH,eAAe,cAAA,CAAe,SAAS,OAAA,EAAS;AAC9C,EAAA,MAAM,OAAA,GAAUL,qBAAAA,CAAI,uBAAuB,CAAA,CAAE,KAAA,EAAM;AAEnD,EAAA,IAAI;AACF,IAAA,MAAM,QAAQ,MAAMM,UAAAA,CAAU,OAAA,EAAS,IAAI,GAAI,CAAA;AAE/C,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,OAAA,CAAQ,IAAA,CAAKP,uBAAAA,CAAM,GAAA,CAAI,gBAAgB,CAAC,CAAA;AACxC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,IAAI,2BAAA,CAA4B,OAAA,CAAQ,OAAO,CAAA;AAChE,IAAA,MAAM,iBAAiB,EAAC;AACxB,IAAA,IAAI,UAAA,GAAa,CAAA;AAEjB,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,QAAA,CAAS,WAAA,CAAY,IAAI,CAAA;AACxC,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,UAAA,EAAA;AACA,UAAA,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,CAAC,KAAA,KAAU;AAC3C,YAAA,IAAI,CAAC,cAAA,CAAe,KAAA,CAAM,SAAS,CAAA,EAAG;AACpC,cAAA,cAAA,CAAe,KAAA,CAAM,SAAS,CAAA,GAAI,EAAE,OAAO,CAAA,EAAG,KAAA,kBAAO,IAAI,GAAA,EAAI,EAAE;AAAA,YACjE;AACA,YAAA,cAAA,CAAe,KAAA,CAAM,SAAS,CAAA,CAAE,KAAA,IAAS,KAAA,CAAM,KAAA;AAC/C,YAAA,cAAA,CAAe,KAAA,CAAM,SAAS,CAAA,CAAE,KAAA,CAAM,IAAI,IAAI,CAAA;AAAA,UAChD,CAAC,CAAA;AAAA,QACH;AAAA,MACF,SAAS,KAAA,EAAO;AAAA,MAEhB;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,OAAA,CAAQA,uBAAAA,CAAM,KAAA,CAAM,mBAAmB,CAAC,CAAA;AAEhD,IAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,uCAAgC,CAAC,CAAA;AACxD,IAAA,OAAA,CAAQ,IAAIA,uBAAAA,CAAM,IAAA,CAAK,YAAY,OAAA,CAAQ,OAAO,EAAE,CAAC,CAAA;AACrD,IAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,CAAA,gBAAA,EAAmB,UAAU;AAAA,CAAI,CAAC,CAAA;AAEzD,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,OAAA,CAAQ,GAAG,CAAA;AACjC,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,OAAA,CAAQ,cAAc,CAAA,CACzC,IAAI,CAAC,CAAC,IAAA,EAAM,IAAI,CAAA,MAAO;AAAA,MACtB,IAAA;AAAA,MACA,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,KAAA,EAAO,KAAK,KAAA,CAAM;AAAA,KACpB,CAAE,CAAA,CACD,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAK,CAAA,CAChC,KAAA,CAAM,GAAG,IAAI,CAAA;AAEhB,IAAA,OAAA,CAAQ,IAAIA,uBAAAA,CAAM,IAAA,CAAK,CAAA,IAAA,EAAO,IAAI,cAAc,CAAC,CAAA;AACjD,IAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,IAAA,EAAM,KAAA,KAAU;AAC9B,MAAA,MAAM,OAAO,KAAA,GAAQ,CAAA;AACrB,MAAA,MAAM,KAAA,GACJ,SAAS,CAAA,GAAI,WAAA,GAAO,SAAS,CAAA,GAAI,WAAA,GAAO,IAAA,KAAS,CAAA,GAAI,WAAA,GAAO,IAAA;AAC9D,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,IAAI,KAAKA,uBAAAA,CAAM,IAAA,CAAK,KAAK,IAAI,CAAC,KAAKA,uBAAAA,CAAM,MAAA,CAAO,KAAK,KAAK,CAAC,YAAYA,uBAAAA,CAAM,KAAA,CAAM,IAAA,CAAK,KAAK,CAAC,CAAA,MAAA;AAAA,OAC5G;AAAA,IACF,CAAC,CAAA;AAAA,EACH,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAKA,uBAAAA,CAAM,GAAA,CAAI,kBAAA,GAAqB,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,EAC5D;AACF;AAGA,eAAe,eAAA,CAAgB,SAAS,OAAA,EAAS;AAC/C,EAAA,MAAM,OAAA,GAAUC,qBAAAA,CAAI,uBAAuB,CAAA,CAAE,KAAA,EAAM;AAEnD,EAAA,IAAI;AACF,IAAA,MAAM,QAAQ,MAAMM,UAAAA,CAAU,OAAA,EAAS,IAAI,GAAI,CAAA;AAE/C,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,OAAA,CAAQ,IAAA,CAAKP,uBAAAA,CAAM,GAAA,CAAI,gBAAgB,CAAC,CAAA;AACxC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,IAAI,oBAAA,CAAqB,OAAA,CAAQ,OAAO,CAAA;AACzD,IAAA,MAAM,eAAe,EAAC;AAEtB,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,QAAA,CAAS,WAAA,CAAY,IAAI,CAAA;AACxC,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,MAAM,QAAA,GAAW,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA;AAE9C,UAAA,QAAA,CAAS,aAAA,CAAc,OAAA,CAAQ,CAAC,IAAA,EAAM,WAAA,KAAgB;AACpD,YAAA,IAAI,CAAC,YAAA,CAAa,WAAW,CAAA,EAAG;AAC9B,cAAA,YAAA,CAAa,WAAW,CAAA,GAAI;AAAA,gBAC1B,KAAA,EAAO,CAAA;AAAA,gBACP,YAAY,IAAA,CAAK,UAAA;AAAA,gBACjB,KAAA,sBAAW,GAAA;AAAI,eACjB;AAAA,YACF;AACA,YAAA,YAAA,CAAa,WAAW,CAAA,CAAE,KAAA,IAAS,IAAA,CAAK,KAAA;AACxC,YAAA,YAAA,CAAa,WAAW,CAAA,CAAE,KAAA,CAAM,GAAA,CAAI,IAAI,CAAA;AAAA,UAC1C,CAAC,CAAA;AAAA,QACH;AAAA,MACF,SAAS,KAAA,EAAO;AAAA,MAEhB;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,OAAA,CAAQA,uBAAAA,CAAM,KAAA,CAAM,2BAA2B,CAAC,CAAA;AAExD,IAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,uCAAgC,CAAC,CAAA;AAExD,IAAA,IAAI,MAAA,GAAS,MAAA,CAAO,OAAA,CAAQ,YAAY,CAAA;AAExC,IAAA,IAAI,OAAA,CAAQ,SAAS,YAAA,EAAc;AACjC,MAAA,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,CAAE,UAAA,GAAa,CAAA,CAAE,CAAC,CAAA,CAAE,UAAU,CAAA;AAAA,IAClE,CAAA,MAAA,IAAW,OAAA,CAAQ,IAAA,KAAS,WAAA,EAAa;AACvC,MAAA,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,CAAC,CAAA,CAAE,KAAK,CAAA;AAAA,IACxD,CAAA,MAAO;AACL,MAAA,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,CAAE,aAAA,CAAc,CAAA,CAAE,CAAC,CAAC,CAAC,CAAA;AAAA,IACzD;AAEA,IAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,KAAM;AAChC,MAAA,MAAM,IAAA,GAAO,iBAAA,CAAkB,KAAA,CAAM,UAAU,CAAA;AAC/C,MAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,IAAI,CAAA,CAAA,EAAIA,wBAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACzC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,eAAA,EAAkB,KAAA,CAAM,UAAU,CAAA,GAAA,CAAK,CAAA;AACnD,MAAA,OAAA,CAAQ,IAAI,CAAA,cAAA,EAAiBA,uBAAAA,CAAM,OAAO,KAAA,CAAM,KAAK,CAAC,CAAA,CAAE,CAAA;AACxD,MAAA,OAAA,CAAQ,GAAA,CAAI,aAAaA,uBAAAA,CAAM,KAAA,CAAM,MAAM,KAAA,CAAM,IAAI,CAAC,CAAA,CAAE,CAAA;AACxD,MAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,IAChB,CAAC,CAAA;AAAA,EACH,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAKA,uBAAAA,CAAM,GAAA,CAAI,2BAAA,GAA8B,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,EACrE;AACF;AAGA,eAAe,YAAA,CAAa,SAAS,OAAA,EAAS;AAC5C,EAAA,MAAM,OAAA,GAAUC,qBAAAA,CAAI,0BAA0B,CAAA,CAAE,KAAA,EAAM;AAEtD,EAAA,IAAI;AACF,IAAA,MAAM,QAAQ,MAAMM,UAAAA,CAAU,OAAA,EAAS,IAAI,GAAI,CAAA;AAE/C,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,OAAA,CAAQ,IAAA,CAAKP,uBAAAA,CAAM,GAAA,CAAI,gBAAgB,CAAC,CAAA;AACxC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,IAAI,oBAAA,CAAqB,OAAA,CAAQ,OAAO,CAAA;AACzD,IAAA,MAAM,KAAA,GAAQ;AAAA,MACZ,YAAY,KAAA,CAAM,MAAA;AAAA,MAClB,aAAA,EAAe,CAAA;AAAA,MACf,eAAA,sBAAqB,GAAA,EAAI;AAAA,MACzB,aAAA,EAAe,CAAA;AAAA,MACf,sBAAA,EAAwB;AAAA,QACtB,MAAA,EAAQ,CAAA;AAAA,QACR,QAAA,EAAU,CAAA;AAAA,QACV,OAAA,EAAS,CAAA;AAAA,QACT,cAAA,EAAgB,CAAA;AAAA,QAChB,mBAAA,EAAqB;AAAA,OACvB;AAAA,MACA,aAAA,EAAe,CAAA;AAAA,MACf,eAAe,EAAC;AAAA,MAChB,aAAa;AAAC,KAChB;AAEA,IAAA,IAAI,oBAAA,GAAuB,CAAA;AAE3B,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,QAAA,CAAS,WAAA,CAAY,IAAI,CAAA;AACxC,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,KAAA,CAAM,aAAA,EAAA;AACN,UAAA,MAAA,CAAO,UAAA,CAAW,QAAQ,CAAC,IAAA,KAAS,MAAM,eAAA,CAAgB,GAAA,CAAI,IAAI,CAAC,CAAA;AACnE,UAAA,KAAA,CAAM,aAAA,IAAiB,OAAO,OAAA,CAAQ,kBAAA;AAEtC,UAAA,MAAM,QAAA,GAAW,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA;AAC9C,UAAA,MAAM,aAAa,QAAA,CAAS,uBAAA;AAAA,YAC1B,QAAA,CAAS;AAAA,WACX;AAEA,UAAA,KAAA,CAAM,sBAAA,CAAuB,WAAW,KAAK,CAAA,EAAA;AAC7C,UAAA,oBAAA,IAAwB,UAAA,CAAW,KAAA;AAGnC,UAAA,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,CAAC,KAAA,KAAU;AAC3C,YAAA,KAAA,CAAM,aAAA,CAAc,KAAA,CAAM,SAAS,CAAA,GAAA,CAChC,KAAA,CAAM,cAAc,KAAA,CAAM,SAAS,CAAA,IAAK,CAAA,IAAK,KAAA,CAAM,KAAA;AAAA,UACxD,CAAC,CAAA;AAGD,UAAA,QAAA,CAAS,aAAA,CAAc,OAAA,CAAQ,CAAC,IAAA,EAAM,WAAA,KAAgB;AACpD,YAAA,KAAA,CAAM,WAAA,CAAY,WAAW,CAAA,GAAA,CAC1B,KAAA,CAAM,YAAY,WAAW,CAAA,IAAK,KAAK,IAAA,CAAK,KAAA;AAAA,UACjD,CAAC,CAAA;AAAA,QACH;AAAA,MACF,SAAS,KAAA,EAAO;AAAA,MAEhB;AAAA,IACF;AAEA,IAAA,KAAA,CAAM,gBACJ,KAAA,CAAM,aAAA,GAAgB,CAAA,GAAI,oBAAA,GAAuB,MAAM,aAAA,GAAgB,CAAA;AACzE,IAAA,KAAA,CAAM,eAAA,GAAkB,MAAM,eAAA,CAAgB,IAAA;AAE9C,IAAA,OAAA,CAAQ,OAAA,CAAQA,uBAAAA,CAAM,KAAA,CAAM,sBAAsB,CAAC,CAAA;AAGnD,IAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,mCAA4B,CAAC,CAAA;AACpD,IAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,WAAW,CAAC,CAAA;AACnC,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,eAAA,EAAkB,KAAA,CAAM,UAAU,CAAA,CAAE,CAAA;AAChD,IAAA,OAAA,CAAQ,IAAI,CAAA,kBAAA,EAAqBA,uBAAAA,CAAM,MAAM,KAAA,CAAM,aAAa,CAAC,CAAA,CAAE,CAAA;AACnE,IAAA,OAAA,CAAQ,IAAI,CAAA,qBAAA,EAAwBA,uBAAAA,CAAM,OAAO,KAAA,CAAM,eAAe,CAAC,CAAA,CAAE,CAAA;AACzE,IAAA,OAAA,CAAQ,IAAI,CAAA,kBAAA,EAAqBA,uBAAAA,CAAM,OAAO,KAAA,CAAM,aAAa,CAAC,CAAA,CAAE,CAAA;AACpE,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,CAAA,sBAAA,EAAyBA,wBAAM,MAAA,CAAO,KAAA,CAAM,cAAc,OAAA,CAAQ,CAAC,CAAC,CAAC,CAAA;AAAA,KACvE;AAEA,IAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,4BAA4B,CAAC,CAAA;AACpD,IAAA,MAAA,CAAO,OAAA,CAAQ,MAAM,sBAAsB,CAAA,CAAE,QAAQ,CAAC,CAAC,KAAA,EAAO,KAAK,CAAA,KAAM;AACvE,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,MAAM,cAAe,KAAA,GAAQ,KAAA,CAAM,aAAA,GAAiB,GAAA,EAAK,QAAQ,CAAC,CAAA;AAClE,QAAA,MAAM,GAAA,GAAM,QAAQ,KAAA,GAChB,SAAA,CAAU,OAAO,KAAA,CAAM,aAAA,EAAe,EAAE,CAAA,GACxC,EAAA;AACJ,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,CAAA,EAAA,EAAK,KAAA,CAAM,MAAA,CAAO,EAAE,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,QAAA,EAAS,CAAE,SAAS,CAAC,CAAC,CAAA,EAAA,EAAK,UAAU,MAAM,GAAG,CAAA;AAAA,SAC/E;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,qBAAqB,CAAC,CAAA;AAC7C,IAAA,MAAA,CAAO,OAAA,CAAQ,KAAA,CAAM,aAAa,CAAA,CAC/B,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAC,CAAA,CAC1B,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CACV,OAAA,CAAQ,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,EAAG,KAAA,KAAU;AACjC,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,CAAA,EAAA,EAAK,KAAA,GAAQ,CAAC,CAAA,EAAA,EAAK,IAAA,CAAK,MAAA,CAAO,EAAE,CAAC,CAAA,CAAA,EAAIA,uBAAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA,KAAA;AAAA,OAC3D;AAAA,IACF,CAAC,CAAA;AAEH,IAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,mBAAmB,CAAC,CAAA;AAC3C,IAAA,MAAA,CAAO,OAAA,CAAQ,KAAA,CAAM,WAAW,CAAA,CAC7B,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAC,CAAA,CAC1B,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CACV,OAAA,CAAQ,CAAC,CAACH,QAAAA,EAAS,KAAK,CAAA,EAAG,KAAA,KAAU;AACpC,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,CAAA,EAAA,EAAK,KAAA,GAAQ,CAAC,CAAA,EAAA,EAAKA,QAAAA,CAAQ,MAAA,CAAO,EAAE,CAAC,CAAA,CAAA,EAAIG,uBAAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA,UAAA;AAAA,OAC9D;AAAA,IACF,CAAC,CAAA;AAAA,EACL,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAKA,uBAAAA,CAAM,GAAA,CAAI,2BAAA,GAA8B,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,EACrE;AACF;AAGA,eAAe,YAAA,CAAa,SAAS,OAAA,EAAS;AAC5C,EAAA,MAAM,OAAA,GAAUC,qBAAAA,CAAI,qBAAqB,CAAA,CAAE,KAAA,EAAM;AAEjD,EAAA,IAAI;AACF,IAAA,MAAM,QAAQ,MAAMM,UAAAA,CAAU,OAAA,EAAS,IAAI,GAAI,CAAA;AAE/C,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,OAAA,CAAQ,IAAA,CAAKP,uBAAAA,CAAM,GAAA,CAAI,gBAAgB,CAAC,CAAA;AACxC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,IAAI,2BAAA,CAA4B,OAAA,CAAQ,OAAO,CAAA;AAChE,IAAA,MAAM,gBAAgB,EAAC;AACvB,IAAA,MAAM,aAAa,EAAC;AAEpB,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,QAAA,CAAS,WAAA,CAAY,IAAI,CAAA;AACxC,QAAA,IAAI,MAAA,EAAQ;AAEV,UAAA,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,CAAC,KAAA,KAAU;AAC3C,YAAA,IAAI,CAAC,aAAA,CAAc,KAAA,CAAM,SAAS,CAAA,EAAG;AACnC,cAAA,aAAA,CAAc,KAAA,CAAM,SAAS,CAAA,GAAI;AAAA,gBAC/B,IAAA,EAAM,CAAA;AAAA,gBACN,KAAA,sBAAW,GAAA,EAAI;AAAA,gBACf,KAAA,sBAAW,GAAA,EAAI;AAAA,gBACf,WAAA,EAAa,CAAA;AAAA,gBACb,cAAc;AAAC,eACjB;AAAA,YACF;AACA,YAAA,aAAA,CAAc,KAAA,CAAM,SAAS,CAAA,CAAE,IAAA,IAAQ,KAAA,CAAM,KAAA;AAC7C,YAAA,aAAA,CAAc,KAAA,CAAM,SAAS,CAAA,CAAE,KAAA,CAAM,IAAI,IAAI,CAAA;AAG7C,YAAA,KAAA,CAAM,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,KAAM;AAC1B,cAAA,IAAI,EAAE,aAAA,EAAe;AACnB,gBAAA,CAAA,CAAE,cAAc,UAAA,CAAW,OAAA;AAAA,kBAAQ,CAAC,SAClC,aAAA,CAAc,KAAA,CAAM,SAAS,CAAA,CAAE,KAAA,CAAM,IAAI,IAAI;AAAA,iBAC/C;AACA,gBAAA,IAAI,CAAA,CAAE,cAAc,SAAA,EAAW;AAC7B,kBAAA,aAAA,CAAc,KAAA,CAAM,SAAS,CAAA,CAAE,WAAA,EAAA;AAAA,gBACjC;AAAA,cACF;AAAA,YACF,CAAC,CAAA;AAAA,UACH,CAAC,CAAA;AAGD,UAAA;AAAA,YACE,GAAG,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,OAAA;AAAA,YAC3B,GAAG,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ;AAAA,WAC7B,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACjB,YAAA,MAAM,IAAA,GAAO,GAAA,CAAI,IAAA,IAAQ,GAAA,CAAI,KAAA;AAC7B,YAAA,IAAI,CAAC,UAAA,CAAW,IAAI,CAAA,EAAG;AACrB,cAAA,UAAA,CAAW,IAAI,CAAA,GAAI;AAAA,gBACjB,KAAA,sBAAW,GAAA,EAAI;AAAA,gBACf,IAAA,EAAM,GAAA,CAAI,QAAA,GAAW,OAAA,GAAU;AAAA,eACjC;AAAA,YACF;AACA,YAAA,UAAA,CAAW,IAAI,CAAA,CAAE,KAAA,CAAM,GAAA,CAAI,IAAI,CAAA;AAAA,UACjC,CAAC,CAAA;AAAA,QACH;AAAA,MACF,SAAS,KAAA,EAAO;AAAA,MAEhB;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,OAAA,CAAQA,uBAAAA,CAAM,KAAA,CAAM,iBAAiB,CAAC,CAAA;AAG9C,IAAA,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAC1C,MAAA,aAAA,CAAc,GAAG,CAAA,CAAE,UAAA,GAAa,aAAA,CAAc,GAAG,EAAE,KAAA,CAAM,IAAA;AACzD,MAAA,aAAA,CAAc,GAAG,CAAA,CAAE,UAAA,GAAa,aAAA,CAAc,GAAG,EAAE,KAAA,CAAM,IAAA;AACzD,MAAA,aAAA,CAAc,GAAG,EAAE,SAAA,GAAY,KAAA,CAAM,KAAK,aAAA,CAAc,GAAG,EAAE,KAAK,CAAA;AAAA,IACpE,CAAC,CAAA;AAED,IAAA,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACvC,MAAA,UAAA,CAAW,GAAG,CAAA,CAAE,UAAA,GAAa,UAAA,CAAW,GAAG,EAAE,KAAA,CAAM,IAAA;AAAA,IACrD,CAAC,CAAA;AAGD,IAAA,MAAM,gBAAA,GAAmB,OAAO,OAAA,CAAQ,aAAa,EAClD,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM;AACd,MAAA,QAAQ,QAAQ,IAAA;AAAM,QACpB,KAAK,MAAA;AACH,UAAA,OAAO,EAAE,CAAC,CAAA,CAAE,aAAA,CAAc,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,QAChC,KAAK,OAAA;AACH,UAAA,OAAO,EAAE,CAAC,CAAA,CAAE,UAAA,GAAa,CAAA,CAAE,CAAC,CAAA,CAAE,UAAA;AAAA,QAChC,KAAK,OAAA;AACH,UAAA,OAAO,EAAE,CAAC,CAAA,CAAE,UAAA,GAAa,CAAA,CAAE,CAAC,CAAA,CAAE,UAAA;AAAA,QAChC,KAAK,MAAA;AAAA,QACL;AACE,UAAA,OAAO,EAAE,CAAC,CAAA,CAAE,IAAA,GAAO,CAAA,CAAE,CAAC,CAAA,CAAE,IAAA;AAAA;AAC5B,IACF,CAAC,CAAA,CACA,KAAA,CAAM,GAAG,QAAA,CAAS,OAAA,CAAQ,GAAG,CAAC,CAAA;AAEjC,IAAA,MAAM,aAAA,GAAgB,OAAO,OAAA,CAAQ,UAAU,EAC5C,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM;AACd,MAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAQ;AAC3B,QAAA,OAAO,EAAE,CAAC,CAAA,CAAE,aAAA,CAAc,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,MAChC;AACA,MAAA,OAAO,EAAE,CAAC,CAAA,CAAE,UAAA,GAAa,CAAA,CAAE,CAAC,CAAA,CAAE,UAAA;AAAA,IAChC,CAAC,CAAA,CACA,KAAA,CAAM,GAAG,QAAA,CAAS,OAAA,CAAQ,GAAG,CAAC,CAAA;AAGjC,IAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,qCAA8B,CAAC,CAAA;AAEtD,IAAA,MAAM,cAAA,GAAiB,IAAIQ,uBAAAA,CAAM;AAAA,MAC/B,IAAA,EAAM;AAAA,QACJR,uBAAAA,CAAM,KAAK,WAAW,CAAA;AAAA,QACtBA,uBAAAA,CAAM,KAAK,MAAM,CAAA;AAAA,QACjBA,uBAAAA,CAAM,KAAK,OAAO,CAAA;AAAA,QAClB,GAAI,OAAA,CAAQ,KAAA,GAAQ,CAACA,uBAAAA,CAAM,IAAA,CAAK,OAAO,CAAA,EAAGA,uBAAAA,CAAM,IAAA,CAAK,QAAQ,CAAC,IAAI;AAAC,OACrE;AAAA,MACA,SAAA,EAAW,CAAC,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,GAAI,OAAA,CAAQ,KAAA,GAAQ,CAAC,EAAA,EAAI,EAAE,CAAA,GAAI,EAAG,CAAA;AAAA,MAC1D,OAAO,EAAE,IAAA,EAAM,EAAC,EAAG,MAAA,EAAQ,EAAC;AAAE,KAC/B,CAAA;AAED,IAAA,gBAAA,CAAiB,OAAA,CAAQ,CAAC,CAAC,SAAA,EAAW,IAAI,CAAA,KAAM;AAC9C,MAAA,MAAM,GAAA,GAAM;AAAA,QACV,SAAA;AAAA,QACAA,uBAAAA,CAAM,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAAA,QACtBA,uBAAAA,CAAM,KAAA,CAAM,IAAA,CAAK,UAAU;AAAA,OAC7B;AAEA,MAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,QAAA,MAAM,eACJ,IAAA,CAAK,UAAA,GAAa,CAAA,GACd,IAAA,CAAK,UAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,KAAK,IAAI,CAAA,IACnC,KAAK,UAAA,GAAa,CAAA,GAAI,QAAQ,EAAA,CAAA,GAC/B,GAAA;AACN,QAAA,MAAM,aAAA,GACJ,IAAA,CAAK,WAAA,GAAc,CAAA,GACfA,uBAAAA,CAAM,GAAA,CAAI,CAAA,OAAA,EAAK,IAAA,CAAK,WAAW,CAAA,CAAE,CAAA,GACjCA,uBAAAA,CAAM,KAAK,GAAG,CAAA;AACpB,QAAA,GAAA,CAAI,IAAA,CAAK,cAAc,aAAa,CAAA;AAAA,MACtC;AAEA,MAAA,cAAA,CAAe,KAAK,GAAG,CAAA;AAAA,IACzB,CAAC,CAAA;AAED,IAAA,OAAA,CAAQ,GAAA,CAAI,cAAA,CAAe,QAAA,EAAU,CAAA;AAGrC,IAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,6BAAsB,CAAC,CAAA;AAE9C,IAAA,MAAM,WAAA,GAAc,IAAIQ,uBAAAA,CAAM;AAAA,MAC5B,IAAA,EAAM,CAACR,uBAAAA,CAAM,IAAA,CAAK,QAAQ,CAAA,EAAGA,uBAAAA,CAAM,IAAA,CAAK,MAAM,CAAA,EAAGA,uBAAAA,CAAM,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,MACpE,SAAA,EAAW,CAAC,EAAA,EAAI,EAAA,EAAI,EAAE,CAAA;AAAA,MACtB,OAAO,EAAE,IAAA,EAAM,EAAC,EAAG,MAAA,EAAQ,EAAC;AAAE,KAC/B,CAAA;AAED,IAAA,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAC,IAAA,EAAM,IAAI,CAAA,KAAM;AACtC,MAAA,WAAA,CAAY,IAAA,CAAK;AAAA,QACf,IAAA;AAAA,QACA,IAAA,CAAK,SAAS,OAAA,GAAUA,uBAAAA,CAAM,KAAK,OAAO,CAAA,GAAIA,uBAAAA,CAAM,KAAA,CAAM,SAAS,CAAA;AAAA,QACnEA,uBAAAA,CAAM,MAAA,CAAO,IAAA,CAAK,UAAU;AAAA,OAC7B,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,OAAA,CAAQ,GAAA,CAAI,WAAA,CAAY,QAAA,EAAU,CAAA;AAGlC,IAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,8BAAuB,CAAC,CAAA;AAE/C,MAAA,gBAAA,CAAiB,OAAA,CAAQ,CAAC,CAAC,SAAA,EAAW,IAAI,CAAA,KAAM;AAC9C,QAAA,IAAI,IAAA,CAAK,UAAA,GAAa,CAAA,IAAK,IAAA,CAAK,cAAc,CAAA,EAAG;AAC/C,UAAA,OAAA,CAAQ,IAAIA,uBAAAA,CAAM,IAAA,CAAK,CAAA,EAAG,SAAS,GAAG,CAAC,CAAA;AACvC,UAAA,OAAA,CAAQ,IAAI,CAAA,SAAA,EAAY,IAAA,CAAK,UAAU,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACnD,UAAA,IAAI,IAAA,CAAK,cAAc,CAAA,EAAG;AACxB,YAAA,OAAA,CAAQ,GAAA;AAAA,cACNA,uBAAAA,CAAM,MAAA;AAAA,gBACJ,CAAA,kBAAA,EAAgB,KAAK,WAAW,CAAA,uDAAA;AAAA;AAClC,aACF;AAAA,UACF;AACA,UAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,QAChB;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAGA,IAAA,OAAA,CAAQ,GAAA,CAAIA,uBAAAA,CAAM,IAAA,CAAK,mBAAY,CAAC,CAAA;AACpC,IAAA,OAAA,CAAQ,IAAI,CAAA,oBAAA,EAAuB,MAAA,CAAO,KAAK,aAAa,CAAA,CAAE,MAAM,CAAA,CAAE,CAAA;AACtE,IAAA,OAAA,CAAQ,IAAI,CAAA,iBAAA,EAAoB,MAAA,CAAO,KAAK,UAAU,CAAA,CAAE,MAAM,CAAA,CAAE,CAAA;AAChE,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,kBAAA,EAAqB,KAAA,CAAM,MAAM,CAAA,CAAE,CAAA;AAC/C,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,OAAA,CAAQ,IAAI,CAAA,CAAE,CAAA;AAAA,EACvC,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAKA,uBAAAA,CAAM,GAAA,CAAI,2BAAA,GAA8B,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,EACrE;AACF;AAiGA,eAAeO,UAAAA,CAAU,OAAA,EAAS,cAAA,EAAgB,QAAA,EAAU;AAC1D,EAAA,MAAM,QAAA,GAAW,MAAMT,SAAAA,CAAK,OAAA,EAAS;AAAA,IACnC,QAAQ,CAAC,iBAAA,EAAmB,SAAA,EAAW,UAAA,EAAY,GAAG,cAAc,CAAA;AAAA,IACpE,KAAA,EAAO,IAAA;AAAA,IACP,QAAA,EAAU,KAAA;AAAA;AAAA,IAEV,SAAA,EAAW;AAAA,GACZ,CAAA;AAGD,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,MAAA,CAAO,CAAC,IAAA,KAAS;AAC3C,IAAA,MAAM,GAAA,GAAMC,qBAAAA,CAAK,OAAA,CAAQ,IAAI,EAAE,WAAA,EAAY;AAC3C,IAAA,OAAO,CAAC,MAAA,EAAQ,MAAA,EAAQ,OAAO,KAAK,CAAA,CAAE,SAAS,GAAG,CAAA;AAAA,EACpD,CAAC,CAAA;AAED,EAAA,OAAO,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAA;AACrC;AA+GA,SAAS,kBAAkB,UAAA,EAAY;AACrC,EAAA,IAAI,UAAA,IAAc,CAAA,EAAG,OAAOC,uBAAAA,CAAM,MAAM,WAAI,CAAA;AAC5C,EAAA,IAAI,UAAA,IAAc,CAAA,EAAG,OAAOA,uBAAAA,CAAM,OAAO,WAAI,CAAA;AAC7C,EAAA,IAAI,cAAc,CAAA,EAAG,OAAOA,wBAAM,GAAA,CAAI,SAAS,EAAE,WAAI,CAAA;AACrD,EAAA,OAAOA,uBAAAA,CAAM,IAAI,WAAI,CAAA;AACvB;AAEA,SAAS,SAAA,CAAU,KAAA,EAAO,GAAA,EAAK,KAAA,EAAO;AACpC,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAO,KAAA,GAAQ,MAAO,KAAK,CAAA;AAC/C,EAAA,MAAM,QAAQ,KAAA,GAAQ,MAAA;AACtB,EAAA,OAAOA,uBAAAA,CAAM,KAAA,CAAM,QAAA,CAAI,MAAA,CAAO,MAAM,CAAC,CAAA,GAAIA,uBAAAA,CAAM,IAAA,CAAK,QAAA,CAAI,MAAA,CAAO,KAAK,CAAC,CAAA;AACvE;AAGA,OAAA,CAAQ,KAAA,CAAM,QAAQ,IAAI,CAAA;AAG1B,IAAI,OAAA,CAAQ,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG;AAC3B,EAAA,OAAA,CAAQ,IAAA,EAAK;AACf","file":"cli.js","sourcesContent":["import { parseSync } from '@swc/core';\nimport fs from 'fs';\nimport path from 'path';\n\nclass ReactComponentUsageAnalyzer {\n constructor(libraryName = '@design-system/foundation') {\n this.libraryName = libraryName;\n this.usagePatterns = {\n directImports: new Set(),\n namedImports: new Set(),\n namespaceImports: new Set(),\n defaultImports: new Set(),\n aliasedImports: new Map(),\n variableAssignments: new Map(),\n componentMappings: new Set(),\n lazyImports: new Set(),\n dynamicImports: new Set(),\n conditionalUsage: new Set(),\n arrayMappings: new Set(),\n objectMappings: new Set(),\n hocUsage: new Set(),\n renderProps: new Set(),\n contextUsage: new Set(),\n forwardedRefs: new Set(),\n memoizedComponents: new Set(),\n portalUsage: new Set(),\n jsxUsage: new Map(),\n destructuredUsage: new Set(),\n propsAnalysis: new Map(),\n };\n this.componentNames = new Set();\n this.allIdentifiers = new Set();\n }\n\n analyzeFile(filePath) {\n console.log(`\\nšŸ“ Analyzing: ${filePath}`);\n\n try {\n const code = fs.readFileSync(filePath, 'utf8');\n const ast = parseSync(code, {\n syntax: 'typescript',\n tsx: true,\n decorators: true,\n dynamicImport: true,\n });\n\n this.visitNode(ast);\n return this.generateReport();\n } catch (error) {\n console.error(`āŒ Error parsing ${filePath}:`, error.message);\n return null;\n }\n }\n\n visitNode(node, parent = null) {\n if (!node) return;\n\n switch (node.type) {\n case 'Module':\n node.body.forEach((item) => this.visitNode(item, node));\n break;\n\n case 'ImportDeclaration':\n this.analyzeImport(node);\n break;\n\n case 'CallExpression':\n this.analyzeCallExpression(node, parent);\n break;\n\n case 'VariableDeclaration':\n this.analyzeVariableDeclaration(node);\n break;\n\n case 'JSXElement':\n case 'JSXFragment':\n this.analyzeJSXElement(node, parent);\n break;\n\n case 'JSXOpeningElement':\n this.analyzeJSXOpeningElement(node, parent);\n break;\n\n case 'ArrayExpression':\n this.analyzeArrayExpression(node, parent);\n break;\n\n case 'ObjectExpression':\n this.analyzeObjectExpression(node, parent);\n break;\n\n case 'MemberExpression':\n this.analyzeMemberExpression(node, parent);\n break;\n\n case 'ConditionalExpression':\n this.analyzeConditionalExpression(node, parent);\n break;\n\n case 'FunctionDeclaration':\n case 'FunctionExpression':\n case 'ArrowFunctionExpression':\n this.analyzeFunctionDeclaration(node);\n break;\n\n case 'ClassDeclaration':\n this.analyzeClassDeclaration(node);\n break;\n\n default:\n // Recursively visit child nodes\n this.visitChildren(node);\n break;\n }\n }\n\n visitChildren(node) {\n if (!node || typeof node !== 'object') return;\n\n for (const key in node) {\n const value = node[key];\n if (Array.isArray(value)) {\n value.forEach((child) => this.visitNode(child, node));\n } else if (value && typeof value === 'object' && value.type) {\n this.visitNode(value, node);\n }\n }\n }\n\n analyzeImport(node) {\n const source = node.source.value;\n\n if (!this.isLibraryImport(source)) return;\n\n console.log(`šŸ“¦ Found library import: ${source}`);\n\n node.specifiers.forEach((spec) => {\n switch (spec.type) {\n case 'ImportDefaultSpecifier':\n this.usagePatterns.defaultImports.add({\n name: spec.local.value,\n source: source,\n line: node.span?.start || 0,\n });\n this.componentNames.add(spec.local.value);\n break;\n\n case 'ImportNamespaceSpecifier':\n this.usagePatterns.namespaceImports.add({\n name: spec.local.value,\n source: source,\n line: node.span?.start || 0,\n });\n this.allIdentifiers.add(spec.local.value);\n break;\n\n case 'ImportSpecifier':\n const importedName = spec.imported\n ? spec.imported.value\n : spec.local.value;\n const localName = spec.local.value;\n\n this.usagePatterns.namedImports.add({\n imported: importedName,\n local: localName,\n source: source,\n line: node.span?.start || 0,\n });\n\n if (importedName !== localName) {\n this.usagePatterns.aliasedImports.set(localName, {\n original: importedName,\n source: source,\n line: node.span?.start || 0,\n });\n }\n\n this.componentNames.add(localName);\n break;\n }\n });\n }\n\n analyzeCallExpression(node, parent) {\n // Analyze lazy imports\n if (\n node.callee?.value === 'lazy' ||\n (node.callee?.object?.value === 'React' &&\n node.callee?.property?.value === 'lazy')\n ) {\n this.analyzeLazyImport(node);\n }\n\n // Analyze dynamic imports\n if (node.callee?.type === 'Import') {\n this.analyzeDynamicImport(node);\n }\n\n // Analyze HOC patterns\n if (this.isHOCPattern(node)) {\n this.analyzeHOCUsage(node);\n }\n\n // Analyze React.memo, React.forwardRef\n if (node.callee?.object?.value === 'React') {\n if (node.callee?.property?.value === 'memo') {\n this.analyzeMemoUsage(node);\n } else if (node.callee?.property?.value === 'forwardRef') {\n this.analyzeForwardRefUsage(node);\n }\n }\n\n // Analyze createPortal\n if (\n node.callee?.property?.value === 'createPortal' ||\n node.callee?.value === 'createPortal'\n ) {\n this.analyzePortalUsage(node);\n }\n\n this.visitChildren(node);\n }\n\n analyzeLazyImport(node) {\n const arg = node.arguments?.[0];\n if (\n arg?.type === 'ArrowFunctionExpression' &&\n arg.body?.type === 'CallExpression'\n ) {\n const importCall = arg.body;\n if (importCall.callee?.type === 'Import') {\n const source = importCall.arguments?.[0]?.value;\n if (this.isLibraryImport(source)) {\n this.usagePatterns.lazyImports.add({\n source: source,\n line: node.span?.start || 0,\n });\n console.log(`šŸ”„ Found lazy import: ${source}`);\n }\n }\n }\n }\n\n analyzeDynamicImport(node) {\n const source = node.arguments?.[0]?.value;\n if (this.isLibraryImport(source)) {\n this.usagePatterns.dynamicImports.add({\n source: source,\n line: node.span?.start || 0,\n });\n console.log(`⚔ Found dynamic import: ${source}`);\n }\n }\n\n analyzeVariableDeclaration(node) {\n node.declarations?.forEach((decl) => {\n if (decl.id?.type === 'Identifier') {\n const varName = decl.id.value;\n\n // Check if it's assigning a component\n if (decl.init) {\n const assignment = this.extractAssignmentInfo(decl.init);\n if (assignment && this.isLibraryComponent(assignment)) {\n this.usagePatterns.variableAssignments.set(varName, {\n assignment: assignment,\n line: node.span?.start || 0,\n });\n this.componentNames.add(varName);\n console.log(`šŸ“ Variable assignment: ${varName} = ${assignment}`);\n }\n }\n }\n\n // Handle destructuring assignments\n if (decl.id?.type === 'ObjectPattern') {\n this.analyzeDestructuringPattern(decl.id, decl.init);\n }\n });\n\n this.visitChildren(node);\n }\n\n analyzeDestructuringPattern(pattern, init) {\n pattern.properties?.forEach((prop) => {\n if (\n prop.type === 'AssignmentPatternProperty' &&\n prop.key?.type === 'Identifier'\n ) {\n const propName = prop.key.value;\n\n if (\n init?.type === 'Identifier' &&\n this.allIdentifiers.has(init.value)\n ) {\n this.usagePatterns.destructuredUsage.add({\n property: propName,\n source: init.value,\n line: pattern.span?.start || 0,\n });\n this.componentNames.add(propName);\n console.log(`šŸ”§ Destructuring: ${propName} from ${init.value}`);\n }\n }\n });\n }\n\n analyzeJSXElement(node, parent) {\n if (node.opening) {\n this.analyzeJSXOpeningElement(node.opening, node);\n }\n this.visitChildren(node);\n }\n\n analyzeJSXOpeningElement(node, parent) {\n const elementName = this.getJSXElementName(node.name);\n\n if (\n this.componentNames.has(elementName) ||\n this.isMemberExpressionComponent(node.name)\n ) {\n const propsAnalysis = this.analyzePropsInDetail(node.attributes);\n const usage = {\n component: elementName,\n props: this.extractJSXProps(node.attributes),\n propsAnalysis: propsAnalysis,\n line: node.span?.start || 0,\n context: this.getUsageContext(parent),\n };\n\n if (!this.usagePatterns.jsxUsage.has(elementName)) {\n this.usagePatterns.jsxUsage.set(elementName, []);\n }\n this.usagePatterns.jsxUsage.get(elementName).push(usage);\n\n // Track props analysis for reporting\n if (!this.usagePatterns.propsAnalysis.has(elementName)) {\n this.usagePatterns.propsAnalysis.set(elementName, {\n namedProps: new Set(),\n spreadProps: 0,\n totalUsages: 0,\n complexProps: 0,\n });\n }\n const componentPropsStats =\n this.usagePatterns.propsAnalysis.get(elementName);\n componentPropsStats.totalUsages++;\n propsAnalysis.namedProps.forEach((prop) =>\n componentPropsStats.namedProps.add(prop),\n );\n if (propsAnalysis.hasSpread) componentPropsStats.spreadProps++;\n if (propsAnalysis.hasComplexProps) componentPropsStats.complexProps++;\n\n console.log(`šŸŽØ JSX Usage: <${elementName}>`);\n }\n }\n\n getJSXElementName(nameNode) {\n if (!nameNode) return '';\n\n switch (nameNode.type) {\n case 'Identifier':\n return nameNode.value;\n case 'JSXMemberExpression':\n return `${this.getJSXElementName(nameNode.object)}.${nameNode.property.value}`;\n default:\n return '';\n }\n }\n\n isMemberExpressionComponent(nameNode) {\n if (nameNode?.type === 'JSXMemberExpression') {\n const objectName = this.getJSXElementName(nameNode.object);\n return this.allIdentifiers.has(objectName);\n }\n return false;\n }\n\n extractJSXProps(attributes) {\n if (!attributes) return [];\n\n return attributes\n .map((attr) => {\n if (attr.type === 'JSXAttribute') {\n return {\n name: attr.name?.value || attr.name?.name?.value,\n value: this.extractJSXAttributeValue(attr.value),\n };\n } else if (attr.type === 'SpreadElement') {\n return {\n name: '...',\n value: '[spread]',\n isSpread: true,\n };\n }\n return null;\n })\n .filter(Boolean);\n }\n\n extractJSXAttributeValue(value) {\n if (!value) return true; // boolean attribute\n\n switch (value.type) {\n case 'StringLiteral':\n return value.value;\n case 'JSXExpressionContainer':\n return this.extractExpressionValue(value.expression);\n default:\n return '[complex]';\n }\n }\n\n extractExpressionValue(expr) {\n if (!expr) return '[unknown]';\n\n switch (expr.type) {\n case 'StringLiteral':\n case 'NumericLiteral':\n case 'BooleanLiteral':\n return expr.value;\n case 'Identifier':\n return `{${expr.value}}`;\n case 'ArrowFunctionExpression':\n case 'FunctionExpression':\n return '[function]';\n case 'ObjectExpression':\n return '[object]';\n case 'ArrayExpression':\n return '[array]';\n default:\n return '[expression]';\n }\n }\n\n analyzePropsInDetail(attributes) {\n const analysis = {\n namedProps: new Set(),\n hasSpread: false,\n hasComplexProps: false,\n hasEventHandlers: false,\n propDetails: [],\n };\n\n if (!attributes) return analysis;\n\n attributes.forEach((attr) => {\n if (attr.type === 'JSXAttribute') {\n const propName = attr.name?.value || attr.name?.name?.value;\n if (propName) {\n analysis.namedProps.add(propName);\n\n const propDetail = {\n name: propName,\n type: this.getPropType(attr.value),\n isEventHandler: propName.startsWith('on'),\n isComplex: this.isComplexProp(attr.value),\n };\n\n if (propDetail.isEventHandler) {\n analysis.hasEventHandlers = true;\n }\n if (propDetail.isComplex) {\n analysis.hasComplexProps = true;\n }\n\n analysis.propDetails.push(propDetail);\n }\n } else if (attr.type === 'SpreadElement') {\n analysis.hasSpread = true;\n analysis.propDetails.push({\n name: '...',\n type: 'spread',\n isSpread: true,\n isComplex: true,\n warning: 'Spread props cannot be statically analyzed',\n });\n analysis.hasComplexProps = true;\n }\n });\n\n return analysis;\n }\n\n getPropType(value) {\n if (!value) return 'boolean';\n\n switch (value.type) {\n case 'StringLiteral':\n return 'string';\n case 'JSXExpressionContainer':\n const expr = value.expression;\n if (!expr) return 'unknown';\n switch (expr.type) {\n case 'NumericLiteral':\n return 'number';\n case 'BooleanLiteral':\n return 'boolean';\n case 'StringLiteral':\n return 'string';\n case 'ArrowFunctionExpression':\n case 'FunctionExpression':\n return 'function';\n case 'ObjectExpression':\n return 'object';\n case 'ArrayExpression':\n return 'array';\n case 'Identifier':\n return 'variable';\n default:\n return 'expression';\n }\n default:\n return 'unknown';\n }\n }\n\n isComplexProp(value) {\n if (!value) return false;\n if (value.type === 'JSXExpressionContainer') {\n const expr = value.expression;\n if (!expr) return false;\n return (\n expr.type === 'ObjectExpression' ||\n expr.type === 'ArrayExpression' ||\n expr.type === 'CallExpression' ||\n expr.type === 'ConditionalExpression'\n );\n }\n return false;\n }\n\n analyzeArrayExpression(node, parent) {\n // Check if array contains components\n const hasComponents = node.elements?.some((elem) => {\n if (elem?.type === 'Identifier') {\n return this.componentNames.has(elem.value);\n }\n return false;\n });\n\n if (hasComponents) {\n this.usagePatterns.arrayMappings.add({\n components: node.elements?.map((elem) => elem?.value).filter(Boolean),\n line: node.span?.start || 0,\n });\n console.log(`šŸ“‹ Array with components found`);\n }\n\n this.visitChildren(node);\n }\n\n analyzeObjectExpression(node, parent) {\n // Check if object contains component mappings\n const componentProps = node.properties?.filter((prop) => {\n if (\n prop.type === 'KeyValueProperty' &&\n prop.value?.type === 'Identifier'\n ) {\n return this.componentNames.has(prop.value.value);\n }\n return false;\n });\n\n if (componentProps?.length > 0) {\n this.usagePatterns.objectMappings.add({\n mappings: componentProps.map((prop) => ({\n key: prop.key?.value || '[computed]',\n component: prop.value?.value,\n })),\n line: node.span?.start || 0,\n });\n console.log(`šŸ—ŗļø Object mapping with components found`);\n }\n\n this.visitChildren(node);\n }\n\n analyzeConditionalExpression(node, parent) {\n const consequent =\n node.consequent?.type === 'Identifier' ? node.consequent.value : null;\n const alternate =\n node.alternate?.type === 'Identifier' ? node.alternate.value : null;\n\n if (\n (consequent && this.componentNames.has(consequent)) ||\n (alternate && this.componentNames.has(alternate))\n ) {\n this.usagePatterns.conditionalUsage.add({\n consequent: consequent,\n alternate: alternate,\n line: node.span?.start || 0,\n });\n console.log(`šŸ”€ Conditional component usage found`);\n }\n\n this.visitChildren(node);\n }\n\n analyzeFunctionDeclaration(node) {\n // Analyze function for HOC patterns\n if (this.isHOCFunction(node)) {\n this.usagePatterns.hocUsage.add({\n name: node.identifier?.value || '[anonymous]',\n line: node.span?.start || 0,\n });\n console.log(`šŸ”§ HOC function found: ${node.identifier?.value}`);\n }\n\n this.visitChildren(node);\n }\n\n analyzeClassDeclaration(node) {\n // Check if class component uses library components\n this.visitChildren(node);\n }\n\n isHOCPattern(node) {\n // Simple heuristic: function that returns a component-like structure\n return (\n node.callee?.type === 'Identifier' &&\n node.arguments?.some(\n (arg) =>\n arg.type === 'Identifier' && this.componentNames.has(arg.value),\n )\n );\n }\n\n isHOCFunction(node) {\n // Check if function takes a component as parameter and returns JSX\n const params = node.params || [];\n return params.some((param) => param.pat?.type === 'Identifier');\n }\n\n analyzeHOCUsage(node) {\n this.usagePatterns.hocUsage.add({\n function: node.callee?.value,\n component: node.arguments?.[0]?.value,\n line: node.span?.start || 0,\n });\n }\n\n analyzeMemoUsage(node) {\n const component = node.arguments?.[0];\n if (\n component?.type === 'Identifier' &&\n this.componentNames.has(component.value)\n ) {\n this.usagePatterns.memoizedComponents.add({\n component: component.value,\n line: node.span?.start || 0,\n });\n console.log(`🧠 Memoized component: ${component.value}`);\n }\n }\n\n analyzeForwardRefUsage(node) {\n this.usagePatterns.forwardedRefs.add({\n line: node.span?.start || 0,\n });\n console.log(`ā†—ļø ForwardRef usage found`);\n }\n\n analyzePortalUsage(node) {\n this.usagePatterns.portalUsage.add({\n line: node.span?.start || 0,\n });\n console.log(`šŸŒ€ Portal usage found`);\n }\n\n analyzeMemberExpression(node, parent) {\n // Check if this is a namespace access like Foundation.Button\n if (\n node.object?.type === 'Identifier' &&\n this.allIdentifiers.has(node.object.value)\n ) {\n const namespaceName = node.object.value;\n const propertyName = node.property?.value;\n\n if (propertyName) {\n // Track namespace property access\n this.componentNames.add(propertyName);\n console.log(`šŸ”— Namespace access: ${namespaceName}.${propertyName}`);\n }\n }\n\n this.visitChildren(node);\n }\n\n extractAssignmentInfo(node) {\n switch (node.type) {\n case 'Identifier':\n return node.value;\n case 'MemberExpression':\n return `${this.extractAssignmentInfo(node.object)}.${node.property.value}`;\n case 'ConditionalExpression':\n return `${this.extractAssignmentInfo(node.consequent)} | ${this.extractAssignmentInfo(node.alternate)}`;\n default:\n return null;\n }\n }\n\n getUsageContext(parent) {\n if (!parent) return 'unknown';\n\n switch (parent.type) {\n case 'JSXElement':\n return 'jsx';\n case 'CallExpression':\n return 'function-call';\n case 'ArrayExpression':\n return 'array';\n case 'ConditionalExpression':\n return 'conditional';\n default:\n return 'other';\n }\n }\n\n isLibraryImport(source) {\n return (\n source &&\n (source.startsWith(this.libraryName) || source.includes(this.libraryName))\n );\n }\n\n isLibraryComponent(name) {\n return this.componentNames.has(name) || this.allIdentifiers.has(name);\n }\n\n generateReport() {\n const report = {\n summary: {\n totalImports:\n this.usagePatterns.defaultImports.size +\n this.usagePatterns.namedImports.size +\n this.usagePatterns.namespaceImports.size,\n totalComponents: this.componentNames.size,\n totalUsagePatterns: Object.keys(this.usagePatterns).reduce(\n (sum, key) => {\n const pattern = this.usagePatterns[key];\n if (pattern instanceof Set) return sum + pattern.size;\n if (pattern instanceof Map) return sum + pattern.size;\n return sum;\n },\n 0,\n ),\n },\n patterns: {\n imports: {\n default: Array.from(this.usagePatterns.defaultImports),\n named: Array.from(this.usagePatterns.namedImports),\n namespace: Array.from(this.usagePatterns.namespaceImports),\n aliased: Array.from(this.usagePatterns.aliasedImports.entries()).map(\n ([key, value]) => ({\n alias: key,\n ...value,\n }),\n ),\n },\n usage: {\n jsx: Array.from(this.usagePatterns.jsxUsage.entries()).map(\n ([component, usages]) => ({\n component,\n count: usages.length,\n usages,\n }),\n ),\n variables: Array.from(\n this.usagePatterns.variableAssignments.entries(),\n ).map(([key, value]) => ({\n variable: key,\n ...value,\n })),\n destructuring: Array.from(this.usagePatterns.destructuredUsage),\n conditional: Array.from(this.usagePatterns.conditionalUsage),\n arrays: Array.from(this.usagePatterns.arrayMappings),\n objects: Array.from(this.usagePatterns.objectMappings),\n },\n advanced: {\n lazy: Array.from(this.usagePatterns.lazyImports),\n dynamic: Array.from(this.usagePatterns.dynamicImports),\n hoc: Array.from(this.usagePatterns.hocUsage),\n memo: Array.from(this.usagePatterns.memoizedComponents),\n forwardRef: Array.from(this.usagePatterns.forwardedRefs),\n portal: Array.from(this.usagePatterns.portalUsage),\n },\n props: Array.from(this.usagePatterns.propsAnalysis.entries()).map(\n ([component, stats]) => ({\n component,\n namedProps: Array.from(stats.namedProps),\n spreadPropsCount: stats.spreadProps,\n totalUsages: stats.totalUsages,\n complexPropsCount: stats.complexProps,\n spreadWarning:\n stats.spreadProps > 0\n ? `${stats.spreadProps} usage(s) with spread props - cannot analyze statically`\n : null,\n }),\n ),\n },\n components: Array.from(this.componentNames).sort(),\n };\n\n return report;\n }\n\n printReport(report) {\n console.log('\\n' + '='.repeat(80));\n console.log('šŸ“Š REACT COMPONENT USAGE ANALYSIS REPORT');\n console.log('='.repeat(80));\n\n console.log(`\\nšŸ“ˆ SUMMARY:`);\n console.log(` Total Imports: ${report.summary.totalImports}`);\n console.log(` Components Found: ${report.summary.totalComponents}`);\n console.log(` Usage Patterns: ${report.summary.totalUsagePatterns}`);\n\n console.log(`\\nšŸ“¦ IMPORT PATTERNS:`);\n if (report.patterns.imports.default.length > 0) {\n console.log(\n ` Default Imports (${report.patterns.imports.default.length}):`,\n );\n report.patterns.imports.default.forEach((imp) => {\n console.log(` - ${imp.name} from \"${imp.source}\"`);\n });\n }\n\n if (report.patterns.imports.named.length > 0) {\n console.log(\n ` Named Imports (${report.patterns.imports.named.length}):`,\n );\n report.patterns.imports.named.forEach((imp) => {\n console.log(\n ` - {${imp.imported}${imp.imported !== imp.local ? ` as ${imp.local}` : ''}} from \"${imp.source}\"`,\n );\n });\n }\n\n if (report.patterns.imports.namespace.length > 0) {\n console.log(\n ` Namespace Imports (${report.patterns.imports.namespace.length}):`,\n );\n report.patterns.imports.namespace.forEach((imp) => {\n console.log(` - * as ${imp.name} from \"${imp.source}\"`);\n });\n }\n\n if (report.patterns.imports.aliased.length > 0) {\n console.log(\n ` Aliased Imports (${report.patterns.imports.aliased.length}):`,\n );\n report.patterns.imports.aliased.forEach((imp) => {\n console.log(\n ` - ${imp.alias} (originally ${imp.original}) from \"${imp.source}\"`,\n );\n });\n }\n\n console.log(`\\nšŸŽØ JSX USAGE PATTERNS:`);\n report.patterns.usage.jsx.forEach((usage) => {\n console.log(\n ` Component: ${usage.component} (used ${usage.count} times)`,\n );\n usage.usages.slice(0, 3).forEach((use, idx) => {\n const props =\n use.props.length > 0 ? ` with ${use.props.length} props` : '';\n console.log(\n ` ${idx + 1}. <${usage.component}${props}> (line ~${use.line})`,\n );\n });\n if (usage.usages.length > 3) {\n console.log(` ... and ${usage.usages.length - 3} more`);\n }\n });\n\n if (report.patterns.usage.variables.length > 0) {\n console.log(`\\nšŸ“ VARIABLE ASSIGNMENTS:`);\n report.patterns.usage.variables.forEach((variable) => {\n console.log(` ${variable.variable} = ${variable.assignment}`);\n });\n }\n\n if (report.patterns.advanced.lazy.length > 0) {\n console.log(`\\nšŸ”„ LAZY LOADING:`);\n report.patterns.advanced.lazy.forEach((lazy) => {\n console.log(` - Lazy import from \"${lazy.source}\"`);\n });\n }\n\n if (report.patterns.advanced.dynamic.length > 0) {\n console.log(`\\n⚔ DYNAMIC IMPORTS:`);\n report.patterns.advanced.dynamic.forEach((dynamic) => {\n console.log(` - Dynamic import from \"${dynamic.source}\"`);\n });\n }\n\n if (report.patterns.usage.conditional.length > 0) {\n console.log(`\\nšŸ”€ CONDITIONAL USAGE:`);\n report.patterns.usage.conditional.forEach((cond) => {\n console.log(\n ` - ${cond.consequent || 'null'} ? ${cond.alternate || 'null'}`,\n );\n });\n }\n\n console.log(`\\n🧩 COMPONENTS IDENTIFIED:`);\n report.components.forEach((comp) => {\n console.log(` - ${comp}`);\n });\n\n console.log('\\n' + '='.repeat(80));\n }\n}\n\n// Main execution\nfunction main() {\n const args = process.argv.slice(2);\n const filePath = args[0] || 'code-examples/comprehensive-usage.tsx';\n const libraryName = args[1] || '@design-system/foundation';\n\n console.log(`šŸ” Starting analysis with library: ${libraryName}`);\n console.log(`šŸ“ Target file: ${filePath}`);\n\n const analyzer = new ReactComponentUsageAnalyzer(libraryName);\n\n if (fs.existsSync(filePath)) {\n const report = analyzer.analyzeFile(filePath);\n if (report) {\n analyzer.printReport(report);\n\n // Save detailed report to JSON\n const outputPath = `analysis-report-${Date.now()}.json`;\n fs.writeFileSync(outputPath, JSON.stringify(report, null, 2));\n console.log(`\\nšŸ’¾ Detailed report saved to: ${outputPath}`);\n }\n } else {\n console.error(`āŒ File not found: ${filePath}`);\n console.log('\\nUsage: node parser.js <file-path> [library-name]');\n console.log(\n 'Example: node parser.js code-examples/comprehensive-usage.tsx @design-system/foundation',\n );\n }\n}\n\n// Export for use as module\nexport { ReactComponentUsageAnalyzer };\n\n// Run if called directly - Note: This works in CommonJS output from tsup\n// In ESM, you'd use import.meta.url === `file://${process.argv[1]}`\n","import { ReactComponentUsageAnalyzer } from './parser';\nimport fs from 'fs';\nimport path from 'path';\n\nclass FocusedUsageAnalyzer extends ReactComponentUsageAnalyzer {\n constructor(libraryName = '@design-system/foundation') {\n super(libraryName);\n this.patternMap = new Map();\n this.componentFrequency = new Map();\n this.usageComplexity = new Map();\n }\n\n analyzePatterns() {\n // Define pattern categories\n const patterns = {\n 'Direct Import & Usage': {\n weight: 1,\n description: 'Simple import and direct JSX usage',\n examples: ['import Button from \"lib\"; <Button />'],\n },\n 'Named Import with Alias': {\n weight: 2,\n description: 'Named import with renaming',\n examples: ['import { Button as MyButton } from \"lib\"; <MyButton />'],\n },\n 'Namespace Import': {\n weight: 2,\n description: 'Import entire namespace',\n examples: ['import * as Lib from \"lib\"; <Lib.Button />'],\n },\n 'Variable Assignment': {\n weight: 3,\n description: 'Assigning components to variables',\n examples: ['const MyButton = Button; <MyButton />'],\n },\n 'Conditional Assignment': {\n weight: 4,\n description: 'Conditional component selection',\n examples: ['const Comp = condition ? Button : Input; <Comp />'],\n },\n 'Object Mapping': {\n weight: 5,\n description: 'Components stored in objects',\n examples: ['const map = {btn: Button}; <map.btn />'],\n },\n 'Array Mapping': {\n weight: 5,\n description: 'Components in arrays',\n examples: ['[Button, Input].map(Comp => <Comp />)'],\n },\n 'Dynamic Mapping': {\n weight: 6,\n description: 'Runtime component selection',\n examples: ['components[type]'],\n },\n 'HOC Wrapping': {\n weight: 7,\n description: 'Higher-order component patterns',\n examples: ['withProps(Button)'],\n },\n 'Lazy Loading': {\n weight: 6,\n description: 'Lazy-loaded components',\n examples: ['lazy(() => import(\"lib/Button\"))'],\n },\n 'Dynamic Import': {\n weight: 7,\n description: 'Runtime dynamic imports',\n examples: ['await import(\"lib/Button\")'],\n },\n 'Destructuring Usage': {\n weight: 4,\n description: 'Destructured from objects',\n examples: ['const {Button} = Foundation; <Button />'],\n },\n 'Memoized Components': {\n weight: 5,\n description: 'React.memo wrapped components',\n examples: ['memo(Button)'],\n },\n 'Forward Ref': {\n weight: 6,\n description: 'forwardRef wrapped components',\n examples: ['forwardRef((props, ref) => <Button ref={ref} />)'],\n },\n 'Portal Usage': {\n weight: 8,\n description: 'Components rendered in portals',\n examples: ['createPortal(<Button />, document.body)'],\n },\n 'Context Integration': {\n weight: 7,\n description: 'Components from React context',\n examples: ['const {Button} = useContext(ThemeContext)'],\n },\n };\n\n return patterns;\n }\n\n classifyUsage(report) {\n const patterns = this.analyzePatterns();\n const foundPatterns = new Map();\n\n // Analyze each pattern type\n if (report.patterns.imports.default.length > 0) {\n foundPatterns.set('Direct Import & Usage', {\n count: report.patterns.imports.default.length,\n complexity: 1,\n examples: report.patterns.imports.default.slice(0, 3),\n });\n }\n\n if (report.patterns.imports.aliased.length > 0) {\n foundPatterns.set('Named Import with Alias', {\n count: report.patterns.imports.aliased.length,\n complexity: 2,\n examples: report.patterns.imports.aliased.slice(0, 3),\n });\n }\n\n if (report.patterns.imports.namespace.length > 0) {\n foundPatterns.set('Namespace Import', {\n count: report.patterns.imports.namespace.length,\n complexity: 2,\n examples: report.patterns.imports.namespace.slice(0, 3),\n });\n }\n\n if (report.patterns.usage.variables.length > 0) {\n foundPatterns.set('Variable Assignment', {\n count: report.patterns.usage.variables.length,\n complexity: 3,\n examples: report.patterns.usage.variables.slice(0, 3),\n });\n }\n\n if (report.patterns.usage.conditional.length > 0) {\n foundPatterns.set('Conditional Assignment', {\n count: report.patterns.usage.conditional.length,\n complexity: 4,\n examples: report.patterns.usage.conditional.slice(0, 3),\n });\n }\n\n if (report.patterns.usage.objects.length > 0) {\n foundPatterns.set('Object Mapping', {\n count: report.patterns.usage.objects.length,\n complexity: 5,\n examples: report.patterns.usage.objects.slice(0, 3),\n });\n }\n\n if (report.patterns.usage.arrays.length > 0) {\n foundPatterns.set('Array Mapping', {\n count: report.patterns.usage.arrays.length,\n complexity: 5,\n examples: report.patterns.usage.arrays.slice(0, 3),\n });\n }\n\n if (report.patterns.advanced.lazy.length > 0) {\n foundPatterns.set('Lazy Loading', {\n count: report.patterns.advanced.lazy.length,\n complexity: 6,\n examples: report.patterns.advanced.lazy.slice(0, 3),\n });\n }\n\n if (report.patterns.advanced.dynamic.length > 0) {\n foundPatterns.set('Dynamic Import', {\n count: report.patterns.advanced.dynamic.length,\n complexity: 7,\n examples: report.patterns.advanced.dynamic.slice(0, 3),\n });\n }\n\n if (report.patterns.usage.destructuring.length > 0) {\n foundPatterns.set('Destructuring Usage', {\n count: report.patterns.usage.destructuring.length,\n complexity: 4,\n examples: report.patterns.usage.destructuring.slice(0, 3),\n });\n }\n\n if (report.patterns.advanced.memo.length > 0) {\n foundPatterns.set('Memoized Components', {\n count: report.patterns.advanced.memo.length,\n complexity: 5,\n examples: report.patterns.advanced.memo.slice(0, 3),\n });\n }\n\n if (report.patterns.advanced.forwardRef.length > 0) {\n foundPatterns.set('Forward Ref', {\n count: report.patterns.advanced.forwardRef.length,\n complexity: 6,\n examples: report.patterns.advanced.forwardRef.slice(0, 3),\n });\n }\n\n if (report.patterns.advanced.portal.length > 0) {\n foundPatterns.set('Portal Usage', {\n count: report.patterns.advanced.portal.length,\n complexity: 8,\n examples: report.patterns.advanced.portal.slice(0, 3),\n });\n }\n\n return { patterns, foundPatterns };\n }\n\n generateComplexityScore(foundPatterns) {\n let totalScore = 0;\n let maxPossibleScore = 0;\n\n foundPatterns.forEach((data, patternName) => {\n const weight = data.complexity;\n const score = weight * data.count;\n totalScore += score;\n maxPossibleScore += weight * 10; // Assume max 10 instances per pattern\n });\n\n return {\n score: totalScore,\n maxPossible: maxPossibleScore,\n percentage: Math.round(\n (totalScore / Math.max(maxPossibleScore, 1)) * 100,\n ),\n level: this.getComplexityLevel(totalScore),\n };\n }\n\n getComplexityLevel(score) {\n if (score <= 10) return 'Simple';\n if (score <= 30) return 'Moderate';\n if (score <= 60) return 'Complex';\n if (score <= 100) return 'Very Complex';\n return 'Extremely Complex';\n }\n\n generateRecommendations(foundPatterns, complexity) {\n const recommendations = [];\n\n if (\n foundPatterns.has('Dynamic Import') ||\n foundPatterns.has('Portal Usage')\n ) {\n recommendations.push({\n type: 'Performance',\n priority: 'High',\n message: 'Consider code splitting strategies for dynamic imports',\n action: 'Implement lazy loading boundaries',\n });\n }\n\n if (\n foundPatterns.has('Object Mapping') ||\n foundPatterns.has('Array Mapping')\n ) {\n recommendations.push({\n type: 'Maintainability',\n priority: 'Medium',\n message: 'Component mappings can be hard to track',\n action: 'Consider using TypeScript for better type safety',\n });\n }\n\n if (complexity.level === 'Extremely Complex') {\n recommendations.push({\n type: 'Architecture',\n priority: 'High',\n message: 'High complexity detected in component usage',\n action: 'Consider refactoring to simpler patterns',\n });\n }\n\n if (foundPatterns.size > 8) {\n recommendations.push({\n type: 'Consistency',\n priority: 'Medium',\n message: 'Many different usage patterns found',\n action: 'Standardize on 2-3 primary patterns',\n });\n }\n\n return recommendations;\n }\n\n printFocusedReport(report) {\n const { patterns, foundPatterns } = this.classifyUsage(report);\n const complexity = this.generateComplexityScore(foundPatterns);\n const recommendations = this.generateRecommendations(\n foundPatterns,\n complexity,\n );\n\n console.log('\\n' + 'šŸŽÆ'.repeat(40));\n console.log('šŸŽÆ FOCUSED COMPONENT USAGE ANALYSIS');\n console.log('šŸŽÆ'.repeat(40));\n\n console.log(`\\nšŸ“Š COMPLEXITY ANALYSIS:`);\n console.log(\n ` Overall Score: ${complexity.score}/${complexity.maxPossible}`,\n );\n console.log(\n ` Complexity Level: ${complexity.level} (${complexity.percentage}%)`,\n );\n\n console.log(\n `\\nšŸ” PATTERNS DETECTED (${foundPatterns.size} of ${Object.keys(patterns).length}):`,\n );\n\n // Sort by complexity (highest first)\n const sortedPatterns = Array.from(foundPatterns.entries()).sort(\n (a, b) => b[1].complexity - a[1].complexity,\n );\n\n sortedPatterns.forEach(([patternName, data]) => {\n const patternInfo = patterns[patternName];\n console.log(\n `\\n ${this.getComplexityIcon(data.complexity)} ${patternName}:`,\n );\n console.log(` Complexity: ${data.complexity}/10`);\n console.log(` Instances: ${data.count}`);\n console.log(` Description: ${patternInfo.description}`);\n\n if (data.examples.length > 0) {\n console.log(\n ` Examples: ${JSON.stringify(data.examples[0], null, ' ').slice(0, 100)}...`,\n );\n }\n });\n\n console.log(`\\nšŸ“ˆ COMPONENT FREQUENCY:`);\n report.patterns.usage.jsx.forEach((usage) => {\n console.log(` ${usage.component}: ${usage.count} uses`);\n });\n\n if (recommendations.length > 0) {\n console.log(`\\nšŸ’” RECOMMENDATIONS:`);\n recommendations.forEach((rec, idx) => {\n console.log(` ${idx + 1}. [${rec.priority}] ${rec.type}:`);\n console.log(` Issue: ${rec.message}`);\n console.log(` Action: ${rec.action}`);\n });\n }\n\n console.log(`\\nšŸ“‹ PATTERN COVERAGE:`);\n Object.keys(patterns).forEach((patternName) => {\n const found = foundPatterns.has(patternName);\n console.log(` ${found ? 'āœ…' : 'āŒ'} ${patternName}`);\n });\n\n console.log(`\\nšŸŽÆ USAGE DENSITY:`);\n const density = (foundPatterns.size / Object.keys(patterns).length) * 100;\n console.log(` Pattern Coverage: ${Math.round(density)}%`);\n console.log(\n ` Usage Intensity: ${this.getUsageIntensity(complexity.score)}`,\n );\n\n return { foundPatterns, complexity, recommendations };\n }\n\n getComplexityIcon(complexity) {\n if (complexity <= 2) return '🟢';\n if (complexity <= 4) return '🟔';\n if (complexity <= 6) return '🟠';\n return 'šŸ”“';\n }\n\n getUsageIntensity(score) {\n if (score <= 10) return 'Light';\n if (score <= 30) return 'Moderate';\n if (score <= 60) return 'Heavy';\n return 'Intensive';\n }\n\n analyzeMultipleFiles(filePatterns) {\n const allReports = [];\n const combinedAnalysis = {\n totalFiles: 0,\n totalComponents: new Set(),\n patternFrequency: new Map(),\n complexityDistribution: [],\n };\n\n filePatterns.forEach((pattern) => {\n const files = this.findMatchingFiles(pattern);\n files.forEach((file) => {\n console.log(`\\nšŸ“ Analyzing: ${file}`);\n const report = this.analyzeFile(file);\n if (report) {\n allReports.push({ file, report });\n combinedAnalysis.totalFiles++;\n\n // Add components to global set\n report.components.forEach((comp) =>\n combinedAnalysis.totalComponents.add(comp),\n );\n\n // Analyze patterns in this file\n const { foundPatterns, complexity } = this.classifyUsage(report);\n combinedAnalysis.complexityDistribution.push({\n file,\n score: complexity.score,\n level: complexity.level,\n });\n\n // Count pattern frequency\n foundPatterns.forEach((data, pattern) => {\n const current = combinedAnalysis.patternFrequency.get(pattern) || 0;\n combinedAnalysis.patternFrequency.set(pattern, current + 1);\n });\n }\n });\n });\n\n return { allReports, combinedAnalysis };\n }\n\n findMatchingFiles(pattern) {\n const glob = require('glob');\n try {\n return glob.sync(pattern);\n } catch (e) {\n console.warn(`Warning: Could not process pattern ${pattern}`);\n return [];\n }\n }\n}\n\n// Main execution\nfunction main() {\n const args = process.argv.slice(2);\n const command = args[0] || 'analyze';\n\n const analyzer = new FocusedUsageAnalyzer('@design-system/foundation');\n\n switch (command) {\n case 'analyze':\n const filePath = args[1] || 'code-examples/comprehensive-usage.tsx';\n console.log(`šŸŽÆ Focused analysis of: ${filePath}`);\n\n if (fs.existsSync(filePath)) {\n const report = analyzer.analyzeFile(filePath);\n if (report) {\n const analysis = analyzer.printFocusedReport(report);\n\n // Save focused report\n const outputPath = `focused-analysis-${Date.now()}.json`;\n fs.writeFileSync(\n outputPath,\n JSON.stringify(\n {\n file: filePath,\n report,\n analysis,\n },\n null,\n 2,\n ),\n );\n console.log(`\\nšŸ’¾ Focused analysis saved to: ${outputPath}`);\n }\n } else {\n console.error(`āŒ File not found: ${filePath}`);\n }\n break;\n\n case 'bulk':\n const patterns = args.slice(1) || [\n 'code-examples/**/*.tsx',\n 'src/**/*.tsx',\n ];\n console.log(`šŸŽÆ Bulk analysis of patterns: ${patterns.join(', ')}`);\n\n const { allReports, combinedAnalysis } =\n analyzer.analyzeMultipleFiles(patterns);\n\n console.log(`\\nšŸ“Š BULK ANALYSIS SUMMARY:`);\n console.log(` Files analyzed: ${combinedAnalysis.totalFiles}`);\n console.log(\n ` Unique components: ${combinedAnalysis.totalComponents.size}`,\n );\n console.log(` Most common patterns:`);\n\n Array.from(combinedAnalysis.patternFrequency.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, 5)\n .forEach(([pattern, count]) => {\n console.log(` ${pattern}: ${count} files`);\n });\n\n break;\n\n case 'help':\n default:\n console.log('šŸŽÆ Focused Usage Analyzer Commands:');\n console.log(' analyze [file] - Analyze a single file (default)');\n console.log(\n ' bulk [patterns...] - Analyze multiple files matching patterns',\n );\n console.log(' help - Show this help');\n console.log('\\nExamples:');\n console.log(\n ' node analyze-usage.js analyze code-examples/comprehensive-usage.tsx',\n );\n console.log(\n ' node analyze-usage.js bulk \"src/**/*.tsx\" \"components/**/*.jsx\"',\n );\n break;\n }\n}\n\nexport { FocusedUsageAnalyzer };\n\n// Run if called directly - Note: This works in CommonJS output from tsup\n// In ESM, you'd use import.meta.url === `file://${process.argv[1]}`\n","import { glob } from 'glob';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport path from 'path';\n\nexport interface FileSearchOptions {\n ignore?: string[];\n maxFiles?: number;\n}\n\nexport interface SaveReportOptions {\n data: any;\n commandType: string;\n outputPath?: string;\n format?: 'json' | 'console' | 'both';\n}\n\n/**\n * Find files matching a glob pattern\n */\nexport async function findFiles(\n pattern: string,\n ignorePatterns?: string[],\n maxFiles?: number,\n): Promise<string[]> {\n const allFiles = await glob(pattern, {\n ignore: ignorePatterns || [\n '**/node_modules/**',\n '**/dist/**',\n '**/build/**',\n ],\n nodir: true,\n absolute: true,\n // Only match React/JS/TS files\n matchBase: true,\n });\n\n // Filter for React component files\n const reactFiles = allFiles.filter((file) => {\n const ext = file.split('.').pop()?.toLowerCase();\n return ['tsx', 'jsx', 'ts', 'js'].includes(ext || '');\n });\n\n return maxFiles ? reactFiles.slice(0, maxFiles) : reactFiles;\n}\n\n/**\n * Generate a timestamped filename for reports\n */\nexport function generateReportFilename(\n commandType: string,\n extension: string = 'json',\n): string {\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n return `${commandType}-report-${timestamp}.${extension}`;\n}\n\n/**\n * Add metadata to a report\n */\nexport function addReportMetadata(\n data: any,\n commandType: string,\n additionalMetadata: Record<string, any> = {},\n): any {\n return {\n ...data,\n metadata: {\n ...data.metadata,\n timestamp: new Date().toISOString(),\n commandType,\n ...additionalMetadata,\n },\n };\n}\n\n/**\n * Save a report to the reports-outputs directory\n */\nexport function saveReport(options: SaveReportOptions): string {\n const { data, commandType, outputPath, format = 'both' } = options;\n\n if (format === 'console') {\n return '';\n }\n\n // Generate filename with timestamp and command type\n const filename = outputPath || generateReportFilename(commandType);\n\n // Ensure reports-outputs directory exists\n const reportsDir = path.join(process.cwd(), 'reports-outputs');\n if (!fs.existsSync(reportsDir)) {\n fs.mkdirSync(reportsDir, { recursive: true });\n }\n\n // Save to reports-outputs directory if not absolute path\n const finalPath = path.isAbsolute(filename)\n ? filename\n : path.join(reportsDir, filename);\n\n // Add metadata before saving\n const reportWithMetadata = addReportMetadata(data, commandType);\n\n fs.writeFileSync(finalPath, JSON.stringify(reportWithMetadata, null, 2));\n\n console.log(chalk.blue(`\\nšŸ“„ JSON report saved to: ${finalPath}`));\n\n return finalPath;\n}\n\n/**\n * Get complexity icon based on level\n */\nexport function getComplexityIcon(level: string): string {\n switch (level) {\n case 'Simple':\n return '🟢';\n case 'Moderate':\n return '🟔';\n case 'Complex':\n return '🟠';\n case 'Very Complex':\n return 'šŸ”“';\n case 'Extremely Complex':\n return '⚫';\n default:\n return '⚪';\n }\n}\n\n/**\n * Create a visual bar for progress/stats\n */\nexport function createBar(percentage: number, length: number = 20): string {\n const filled = Math.round((percentage / 100) * length);\n const empty = length - filled;\n return chalk.green('ā–ˆ'.repeat(filled)) + chalk.gray('ā–‘'.repeat(empty));\n}\n\n/**\n * Format a number with commas\n */\nexport function formatNumber(num: number): string {\n return num.toLocaleString();\n}\n\n/**\n * Get emoji for ranking\n */\nexport function getRankEmoji(rank: number): string {\n switch (rank) {\n case 1:\n return 'šŸ„‡';\n case 2:\n return '🄈';\n case 3:\n return 'šŸ„‰';\n default:\n return 'šŸ“';\n }\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport path from 'path';\nimport { ReactComponentUsageAnalyzer } from '../parser';\nimport { FocusedUsageAnalyzer } from '../analyze-usage';\nimport { findFiles, saveReport, getRankEmoji } from './shared';\n\ninterface AnalyzeOptions {\n library: string;\n output?: string;\n format: 'json' | 'console' | 'both';\n complexity?: boolean;\n ignore?: string[];\n maxFiles?: number;\n summaryOnly?: boolean;\n}\n\nexport async function analyzeCommand(\n pattern: string,\n options: AnalyzeOptions,\n): Promise<void> {\n const spinner = ora('Finding files to analyze...').start();\n\n try {\n // Find matching files\n const files = await findFiles(pattern, options.ignore, options.maxFiles);\n\n if (files.length === 0) {\n spinner.fail(chalk.red('No files found matching pattern: ' + pattern));\n return;\n }\n\n spinner.succeed(chalk.green(`Found ${files.length} files to analyze`));\n\n // Analyze files\n spinner.start('Analyzing files...');\n const analyzer = options.complexity\n ? new FocusedUsageAnalyzer(options.library)\n : new ReactComponentUsageAnalyzer(options.library);\n\n const aggregatedReport = {\n metadata: {\n timestamp: new Date().toISOString(),\n commandType: 'analyze',\n library: options.library,\n pattern: pattern,\n filesAnalyzed: 0,\n filesWithErrors: 0,\n totalFiles: files.length,\n },\n files: [],\n aggregated: {\n allComponents: new Set(),\n totalImports: 0,\n totalUsagePatterns: 0,\n patternFrequency: {},\n componentFrequency: {},\n fileComplexity: [],\n errors: [],\n },\n };\n\n // Analyze each file\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n spinner.text = `Analyzing files... (${i + 1}/${files.length}) ${path.basename(file)}`;\n\n try {\n const report = analyzer.analyzeFile(file);\n\n if (report) {\n aggregatedReport.metadata.filesAnalyzed++;\n\n const fileResult: any = {\n path: file,\n components: report.components,\n summary: report.summary,\n patterns: report.patterns,\n };\n\n if (options.complexity) {\n const analysis = analyzer.classifyUsage(report);\n const complexity = analyzer.generateComplexityScore(\n analysis.foundPatterns,\n );\n fileResult.complexity = complexity;\n aggregatedReport.aggregated.fileComplexity.push({\n file: file,\n score: complexity.score,\n level: complexity.level,\n });\n }\n\n aggregatedReport.files.push(fileResult);\n\n // Aggregate data\n report.components.forEach((comp: string) =>\n aggregatedReport.aggregated.allComponents.add(comp),\n );\n aggregatedReport.aggregated.totalImports +=\n report.summary.totalImports;\n aggregatedReport.aggregated.totalUsagePatterns +=\n report.summary.totalUsagePatterns;\n\n // Count component usage\n report.patterns.usage.jsx.forEach((usage: any) => {\n aggregatedReport.aggregated.componentFrequency[usage.component] =\n (aggregatedReport.aggregated.componentFrequency[\n usage.component\n ] || 0) + usage.count;\n });\n\n // Count pattern types\n Object.keys(report.patterns).forEach((category) => {\n Object.keys(report.patterns[category]).forEach((patternType) => {\n const pattern = report.patterns[category][patternType];\n const count = Array.isArray(pattern) ? pattern.length : 0;\n if (count > 0) {\n const key = `${category}.${patternType}`;\n aggregatedReport.aggregated.patternFrequency[key] =\n (aggregatedReport.aggregated.patternFrequency[key] || 0) +\n count;\n }\n });\n });\n }\n } catch (error: any) {\n aggregatedReport.metadata.filesWithErrors++;\n aggregatedReport.aggregated.errors.push({\n file: file,\n error: error.message,\n });\n }\n }\n\n // Convert Set to Array for JSON serialization\n aggregatedReport.aggregated.allComponents = Array.from(\n aggregatedReport.aggregated.allComponents,\n ) as any;\n\n spinner.succeed(\n chalk.green(\n `Analysis complete! Analyzed ${aggregatedReport.metadata.filesAnalyzed} files`,\n ),\n );\n\n // Generate output\n if (options.format === 'json' || options.format === 'both') {\n saveReport({\n data: aggregatedReport,\n commandType: 'analyze',\n outputPath: options.output,\n format: options.format,\n });\n }\n\n if (options.format === 'console' || options.format === 'both') {\n printAggregatedReport(aggregatedReport, options);\n }\n } catch (error: any) {\n spinner.fail(chalk.red('Analysis failed: ' + error.message));\n console.error(error);\n }\n}\n\nfunction printAggregatedReport(report: any, options: AnalyzeOptions): void {\n console.log('\\n' + chalk.bold.blue('═'.repeat(80)));\n console.log(chalk.bold.blue(' šŸ“Š AGGREGATED ANALYSIS REPORT'));\n console.log(chalk.bold.blue('═'.repeat(80)));\n\n console.log(chalk.bold('\\nšŸ“ˆ SUMMARY:'));\n console.log(` Library: ${chalk.cyan(report.metadata.library)}`);\n console.log(\n ` Files Analyzed: ${chalk.green(report.metadata.filesAnalyzed)} / ${report.metadata.totalFiles}`,\n );\n if (report.metadata.filesWithErrors > 0) {\n console.log(\n ` Files with Errors: ${chalk.red(report.metadata.filesWithErrors)}`,\n );\n }\n console.log(\n ` Total Components: ${chalk.yellow(report.aggregated.allComponents.length)}`,\n );\n console.log(\n ` Total Imports: ${chalk.yellow(report.aggregated.totalImports)}`,\n );\n console.log(\n ` Total Usage Patterns: ${chalk.yellow(report.aggregated.totalUsagePatterns)}`,\n );\n\n if (!options.summaryOnly) {\n console.log(chalk.bold('\\nšŸŽÆ TOP COMPONENTS:'));\n const topComponents = Object.entries(report.aggregated.componentFrequency)\n .sort((a: any, b: any) => b[1] - a[1])\n .slice(0, 10);\n\n topComponents.forEach(([comp, count]: [string, any], index: number) => {\n const rank = index + 1;\n const emoji = getRankEmoji(rank);\n console.log(\n ` ${emoji} ${rank}. ${chalk.cyan(comp)}: ${chalk.yellow(count)} uses`,\n );\n });\n\n console.log(chalk.bold('\\nšŸ” PATTERN FREQUENCY:'));\n const topPatterns = Object.entries(report.aggregated.patternFrequency)\n .sort((a: any, b: any) => b[1] - a[1])\n .slice(0, 10);\n\n topPatterns.forEach(([pattern, count]: [string, any], index: number) => {\n console.log(` ${index + 1}. ${pattern}: ${chalk.yellow(count)}`);\n });\n\n if (report.aggregated.fileComplexity.length > 0) {\n console.log(chalk.bold('\\nšŸ“Š COMPLEXITY ANALYSIS:'));\n const avgComplexity =\n report.aggregated.fileComplexity.reduce(\n (sum: number, f: any) => sum + f.score,\n 0,\n ) / report.aggregated.fileComplexity.length;\n console.log(\n ` Average Complexity: ${chalk.yellow(avgComplexity.toFixed(2))}`,\n );\n\n const mostComplex = report.aggregated.fileComplexity\n .sort((a: any, b: any) => b.score - a.score)\n .slice(0, 5);\n console.log(chalk.bold('\\n Most Complex Files:'));\n mostComplex.forEach((file: any, index: number) => {\n console.log(\n ` ${index + 1}. ${path.basename(file.file)}: ${chalk.yellow(file.score)} (${file.level})`,\n );\n });\n }\n }\n\n if (report.aggregated.errors.length > 0) {\n console.log(chalk.bold.red('\\nāš ļø ERRORS:'));\n report.aggregated.errors.slice(0, 5).forEach((error: any) => {\n console.log(\n ` ${chalk.red('āœ—')} ${path.basename(error.file)}: ${error.error}`,\n );\n });\n if (report.aggregated.errors.length > 5) {\n console.log(\n ` ... and ${report.aggregated.errors.length - 5} more errors`,\n );\n }\n }\n\n console.log('\\n' + chalk.bold.blue('═'.repeat(80)) + '\\n');\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport { FocusedUsageAnalyzer } from '../analyze-usage';\nimport { findFiles, saveReport, getRankEmoji } from './shared';\n\ninterface CompareOptions {\n libraries: string[];\n output?: string;\n format: 'json' | 'console' | 'both';\n}\n\nexport async function compareCommand(\n pattern: string,\n options: CompareOptions,\n): Promise<void> {\n const spinner = ora('Finding files to analyze...').start();\n\n try {\n const files = await findFiles(pattern, [], 1000);\n\n if (files.length === 0) {\n spinner.fail(chalk.red('No files found matching pattern: ' + pattern));\n return;\n }\n\n spinner.succeed(chalk.green(`Found ${files.length} files`));\n\n const comparisonResults = {\n metadata: {\n timestamp: new Date().toISOString(),\n commandType: 'compare',\n pattern: pattern,\n filesAnalyzed: files.length,\n libraries: options.libraries,\n },\n libraries: [],\n };\n\n // Analyze for each library\n for (const library of options.libraries) {\n spinner.start(`Analyzing ${library}...`);\n\n const analyzer = new FocusedUsageAnalyzer(library);\n let componentsFound = 0;\n let usagePatterns = 0;\n const components = new Set<string>();\n\n for (const file of files) {\n try {\n const report = analyzer.analyzeFile(file);\n if (report) {\n componentsFound += report.summary.totalComponents;\n usagePatterns += report.summary.totalUsagePatterns;\n report.components.forEach((comp: string) => components.add(comp));\n }\n } catch (error) {\n // Skip files with errors\n }\n }\n\n const libraryResult = {\n name: library,\n componentsFound: components.size,\n totalUsagePatterns: usagePatterns,\n topComponents: Array.from(components).slice(0, 10),\n };\n\n comparisonResults.libraries.push(libraryResult);\n spinner.succeed(\n chalk.green(`${library}: ${components.size} components found`),\n );\n }\n\n // Sort by components found\n comparisonResults.libraries.sort(\n (a: any, b: any) => b.componentsFound - a.componentsFound,\n );\n\n // Save and display\n if (options.format === 'json' || options.format === 'both') {\n saveReport({\n data: comparisonResults,\n commandType: 'compare',\n outputPath: options.output,\n format: options.format,\n });\n }\n\n if (options.format === 'console' || options.format === 'both') {\n printComparisonReport(comparisonResults);\n }\n } catch (error: any) {\n spinner.fail(chalk.red('Comparison failed: ' + error.message));\n console.error(error);\n }\n}\n\nfunction printComparisonReport(results: any): void {\n console.log('\\n' + chalk.bold.blue('═'.repeat(60)));\n console.log(chalk.bold.blue(' šŸ“Š LIBRARY COMPARISON REPORT'));\n console.log(chalk.bold.blue('═'.repeat(60)));\n\n console.log(chalk.bold('\\nšŸ† RESULTS:'));\n results.libraries.forEach((lib: any, index: number) => {\n const rank = index + 1;\n const emoji = getRankEmoji(rank);\n console.log(\n ` ${emoji} ${rank}. ${chalk.cyan(lib.name)}: ${chalk.yellow(lib.componentsFound)} components, ${chalk.yellow(lib.totalUsagePatterns)} usage patterns`,\n );\n });\n\n console.log('\\n' + chalk.bold.blue('═'.repeat(60)) + '\\n');\n}\n","import simpleGit from 'simple-git';\nimport tmp from 'tmp';\nimport fs from 'fs';\nimport path from 'path';\nimport { glob } from 'glob';\nimport chalk from 'chalk';\nimport ora from 'ora';\n\n/**\n * GitHub repository information\n */\nexport interface GitHubRepoInfo {\n owner: string;\n repo: string;\n url: string;\n shorthand: string;\n localPath?: string;\n branch?: string;\n success?: boolean;\n}\n\n/**\n * Temporary directory result\n */\nexport interface TempDirResult {\n path: string;\n cleanup: () => void;\n}\n\n/**\n * Clone options\n */\nexport interface CloneOptions {\n branch?: string;\n depth?: number;\n}\n\n/**\n * Clone result\n */\nexport interface CloneResult {\n clonedRepos: GitHubRepoInfo[];\n errors: Array<{ url: string; error: string }>;\n}\n\n/**\n * Files by repository\n */\nexport interface FilesByRepo {\n [repoShorthand: string]: {\n repo: GitHubRepoInfo;\n files: string[];\n count: number;\n };\n}\n\n/**\n * Repository statistics\n */\nexport interface RepoStats {\n packageJson?: any;\n name: string;\n version: string;\n dependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n totalFiles: number;\n fileTypes: {\n tsx: number;\n jsx: number;\n ts: number;\n js: number;\n };\n error?: string;\n}\n\n/**\n * Combined report\n */\nexport interface CombinedReport {\n totalComponents: string[];\n totalImports: string[];\n componentsByRepo: Record<string, string[]>;\n componentFrequency: Record<string, number>;\n importFrequency: Record<string, number>;\n repoSummaries: Array<{\n name: string;\n components: number;\n files: number;\n errors: number;\n topComponents: Array<{ component: string; uses: number }>;\n }>;\n}\n\n/**\n * Analysis results structure\n */\nexport interface AnalysisResults {\n repositories: Record<\n string,\n {\n analysis: {\n components: string[];\n imports: Record<string, { count: number }>;\n componentUsage: Record<string, number>;\n errors: any[];\n };\n files: string[];\n }\n >;\n}\n\n/**\n * Parse GitHub URL to extract owner and repo name\n * Supports:\n * - https://github.com/owner/repo\n * - https://github.com/owner/repo.git\n * - git@github.com:owner/repo.git\n * - owner/repo (shorthand)\n */\nexport function parseGitHubUrl(url: string): GitHubRepoInfo {\n // Handle shorthand: owner/repo\n if (/^[\\w-]+\\/[\\w-]+$/.test(url)) {\n const [owner, repo] = url.split('/');\n return {\n owner,\n repo: repo.replace('.git', ''),\n url: `https://github.com/${owner}/${repo}`,\n shorthand: url,\n };\n }\n\n // Handle https://github.com/owner/repo\n const httpsMatch = url.match(/github\\.com\\/([^/]+)\\/([^/.]+)/);\n if (httpsMatch) {\n return {\n owner: httpsMatch[1],\n repo: httpsMatch[2],\n url: url,\n shorthand: `${httpsMatch[1]}/${httpsMatch[2]}`,\n };\n }\n\n throw new Error(\n `Invalid GitHub URL: ${url}. Expected format: https://github.com/owner/repo or owner/repo`,\n );\n}\n\n/**\n * Create temporary directory for cloning repositories\n * @returns Promise with temp directory info\n */\nexport function createTempDir(): Promise<TempDirResult> {\n return new Promise((resolve, reject) => {\n tmp.dir(\n { unsafeCleanup: true, prefix: 'react-analyzer-' },\n (err, dirPath, cleanup) => {\n if (err) reject(err);\n resolve({ path: dirPath, cleanup });\n },\n );\n });\n}\n\n/**\n * Clone a single repository\n * @param repoUrl - GitHub repository URL or shorthand\n * @param targetDir - Target directory for cloning\n * @param options - Clone options\n * @returns Repository info\n */\nexport async function cloneRepository(\n repoUrl: string,\n targetDir: string,\n options: CloneOptions = {},\n): Promise<GitHubRepoInfo> {\n const { branch = 'main', depth = 1 } = options;\n const repoInfo = parseGitHubUrl(repoUrl);\n const localPath = path.join(targetDir, `${repoInfo.owner}-${repoInfo.repo}`);\n\n const git = simpleGit();\n\n const cloneOptions = [\n '--depth',\n depth.toString(),\n '--branch',\n branch,\n '--single-branch',\n ];\n\n try {\n await git.clone(repoInfo.url, localPath, cloneOptions);\n return {\n ...repoInfo,\n localPath,\n branch,\n success: true,\n };\n } catch (error) {\n // Try alternative branch if main fails\n if (\n error instanceof Error &&\n error.message.includes('not found') &&\n branch === 'main'\n ) {\n try {\n const fallbackOptions = [\n '--depth',\n '1',\n '--branch',\n 'master',\n '--single-branch',\n ];\n await git.clone(repoInfo.url, localPath, fallbackOptions);\n return {\n ...repoInfo,\n localPath,\n branch: 'master',\n success: true,\n };\n } catch (retryError) {\n throw retryError;\n }\n }\n throw error;\n }\n}\n\n/**\n * Clone multiple repositories\n * @param repoUrls - Array of repository URLs\n * @param targetDir - Target directory for cloning\n * @param options - Clone options\n * @returns Cloned repositories and errors\n */\nexport async function cloneRepositories(\n repoUrls: string[],\n targetDir: string,\n options: CloneOptions = {},\n): Promise<CloneResult> {\n const spinner = ora('Cloning repositories...').start();\n const clonedRepos: GitHubRepoInfo[] = [];\n const errors: Array<{ url: string; error: string }> = [];\n\n for (const repoUrl of repoUrls) {\n try {\n spinner.text = `Cloning ${repoUrl}...`;\n const repoInfo = await cloneRepository(repoUrl, targetDir, options);\n clonedRepos.push(repoInfo);\n spinner.succeed(\n chalk.green(\n `āœ“ Cloned ${repoInfo.shorthand} (${repoInfo.branch} branch)`,\n ),\n );\n spinner.start();\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n errors.push({\n url: repoUrl,\n error: message,\n });\n spinner.fail(chalk.red(`āœ— Failed to clone ${repoUrl}: ${message}`));\n spinner.start();\n }\n }\n\n spinner.stop();\n\n if (clonedRepos.length === 0) {\n throw new Error('No repositories were successfully cloned');\n }\n\n console.log(\n chalk.green(\n `\\nSuccessfully cloned ${clonedRepos.length} of ${repoUrls.length} repositories\\n`,\n ),\n );\n\n return { clonedRepos, errors };\n}\n\n/**\n * Find files in a repository\n * @param repo - Repository info\n * @param pattern - Glob pattern\n * @returns Array of file paths\n */\nexport async function findFilesInRepo(\n repo: GitHubRepoInfo,\n pattern: string = '**/*.{tsx,jsx,ts,js}',\n): Promise<string[]> {\n if (!repo.localPath) {\n throw new Error('Repository localPath is not defined');\n }\n\n // Normalize path separators for glob (use forward slashes)\n const normalizedPath = repo.localPath.replace(/\\\\/g, '/');\n const searchPattern = `${normalizedPath}/${pattern}`;\n\n const files = await glob(searchPattern, {\n ignore: ['**/node_modules/**', '**/dist/**', '**/build/**', '**/.git/**'],\n nodir: true,\n windowsPathsNoEscape: true,\n });\n\n return files;\n}\n\n/**\n * Find files in multiple repositories\n * @param repos - Array of repository info objects\n * @param pattern - Glob pattern\n * @returns Map of repo shorthand to files\n */\nexport async function findFilesInRepos(\n repos: GitHubRepoInfo[],\n pattern: string = '**/*.{tsx,jsx,ts,js}',\n): Promise<FilesByRepo> {\n const filesByRepo: FilesByRepo = {};\n\n for (const repo of repos) {\n const files = await findFilesInRepo(repo, pattern);\n filesByRepo[repo.shorthand] = {\n repo,\n files,\n count: files.length,\n };\n }\n\n return filesByRepo;\n}\n\n/**\n * Get repository statistics\n * @param repoPath - Path to repository\n * @returns Repository stats\n */\nexport async function getRepoStats(repoPath: string): Promise<RepoStats> {\n try {\n const packageJsonPath = path.join(repoPath, 'package.json');\n let packageJson: any = null;\n\n if (fs.existsSync(packageJsonPath)) {\n packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));\n }\n\n // Count files by type - normalize path for glob\n const normalizedPath = repoPath.replace(/\\\\/g, '/');\n const files = await glob(`${normalizedPath}/**/*.{tsx,jsx,ts,js}`, {\n ignore: ['**/node_modules/**', '**/dist/**', '**/build/**'],\n nodir: true,\n windowsPathsNoEscape: true,\n });\n\n const fileTypes = {\n tsx: 0,\n jsx: 0,\n ts: 0,\n js: 0,\n };\n\n files.forEach((file) => {\n const ext = path.extname(file).slice(1) as keyof typeof fileTypes;\n if (fileTypes.hasOwnProperty(ext)) {\n fileTypes[ext]++;\n }\n });\n\n return {\n packageJson,\n name: packageJson?.name || 'unknown',\n version: packageJson?.version || 'unknown',\n dependencies: packageJson?.dependencies || {},\n devDependencies: packageJson?.devDependencies || {},\n totalFiles: files.length,\n fileTypes,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n error: message,\n name: 'unknown',\n version: 'unknown',\n dependencies: {},\n devDependencies: {},\n totalFiles: 0,\n fileTypes: { tsx: 0, jsx: 0, ts: 0, js: 0 },\n };\n }\n}\n\n/**\n * Generate combined report from multiple repository analyses\n * @param analysisResults - Results from analyzing multiple repos\n * @returns Combined report\n */\nexport function generateCombinedReport(\n analysisResults: AnalysisResults,\n): CombinedReport {\n const combined: CombinedReport = {\n totalComponents: [],\n totalImports: [],\n componentsByRepo: {},\n componentFrequency: {},\n importFrequency: {},\n repoSummaries: [],\n };\n\n const totalComponentsSet = new Set<string>();\n const totalImportsSet = new Set<string>();\n\n Object.entries(analysisResults.repositories).forEach(\n ([repoName, repoData]) => {\n // Add to totals\n repoData.analysis.components.forEach((comp) =>\n totalComponentsSet.add(comp),\n );\n Object.keys(repoData.analysis.imports).forEach((imp) =>\n totalImportsSet.add(imp),\n );\n\n // Track components by repo\n combined.componentsByRepo[repoName] = repoData.analysis.components;\n\n // Aggregate component usage\n Object.entries(repoData.analysis.componentUsage).forEach(\n ([comp, count]) => {\n combined.componentFrequency[comp] =\n (combined.componentFrequency[comp] || 0) + count;\n },\n );\n\n // Aggregate import usage\n Object.entries(repoData.analysis.imports).forEach(([imp, data]) => {\n combined.importFrequency[imp] =\n (combined.importFrequency[imp] || 0) + data.count;\n });\n\n // Repo summary\n combined.repoSummaries.push({\n name: repoName,\n components: repoData.analysis.components.length,\n files: repoData.files.length,\n errors: repoData.analysis.errors.length,\n topComponents: Object.entries(repoData.analysis.componentUsage)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 5)\n .map(([comp, count]) => ({ component: comp, uses: count })),\n });\n },\n );\n\n combined.totalComponents = Array.from(totalComponentsSet);\n combined.totalImports = Array.from(totalImportsSet);\n\n return combined;\n}\n\n/**\n * Cleanup temporary directory\n * @param cleanup - Cleanup function from tmp\n * @param tmpDir - Temporary directory path\n * @param keepRepos - Whether to keep the repositories\n */\nexport function cleanupTempDir(\n cleanup: (() => void) | null,\n tmpDir: string,\n keepRepos: boolean = false,\n): void {\n if (!keepRepos && cleanup) {\n try {\n cleanup();\n console.log(chalk.gray('\\n🧹 Cleaned up temporary directory'));\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(chalk.yellow(`Warning: Failed to cleanup: ${message}`));\n }\n } else if (keepRepos && tmpDir) {\n console.log(chalk.blue(`\\nšŸ“ Repositories kept in: ${tmpDir}`));\n }\n}\n","import fs from 'fs';\nimport path from 'path';\nimport yaml from 'js-yaml';\nimport lockfile from '@yarnpkg/lockfile';\n\n/**\n * Lockfile parse result\n */\nexport interface LockfileResult {\n versions: Record<string, string>;\n lockfileType: 'npm' | 'yarn' | 'pnpm' | null;\n lockfilePath: string | null;\n found: boolean;\n}\n\n/**\n * Parse package-lock.json (npm/npm v7+)\n * @param lockFilePath - Path to package-lock.json\n * @returns Map of package names to versions\n */\nexport function parsePackageLock(lockFilePath: string): Record<string, string> {\n try {\n const content = fs.readFileSync(lockFilePath, 'utf8');\n const lockData = JSON.parse(content);\n const versions: Record<string, string> = {};\n\n // npm v7+ uses \"packages\" field\n if (lockData.packages) {\n Object.entries(lockData.packages).forEach(\n ([pkgPath, pkgData]: [string, any]) => {\n if (!pkgPath || pkgPath === '') return; // Skip root\n\n // Remove leading \"node_modules/\"\n const pkgName = pkgPath.replace(/^node_modules\\//, '');\n\n if (pkgData.version) {\n versions[pkgName] = pkgData.version;\n }\n },\n );\n }\n\n // npm v6 uses \"dependencies\" field\n if (lockData.dependencies && Object.keys(versions).length === 0) {\n function extractVersions(deps: any, prefix = ''): void {\n Object.entries(deps).forEach(([name, data]: [string, any]) => {\n const fullName = prefix ? `${prefix}/${name}` : name;\n if (data.version) {\n versions[fullName] = data.version;\n }\n if (data.dependencies) {\n extractVersions(data.dependencies, fullName);\n }\n });\n }\n extractVersions(lockData.dependencies);\n }\n\n return versions;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`Warning: Could not parse package-lock.json: ${message}`);\n return {};\n }\n}\n\n/**\n * Parse yarn.lock\n * @param lockFilePath - Path to yarn.lock\n * @returns Map of package names to versions\n */\nexport function parseYarnLock(lockFilePath: string): Record<string, string> {\n try {\n const content = fs.readFileSync(lockFilePath, 'utf8');\n const parsed = lockfile.parse(content);\n\n if (parsed.type !== 'success') {\n console.warn('Warning: Failed to parse yarn.lock');\n return {};\n }\n\n const versions: Record<string, string> = {};\n\n Object.entries(parsed.object).forEach(([key, value]: [string, any]) => {\n // Key format: \"package@^1.0.0\" or \"@scope/package@^1.0.0\"\n // Extract package name (without version specifier)\n let pkgName = key;\n\n // Handle scoped packages\n if (key.startsWith('@')) {\n const match = key.match(/^(@[^@]+\\/[^@]+)@/);\n if (match) {\n pkgName = match[1];\n }\n } else {\n const match = key.match(/^([^@]+)@/);\n if (match) {\n pkgName = match[1];\n }\n }\n\n if (value.version && (!versions[pkgName] || value.version)) {\n versions[pkgName] = value.version;\n }\n });\n\n return versions;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`Warning: Could not parse yarn.lock: ${message}`);\n return {};\n }\n}\n\n/**\n * Parse pnpm-lock.yaml\n * @param lockFilePath - Path to pnpm-lock.yaml\n * @returns Map of package names to versions\n */\nexport function parsePnpmLock(lockFilePath: string): Record<string, string> {\n try {\n const content = fs.readFileSync(lockFilePath, 'utf8');\n const lockData = yaml.load(content) as any;\n const versions: Record<string, string> = {};\n\n // pnpm v9+ uses \"importers\" field\n if (lockData.importers) {\n const rootImporter = lockData.importers['.'];\n if (rootImporter) {\n // Parse dependencies\n if (rootImporter.dependencies) {\n Object.entries(rootImporter.dependencies).forEach(\n ([name, data]: [string, any]) => {\n if (typeof data === 'object' && data.version) {\n versions[name] = data.version;\n }\n },\n );\n }\n // Parse devDependencies\n if (rootImporter.devDependencies) {\n Object.entries(rootImporter.devDependencies).forEach(\n ([name, data]: [string, any]) => {\n if (typeof data === 'object' && data.version) {\n versions[name] = data.version;\n }\n },\n );\n }\n }\n }\n\n // pnpm v6-8 uses \"packages\" field\n if (lockData.packages && Object.keys(versions).length === 0) {\n Object.keys(lockData.packages).forEach((key) => {\n // Key format: \"/@babel/core/7.22.5\" or \"/package/1.0.0\"\n const match = key.match(/\\/(.+?)\\/(\\d+\\.\\d+\\.\\d+.*?)(?:_|$)/);\n if (match) {\n const [, pkgName, version] = match;\n versions[pkgName] = version;\n }\n });\n }\n\n // pnpm v5 uses \"dependencies\" and \"specifiers\"\n if (lockData.dependencies && Object.keys(versions).length === 0) {\n Object.entries(lockData.dependencies).forEach(\n ([name, versionSpec]: [string, any]) => {\n // versionSpec format: \"1.0.0\" or \"link:../package\"\n if (\n typeof versionSpec === 'string' &&\n !versionSpec.startsWith('link:')\n ) {\n versions[name] = versionSpec;\n } else if (typeof versionSpec === 'object' && versionSpec.version) {\n versions[name] = versionSpec.version;\n }\n },\n );\n }\n\n return versions;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`Warning: Could not parse pnpm-lock.yaml: ${message}`);\n return {};\n }\n}\n\n/**\n * Find and parse the appropriate lockfile in a directory\n * @param projectPath - Path to the project directory\n * @returns Object with versions map and lockfile type\n */\nexport function findAndParseLockfile(projectPath: string): LockfileResult {\n const lockfiles = [\n {\n name: 'package-lock.json',\n parser: parsePackageLock,\n type: 'npm' as const,\n },\n { name: 'yarn.lock', parser: parseYarnLock, type: 'yarn' as const },\n { name: 'pnpm-lock.yaml', parser: parsePnpmLock, type: 'pnpm' as const },\n ];\n\n for (const { name, parser, type } of lockfiles) {\n const lockfilePath = path.join(projectPath, name);\n if (fs.existsSync(lockfilePath)) {\n const versions = parser(lockfilePath);\n return {\n versions,\n lockfileType: type,\n lockfilePath,\n found: true,\n };\n }\n }\n\n return {\n versions: {},\n lockfileType: null,\n lockfilePath: null,\n found: false,\n };\n}\n\n/**\n * Get the version of a specific package from lockfile\n * @param projectPath - Path to the project directory\n * @param packageName - Name of the package\n * @returns Version string or null if not found\n */\nexport function getPackageVersion(\n projectPath: string,\n packageName: string,\n): string | null {\n const { versions } = findAndParseLockfile(projectPath);\n return versions[packageName] || null;\n}\n\n/**\n * Get versions for multiple packages\n * @param projectPath - Path to the project directory\n * @param packageNames - Array of package names\n * @returns Map of package names to versions\n */\nexport function getPackageVersions(\n projectPath: string,\n packageNames: string[],\n): Record<string, string> {\n const { versions } = findAndParseLockfile(projectPath);\n const result: Record<string, string> = {};\n\n packageNames.forEach((pkgName) => {\n if (versions[pkgName]) {\n result[pkgName] = versions[pkgName];\n }\n });\n\n return result;\n}\n\n/**\n * Format component name with package version\n * @param componentName - Name of the component\n * @param packageName - Name of the package\n * @param projectPath - Path to the project directory\n * @returns Formatted string like \"Button from @mui/material@5.14.0\"\n */\nexport function formatComponentWithVersion(\n componentName: string,\n packageName: string,\n projectPath: string,\n): string {\n const version = getPackageVersion(projectPath, packageName);\n\n if (version) {\n return `${componentName} from ${packageName}@${version}`;\n }\n\n return `${componentName} from ${packageName}`;\n}\n","import fs from 'fs';\nimport path from 'path';\nimport { glob } from 'glob';\n\n/**\n * Options for finding files\n */\nexport interface FindFilesOptions {\n ignorePatterns?: string[];\n maxFiles?: number;\n cwd?: string;\n}\n\n/**\n * Find files matching a glob pattern\n * @param pattern - Glob pattern\n * @param options - Options for glob\n * @returns Array of file paths\n */\nexport async function findFiles(\n pattern: string,\n options: FindFilesOptions = {},\n): Promise<string[]> {\n const { ignorePatterns = [], maxFiles = 1000, cwd = process.cwd() } = options;\n\n const allFiles = await glob(pattern, {\n ignore: [\n '**/node_modules/**',\n '**/dist/**',\n '**/build/**',\n ...ignorePatterns,\n ],\n nodir: true,\n cwd,\n absolute: true,\n windowsPathsNoEscape: true,\n });\n\n // Filter to only React-related file types\n const reactFiles = allFiles.filter((file) => {\n const ext = path.extname(file);\n return ['.tsx', '.jsx', '.ts', '.js'].includes(ext);\n });\n\n // Limit number of files\n if (reactFiles.length > maxFiles) {\n console.warn(\n `Warning: Found ${reactFiles.length} files, limiting to ${maxFiles}`,\n );\n return reactFiles.slice(0, maxFiles);\n }\n\n return reactFiles;\n}\n\n/**\n * Read file content\n * @param filePath - Path to file\n * @returns File content\n */\nexport function readFile(filePath: string): string {\n return fs.readFileSync(filePath, 'utf8');\n}\n\n/**\n * Write file content\n * @param filePath - Path to file\n * @param content - Content to write\n */\nexport function writeFile(filePath: string, content: string): void {\n // Ensure directory exists\n const dir = path.dirname(filePath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n fs.writeFileSync(filePath, content, 'utf8');\n}\n\n/**\n * Check if file exists\n * @param filePath - Path to file\n * @returns True if file exists\n */\nexport function fileExists(filePath: string): boolean {\n return fs.existsSync(filePath);\n}\n\n/**\n * Get file extension\n * @param filePath - Path to file\n * @returns File extension (without dot)\n */\nexport function getFileExtension(filePath: string): string {\n return path.extname(filePath).slice(1);\n}\n\n/**\n * Check if file is a React file type\n * @param filePath - Path to file\n * @returns True if React file type\n */\nexport function isReactFile(filePath: string): boolean {\n const ext = getFileExtension(filePath);\n return ['tsx', 'jsx', 'ts', 'js'].includes(ext);\n}\n\n/**\n * Ensure directory exists\n * @param dirPath - Path to directory\n */\nexport function ensureDirectory(dirPath: string): void {\n if (!fs.existsSync(dirPath)) {\n fs.mkdirSync(dirPath, { recursive: true });\n }\n}\n\n/**\n * Get relative path from base directory\n * @param filePath - Absolute file path\n * @param basePath - Base directory path\n * @returns Relative path\n */\nexport function getRelativePath(filePath: string, basePath: string): string {\n return path.relative(basePath, filePath);\n}\n\n/**\n * Normalize path separators for cross-platform compatibility\n * @param filePath - Path to normalize\n * @returns Normalized path (forward slashes)\n */\nexport function normalizePath(filePath: string): string {\n return filePath.replace(/\\\\/g, '/');\n}\n\n/**\n * Get files by type from a directory\n * @param dirPath - Directory path\n * @param extensions - Array of extensions (e.g., ['.tsx', '.jsx'])\n * @returns Array of file paths\n */\nexport async function getFilesByType(\n dirPath: string,\n extensions: string[] = ['.tsx', '.jsx', '.ts', '.js'],\n): Promise<string[]> {\n const normalizedPath = normalizePath(dirPath);\n const pattern = `${normalizedPath}/**/*{${extensions.join(',')}}`;\n\n const files = await glob(pattern, {\n ignore: ['**/node_modules/**', '**/dist/**', '**/build/**'],\n nodir: true,\n windowsPathsNoEscape: true,\n });\n\n return files;\n}\n\n/**\n * Count files by extension in a directory\n * @param dirPath - Directory path\n * @returns Map of extensions to counts\n */\nexport async function countFilesByExtension(\n dirPath: string,\n): Promise<Record<string, number>> {\n const files = await getFilesByType(dirPath);\n const counts: Record<string, number> = {};\n\n files.forEach((file) => {\n const ext = getFileExtension(file);\n counts[ext] = (counts[ext] || 0) + 1;\n });\n\n return counts;\n}\n\n/**\n * Read JSON file\n * @param filePath - Path to JSON file\n * @returns Parsed JSON object\n */\nexport function readJsonFile<T = any>(filePath: string): T {\n const content = readFile(filePath);\n return JSON.parse(content) as T;\n}\n\n/**\n * Write JSON file\n * @param filePath - Path to JSON file\n * @param data - Data to write\n */\nexport function writeJsonFile(filePath: string, data: any): void {\n const content = JSON.stringify(data, null, 2);\n writeFile(filePath, content);\n}\n","import ora from 'ora';\nimport chalk from 'chalk';\nimport {\n createTempDir,\n cloneRepositories,\n findFilesInRepos,\n getRepoStats,\n generateCombinedReport,\n cleanupTempDir,\n GitHubRepoInfo,\n RepoStats,\n} from './utils/git-utils';\nimport { findAndParseLockfile, LockfileResult } from './utils/lockfile-parser';\nimport { readJsonFile } from './utils/file-utils';\n\n/**\n * Analysis options\n */\nexport interface AnalysisOptions {\n branch?: string;\n pattern?: string;\n depth?: number;\n keepRepos?: boolean;\n}\n\n/**\n * Analyzer interface (duck typing for compatibility with existing analyzers)\n */\nexport interface Analyzer {\n analyzeFile(filePath: string): AnalysisReport | null;\n}\n\n/**\n * Analysis report from a file\n */\nexport interface AnalysisReport {\n components: string[];\n patterns: {\n usage: {\n jsx: Array<{ component: string; count: number }>;\n };\n imports: {\n default: Array<{\n name?: string;\n local?: string;\n from?: string;\n source?: string;\n }>;\n named: Array<{\n name?: string;\n local?: string;\n from?: string;\n source?: string;\n }>;\n };\n };\n}\n\n/**\n * Repository analysis results\n */\nexport interface RepositoryAnalysisResult {\n files: string[];\n stats: RepoStats;\n lockfile: LockfileResult;\n analysis: {\n components: string[];\n imports: Record<\n string,\n {\n count: number;\n files: string[];\n source?: string;\n }\n >;\n componentUsage: Record<\n string,\n {\n count: number;\n files: string[];\n }\n >;\n errors: Array<{ file: string; error: string }>;\n };\n}\n\n/**\n * GitHub analysis results\n */\nexport interface GitHubAnalysisResults {\n repositories: Record<string, RepositoryAnalysisResult>;\n metadata: {\n analyzedAt: string;\n totalRepositories: number;\n failedClones: number;\n pattern: string;\n branch: string;\n repoStats: Record<string, RepoStats>;\n lockfiles: Record<string, LockfileResult>;\n };\n cloneErrors: Array<{ url: string; error: string }>;\n}\n\n/**\n * Enhanced component data\n */\nexport interface EnhancedComponentData {\n component: string;\n library: string;\n version: string;\n count: number;\n repos: Array<{ name: string; count: number }>;\n}\n\n/**\n * Full GitHub analysis report\n */\nexport interface GitHubAnalysisReport {\n metadata: {\n analyzedAt: string;\n totalRepositories: number;\n failedClones: number;\n pattern: string;\n branch: string;\n repoStats: Record<string, RepoStats>;\n lockfiles: Record<string, LockfileResult>;\n library: string;\n repositories: string[];\n };\n combined: {\n totalComponents: string[];\n totalImports: string[];\n componentsByRepo: Record<string, string[]>;\n componentFrequency: Record<string, number>;\n importFrequency: Record<string, number>;\n repoSummaries: Array<{\n name: string;\n components: number;\n files: number;\n errors: number;\n topComponents: Array<{ component: string; uses: number }>;\n }>;\n enhancedComponentFrequency: Record<string, EnhancedComponentData>;\n };\n repositories: Record<string, RepositoryAnalysisResult>;\n cloneErrors: Array<{ url: string; error: string }>;\n}\n\n/**\n * Config file structure\n */\nexport interface RepositoriesConfig {\n repositories: string[];\n}\n\n/**\n * Analyze multiple GitHub repositories\n * @param repoUrls - Array of repository URLs\n * @param analyzer - Analyzer instance\n * @param options - Analysis options\n * @returns Analysis results\n */\nexport async function analyzeGitHubRepositories(\n repoUrls: string[],\n analyzer: Analyzer,\n options: AnalysisOptions = {},\n): Promise<GitHubAnalysisResults> {\n const {\n branch = 'main',\n pattern = '**/*.{tsx,jsx,ts,js}',\n depth = 1,\n keepRepos = false,\n } = options;\n\n console.log(chalk.bold.cyan('\\nšŸ” GitHub Repository Analysis\\n'));\n console.log(chalk.gray(`Repositories to analyze: ${repoUrls.length}`));\n console.log(chalk.gray(`Pattern: ${pattern}`));\n console.log(chalk.gray(`Branch: ${branch}\\n`));\n\n // Create temporary directory\n const { path: tmpDir, cleanup } = await createTempDir();\n\n try {\n // Clone repositories\n const { clonedRepos, errors: cloneErrors } = await cloneRepositories(\n repoUrls,\n tmpDir,\n { branch, depth },\n );\n\n // Find files in repositories\n console.log(chalk.bold('\\nšŸ“ Finding files in repositories...\\n'));\n const filesByRepo = await findFilesInRepos(clonedRepos, pattern);\n\n // Display file counts\n Object.entries(filesByRepo).forEach(([repoName, data]) => {\n console.log(` ${chalk.cyan(repoName)}: ${data.count} files`);\n });\n\n // Get repository statistics and parse lockfiles\n console.log(chalk.bold('\\nšŸ“Š Gathering repository statistics...\\n'));\n const repoStats: Record<string, RepoStats> = {};\n const lockfileData: Record<string, LockfileResult> = {};\n\n for (const repo of clonedRepos) {\n if (!repo.localPath) continue;\n\n const stats = await getRepoStats(repo.localPath);\n repoStats[repo.shorthand] = stats;\n\n // Parse lockfile for version information\n const lockfileInfo = findAndParseLockfile(repo.localPath);\n lockfileData[repo.shorthand] = lockfileInfo;\n\n console.log(\n ` ${chalk.cyan(repo.shorthand)}: ${stats.name}@${stats.version} (${stats.totalFiles} files)`,\n );\n\n if (lockfileInfo.found) {\n console.log(\n chalk.gray(\n ` Lockfile: ${lockfileInfo.lockfileType} (${Object.keys(lockfileInfo.versions).length} packages)`,\n ),\n );\n }\n }\n\n // Analyze each repository\n console.log(chalk.bold('\\nšŸ”¬ Analyzing repositories...\\n'));\n const results: Record<string, RepositoryAnalysisResult> = {};\n const spinner = ora('Analyzing...').start();\n\n for (const [repoName, repoData] of Object.entries(filesByRepo)) {\n spinner.text = `Analyzing ${repoName}...`;\n\n const repoResults: RepositoryAnalysisResult = {\n files: repoData.files,\n stats: repoStats[repoName],\n lockfile: lockfileData[repoName],\n analysis: {\n components: [],\n imports: {},\n componentUsage: {},\n errors: [],\n },\n };\n\n const componentsSet = new Set<string>();\n const componentUsageTemp = new Map<\n string,\n { count: number; files: Set<string> }\n >();\n const importsTemp = new Map<\n string,\n { count: number; files: Set<string>; source?: string }\n >();\n\n // Analyze each file\n for (const file of repoData.files) {\n try {\n const report = analyzer.analyzeFile(file);\n if (report) {\n // Aggregate components\n report.components.forEach((comp) => componentsSet.add(comp));\n\n // Aggregate component usage with version info\n report.patterns.usage.jsx.forEach((usage) => {\n const existing = componentUsageTemp.get(usage.component);\n if (!existing) {\n componentUsageTemp.set(usage.component, {\n count: usage.count,\n files: new Set([file]),\n });\n } else {\n existing.count += usage.count;\n existing.files.add(file);\n }\n });\n\n // Track imports with source\n [\n ...report.patterns.imports.default,\n ...report.patterns.imports.named,\n ].forEach((imp) => {\n const name = imp.name || imp.local || '';\n const source = imp.source || imp.from;\n\n const existing = importsTemp.get(name);\n if (!existing) {\n importsTemp.set(name, {\n count: 1,\n files: new Set([file]),\n source: source,\n });\n } else {\n existing.count++;\n existing.files.add(file);\n }\n });\n }\n } catch (error) {\n const message =\n error instanceof Error ? error.message : String(error);\n repoResults.analysis.errors.push({\n file: file,\n error: message,\n });\n }\n }\n\n // Convert Sets to Arrays for JSON serialization\n repoResults.analysis.components = Array.from(componentsSet);\n\n componentUsageTemp.forEach((value, key) => {\n repoResults.analysis.componentUsage[key] = {\n count: value.count,\n files: Array.from(value.files),\n };\n });\n\n importsTemp.forEach((value, key) => {\n repoResults.analysis.imports[key] = {\n count: value.count,\n files: Array.from(value.files),\n source: value.source,\n };\n });\n\n results[repoName] = repoResults;\n spinner.succeed(\n chalk.green(\n `āœ“ Analyzed ${repoName}: ${repoResults.analysis.components.length} components found`,\n ),\n );\n spinner.start();\n }\n\n spinner.stop();\n\n // Return comprehensive results\n const analysisResults: GitHubAnalysisResults = {\n repositories: results,\n metadata: {\n analyzedAt: new Date().toISOString(),\n totalRepositories: clonedRepos.length,\n failedClones: cloneErrors.length,\n pattern: pattern,\n branch: branch,\n repoStats: repoStats,\n lockfiles: lockfileData,\n },\n cloneErrors,\n };\n\n // Cleanup\n cleanupTempDir(cleanup, tmpDir, keepRepos);\n\n return analysisResults;\n } catch (error) {\n // Cleanup on error\n cleanupTempDir(cleanup, tmpDir, false);\n throw error;\n }\n}\n\n/**\n * Load repositories from config file\n * @param configPath - Path to config file\n * @returns Array of repository URLs\n */\nexport function loadRepositoriesFromConfig(configPath: string): string[] {\n try {\n const config = readJsonFile<RepositoriesConfig>(configPath);\n return config.repositories || [];\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`Failed to load config file: ${message}`);\n }\n}\n\n/**\n * Enhance component data with version information\n * @param componentUsage - Component usage data\n * @param lockfileData - Lockfile version data\n * @param libraryName - Name of the library\n * @returns Enhanced component data\n */\nexport function enhanceComponentsWithVersions(\n componentUsage: Record<string, { count: number; files: string[] }>,\n lockfileData: LockfileResult,\n libraryName: string,\n): Record<string, any> {\n const enhanced: Record<string, any> = {};\n\n Object.entries(componentUsage).forEach(([componentName, usage]) => {\n const version = lockfileData.versions?.[libraryName];\n const displayName = version\n ? `${componentName} from ${libraryName}@${version}`\n : `${componentName} from ${libraryName}`;\n\n enhanced[displayName] = {\n component: componentName,\n library: libraryName,\n version: version || 'unknown',\n ...usage,\n };\n });\n\n return enhanced;\n}\n\n/**\n * Create full GitHub analysis report\n * @param analysisResults - Results from repository analysis\n * @param libraryName - Name of the library being analyzed\n * @returns Full report with enhanced data\n */\nexport function createGitHubAnalysisReport(\n analysisResults: GitHubAnalysisResults,\n libraryName: string,\n): GitHubAnalysisReport {\n // Generate combined report\n const combined = generateCombinedReport(analysisResults);\n\n // Enhance components with version information from each repo\n const enhancedComponentFrequency: Record<string, EnhancedComponentData> = {};\n\n Object.entries(analysisResults.repositories).forEach(\n ([repoName, repoData]) => {\n const lockfileData = repoData.lockfile || {};\n const version = lockfileData.versions?.[libraryName];\n\n Object.entries(repoData.analysis.componentUsage).forEach(\n ([component, usage]) => {\n const key = version\n ? `${component} from ${libraryName}@${version}`\n : `${component} from ${libraryName}`;\n\n if (!enhancedComponentFrequency[key]) {\n enhancedComponentFrequency[key] = {\n component,\n library: libraryName,\n version: version || 'unknown',\n count: 0,\n repos: [],\n };\n }\n\n enhancedComponentFrequency[key].count += usage.count || 0;\n enhancedComponentFrequency[key].repos.push({\n name: repoName,\n count: usage.count || 0,\n });\n },\n );\n },\n );\n\n return {\n metadata: {\n ...analysisResults.metadata,\n library: libraryName,\n repositories: Object.keys(analysisResults.repositories),\n },\n combined: {\n ...combined,\n enhancedComponentFrequency,\n },\n repositories: analysisResults.repositories,\n cloneErrors: analysisResults.cloneErrors,\n };\n}\n","import chalk from 'chalk';\nimport Table from 'cli-table3';\nimport fs from 'fs';\nimport path from 'path';\n\n/**\n * Formatting options for console reports\n */\nexport interface ConsoleReportOptions {\n top?: number;\n summaryOnly?: boolean;\n}\n\n/**\n * Aggregated report structure\n */\nexport interface AggregatedReport {\n metadata: {\n timestamp: string;\n library: string;\n filesAnalyzed: number;\n filesWithErrors?: number;\n pattern?: string;\n totalFiles?: number;\n };\n aggregated: {\n componentFrequency: Record<string, number>;\n patternFrequency: Record<string, number>;\n fileComplexity?: Record<string, { score: number; level: string }>;\n errors?: Array<{ file: string; error: string }>;\n };\n}\n\n/**\n * GitHub report structure\n */\nexport interface GitHubReport {\n metadata: {\n library: string;\n repositories: string[];\n };\n combined: {\n totalComponents: string[];\n totalImports: string[];\n componentFrequency: Record<string, number>;\n componentsByRepo: Record<string, string[]>;\n repoSummaries: Array<{\n name: string;\n components: number;\n files: number;\n errors: number;\n topComponents: Array<{ component: string; uses: number }>;\n }>;\n };\n repositories: Record<string, any>;\n}\n\n/**\n * Comparison report structure\n */\nexport interface ComparisonReport {\n metadata: {\n timestamp: string;\n pattern: string;\n filesAnalyzed: number;\n libraries: string[];\n };\n libraries: Array<{\n name: string;\n componentsFound: number;\n totalUsagePatterns: number;\n topComponents?: Array<{ component: string; uses: number }>;\n }>;\n}\n\n/**\n * Component data structure\n */\nexport interface ComponentData {\n [componentName: string]: {\n uses: number;\n files: string[];\n props?: number;\n spreadProps?: boolean;\n propsDetails?: Record<string, any>;\n };\n}\n\n/**\n * Import data structure\n */\nexport interface ImportData {\n [importName: string]: {\n count: number;\n files: string[];\n type?: string;\n };\n}\n\n/**\n * Table formatting options\n */\nexport interface TableOptions {\n componentData?: ComponentData;\n sortBy?: 'uses' | 'files' | 'props' | 'name';\n top?: number;\n showProps?: boolean;\n}\n\n/**\n * Format aggregated report for console output\n * @param report - The aggregated report data\n * @param options - Formatting options\n */\nexport function formatConsoleReport(\n report: AggregatedReport,\n options: ConsoleReportOptions = {},\n): void {\n const { metadata, aggregated } = report;\n\n console.log(chalk.bold.cyan('\\n' + '='.repeat(80)));\n console.log(chalk.bold.cyan(' šŸ“Š REACT COMPONENT USAGE ANALYSIS REPORT'));\n console.log(chalk.bold.cyan('='.repeat(80) + '\\n'));\n\n // Metadata\n console.log(chalk.bold('šŸ“‹ ANALYSIS SUMMARY:'));\n console.log(\n chalk.gray(` Timestamp: ${new Date(metadata.timestamp).toLocaleString()}`),\n );\n console.log(chalk.gray(` Library: ${chalk.cyan(metadata.library)}`));\n console.log(chalk.gray(` Files Analyzed: ${metadata.filesAnalyzed}`));\n if (metadata.filesWithErrors && metadata.filesWithErrors > 0) {\n console.log(\n chalk.yellow(` Files with Errors: ${metadata.filesWithErrors}`),\n );\n }\n\n // Top components\n const topComponents = Object.entries(aggregated.componentFrequency)\n .sort((a, b) => b[1] - a[1])\n .slice(0, options.top || 10);\n\n if (topComponents.length > 0) {\n console.log(chalk.bold('\\nšŸ† TOP COMPONENTS:'));\n topComponents.forEach(([comp, count], idx) => {\n const rank = idx + 1;\n const emoji =\n rank === 1 ? 'šŸ„‡' : rank === 2 ? '🄈' : rank === 3 ? 'šŸ„‰' : ' ';\n console.log(\n ` ${emoji} ${rank}. ${chalk.green(comp)}: ${chalk.yellow(count)} uses`,\n );\n });\n }\n\n // Pattern frequency\n const topPatterns = Object.entries(aggregated.patternFrequency)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 5);\n\n if (topPatterns.length > 0 && !options.summaryOnly) {\n console.log(chalk.bold('\\nšŸ” USAGE PATTERNS:'));\n topPatterns.forEach(([pattern, count]) => {\n console.log(` ${chalk.cyan(pattern)}: ${count} occurrences`);\n });\n }\n\n // Complexity distribution\n if (\n aggregated.fileComplexity &&\n Object.keys(aggregated.fileComplexity).length > 0\n ) {\n console.log(chalk.bold('\\nšŸ’” COMPLEXITY DISTRIBUTION:'));\n const complexityLevels: Record<string, number> = {\n Simple: 0,\n Moderate: 0,\n Complex: 0,\n 'Very Complex': 0,\n 'Extremely Complex': 0,\n };\n\n Object.values(aggregated.fileComplexity).forEach((data) => {\n if (complexityLevels.hasOwnProperty(data.level)) {\n complexityLevels[data.level]++;\n }\n });\n\n Object.entries(complexityLevels).forEach(([level, count]) => {\n if (count > 0) {\n const percentage = Math.round((count / metadata.filesAnalyzed) * 100);\n const bar = createBar(percentage, 20);\n console.log(` ${level.padEnd(18)} ${bar} ${percentage}%`);\n }\n });\n }\n\n // Errors\n if (aggregated.errors && aggregated.errors.length > 0) {\n console.log(chalk.bold.red('\\nāš ļø ERRORS:'));\n aggregated.errors.slice(0, 5).forEach((error) => {\n console.log(chalk.red(` ${error.file}: ${error.error}`));\n });\n if (aggregated.errors.length > 5) {\n console.log(\n chalk.gray(` ... and ${aggregated.errors.length - 5} more errors`),\n );\n }\n }\n\n console.log(chalk.bold.cyan('\\n' + '='.repeat(80) + '\\n'));\n}\n\n/**\n * Format GitHub analysis report for console output\n * @param report - The GitHub analysis report\n * @param options - Formatting options\n */\nexport function formatGitHubReport(\n report: GitHubReport,\n options: ConsoleReportOptions = {},\n): void {\n const { metadata, combined, repositories } = report;\n\n console.log(chalk.bold.cyan('\\n' + '='.repeat(80)));\n console.log(chalk.bold.cyan(' šŸš€ GITHUB REPOSITORIES ANALYSIS REPORT'));\n console.log(chalk.bold.cyan('='.repeat(80) + '\\n'));\n\n // Summary\n console.log(chalk.bold('šŸ“ˆ SUMMARY:'));\n console.log(chalk.gray(` Library: ${chalk.cyan(metadata.library)}`));\n console.log(\n chalk.gray(` Repositories Analyzed: ${metadata.repositories.length}`),\n );\n console.log(\n chalk.gray(` Total Components Found: ${combined.totalComponents.length}`),\n );\n console.log(\n chalk.gray(` Total Imports Found: ${combined.totalImports.length}`),\n );\n\n // Top components across all repos\n const topComponents = Object.entries(combined.componentFrequency)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 10);\n\n if (topComponents.length > 0) {\n console.log(chalk.bold('\\nšŸ† TOP COMPONENTS (Across All Repos):'));\n topComponents.forEach(([comp, count], idx) => {\n const rank = idx + 1;\n const emoji =\n rank === 1 ? 'šŸ„‡' : rank === 2 ? '🄈' : rank === 3 ? 'šŸ„‰' : ' ';\n console.log(\n ` ${emoji} ${rank}. ${chalk.green(comp)}: ${chalk.yellow(count)} uses`,\n );\n });\n }\n\n // Repository summaries\n if (combined.repoSummaries && combined.repoSummaries.length > 0) {\n console.log(chalk.bold('\\nšŸ“¦ REPOSITORY SUMMARIES:\\n'));\n combined.repoSummaries.forEach((summary, idx) => {\n console.log(` ${chalk.bold(idx + 1 + '.')} ${chalk.cyan(summary.name)}`);\n console.log(` Components: ${summary.components}`);\n console.log(` Files: ${summary.files}`);\n if (summary.topComponents && summary.topComponents.length > 0) {\n console.log(` Top Components:`);\n summary.topComponents.slice(0, 3).forEach((comp) => {\n console.log(` - ${comp.component}: ${comp.uses} uses`);\n });\n }\n console.log('');\n });\n }\n\n // Component distribution\n console.log(chalk.bold('šŸ” COMPONENT DISTRIBUTION:'));\n Object.entries(combined.componentsByRepo).forEach(([repo, components]) => {\n console.log(\n ` ${chalk.cyan(repo)}: ${components.length} unique components`,\n );\n });\n\n console.log(chalk.bold.cyan('\\n' + '='.repeat(80)));\n\n // Tips\n console.log(chalk.bold('\\nšŸ’” TIPS:'));\n console.log(' • Use --keep-repos to inspect cloned repositories locally');\n console.log(' • Use --branch <name> to analyze different branches');\n console.log(' • Use --pattern to customize which files to analyze');\n console.log(' • Use --config <file> to load repositories from JSON file');\n console.log(' • JSON report contains detailed per-repo analysis');\n\n // Config example\n console.log(chalk.bold('\\nšŸ“ CONFIG FILE FORMAT:'));\n console.log(\n chalk.gray(` {\n \"repositories\": [\n \"owner/repo1\",\n \"owner/repo2\",\n \"https://github.com/owner/repo3\"\n ]\n }`),\n );\n\n console.log('');\n}\n\n/**\n * Format comparison report for console output\n * @param report - The comparison report\n */\nexport function formatComparisonReport(report: ComparisonReport): void {\n console.log(chalk.bold.cyan('\\nšŸ“Š LIBRARY COMPARISON REPORT\\n'));\n\n report.libraries.forEach((lib, idx) => {\n const rank = idx + 1;\n const emoji =\n rank === 1 ? 'šŸ„‡' : rank === 2 ? '🄈' : rank === 3 ? 'šŸ„‰' : ' ';\n\n console.log(`${emoji} ${chalk.bold(lib.name)}`);\n console.log(` Components Found: ${chalk.yellow(lib.componentsFound)}`);\n console.log(\n ` Total Usage Patterns: ${chalk.cyan(lib.totalUsagePatterns)}`,\n );\n\n if (lib.topComponents && lib.topComponents.length > 0) {\n console.log(` Top Components:`);\n lib.topComponents.forEach((comp) => {\n console.log(` - ${chalk.green(comp.component)}: ${comp.uses} uses`);\n });\n }\n console.log('');\n });\n}\n\n/**\n * Format table output for components\n * @param data - Component data\n * @param options - Table options\n * @returns Formatted table string\n */\nexport function formatComponentTable(\n data: ComponentData,\n options: TableOptions = {},\n): string {\n const { sortBy = 'uses', top = 20, showProps = false } = options;\n\n const table = new Table({\n head: [\n chalk.cyan('Component'),\n chalk.cyan('Uses'),\n chalk.cyan('Files'),\n ...(showProps ? [chalk.cyan('Props'), chalk.cyan('Spread')] : []),\n ],\n colWidths: [30, 8, 8, ...(showProps ? [8, 8] : [])],\n style: { head: ['cyan'], border: ['gray'] },\n });\n\n // Sort data\n const sortedData = Object.entries(data)\n .sort((a, b) => {\n const [nameA, dataA] = a;\n const [nameB, dataB] = b;\n\n if (sortBy === 'uses') return dataB.uses - dataA.uses;\n if (sortBy === 'files') return dataB.files.length - dataA.files.length;\n if (sortBy === 'props') return (dataB.props || 0) - (dataA.props || 0);\n return nameA.localeCompare(nameB);\n })\n .slice(0, top);\n\n // Add rows\n sortedData.forEach(([name, itemData]) => {\n const row: string[] = [\n name,\n itemData.uses.toString(),\n itemData.files.length.toString(),\n ];\n\n if (showProps) {\n row.push((itemData.props || 0).toString());\n row.push(itemData.spreadProps ? chalk.yellow('Yes') : chalk.gray('No'));\n }\n\n table.push(row);\n });\n\n return table.toString();\n}\n\n/**\n * Format import table\n * @param importData - Import data\n * @param options - Table options\n * @returns Formatted table string\n */\nexport function formatImportTable(\n importData: ImportData,\n options: { sortBy?: 'count' | 'name'; top?: number } = {},\n): string {\n const { sortBy = 'count', top = 20 } = options;\n\n const table = new Table({\n head: [\n chalk.cyan('Import'),\n chalk.cyan('Count'),\n chalk.cyan('Files'),\n chalk.cyan('Type'),\n ],\n colWidths: [30, 8, 8, 12],\n style: { head: ['cyan'], border: ['gray'] },\n });\n\n const sortedData = Object.entries(importData)\n .sort((a, b) => {\n if (sortBy === 'count') return b[1].count - a[1].count;\n return a[0].localeCompare(b[0]);\n })\n .slice(0, top);\n\n sortedData.forEach(([name, data]) => {\n table.push([\n name,\n data.count.toString(),\n data.files.length.toString(),\n data.type || 'named',\n ]);\n });\n\n return table.toString();\n}\n\n/**\n * Create ASCII bar chart\n * @param percentage - Percentage value (0-100)\n * @param width - Width of the bar\n * @returns ASCII bar\n */\nexport function createBar(percentage: number, width: number = 20): string {\n const filled = Math.round((percentage / 100) * width);\n const empty = width - filled;\n return chalk.green('ā–ˆ'.repeat(filled)) + chalk.gray('ā–‘'.repeat(empty));\n}\n\n/**\n * Get complexity icon\n * @param level - Complexity level\n * @returns Icon\n */\nexport function getComplexityIcon(level: string): string {\n const icons: Record<string, string> = {\n Simple: 'āœ…',\n Moderate: 'āš ļø',\n Complex: 'šŸ”¶',\n 'Very Complex': 'šŸ”“',\n 'Extremely Complex': 'šŸ’€',\n };\n return icons[level] || 'ā“';\n}\n\n/**\n * Format JSON output with metadata\n * @param data - Data to format\n * @param outputPath - Path to save JSON file\n */\nexport function saveJsonReport(data: any, outputPath: string): void {\n // Ensure directory exists\n const dir = path.dirname(outputPath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n // Write JSON file\n fs.writeFileSync(outputPath, JSON.stringify(data, null, 2));\n console.log(chalk.blue(`\\nšŸ“„ JSON report saved to: ${outputPath}`));\n}\n","import chalk from 'chalk';\nimport ora from 'ora';\nimport { ReactComponentUsageAnalyzer } from '../parser';\nimport { FocusedUsageAnalyzer } from '../analyze-usage';\nimport {\n analyzeGitHubRepositories,\n loadRepositoriesFromConfig,\n createGitHubAnalysisReport,\n} from '../github-analysis';\nimport { formatGitHubReport, saveJsonReport } from '../utils/formatters';\nimport { saveReport } from './shared';\n\ninterface GithubOptions {\n library: string;\n config?: string;\n output?: string;\n format: 'json' | 'console' | 'both';\n complexity?: boolean;\n branch?: string;\n pattern?: string;\n depth?: string;\n keepRepos?: boolean;\n}\n\nexport async function githubCommand(\n repos: string[],\n options: GithubOptions,\n): Promise<void> {\n const spinner = ora('Initializing GitHub analyzer...').start();\n\n try {\n // Load repositories from config file or arguments\n let repoList = repos || [];\n\n if (options.config) {\n spinner.text = `Loading repositories from ${options.config}...`;\n try {\n repoList = loadRepositoriesFromConfig(options.config);\n spinner.succeed(\n chalk.green(`Loaded ${repoList.length} repositories from config`),\n );\n spinner.start();\n } catch (error: any) {\n spinner.fail(chalk.red(`Failed to load config file: ${error.message}`));\n process.exit(1);\n }\n }\n\n if (repoList.length === 0) {\n spinner.fail(\n chalk.red(\n 'No repositories specified. Use arguments or --config <file>',\n ),\n );\n console.log(\n chalk.yellow('\\nExample: node cli.js github owner/repo1 owner/repo2'),\n );\n console.log(chalk.yellow('Or: node cli.js github --config repos.json'));\n process.exit(1);\n }\n\n spinner.succeed(chalk.green('GitHub analyzer initialized'));\n\n // Create analyzer instance\n const analyzer = options.complexity\n ? new FocusedUsageAnalyzer(options.library)\n : new ReactComponentUsageAnalyzer(options.library);\n\n // Analyze repositories\n const results = await analyzeGitHubRepositories(repoList, analyzer, {\n branch: options.branch,\n pattern: options.pattern,\n depth: parseInt(options.depth || '1'),\n keepRepos: options.keepRepos,\n });\n\n // Create full report with enhanced data\n const fullReport = createGitHubAnalysisReport(results, options.library);\n\n // Add command type to metadata\n fullReport.metadata = {\n ...fullReport.metadata,\n commandType: 'github',\n timestamp: new Date().toISOString(),\n };\n\n // Save JSON if requested\n if (options.format === 'json' || options.format === 'both') {\n saveReport({\n data: fullReport,\n commandType: 'github',\n outputPath: options.output,\n format: options.format,\n });\n }\n\n // Display console output\n if (options.format === 'console' || options.format === 'both') {\n formatGitHubReport(fullReport, options);\n }\n } catch (error: any) {\n spinner.fail(chalk.red('GitHub analysis failed: ' + error.message));\n console.error(error);\n process.exit(1);\n }\n}\n","#!/usr/bin/env node\n\nimport { Command } from 'commander';\nimport { glob } from 'glob';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport fs from 'fs';\nimport path from 'path';\nimport Table from 'cli-table3';\nimport { ReactComponentUsageAnalyzer } from './parser';\nimport { FocusedUsageAnalyzer } from './analyze-usage';\nimport { analyzeCommand, compareCommand, githubCommand } from './commands';\n\nconst program = new Command();\n\n// CLI Configuration\nprogram\n .name('react-usage-analyzer')\n .description('Analyze React component usage patterns in your codebase')\n .version('1.0.0');\n\n// Analyze command\nprogram\n .command('analyze')\n .description(\n 'Analyze component usage patterns in files matching a glob pattern',\n )\n .argument(\n '<pattern>',\n 'Glob pattern for files to analyze (e.g., \"src/**/*.tsx\")',\n )\n .option(\n '-l, --library <name>',\n 'Library name to analyze (e.g., @mui/material)',\n '@design-system/foundation',\n )\n .option(\n '-o, --output <file>',\n 'Output file path for JSON report (defaults to timestamped filename)',\n )\n .option(\n '-f, --format <type>',\n 'Output format: json, console, or both',\n 'both',\n )\n .option('-c, --complexity', 'Include complexity analysis', false)\n .option(\n '-s, --summary-only',\n 'Show only summary, not detailed patterns',\n false,\n )\n .option(\n '--ignore <patterns...>',\n 'Glob patterns to ignore (e.g., \"**/*.test.tsx\")',\n [],\n )\n .option('--max-files <number>', 'Maximum number of files to analyze', '1000')\n .action(async (pattern, options) => {\n await analyzeCommand(pattern, options);\n });\n\n// Compare command\nprogram\n .command('compare')\n .description('Compare usage patterns across multiple libraries')\n .argument('<pattern>', 'Glob pattern for files to analyze')\n .option('-l, --libraries <names...>', 'Library names to compare', [\n '@mui/material',\n 'antd',\n '@chakra-ui/react',\n ])\n .option(\n '-o, --output <file>',\n 'Output file path for comparison report (defaults to timestamped filename)',\n )\n .option(\n '-f, --format <type>',\n 'Output format: json, console, or both',\n 'both',\n )\n .action(async (pattern, options) => {\n await compareCommand(pattern, options);\n });\n\n// Summary command\nprogram\n .command('summary')\n .description('Generate a quick summary of component usage')\n .argument('<pattern>', 'Glob pattern for files to analyze')\n .option(\n '-l, --library <name>',\n 'Library name to analyze',\n '@design-system/foundation',\n )\n .option('--top <number>', 'Number of top components to show', '10')\n .action(async (pattern, options) => {\n await summaryCommand(pattern, options);\n });\n\n// Patterns command\nprogram\n .command('patterns')\n .description('List all detected usage patterns')\n .argument('<pattern>', 'Glob pattern for files to analyze')\n .option(\n '-l, --library <name>',\n 'Library name to analyze',\n '@design-system/foundation',\n )\n .option('--sort <by>', 'Sort by: frequency, complexity, or name', 'frequency')\n .action(async (pattern, options) => {\n await patternsCommand(pattern, options);\n });\n\n// Stats command\nprogram\n .command('stats')\n .description('Show detailed statistics about component usage')\n .argument('<pattern>', 'Glob pattern for files to analyze')\n .option(\n '-l, --library <name>',\n 'Library name to analyze',\n '@design-system/foundation',\n )\n .option('--chart', 'Show ASCII charts', false)\n .action(async (pattern, options) => {\n await statsCommand(pattern, options);\n });\n\n// Table command\nprogram\n .command('table')\n .description('Show components and imports in table format')\n .argument('<pattern>', 'Glob pattern for files to analyze')\n .option(\n '-l, --library <name>',\n 'Library name to analyze',\n '@design-system/foundation',\n )\n .option('-s, --sort <by>', 'Sort by: uses, name, files, or props', 'uses')\n .option('-t, --top <number>', 'Number of top items to show', '20')\n .option('--props', 'Show props analysis', false)\n .action(async (pattern, options) => {\n await tableCommand(pattern, options);\n });\n\n// GitHub command\nprogram\n .command('github')\n .description('Analyze GitHub repositories')\n .argument(\n '[repos...]',\n 'GitHub repository URLs or owner/repo format (or use --config)',\n )\n .option(\n '-l, --library <name>',\n 'Library name to analyze',\n '@design-system/foundation',\n )\n .option('-b, --branch <name>', 'Branch to analyze', 'main')\n .option(\n '-p, --pattern <glob>',\n 'File pattern to analyze',\n '**/*.{tsx,jsx,ts,js}',\n )\n .option(\n '-o, --output <file>',\n 'Output JSON file (defaults to timestamped filename)',\n )\n .option(\n '-f, --format <type>',\n 'Output format: json, console, or both',\n 'both',\n )\n .option('--keep-repos', 'Keep cloned repositories after analysis', false)\n .option('--depth <number>', 'Clone depth', '1')\n .option('-c, --complexity', 'Include complexity analysis', false)\n .option('--config <file>', 'Path to config file with repository list')\n .action(async (repos, options) => {\n await githubCommand(repos, options);\n });\n\n// Main analyze command implementation\n// Command implementations are now in src/commands/\n\n// Summary command implementation\nasync function summaryCommand(pattern, options) {\n const spinner = ora('Generating summary...').start();\n\n try {\n const files = await findFiles(pattern, [], 1000);\n\n if (files.length === 0) {\n spinner.fail(chalk.red('No files found'));\n return;\n }\n\n const analyzer = new ReactComponentUsageAnalyzer(options.library);\n const componentUsage = {};\n let totalFiles = 0;\n\n for (const file of files) {\n try {\n const report = analyzer.analyzeFile(file);\n if (report) {\n totalFiles++;\n report.patterns.usage.jsx.forEach((usage) => {\n if (!componentUsage[usage.component]) {\n componentUsage[usage.component] = { count: 0, files: new Set() };\n }\n componentUsage[usage.component].count += usage.count;\n componentUsage[usage.component].files.add(file);\n });\n }\n } catch (error) {\n // Skip\n }\n }\n\n spinner.succeed(chalk.green('Summary generated'));\n\n console.log(chalk.bold('\\nšŸ“Š COMPONENT USAGE SUMMARY\\n'));\n console.log(chalk.gray(`Library: ${options.library}`));\n console.log(chalk.gray(`Files analyzed: ${totalFiles}\\n`));\n\n const topN = parseInt(options.top);\n const sorted = Object.entries(componentUsage)\n .map(([comp, data]) => ({\n comp,\n count: data.count,\n files: data.files.size,\n }))\n .sort((a, b) => b.count - a.count)\n .slice(0, topN);\n\n console.log(chalk.bold(`Top ${topN} Components:`));\n sorted.forEach((item, index) => {\n const rank = index + 1;\n const emoji =\n rank === 1 ? 'šŸ„‡' : rank === 2 ? '🄈' : rank === 3 ? 'šŸ„‰' : ' ';\n console.log(\n `${emoji} ${rank}. ${chalk.cyan(item.comp)}: ${chalk.yellow(item.count)} uses in ${chalk.green(item.files)} files`,\n );\n });\n } catch (error) {\n spinner.fail(chalk.red('Summary failed: ' + error.message));\n }\n}\n\n// Patterns command implementation\nasync function patternsCommand(pattern, options) {\n const spinner = ora('Analyzing patterns...').start();\n\n try {\n const files = await findFiles(pattern, [], 1000);\n\n if (files.length === 0) {\n spinner.fail(chalk.red('No files found'));\n return;\n }\n\n const analyzer = new FocusedUsageAnalyzer(options.library);\n const patternStats = {};\n\n for (const file of files) {\n try {\n const report = analyzer.analyzeFile(file);\n if (report) {\n const analysis = analyzer.classifyUsage(report);\n\n analysis.foundPatterns.forEach((data, patternName) => {\n if (!patternStats[patternName]) {\n patternStats[patternName] = {\n count: 0,\n complexity: data.complexity,\n files: new Set(),\n };\n }\n patternStats[patternName].count += data.count;\n patternStats[patternName].files.add(file);\n });\n }\n } catch (error) {\n // Skip\n }\n }\n\n spinner.succeed(chalk.green('Pattern analysis complete'));\n\n console.log(chalk.bold('\\nšŸ” USAGE PATTERNS DETECTED\\n'));\n\n let sorted = Object.entries(patternStats);\n\n if (options.sort === 'complexity') {\n sorted = sorted.sort((a, b) => b[1].complexity - a[1].complexity);\n } else if (options.sort === 'frequency') {\n sorted = sorted.sort((a, b) => b[1].count - a[1].count);\n } else {\n sorted = sorted.sort((a, b) => a[0].localeCompare(b[0]));\n }\n\n sorted.forEach(([name, stats]) => {\n const icon = getComplexityIcon(stats.complexity);\n console.log(`${icon} ${chalk.bold(name)}`);\n console.log(` Complexity: ${stats.complexity}/10`);\n console.log(` Instances: ${chalk.yellow(stats.count)}`);\n console.log(` Files: ${chalk.green(stats.files.size)}`);\n console.log('');\n });\n } catch (error) {\n spinner.fail(chalk.red('Pattern analysis failed: ' + error.message));\n }\n}\n\n// Stats command implementation\nasync function statsCommand(pattern, options) {\n const spinner = ora('Generating statistics...').start();\n\n try {\n const files = await findFiles(pattern, [], 1000);\n\n if (files.length === 0) {\n spinner.fail(chalk.red('No files found'));\n return;\n }\n\n const analyzer = new FocusedUsageAnalyzer(options.library);\n const stats = {\n totalFiles: files.length,\n analyzedFiles: 0,\n totalComponents: new Set(),\n totalPatterns: 0,\n complexityDistribution: {\n Simple: 0,\n Moderate: 0,\n Complex: 0,\n 'Very Complex': 0,\n 'Extremely Complex': 0,\n },\n avgComplexity: 0,\n topComponents: {},\n topPatterns: {},\n };\n\n let totalComplexityScore = 0;\n\n for (const file of files) {\n try {\n const report = analyzer.analyzeFile(file);\n if (report) {\n stats.analyzedFiles++;\n report.components.forEach((comp) => stats.totalComponents.add(comp));\n stats.totalPatterns += report.summary.totalUsagePatterns;\n\n const analysis = analyzer.classifyUsage(report);\n const complexity = analyzer.generateComplexityScore(\n analysis.foundPatterns,\n );\n\n stats.complexityDistribution[complexity.level]++;\n totalComplexityScore += complexity.score;\n\n // Track component usage\n report.patterns.usage.jsx.forEach((usage) => {\n stats.topComponents[usage.component] =\n (stats.topComponents[usage.component] || 0) + usage.count;\n });\n\n // Track pattern usage\n analysis.foundPatterns.forEach((data, patternName) => {\n stats.topPatterns[patternName] =\n (stats.topPatterns[patternName] || 0) + data.count;\n });\n }\n } catch (error) {\n // Skip\n }\n }\n\n stats.avgComplexity =\n stats.analyzedFiles > 0 ? totalComplexityScore / stats.analyzedFiles : 0;\n stats.totalComponents = stats.totalComponents.size;\n\n spinner.succeed(chalk.green('Statistics generated'));\n\n // Print stats\n console.log(chalk.bold('\\nšŸ“ˆ DETAILED STATISTICS\\n'));\n console.log(chalk.cyan('Overview:'));\n console.log(` Total Files: ${stats.totalFiles}`);\n console.log(` Analyzed Files: ${chalk.green(stats.analyzedFiles)}`);\n console.log(` Unique Components: ${chalk.yellow(stats.totalComponents)}`);\n console.log(` Total Patterns: ${chalk.yellow(stats.totalPatterns)}`);\n console.log(\n ` Average Complexity: ${chalk.yellow(stats.avgComplexity.toFixed(2))}`,\n );\n\n console.log(chalk.cyan('\\nComplexity Distribution:'));\n Object.entries(stats.complexityDistribution).forEach(([level, count]) => {\n if (count > 0) {\n const percentage = ((count / stats.analyzedFiles) * 100).toFixed(1);\n const bar = options.chart\n ? createBar(count, stats.analyzedFiles, 30)\n : '';\n console.log(\n ` ${level.padEnd(20)} ${count.toString().padStart(4)} (${percentage}%) ${bar}`,\n );\n }\n });\n\n console.log(chalk.cyan('\\nTop 5 Components:'));\n Object.entries(stats.topComponents)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 5)\n .forEach(([comp, count], index) => {\n console.log(\n ` ${index + 1}. ${comp.padEnd(30)} ${chalk.yellow(count)} uses`,\n );\n });\n\n console.log(chalk.cyan('\\nTop 5 Patterns:'));\n Object.entries(stats.topPatterns)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 5)\n .forEach(([pattern, count], index) => {\n console.log(\n ` ${index + 1}. ${pattern.padEnd(30)} ${chalk.yellow(count)} instances`,\n );\n });\n } catch (error) {\n spinner.fail(chalk.red('Stats generation failed: ' + error.message));\n }\n}\n\n// Table command implementation\nasync function tableCommand(pattern, options) {\n const spinner = ora('Generating table...').start();\n\n try {\n const files = await findFiles(pattern, [], 1000);\n\n if (files.length === 0) {\n spinner.fail(chalk.red('No files found'));\n return;\n }\n\n const analyzer = new ReactComponentUsageAnalyzer(options.library);\n const componentData = {};\n const importData = {};\n\n for (const file of files) {\n try {\n const report = analyzer.analyzeFile(file);\n if (report) {\n // Aggregate component usage\n report.patterns.usage.jsx.forEach((usage) => {\n if (!componentData[usage.component]) {\n componentData[usage.component] = {\n uses: 0,\n files: new Set(),\n props: new Set(),\n spreadProps: 0,\n propsDetails: [],\n };\n }\n componentData[usage.component].uses += usage.count;\n componentData[usage.component].files.add(file);\n\n // Aggregate props data\n usage.usages.forEach((u) => {\n if (u.propsAnalysis) {\n u.propsAnalysis.namedProps.forEach((prop) =>\n componentData[usage.component].props.add(prop),\n );\n if (u.propsAnalysis.hasSpread) {\n componentData[usage.component].spreadProps++;\n }\n }\n });\n });\n\n // Aggregate import data\n [\n ...report.patterns.imports.default,\n ...report.patterns.imports.named,\n ].forEach((imp) => {\n const name = imp.name || imp.local;\n if (!importData[name]) {\n importData[name] = {\n files: new Set(),\n type: imp.imported ? 'named' : 'default',\n };\n }\n importData[name].files.add(file);\n });\n }\n } catch (error) {\n // Skip\n }\n }\n\n spinner.succeed(chalk.green('Table generated'));\n\n // Convert sets to counts\n Object.keys(componentData).forEach((key) => {\n componentData[key].filesCount = componentData[key].files.size;\n componentData[key].propsCount = componentData[key].props.size;\n componentData[key].propsList = Array.from(componentData[key].props);\n });\n\n Object.keys(importData).forEach((key) => {\n importData[key].filesCount = importData[key].files.size;\n });\n\n // Sort data\n const sortedComponents = Object.entries(componentData)\n .sort((a, b) => {\n switch (options.sort) {\n case 'name':\n return a[0].localeCompare(b[0]);\n case 'files':\n return b[1].filesCount - a[1].filesCount;\n case 'props':\n return b[1].propsCount - a[1].propsCount;\n case 'uses':\n default:\n return b[1].uses - a[1].uses;\n }\n })\n .slice(0, parseInt(options.top));\n\n const sortedImports = Object.entries(importData)\n .sort((a, b) => {\n if (options.sort === 'name') {\n return a[0].localeCompare(b[0]);\n }\n return b[1].filesCount - a[1].filesCount;\n })\n .slice(0, parseInt(options.top));\n\n // Display components table\n console.log(chalk.bold('\\nšŸ“Š COMPONENT USAGE TABLE\\n'));\n\n const componentTable = new Table({\n head: [\n chalk.cyan('Component'),\n chalk.cyan('Uses'),\n chalk.cyan('Files'),\n ...(options.props ? [chalk.cyan('Props'), chalk.cyan('Spread')] : []),\n ],\n colWidths: [30, 10, 10, ...(options.props ? [40, 10] : [])],\n style: { head: [], border: [] },\n });\n\n sortedComponents.forEach(([component, data]) => {\n const row = [\n component,\n chalk.yellow(data.uses),\n chalk.green(data.filesCount),\n ];\n\n if (options.props) {\n const propsDisplay =\n data.propsCount > 0\n ? data.propsList.slice(0, 5).join(', ') +\n (data.propsCount > 5 ? '...' : '')\n : '-';\n const spreadDisplay =\n data.spreadProps > 0\n ? chalk.red(`⚠ ${data.spreadProps}`)\n : chalk.gray('0');\n row.push(propsDisplay, spreadDisplay);\n }\n\n componentTable.push(row);\n });\n\n console.log(componentTable.toString());\n\n // Display imports table\n console.log(chalk.bold('\\nšŸ“¦ IMPORTS TABLE\\n'));\n\n const importTable = new Table({\n head: [chalk.cyan('Import'), chalk.cyan('Type'), chalk.cyan('Files')],\n colWidths: [30, 15, 10],\n style: { head: [], border: [] },\n });\n\n sortedImports.forEach(([name, data]) => {\n importTable.push([\n name,\n data.type === 'named' ? chalk.blue('named') : chalk.green('default'),\n chalk.yellow(data.filesCount),\n ]);\n });\n\n console.log(importTable.toString());\n\n // Props details if requested\n if (options.props) {\n console.log(chalk.bold('\\nšŸ”§ PROPS ANALYSIS\\n'));\n\n sortedComponents.forEach(([component, data]) => {\n if (data.propsCount > 0 || data.spreadProps > 0) {\n console.log(chalk.cyan(`${component}:`));\n console.log(` Props: ${data.propsList.join(', ')}`);\n if (data.spreadProps > 0) {\n console.log(\n chalk.yellow(\n ` ⚠ Warning: ${data.spreadProps} usage(s) with spread props (cannot analyze statically)`,\n ),\n );\n }\n console.log('');\n }\n });\n }\n\n // Summary\n console.log(chalk.bold('šŸ“ˆ SUMMARY'));\n console.log(` Total Components: ${Object.keys(componentData).length}`);\n console.log(` Total Imports: ${Object.keys(importData).length}`);\n console.log(` Files Analyzed: ${files.length}`);\n console.log(` Sort: ${options.sort}`);\n } catch (error) {\n spinner.fail(chalk.red('Table generation failed: ' + error.message));\n }\n}\n\n// Remaining commands need refactoring (summary, patterns, stats, table)\n// These will be moved to separate files in a future cleanup\n\nfunction printGitHubReport(report, options) {\n console.log('\\n' + chalk.bold.blue('═'.repeat(80)));\n console.log(chalk.bold.blue(' šŸš€ GITHUB REPOSITORIES ANALYSIS REPORT'));\n console.log(chalk.bold.blue('═'.repeat(80)));\n\n console.log(chalk.bold('\\nšŸ“ˆ SUMMARY:'));\n console.log(` Library: ${chalk.cyan(report.metadata.library)}`);\n console.log(\n ` Repositories Analyzed: ${chalk.green(report.metadata.totalRepositories)}`,\n );\n if (report.metadata.failedClones > 0) {\n console.log(` Failed Clones: ${chalk.red(report.metadata.failedClones)}`);\n }\n console.log(\n ` Total Components Found: ${chalk.yellow(report.combined.totalComponents.length)}`,\n );\n console.log(\n ` Total Imports Found: ${chalk.yellow(report.combined.totalImports.length)}`,\n );\n\n console.log(chalk.bold('\\nšŸ† TOP COMPONENTS (Across All Repos):'));\n const topComponents = Object.entries(report.combined.componentFrequency)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 10);\n\n topComponents.forEach(([comp, count], index) => {\n const rank = index + 1;\n const emoji =\n rank === 1 ? 'šŸ„‡' : rank === 2 ? '🄈' : rank === 3 ? 'šŸ„‰' : ' ';\n console.log(\n ` ${emoji} ${rank}. ${chalk.cyan(comp)}: ${chalk.yellow(count)} uses`,\n );\n });\n\n console.log(chalk.bold('\\nšŸ“¦ REPOSITORY SUMMARIES:'));\n report.combined.repoSummaries.forEach((summary, index) => {\n console.log(`\\n ${index + 1}. ${chalk.bold.cyan(summary.name)}`);\n console.log(` Components: ${chalk.yellow(summary.components)}`);\n console.log(` Files: ${chalk.green(summary.files)}`);\n if (summary.errors > 0) {\n console.log(` Errors: ${chalk.red(summary.errors)}`);\n }\n if (summary.topComponents.length > 0) {\n console.log(` Top Components:`);\n summary.topComponents.forEach((comp) => {\n console.log(\n ` - ${comp.component}: ${chalk.yellow(comp.uses)} uses`,\n );\n });\n }\n });\n\n console.log(chalk.bold('\\nšŸ” COMPONENT DISTRIBUTION:'));\n Object.entries(report.combined.componentsByRepo).forEach(\n ([repoName, components]) => {\n console.log(\n ` ${chalk.cyan(repoName)}: ${chalk.yellow(components.length)} unique components`,\n );\n },\n );\n\n if (report.cloneErrors.length > 0) {\n console.log(chalk.bold.red('\\nāš ļø CLONE ERRORS:'));\n report.cloneErrors.forEach((error) => {\n console.log(` ${chalk.red('āœ—')} ${error.url}: ${error.error}`);\n });\n }\n\n console.log('\\n' + chalk.bold.blue('═'.repeat(80)));\n\n // Display helpful tips\n console.log(chalk.bold('\\nšŸ’” TIPS:'));\n console.log(' • Use --keep-repos to inspect cloned repositories locally');\n console.log(' • Use --branch <name> to analyze different branches');\n console.log(' • Use --pattern to customize which files to analyze');\n console.log(' • Use --config <file> to load repositories from JSON file');\n console.log(' • JSON report contains detailed per-repo analysis');\n\n // Show example config format\n console.log(chalk.bold('\\nšŸ“ CONFIG FILE FORMAT:'));\n console.log(\n chalk.gray(` {\n \"repositories\": [\n \"owner/repo1\",\n \"owner/repo2\",\n \"https://github.com/owner/repo3\"\n ]\n }`),\n );\n}\n\n// Helper functions\nasync function findFiles(pattern, ignorePatterns, maxFiles) {\n const allFiles = await glob(pattern, {\n ignore: ['node_modules/**', 'dist/**', 'build/**', ...ignorePatterns],\n nodir: true,\n absolute: false,\n // Support all React file types\n matchBase: false,\n });\n\n // Filter for React file types: tsx, jsx, ts, js\n const reactFiles = allFiles.filter((file) => {\n const ext = path.extname(file).toLowerCase();\n return ['.tsx', '.jsx', '.ts', '.js'].includes(ext);\n });\n\n return reactFiles.slice(0, maxFiles);\n}\n\nfunction printAggregatedReport(report, options) {\n console.log('\\n' + chalk.bold.blue('═'.repeat(80)));\n console.log(chalk.bold.blue(' šŸ“Š AGGREGATED ANALYSIS REPORT'));\n console.log(chalk.bold.blue('═'.repeat(80)));\n\n console.log(chalk.bold('\\nšŸ“ˆ SUMMARY:'));\n console.log(` Library: ${chalk.cyan(report.metadata.library)}`);\n console.log(\n ` Files Analyzed: ${chalk.green(report.metadata.filesAnalyzed)} / ${report.metadata.totalFiles}`,\n );\n if (report.metadata.filesWithErrors > 0) {\n console.log(\n ` Files with Errors: ${chalk.red(report.metadata.filesWithErrors)}`,\n );\n }\n console.log(\n ` Total Components: ${chalk.yellow(report.aggregated.allComponents.length)}`,\n );\n console.log(\n ` Total Imports: ${chalk.yellow(report.aggregated.totalImports)}`,\n );\n console.log(\n ` Total Usage Patterns: ${chalk.yellow(report.aggregated.totalUsagePatterns)}`,\n );\n\n if (!options.summaryOnly) {\n console.log(chalk.bold('\\nšŸŽÆ TOP COMPONENTS:'));\n const topComponents = Object.entries(report.aggregated.componentFrequency)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 10);\n\n topComponents.forEach(([comp, count], index) => {\n const rank = index + 1;\n const emoji =\n rank === 1 ? 'šŸ„‡' : rank === 2 ? '🄈' : rank === 3 ? 'šŸ„‰' : ' ';\n console.log(\n ` ${emoji} ${rank}. ${chalk.cyan(comp)}: ${chalk.yellow(count)} uses`,\n );\n });\n\n console.log(chalk.bold('\\nšŸ” PATTERN FREQUENCY:'));\n const topPatterns = Object.entries(report.aggregated.patternFrequency)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 10);\n\n topPatterns.forEach(([pattern, count], index) => {\n console.log(` ${index + 1}. ${pattern}: ${chalk.yellow(count)}`);\n });\n\n if (report.aggregated.fileComplexity.length > 0) {\n console.log(chalk.bold('\\nšŸ“Š COMPLEXITY ANALYSIS:'));\n const avgComplexity =\n report.aggregated.fileComplexity.reduce((sum, f) => sum + f.score, 0) /\n report.aggregated.fileComplexity.length;\n console.log(\n ` Average Complexity: ${chalk.yellow(avgComplexity.toFixed(2))}`,\n );\n\n const mostComplex = report.aggregated.fileComplexity\n .sort((a, b) => b.score - a.score)\n .slice(0, 5);\n console.log(chalk.bold('\\n Most Complex Files:'));\n mostComplex.forEach((file, index) => {\n console.log(\n ` ${index + 1}. ${path.basename(file.file)}: ${chalk.yellow(file.score)} (${file.level})`,\n );\n });\n }\n }\n\n if (report.aggregated.errors.length > 0) {\n console.log(chalk.bold.red('\\nāš ļø ERRORS:'));\n report.aggregated.errors.slice(0, 5).forEach((error) => {\n console.log(\n ` ${chalk.red('āœ—')} ${path.basename(error.file)}: ${error.error}`,\n );\n });\n if (report.aggregated.errors.length > 5) {\n console.log(\n ` ... and ${report.aggregated.errors.length - 5} more errors`,\n );\n }\n }\n\n console.log('\\n' + chalk.bold.blue('═'.repeat(80)) + '\\n');\n}\n\nfunction printComparisonReport(results) {\n console.log('\\n' + chalk.bold.magenta('═'.repeat(80)));\n console.log(chalk.bold.magenta(' šŸ† LIBRARY COMPARISON REPORT'));\n console.log(chalk.bold.magenta('═'.repeat(80)));\n\n console.log(chalk.bold('\\nšŸ“Š RANKING BY COMPONENT USAGE:'));\n results.libraries.forEach((lib, index) => {\n const rank = index + 1;\n const emoji =\n rank === 1 ? 'šŸ„‡' : rank === 2 ? '🄈' : rank === 3 ? 'šŸ„‰' : 'šŸ“';\n console.log(` ${emoji} ${rank}. ${chalk.cyan(lib.name)}`);\n console.log(` Components: ${chalk.yellow(lib.componentsFound)}`);\n console.log(` Usage Patterns: ${chalk.yellow(lib.totalUsagePatterns)}`);\n console.log(\n ` Top Components: ${lib.topComponents.slice(0, 3).join(', ')}`,\n );\n console.log('');\n });\n\n console.log(chalk.bold.magenta('═'.repeat(80)) + '\\n');\n}\n\nfunction getComplexityIcon(complexity) {\n if (complexity <= 2) return chalk.green('🟢');\n if (complexity <= 4) return chalk.yellow('🟔');\n if (complexity <= 6) return chalk.hex('#FFA500')('🟠');\n return chalk.red('šŸ”“');\n}\n\nfunction createBar(value, max, width) {\n const filled = Math.round((value / max) * width);\n const empty = width - filled;\n return chalk.green('ā–ˆ'.repeat(filled)) + chalk.gray('ā–‘'.repeat(empty));\n}\n\n// Parse arguments and execute\nprogram.parse(process.argv);\n\n// Show help if no command provided\nif (process.argv.length < 3) {\n program.help();\n}\n"]}