imzo-agnost 1.0.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/e-imzo/capiws.ts","../src/e-imzo-client.ts","../src/core/plugin-base.ts","../src/plugins/certkey.ts","../src/plugins/cipher.ts","../src/plugins/crl.ts","../src/plugins/cryptoauth.ts","../src/plugins/fileio.ts","../src/plugins/ftjc.ts","../src/plugins/idcard.ts","../src/plugins/pfx.ts","../src/plugins/pkcs10.ts","../src/plugins/pkcs7.ts","../src/plugins/pki.ts","../src/plugins/truststore-jks.ts","../src/plugins/truststore.ts","../src/plugins/tsaclient.ts","../src/plugins/tunnel.ts","../src/plugins/x509.ts","../src/plugins/ytks.ts","../src/eimzo-api.ts","../src/global.ts"],"names":["getSubst","event","data","_init","_a"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCA,IAAM,MAAA,GACJ,OAAO,QAAA,KAAa,WAAA,GAChB,QAAA,GACA;AAAA,EACE,GAAA,EAAA,CACG,OAAO,QAAA,CAAS,QAAA,CAAS,aAAY,KAAM,QAAA,GACxC,0BACA,sBAAA,IAA0B,mBAAA;AAAA,EAChC,YAAA,EAAc,SACZ,OAAA,EACA,QAAA,EACA,KAAA,EACM;AACN,IAAA,IAAI,CAAC,OAAO,SAAA,EAAW;AACrB,MAAA,IAAI,OAAO,KAAA,EAAM;AACjB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,IAAI,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA;AAAA,IACjC,SAAS,CAAA,EAAG;AACV,MAAA,IAAI,KAAA,QAAa,CAAC,CAAA;AAClB,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,OAAA,GAAU,SAAU,CAAA,EAAqB;AAC9C,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,IAAI,CAAA,CAAE,SAAS,GAAA,EAAM;AACnB,UAAA,KAAA,CAAM,EAAE,IAAI,CAAA;AAAA,QACd;AAAA,MACF;AAAA,IACF,CAAA;AACA,IAAA,MAAA,CAAO,SAAA,GAAY,SAAU,KAAA,EAA2B;AACtD,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AAClC,MAAA,MAAA,CAAO,KAAA,EAAM;AACb,MAAA,QAAA,CAAS,OAAO,IAAI,CAAA;AAAA,IACtB,CAAA;AACA,IAAA,MAAA,CAAO,SAAS,WAAkB;AAChC,MAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA;AAAA,IACrC,CAAA;AAAA,EACF,CAAA;AAAA,EACA,OAAA,EAAS,SACP,QAAA,EACA,KAAA,EACM;AACN,IAAA,IAAI,CAAC,OAAO,SAAA,EAAW;AACrB,MAAA,IAAI,OAAO,KAAA,EAAM;AACjB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,IAAI,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA;AAAA,IACjC,SAAS,CAAA,EAAG;AACV,MAAA,IAAI,KAAA,QAAa,CAAC,CAAA;AAClB,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,OAAA,GAAU,SAAU,CAAA,EAAqB;AAC9C,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,IAAI,CAAA,CAAE,SAAS,GAAA,EAAM;AACnB,UAAA,KAAA,CAAM,EAAE,IAAI,CAAA;AAAA,QACd;AAAA,MACF;AAAA,IACF,CAAA;AACA,IAAA,MAAA,CAAO,SAAA,GAAY,SAAU,KAAA,EAA2B;AACtD,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AAClC,MAAA,MAAA,CAAO,KAAA,EAAM;AACb,MAAA,QAAA,CAAS,OAAO,IAAI,CAAA;AAAA,IACtB,CAAA;AACA,IAAA,MAAA,CAAO,SAAS,WAAkB;AAChC,MAAA,MAAM,CAAA,GAAI,EAAE,IAAA,EAAM,SAAA,EAAU;AAC5B,MAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,CAAC,CAAC,CAAA;AAAA,IAC/B,CAAA;AAAA,EACF,CAAA;AAAA,EACA,MAAA,EAAQ,SACN,QAAA,EACA,KAAA,EACM;AACN,IAAA,IAAI,CAAC,OAAO,SAAA,EAAW;AACrB,MAAA,IAAI,OAAO,KAAA,EAAM;AACjB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,IAAI,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA;AAAA,IACjC,SAAS,CAAA,EAAG;AACV,MAAA,IAAI,KAAA,QAAa,CAAC,CAAA;AAClB,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,OAAA,GAAU,SAAU,CAAA,EAAqB;AAC9C,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,IAAI,CAAA,CAAE,SAAS,GAAA,EAAM;AACnB,UAAA,KAAA,CAAM,EAAE,IAAI,CAAA;AAAA,QACd;AAAA,MACF;AAAA,IACF,CAAA;AACA,IAAA,MAAA,CAAO,SAAA,GAAY,SAAU,KAAA,EAA2B;AACtD,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AAClC,MAAA,MAAA,CAAO,KAAA,EAAM;AACb,MAAA,QAAA,CAAS,OAAO,IAAI,CAAA;AAAA,IACtB,CAAA;AACA,IAAA,MAAA,CAAO,SAAS,WAAkB;AAChC,MAAA,MAAM,CAAA,GAAI,EAAE,IAAA,EAAM,QAAA,EAAS;AAC3B,MAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,CAAC,CAAC,CAAA;AAAA,IAC/B,CAAA;AAAA,EACF,CAAA;AAAA,EACA,MAAA,EAAQ,SACN,YAAA,EACA,QAAA,EACA,KAAA,EACM;AACN,IAAA,IAAI,CAAC,OAAO,SAAA,EAAW;AACrB,MAAA,IAAI,OAAO,KAAA,EAAM;AACjB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,IAAI,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA;AAAA,IACjC,SAAS,CAAA,EAAG;AACV,MAAA,IAAI,KAAA,QAAa,CAAC,CAAA;AAClB,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,OAAA,GAAU,SAAU,CAAA,EAAqB;AAC9C,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,IAAI,CAAA,CAAE,SAAS,GAAA,EAAM;AACnB,UAAA,KAAA,CAAM,EAAE,IAAI,CAAA;AAAA,QACd;AAAA,MACF;AAAA,IACF,CAAA;AACA,IAAA,MAAA,CAAO,SAAA,GAAY,SAAU,KAAA,EAA2B;AACtD,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AAClC,MAAA,MAAA,CAAO,KAAA,EAAM;AACb,MAAA,QAAA,CAAS,OAAO,IAAI,CAAA;AAAA,IACtB,CAAA;AACA,IAAA,MAAA,CAAO,SAAS,WAAkB;AAChC,MAAA,MAAM,CAAA,GAAI,EAAE,IAAA,EAAM,QAAA,EAAU,WAAW,YAAA,EAAa;AACpD,MAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,CAAC,CAAC,CAAA;AAAA,IAC/B,CAAA;AAAA,EACF;AACF,CAAA;AAEN,IAAO,cAAA,GAAQ;;;AC/Jf,IAAA,CAAK,SAAA,CAAU,WAAW,WAAoB;AAC5C,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,EAAY,CAAE,QAAA,EAAS;AACzC,EAAA,MAAM,EAAA,GAAA,CAAM,IAAA,CAAK,QAAA,EAAS,GAAI,GAAG,QAAA,EAAS;AAC1C,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,OAAA,EAAQ,CAAE,QAAA,EAAS;AACnC,EAAA,OAAO,IAAA,IAAQ,EAAA,CAAG,CAAC,CAAA,GAAI,KAAK,GAAA,GAAM,EAAA,CAAG,CAAC,CAAA,CAAA,IAAM,GAAG,CAAC,CAAA,GAAI,EAAA,GAAK,GAAA,GAAM,GAAG,CAAC,CAAA,CAAA;AACrE,CAAA;AAEA,IAAA,CAAK,SAAA,CAAU,WAAW,WAAoB;AAC5C,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,EAAY,CAAE,QAAA,EAAS;AACzC,EAAA,MAAM,EAAA,GAAA,CAAM,IAAA,CAAK,QAAA,EAAS,GAAI,GAAG,QAAA,EAAS;AAC1C,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,OAAA,EAAQ,CAAE,QAAA,EAAS;AACnC,EAAA,OAAA,CAAQ,GAAG,CAAC,CAAA,GAAI,EAAA,GAAK,GAAA,GAAM,GAAG,CAAC,CAAA,IAAK,GAAA,IAAO,EAAA,CAAG,CAAC,CAAA,GAAI,EAAA,GAAK,MAAM,EAAA,CAAG,CAAC,KAAK,GAAA,GAAM,IAAA;AAC/E,CAAA;AAiIA,IAAM,KAAA,GAAsB;AAAA,EAC1B,QAAQ,CAAA,EAAuE;AAU7E,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,OAAO,CAAA;AAAA,IACT,WAAW,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,IAAK,CAAA,CAAE,UAAU,CAAA,EAAG;AAC5C,MAAA,OAAO,IAAI,IAAA,CAAK,CAAA,CAAE,CAAC,CAAA,IAAK,CAAA,EAAG,CAAA,CAAE,CAAC,CAAA,IAAK,CAAA,EAAG,CAAA,CAAE,CAAC,KAAK,CAAC,CAAA;AAAA,IACjD,CAAA,MAAA,IAAW,OAAO,CAAA,KAAM,QAAA,EAAU;AAChC,MAAA,OAAO,IAAI,KAAK,CAAC,CAAA;AAAA,IACnB,CAAA,MAAA,IAAW,OAAO,CAAA,KAAM,QAAA,EAAU;AAChC,MAAA,OAAO,IAAI,KAAK,CAAC,CAAA;AAAA,IACnB,CAAA,MAAA,IAAW,OAAO,CAAA,KAAM,QAAA,IAAY,MAAM,IAAA,EAAM;AAC9C,MAAA,MAAM,OAAA,GAAU,CAAA;AAChB,MAAA,OAAO,IAAI,IAAA,CAAK,OAAA,CAAQ,IAAA,IAAQ,CAAA,EAAG,QAAQ,KAAA,IAAS,CAAA,EAAG,OAAA,CAAQ,IAAA,IAAQ,CAAC,CAAA;AAAA,IAC1E;AACA,IAAA,OAAO,GAAA;AAAA,EACT,CAAA;AAAA,EAEA,OAAA,CACE,GACA,CAAA,EACQ;AAQR,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,CAAC,EAAE,OAAA,EAAQ;AACrC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,CAAC,EAAE,OAAA,EAAQ;AACrC,IAAA,OAAO,QAAA,CAAS,IAAI,CAAA,IAAK,QAAA,CAAS,IAAI,CAAA,GAAA,CAAK,IAAA,GAAO,IAAA,GAAO,CAAA,GAAI,CAAA,KAAM,IAAA,GAAO,IAAA,GAAO,IAAI,CAAA,CAAA,GAAK,GAAA;AAAA,EAC5F,CAAA;AAAA,EAEA,OAAA,CACE,CAAA,EACA,KAAA,EACA,GAAA,EACkB;AAOlB,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,CAAC,EAAE,OAAA,EAAQ;AACrC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,KAAK,EAAE,OAAA,EAAQ;AAC7C,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,GAAG,EAAE,OAAA,EAAQ;AACzC,IAAA,OAAO,QAAA,CAAS,IAAI,CAAA,IAAK,QAAA,CAAS,QAAQ,CAAA,IAAK,QAAA,CAAS,MAAM,CAAA,GAC1D,QAAA,IAAY,IAAA,IAAQ,IAAA,IAAQ,MAAA,GAC5B,GAAA;AAAA,EACN;AACF;AAGA,MAAA,CAAO,SAAA,CAAU,SAAA,GAAY,SAAU,QAAA,EAA2B,KAAA,EAA2B;AAC3F,EAAA,MAAM,SAAmB,EAAC;AAE1B,EAAA,IAAI,aAAa,EAAA,EAAI;AAEnB,IAAA,IAASA,SAAAA,GAAT,SAAkB,KAAA,EAAuB;AACvC,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,CAAC,CAAA,KAAM,MAAM,GAAA,GAAM,GAAA;AAC3C,MAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,QAAA,KAAA,IAAS,SAAA;AAAA,MACX;AACA,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAM,UAAmD,EAAC;AAG1D,IAAA,IAAI,oBAAoB,MAAA,EAAQ;AAC9B,MAAA,IAAA,CAAK,OAAA,CAAQ,QAAA,EAAU,CAAC,CAAA,EAAA,GAAc,IAAA,KAAoB;AACxD,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AACnC,QAAA,OAAA,CAAQ,KAAK,EAAE,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,QAAQ,CAAA;AACxC,QAAA,OAAOA,UAAS,CAAC,CAAA;AAAA,MACnB,CAAC,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,UAAA,CAAW,QAAA,EAAU,CAAC,CAAA,EAAW,MAAA,KAAmB;AACvD,QAAA,OAAA,CAAQ,KAAK,EAAE,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,QAAQ,CAAA;AACxC,QAAA,OAAOA,UAAS,CAAC,CAAA;AAAA,MACnB,CAAC,CAAA;AAAA,IACH;AAGA,IAAA,IAAI,SAAA,GAAY,CAAA;AAChB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,MAAA,MAAM,CAAA,GAAI,QAAQ,CAAC,CAAA;AACnB,MAAA,IAAI,CAAA,EAAG;AACL,QAAA,MAAM,SAAA,GAAY,UAAU,IAAA,GAAO,CAAA,CAAE,QAAQ,CAAA,CAAE,KAAA,GAAQ,EAAE,KAAA,CAAM,MAAA;AAC/D,QAAA,IAAI,cAAc,SAAA,EAAW;AAC3B,UAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,SAAA,EAAW,SAAS,CAAA;AAChD,UAAA,MAAA,CAAO,KAAK,IAAI,CAAA;AAChB,UAAA,SAAA,GAAY,SAAA;AAAA,QACd;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,SAAA,GAAY,KAAK,MAAA,EAAQ;AAC3B,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,SAAA,EAAW,KAAK,MAAM,CAAA;AAClD,MAAA,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,MAAO;AACL,IAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,QAAA,EAAU,CAAA;AAAA,EAC7B;AACA,EAAA,OAAO,MAAA;AACT,CAAA;AAGA,IAAM,WAAA,GAA+B;AAAA,EACnC,OAAA,EAAS,KAAA;AAAA,EACT,QAAA,EAAU,KAAA;AAAA,EACV,QAAA,EAAU;AAAA,IACR,WAAA;AAAA,IACA,kIAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF;AAAA,EAEA,YAAA,CAAa,SAAiD,IAAA,EAA0B;AACtF,IAAA,cAAA,CAAO,OAAA;AAAA,MACL,CAAC,OAAqB,IAAA,KAAsB;AAC1C,QAAA,IAAI,IAAA,CAAK,YAAY,IAAA,EAAM;AACzB,UAAA,IAAI,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,KAAA,EAAO;AAC5B,YAAA,MAAM,gBAAA,GAAmB,SAAS,IAAA,CAAK,KAAK,IAAI,GAAA,GAAM,QAAA,CAAS,KAAK,KAAK,CAAA;AACzE,YAAA,WAAA,CAAY,UAAU,gBAAA,IAAoB,GAAA;AAC1C,YAAA,WAAA,CAAY,WAAW,gBAAA,IAAoB,GAAA;AAC3C,YAAA,OAAA,CAAQ,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,KAAK,CAAA;AAAA,UAChC,CAAA,MAAO;AACL,YAAA,IAAA,CAAK,MAAM,6BAA6B,CAAA;AAAA,UAC1C;AAAA,QACF,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,MAAA,IAAU,eAAe,CAAA;AAAA,QAC3C;AAAA,MACF,CAAA;AAAA,MACA,CAAC,CAAA,KAAe;AACd,QAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,MACd;AAAA,KACF;AAAA,EACF,CAAA;AAAA,EAEA,cAAA,CAAe,SAAqB,IAAA,EAA0B;AAC5D,IAAA,cAAA,CAAO,MAAA;AAAA,MACL,WAAA,CAAY,QAAA;AAAA,MACZ,CAAC,OAAqB,IAAA,KAAsB;AAC1C,QAAA,IAAI,KAAK,OAAA,EAAS;AAChB,UAAA,OAAA,EAAQ;AAAA,QACV,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,MAAA,IAAU,eAAe,CAAA;AAAA,QAC3C;AAAA,MACF,CAAA;AAAA,MACA,CAAC,CAAA,KAAe;AACd,QAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,MACd;AAAA,KACF;AAAA,EACF,CAAA;AAAA,EAEA,eAAA,CACE,SAAA,EACA,SAAA,EACA,OAAA,EACA,IAAA,EACM;AACN,IAAA,MAAM,QAAmB,EAAC;AAC1B,IAAA,MAAM,SAAsB,EAAC;AAE7B,IAAA,IAAI,CAAC,YAAY,OAAA,EAAS;AACxB,MAAA,IAAA,CAAK,MAAM,sCAAsC,CAAA;AAAA,IACnD,CAAA,MAAO;AACL,MAAA,IAAI,YAAY,QAAA,EAAU;AACxB,QAAA,WAAA,CAAY,WAAW,SAAA,EAAW,SAAA,EAAW,KAAA,EAAO,MAAA,EAAQ,CAAC,WAAA,KAAyB;AACpF,UAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,IAAK,MAAA,CAAO,SAAS,CAAA,EAAG;AAC3C,YAAA,MAAM,UAAA,GAAa,OAAO,CAAC,CAAA;AAC3B,YAAA,IAAI,UAAA,EAAY;AACd,cAAA,IAAA,CAAK,UAAA,CAAW,CAAA,EAAG,UAAA,CAAW,CAAA,IAAK,IAAI,CAAA;AAAA,YACzC;AAAA,UACF,CAAA,MAAO;AACL,YAAA,IAAI,OAAA,GAAyB,IAAA;AAC7B,YAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,IAAK,WAAA,EAAa;AACrC,cAAA,OAAA,GAAU,WAAA;AAAA,YACZ;AACA,YAAA,OAAA,CAAQ,OAAO,OAAO,CAAA;AAAA,UACxB;AAAA,QACF,CAAC,CAAA;AAAA,MACH,CAAA,MAAO;AACL,QAAA,WAAA,CAAY,WAAW,SAAA,EAAW,SAAA,EAAW,KAAA,EAAO,MAAA,EAAQ,CAAC,WAAA,KAAyB;AACpF,UAAA,WAAA,CAAY,aAAa,SAAA,EAAW,SAAA,EAAW,KAAA,EAAO,MAAA,EAAQ,CAAC,WAAA,KAAyB;AACtF,YAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,IAAK,MAAA,CAAO,SAAS,CAAA,EAAG;AAC3C,cAAA,MAAM,UAAA,GAAa,OAAO,CAAC,CAAA;AAC3B,cAAA,IAAI,UAAA,EAAY;AACd,gBAAA,IAAA,CAAK,UAAA,CAAW,CAAA,EAAG,UAAA,CAAW,CAAA,IAAK,IAAI,CAAA;AAAA,cACzC;AAAA,YACF,CAAA,MAAO;AACL,cAAA,IAAI,OAAA,GAAyB,IAAA;AAC7B,cAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,gBAAA,IAAI,WAAA,EAAa;AACf,kBAAA,OAAA,GAAU,WAAA;AAAA,gBACZ,WAAW,WAAA,EAAa;AACtB,kBAAA,OAAA,GAAU,WAAA;AAAA,gBACZ;AAAA,cACF;AACA,cAAA,OAAA,CAAQ,OAAO,OAAO,CAAA;AAAA,YACxB;AAAA,UACF,CAAC,CAAA;AAAA,QACH,CAAC,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAA;AAAA,EAEA,iBAAA,CAAkB,SAAuC,IAAA,EAA0B;AACjF,IAAA,IAAI,CAAC,YAAY,QAAA,EAAU;AACzB,MAAA,OAAA,CAAQ,IAAI,wCAAwC,CAAA;AACpD,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf,CAAA,MAAO;AACL,MAAA,cAAA,CAAO,YAAA;AAAA,QACL,EAAE,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,cAAA,EAAe;AAAA,QACzC,CAAC,OAAqB,IAAA,KAAsB;AAC1C,UAAA,IAAI,KAAK,OAAA,EAAS;AAChB,YAAA,OAAA,CAAA,CAAS,IAAA,CAAK,OAAA,EAAS,MAAA,IAAU,CAAA,IAAK,CAAC,CAAA;AAAA,UACzC,CAAA,MAAO;AACL,YAAA,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,MAAA,IAAU,eAAe,CAAA;AAAA,UAC3C;AAAA,QACF,CAAA;AAAA,QACA,CAAC,CAAA,KAAe;AACd,UAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,QACd;AAAA,OACF;AAAA,IACF;AAAA,EACF,CAAA;AAAA,EAEA,OAAA,CACE,UAAA,EACA,OAAA,EACA,IAAA,EACA,cAAA,EACM;AACN,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAM,EAAA,GAAK,UAAA;AACX,MAAA,IAAI,EAAA,CAAG,SAAS,KAAA,EAAO;AACrB,QAAA,cAAA,CAAO,YAAA;AAAA,UACL;AAAA,YACE,MAAA,EAAQ,KAAA;AAAA,YACR,IAAA,EAAM,UAAA;AAAA,YACN,SAAA,EAAW,CAAC,EAAA,CAAG,IAAA,EAAM,GAAG,IAAA,EAAM,EAAA,CAAG,IAAA,EAAM,EAAA,CAAG,KAAK;AAAA,WACjD;AAAA,UACA,CAAC,OAAqB,IAAA,KAAsB;AAC1C,YAAA,IAAI,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,KAAA,EAAO;AAC9B,cAAA,MAAM,KAAK,IAAA,CAAK,KAAA;AAChB,cAAA,IAAI,cAAA,EAAgB;AAClB,gBAAA,cAAA,CAAO,YAAA;AAAA,kBACL,EAAE,MAAM,iBAAA,EAAmB,MAAA,EAAQ,OAAO,SAAA,EAAW,CAAC,EAAE,CAAA,EAAE;AAAA,kBAC1D,CAACC,QAAqBC,KAAAA,KAAsB;AAC1C,oBAAA,IAAIA,MAAK,OAAA,EAAS;AAChB,sBAAA,OAAA,CAAQ,EAAE,CAAA;AAAA,oBACZ,CAAA,MAAO;AACL,sBAAA,IAAA,CAAK,IAAA,EAAMA,KAAAA,CAAK,MAAA,IAAU,8BAA8B,CAAA;AAAA,oBAC1D;AAAA,kBACF,CAAA;AAAA,kBACA,CAAC,CAAA,KAAe;AACd,oBAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,kBACd;AAAA,iBACF;AAAA,cACF,CAAA,MAAO;AACL,gBAAA,OAAA,CAAQ,EAAE,CAAA;AAAA,cACZ;AAAA,YACF,CAAA,MAAO;AACL,cAAA,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,MAAA,IAAU,oBAAoB,CAAA;AAAA,YAChD;AAAA,UACF,CAAA;AAAA,UACA,CAAC,CAAA,KAAe;AACd,YAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,UACd;AAAA,SACF;AAAA,MACF,CAAA,MAAA,IAAW,EAAA,CAAG,IAAA,KAAS,MAAA,EAAQ;AAC7B,QAAA,cAAA,CAAO,YAAA;AAAA,UACL,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,YAAY,SAAA,EAAW,CAAC,EAAA,CAAG,OAAO,CAAA,EAAE;AAAA,UAC5D,CAAC,OAAqB,IAAA,KAAsB;AAC1C,YAAA,IAAI,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,KAAA,EAAO;AAC9B,cAAA,MAAM,KAAK,IAAA,CAAK,KAAA;AAChB,cAAA,IAAI,cAAA,EAAgB;AAClB,gBAAA,cAAA,CAAO,YAAA;AAAA,kBACL,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,cAAc,SAAA,EAAW,CAAC,EAAA,EAAI,GAAG,CAAA,EAAE;AAAA,kBAC3D,CAACD,QAAqBC,KAAAA,KAAsB;AAC1C,oBAAA,IAAIA,MAAK,OAAA,EAAS;AAChB,sBAAA,OAAA,CAAQ,EAAE,CAAA;AAAA,oBACZ,CAAA,MAAO;AACL,sBAAA,IAAA,CAAK,IAAA,EAAMA,KAAAA,CAAK,MAAA,IAAU,yBAAyB,CAAA;AAAA,oBACrD;AAAA,kBACF,CAAA;AAAA,kBACA,CAAC,CAAA,KAAe;AACd,oBAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,kBACd;AAAA,iBACF;AAAA,cACF,CAAA,MAAO;AACL,gBAAA,OAAA,CAAQ,EAAE,CAAA;AAAA,cACZ;AAAA,YACF,CAAA,MAAO;AACL,cAAA,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,MAAA,IAAU,oBAAoB,CAAA;AAAA,YAChD;AAAA,UACF,CAAA;AAAA,UACA,CAAC,CAAA,KAAe;AACd,YAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,UACd;AAAA,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA;AAAA,EAEA,iBAAA,CAAkB,UAAA,EAA6B,OAAA,EAAqB,IAAA,EAA0B;AAC5F,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAM,EAAA,GAAK,UAAA;AACX,MAAA,IAAI,EAAA,CAAG,SAAS,KAAA,EAAO;AACrB,QAAA,cAAA,CAAO,YAAA;AAAA,UACL;AAAA,YACE,MAAA,EAAQ,KAAA;AAAA,YACR,IAAA,EAAM,UAAA;AAAA,YACN,SAAA,EAAW,CAAC,EAAA,CAAG,IAAA,EAAM,GAAG,IAAA,EAAM,EAAA,CAAG,IAAA,EAAM,EAAA,CAAG,KAAK;AAAA,WACjD;AAAA,UACA,CAAC,OAAqB,IAAA,KAAsB;AAC1C,YAAA,IAAI,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,KAAA,EAAO;AAC9B,cAAA,MAAM,KAAK,IAAA,CAAK,KAAA;AAChB,cAAA,cAAA,CAAO,YAAA;AAAA,gBACL,EAAE,MAAM,iBAAA,EAAmB,MAAA,EAAQ,OAAO,SAAA,EAAW,CAAC,EAAE,CAAA,EAAE;AAAA,gBAC1D,CAACD,QAAqBC,KAAAA,KAAsB;AAC1C,kBAAA,IAAIA,MAAK,OAAA,EAAS;AAChB,oBAAA,OAAA,EAAQ;AAAA,kBACV,CAAA,MAAO;AACL,oBAAA,IAAA,CAAK,IAAA,EAAMA,KAAAA,CAAK,MAAA,IAAU,2BAA2B,CAAA;AAAA,kBACvD;AAAA,gBACF,CAAA;AAAA,gBACA,CAAC,CAAA,KAAe;AACd,kBAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,gBACd;AAAA,eACF;AAAA,YACF,CAAA,MAAO;AACL,cAAA,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,MAAA,IAAU,oBAAoB,CAAA;AAAA,YAChD;AAAA,UACF,CAAA;AAAA,UACA,CAAC,CAAA,KAAe;AACd,YAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,UACd;AAAA,SACF;AAAA,MACF,CAAA,MAAA,IAAW,EAAA,CAAG,IAAA,KAAS,MAAA,EAAQ;AAC7B,QAAA,cAAA,CAAO,YAAA;AAAA,UACL,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,YAAY,SAAA,EAAW,CAAC,EAAA,CAAG,OAAO,CAAA,EAAE;AAAA,UAC5D,CAAC,OAAqB,IAAA,KAAsB;AAC1C,YAAA,IAAI,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,KAAA,EAAO;AAC9B,cAAA,MAAM,KAAK,IAAA,CAAK,KAAA;AAChB,cAAA,cAAA,CAAO,YAAA;AAAA,gBACL,EAAE,MAAM,YAAA,EAAc,MAAA,EAAQ,QAAQ,SAAA,EAAW,CAAC,EAAA,EAAI,GAAG,CAAA,EAAE;AAAA,gBAC3D,CAACD,QAAqBC,KAAAA,KAAsB;AAC1C,kBAAA,IAAIA,MAAK,OAAA,EAAS;AAChB,oBAAA,OAAA,EAAQ;AAAA,kBACV,CAAA,MAAO;AACL,oBAAA,IAAA,CAAK,IAAA,EAAMA,KAAAA,CAAK,MAAA,IAAU,sBAAsB,CAAA;AAAA,kBAClD;AAAA,gBACF,CAAA;AAAA,gBACA,CAAC,CAAA,KAAe;AACd,kBAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,gBACd;AAAA,eACF;AAAA,YACF,CAAA,MAAO;AACL,cAAA,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,MAAA,IAAU,oBAAoB,CAAA;AAAA,YAChD;AAAA,UACF,CAAA;AAAA,UACA,CAAC,CAAA,KAAe;AACd,YAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,UACd;AAAA,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA;AAAA,EAEA,YACE,EAAA,EACA,IAAA,EACA,aACA,OAAA,EACA,IAAA,EACA,UACA,mBAAA,EACM;AAEN,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI,wBAAwB,IAAA,EAAM;AAChC,MAAA,MAAA,GAAS,IAAA;AAAA,IACX,CAAA,MAAO;AAEL,MAAA,MAAA,GAEI,WACA,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAA,IAAK,KAAK,IAAI,CAAA;AAAA,IACvC;AAEA,IAAA,MAAM,WAAA,GAAc,QAAA,KAAa,IAAA,GAAO,KAAA,GAAQ,IAAA;AAEhD,IAAA,cAAA,CAAO,YAAA;AAAA,MACL;AAAA,QACE,MAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,CAAC,MAAA,EAAQ,EAAA,EAAI,WAAW;AAAA,OACrC;AAAA,MACA,CAAC,OAAqBA,KAAAA,KAAsB;AAC1C,QAAA,IAAIA,KAAAA,CAAK,OAAA,IAAWA,KAAAA,CAAK,QAAA,EAAU;AACjC,UAAA,MAAM,QAAQA,KAAAA,CAAK,QAAA;AACnB,UAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,QACf,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,IAAA,EAAMA,KAAAA,CAAK,MAAA,IAAU,wBAAwB,CAAA;AAAA,QACpD;AAAA,MACF,CAAA;AAAA,MACA,CAAC,CAAA,KAAe;AACd,QAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,MACd;AAAA,KACF;AAAA,EACF,CAAA;AAAA,EAEA,WAAA,CAAY,GAAW,CAAA,EAAmB;AACxC,IAAA,MAAM,GAAA,GAAM,CAAA,CAAE,SAAA,CAAU,WAAA,EAAa,IAAI,CAAA;AACzC,IAAA,KAAA,MAAW,KAAK,GAAA,EAAK;AACnB,MAAA,MAAM,OAAA,GAAU,IAAI,CAAC,CAAA;AACrB,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,MAAA,CAAA,CAAQ,QAAA,CAAS,CAAC,IAAI,CAAA,GAAI,GAAA,GAAM,EAAA,IAAM,CAAA,GAAI,GAAG,CAAA;AAC/D,QAAA,IAAI,MAAM,EAAA,EAAI;AACZ,UAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,GAAI,CAAA,CAAE,MAAA,GAAS,CAAA,IAAK,QAAA,CAAS,CAAC,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,CAAA,CAAE,CAAA;AAAA,QACnE;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,EAAA;AAAA,EACT,CAAA;AAAA,EAEA,UAAA,CACE,SAAA,EACA,SAAA,EACA,KAAA,EACA,QACA,QAAA,EACM;AACN,IAAA,IAAI,OAAA;AAEJ,IAAA,cAAA,CAAO,YAAA;AAAA,MACL,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,uBAAA,EAAwB;AAAA,MAC/C,CAAC,OAAqB,IAAA,KAAsB;AAC1C,QAAA,IAAI,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,YAAA,EAAc;AACrC,UAAA,KAAA,MAAW,GAAA,IAAO,KAAK,YAAA,EAAc;AACnC,YAAA,MAAM,EAAA,GAAK,IAAA,CAAK,YAAA,CAAa,GAAG,CAAA;AAChC,YAAA,IAAI,CAAC,EAAA,EAAI;AAET,YAAA,IAAI,WAAA,GAAc,EAAA,CAAG,KAAA,CAAM,WAAA,EAAY;AACvC,YAAA,WAAA,GAAc,WAAA,CAAY,OAAA,CAAQ,mBAAA,EAAqB,MAAM,CAAA;AAC7D,YAAA,WAAA,GAAc,WAAA,CAAY,OAAA,CAAQ,mBAAA,EAAqB,QAAQ,CAAA;AAE/D,YAAA,MAAM,EAAA,GAAsB;AAAA,cAC1B,MAAM,EAAA,CAAG,IAAA;AAAA,cACT,MAAM,EAAA,CAAG,IAAA;AAAA,cACT,MAAM,EAAA,CAAG,IAAA;AAAA,cACT,OAAO,EAAA,CAAG,KAAA;AAAA,cACV,YAAA,EAAc,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,cAAc,CAAA;AAAA,cACjE,WAAW,IAAI,IAAA;AAAA,gBACb,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,WAAW,CAAA,CAC7C,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAClB,OAAA,CAAQ,GAAA,EAAK,GAAG;AAAA,eACrB;AAAA,cACA,SAAS,IAAI,IAAA;AAAA,gBACX,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,SAAS,CAAA,CAC3C,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAClB,OAAA,CAAQ,GAAA,EAAK,GAAG;AAAA,eACrB;AAAA,cACA,EAAA,EAAI,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,IAAI,CAAA;AAAA,cAC7C,GAAA,EACE,YAAY,WAAA,CAAY,WAAA,EAAa,KAAK,CAAA,IAC1C,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,KAAK,CAAA;AAAA,cAC5C,GAAA,EAAK,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,KAAK,CAAA;AAAA,cAC/C,KAAA,EAAO,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,OAAO,CAAA;AAAA,cACnD,CAAA,EAAG,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,GAAG,CAAA;AAAA,cAC3C,CAAA,EAAG,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,GAAG,CAAA;AAAA,cAC3C,IAAA,EAAM;AAAA,aACR;AAEA,YAAA,IAAI,CAAC,EAAA,CAAG,GAAA,IAAO,CAAC,GAAG,KAAA,EAAO;AAE1B,YAAA,MAAM,MAAA,GAAS,SAAA,CAAU,EAAA,EAAI,GAAG,CAAA;AAChC,YAAA,IAAI,CAAC,OAAA,EAAS;AACZ,cAAA,OAAA,GAAU,MAAA;AAAA,YACZ;AACA,YAAA,MAAM,GAAA,GAAM,SAAA,CAAU,MAAA,EAAQ,EAAE,CAAA;AAChC,YAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,UAChB;AAAA,QACF,CAAA,MAAO;AACL,UAAA,MAAA,CAAO,KAAK,EAAE,CAAA,EAAG,IAAA,CAAK,MAAA,IAAU,+BAA+B,CAAA;AAAA,QACjE;AACA,QAAA,QAAA,CAAS,OAAO,CAAA;AAAA,MAClB,CAAA;AAAA,MACA,CAAC,CAAA,KAAe;AACd,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA,EAAM,CAAA;AACpB,QAAA,QAAA,CAAS,OAAO,CAAA;AAAA,MAClB;AAAA,KACF;AAAA,EACF,CAAA;AAAA,EAEA,YAAA,CACE,SAAA,EACA,SAAA,EACA,KAAA,EACA,QACA,QAAA,EACM;AACN,IAAA,IAAI,OAAA;AAEJ,IAAA,cAAA,CAAO,YAAA;AAAA,MACL,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,iBAAiB,SAAA,EAAW,CAAC,EAAE,CAAA,EAAE;AAAA,MACzD,CAAC,OAAqB,IAAA,KAAsB;AAC1C,QAAA,IAAI,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,MAAA,EAAQ;AAC/B,UAAA,KAAA,MAAW,GAAA,IAAO,KAAK,MAAA,EAAQ;AAC7B,YAAA,MAAM,EAAA,GAAK,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA;AAC1B,YAAA,IAAI,CAAC,EAAA,EAAI;AAET,YAAA,IAAI,WAAA,GAAc,EAAA,CAAG,IAAA,CAAK,WAAA,EAAY;AACtC,YAAA,WAAA,GAAc,WAAA,CAAY,OAAA,CAAQ,mBAAA,EAAqB,MAAM,CAAA;AAC7D,YAAA,WAAA,GAAc,WAAA,CAAY,OAAA,CAAQ,mBAAA,EAAqB,QAAQ,CAAA;AAE/D,YAAA,MAAM,EAAA,GAAsB;AAAA,cAC1B,SAAS,EAAA,CAAG,OAAA;AAAA,cACZ,YAAY,EAAA,CAAG,UAAA;AAAA,cACf,WAAW,EAAA,CAAG,SAAA;AAAA,cACd,MAAM,EAAA,CAAG,IAAA;AAAA,cACT,YAAA,EAAc,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,cAAc,CAAA;AAAA,cACjE,WAAW,IAAI,IAAA,CAAK,YAAY,WAAA,CAAY,WAAA,EAAa,WAAW,CAAC,CAAA;AAAA,cACrE,SAAS,IAAI,IAAA,CAAK,YAAY,WAAA,CAAY,WAAA,EAAa,SAAS,CAAC,CAAA;AAAA,cACjE,EAAA,EAAI,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,IAAI,CAAA;AAAA,cAC7C,GAAA,EACE,YAAY,WAAA,CAAY,WAAA,EAAa,KAAK,CAAA,IAC1C,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,KAAK,CAAA;AAAA,cAC5C,GAAA,EAAK,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,KAAK,CAAA;AAAA,cAC/C,KAAA,EAAO,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,OAAO,CAAA;AAAA,cACnD,CAAA,EAAG,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,GAAG,CAAA;AAAA,cAC3C,CAAA,EAAG,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,GAAG,CAAA;AAAA,cAC3C,IAAA,EAAM;AAAA,aACR;AAEA,YAAA,IAAI,CAAC,EAAA,CAAG,GAAA,IAAO,CAAC,GAAG,KAAA,EAAO;AAE1B,YAAA,MAAM,MAAA,GAAS,SAAA,CAAU,EAAA,EAAI,GAAG,CAAA;AAChC,YAAA,IAAI,CAAC,OAAA,EAAS;AACZ,cAAA,OAAA,GAAU,MAAA;AAAA,YACZ;AACA,YAAA,MAAM,GAAA,GAAM,SAAA,CAAU,MAAA,EAAQ,EAAE,CAAA;AAChC,YAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,UAChB;AAAA,QACF,CAAA,MAAO;AACL,UAAA,MAAA,CAAO,KAAK,EAAE,CAAA,EAAG,IAAA,CAAK,MAAA,IAAU,yBAAyB,CAAA;AAAA,QAC3D;AACA,QAAA,QAAA,CAAS,OAAO,CAAA;AAAA,MAClB,CAAA;AAAA,MACA,CAAC,CAAA,KAAe;AACd,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA,EAAM,CAAA;AACpB,QAAA,QAAA,CAAS,OAAO,CAAA;AAAA,MAClB;AAAA,KACF;AAAA,EACF;AACF,CAAA;AAEA,IAAO,qBAAA,GAAQ;;;AChtBR,IAAe,cAAf,MAAiD;AAAA,EAEtC,OAAA,GAAkB,OAAA;AAAA,EAClB,WAAA,GAAsB,EAAA;AAAA;AAAA;AAAA;AAAA,EAK5B,WACR,UAAA,EACA,IAAA,GAAkB,EAAC,EACnB,WACA,OAAA,EACM;AACN,IAAA,MAAM,IAAA,GAAyB;AAAA,MAC7B,QAAQ,IAAA,CAAK,IAAA;AAAA,MACb,IAAA,EAAM,UAAA;AAAA,MACN,GAAI,IAAA,CAAK,MAAA,GAAS,CAAA,IAAK,EAAE,WAAW,IAAA;AAAK,KAC3C;AAEA,IAAA,cAAA,CAAO,YAAA,CAAa,IAAA,EAAM,SAAA,EAAW,OAAO,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKU,oBAAgE,UAAA,EAAoB;AAC5F,IAAA,OAAO,IAAI,IAAA,KAAkC;AAC3C,MAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,QAAA,IAAA,CAAK,UAAA;AAAA,UACH,UAAA;AAAA,UACA,IAAA;AAAA,UACA,CAAC,QAAQ,IAAA,KAAS;AAChB,YAAA,IAAI,KAAK,OAAA,EAAS;AAChB,cAAA,OAAA,CAAQ,IAAe,CAAA;AAAA,YACzB,CAAA,MAAO;AACL,cAAA,MAAA,CAAO,IAAI,KAAA,CAAM,IAAA,CAAK,MAAA,IAAU,eAAe,CAAC,CAAA;AAAA,YAClD;AAAA,UACF,CAAA;AAAA,UACA,CAAA,KAAA,KAAS,MAAA,CAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAC;AAAA,SAC3E;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKU,aAAyD,UAAA,EAAoB;AACrF,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,mBAAA,CAAoC,UAAU,CAAA;AAEzE,IAAA,MAAM,cAAA,GAAiB,IAAI,IAAA,KAA+D;AACxF,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACnC,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AACtC,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AAEpC,MAAA,IAAA,CAAK,UAAA,CAAoB,UAAA,EAAY,UAAA,EAAyB,SAAA,EAAW,OAAO,CAAA;AAAA,IAClF,CAAA;AAEA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,aAAA;AAAA,MACT,QAAA,EAAU;AAAA,KACZ;AAAA,EACF;AACF;AAKO,IAAM,gBAAN,MAAoB;AAAA,EACzB,OAAe,OAAA,mBAAU,IAAI,GAAA,EAAyB;AAAA,EAEtD,OAAO,SAAS,MAAA,EAA2B;AACzC,IAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AAAA,EACtC;AAAA,EAEA,OAAO,IAA2B,IAAA,EAA6B;AAC7D,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AAAA,EAC9B;AAAA,EAEA,OAAO,MAAA,GAAwB;AAC7B,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AAAA,EACzC;AAAA,EAEA,OAAO,IAAI,IAAA,EAAuB;AAChC,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AAAA,EAC9B;AACF;AAKO,SAAS,eAAgD,WAAA,EAAmB;AACjF,EAAA,MAAM,QAAA,GAAW,IAAI,WAAA,EAAY;AACjC,EAAA,aAAA,CAAc,SAAS,QAAQ,CAAA;AAC/B,EAAA,OAAO,WAAA;AACT;;;ACtGA,IAAA,yBAAA,EAAA,KAAA,EAAA,EAAA;AAMA,yBAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,aAAA,GAAN,eAA4B,EAAA,GAAA,WAAA,EAAY;AAAA,EACpC,IAAA,GAAO,SAAA;AAAA,EACP,WAAA,GAAc,0DAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,SAAA,GAAY,CACV,KAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,YAAA,EAAc,CAAC,KAAK,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC3D,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,GAAY,CAAC,SAAA,EAAuC,OAAA,KAAiC;AACnF,IAAA,IAAA,CAAK,UAAA,CAAW,YAAA,EAAc,EAAC,EAAG,WAAW,OAAO,CAAA;AAAA,EACtD,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAA,GAAmB,CACjB,QAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,mBAAA,EAAqB,CAAC,QAAQ,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACrE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAA,GAAsB,CACpB,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,uBAAA,EAAyB,EAAC,EAAG,WAAW,OAAO,CAAA;AAAA,EACjE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,GAAU,CACR,OAAA,EACA,QAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,UAAA,EAAY,CAAC,SAAS,QAAQ,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACrE,CAAA;AACF,CAAA;AAtDO,KAAA,GAAA,gBAAA,CAAA,EAAA,CAAA;AAAM,aAAA,GAAN,6CADP,yBAAA,EACa,aAAA,CAAA;AAAN,iBAAA,CAAA,KAAA,EAAA,CAAA,EAAM,aAAA,CAAA;;;ACPb,IAAA,wBAAA,EAAAC,MAAAA,EAAAC,GAAAA;AAMA,wBAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,YAAA,GAAN,eAA2BA,GAAAA,GAAA,WAAA,EAAY;AAAA,EACnC,IAAA,GAAO,QAAA;AAAA,EACP,WAAA,GAAc,mEAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,kBAAkB,CAChB,IAAA,EACA,oBAAA,EACA,WAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,kBAAA;AAAA,MACA,CAAC,IAAA,EAAM,oBAAA,EAAsB,WAAW,CAAA;AAAA,MACxC,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,eAAA,GAAkB,CAChB,aAAA,EACA,cAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,kBAAA,EAAoB,CAAC,eAAe,cAAc,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACzF,CAAA;AACF,CAAA;AAjCOD,MAAAA,GAAA,gBAAA,CAAAC,GAAAA,CAAAA;AAAM,YAAA,GAAN,iBAAA,CAAAD,MAAAA,EAAA,CAAA,EAAA,cAAA,EADP,wBAAA,EACa,YAAA,CAAA;AAAN,iBAAA,CAAAA,QAAA,CAAA,EAAM,YAAA,CAAA;;;ACPb,IAAA,qBAAA,EAAAA,MAAAA,EAAAC,GAAAA;AAuBA,qBAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,SAAA,GAAN,eAAwBA,GAAAA,GAAA,WAAA,EAAY;AAAA,EAChC,IAAA,GAAO,KAAA;AAAA,EACP,WAAA,GAAc,sDAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,OAAA,GAAU,CACR,OAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,UAAA,EAAY,CAAC,OAAO,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC3D,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,WAAA,GAAc,CACZ,QAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,eAAA,EAAiB,CAAC,QAAQ,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACjE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAA,GAAmB,CACjB,WAAA,EACA,KAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,mBAAA,EAAqB,CAAC,aAAa,KAAK,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC/E,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,GAAa,CACX,KAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,cAAA,EAAgB,CAAC,KAAK,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC7D,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,GAAY,CACV,KAAA,EACA,iBAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,YAAA,EAAc,CAAC,OAAO,iBAAiB,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC9E,CAAA;AACF,CAAA;AA5DOD,MAAAA,GAAA,gBAAA,CAAAC,GAAAA,CAAAA;AAAM,SAAA,GAAN,iBAAA,CAAAD,MAAAA,EAAA,CAAA,EAAA,WAAA,EADP,qBAAA,EACa,SAAA,CAAA;AAAN,iBAAA,CAAAA,QAAA,CAAA,EAAM,SAAA,CAAA;;;ACxBb,IAAA,4BAAA,EAAAA,MAAAA,EAAAC,GAAAA;AAMA,4BAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,gBAAA,GAAN,eAA+BA,GAAAA,GAAA,WAAA,EAAY;AAAA,EACvC,IAAA,GAAO,YAAA;AAAA,EACP,WAAA,GAAc,+CAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,YAAA,GAAe,CACb,KAAA,EACA,IAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,eAAA,EAAiB,CAAC,OAAO,IAAI,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACpE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,YAAA,GAAe,CACb,IAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,gBAAA,EAAkB,CAAC,IAAI,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC9D,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,iCAAiC,CAC/B,IAAA,EACA,SAAA,EACA,WAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,mCAAA;AAAA,MACA,CAAC,IAAA,EAAM,SAAA,EAAW,WAAW,CAAA;AAAA,MAC7B,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,iCAAiC,CAC/B,SAAA,EACA,SAAA,EACA,KAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,qCAAA;AAAA,MACA,CAAC,SAAA,EAAW,SAAA,EAAW,KAAK,CAAA;AAAA,MAC5B,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,qBAAA,GAAwB,CACtB,SAAA,EACA,KAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,0BAAA,EAA4B,CAAC,WAAW,KAAK,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACpF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,wBAAwB,CACtB,IAAA,EACA,SAAA,EACA,KAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,4BAA4B,CAAC,IAAA,EAAM,WAAW,KAAK,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC1F,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,0CAA0C,CACxC,SAAA,EACA,SAAA,EACA,WAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,8CAAA;AAAA,MACA,CAAC,SAAA,EAAW,SAAA,EAAW,WAAW,CAAA;AAAA,MAClC,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AACF,CAAA;AAzGOD,MAAAA,GAAA,gBAAA,CAAAC,GAAAA,CAAAA;AAAM,gBAAA,GAAN,iBAAA,CAAAD,MAAAA,EAAA,CAAA,EAAA,kBAAA,EADP,4BAAA,EACa,gBAAA,CAAA;AAAN,iBAAA,CAAAA,QAAA,CAAA,EAAM,gBAAA,CAAA;;;ACPb,IAAA,wBAAA,EAAAA,MAAAA,EAAAC,GAAAA;AAMA,wBAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,YAAA,GAAN,eAA2BA,GAAAA,GAAA,WAAA,EAAY;AAAA,EACnC,IAAA,GAAO,QAAA;AAAA,EACP,WAAA,GAAc,yCAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,QAAA,GAAW,CACT,QAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,WAAA,EAAa,CAAC,QAAQ,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC7D,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,GAAY,CACV,UAAA,EACA,eAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,YAAA,EAAc,CAAC,YAAY,eAAe,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACjF,CAAA;AACF,CAAA;AA1BOD,MAAAA,GAAA,gBAAA,CAAAC,GAAAA,CAAAA;AAAM,YAAA,GAAN,iBAAA,CAAAD,MAAAA,EAAA,CAAA,EAAA,cAAA,EADP,wBAAA,EACa,YAAA,CAAA;AAAN,iBAAA,CAAAA,QAAA,CAAA,EAAM,YAAA,CAAA;;;ACPb,IAAA,sBAAA,EAAAA,MAAAA,EAAAC,GAAAA;AA6BA,sBAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,UAAA,GAAN,eAAyBA,GAAAA,GAAA,WAAA,EAAY;AAAA,EACjC,IAAA,GAAO,MAAA;AAAA,EACP,WAAA,GAAc,uDAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOvB,WAAA,GAAc,CACZ,WAAA,GAAc,EAAA,EACd,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,eAAA,EAAiB,CAAC,WAAW,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACpE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,GAAa,CAAC,SAAA,EAA+C,OAAA,KAAiC;AAC5F,IAAA,IAAA,CAAK,UAAA,CAAW,aAAA,EAAe,EAAC,EAAG,WAAW,OAAO,CAAA;AAAA,EACvD,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,GAAU,CACR,OAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,UAAA,EAAY,CAAC,OAAO,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC3D,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,GAAY,CACV,OAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,YAAA,EAAc,CAAC,OAAO,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC7D,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAA,GAAY,CACV,OAAA,EACA,OAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,YAAA,EAAc,CAAC,SAAS,OAAO,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACtE,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAA,GAAY,CACV,OAAA,EACA,OAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,YAAA,EAAc,CAAC,SAAS,OAAO,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACtE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,GAAU,CACR,OAAA,EACA,IAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,UAAA,EAAY,CAAC,SAAS,IAAI,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACjE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoB,CAClB,OAAA,EACA,sBACA,eAAA,EACA,iBAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,oBAAA;AAAA,MACA,CAAC,OAAA,EAAS,oBAAA,EAAsB,eAAA,EAAiB,iBAAiB,CAAA;AAAA,MAClE,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,WAAA,GAAc,CACZ,OAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,eAAA,EAAiB,CAAC,OAAO,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAChE,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAA,GAAc,CACZ,OAAA,EACA,MAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,eAAA,EAAiB,CAAC,SAAS,MAAM,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACxE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,aAAA,GAAgB,CACd,OAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,iBAAA,EAAmB,CAAC,OAAO,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAClE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB,CACd,OAAA,EACA,QAAA,EACA,YAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,kBAAkB,CAAC,OAAA,EAAS,UAAU,YAAY,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACzF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAA,GAAmB,IAAA,CAAK,mBAAA,CAAiD,eAAe,CAAA;AAAA;AAAA;AAAA;AAAA,EAKxF,eAAA,GAAkB,IAAA,CAAK,mBAAA,CAA0C,aAAa,CAAA;AAAA;AAAA;AAAA;AAAA,EAK9E,YAAA,GAAe,IAAA,CAAK,mBAAA,CAA2C,UAAU,CAAA;AAAA;AAAA;AAAA;AAAA,EAKzE,cAAA,GAAiB,IAAA,CAAK,mBAAA,CAAiD,YAAY,CAAA;AAAA;AAAA;AAAA;AAAA,EAKnF,iBAAiB,IAAA,CAAK,mBAAA;AAAA,IACpB;AAAA,GACF;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB,IAAA,CAAK,mBAAA;AAAA,IACpB;AAAA,GACF;AAAA;AAAA;AAAA;AAAA,EAKA,YAAA,GAAe,IAAA,CAAK,mBAAA,CAAyD,UAAU,CAAA;AAAA;AAAA;AAAA;AAAA,EAKvF,sBAAA,GAAyB,IAAA,CAAK,mBAAA,CAG5B,oBAAoB,CAAA;AAAA;AAAA;AAAA;AAAA,EAKtB,gBAAA,GAAmB,IAAA,CAAK,mBAAA,CAAgD,eAAe,CAAA;AAAA;AAAA;AAAA;AAAA,EAKvF,gBAAA,GAAmB,IAAA,CAAK,mBAAA,CAAyD,eAAe,CAAA;AAAA;AAAA;AAAA;AAAA,EAKhG,kBAAA,GAAqB,IAAA,CAAK,mBAAA,CAAkD,iBAAiB,CAAA;AAAA;AAAA;AAAA;AAAA,EAK7F,qBAAqB,IAAA,CAAK,mBAAA;AAAA,IACxB;AAAA,GACF;AACF,CAAA;AA7NOD,MAAAA,GAAA,gBAAA,CAAAC,GAAAA,CAAAA;AAAM,UAAA,GAAN,iBAAA,CAAAD,MAAAA,EAAA,CAAA,EAAA,YAAA,EADP,sBAAA,EACa,UAAA,CAAA;AAAN,iBAAA,CAAAA,QAAA,CAAA,EAAM,UAAA,CAAA;AAgON,IAAM,UAAA,GAAa,IAAI,UAAA;;;AC9P9B,IAAA,wBAAA,EAAAA,MAAAA,EAAAC,GAAAA;AAYA,wBAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,YAAA,GAAN,eAA2BA,GAAAA,GAAA,WAAA,EAAY;AAAA,EACnC,IAAA,GAAO,QAAA;AAAA,EACP,WAAA,GAAc,yCAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,cAAA,GAAiB,CACf,QAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,iBAAA,EAAmB,CAAC,QAAQ,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACnE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,WAAA,GAAc,CACZ,YAAA,EACA,OAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,aAAA,EAAe,CAAC,cAAc,OAAO,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC5E,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,WAAA,GAAc,CAAC,SAAA,EAA2C,OAAA,KAAiC;AACzF,IAAA,IAAA,CAAK,UAAA,CAAW,cAAA,EAAgB,EAAC,EAAG,WAAW,OAAO,CAAA;AAAA,EACxD,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAA,GAAsB,CACpB,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,uBAAA,EAAyB,EAAC,EAAG,WAAW,OAAO,CAAA;AAAA,EACjE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,sBAAA,GAAyB,CAAC,SAAA,EAAqC,OAAA,KAAiC;AAC9F,IAAA,IAAA,CAAK,UAAA,CAAW,2BAAA,EAA6B,EAAC,EAAG,WAAW,OAAO,CAAA;AAAA,EACrE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,GAAU,CACR,SAAA,EACA,QAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,UAAA,EAAY,CAAC,WAAW,QAAQ,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACvE,CAAA;AACF,CAAA;AA9DOD,MAAAA,GAAA,gBAAA,CAAAC,GAAAA,CAAAA;AAAM,YAAA,GAAN,iBAAA,CAAAD,MAAAA,EAAA,CAAA,EAAA,cAAA,EADP,wBAAA,EACa,YAAA,CAAA;AAAN,iBAAA,CAAAA,QAAA,CAAA,EAAM,YAAA,CAAA;;;ACbb,IAAA,qBAAA,EAAAA,MAAAA,EAAAC,GAAAA;AA8BA,qBAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,SAAA,GAAN,eAAwBA,GAAAA,GAAA,WAAA,EAAY;AAAA,EAChC,IAAA,GAAO,KAAA;AAAA,EACP,WAAA,GAAc,+CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOvB,SAAA,GAAY,CACV,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,YAAA,EAAc,EAAC,EAAG,WAAW,OAAO,CAAA;AAAA,EACtD,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAA,GAAmB,CACjB,IAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,mBAAA,EAAqB,CAAC,IAAI,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACjE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAA,GAAsB,CACpB,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,uBAAA,EAAyB,EAAC,EAAG,WAAW,OAAO,CAAA;AAAA,EACjE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,CACR,IAAA,EACA,MACA,IAAA,EACA,KAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,YAAY,CAAC,IAAA,EAAM,MAAM,IAAA,EAAM,KAAK,CAAA,EAAG,SAAA,EAAW,OAAO,CAAA;AAAA,EAC3E,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,GAAY,CACV,KAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,YAAA,EAAc,CAAC,KAAK,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC3D,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,GAAiB,CACf,KAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,iBAAA,EAAmB,CAAC,KAAK,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAChE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,GAAiB,CACf,KAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,iBAAA,EAAmB,CAAC,KAAK,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAChE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,GAAU,CACR,IAAA,EACA,IAAA,EACA,IAAA,EACA,KAAA,EACA,EAAA,EACA,cAAA,EACA,oBAAA,EACA,eAAA,EACA,iBAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,UAAA;AAAA,MACA;AAAA,QACE,IAAA;AAAA,QACA,IAAA;AAAA,QACA,IAAA;AAAA,QACA,KAAA;AAAA,QACA,EAAA;AAAA,QACA,cAAA;AAAA,QACA,oBAAA;AAAA,QACA,eAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAA,GAAmB,CACjB,IAAA,EACA,IAAA,EACA,IAAA,EACA,OACA,EAAA,EACA,QAAA,EACA,eAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,oBAAA;AAAA,MACA,CAAC,IAAA,EAAM,IAAA,EAAM,MAAM,KAAA,EAAO,EAAA,EAAI,UAAU,eAAe,CAAA;AAAA,MACvD,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAA,GAAiB,IAAA,CAAK,mBAAA,CAA+C,YAAY,CAAA;AAAA;AAAA;AAAA;AAAA,EAKjF,qBAAA,GAAwB,IAAA,CAAK,mBAAA,CAA+C,mBAAmB,CAAA;AAAA;AAAA;AAAA;AAAA,EAK/F,wBAAA,GAA2B,IAAA,CAAK,mBAAA,CAAyC,uBAAuB,CAAA;AAAA;AAAA;AAAA;AAAA,EAKhG,eAAe,IAAA,CAAK,mBAAA;AAAA,IAClB;AAAA,GACF;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,GAAiB,IAAA,CAAK,mBAAA,CAAiD,YAAY,CAAA;AAAA;AAAA;AAAA;AAAA,EAKnF,mBAAA,GAAsB,IAAA,CAAK,mBAAA,CAAiD,iBAAiB,CAAA;AAAA;AAAA;AAAA;AAAA,EAK7F,mBAAA,GAAsB,IAAA,CAAK,mBAAA,CAAiD,iBAAiB,CAAA;AAAA;AAAA;AAAA;AAAA,EAK7F,YAAA,GAAe,IAAA,CAAK,mBAAA,CAGlB,UAAU,CAAA;AAAA;AAAA;AAAA;AAAA,EAKZ,qBAAA,GAAwB,IAAA,CAAK,mBAAA,CAG3B,oBAAoB,CAAA;AACxB,CAAA;AAlMOD,MAAAA,GAAA,gBAAA,CAAAC,GAAAA,CAAAA;AAAM,SAAA,GAAN,iBAAA,CAAAD,MAAAA,EAAA,CAAA,EAAA,WAAA,EADP,qBAAA,EACa,SAAA,CAAA;AAAN,iBAAA,CAAAA,QAAA,CAAA,EAAM,SAAA,CAAA;AAqMN,IAAM,SAAA,GAAY,IAAI,SAAA;;;ACpO7B,IAAA,wBAAA,EAAAA,MAAAA,EAAAC,GAAAA;AAkBA,wBAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,YAAA,GAAN,eAA2BA,GAAAA,GAAA,WAAA,EAAY;AAAA,EACnC,IAAA,GAAO,QAAA;AAAA,EACP,WAAA,GAAc,kEAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,mBAAA,GAAsB,CACpB,KAAA,EACA,OAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,wBAAA,EAA0B,CAAC,OAAO,OAAO,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAChF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,eAAA,GAAkB,CAChB,OAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,kBAAA,EAAoB,CAAC,OAAO,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACnE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,YAAA,GAAe,CACb,OAAA,EACA,OAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,eAAA,EAAiB,CAAC,SAAS,OAAO,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACzE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,aAAA,GAAgB,CACd,MAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,iBAAA,EAAmB,CAAC,MAAM,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACjE,CAAA;AACF,CAAA;AAjDOD,MAAAA,GAAA,gBAAA,CAAAC,GAAAA,CAAAA;AAAM,YAAA,GAAN,iBAAA,CAAAD,MAAAA,EAAA,CAAA,EAAA,cAAA,EADP,wBAAA,EACa,YAAA,CAAA;AAAN,iBAAA,CAAAA,QAAA,CAAA,EAAM,YAAA,CAAA;;;ACnBb,IAAA,uBAAA,EAAAA,OAAAA,EAAAC,IAAAA;AA0BA,uBAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,WAAA,GAAN,eAA0BA,IAAAA,GAAA,WAAA,EAAY;AAAA,EAClC,IAAA,GAAO,OAAA;AAAA,EACP,WAAA,GAAc,2CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOvB,cAAc,CACZ,MAAA,EACA,OACA,QAAA,GAA8B,EAAA,EAC9B,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,gBAAgB,CAAC,MAAA,EAAQ,OAAO,QAAQ,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC/E,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,uBAAuB,CACrB,OAAA,EACA,YAAA,GAAe,EAAA,EACf,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,yBAAA,EAA2B,CAAC,SAAS,YAAY,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACxF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,uBAAuB,CACrB,MAAA,EACA,SACA,YAAA,GAAe,EAAA,EACf,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,2BAA2B,CAAC,MAAA,EAAQ,SAAS,YAAY,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAChG,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,sBAAsB,CACpB,OAAA,EACA,cACA,WAAA,GAAc,EAAA,EACd,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,uBAAA;AAAA,MACA,CAAC,OAAA,EAAS,YAAA,EAAc,WAAW,CAAA;AAAA,MACnC,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAA,GAAsB,CACpB,MAAA,EACA,OAAA,EACA,cACA,WAAA,GAAc,EAAA,EACd,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,uBAAA;AAAA,MACA,CAAC,MAAA,EAAQ,OAAA,EAAS,YAAA,EAAc,WAAW,CAAA;AAAA,MAC3C,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,yBAAyB,CACvB,OAAA,EACA,YAAA,EACA,KAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,2BAAA;AAAA,MACA,CAAC,OAAA,EAAS,YAAA,EAAc,KAAK,CAAA;AAAA,MAC7B,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,yBAAyB,CACvB,MAAA,EACA,SACA,YAAA,EACA,KAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,2BAAA;AAAA,MACA,CAAC,MAAA,EAAQ,OAAA,EAAS,YAAA,EAAc,KAAK,CAAA;AAAA,MACrC,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,4BAA4B,CAC1B,OAAA,EACA,kBAAA,EACA,gBAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,8BAAA;AAAA,MACA,CAAC,OAAA,EAAS,kBAAA,EAAoB,gBAAgB,CAAA;AAAA,MAC9C,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAA,GAAsB,CACpB,OAAA,EACA,KAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,uBAAA,EAAyB,CAAC,SAAS,KAAK,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC/E,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,sBAAsB,CACpB,MAAA,EACA,OAAA,EACA,KAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,yBAAyB,CAAC,MAAA,EAAQ,SAAS,KAAK,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACvF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAA,GAAmB,IAAA,CAAK,mBAAA,CAGtB,cAAc,CAAA;AAAA;AAAA;AAAA;AAAA,EAKhB,4BAA4B,IAAA,CAAK,mBAAA;AAAA,IAC/B;AAAA,GACF;AAAA;AAAA;AAAA;AAAA,EAKA,yBAAA,GAA4B,IAAA,CAAK,mBAAA,CAG/B,yBAAyB,CAAA;AAAA;AAAA;AAAA;AAAA,EAK3B,wBAAA,GAA2B,IAAA,CAAK,mBAAA,CAG9B,uBAAuB,CAAA;AAAA;AAAA;AAAA;AAAA,EAKzB,wBAAA,GAA2B,IAAA,CAAK,mBAAA,CAG9B,uBAAuB,CAAA;AAAA;AAAA;AAAA;AAAA,EAKzB,8BAAA,GAAiC,IAAA,CAAK,mBAAA,CAGpC,8BAA8B,CAAA;AAClC,CAAA;AAjNOD,OAAAA,GAAA,gBAAA,CAAAC,IAAAA,CAAAA;AAAM,WAAA,GAAN,iBAAA,CAAAD,OAAAA,EAAA,CAAA,EAAA,aAAA,EADP,uBAAA,EACa,WAAA,CAAA;AAAN,iBAAA,CAAAA,SAAA,CAAA,EAAM,WAAA,CAAA;AAoNN,IAAM,WAAA,GAAc,IAAI,WAAA;;;AC/O/B,IAAA,qBAAA,EAAAA,OAAAA,EAAAC,IAAAA;AAMA,qBAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,SAAA,GAAN,eAAwBA,IAAAA,GAAA,WAAA,EAAY;AAAA,EAChC,IAAA,GAAO,KAAA;AAAA,EACP,WAAA,GAAc,wDAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,cAAA,GAAiB,CACf,OAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,kBAAA,EAAoB,CAAC,OAAO,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACnE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,GAAiB,CACf,QAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,kBAAA,EAAoB,CAAC,QAAQ,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACpE,CAAA;AACF,CAAA;AAzBOD,OAAAA,GAAA,gBAAA,CAAAC,IAAAA,CAAAA;AAAM,SAAA,GAAN,iBAAA,CAAAD,OAAAA,EAAA,CAAA,EAAA,WAAA,EADP,qBAAA,EACa,SAAA,CAAA;AAAN,iBAAA,CAAAA,SAAA,CAAA,EAAM,SAAA,CAAA;;;ACPb,IAAA,+BAAA,EAAAA,OAAAA,EAAAC,IAAAA;AAMA,+BAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,mBAAA,GAAN,eAAkCA,IAAAA,GAAA,WAAA,EAAY;AAAA,EAC1C,IAAA,GAAO,gBAAA;AAAA,EACP,WAAA,GAAc,0CAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,cAAA,GAAiB,CAAC,SAAA,EAAsC,OAAA,KAAiC;AACvF,IAAA,IAAA,CAAK,UAAA,CAAW,iBAAA,EAAmB,EAAC,EAAG,WAAW,OAAO,CAAA;AAAA,EAC3D,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,mBAAA,GAAwC;AAC5C,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,IAAA,CAAK,cAAA;AAAA,QACH,CAAC,OAAO,IAAA,KAAS;AACf,UAAA,IAAI,KAAK,OAAA,EAAS;AAChB,YAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,UACd,CAAA,MAAO;AACL,YAAA,MAAA,CAAO,IAAI,KAAA,CAAM,IAAA,CAAK,MAAA,IAAU,eAAe,CAAC,CAAA;AAAA,UAClD;AAAA,QACF,CAAA;AAAA,QACA,WAAS,MAAA,CAAO,IAAI,MAAM,MAAA,CAAO,KAAK,CAAC,CAAC;AAAA,OAC1C;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AACF,CAAA;AA9BOD,OAAAA,GAAA,gBAAA,CAAAC,IAAAA,CAAAA;AAAM,mBAAA,GAAN,iBAAA,CAAAD,OAAAA,EAAA,CAAA,EAAA,qBAAA,EADP,+BAAA,EACa,mBAAA,CAAA;AAAN,iBAAA,CAAAA,SAAA,CAAA,EAAM,mBAAA,CAAA;;;ACPb,IAAA,4BAAA,EAAAA,OAAAA,EAAAC,IAAAA;AAMA,4BAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,gBAAA,GAAN,eAA+BA,IAAAA,GAAA,WAAA,EAAY;AAAA,EACvC,IAAA,GAAO,YAAA;AAAA,EACP,WAAA,GAAc,sCAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,cAAA,GAAiB,CACf,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,iBAAA,EAAmB,EAAC,EAAG,WAAW,OAAO,CAAA;AAAA,EAC3D,CAAA;AACF,CAAA;AAbOD,OAAAA,GAAA,gBAAA,CAAAC,IAAAA,CAAAA;AAAM,gBAAA,GAAN,iBAAA,CAAAD,OAAAA,EAAA,CAAA,EAAA,kBAAA,EADP,4BAAA,EACa,gBAAA,CAAA;AAAN,iBAAA,CAAAA,SAAA,CAAA,EAAM,gBAAA,CAAA;;;ACPb,IAAA,2BAAA,EAAAA,OAAAA,EAAAC,IAAAA;AAcA,2BAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,eAAA,GAAN,eAA8BA,IAAAA,GAAA,WAAA,EAAY;AAAA,EACtC,IAAA,GAAO,WAAA;AAAA,EACP,WAAA,GAAc,0CAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,+BAAA,GAAkC,CAChC,IAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,sCAAA,EAAwC,CAAC,IAAI,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACpF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,6BAAA,GAAgC,CAC9B,SAAA,EACA,MAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,mCAAA,EAAqC,CAAC,WAAW,MAAM,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC9F,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,wBAAA,GAA2B,CACzB,IAAA,EACA,MAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,8BAAA,EAAgC,CAAC,MAAM,MAAM,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACpF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,qBAAA,GAAwB,CACtB,KAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,0BAAA,EAA4B,CAAC,KAAK,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACzE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,oCAAA,GAAuC,CACrC,SAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,2CAAA,EAA6C,CAAC,SAAS,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC9F,CAAA;AACF,CAAA;AA5DOD,OAAAA,GAAA,gBAAA,CAAAC,IAAAA,CAAAA;AAAM,eAAA,GAAN,iBAAA,CAAAD,OAAAA,EAAA,CAAA,EAAA,iBAAA,EADP,2BAAA,EACa,eAAA,CAAA;AAAN,iBAAA,CAAAA,SAAA,CAAA,EAAM,eAAA,CAAA;;;ACfb,IAAA,wBAAA,EAAAA,OAAAA,EAAAC,IAAAA;AAMA,wBAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,YAAA,GAAN,eAA2BA,IAAAA,GAAA,WAAA,EAAY;AAAA,EACnC,IAAA,GAAO,QAAA;AAAA,EACP,WAAA,GAAc,gEAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,eAAe,CACb,UAAA,EACA,UAAA,EACA,KAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,iBAAiB,CAAC,UAAA,EAAY,YAAY,KAAK,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACtF,CAAA;AAAA;AAAA,EAGA,MAAM,iBAAA,CAAkB,UAAA,EAAoB,UAAA,EAAoB,KAAA,EAAiC;AAC/F,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,IAAA,CAAK,YAAA;AAAA,QACH,UAAA;AAAA,QACA,UAAA;AAAA,QACA,KAAA;AAAA,QACA,CAAC,OAAO,IAAA,KAAS;AACf,UAAA,IAAI,KAAK,OAAA,EAAS;AAChB,YAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,UACd,CAAA,MAAO;AACL,YAAA,MAAA,CAAO,IAAI,KAAA,CAAM,IAAA,CAAK,MAAA,IAAU,eAAe,CAAC,CAAA;AAAA,UAClD;AAAA,QACF,CAAA;AAAA,QACA,WAAS,MAAA,CAAO,IAAI,MAAM,MAAA,CAAO,KAAK,CAAC,CAAC;AAAA,OAC1C;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AACF,CAAA;AAnCOD,OAAAA,GAAA,gBAAA,CAAAC,IAAAA,CAAAA;AAAM,YAAA,GAAN,iBAAA,CAAAD,OAAAA,EAAA,CAAA,EAAA,cAAA,EADP,wBAAA,EACa,YAAA,CAAA;AAAN,iBAAA,CAAAA,SAAA,CAAA,EAAM,YAAA,CAAA;;;ACPb,IAAA,sBAAA,EAAAA,OAAAA,EAAAC,IAAAA;AAMA,sBAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,UAAA,GAAN,eAAyBA,IAAAA,GAAA,WAAA,EAAY;AAAA,EACjC,IAAA,GAAO,MAAA;AAAA,EACP,WAAA,GAAc,4CAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,iBAAA,GAAoB,CAClB,WAAA,EACA,UAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,oBAAA,EAAsB,CAAC,aAAa,UAAU,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACrF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAA,GAAsB,CACpB,KAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,uBAAA,EAAyB,CAAC,KAAK,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACtE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAA,GAAqB,CACnB,WAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,sBAAA,EAAwB,CAAC,WAAW,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC3E,CAAA;AACF,CAAA;AArCOD,OAAAA,GAAA,gBAAA,CAAAC,IAAAA,CAAAA;AAAM,UAAA,GAAN,iBAAA,CAAAD,OAAAA,EAAA,CAAA,EAAA,YAAA,EADP,sBAAA,EACa,UAAA,CAAA;AAAN,iBAAA,CAAAA,SAAA,CAAA,EAAM,UAAA,CAAA;;;ACPb,IAAA,sBAAA,EAAAA,OAAAA,EAAAC,IAAAA;AAYA,sBAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,UAAA,GAAN,eAAyBA,IAAAA,GAAA,WAAA,EAAY;AAAA,EACjC,IAAA,GAAO,MAAA;AAAA,EACP,WAAA,GAAc,gDAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,SAAA,GAAY,CACV,KAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,YAAA,EAAc,CAAC,KAAK,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC3D,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,GAAiB,CACf,IAAA,EACA,IAAA,EACA,MACA,WAAA,EACA,WAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,iBAAA;AAAA,MACA,CAAC,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,aAAa,WAAW,CAAA;AAAA,MAC3C,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,GAAY,CACV,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,YAAA,EAAc,EAAC,EAAG,WAAW,OAAO,CAAA;AAAA,EACtD,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAA,GAAmB,CACjB,IAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,mBAAA,EAAqB,CAAC,IAAI,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACjE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB,CACf,IAAA,EACA,MACA,IAAA,EACA,QAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,mBAAmB,CAAC,IAAA,EAAM,MAAM,IAAA,EAAM,QAAQ,CAAA,EAAG,SAAA,EAAW,OAAO,CAAA;AAAA,EACrF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAA,GAAsB,CACpB,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,uBAAA,EAAyB,EAAC,EAAG,WAAW,OAAO,CAAA;AAAA,EACjE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,CACR,IAAA,EACA,MACA,IAAA,EACA,KAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,YAAY,CAAC,IAAA,EAAM,MAAM,IAAA,EAAM,KAAK,CAAA,EAAG,SAAA,EAAW,OAAO,CAAA;AAAA,EAC3E,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,QAAA,GAAW,CACT,IAAA,EACA,IAAA,EACA,MACA,QAAA,EACA,KAAA,EACA,YAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,WAAA;AAAA,MACA,CAAC,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,QAAA,EAAU,OAAO,YAAY,CAAA;AAAA,MAChD,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AACF,CAAA;AAlHOD,OAAAA,GAAA,gBAAA,CAAAC,IAAAA,CAAAA;AAAM,UAAA,GAAN,iBAAA,CAAAD,OAAAA,EAAA,CAAA,EAAA,YAAA,EADP,sBAAA,EACa,UAAA,CAAA;AAAN,iBAAA,CAAAA,SAAA,CAAA,EAAM,UAAA,CAAA;;;ACqDN,IAAM,WAAN,MAAe;AAAA;AAAA,EAEJ,MAAA,GAAS,cAAA;AAAA;AAAA,EAGT,MAAA,GAAS,qBAAA;AAAA;AAAA,EAGT,OAAA,GAAU,aAAA;AAAA;AAAA,EAGV,GAAA,GAAM,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA;AAAA,EAC7B,KAAA,GAAQ,aAAA,CAAc,GAAA,CAAI,OAAO,CAAA;AAAA,EACjC,IAAA,GAAO,aAAA,CAAc,GAAA,CAAI,MAAM,CAAA;AAAA,EAC/B,UAAA,GAAa,aAAA,CAAc,GAAA,CAAI,YAAY,CAAA;AAAA,EAC3C,aAAA,GAAgB,aAAA,CAAc,GAAA,CAAI,gBAAgB,CAAA;AAAA,EAClD,MAAA,GAAS,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAA;AAAA,EACnC,OAAA,GAAU,aAAA,CAAc,GAAA,CAAI,SAAS,CAAA;AAAA,EACrC,IAAA,GAAO,aAAA,CAAc,GAAA,CAAI,MAAM,CAAA;AAAA,EAC/B,MAAA,GAAS,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAA;AAAA,EACnC,GAAA,GAAM,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA;AAAA,EAC7B,MAAA,GAAS,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAA;AAAA,EACnC,MAAA,GAAS,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAA;AAAA,EACnC,UAAA,GAAa,aAAA,CAAc,GAAA,CAAI,YAAY,CAAA;AAAA,EAC3C,GAAA,GAAM,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA;AAAA,EAC7B,MAAA,GAAS,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAA;AAAA,EACnC,SAAA,GAAY,aAAA,CAAc,GAAA,CAAI,WAAW,CAAA;AAAA,EACzC,IAAA,GAAO,aAAA,CAAc,GAAA,CAAI,MAAM,CAAA;AAAA;AAAA;AAAA;AAAA,EAK/C,MAAM,UAAA,GAAwD;AAC5D,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,IAAA,CAAK,MAAA,CAAO,YAAA;AAAA,QACV,CAAC,KAAA,EAAO,KAAA,KAAU,QAAQ,EAAE,KAAA,EAAO,OAAO,CAAA;AAAA,QAC1C,CAAC,OAAO,MAAA,KAAW,MAAA,CAAO,IAAI,KAAA,CAAM,MAAA,IAAU,sBAAsB,CAAC;AAAA,OACvE;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,GAAgC;AACpC,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,IAAA,CAAK,MAAA,CAAO,cAAA;AAAA,QACV,MAAM,OAAA,EAAQ;AAAA,QACd,CAAC,OAAO,MAAA,KAAW,MAAA,CAAO,IAAI,KAAA,CAAM,MAAA,IAAU,6BAA6B,CAAC;AAAA,OAC9E;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAA,GAAsC;AAC1C,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,IAAA,CAAK,MAAA,CAAO,iBAAA;AAAA,QACV,CAAA,SAAA,KAAa,QAAQ,SAAS,CAAA;AAAA,QAC9B,CAAC,OAAO,MAAA,KAAW,MAAA,CAAO,IAAI,KAAA,CAAM,MAAA,IAAU,sBAAsB,CAAC;AAAA,OACvE;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAA,GAAwD;AAC5D,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,IAAA,CAAK,MAAA,CAAO,OAAA;AAAA,QACV,CAAC,OAAO,IAAA,KAA0B;AAChC,UAAA,IAAI,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,KAAA,IAAS,KAAK,KAAA,EAAO;AAC5C,YAAA,OAAA,CAAQ,EAAE,KAAA,EAAO,IAAA,CAAK,OAAO,KAAA,EAAO,IAAA,CAAK,OAAO,CAAA;AAAA,UAClD,CAAA,MAAO;AACL,YAAA,MAAA,CAAO,IAAI,KAAA,CAAM,IAAA,CAAK,MAAA,IAAU,uBAAuB,CAAC,CAAA;AAAA,UAC1D;AAAA,QACF,CAAA;AAAA,QACA,CAAA,KAAA,KAAS,OAAO,IAAI,KAAA,CAAM,OAAO,KAAK,CAAA,IAAK,sBAAsB,CAAC;AAAA,OACpE;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAA,GAA8B;AAClC,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,IAAA,CAAK,MAAA,CAAO,MAAA;AAAA,QACV,CAAC,OAAO,IAAA,KAAsB;AAC5B,UAAA,IAAI,KAAK,OAAA,EAAS;AAChB,YAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,UACd,CAAA,MAAO;AACL,YAAA,MAAA,CAAO,IAAI,KAAA,CAAM,IAAA,CAAK,MAAA,IAAU,iCAAiC,CAAC,CAAA;AAAA,UACpE;AAAA,QACF,CAAA;AAAA,QACA,CAAA,KAAA,KAAS,OAAO,IAAI,KAAA,CAAM,OAAO,KAAK,CAAA,IAAK,kCAAkC,CAAC;AAAA,OAChF;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAa,YAAA,EAAuC;AACxD,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,IAAA,CAAK,MAAA,CAAO,MAAA;AAAA,QACV,YAAA;AAAA,QACA,CAAC,OAAO,IAAA,KAAsB;AAC5B,UAAA,IAAI,KAAK,OAAA,EAAS;AAChB,YAAA,OAAA,EAAQ;AAAA,UACV,CAAA,MAAO;AACL,YAAA,MAAA,CAAO,IAAI,KAAA,CAAM,IAAA,CAAK,MAAA,IAAU,0BAA0B,CAAC,CAAA;AAAA,UAC7D;AAAA,QACF,CAAA;AAAA,QACA,CAAA,KAAA,KAAS,OAAO,IAAI,KAAA,CAAM,OAAO,KAAK,CAAA,IAAK,uBAAuB,CAAC;AAAA,OACrE;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAA,GAAgC;AAC9B,IAAA,OAAO,KAAK,OAAA,CAAQ,MAAA,GAAS,GAAA,CAAI,CAAA,MAAA,KAAU,OAAO,IAAI,CAAA;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,IAAA,EAAuB;AAC/B,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,UAAiC,IAAA,EAA6B;AAC5D,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAO,IAAI,CAAA;AAAA,EACjC;AACF;AAGO,IAAM,QAAA,GAAW,IAAI,QAAA,EAAS;AAGrC,IAAO,iBAAA,GAAQ;;;AC7LR,SAAS,kBAAA,GAA2B;AAEzC,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,IAAA,MAAM,GAAA,GAAM,MAAA;AAGZ,IAAA,GAAA,CAAI,MAAA,GAAS,cAAA;AACb,IAAA,GAAA,CAAI,WAAA,GAAc,qBAAA;AAGlB,IAAA,GAAA,CAAI,MAAA,GAAS,cAAA;AAGb,IAAA,GAAA,CAAI,QAAA,GAAW,QAAA;AAGf,IAAA,MAAM,aAAa,OAAA,CAAQ,GAAA;AAC3B,IAAA,MAAM,KAAA,GAAQ,OAAO,OAAA,KAAY,WAAA,IAAe,WAAW,QAAA,KAAa,aAAA;AAExE,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,GAAA,CAAI,WAAA,GAAc;AAAA,QAChB,OAAA,EAAS,OAAA;AAAA,QACT,MAAA,EAAQ,IAAA;AAAA,QACR,SAAS,EAAC;AAAA,QACV,KAAA,EAAO;AAAA,OACT;AAEA,MAAA,OAAA,CAAQ,KAAK,sDAA+C,CAAA;AAC5D,MAAA,OAAA,CAAQ,KAAK,iBAAA,EAAmB;AAAA,QAC9B,MAAA,EAAQ,6CAAA;AAAA,QACR,WAAA,EAAa,8BAAA;AAAA,QACb,MAAA,EAAQ,yBAAA;AAAA,QACR,QAAA,EAAU,gCAAA;AAAA,QACV,WAAA,EAAa;AAAA,OACd,CAAA;AAAA,IACH;AAGA,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,OAAA,CAAQ,KAAK,sCAAiC,CAAA;AAC9C,MAAA,OAAA,CAAQ,KAAK,gBAAA,EAAkB;AAAA,QAC7B,MAAA,EAAQ,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA;AAAA,QAC1B,WAAA,EAAa,OAAA,CAAQ,GAAA,CAAI,WAAW,CAAA;AAAA,QACpC,MAAA,EAAQ,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA;AAAA,QAC1B,QAAA,EAAU,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA;AAAA,QAC9B,WAAA,EAAa,OAAA,CAAQ,GAAA,CAAI,WAAW;AAAA,OACrC,CAAA;AAAA,IACH;AAAA,EACF;AACF;AAGA,kBAAA,EAAmB","file":"index.cjs","sourcesContent":["// Type declarations for browser environment\ninterface WindowLocation {\n protocol: string;\n}\n\ninterface BrowserWindow {\n location: WindowLocation;\n WebSocket: typeof WebSocket;\n}\n\ninterface EIMZOEXTType {\n URL: string;\n callFunction: (\n funcDef: any,\n callback: (event: MessageEvent, data: any) => void,\n error?: (errorCode?: any) => void\n ) => void;\n version: (\n callback: (event: MessageEvent, data: any) => void,\n error?: (errorCode?: any) => void\n ) => void;\n apidoc: (\n callback: (event: MessageEvent, data: any) => void,\n error?: (errorCode?: any) => void\n ) => void;\n apikey: (\n domainAndKey: any,\n callback: (event: MessageEvent, data: any) => void,\n error?: (errorCode?: any) => void\n ) => void;\n}\n\n// Browser globals\ndeclare const window: BrowserWindow;\ndeclare const EIMZOEXT: EIMZOEXTType | undefined;\n\nconst CAPIWS: EIMZOEXTType =\n typeof EIMZOEXT !== 'undefined'\n ? EIMZOEXT\n : {\n URL:\n (window.location.protocol.toLowerCase() === 'https:'\n ? 'wss://127.0.0.1:64443'\n : 'ws://127.0.0.1:64646') + '/service/cryptapi',\n callFunction: function (\n funcDef: any,\n callback: (event: MessageEvent, data: any) => void,\n error?: (errorCode?: any) => void\n ): void {\n if (!window.WebSocket) {\n if (error) error();\n return;\n }\n let socket: WebSocket;\n try {\n socket = new WebSocket(this.URL);\n } catch (e) {\n if (error) error(e);\n return;\n }\n socket.onclose = function (e: CloseEvent): void {\n if (error) {\n if (e.code !== 1000) {\n error(e.code);\n }\n }\n };\n socket.onmessage = function (event: MessageEvent): void {\n const data = JSON.parse(event.data);\n socket.close();\n callback(event, data);\n };\n socket.onopen = function (): void {\n socket.send(JSON.stringify(funcDef));\n };\n },\n version: function (\n callback: (event: MessageEvent, data: any) => void,\n error?: (errorCode?: any) => void\n ): void {\n if (!window.WebSocket) {\n if (error) error();\n return;\n }\n let socket: WebSocket;\n try {\n socket = new WebSocket(this.URL);\n } catch (e) {\n if (error) error(e);\n return;\n }\n socket.onclose = function (e: CloseEvent): void {\n if (error) {\n if (e.code !== 1000) {\n error(e.code);\n }\n }\n };\n socket.onmessage = function (event: MessageEvent): void {\n const data = JSON.parse(event.data);\n socket.close();\n callback(event, data);\n };\n socket.onopen = function (): void {\n const o = { name: 'version' };\n socket.send(JSON.stringify(o));\n };\n },\n apidoc: function (\n callback: (event: MessageEvent, data: any) => void,\n error?: (errorCode?: any) => void\n ): void {\n if (!window.WebSocket) {\n if (error) error();\n return;\n }\n let socket: WebSocket;\n try {\n socket = new WebSocket(this.URL);\n } catch (e) {\n if (error) error(e);\n return;\n }\n socket.onclose = function (e: CloseEvent): void {\n if (error) {\n if (e.code !== 1000) {\n error(e.code);\n }\n }\n };\n socket.onmessage = function (event: MessageEvent): void {\n const data = JSON.parse(event.data);\n socket.close();\n callback(event, data);\n };\n socket.onopen = function (): void {\n const o = { name: 'apidoc' };\n socket.send(JSON.stringify(o));\n };\n },\n apikey: function (\n domainAndKey: any,\n callback: (event: MessageEvent, data: any) => void,\n error?: (errorCode?: any) => void\n ): void {\n if (!window.WebSocket) {\n if (error) error();\n return;\n }\n let socket: WebSocket;\n try {\n socket = new WebSocket(this.URL);\n } catch (e) {\n if (error) error(e);\n return;\n }\n socket.onclose = function (e: CloseEvent): void {\n if (error) {\n if (e.code !== 1000) {\n error(e.code);\n }\n }\n };\n socket.onmessage = function (event: MessageEvent): void {\n const data = JSON.parse(event.data);\n socket.close();\n callback(event, data);\n };\n socket.onopen = function (): void {\n const o = { name: 'apikey', arguments: domainAndKey };\n socket.send(JSON.stringify(o));\n };\n }\n };\n\nexport default CAPIWS;\nexport type { EIMZOEXTType };\n","// Type definitions for E-IMZO Client\nimport CAPIWS from './e-imzo/capiws';\n\n// Extend Date interface to include custom methods\ndeclare global {\n interface Date {\n yyyymmdd(): string;\n ddmmyyyy(): string;\n }\n\n interface String {\n splitKeep(splitter: string | RegExp, ahead?: boolean): string[];\n }\n}\n\n// Date prototype extensions\nDate.prototype.yyyymmdd = function (): string {\n const yyyy = this.getFullYear().toString();\n const mm = (this.getMonth() + 1).toString(); // getMonth() is zero-based\n const dd = this.getDate().toString();\n return yyyy + (mm[1] ? mm : '0' + mm[0]) + (dd[1] ? dd : '0' + dd[0]); // padding\n};\n\nDate.prototype.ddmmyyyy = function (): string {\n const yyyy = this.getFullYear().toString();\n const mm = (this.getMonth() + 1).toString(); // getMonth() is zero-based\n const dd = this.getDate().toString();\n return (dd[1] ? dd : '0' + dd[0]) + '.' + (mm[1] ? mm : '0' + mm[0]) + '.' + yyyy; // padding\n};\n\n// Type definitions\ninterface DateConvertible {\n year?: number;\n month?: number;\n date?: number;\n}\n\ninterface DatesUtility {\n convert(d: Date | number[] | number | string | DateConvertible): Date | number;\n compare(\n a: Date | number[] | number | string | DateConvertible,\n b: Date | number[] | number | string | DateConvertible\n ): number;\n inRange(\n d: Date | number[] | number | string | DateConvertible,\n start: Date | number[] | number | string | DateConvertible,\n end: Date | number[] | number | string | DateConvertible\n ): boolean | number;\n}\n\ninterface CertificateInfo {\n disk?: string;\n path?: string;\n name?: string;\n alias?: string;\n cardUID?: string;\n statusInfo?: string;\n ownerName?: string;\n info?: string;\n serialNumber: string;\n validFrom: Date;\n validTo: Date;\n CN: string;\n TIN: string;\n UID: string;\n PINFL: string;\n O: string;\n T: string;\n type: 'pfx' | 'ftjc';\n}\n\ninterface ErrorInfo {\n e?: unknown;\n r?: string;\n}\n\ntype FailCallback = (error: unknown, reason: string | null) => void;\n\ntype ItemIdGenerator = (vo: CertificateInfo, rec: string) => string;\n\ntype ItemUiGenerator = (key: string, vo: CertificateInfo) => unknown;\n\ninterface ApiResponse {\n success: boolean;\n reason?: string;\n major?: string;\n minor?: string;\n keyId?: string;\n pkcs7_64?: string;\n readers?: unknown[];\n certificates?: Record<\n string,\n {\n disk: string;\n path: string;\n name: string;\n alias: string;\n }\n >;\n tokens?: Record<\n string,\n {\n cardUID: string;\n statusInfo: string;\n ownerName: string;\n info: string;\n }\n >;\n}\n\ninterface EIMZOClientType {\n NEW_API: boolean;\n NEW_API2: boolean;\n API_KEYS: string[];\n checkVersion(success: (major: string, minor: string) => void, fail: FailCallback): void;\n installApiKeys(success: () => void, fail: FailCallback): void;\n listAllUserKeys(\n itemIdGen: ItemIdGenerator,\n itemUiGen: ItemUiGenerator,\n success: (items: unknown[], firstId: string | null) => void,\n fail: FailCallback\n ): void;\n idCardIsPLuggedIn(success: (isPlugged: boolean) => void, fail: FailCallback): void;\n loadKey(\n itemObject: CertificateInfo,\n success: (id: string) => void,\n fail: FailCallback,\n verifyPassword?: boolean\n ): void;\n changeKeyPassword(itemObject: CertificateInfo, success: () => void, fail: FailCallback): void;\n createPkcs7(\n id: string,\n data: string,\n timestamper: unknown,\n success: (pkcs7: string) => void,\n fail: FailCallback,\n detached?: boolean,\n isDataBase64Encoded?: boolean\n ): void;\n _getX500Val(s: string, f: string): string;\n _findPfxs2(\n itemIdGen: ItemIdGenerator,\n itemUiGen: ItemUiGenerator,\n items: unknown[],\n errors: ErrorInfo[],\n callback: (firstItemId?: string) => void\n ): void;\n _findTokens2(\n itemIdGen: ItemIdGenerator,\n itemUiGen: ItemUiGenerator,\n items: unknown[],\n errors: ErrorInfo[],\n callback: (firstItemId?: string) => void\n ): void;\n}\n\n// Dates utility object\nconst dates: DatesUtility = {\n convert(d: Date | number[] | number | string | DateConvertible): Date | number {\n // Converts the date in d to a date-object. The input can be:\n // a date object: returned without modification\n // an array : Interpreted as [year,month,day]. NOTE: month is 0-11.\n // a number : Interpreted as number of milliseconds\n // since 1 Jan 1970 (a timestamp)\n // a string : Any format supported by the javascript engine, like\n // \"YYYY/MM/DD\", \"MM/DD/YYYY\", \"Jan 31 2009\" etc.\n // an object : Interpreted as an object with year, month and date\n // attributes. **NOTE** month is 0-11.\n if (d instanceof Date) {\n return d;\n } else if (Array.isArray(d) && d.length >= 3) {\n return new Date(d[0] || 0, d[1] || 0, d[2] || 0);\n } else if (typeof d === 'number') {\n return new Date(d);\n } else if (typeof d === 'string') {\n return new Date(d);\n } else if (typeof d === 'object' && d !== null) {\n const dateObj = d as DateConvertible;\n return new Date(dateObj.year || 0, dateObj.month || 0, dateObj.date || 0);\n }\n return NaN;\n },\n\n compare(\n a: Date | number[] | number | string | DateConvertible,\n b: Date | number[] | number | string | DateConvertible\n ): number {\n // Compare two dates (could be of any type supported by the convert\n // function above) and returns:\n // -1 : if a < b\n // 0 : if a = b\n // 1 : if a > b\n // NaN : if a or b is an illegal date\n // NOTE: The code inside isFinite does an assignment (=).\n const aVal = this.convert(a).valueOf();\n const bVal = this.convert(b).valueOf();\n return isFinite(aVal) && isFinite(bVal) ? (aVal > bVal ? 1 : 0) - (aVal < bVal ? 1 : 0) : NaN;\n },\n\n inRange(\n d: Date | number[] | number | string | DateConvertible,\n start: Date | number[] | number | string | DateConvertible,\n end: Date | number[] | number | string | DateConvertible\n ): boolean | number {\n // Checks if date in d is between dates in start and end.\n // Returns a boolean or NaN:\n // true : if d is between start and end (inclusive)\n // false : if d is before start or after end\n // NaN : if one or more of the dates is illegal.\n // NOTE: The code inside isFinite does an assignment (=).\n const dVal = this.convert(d).valueOf();\n const startVal = this.convert(start).valueOf();\n const endVal = this.convert(end).valueOf();\n return isFinite(dVal) && isFinite(startVal) && isFinite(endVal)\n ? startVal <= dVal && dVal <= endVal\n : NaN;\n }\n};\n\n// String prototype extension\nString.prototype.splitKeep = function (splitter: string | RegExp, ahead?: boolean): string[] {\n const result: string[] = [];\n\n if (splitter !== '') {\n // Substitution of matched string\n function getSubst(value: string): string {\n const substChar = value[0] === '0' ? '1' : '0';\n let subst = '';\n for (let i = 0; i < value.length; i++) {\n subst += substChar;\n }\n return subst;\n }\n\n const matches: Array<{ value: string; index: number }> = [];\n\n // Getting matched value and its index\n if (splitter instanceof RegExp) {\n this.replace(splitter, (m: string, ...args: unknown[]) => {\n const offset = args[args.length - 2] as number;\n matches.push({ value: m, index: offset });\n return getSubst(m);\n });\n } else {\n this.replaceAll(splitter, (m: string, offset: number) => {\n matches.push({ value: m, index: offset });\n return getSubst(m);\n });\n }\n\n // Finds split substrings\n let lastIndex = 0;\n for (let i = 0; i < matches.length; i++) {\n const m = matches[i];\n if (m) {\n const nextIndex = ahead === true ? m.index : m.index + m.value.length;\n if (nextIndex !== lastIndex) {\n const part = this.substring(lastIndex, nextIndex);\n result.push(part);\n lastIndex = nextIndex;\n }\n }\n }\n if (lastIndex < this.length) {\n const part = this.substring(lastIndex, this.length);\n result.push(part);\n }\n } else {\n result.push(this.toString());\n }\n return result;\n};\n\n// E-IMZO Client implementation\nconst EIMZOClient: EIMZOClientType = {\n NEW_API: false,\n NEW_API2: false,\n API_KEYS: [\n 'localhost',\n '96D0C1491615C82B9A54D9989779DF825B690748224C2B04F500F370D51827CE2644D8D4A82C18184D73AB8530BB8ED537269603F61DB0D03D2104ABF789970B',\n '127.0.0.1',\n 'A7BCFA5D490B351BE0754130DF03A068F855DB4333D43921125B9CF2670EF6A40370C646B90401955E1F7BC9CDBF59CE0B2C5467D820BE189C845D0B79CFC96F'\n ],\n\n checkVersion(success: (major: string, minor: string) => void, fail: FailCallback): void {\n CAPIWS.version(\n (event: MessageEvent, data: ApiResponse) => {\n if (data.success === true) {\n if (data.major && data.minor) {\n const installedVersion = parseInt(data.major) * 100 + parseInt(data.minor);\n EIMZOClient.NEW_API = installedVersion >= 336;\n EIMZOClient.NEW_API2 = installedVersion >= 412;\n success(data.major, data.minor);\n } else {\n fail(null, 'E-IMZO Version is undefined');\n }\n } else {\n fail(null, data.reason || 'Unknown error');\n }\n },\n (e: unknown) => {\n fail(e, null);\n }\n );\n },\n\n installApiKeys(success: () => void, fail: FailCallback): void {\n CAPIWS.apikey(\n EIMZOClient.API_KEYS,\n (event: MessageEvent, data: ApiResponse) => {\n if (data.success) {\n success();\n } else {\n fail(null, data.reason || 'Unknown error');\n }\n },\n (e: unknown) => {\n fail(e, null);\n }\n );\n },\n\n listAllUserKeys(\n itemIdGen: ItemIdGenerator,\n itemUiGen: ItemUiGenerator,\n success: (items: unknown[], firstId: string | null) => void,\n fail: FailCallback\n ): void {\n const items: unknown[] = [];\n const errors: ErrorInfo[] = [];\n\n if (!EIMZOClient.NEW_API) {\n fail(null, 'Please install new version of E-IMZO');\n } else {\n if (EIMZOClient.NEW_API2) {\n EIMZOClient._findPfxs2(itemIdGen, itemUiGen, items, errors, (firstItmId2?: string) => {\n if (items.length === 0 && errors.length > 0) {\n const firstError = errors[0];\n if (firstError) {\n fail(firstError.e, firstError.r || null);\n }\n } else {\n let firstId: string | null = null;\n if (items.length === 1 && firstItmId2) {\n firstId = firstItmId2;\n }\n success(items, firstId);\n }\n });\n } else {\n EIMZOClient._findPfxs2(itemIdGen, itemUiGen, items, errors, (firstItmId2?: string) => {\n EIMZOClient._findTokens2(itemIdGen, itemUiGen, items, errors, (firstItmId3?: string) => {\n if (items.length === 0 && errors.length > 0) {\n const firstError = errors[0];\n if (firstError) {\n fail(firstError.e, firstError.r || null);\n }\n } else {\n let firstId: string | null = null;\n if (items.length === 1) {\n if (firstItmId2) {\n firstId = firstItmId2;\n } else if (firstItmId3) {\n firstId = firstItmId3;\n }\n }\n success(items, firstId);\n }\n });\n });\n }\n }\n },\n\n idCardIsPLuggedIn(success: (isPlugged: boolean) => void, fail: FailCallback): void {\n if (!EIMZOClient.NEW_API2) {\n console.log('E-IMZO version should be 4.12 or newer');\n success(false);\n } else {\n CAPIWS.callFunction(\n { plugin: 'idcard', name: 'list_readers' },\n (event: MessageEvent, data: ApiResponse) => {\n if (data.success) {\n success((data.readers?.length || 0) > 0);\n } else {\n fail(null, data.reason || 'Unknown error');\n }\n },\n (e: unknown) => {\n fail(e, null);\n }\n );\n }\n },\n\n loadKey(\n itemObject: CertificateInfo,\n success: (id: string) => void,\n fail: FailCallback,\n verifyPassword?: boolean\n ): void {\n if (itemObject) {\n const vo = itemObject;\n if (vo.type === 'pfx') {\n CAPIWS.callFunction(\n {\n plugin: 'pfx',\n name: 'load_key',\n arguments: [vo.disk, vo.path, vo.name, vo.alias]\n },\n (event: MessageEvent, data: ApiResponse) => {\n if (data.success && data.keyId) {\n const id = data.keyId;\n if (verifyPassword) {\n CAPIWS.callFunction(\n { name: 'verify_password', plugin: 'pfx', arguments: [id] },\n (event: MessageEvent, data: ApiResponse) => {\n if (data.success) {\n success(id);\n } else {\n fail(null, data.reason || 'Password verification failed');\n }\n },\n (e: unknown) => {\n fail(e, null);\n }\n );\n } else {\n success(id);\n }\n } else {\n fail(null, data.reason || 'Failed to load key');\n }\n },\n (e: unknown) => {\n fail(e, null);\n }\n );\n } else if (vo.type === 'ftjc') {\n CAPIWS.callFunction(\n { plugin: 'ftjc', name: 'load_key', arguments: [vo.cardUID] },\n (event: MessageEvent, data: ApiResponse) => {\n if (data.success && data.keyId) {\n const id = data.keyId;\n if (verifyPassword) {\n CAPIWS.callFunction(\n { plugin: 'ftjc', name: 'verify_pin', arguments: [id, '1'] },\n (event: MessageEvent, data: ApiResponse) => {\n if (data.success) {\n success(id);\n } else {\n fail(null, data.reason || 'PIN verification failed');\n }\n },\n (e: unknown) => {\n fail(e, null);\n }\n );\n } else {\n success(id);\n }\n } else {\n fail(null, data.reason || 'Failed to load key');\n }\n },\n (e: unknown) => {\n fail(e, null);\n }\n );\n }\n }\n },\n\n changeKeyPassword(itemObject: CertificateInfo, success: () => void, fail: FailCallback): void {\n if (itemObject) {\n const vo = itemObject;\n if (vo.type === 'pfx') {\n CAPIWS.callFunction(\n {\n plugin: 'pfx',\n name: 'load_key',\n arguments: [vo.disk, vo.path, vo.name, vo.alias]\n },\n (event: MessageEvent, data: ApiResponse) => {\n if (data.success && data.keyId) {\n const id = data.keyId;\n CAPIWS.callFunction(\n { name: 'change_password', plugin: 'pfx', arguments: [id] },\n (event: MessageEvent, data: ApiResponse) => {\n if (data.success) {\n success();\n } else {\n fail(null, data.reason || 'Failed to change password');\n }\n },\n (e: unknown) => {\n fail(e, null);\n }\n );\n } else {\n fail(null, data.reason || 'Failed to load key');\n }\n },\n (e: unknown) => {\n fail(e, null);\n }\n );\n } else if (vo.type === 'ftjc') {\n CAPIWS.callFunction(\n { plugin: 'ftjc', name: 'load_key', arguments: [vo.cardUID] },\n (event: MessageEvent, data: ApiResponse) => {\n if (data.success && data.keyId) {\n const id = data.keyId;\n CAPIWS.callFunction(\n { name: 'change_pin', plugin: 'ftjc', arguments: [id, '1'] },\n (event: MessageEvent, data: ApiResponse) => {\n if (data.success) {\n success();\n } else {\n fail(null, data.reason || 'Failed to change PIN');\n }\n },\n (e: unknown) => {\n fail(e, null);\n }\n );\n } else {\n fail(null, data.reason || 'Failed to load key');\n }\n },\n (e: unknown) => {\n fail(e, null);\n }\n );\n }\n }\n },\n\n createPkcs7(\n id: string,\n data: string,\n timestamper: any,\n success: (pkcs7: string) => void,\n fail: FailCallback,\n detached?: boolean,\n isDataBase64Encoded?: boolean\n ): void {\n // Note: Base64 should be imported or defined elsewhere\n let data64: string;\n if (isDataBase64Encoded === true) {\n data64 = data;\n } else {\n // Assuming Base64 utility is available globally or imported\n data64 =\n (\n globalThis as unknown as Record<string, { encode: (data: string) => string }>\n ).Base64?.encode(data) || btoa(data);\n }\n\n const detachedStr = detached === true ? 'yes' : 'no';\n\n CAPIWS.callFunction(\n {\n plugin: 'pkcs7',\n name: 'create_pkcs7',\n arguments: [data64, id, detachedStr]\n },\n (event: MessageEvent, data: ApiResponse) => {\n if (data.success && data.pkcs7_64) {\n const pkcs7 = data.pkcs7_64;\n success(pkcs7);\n } else {\n fail(null, data.reason || 'Failed to create PKCS7');\n }\n },\n (e: unknown) => {\n fail(e, null);\n }\n );\n },\n\n _getX500Val(s: string, f: string): string {\n const res = s.splitKeep(/,[A-Z]+=/g, true);\n for (const i in res) {\n const resItem = res[i];\n if (resItem) {\n const n = resItem.search((parseInt(i) > 0 ? ',' : '') + f + '=');\n if (n !== -1) {\n return resItem.slice(n + f.length + 1 + (parseInt(i) > 0 ? 1 : 0));\n }\n }\n }\n return '';\n },\n\n _findPfxs2(\n itemIdGen: ItemIdGenerator,\n itemUiGen: ItemUiGenerator,\n items: any[],\n errors: ErrorInfo[],\n callback: (firstItemId?: string) => void\n ): void {\n let itmkey0: string | undefined;\n\n CAPIWS.callFunction(\n { plugin: 'pfx', name: 'list_all_certificates' },\n (event: MessageEvent, data: ApiResponse) => {\n if (data.success && data.certificates) {\n for (const rec in data.certificates) {\n const el = data.certificates[rec];\n if (!el) continue;\n\n let x500name_ex = el.alias.toUpperCase();\n x500name_ex = x500name_ex.replace('1.2.860.3.16.1.1=', 'INN=');\n x500name_ex = x500name_ex.replace('1.2.860.3.16.1.2=', 'PINFL=');\n\n const vo: CertificateInfo = {\n disk: el.disk,\n path: el.path,\n name: el.name,\n alias: el.alias,\n serialNumber: EIMZOClient._getX500Val(x500name_ex, 'SERIALNUMBER'),\n validFrom: new Date(\n EIMZOClient._getX500Val(x500name_ex, 'VALIDFROM')\n .replace(/\\./g, '-')\n .replace(' ', 'T')\n ),\n validTo: new Date(\n EIMZOClient._getX500Val(x500name_ex, 'VALIDTO')\n .replace(/\\./g, '-')\n .replace(' ', 'T')\n ),\n CN: EIMZOClient._getX500Val(x500name_ex, 'CN'),\n TIN:\n EIMZOClient._getX500Val(x500name_ex, 'INN') ||\n EIMZOClient._getX500Val(x500name_ex, 'UID'),\n UID: EIMZOClient._getX500Val(x500name_ex, 'UID'),\n PINFL: EIMZOClient._getX500Val(x500name_ex, 'PINFL'),\n O: EIMZOClient._getX500Val(x500name_ex, 'O'),\n T: EIMZOClient._getX500Val(x500name_ex, 'T'),\n type: 'pfx'\n };\n\n if (!vo.TIN && !vo.PINFL) continue;\n\n const itmkey = itemIdGen(vo, rec);\n if (!itmkey0) {\n itmkey0 = itmkey;\n }\n const itm = itemUiGen(itmkey, vo);\n items.push(itm);\n }\n } else {\n errors.push({ r: data.reason || 'Failed to list certificates' });\n }\n callback(itmkey0);\n },\n (e: unknown) => {\n errors.push({ e: e });\n callback(itmkey0);\n }\n );\n },\n\n _findTokens2(\n itemIdGen: ItemIdGenerator,\n itemUiGen: ItemUiGenerator,\n items: any[],\n errors: ErrorInfo[],\n callback: (firstItemId?: string) => void\n ): void {\n let itmkey0: string | undefined;\n\n CAPIWS.callFunction(\n { plugin: 'ftjc', name: 'list_all_keys', arguments: [''] },\n (event: MessageEvent, data: ApiResponse) => {\n if (data.success && data.tokens) {\n for (const rec in data.tokens) {\n const el = data.tokens[rec];\n if (!el) continue;\n\n let x500name_ex = el.info.toUpperCase();\n x500name_ex = x500name_ex.replace('1.2.860.3.16.1.1=', 'INN=');\n x500name_ex = x500name_ex.replace('1.2.860.3.16.1.2=', 'PINFL=');\n\n const vo: CertificateInfo = {\n cardUID: el.cardUID,\n statusInfo: el.statusInfo,\n ownerName: el.ownerName,\n info: el.info,\n serialNumber: EIMZOClient._getX500Val(x500name_ex, 'SERIALNUMBER'),\n validFrom: new Date(EIMZOClient._getX500Val(x500name_ex, 'VALIDFROM')),\n validTo: new Date(EIMZOClient._getX500Val(x500name_ex, 'VALIDTO')),\n CN: EIMZOClient._getX500Val(x500name_ex, 'CN'),\n TIN:\n EIMZOClient._getX500Val(x500name_ex, 'INN') ||\n EIMZOClient._getX500Val(x500name_ex, 'UID'),\n UID: EIMZOClient._getX500Val(x500name_ex, 'UID'),\n PINFL: EIMZOClient._getX500Val(x500name_ex, 'PINFL'),\n O: EIMZOClient._getX500Val(x500name_ex, 'O'),\n T: EIMZOClient._getX500Val(x500name_ex, 'T'),\n type: 'ftjc'\n };\n\n if (!vo.TIN && !vo.PINFL) continue;\n\n const itmkey = itemIdGen(vo, rec);\n if (!itmkey0) {\n itmkey0 = itmkey;\n }\n const itm = itemUiGen(itmkey, vo);\n items.push(itm);\n }\n } else {\n errors.push({ r: data.reason || 'Failed to list tokens' });\n }\n callback(itmkey0);\n },\n (e: unknown) => {\n errors.push({ e: e });\n callback(itmkey0);\n }\n );\n }\n};\n\nexport default EIMZOClient;\nexport { dates, type CertificateInfo, type EIMZOClientType };\n","import CAPIWS from '../e-imzo/capiws.js';\nimport type { BasePlugin, CallbackFunction, ErrorCallback, PluginMethodCall } from './types.js';\n\n/**\n * Core plugin base class that all E-IMZO plugins extend\n */\nexport abstract class EIMZOPlugin implements BasePlugin {\n abstract readonly name: string;\n public readonly version: string = '1.0.0';\n public readonly description: string = '';\n\n /**\n * Execute a plugin method call through CAPIWS\n */\n protected callMethod<T = unknown>(\n methodName: string,\n args: unknown[] = [],\n onSuccess: CallbackFunction<T>,\n onError: ErrorCallback\n ): void {\n const call: PluginMethodCall = {\n plugin: this.name,\n name: methodName,\n ...(args.length > 0 && { arguments: args })\n };\n\n CAPIWS.callFunction(call, onSuccess, onError);\n }\n\n /**\n * Create a promise-based wrapper for plugin methods\n */\n protected createPromiseMethod<TArgs extends unknown[], TResult = unknown>(methodName: string) {\n return (...args: TArgs): Promise<TResult> => {\n return new Promise((resolve, reject) => {\n this.callMethod<TResult>(\n methodName,\n args as unknown[],\n (_event, data) => {\n if (data.success) {\n resolve(data as TResult);\n } else {\n reject(new Error(data.reason ?? 'Unknown error'));\n }\n },\n error => reject(error instanceof Error ? error : new Error(String(error)))\n );\n });\n };\n }\n\n /**\n * Create both callback and promise versions of a method\n */\n protected createMethod<TArgs extends unknown[], TResult = unknown>(methodName: string) {\n const promiseMethod = this.createPromiseMethod<TArgs, TResult>(methodName);\n\n const callbackMethod = (...args: [...TArgs, CallbackFunction<TResult>, ErrorCallback]) => {\n const methodArgs = args.slice(0, -2) as TArgs;\n const onSuccess = args[args.length - 2] as CallbackFunction<TResult>;\n const onError = args[args.length - 1] as ErrorCallback;\n\n this.callMethod<TResult>(methodName, methodArgs as unknown[], onSuccess, onError);\n };\n\n return {\n promise: promiseMethod,\n callback: callbackMethod\n };\n }\n}\n\n/**\n * Plugin manager for registering and accessing plugins\n */\nexport class PluginManager {\n private static plugins = new Map<string, EIMZOPlugin>();\n\n static register(plugin: EIMZOPlugin): void {\n this.plugins.set(plugin.name, plugin);\n }\n\n static get<T extends EIMZOPlugin>(name: string): T | undefined {\n return this.plugins.get(name) as T;\n }\n\n static getAll(): EIMZOPlugin[] {\n return Array.from(this.plugins.values());\n }\n\n static has(name: string): boolean {\n return this.plugins.has(name);\n }\n}\n\n/**\n * Decorator for auto-registering plugins\n */\nexport function RegisterPlugin<T extends new () => EIMZOPlugin>(constructor: T): T {\n const instance = new constructor();\n PluginManager.register(instance);\n return constructor;\n}\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base.js';\nimport type { CallbackFunction, ErrorCallback, CertificateInfo } from '../core/types.js';\n\n/**\n * Плагин для работы с электронными ключами и сертификатами\n */\n@RegisterPlugin\nexport class CertKeyPlugin extends EIMZOPlugin {\n readonly name = 'certkey';\n readonly description = 'Plugin for working with electronic keys and certificates';\n\n /**\n * Удалить загруженные ключи по идентификатору\n */\n unloadKey = (\n keyId: string,\n onSuccess: CallbackFunction<boolean>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('unload_key', [keyId], onSuccess, onError);\n };\n\n /**\n * Получить список дисков\n */\n listDisks = (onSuccess: CallbackFunction<string[]>, onError: ErrorCallback): void => {\n this.callMethod('list_disks', [], onSuccess, onError);\n };\n\n /**\n * Получить список сертификатов пользователя\n */\n listCertificates = (\n diskPath: string,\n onSuccess: CallbackFunction<CertificateInfo[]>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('list_certificates', [diskPath], onSuccess, onError);\n };\n\n /**\n * Получить список всех сертификатов пользователя\n */\n listAllCertificates = (\n onSuccess: CallbackFunction<CertificateInfo[]>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('list_all_certificates', [], onSuccess, onError);\n };\n\n /**\n * Загрузить ключ и получить идентификатор ключа\n */\n loadKey = (\n keyPath: string,\n password: string,\n onSuccess: CallbackFunction<string>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('load_key', [keyPath, password], onSuccess, onError);\n };\n}\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base.js';\nimport type { CallbackFunction, ErrorCallback } from '../core/types.js';\n\n/**\n * Плагин для шифрования и дешифрования документа по алг.шифрования ГОСТ-28147, алг.обмена ключа ECDH-SHA256 в режиме P2P\n */\n@RegisterPlugin\nexport class CipherPlugin extends EIMZOPlugin {\n readonly name = 'cipher';\n readonly description = 'Plugin for encryption/decryption using GOST-28147 and ECDH-SHA256';\n\n /**\n * Создать зашифрованный документ\n */\n encryptDocument = (\n data: string,\n recipientCertificate: string,\n senderKeyId: string,\n onSuccess: CallbackFunction<string>,\n onError: ErrorCallback\n ): void => {\n this.callMethod(\n 'encrypt_document',\n [data, recipientCertificate, senderKeyId],\n onSuccess,\n onError\n );\n };\n\n /**\n * Дешифровать зашифрованный документ\n */\n decryptDocument = (\n encryptedData: string,\n recipientKeyId: string,\n onSuccess: CallbackFunction<string>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('decrypt_document', [encryptedData, recipientKeyId], onSuccess, onError);\n };\n}\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base.js';\nimport type { CallbackFunction, ErrorCallback } from '../core/types.js';\n\nexport interface CRLInfo {\n issuer: string;\n thisUpdate: string;\n nextUpdate: string;\n revokedCertificates: {\n serialNumber: string;\n revocationDate: string;\n reason?: string;\n }[];\n}\n\nexport interface CertificateStatus {\n isRevoked: boolean;\n revocationDate?: string;\n reason?: string;\n}\n\n/**\n * Плагин для работы с CRL (Certificate Revocation List)\n */\n@RegisterPlugin\nexport class CRLPlugin extends EIMZOPlugin {\n readonly name = 'crl';\n readonly description = 'Plugin for working with Certificate Revocation Lists';\n\n /**\n * Открывает CRL\n */\n openCrl = (\n crlData: string,\n onSuccess: CallbackFunction<unknown>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('open_crl', [crlData], onSuccess, onError);\n };\n\n /**\n * Открывает CRL из файла\n */\n openCrlFile = (\n filePath: string,\n onSuccess: CallbackFunction<unknown>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('open_crl_file', [filePath], onSuccess, onError);\n };\n\n /**\n * Проверка статуса сертификата по CRL\n */\n checkCertificate = (\n certificate: string,\n crlId: string,\n onSuccess: CallbackFunction<CertificateStatus>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('check_certificate', [certificate, crlId], onSuccess, onError);\n };\n\n /**\n * Получить информацию о CRL\n */\n getCrlInfo = (\n crlId: string,\n onSuccess: CallbackFunction<CRLInfo>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_crl_info', [crlId], onSuccess, onError);\n };\n\n /**\n * Верификация CRL\n */\n verifyCrl = (\n crlId: string,\n issuerCertificate: string,\n onSuccess: CallbackFunction<boolean>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('verify_crl', [crlId, issuerCertificate], onSuccess, onError);\n };\n}\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base.js';\nimport type { CallbackFunction, ErrorCallback } from '../core/types.js';\n\n/**\n * Плагин для выполнения низкоуровневых криптографических преобразований\n */\n@RegisterPlugin\nexport class CryptoAuthPlugin extends EIMZOPlugin {\n readonly name = 'cryptoauth';\n readonly description = 'Plugin for low-level cryptographic operations';\n\n /**\n * Подписать данные ключем задаваемым идентификатором\n */\n getSignature = (\n keyId: string,\n data: string,\n onSuccess: CallbackFunction<string>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_signature', [keyId, data], onSuccess, onError);\n };\n\n /**\n * Вычислить хеш (в формате HEX) данных по алгоритму OZDST-1106-2009-2-A\n */\n getDigestHex = (\n data: string,\n onSuccess: CallbackFunction<string>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_digest_hex', [data], onSuccess, onError);\n };\n\n /**\n * Верифицировать подпись данных сертификатом\n */\n verifySignatureWithCertificate = (\n data: string,\n signature: string,\n certificate: string,\n onSuccess: CallbackFunction<boolean>,\n onError: ErrorCallback\n ): void => {\n this.callMethod(\n 'verify_signature_with_certificate',\n [data, signature, certificate],\n onSuccess,\n onError\n );\n };\n\n /**\n * Верифицировать подпись хеша (в формате HEX) ключем задаваемым идентификатором\n */\n verifyDigestHexSignatureWithId = (\n digestHex: string,\n signature: string,\n keyId: string,\n onSuccess: CallbackFunction<boolean>,\n onError: ErrorCallback\n ): void => {\n this.callMethod(\n 'verify_digest_hex_signature_with_id',\n [digestHex, signature, keyId],\n onSuccess,\n onError\n );\n };\n\n /**\n * Подписать хеш (в формате HEX) ключем задаваемым идентификатором\n */\n getDigestHexSignature = (\n digestHex: string,\n keyId: string,\n onSuccess: CallbackFunction<string>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_digest_hex_signature', [digestHex, keyId], onSuccess, onError);\n };\n\n /**\n * Верифицировать подпись данных ключем задаваемым идентификатором\n */\n verifySignatureWithId = (\n data: string,\n signature: string,\n keyId: string,\n onSuccess: CallbackFunction<boolean>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('verify_signature_with_id', [data, signature, keyId], onSuccess, onError);\n };\n\n /**\n * Верифицировать подпись хеша (в формате HEX) сертификатом\n */\n verifyDigestHexSignatureWithCertificate = (\n digestHex: string,\n signature: string,\n certificate: string,\n onSuccess: CallbackFunction<boolean>,\n onError: ErrorCallback\n ): void => {\n this.callMethod(\n 'verify_digest_hex_signature_with_certificate',\n [digestHex, signature, certificate],\n onSuccess,\n onError\n );\n };\n}\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base.js';\nimport type { CallbackFunction, ErrorCallback } from '../core/types.js';\n\n/**\n * Плагин для работы с файлами\n */\n@RegisterPlugin\nexport class FileIOPlugin extends EIMZOPlugin {\n readonly name = 'fileio';\n readonly description = 'Plugin for file input/output operations';\n\n /**\n * Загруить файл\n */\n loadFile = (\n filePath: string,\n onSuccess: CallbackFunction<string>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('load_file', [filePath], onSuccess, onError);\n };\n\n /**\n * Записать содержимое zip файла на диск\n */\n writeFile = (\n zipContent: string,\n destinationPath: string,\n onSuccess: CallbackFunction<boolean>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('write_file', [zipContent, destinationPath], onSuccess, onError);\n };\n}\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base';\nimport type { TokenInfo, KeyResponse, CallbackFunction, ErrorCallback } from '../core/types';\n\n// FTJC-specific response types\nexport interface FtjcTokenInfo extends TokenInfo {\n cardUID: string;\n statusInfo: string;\n ownerName: string;\n info: string;\n}\n\nexport interface FtjcListResponse {\n success: true;\n tokens: FtjcTokenInfo[];\n}\n\nexport interface UserDataResponse {\n success: true;\n data_64: string;\n}\n\nexport interface RandomDataResponse {\n success: true;\n random_64: string;\n}\n\n/**\n * FTJC Plugin for working with USB FT Javacard tokens\n */\n@RegisterPlugin\nexport class FtjcPlugin extends EIMZOPlugin {\n readonly name = 'ftjc';\n readonly description = 'Plugin for working with USB FT Javacard tokens - STUB';\n\n // Callback-based methods\n\n /**\n * Get list of all keys from connected tokens\n */\n listAllKeys = (\n exceptCards = '',\n onSuccess: CallbackFunction<FtjcListResponse>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('list_all_keys', [exceptCards], onSuccess, onError);\n };\n\n /**\n * Get list of tokens\n */\n listTokens = (onSuccess: CallbackFunction<FtjcListResponse>, onError: ErrorCallback): void => {\n this.callMethod('list_tokens', [], onSuccess, onError);\n };\n\n /**\n * Load key and get key identifier\n */\n loadKey = (\n cardUID: string,\n onSuccess: CallbackFunction<KeyResponse>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('load_key', [cardUID], onSuccess, onError);\n };\n\n /**\n * Unload key by identifier\n */\n unloadKey = (\n tokenId: string,\n onSuccess: CallbackFunction<{ success: true }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('unload_key', [tokenId], onSuccess, onError);\n };\n\n /**\n * Verify PIN code of token\n * @param pinType 0 - Initialization, 1 - User, 2 - Reset\n */\n verifyPin = (\n tokenId: string,\n pinType: '0' | '1' | '2',\n onSuccess: CallbackFunction<{ success: true }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('verify_pin', [tokenId, pinType], onSuccess, onError);\n };\n\n /**\n * Change PIN code of token\n * @param pinType 0 - Initialization, 1 - User, 2 - Reset\n */\n changePin = (\n tokenId: string,\n pinType: '0' | '1' | '2',\n onSuccess: CallbackFunction<{ success: true }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('change_pin', [tokenId, pinType], onSuccess, onError);\n };\n\n /**\n * Set name for USB token\n */\n setName = (\n tokenId: string,\n name: string,\n onSuccess: CallbackFunction<{ success: true }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('set_name', [tokenId, name], onSuccess, onError);\n };\n\n /**\n * Store certificates in USB token\n */\n storeCertificates = (\n tokenId: string,\n subjectCertificate64: string,\n caCertificate64: string,\n rootCertificate64: string,\n onSuccess: CallbackFunction<{ success: true }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod(\n 'store_certificates',\n [tokenId, subjectCertificate64, caCertificate64, rootCertificate64],\n onSuccess,\n onError\n );\n };\n\n /**\n * Get user data from token\n */\n getUserData = (\n tokenId: string,\n onSuccess: CallbackFunction<UserDataResponse>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_user_data', [tokenId], onSuccess, onError);\n };\n\n /**\n * Set or delete user data in token\n * @param data64 Data in BASE64 encoding or empty string to delete\n */\n setUserData = (\n tokenId: string,\n data64: string,\n onSuccess: CallbackFunction<{ success: true }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('set_user_data', [tokenId, data64], onSuccess, onError);\n };\n\n /**\n * Generate random data in USB token\n */\n getRandomData = (\n tokenId: string,\n onSuccess: CallbackFunction<RandomDataResponse>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_random_data', [tokenId], onSuccess, onError);\n };\n\n /**\n * Install applet in USB token\n */\n installApplet = (\n cardUID: string,\n applet64: string,\n signatureHex: string,\n onSuccess: CallbackFunction<{ success: true }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('install_applet', [cardUID, applet64, signatureHex], onSuccess, onError);\n };\n\n // Promise-based methods\n\n /**\n * List all keys (Promise version)\n */\n listAllKeysAsync = this.createPromiseMethod<[string?], FtjcListResponse>('list_all_keys');\n\n /**\n * List tokens (Promise version)\n */\n listTokensAsync = this.createPromiseMethod<[], FtjcListResponse>('list_tokens');\n\n /**\n * Load key (Promise version)\n */\n loadKeyAsync = this.createPromiseMethod<[string], KeyResponse>('load_key');\n\n /**\n * Unload key (Promise version)\n */\n unloadKeyAsync = this.createPromiseMethod<[string], { success: true }>('unload_key');\n\n /**\n * Verify PIN (Promise version)\n */\n verifyPinAsync = this.createPromiseMethod<[string, '0' | '1' | '2'], { success: true }>(\n 'verify_pin'\n );\n\n /**\n * Change PIN (Promise version)\n */\n changePinAsync = this.createPromiseMethod<[string, '0' | '1' | '2'], { success: true }>(\n 'change_pin'\n );\n\n /**\n * Set name (Promise version)\n */\n setNameAsync = this.createPromiseMethod<[string, string], { success: true }>('set_name');\n\n /**\n * Store certificates (Promise version)\n */\n storeCertificatesAsync = this.createPromiseMethod<\n [string, string, string, string],\n { success: true }\n >('store_certificates');\n\n /**\n * Get user data (Promise version)\n */\n getUserDataAsync = this.createPromiseMethod<[string], UserDataResponse>('get_user_data');\n\n /**\n * Set user data (Promise version)\n */\n setUserDataAsync = this.createPromiseMethod<[string, string], { success: true }>('set_user_data');\n\n /**\n * Get random data (Promise version)\n */\n getRandomDataAsync = this.createPromiseMethod<[string], RandomDataResponse>('get_random_data');\n\n /**\n * Install applet (Promise version)\n */\n installAppletAsync = this.createPromiseMethod<[string, string, string], { success: true }>(\n 'install_applet'\n );\n}\n\n// Export singleton instance\nexport const ftjcPlugin = new FtjcPlugin();\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base.js';\nimport type { CallbackFunction, ErrorCallback, CertificateInfo } from '../core/types.js';\n\nexport interface ReaderInfo {\n name: string;\n connected: boolean;\n cardPresent: boolean;\n}\n\n/**\n * Плагин для работы с ID-card E-IMZO\n */\n@RegisterPlugin\nexport class IDCardPlugin extends EIMZOPlugin {\n readonly name = 'idcard';\n readonly description = 'Plugin for working with E-IMZO ID cards';\n\n /**\n * Проверить пароль хранилища ключей (заглушка)\n */\n verifyPassword = (\n password: string,\n onSuccess: CallbackFunction<boolean>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('verify_password', [password], onSuccess, onError);\n };\n\n /**\n * Персонализировать ID-карту записав новые сертификаты и установив PIN-код\n */\n personalize = (\n certificates: string[],\n pinCode: string,\n onSuccess: CallbackFunction<boolean>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('personalize', [certificates, pinCode], onSuccess, onError);\n };\n\n /**\n * Получить список считывателей\n */\n listReaders = (onSuccess: CallbackFunction<ReaderInfo[]>, onError: ErrorCallback): void => {\n this.callMethod('list_readers', [], onSuccess, onError);\n };\n\n /**\n * Получить список всех сертификатов пользователя (заглушка)\n */\n listAllCertificates = (\n onSuccess: CallbackFunction<CertificateInfo[]>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('list_all_certificates', [], onSuccess, onError);\n };\n\n /**\n * Получить зашифрованный и подписанный заводской номер USB-токена\n */\n getEncryptedSignedCplc = (onSuccess: CallbackFunction<string>, onError: ErrorCallback): void => {\n this.callMethod('get_encrypted_signed_cplc', [], onSuccess, onError);\n };\n\n /**\n * Загрузить ключ и получить идентификатор ключа. Ключ будет доступен определенное время (заглушка)\n */\n loadKey = (\n cardIndex: number,\n password: string,\n onSuccess: CallbackFunction<string>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('load_key', [cardIndex, password], onSuccess, onError);\n };\n}\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base';\nimport type {\n CertificateInfo,\n KeyResponse,\n ListResponse,\n CallbackFunction,\n ErrorCallback\n} from '../core/types';\n\n// PFX-specific response types\nexport interface PfxCertificate extends CertificateInfo {\n disk: string;\n path: string;\n name: string;\n alias: string;\n}\n\nexport interface PfxListResponse extends ListResponse<PfxCertificate> {\n certificates: PfxCertificate[];\n}\n\nexport interface DiskInfo {\n name: string;\n label?: string;\n available: boolean;\n}\n\n/**\n * PFX Plugin for working with PFX key storage files\n */\n@RegisterPlugin\nexport class PfxPlugin extends EIMZOPlugin {\n readonly name = 'pfx';\n readonly description = 'Plugin for working with PFX key storage files';\n\n // Callback-based methods\n\n /**\n * Get list of available disks\n */\n listDisks = (\n onSuccess: CallbackFunction<{ disks: DiskInfo[] }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('list_disks', [], onSuccess, onError);\n };\n\n /**\n * Get list of certificates from specific disk\n */\n listCertificates = (\n disk: string,\n onSuccess: CallbackFunction<PfxListResponse>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('list_certificates', [disk], onSuccess, onError);\n };\n\n /**\n * Get list of all certificates from all disks\n */\n listAllCertificates = (\n onSuccess: CallbackFunction<PfxListResponse>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('list_all_certificates', [], onSuccess, onError);\n };\n\n /**\n * Load key and get key identifier\n */\n loadKey = (\n disk: string,\n path: string,\n name: string,\n alias: string,\n onSuccess: CallbackFunction<KeyResponse>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('load_key', [disk, path, name, alias], onSuccess, onError);\n };\n\n /**\n * Unload key by identifier\n */\n unloadKey = (\n keyId: string,\n onSuccess: CallbackFunction<{ success: true }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('unload_key', [keyId], onSuccess, onError);\n };\n\n /**\n * Verify password for key storage\n */\n verifyPassword = (\n keyId: string,\n onSuccess: CallbackFunction<{ success: true }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('verify_password', [keyId], onSuccess, onError);\n };\n\n /**\n * Change password for key storage\n */\n changePassword = (\n keyId: string,\n onSuccess: CallbackFunction<{ success: true }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('change_password', [keyId], onSuccess, onError);\n };\n\n /**\n * Save key pair and certificates to new PFX file\n */\n savePfx = (\n disk: string,\n path: string,\n name: string,\n alias: string,\n id: string,\n newKeyPassword: string,\n subjectCertificate64: string,\n caCertificate64: string,\n rootCertificate64: string,\n onSuccess: CallbackFunction<{ success: true }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod(\n 'save_pfx',\n [\n disk,\n path,\n name,\n alias,\n id,\n newKeyPassword,\n subjectCertificate64,\n caCertificate64,\n rootCertificate64\n ],\n onSuccess,\n onError\n );\n };\n\n /**\n * Save temporary PFX with self-signed certificate\n */\n saveTemporaryPfx = (\n disk: string,\n path: string,\n name: string,\n alias: string,\n id: string,\n password: string,\n subjectX500Name: string,\n onSuccess: CallbackFunction<{ success: true }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod(\n 'save_temporary_pfx',\n [disk, path, name, alias, id, password, subjectX500Name],\n onSuccess,\n onError\n );\n };\n\n // Promise-based methods\n\n /**\n * Get list of available disks (Promise version)\n */\n listDisksAsync = this.createPromiseMethod<[], { disks: DiskInfo[] }>('list_disks');\n\n /**\n * Get list of certificates from specific disk (Promise version)\n */\n listCertificatesAsync = this.createPromiseMethod<[string], PfxListResponse>('list_certificates');\n\n /**\n * Get list of all certificates (Promise version)\n */\n listAllCertificatesAsync = this.createPromiseMethod<[], PfxListResponse>('list_all_certificates');\n\n /**\n * Load key (Promise version)\n */\n loadKeyAsync = this.createPromiseMethod<[string, string, string, string], KeyResponse>(\n 'load_key'\n );\n\n /**\n * Unload key (Promise version)\n */\n unloadKeyAsync = this.createPromiseMethod<[string], { success: true }>('unload_key');\n\n /**\n * Verify password (Promise version)\n */\n verifyPasswordAsync = this.createPromiseMethod<[string], { success: true }>('verify_password');\n\n /**\n * Change password (Promise version)\n */\n changePasswordAsync = this.createPromiseMethod<[string], { success: true }>('change_password');\n\n /**\n * Save PFX (Promise version)\n */\n savePfxAsync = this.createPromiseMethod<\n [string, string, string, string, string, string, string, string, string],\n { success: true }\n >('save_pfx');\n\n /**\n * Save temporary PFX (Promise version)\n */\n saveTemporaryPfxAsync = this.createPromiseMethod<\n [string, string, string, string, string, string, string],\n { success: true }\n >('save_temporary_pfx');\n}\n\n// Export singleton instance\nexport const pfxPlugin = new PfxPlugin();\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base.js';\nimport type { CallbackFunction, ErrorCallback } from '../core/types.js';\n\nexport interface PKCS10Info {\n subject: string;\n publicKey: string;\n signatureAlgorithm: string;\n [key: string]: unknown;\n}\n\nexport interface KeyPairInfo {\n privateKeyId: string;\n publicKey: string;\n}\n\n/**\n * Плагин для генерации ключевой пары и формирования запроса на сертификат формата PKCS#10\n */\n@RegisterPlugin\nexport class PKCS10Plugin extends EIMZOPlugin {\n readonly name = 'pkcs10';\n readonly description = 'Plugin for generating key pairs and PKCS#10 certificate requests';\n\n /**\n * Формировать запрос на сертификат формата PKCS#10 из существующего ключа\n */\n createPkcs10FromKey = (\n keyId: string,\n subject: string,\n onSuccess: CallbackFunction<string>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('create_pkcs10_from_key', [keyId, subject], onSuccess, onError);\n };\n\n /**\n * Сгенерировать ключевую пару\n */\n generateKeypair = (\n keySize: number,\n onSuccess: CallbackFunction<KeyPairInfo>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('generate_keypair', [keySize], onSuccess, onError);\n };\n\n /**\n * Формировать запрос на сертификат формата PKCS#10\n */\n createPkcs10 = (\n subject: string,\n keySize: number,\n onSuccess: CallbackFunction<string>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('create_pkcs10', [subject, keySize], onSuccess, onError);\n };\n\n /**\n * Получить информацию о запросе PKCS#10\n */\n getPkcs10Info = (\n pkcs10: string,\n onSuccess: CallbackFunction<PKCS10Info>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_pkcs10_info', [pkcs10], onSuccess, onError);\n };\n}\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base';\nimport type { CallbackFunction, ErrorCallback } from '../core/types';\n\n// PKCS7-specific response types\nexport interface Pkcs7Response {\n success: true;\n pkcs7_64: string;\n}\n\nexport interface Pkcs7InfoResponse {\n success: boolean;\n signatures: {\n signer: string;\n timestamp?: string;\n valid: boolean;\n }[];\n}\n\nexport interface TimestampTokenResponse {\n success: true;\n timestamp_token_64: string;\n}\n\n/**\n * PKCS7 Plugin for working with PKCS#7/CMS format\n */\n@RegisterPlugin\nexport class Pkcs7Plugin extends EIMZOPlugin {\n readonly name = 'pkcs7';\n readonly description = 'Plugin for working with PKCS#7/CMS format';\n\n // Callback-based methods\n\n /**\n * Create PKCS#7/CMS document by signing with key\n */\n createPkcs7 = (\n data64: string,\n keyId: string,\n detached: 'yes' | 'no' | '' = '',\n onSuccess: CallbackFunction<Pkcs7Response>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('create_pkcs7', [data64, keyId, detached], onSuccess, onError);\n };\n\n /**\n * Get full information about PKCS#7/CMS document (attached)\n */\n getPkcs7AttachedInfo = (\n pkcs764: string,\n trustStoreId = '',\n onSuccess: CallbackFunction<Pkcs7InfoResponse>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_pkcs7_attached_info', [pkcs764, trustStoreId], onSuccess, onError);\n };\n\n /**\n * Get full information about PKCS#7/CMS document (detached)\n */\n getPkcs7DetachedInfo = (\n data64: string,\n pkcs764: string,\n trustStoreId = '',\n onSuccess: CallbackFunction<Pkcs7InfoResponse>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_pkcs7_detached_info', [data64, pkcs764, trustStoreId], onSuccess, onError);\n };\n\n /**\n * Verify PKCS#7/CMS document (attached) - STUB\n */\n verifyPkcs7Attached = (\n pkcs764: string,\n trustStoreId: string,\n requesterId = '',\n onSuccess: CallbackFunction<{ success: true; valid: boolean }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod(\n 'verify_pkcs7_attached',\n [pkcs764, trustStoreId, requesterId],\n onSuccess,\n onError\n );\n };\n\n /**\n * Verify PKCS#7/CMS document (detached) - STUB\n */\n verifyPkcs7Detached = (\n data64: string,\n pkcs764: string,\n trustStoreId: string,\n requesterId = '',\n onSuccess: CallbackFunction<{ success: true; valid: boolean }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod(\n 'verify_pkcs7_detached',\n [data64, pkcs764, trustStoreId, requesterId],\n onSuccess,\n onError\n );\n };\n\n /**\n * Verify PKCS#7/CMS document with CRL (attached) - STUB\n */\n verifyPkcs7AttachedCrl = (\n pkcs764: string,\n trustStoreId: string,\n crlId: string,\n onSuccess: CallbackFunction<{ success: true; valid: boolean }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod(\n 'verify_pkcs7_attached_crl',\n [pkcs764, trustStoreId, crlId],\n onSuccess,\n onError\n );\n };\n\n /**\n * Verify PKCS#7/CMS document with CRL (detached) - STUB\n */\n verifyPkcs7DetachedCrl = (\n data64: string,\n pkcs764: string,\n trustStoreId: string,\n crlId: string,\n onSuccess: CallbackFunction<{ success: true; valid: boolean }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod(\n 'verify_pkcs7_detached_crl',\n [data64, pkcs764, trustStoreId, crlId],\n onSuccess,\n onError\n );\n };\n\n /**\n * Attach timestamp token to PKCS#7/CMS document - STUB\n */\n attachTimestampTokenPkcs7 = (\n pkcs764: string,\n signerSerialNumber: string,\n timestampToken64: string,\n onSuccess: CallbackFunction<Pkcs7Response>,\n onError: ErrorCallback\n ): void => {\n this.callMethod(\n 'attach_timestamp_token_pkcs7',\n [pkcs764, signerSerialNumber, timestampToken64],\n onSuccess,\n onError\n );\n };\n\n /**\n * Add signature to existing PKCS#7/CMS document (attached) - DEPRECATED\n */\n appendPkcs7Attached = (\n pkcs764: string,\n keyId: string,\n onSuccess: CallbackFunction<Pkcs7Response>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('append_pkcs7_attached', [pkcs764, keyId], onSuccess, onError);\n };\n\n /**\n * Add signature to existing PKCS#7/CMS document (detached) - DEPRECATED\n */\n appendPkcs7Detached = (\n data64: string,\n pkcs764: string,\n keyId: string,\n onSuccess: CallbackFunction<Pkcs7Response>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('append_pkcs7_detached', [data64, pkcs764, keyId], onSuccess, onError);\n };\n\n // Promise-based methods\n\n /**\n * Create PKCS#7/CMS document (Promise version)\n */\n createPkcs7Async = this.createPromiseMethod<\n [string, string, ('yes' | 'no' | '')?],\n Pkcs7Response\n >('create_pkcs7');\n\n /**\n * Get PKCS#7 attached info (Promise version)\n */\n getPkcs7AttachedInfoAsync = this.createPromiseMethod<[string, string?], Pkcs7InfoResponse>(\n 'get_pkcs7_attached_info'\n );\n\n /**\n * Get PKCS#7 detached info (Promise version)\n */\n getPkcs7DetachedInfoAsync = this.createPromiseMethod<\n [string, string, string?],\n Pkcs7InfoResponse\n >('get_pkcs7_detached_info');\n\n /**\n * Verify PKCS#7 attached (Promise version)\n */\n verifyPkcs7AttachedAsync = this.createPromiseMethod<\n [string, string, string?],\n { success: true; valid: boolean }\n >('verify_pkcs7_attached');\n\n /**\n * Verify PKCS#7 detached (Promise version)\n */\n verifyPkcs7DetachedAsync = this.createPromiseMethod<\n [string, string, string, string?],\n { success: true; valid: boolean }\n >('verify_pkcs7_detached');\n\n /**\n * Attach timestamp token (Promise version)\n */\n attachTimestampTokenPkcs7Async = this.createPromiseMethod<\n [string, string, string],\n Pkcs7Response\n >('attach_timestamp_token_pkcs7');\n}\n\n// Export singleton instance\nexport const pkcs7Plugin = new Pkcs7Plugin();\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base.js';\nimport type { CallbackFunction, ErrorCallback } from '../core/types.js';\n\n/**\n * Плагин для взаимодейтвия с ИОК (инфраструктура открытых ключей)\n */\n@RegisterPlugin\nexport class PKIPlugin extends EIMZOPlugin {\n readonly name = 'pki';\n readonly description = 'Plugin for PKI (Public Key Infrastructure) interaction';\n\n /**\n * Шаг №1 для получения ключа PFX\n */\n enrollPfxStep1 = (\n request: string,\n onSuccess: CallbackFunction<unknown>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('enroll_pfx_step1', [request], onSuccess, onError);\n };\n\n /**\n * Шаг №2 для получения ключа PFX\n */\n enrollPfxStep2 = (\n response: string,\n onSuccess: CallbackFunction<unknown>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('enroll_pfx_step2', [response], onSuccess, onError);\n };\n}\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base.js';\nimport type { CallbackFunction, ErrorCallback } from '../core/types.js';\n\n/**\n * Плагин для работы с хранилищами доверенных сертификатов формата JKS\n */\n@RegisterPlugin\nexport class TruststoreJKSPlugin extends EIMZOPlugin {\n readonly name = 'truststore-jks';\n readonly description = 'Plugin for working with JKS trust stores';\n\n /**\n * Открывает хранилище доверенных сертификатов 'truststore.jks' в домашней директории пользователя\n */\n openTruststore = (onSuccess: CallbackFunction<unknown>, onError: ErrorCallback): void => {\n this.callMethod('open_truststore', [], onSuccess, onError);\n };\n\n // Promise-based methods\n\n /**\n * Открывает хранилище доверенных сертификатов 'truststore.jks' в домашней директории пользователя\n */\n async openTruststoreAsync(): Promise<unknown> {\n return new Promise((resolve, reject) => {\n this.openTruststore(\n (event, data) => {\n if (data.success) {\n resolve(data);\n } else {\n reject(new Error(data.reason ?? 'Unknown error'));\n }\n },\n error => reject(new Error(String(error)))\n );\n });\n }\n}\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base.js';\nimport type { CallbackFunction, ErrorCallback, CertificateInfo } from '../core/types.js';\n\n/**\n * Плагин для работы с хранилищами доверенных сертификатов\n */\n@RegisterPlugin\nexport class TruststorePlugin extends EIMZOPlugin {\n readonly name = 'truststore';\n readonly description = 'Plugin for working with trust stores';\n\n /**\n * Получить список доверенных сертификатов (ЗАГЛУШКА)\n */\n listTruststore = (\n onSuccess: CallbackFunction<CertificateInfo[]>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('list_truststore', [], onSuccess, onError);\n };\n}\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base.js';\nimport type { CallbackFunction, ErrorCallback } from '../core/types.js';\n\nexport interface TimestampTokenInfo {\n timestamp: string;\n tsaName: string;\n serialNumber: string;\n messageImprint: string;\n policy?: string;\n}\n\n/**\n * Плагин для работы с токенами штампов времени\n */\n@RegisterPlugin\nexport class TSAClientPlugin extends EIMZOPlugin {\n readonly name = 'tsaclient';\n readonly description = 'Plugin for working with timestamp tokens';\n\n /**\n * Получить запрос на получения токена штампа времени для данных\n */\n getTimestampTokenRequestForData = (\n data: string,\n onSuccess: CallbackFunction<string>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_timestamp_token_request_for_data', [data], onSuccess, onError);\n };\n\n /**\n * Получить токен штампа времени на подпись от службы штампов времени по веб-ссылке\n */\n getTimestampTokenForSignature = (\n signature: string,\n tsaUrl: string,\n onSuccess: CallbackFunction<string>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_timestamp_token_for_signature', [signature, tsaUrl], onSuccess, onError);\n };\n\n /**\n * Получить токен штампа времени на данные от службы штампов времени по веб-ссылке\n */\n getTimestampTokenForData = (\n data: string,\n tsaUrl: string,\n onSuccess: CallbackFunction<string>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_timestamp_token_for_data', [data, tsaUrl], onSuccess, onError);\n };\n\n /**\n * Получить информацию о токене штампа времени\n */\n getTimestampTokenInfo = (\n token: string,\n onSuccess: CallbackFunction<TimestampTokenInfo>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_timestamp_token_info', [token], onSuccess, onError);\n };\n\n /**\n * Получить запрос на получения токена штампа времени для подписи\n */\n getTimestampTokenRequestForSignature = (\n signature: string,\n onSuccess: CallbackFunction<string>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_timestamp_token_request_for_signature', [signature], onSuccess, onError);\n };\n}\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base.js';\nimport type { CallbackFunction, ErrorCallback } from '../core/types.js';\n\n/**\n * Плагин для установки зашифрованного соединения с сервером по алг.шифрования ГОСТ-28147\n */\n@RegisterPlugin\nexport class TunnelPlugin extends EIMZOPlugin {\n readonly name = 'tunnel';\n readonly description = 'Plugin for establishing encrypted connections using GOST-28147';\n\n /**\n * Создать зашифрованного соединения с сервером и вернуть TCP-порт для приема/передачи данных\n */\n createTunnel = (\n serverHost: string,\n serverPort: number,\n keyId: string,\n onSuccess: CallbackFunction<{ port: number }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('create_tunnel', [serverHost, serverPort, keyId], onSuccess, onError);\n };\n\n // Promise-based wrapper (если нужен)\n async createTunnelAsync(serverHost: string, serverPort: number, keyId: string): Promise<unknown> {\n return new Promise((resolve, reject) => {\n this.createTunnel(\n serverHost,\n serverPort,\n keyId,\n (event, data) => {\n if (data.success) {\n resolve(data);\n } else {\n reject(new Error(data.reason ?? 'Unknown error'));\n }\n },\n error => reject(new Error(String(error)))\n );\n });\n }\n}\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base.js';\nimport type { CallbackFunction, ErrorCallback, CertificateInfo } from '../core/types.js';\n\n/**\n * Плагин для работы с сертификатами X.509\n */\n@RegisterPlugin\nexport class X509Plugin extends EIMZOPlugin {\n readonly name = 'x509';\n readonly description = 'Plugin for working with X.509 certificates';\n\n /**\n * Верификация подписи сертификата субъектка сертификатом издателя\n */\n verifyCertificate = (\n subjectCert: string,\n issuerCert: string,\n onSuccess: CallbackFunction<boolean>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('verify_certificate', [subjectCert, issuerCert], onSuccess, onError);\n };\n\n /**\n * Получить цепочку сертификатов в кодировке BASE64 по идентификатору ключа\n */\n getCertificateChain = (\n keyId: string,\n onSuccess: CallbackFunction<string[]>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_certificate_chain', [keyId], onSuccess, onError);\n };\n\n /**\n * Получить информацию о сертификате\n */\n getCertificateInfo = (\n certificate: string,\n onSuccess: CallbackFunction<CertificateInfo>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_certificate_info', [certificate], onSuccess, onError);\n };\n}\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base.js';\nimport type { CallbackFunction, ErrorCallback, CertificateInfo } from '../core/types.js';\n\nexport interface DiskInfo {\n name: string;\n path: string;\n available: boolean;\n}\n\n/**\n * Плагин для работы с файлами хранилища ключей формата YTKS\n */\n@RegisterPlugin\nexport class YTKSPlugin extends EIMZOPlugin {\n readonly name = 'ytks';\n readonly description = 'Plugin for working with YTKS key storage files';\n\n /**\n * Удалить загруженные ключи по идентификатору\n */\n unloadKey = (\n keyId: string,\n onSuccess: CallbackFunction<boolean>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('unload_key', [keyId], onSuccess, onError);\n };\n\n /**\n * Изменить пароль хранилища ключей\n */\n changePassword = (\n disk: string,\n path: string,\n name: string,\n oldPassword: string,\n newPassword: string,\n onSuccess: CallbackFunction<boolean>,\n onError: ErrorCallback\n ): void => {\n this.callMethod(\n 'change_password',\n [disk, path, name, oldPassword, newPassword],\n onSuccess,\n onError\n );\n };\n\n /**\n * Получить список дисков\n */\n listDisks = (\n onSuccess: CallbackFunction<{ disks: DiskInfo[] }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('list_disks', [], onSuccess, onError);\n };\n\n /**\n * Получить список сертификатов пользователя\n */\n listCertificates = (\n disk: string,\n onSuccess: CallbackFunction<{ certificates: CertificateInfo[] }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('list_certificates', [disk], onSuccess, onError);\n };\n\n /**\n * Проверить пароль хранилища ключей\n */\n verifyPassword = (\n disk: string,\n path: string,\n name: string,\n password: string,\n onSuccess: CallbackFunction<boolean>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('verify_password', [disk, path, name, password], onSuccess, onError);\n };\n\n /**\n * Получить список всех сертификатов пользователя\n */\n listAllCertificates = (\n onSuccess: CallbackFunction<{ certificates: CertificateInfo[] }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('list_all_certificates', [], onSuccess, onError);\n };\n\n /**\n * Загрузить ключ и получить идентификатор ключа\n */\n loadKey = (\n disk: string,\n path: string,\n name: string,\n alias: string,\n onSuccess: CallbackFunction<{ keyId: string }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('load_key', [disk, path, name, alias], onSuccess, onError);\n };\n\n /**\n * Сохранить ключевую пару или существующий ключ и новые сертификаты в новый файл формата YTKS\n */\n saveYtks = (\n disk: string,\n path: string,\n name: string,\n password: string,\n keyId: string,\n certificates: string[],\n onSuccess: CallbackFunction<boolean>,\n onError: ErrorCallback\n ): void => {\n this.callMethod(\n 'save_ytks',\n [disk, path, name, password, keyId, certificates],\n onSuccess,\n onError\n );\n };\n}\n","import { PluginManager, type EIMZOPlugin } from './core/plugin-base.js';\nimport EIMZOClient from './e-imzo-client.js';\nimport CAPIWS from './e-imzo/capiws.js';\n\n// Type definitions for E-IMZO API responses\ninterface VersionResponse {\n success: boolean;\n major: string;\n minor: string;\n reason?: string;\n}\n\ninterface ApiResponse {\n success: boolean;\n reason?: string;\n [key: string]: unknown;\n}\n\n// Import all plugins to ensure they're registered\nimport './plugins/certkey.js';\nimport './plugins/cipher.js';\nimport './plugins/crl.js';\nimport './plugins/cryptoauth.js';\nimport './plugins/fileio.js';\nimport './plugins/ftjc.js';\nimport './plugins/idcard.js';\nimport './plugins/pfx.js';\nimport './plugins/pkcs10.js';\nimport './plugins/pkcs7.js';\nimport './plugins/pki.js';\nimport './plugins/truststore-jks.js';\nimport './plugins/truststore.js';\nimport './plugins/tsaclient.js';\nimport './plugins/tunnel.js';\nimport './plugins/x509.js';\nimport './plugins/ytks.js';\n\n// Re-export plugin instances for direct access\nexport { ftjcPlugin } from './plugins/ftjc';\nexport { pfxPlugin } from './plugins/pfx';\nexport { pkcs7Plugin } from './plugins/pkcs7';\n// Note: cryptoauth and other plugins use class-based registration, instances available via PluginManager\n\n// Re-export types\nexport * from './core/types';\nexport type { CertKeyPlugin } from './plugins/certkey';\nexport type { CipherPlugin } from './plugins/cipher';\nexport type { CertificateStatus, CRLInfo, CRLPlugin } from './plugins/crl';\nexport type { CryptoAuthPlugin } from './plugins/cryptoauth';\nexport type { FileIOPlugin } from './plugins/fileio';\nexport type { FtjcPlugin, FtjcTokenInfo } from './plugins/ftjc';\nexport type { IDCardPlugin, ReaderInfo } from './plugins/idcard';\nexport type { PfxCertificate, PfxPlugin } from './plugins/pfx';\nexport type { KeyPairInfo, PKCS10Info, PKCS10Plugin } from './plugins/pkcs10';\nexport type { Pkcs7Plugin, Pkcs7Response } from './plugins/pkcs7';\nexport type { PKIPlugin } from './plugins/pki';\nexport type { TruststorePlugin } from './plugins/truststore';\nexport type { TruststoreJKSPlugin } from './plugins/truststore-jks';\nexport type { TimestampTokenInfo, TSAClientPlugin } from './plugins/tsaclient.js';\nexport type { TunnelPlugin } from './plugins/tunnel';\nexport type { X509Plugin } from './plugins/x509';\nexport type { YTKSPlugin } from './plugins/ytks.js';\n\n/**\n * Main E-IMZO API class providing unified access to all plugins\n */\nexport class EIMZOApi {\n // Core CAPIWS access\n public readonly capiws = CAPIWS;\n\n // Legacy client for backward compatibility\n public readonly client = EIMZOClient;\n\n // Plugin manager for accessing plugins\n public readonly plugins = PluginManager;\n\n // Direct plugin access\n public readonly pfx = PluginManager.get('pfx');\n public readonly pkcs7 = PluginManager.get('pkcs7');\n public readonly ftjc = PluginManager.get('ftjc');\n public readonly cryptoauth = PluginManager.get('cryptoauth');\n public readonly truststoreJks = PluginManager.get('truststore-jks');\n public readonly tunnel = PluginManager.get('tunnel');\n public readonly certkey = PluginManager.get('certkey');\n public readonly x509 = PluginManager.get('x509');\n public readonly cipher = PluginManager.get('cipher');\n public readonly pki = PluginManager.get('pki');\n public readonly pkcs10 = PluginManager.get('pkcs10');\n public readonly idcard = PluginManager.get('idcard');\n public readonly truststore = PluginManager.get('truststore');\n public readonly crl = PluginManager.get('crl');\n public readonly fileio = PluginManager.get('fileio');\n public readonly tsaclient = PluginManager.get('tsaclient');\n public readonly ytks = PluginManager.get('ytks');\n\n /**\n * Initialize E-IMZO API and check version\n */\n async initialize(): Promise<{ major: string; minor: string }> {\n return new Promise((resolve, reject) => {\n this.client.checkVersion(\n (major, minor) => resolve({ major, minor }),\n (error, reason) => reject(new Error(reason ?? 'Version check failed'))\n );\n });\n }\n\n /**\n * Install API keys\n */\n async installApiKeys(): Promise<void> {\n return new Promise((resolve, reject) => {\n this.client.installApiKeys(\n () => resolve(),\n (error, reason) => reject(new Error(reason ?? 'API key installation failed'))\n );\n });\n }\n\n /**\n * Check if ID card is plugged in\n */\n async isIdCardPluggedIn(): Promise<boolean> {\n return new Promise((resolve, reject) => {\n this.client.idCardIsPLuggedIn(\n isPlugged => resolve(isPlugged),\n (error, reason) => reject(new Error(reason ?? 'ID card check failed'))\n );\n });\n }\n\n /**\n * Get version information\n */\n async getVersion(): Promise<{ major: string; minor: string }> {\n return new Promise((resolve, reject) => {\n this.capiws.version(\n (event, data: VersionResponse) => {\n if (data.success && data.major && data.minor) {\n resolve({ major: data.major, minor: data.minor });\n } else {\n reject(new Error(data.reason ?? 'Failed to get version'));\n }\n },\n error => reject(new Error(String(error) || 'Version check failed'))\n );\n });\n }\n\n /**\n * Get API documentation\n */\n async getApiDoc(): Promise<unknown> {\n return new Promise((resolve, reject) => {\n this.capiws.apidoc(\n (event, data: ApiResponse) => {\n if (data.success) {\n resolve(data);\n } else {\n reject(new Error(data.reason ?? 'Failed to get API documentation'));\n }\n },\n error => reject(new Error(String(error) || 'API documentation request failed'))\n );\n });\n }\n\n /**\n * Setup API keys\n */\n async setupApiKeys(domainAndKey: string[]): Promise<void> {\n return new Promise((resolve, reject) => {\n this.capiws.apikey(\n domainAndKey,\n (event, data: ApiResponse) => {\n if (data.success) {\n resolve();\n } else {\n reject(new Error(data.reason ?? 'Failed to setup API keys'));\n }\n },\n error => reject(new Error(String(error) || 'API keys setup failed'))\n );\n });\n }\n\n /**\n * Get all available plugins\n */\n getAvailablePlugins(): string[] {\n return this.plugins.getAll().map(plugin => plugin.name);\n }\n\n /**\n * Check if a plugin is available\n */\n hasPlugin(name: string): boolean {\n return this.plugins.has(name);\n }\n\n /**\n * Get plugin by name with type safety\n */\n getPlugin<T extends EIMZOPlugin>(name: string): T | undefined {\n return this.plugins.get<T>(name);\n }\n}\n\n// Create and export singleton instance\nexport const eimzoApi = new EIMZOApi();\n\n// Default export\nexport default eimzoApi;\n","/**\n * Global browser setup for E-IMZO Agnostic\n * Bu fayl browserda window obyektiga global o'zgaruvchilarni qo'shadi\n */\n\nimport EIMZOClient from './e-imzo-client.js';\nimport CAPIWS from './e-imzo/capiws.js';\nimport { eimzoApi } from './eimzo-api.js';\n\n// Global types\ndeclare global {\n interface Window {\n CAPIWS: typeof CAPIWS;\n EIMZOClient: typeof EIMZOClient;\n capiws: typeof CAPIWS;\n eimzoApi: typeof eimzoApi;\n imzoPlugins?: Record<string, unknown>;\n }\n}\n\n/**\n * Setup global objects in browser environment\n */\nexport function setupGlobalObjects(): void {\n // Browser environment tekshirish\n if (typeof window !== 'undefined') {\n const win = window;\n\n // Legacy global objects (boshqalar ishlatganidek)\n win.CAPIWS = CAPIWS;\n win.EIMZOClient = EIMZOClient;\n\n // Lowercase alias for convenience\n win.capiws = CAPIWS;\n\n // Modern API\n win.eimzoApi = eimzoApi;\n\n // Development mode - barcha pluginlarni expose qilish\n const processEnv = process.env as Record<string, string | undefined>;\n const isDev = typeof process !== 'undefined' && processEnv.NODE_ENV === 'development';\n\n if (isDev) {\n win.imzoPlugins = {\n version: '1.0.0',\n loaded: true,\n plugins: [],\n debug: true\n };\n\n console.info('🔧 E-IMZO Agnostic Library - Development Mode');\n console.info('Available APIs:', {\n CAPIWS: 'Main CAPIWS client for E-IMZO communication',\n EIMZOClient: 'Legacy E-IMZO client wrapper',\n capiws: 'Legacy alias for CAPIWS',\n eimzoApi: 'Modern plugin-based E-IMZO API',\n imzoPlugins: 'Plugin system information'\n });\n }\n\n // Log successful initialization\n if (isDev) {\n console.info('✅ E-IMZO Global Setup - Success');\n console.info('Global status:', {\n CAPIWS: Boolean(win.CAPIWS),\n EIMZOClient: Boolean(win.EIMZOClient),\n capiws: Boolean(win.capiws),\n eimzoApi: Boolean(win.eimzoApi),\n imzoPlugins: Boolean(win.imzoPlugins)\n });\n }\n }\n}\n\n// Auto-setup browser globals\nsetupGlobalObjects();\n"]}
1
+ {"version":3,"sources":["../polyfills/process-polyfill.js","../src/e-imzo/capiws.ts","../src/e-imzo-client.ts","../src/core/plugin-base.ts","../src/plugins/certkey.ts","../src/plugins/cipher.ts","../src/plugins/crl.ts","../src/plugins/cryptoauth.ts","../src/plugins/fileio.ts","../src/plugins/ftjc.ts","../src/plugins/idcard.ts","../src/core/session-manager.ts","../src/plugins/pfx.ts","../src/plugins/pkcs10.ts","../src/plugins/pkcs7.ts","../src/plugins/pki.ts","../src/plugins/truststore-jks.ts","../src/plugins/truststore.ts","../src/plugins/tsaclient.ts","../src/plugins/tunnel.ts","../src/plugins/x509.ts","../src/plugins/ytks.ts","../src/eimzo-api.ts","../src/global.ts"],"names":["getSubst","event","data","_init","_a","CAPIWS"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,IAAI,OAAO,UAAA,KAAe,WAAA,IAAe,OAAO,UAAA,CAAW,YAAY,WAAA,EAAa;AAClF,EAAA,UAAA,CAAW,OAAA,GAAU;AAAA,IACnB,GAAA,EAAK;AAAA,MACH,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA;AACR,GACF;AACF;;;ACwBA,IAAM,MAAA,GACJ,OAAO,QAAA,KAAa,WAAA,GAChB,QAAA,GACA;AAAA,EACE,GAAA,EAAA,CACG,OAAO,QAAA,CAAS,QAAA,CAAS,aAAY,KAAM,QAAA,GACxC,0BACA,sBAAA,IAA0B,mBAAA;AAAA,EAChC,YAAA,EAAc,SACZ,OAAA,EACA,QAAA,EACA,KAAA,EACM;AACN,IAAA,IAAI,CAAC,OAAO,SAAA,EAAW;AACrB,MAAA,IAAI,OAAO,KAAA,EAAM;AACjB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,IAAI,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA;AAAA,IACjC,SAAS,CAAA,EAAG;AACV,MAAA,IAAI,KAAA,QAAa,CAAC,CAAA;AAClB,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,OAAA,GAAU,SAAU,CAAA,EAAqB;AAC9C,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,IAAI,CAAA,CAAE,SAAS,GAAA,EAAM;AACnB,UAAA,KAAA,CAAM,EAAE,IAAI,CAAA;AAAA,QACd;AAAA,MACF;AAAA,IACF,CAAA;AACA,IAAA,MAAA,CAAO,SAAA,GAAY,SAAU,KAAA,EAA2B;AACtD,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AAClC,MAAA,MAAA,CAAO,KAAA,EAAM;AACb,MAAA,QAAA,CAAS,OAAO,IAAI,CAAA;AAAA,IACtB,CAAA;AACA,IAAA,MAAA,CAAO,SAAS,WAAkB;AAChC,MAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA;AAAA,IACrC,CAAA;AAAA,EACF,CAAA;AAAA,EACA,OAAA,EAAS,SACP,QAAA,EACA,KAAA,EACM;AACN,IAAA,IAAI,CAAC,OAAO,SAAA,EAAW;AACrB,MAAA,IAAI,OAAO,KAAA,EAAM;AACjB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,IAAI,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA;AAAA,IACjC,SAAS,CAAA,EAAG;AACV,MAAA,IAAI,KAAA,QAAa,CAAC,CAAA;AAClB,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,OAAA,GAAU,SAAU,CAAA,EAAqB;AAC9C,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,IAAI,CAAA,CAAE,SAAS,GAAA,EAAM;AACnB,UAAA,KAAA,CAAM,EAAE,IAAI,CAAA;AAAA,QACd;AAAA,MACF;AAAA,IACF,CAAA;AACA,IAAA,MAAA,CAAO,SAAA,GAAY,SAAU,KAAA,EAA2B;AACtD,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AAClC,MAAA,MAAA,CAAO,KAAA,EAAM;AACb,MAAA,QAAA,CAAS,OAAO,IAAI,CAAA;AAAA,IACtB,CAAA;AACA,IAAA,MAAA,CAAO,SAAS,WAAkB;AAChC,MAAA,MAAM,CAAA,GAAI,EAAE,IAAA,EAAM,SAAA,EAAU;AAC5B,MAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,CAAC,CAAC,CAAA;AAAA,IAC/B,CAAA;AAAA,EACF,CAAA;AAAA,EACA,MAAA,EAAQ,SACN,QAAA,EACA,KAAA,EACM;AACN,IAAA,IAAI,CAAC,OAAO,SAAA,EAAW;AACrB,MAAA,IAAI,OAAO,KAAA,EAAM;AACjB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,IAAI,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA;AAAA,IACjC,SAAS,CAAA,EAAG;AACV,MAAA,IAAI,KAAA,QAAa,CAAC,CAAA;AAClB,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,OAAA,GAAU,SAAU,CAAA,EAAqB;AAC9C,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,IAAI,CAAA,CAAE,SAAS,GAAA,EAAM;AACnB,UAAA,KAAA,CAAM,EAAE,IAAI,CAAA;AAAA,QACd;AAAA,MACF;AAAA,IACF,CAAA;AACA,IAAA,MAAA,CAAO,SAAA,GAAY,SAAU,KAAA,EAA2B;AACtD,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AAClC,MAAA,MAAA,CAAO,KAAA,EAAM;AACb,MAAA,QAAA,CAAS,OAAO,IAAI,CAAA;AAAA,IACtB,CAAA;AACA,IAAA,MAAA,CAAO,SAAS,WAAkB;AAChC,MAAA,MAAM,CAAA,GAAI,EAAE,IAAA,EAAM,QAAA,EAAS;AAC3B,MAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,CAAC,CAAC,CAAA;AAAA,IAC/B,CAAA;AAAA,EACF,CAAA;AAAA,EACA,MAAA,EAAQ,SACN,YAAA,EACA,QAAA,EACA,KAAA,EACM;AACN,IAAA,IAAI,CAAC,OAAO,SAAA,EAAW;AACrB,MAAA,IAAI,OAAO,KAAA,EAAM;AACjB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,IAAI,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA;AAAA,IACjC,SAAS,CAAA,EAAG;AACV,MAAA,IAAI,KAAA,QAAa,CAAC,CAAA;AAClB,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,OAAA,GAAU,SAAU,CAAA,EAAqB;AAC9C,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,IAAI,CAAA,CAAE,SAAS,GAAA,EAAM;AACnB,UAAA,KAAA,CAAM,EAAE,IAAI,CAAA;AAAA,QACd;AAAA,MACF;AAAA,IACF,CAAA;AACA,IAAA,MAAA,CAAO,SAAA,GAAY,SAAU,KAAA,EAA2B;AACtD,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AAClC,MAAA,MAAA,CAAO,KAAA,EAAM;AACb,MAAA,QAAA,CAAS,OAAO,IAAI,CAAA;AAAA,IACtB,CAAA;AACA,IAAA,MAAA,CAAO,SAAS,WAAkB;AAChC,MAAA,MAAM,CAAA,GAAI,EAAE,IAAA,EAAM,QAAA,EAAU,WAAW,YAAA,EAAa;AACpD,MAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,CAAC,CAAC,CAAA;AAAA,IAC/B,CAAA;AAAA,EACF;AACF,CAAA;AAEN,IAAO,cAAA,GAAQ;;;AC/Jf,IAAA,CAAK,SAAA,CAAU,WAAW,WAAoB;AAC5C,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,EAAY,CAAE,QAAA,EAAS;AACzC,EAAA,MAAM,EAAA,GAAA,CAAM,IAAA,CAAK,QAAA,EAAS,GAAI,GAAG,QAAA,EAAS;AAC1C,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,OAAA,EAAQ,CAAE,QAAA,EAAS;AACnC,EAAA,OAAO,IAAA,IAAQ,EAAA,CAAG,CAAC,CAAA,GAAI,KAAK,GAAA,GAAM,EAAA,CAAG,CAAC,CAAA,CAAA,IAAM,GAAG,CAAC,CAAA,GAAI,EAAA,GAAK,GAAA,GAAM,GAAG,CAAC,CAAA,CAAA;AACrE,CAAA;AAEA,IAAA,CAAK,SAAA,CAAU,WAAW,WAAoB;AAC5C,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,EAAY,CAAE,QAAA,EAAS;AACzC,EAAA,MAAM,EAAA,GAAA,CAAM,IAAA,CAAK,QAAA,EAAS,GAAI,GAAG,QAAA,EAAS;AAC1C,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,OAAA,EAAQ,CAAE,QAAA,EAAS;AACnC,EAAA,OAAA,CAAQ,GAAG,CAAC,CAAA,GAAI,EAAA,GAAK,GAAA,GAAM,GAAG,CAAC,CAAA,IAAK,GAAA,IAAO,EAAA,CAAG,CAAC,CAAA,GAAI,EAAA,GAAK,MAAM,EAAA,CAAG,CAAC,KAAK,GAAA,GAAM,IAAA;AAC/E,CAAA;AAiIA,IAAM,KAAA,GAAsB;AAAA,EAC1B,QAAQ,CAAA,EAAuE;AAU7E,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,OAAO,CAAA;AAAA,IACT,WAAW,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,IAAK,CAAA,CAAE,UAAU,CAAA,EAAG;AAC5C,MAAA,OAAO,IAAI,IAAA,CAAK,CAAA,CAAE,CAAC,CAAA,IAAK,CAAA,EAAG,CAAA,CAAE,CAAC,CAAA,IAAK,CAAA,EAAG,CAAA,CAAE,CAAC,KAAK,CAAC,CAAA;AAAA,IACjD,CAAA,MAAA,IAAW,OAAO,CAAA,KAAM,QAAA,EAAU;AAChC,MAAA,OAAO,IAAI,KAAK,CAAC,CAAA;AAAA,IACnB,CAAA,MAAA,IAAW,OAAO,CAAA,KAAM,QAAA,EAAU;AAChC,MAAA,OAAO,IAAI,KAAK,CAAC,CAAA;AAAA,IACnB,CAAA,MAAA,IAAW,OAAO,CAAA,KAAM,QAAA,IAAY,MAAM,IAAA,EAAM;AAC9C,MAAA,MAAM,OAAA,GAAU,CAAA;AAChB,MAAA,OAAO,IAAI,IAAA,CAAK,OAAA,CAAQ,IAAA,IAAQ,CAAA,EAAG,QAAQ,KAAA,IAAS,CAAA,EAAG,OAAA,CAAQ,IAAA,IAAQ,CAAC,CAAA;AAAA,IAC1E;AACA,IAAA,OAAO,GAAA;AAAA,EACT,CAAA;AAAA,EAEA,OAAA,CACE,GACA,CAAA,EACQ;AAQR,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,CAAC,EAAE,OAAA,EAAQ;AACrC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,CAAC,EAAE,OAAA,EAAQ;AACrC,IAAA,OAAO,QAAA,CAAS,IAAI,CAAA,IAAK,QAAA,CAAS,IAAI,CAAA,GAAA,CAAK,IAAA,GAAO,IAAA,GAAO,CAAA,GAAI,CAAA,KAAM,IAAA,GAAO,IAAA,GAAO,IAAI,CAAA,CAAA,GAAK,GAAA;AAAA,EAC5F,CAAA;AAAA,EAEA,OAAA,CACE,CAAA,EACA,KAAA,EACA,GAAA,EACkB;AAOlB,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,CAAC,EAAE,OAAA,EAAQ;AACrC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,KAAK,EAAE,OAAA,EAAQ;AAC7C,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,GAAG,EAAE,OAAA,EAAQ;AACzC,IAAA,OAAO,QAAA,CAAS,IAAI,CAAA,IAAK,QAAA,CAAS,QAAQ,CAAA,IAAK,QAAA,CAAS,MAAM,CAAA,GAC1D,QAAA,IAAY,IAAA,IAAQ,IAAA,IAAQ,MAAA,GAC5B,GAAA;AAAA,EACN;AACF;AAGA,MAAA,CAAO,SAAA,CAAU,SAAA,GAAY,SAAU,QAAA,EAA2B,KAAA,EAA2B;AAC3F,EAAA,MAAM,SAAmB,EAAC;AAE1B,EAAA,IAAI,aAAa,EAAA,EAAI;AAEnB,IAAA,IAASA,SAAAA,GAAT,SAAkB,KAAA,EAAuB;AACvC,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,CAAC,CAAA,KAAM,MAAM,GAAA,GAAM,GAAA;AAC3C,MAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,QAAA,KAAA,IAAS,SAAA;AAAA,MACX;AACA,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAM,UAAmD,EAAC;AAG1D,IAAA,IAAI,oBAAoB,MAAA,EAAQ;AAC9B,MAAA,IAAA,CAAK,OAAA,CAAQ,QAAA,EAAU,CAAC,CAAA,EAAA,GAAc,IAAA,KAAoB;AACxD,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AACnC,QAAA,OAAA,CAAQ,KAAK,EAAE,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,QAAQ,CAAA;AACxC,QAAA,OAAOA,UAAS,CAAC,CAAA;AAAA,MACnB,CAAC,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,UAAA,CAAW,QAAA,EAAU,CAAC,CAAA,EAAW,MAAA,KAAmB;AACvD,QAAA,OAAA,CAAQ,KAAK,EAAE,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,QAAQ,CAAA;AACxC,QAAA,OAAOA,UAAS,CAAC,CAAA;AAAA,MACnB,CAAC,CAAA;AAAA,IACH;AAGA,IAAA,IAAI,SAAA,GAAY,CAAA;AAChB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,MAAA,MAAM,CAAA,GAAI,QAAQ,CAAC,CAAA;AACnB,MAAA,IAAI,CAAA,EAAG;AACL,QAAA,MAAM,SAAA,GAAY,UAAU,IAAA,GAAO,CAAA,CAAE,QAAQ,CAAA,CAAE,KAAA,GAAQ,EAAE,KAAA,CAAM,MAAA;AAC/D,QAAA,IAAI,cAAc,SAAA,EAAW;AAC3B,UAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,SAAA,EAAW,SAAS,CAAA;AAChD,UAAA,MAAA,CAAO,KAAK,IAAI,CAAA;AAChB,UAAA,SAAA,GAAY,SAAA;AAAA,QACd;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,SAAA,GAAY,KAAK,MAAA,EAAQ;AAC3B,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,SAAA,EAAW,KAAK,MAAM,CAAA;AAClD,MAAA,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,MAAO;AACL,IAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,QAAA,EAAU,CAAA;AAAA,EAC7B;AACA,EAAA,OAAO,MAAA;AACT,CAAA;AAGA,IAAM,WAAA,GAA+B;AAAA,EACnC,OAAA,EAAS,KAAA;AAAA,EACT,QAAA,EAAU,KAAA;AAAA,EACV,QAAA,EAAU;AAAA,IACR,WAAA;AAAA,IACA,kIAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF;AAAA,EAEA,YAAA,CAAa,SAAiD,IAAA,EAA0B;AACtF,IAAA,cAAA,CAAO,OAAA;AAAA,MACL,CAAC,OAAqB,IAAA,KAAsB;AAC1C,QAAA,IAAI,IAAA,CAAK,YAAY,IAAA,EAAM;AACzB,UAAA,IAAI,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,KAAA,EAAO;AAC5B,YAAA,MAAM,gBAAA,GAAmB,SAAS,IAAA,CAAK,KAAK,IAAI,GAAA,GAAM,QAAA,CAAS,KAAK,KAAK,CAAA;AACzE,YAAA,WAAA,CAAY,UAAU,gBAAA,IAAoB,GAAA;AAC1C,YAAA,WAAA,CAAY,WAAW,gBAAA,IAAoB,GAAA;AAC3C,YAAA,OAAA,CAAQ,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,KAAK,CAAA;AAAA,UAChC,CAAA,MAAO;AACL,YAAA,IAAA,CAAK,MAAM,6BAA6B,CAAA;AAAA,UAC1C;AAAA,QACF,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,MAAA,IAAU,eAAe,CAAA;AAAA,QAC3C;AAAA,MACF,CAAA;AAAA,MACA,CAAC,CAAA,KAAe;AACd,QAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,MACd;AAAA,KACF;AAAA,EACF,CAAA;AAAA,EAEA,cAAA,CAAe,SAAqB,IAAA,EAA0B;AAC5D,IAAA,cAAA,CAAO,MAAA;AAAA,MACL,WAAA,CAAY,QAAA;AAAA,MACZ,CAAC,OAAqB,IAAA,KAAsB;AAC1C,QAAA,IAAI,KAAK,OAAA,EAAS;AAChB,UAAA,OAAA,EAAQ;AAAA,QACV,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,MAAA,IAAU,eAAe,CAAA;AAAA,QAC3C;AAAA,MACF,CAAA;AAAA,MACA,CAAC,CAAA,KAAe;AACd,QAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,MACd;AAAA,KACF;AAAA,EACF,CAAA;AAAA,EAEA,eAAA,CACE,SAAA,EACA,SAAA,EACA,OAAA,EACA,IAAA,EACM;AACN,IAAA,MAAM,QAAmB,EAAC;AAC1B,IAAA,MAAM,SAAsB,EAAC;AAE7B,IAAA,IAAI,CAAC,YAAY,OAAA,EAAS;AACxB,MAAA,IAAA,CAAK,MAAM,sCAAsC,CAAA;AAAA,IACnD,CAAA,MAAO;AACL,MAAA,IAAI,YAAY,QAAA,EAAU;AACxB,QAAA,WAAA,CAAY,WAAW,SAAA,EAAW,SAAA,EAAW,KAAA,EAAO,MAAA,EAAQ,CAAC,WAAA,KAAyB;AACpF,UAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,IAAK,MAAA,CAAO,SAAS,CAAA,EAAG;AAC3C,YAAA,MAAM,UAAA,GAAa,OAAO,CAAC,CAAA;AAC3B,YAAA,IAAI,UAAA,EAAY;AACd,cAAA,IAAA,CAAK,UAAA,CAAW,CAAA,EAAG,UAAA,CAAW,CAAA,IAAK,IAAI,CAAA;AAAA,YACzC;AAAA,UACF,CAAA,MAAO;AACL,YAAA,IAAI,OAAA,GAAyB,IAAA;AAC7B,YAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,IAAK,WAAA,EAAa;AACrC,cAAA,OAAA,GAAU,WAAA;AAAA,YACZ;AACA,YAAA,OAAA,CAAQ,OAAO,OAAO,CAAA;AAAA,UACxB;AAAA,QACF,CAAC,CAAA;AAAA,MACH,CAAA,MAAO;AACL,QAAA,WAAA,CAAY,WAAW,SAAA,EAAW,SAAA,EAAW,KAAA,EAAO,MAAA,EAAQ,CAAC,WAAA,KAAyB;AACpF,UAAA,WAAA,CAAY,aAAa,SAAA,EAAW,SAAA,EAAW,KAAA,EAAO,MAAA,EAAQ,CAAC,WAAA,KAAyB;AACtF,YAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,IAAK,MAAA,CAAO,SAAS,CAAA,EAAG;AAC3C,cAAA,MAAM,UAAA,GAAa,OAAO,CAAC,CAAA;AAC3B,cAAA,IAAI,UAAA,EAAY;AACd,gBAAA,IAAA,CAAK,UAAA,CAAW,CAAA,EAAG,UAAA,CAAW,CAAA,IAAK,IAAI,CAAA;AAAA,cACzC;AAAA,YACF,CAAA,MAAO;AACL,cAAA,IAAI,OAAA,GAAyB,IAAA;AAC7B,cAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,gBAAA,IAAI,WAAA,EAAa;AACf,kBAAA,OAAA,GAAU,WAAA;AAAA,gBACZ,WAAW,WAAA,EAAa;AACtB,kBAAA,OAAA,GAAU,WAAA;AAAA,gBACZ;AAAA,cACF;AACA,cAAA,OAAA,CAAQ,OAAO,OAAO,CAAA;AAAA,YACxB;AAAA,UACF,CAAC,CAAA;AAAA,QACH,CAAC,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAA;AAAA,EAEA,iBAAA,CAAkB,SAAuC,IAAA,EAA0B;AACjF,IAAA,IAAI,CAAC,YAAY,QAAA,EAAU;AACzB,MAAA,OAAA,CAAQ,IAAI,wCAAwC,CAAA;AACpD,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf,CAAA,MAAO;AACL,MAAA,cAAA,CAAO,YAAA;AAAA,QACL,EAAE,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,cAAA,EAAe;AAAA,QACzC,CAAC,OAAqB,IAAA,KAAsB;AAC1C,UAAA,IAAI,KAAK,OAAA,EAAS;AAChB,YAAA,OAAA,CAAA,CAAS,IAAA,CAAK,OAAA,EAAS,MAAA,IAAU,CAAA,IAAK,CAAC,CAAA;AAAA,UACzC,CAAA,MAAO;AACL,YAAA,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,MAAA,IAAU,eAAe,CAAA;AAAA,UAC3C;AAAA,QACF,CAAA;AAAA,QACA,CAAC,CAAA,KAAe;AACd,UAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,QACd;AAAA,OACF;AAAA,IACF;AAAA,EACF,CAAA;AAAA,EAEA,OAAA,CACE,UAAA,EACA,OAAA,EACA,IAAA,EACA,cAAA,EACM;AACN,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAM,EAAA,GAAK,UAAA;AACX,MAAA,IAAI,EAAA,CAAG,SAAS,KAAA,EAAO;AACrB,QAAA,cAAA,CAAO,YAAA;AAAA,UACL;AAAA,YACE,MAAA,EAAQ,KAAA;AAAA,YACR,IAAA,EAAM,UAAA;AAAA,YACN,SAAA,EAAW,CAAC,EAAA,CAAG,IAAA,EAAM,GAAG,IAAA,EAAM,EAAA,CAAG,IAAA,EAAM,EAAA,CAAG,KAAK;AAAA,WACjD;AAAA,UACA,CAAC,OAAqB,IAAA,KAAsB;AAC1C,YAAA,IAAI,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,KAAA,EAAO;AAC9B,cAAA,MAAM,KAAK,IAAA,CAAK,KAAA;AAChB,cAAA,IAAI,cAAA,EAAgB;AAClB,gBAAA,cAAA,CAAO,YAAA;AAAA,kBACL,EAAE,MAAM,iBAAA,EAAmB,MAAA,EAAQ,OAAO,SAAA,EAAW,CAAC,EAAE,CAAA,EAAE;AAAA,kBAC1D,CAACC,QAAqBC,KAAAA,KAAsB;AAC1C,oBAAA,IAAIA,MAAK,OAAA,EAAS;AAChB,sBAAA,OAAA,CAAQ,EAAE,CAAA;AAAA,oBACZ,CAAA,MAAO;AACL,sBAAA,IAAA,CAAK,IAAA,EAAMA,KAAAA,CAAK,MAAA,IAAU,8BAA8B,CAAA;AAAA,oBAC1D;AAAA,kBACF,CAAA;AAAA,kBACA,CAAC,CAAA,KAAe;AACd,oBAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,kBACd;AAAA,iBACF;AAAA,cACF,CAAA,MAAO;AACL,gBAAA,OAAA,CAAQ,EAAE,CAAA;AAAA,cACZ;AAAA,YACF,CAAA,MAAO;AACL,cAAA,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,MAAA,IAAU,oBAAoB,CAAA;AAAA,YAChD;AAAA,UACF,CAAA;AAAA,UACA,CAAC,CAAA,KAAe;AACd,YAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,UACd;AAAA,SACF;AAAA,MACF,CAAA,MAAA,IAAW,EAAA,CAAG,IAAA,KAAS,MAAA,EAAQ;AAC7B,QAAA,cAAA,CAAO,YAAA;AAAA,UACL,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,YAAY,SAAA,EAAW,CAAC,EAAA,CAAG,OAAO,CAAA,EAAE;AAAA,UAC5D,CAAC,OAAqB,IAAA,KAAsB;AAC1C,YAAA,IAAI,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,KAAA,EAAO;AAC9B,cAAA,MAAM,KAAK,IAAA,CAAK,KAAA;AAChB,cAAA,IAAI,cAAA,EAAgB;AAClB,gBAAA,cAAA,CAAO,YAAA;AAAA,kBACL,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,cAAc,SAAA,EAAW,CAAC,EAAA,EAAI,GAAG,CAAA,EAAE;AAAA,kBAC3D,CAACD,QAAqBC,KAAAA,KAAsB;AAC1C,oBAAA,IAAIA,MAAK,OAAA,EAAS;AAChB,sBAAA,OAAA,CAAQ,EAAE,CAAA;AAAA,oBACZ,CAAA,MAAO;AACL,sBAAA,IAAA,CAAK,IAAA,EAAMA,KAAAA,CAAK,MAAA,IAAU,yBAAyB,CAAA;AAAA,oBACrD;AAAA,kBACF,CAAA;AAAA,kBACA,CAAC,CAAA,KAAe;AACd,oBAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,kBACd;AAAA,iBACF;AAAA,cACF,CAAA,MAAO;AACL,gBAAA,OAAA,CAAQ,EAAE,CAAA;AAAA,cACZ;AAAA,YACF,CAAA,MAAO;AACL,cAAA,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,MAAA,IAAU,oBAAoB,CAAA;AAAA,YAChD;AAAA,UACF,CAAA;AAAA,UACA,CAAC,CAAA,KAAe;AACd,YAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,UACd;AAAA,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA;AAAA,EAEA,iBAAA,CAAkB,UAAA,EAA6B,OAAA,EAAqB,IAAA,EAA0B;AAC5F,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAM,EAAA,GAAK,UAAA;AACX,MAAA,IAAI,EAAA,CAAG,SAAS,KAAA,EAAO;AACrB,QAAA,cAAA,CAAO,YAAA;AAAA,UACL;AAAA,YACE,MAAA,EAAQ,KAAA;AAAA,YACR,IAAA,EAAM,UAAA;AAAA,YACN,SAAA,EAAW,CAAC,EAAA,CAAG,IAAA,EAAM,GAAG,IAAA,EAAM,EAAA,CAAG,IAAA,EAAM,EAAA,CAAG,KAAK;AAAA,WACjD;AAAA,UACA,CAAC,OAAqB,IAAA,KAAsB;AAC1C,YAAA,IAAI,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,KAAA,EAAO;AAC9B,cAAA,MAAM,KAAK,IAAA,CAAK,KAAA;AAChB,cAAA,cAAA,CAAO,YAAA;AAAA,gBACL,EAAE,MAAM,iBAAA,EAAmB,MAAA,EAAQ,OAAO,SAAA,EAAW,CAAC,EAAE,CAAA,EAAE;AAAA,gBAC1D,CAACD,QAAqBC,KAAAA,KAAsB;AAC1C,kBAAA,IAAIA,MAAK,OAAA,EAAS;AAChB,oBAAA,OAAA,EAAQ;AAAA,kBACV,CAAA,MAAO;AACL,oBAAA,IAAA,CAAK,IAAA,EAAMA,KAAAA,CAAK,MAAA,IAAU,2BAA2B,CAAA;AAAA,kBACvD;AAAA,gBACF,CAAA;AAAA,gBACA,CAAC,CAAA,KAAe;AACd,kBAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,gBACd;AAAA,eACF;AAAA,YACF,CAAA,MAAO;AACL,cAAA,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,MAAA,IAAU,oBAAoB,CAAA;AAAA,YAChD;AAAA,UACF,CAAA;AAAA,UACA,CAAC,CAAA,KAAe;AACd,YAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,UACd;AAAA,SACF;AAAA,MACF,CAAA,MAAA,IAAW,EAAA,CAAG,IAAA,KAAS,MAAA,EAAQ;AAC7B,QAAA,cAAA,CAAO,YAAA;AAAA,UACL,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,YAAY,SAAA,EAAW,CAAC,EAAA,CAAG,OAAO,CAAA,EAAE;AAAA,UAC5D,CAAC,OAAqB,IAAA,KAAsB;AAC1C,YAAA,IAAI,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,KAAA,EAAO;AAC9B,cAAA,MAAM,KAAK,IAAA,CAAK,KAAA;AAChB,cAAA,cAAA,CAAO,YAAA;AAAA,gBACL,EAAE,MAAM,YAAA,EAAc,MAAA,EAAQ,QAAQ,SAAA,EAAW,CAAC,EAAA,EAAI,GAAG,CAAA,EAAE;AAAA,gBAC3D,CAACD,QAAqBC,KAAAA,KAAsB;AAC1C,kBAAA,IAAIA,MAAK,OAAA,EAAS;AAChB,oBAAA,OAAA,EAAQ;AAAA,kBACV,CAAA,MAAO;AACL,oBAAA,IAAA,CAAK,IAAA,EAAMA,KAAAA,CAAK,MAAA,IAAU,sBAAsB,CAAA;AAAA,kBAClD;AAAA,gBACF,CAAA;AAAA,gBACA,CAAC,CAAA,KAAe;AACd,kBAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,gBACd;AAAA,eACF;AAAA,YACF,CAAA,MAAO;AACL,cAAA,IAAA,CAAK,IAAA,EAAM,IAAA,CAAK,MAAA,IAAU,oBAAoB,CAAA;AAAA,YAChD;AAAA,UACF,CAAA;AAAA,UACA,CAAC,CAAA,KAAe;AACd,YAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,UACd;AAAA,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA;AAAA,EAEA,YACE,EAAA,EACA,IAAA,EACA,aACA,OAAA,EACA,IAAA,EACA,UACA,mBAAA,EACM;AAEN,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI,wBAAwB,IAAA,EAAM;AAChC,MAAA,MAAA,GAAS,IAAA;AAAA,IACX,CAAA,MAAO;AAEL,MAAA,MAAA,GAEI,WACA,MAAA,EAAQ,MAAA,CAAO,IAAI,CAAA,IAAK,KAAK,IAAI,CAAA;AAAA,IACvC;AAEA,IAAA,MAAM,WAAA,GAAc,QAAA,KAAa,IAAA,GAAO,KAAA,GAAQ,IAAA;AAEhD,IAAA,cAAA,CAAO,YAAA;AAAA,MACL;AAAA,QACE,MAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAM,cAAA;AAAA,QACN,SAAA,EAAW,CAAC,MAAA,EAAQ,EAAA,EAAI,WAAW;AAAA,OACrC;AAAA,MACA,CAAC,OAAqBA,KAAAA,KAAsB;AAC1C,QAAA,IAAIA,KAAAA,CAAK,OAAA,IAAWA,KAAAA,CAAK,QAAA,EAAU;AACjC,UAAA,MAAM,QAAQA,KAAAA,CAAK,QAAA;AACnB,UAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,QACf,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,IAAA,EAAMA,KAAAA,CAAK,MAAA,IAAU,wBAAwB,CAAA;AAAA,QACpD;AAAA,MACF,CAAA;AAAA,MACA,CAAC,CAAA,KAAe;AACd,QAAA,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,MACd;AAAA,KACF;AAAA,EACF,CAAA;AAAA,EAEA,WAAA,CAAY,GAAW,CAAA,EAAmB;AACxC,IAAA,MAAM,GAAA,GAAM,CAAA,CAAE,SAAA,CAAU,WAAA,EAAa,IAAI,CAAA;AACzC,IAAA,KAAA,MAAW,KAAK,GAAA,EAAK;AACnB,MAAA,MAAM,OAAA,GAAU,IAAI,CAAC,CAAA;AACrB,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,MAAA,CAAA,CAAQ,QAAA,CAAS,CAAC,IAAI,CAAA,GAAI,GAAA,GAAM,EAAA,IAAM,CAAA,GAAI,GAAG,CAAA;AAC/D,QAAA,IAAI,MAAM,EAAA,EAAI;AACZ,UAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,CAAA,GAAI,CAAA,CAAE,MAAA,GAAS,CAAA,IAAK,QAAA,CAAS,CAAC,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,CAAA,CAAE,CAAA;AAAA,QACnE;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,EAAA;AAAA,EACT,CAAA;AAAA,EAEA,UAAA,CACE,SAAA,EACA,SAAA,EACA,KAAA,EACA,QACA,QAAA,EACM;AACN,IAAA,IAAI,OAAA;AAEJ,IAAA,cAAA,CAAO,YAAA;AAAA,MACL,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,uBAAA,EAAwB;AAAA,MAC/C,CAAC,OAAqB,IAAA,KAAsB;AAC1C,QAAA,IAAI,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,YAAA,EAAc;AACrC,UAAA,KAAA,MAAW,GAAA,IAAO,KAAK,YAAA,EAAc;AACnC,YAAA,MAAM,EAAA,GAAK,IAAA,CAAK,YAAA,CAAa,GAAG,CAAA;AAChC,YAAA,IAAI,CAAC,EAAA,EAAI;AAET,YAAA,IAAI,WAAA,GAAc,EAAA,CAAG,KAAA,CAAM,WAAA,EAAY;AACvC,YAAA,WAAA,GAAc,WAAA,CAAY,OAAA,CAAQ,mBAAA,EAAqB,MAAM,CAAA;AAC7D,YAAA,WAAA,GAAc,WAAA,CAAY,OAAA,CAAQ,mBAAA,EAAqB,QAAQ,CAAA;AAE/D,YAAA,MAAM,EAAA,GAAsB;AAAA,cAC1B,MAAM,EAAA,CAAG,IAAA;AAAA,cACT,MAAM,EAAA,CAAG,IAAA;AAAA,cACT,MAAM,EAAA,CAAG,IAAA;AAAA,cACT,OAAO,EAAA,CAAG,KAAA;AAAA,cACV,YAAA,EAAc,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,cAAc,CAAA;AAAA,cACjE,WAAW,IAAI,IAAA;AAAA,gBACb,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,WAAW,CAAA,CAC7C,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAClB,OAAA,CAAQ,GAAA,EAAK,GAAG;AAAA,eACrB;AAAA,cACA,SAAS,IAAI,IAAA;AAAA,gBACX,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,SAAS,CAAA,CAC3C,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAClB,OAAA,CAAQ,GAAA,EAAK,GAAG;AAAA,eACrB;AAAA,cACA,EAAA,EAAI,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,IAAI,CAAA;AAAA,cAC7C,GAAA,EACE,YAAY,WAAA,CAAY,WAAA,EAAa,KAAK,CAAA,IAC1C,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,KAAK,CAAA;AAAA,cAC5C,GAAA,EAAK,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,KAAK,CAAA;AAAA,cAC/C,KAAA,EAAO,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,OAAO,CAAA;AAAA,cACnD,CAAA,EAAG,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,GAAG,CAAA;AAAA,cAC3C,CAAA,EAAG,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,GAAG,CAAA;AAAA,cAC3C,IAAA,EAAM;AAAA,aACR;AAEA,YAAA,IAAI,CAAC,EAAA,CAAG,GAAA,IAAO,CAAC,GAAG,KAAA,EAAO;AAE1B,YAAA,MAAM,MAAA,GAAS,SAAA,CAAU,EAAA,EAAI,GAAG,CAAA;AAChC,YAAA,IAAI,CAAC,OAAA,EAAS;AACZ,cAAA,OAAA,GAAU,MAAA;AAAA,YACZ;AACA,YAAA,MAAM,GAAA,GAAM,SAAA,CAAU,MAAA,EAAQ,EAAE,CAAA;AAChC,YAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,UAChB;AAAA,QACF,CAAA,MAAO;AACL,UAAA,MAAA,CAAO,KAAK,EAAE,CAAA,EAAG,IAAA,CAAK,MAAA,IAAU,+BAA+B,CAAA;AAAA,QACjE;AACA,QAAA,QAAA,CAAS,OAAO,CAAA;AAAA,MAClB,CAAA;AAAA,MACA,CAAC,CAAA,KAAe;AACd,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA,EAAM,CAAA;AACpB,QAAA,QAAA,CAAS,OAAO,CAAA;AAAA,MAClB;AAAA,KACF;AAAA,EACF,CAAA;AAAA,EAEA,YAAA,CACE,SAAA,EACA,SAAA,EACA,KAAA,EACA,QACA,QAAA,EACM;AACN,IAAA,IAAI,OAAA;AAEJ,IAAA,cAAA,CAAO,YAAA;AAAA,MACL,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,iBAAiB,SAAA,EAAW,CAAC,EAAE,CAAA,EAAE;AAAA,MACzD,CAAC,OAAqB,IAAA,KAAsB;AAC1C,QAAA,IAAI,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,MAAA,EAAQ;AAC/B,UAAA,KAAA,MAAW,GAAA,IAAO,KAAK,MAAA,EAAQ;AAC7B,YAAA,MAAM,EAAA,GAAK,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA;AAC1B,YAAA,IAAI,CAAC,EAAA,EAAI;AAET,YAAA,IAAI,WAAA,GAAc,EAAA,CAAG,IAAA,CAAK,WAAA,EAAY;AACtC,YAAA,WAAA,GAAc,WAAA,CAAY,OAAA,CAAQ,mBAAA,EAAqB,MAAM,CAAA;AAC7D,YAAA,WAAA,GAAc,WAAA,CAAY,OAAA,CAAQ,mBAAA,EAAqB,QAAQ,CAAA;AAE/D,YAAA,MAAM,EAAA,GAAsB;AAAA,cAC1B,SAAS,EAAA,CAAG,OAAA;AAAA,cACZ,YAAY,EAAA,CAAG,UAAA;AAAA,cACf,WAAW,EAAA,CAAG,SAAA;AAAA,cACd,MAAM,EAAA,CAAG,IAAA;AAAA,cACT,YAAA,EAAc,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,cAAc,CAAA;AAAA,cACjE,WAAW,IAAI,IAAA,CAAK,YAAY,WAAA,CAAY,WAAA,EAAa,WAAW,CAAC,CAAA;AAAA,cACrE,SAAS,IAAI,IAAA,CAAK,YAAY,WAAA,CAAY,WAAA,EAAa,SAAS,CAAC,CAAA;AAAA,cACjE,EAAA,EAAI,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,IAAI,CAAA;AAAA,cAC7C,GAAA,EACE,YAAY,WAAA,CAAY,WAAA,EAAa,KAAK,CAAA,IAC1C,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,KAAK,CAAA;AAAA,cAC5C,GAAA,EAAK,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,KAAK,CAAA;AAAA,cAC/C,KAAA,EAAO,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,OAAO,CAAA;AAAA,cACnD,CAAA,EAAG,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,GAAG,CAAA;AAAA,cAC3C,CAAA,EAAG,WAAA,CAAY,WAAA,CAAY,WAAA,EAAa,GAAG,CAAA;AAAA,cAC3C,IAAA,EAAM;AAAA,aACR;AAEA,YAAA,IAAI,CAAC,EAAA,CAAG,GAAA,IAAO,CAAC,GAAG,KAAA,EAAO;AAE1B,YAAA,MAAM,MAAA,GAAS,SAAA,CAAU,EAAA,EAAI,GAAG,CAAA;AAChC,YAAA,IAAI,CAAC,OAAA,EAAS;AACZ,cAAA,OAAA,GAAU,MAAA;AAAA,YACZ;AACA,YAAA,MAAM,GAAA,GAAM,SAAA,CAAU,MAAA,EAAQ,EAAE,CAAA;AAChC,YAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,UAChB;AAAA,QACF,CAAA,MAAO;AACL,UAAA,MAAA,CAAO,KAAK,EAAE,CAAA,EAAG,IAAA,CAAK,MAAA,IAAU,yBAAyB,CAAA;AAAA,QAC3D;AACA,QAAA,QAAA,CAAS,OAAO,CAAA;AAAA,MAClB,CAAA;AAAA,MACA,CAAC,CAAA,KAAe;AACd,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA,EAAM,CAAA;AACpB,QAAA,QAAA,CAAS,OAAO,CAAA;AAAA,MAClB;AAAA,KACF;AAAA,EACF;AACF,CAAA;AAEA,IAAO,qBAAA,GAAQ;;;AChtBR,IAAe,cAAf,MAAiD;AAAA,EAEtC,OAAA,GAAkB,OAAA;AAAA,EAClB,WAAA,GAAsB,EAAA;AAAA;AAAA;AAAA;AAAA,EAK5B,WACR,UAAA,EACA,IAAA,GAAkB,EAAC,EACnB,WACA,OAAA,EACM;AACN,IAAA,MAAM,IAAA,GAAyB;AAAA,MAC7B,QAAQ,IAAA,CAAK,IAAA;AAAA,MACb,IAAA,EAAM,UAAA;AAAA,MACN,GAAI,IAAA,CAAK,MAAA,GAAS,CAAA,IAAK,EAAE,WAAW,IAAA;AAAK,KAC3C;AAEA,IAAA,cAAA,CAAO,YAAA,CAAa,IAAA,EAAM,SAAA,EAAW,OAAO,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKU,oBAAgE,UAAA,EAAoB;AAC5F,IAAA,OAAO,IAAI,IAAA,KAAkC;AAC3C,MAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,QAAA,IAAA,CAAK,UAAA;AAAA,UACH,UAAA;AAAA,UACA,IAAA;AAAA,UACA,CAAC,QAAQ,IAAA,KAAS;AAChB,YAAA,IAAI,KAAK,OAAA,EAAS;AAChB,cAAA,OAAA,CAAQ,IAAe,CAAA;AAAA,YACzB,CAAA,MAAO;AACL,cAAA,MAAA,CAAO,IAAI,KAAA,CAAM,IAAA,CAAK,MAAA,IAAU,eAAe,CAAC,CAAA;AAAA,YAClD;AAAA,UACF,CAAA;AAAA,UACA,CAAA,KAAA,KAAS,MAAA,CAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAC;AAAA,SAC3E;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKU,aAAyD,UAAA,EAAoB;AACrF,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,mBAAA,CAAoC,UAAU,CAAA;AAEzE,IAAA,MAAM,cAAA,GAAiB,IAAI,IAAA,KAA+D;AACxF,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACnC,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AACtC,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AAEpC,MAAA,IAAA,CAAK,UAAA,CAAoB,UAAA,EAAY,UAAA,EAAyB,SAAA,EAAW,OAAO,CAAA;AAAA,IAClF,CAAA;AAEA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,aAAA;AAAA,MACT,QAAA,EAAU;AAAA,KACZ;AAAA,EACF;AACF;AAKO,IAAM,gBAAN,MAAoB;AAAA,EACzB,OAAe,OAAA,mBAAU,IAAI,GAAA,EAAyB;AAAA,EAEtD,OAAO,SAAS,MAAA,EAA2B;AACzC,IAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AAAA,EACtC;AAAA,EAEA,OAAO,IAA2B,IAAA,EAA6B;AAC7D,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AAAA,EAC9B;AAAA,EAEA,OAAO,MAAA,GAAwB;AAC7B,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AAAA,EACzC;AAAA,EAEA,OAAO,IAAI,IAAA,EAAuB;AAChC,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AAAA,EAC9B;AACF;AAKO,SAAS,eAAgD,WAAA,EAAmB;AACjF,EAAA,MAAM,QAAA,GAAW,IAAI,WAAA,EAAY;AACjC,EAAA,aAAA,CAAc,SAAS,QAAQ,CAAA;AAC/B,EAAA,OAAO,WAAA;AACT;;;ACtGA,IAAA,yBAAA,EAAA,KAAA,EAAA,EAAA;AAMA,yBAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,aAAA,GAAN,eAA4B,EAAA,GAAA,WAAA,EAAY;AAAA,EACpC,IAAA,GAAO,SAAA;AAAA,EACP,WAAA,GAAc,0DAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,SAAA,GAAY,CACV,KAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,YAAA,EAAc,CAAC,KAAK,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC3D,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,GAAY,CAAC,SAAA,EAAuC,OAAA,KAAiC;AACnF,IAAA,IAAA,CAAK,UAAA,CAAW,YAAA,EAAc,EAAC,EAAG,WAAW,OAAO,CAAA;AAAA,EACtD,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAA,GAAmB,CACjB,QAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,mBAAA,EAAqB,CAAC,QAAQ,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACrE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAA,GAAsB,CACpB,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,uBAAA,EAAyB,EAAC,EAAG,WAAW,OAAO,CAAA;AAAA,EACjE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,GAAU,CACR,OAAA,EACA,QAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,UAAA,EAAY,CAAC,SAAS,QAAQ,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACrE,CAAA;AACF,CAAA;AAtDO,KAAA,GAAA,gBAAA,CAAA,EAAA,CAAA;AAAM,aAAA,GAAN,6CADP,yBAAA,EACa,aAAA,CAAA;AAAN,iBAAA,CAAA,KAAA,EAAA,CAAA,EAAM,aAAA,CAAA;;;ACPb,IAAA,wBAAA,EAAAC,MAAAA,EAAAC,GAAAA;AAMA,wBAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,YAAA,GAAN,eAA2BA,GAAAA,GAAA,WAAA,EAAY;AAAA,EACnC,IAAA,GAAO,QAAA;AAAA,EACP,WAAA,GAAc,mEAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,kBAAkB,CAChB,IAAA,EACA,oBAAA,EACA,WAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,kBAAA;AAAA,MACA,CAAC,IAAA,EAAM,oBAAA,EAAsB,WAAW,CAAA;AAAA,MACxC,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,eAAA,GAAkB,CAChB,aAAA,EACA,cAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,kBAAA,EAAoB,CAAC,eAAe,cAAc,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACzF,CAAA;AACF,CAAA;AAjCOD,MAAAA,GAAA,gBAAA,CAAAC,GAAAA,CAAAA;AAAM,YAAA,GAAN,iBAAA,CAAAD,MAAAA,EAAA,CAAA,EAAA,cAAA,EADP,wBAAA,EACa,YAAA,CAAA;AAAN,iBAAA,CAAAA,QAAA,CAAA,EAAM,YAAA,CAAA;;;ACPb,IAAA,qBAAA,EAAAA,MAAAA,EAAAC,GAAAA;AAuBA,qBAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,SAAA,GAAN,eAAwBA,GAAAA,GAAA,WAAA,EAAY;AAAA,EAChC,IAAA,GAAO,KAAA;AAAA,EACP,WAAA,GAAc,sDAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,OAAA,GAAU,CACR,OAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,UAAA,EAAY,CAAC,OAAO,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC3D,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,WAAA,GAAc,CACZ,QAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,eAAA,EAAiB,CAAC,QAAQ,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACjE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAA,GAAmB,CACjB,WAAA,EACA,KAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,mBAAA,EAAqB,CAAC,aAAa,KAAK,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC/E,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,GAAa,CACX,KAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,cAAA,EAAgB,CAAC,KAAK,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC7D,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,GAAY,CACV,KAAA,EACA,iBAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,YAAA,EAAc,CAAC,OAAO,iBAAiB,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC9E,CAAA;AACF,CAAA;AA5DOD,MAAAA,GAAA,gBAAA,CAAAC,GAAAA,CAAAA;AAAM,SAAA,GAAN,iBAAA,CAAAD,MAAAA,EAAA,CAAA,EAAA,WAAA,EADP,qBAAA,EACa,SAAA,CAAA;AAAN,iBAAA,CAAAA,QAAA,CAAA,EAAM,SAAA,CAAA;;;ACxBb,IAAA,4BAAA,EAAAA,MAAAA,EAAAC,GAAAA;AAMA,4BAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,gBAAA,GAAN,eAA+BA,GAAAA,GAAA,WAAA,EAAY;AAAA,EACvC,IAAA,GAAO,YAAA;AAAA,EACP,WAAA,GAAc,+CAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,YAAA,GAAe,CACb,KAAA,EACA,IAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,eAAA,EAAiB,CAAC,OAAO,IAAI,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACpE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,YAAA,GAAe,CACb,IAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,gBAAA,EAAkB,CAAC,IAAI,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC9D,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,iCAAiC,CAC/B,IAAA,EACA,SAAA,EACA,WAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,mCAAA;AAAA,MACA,CAAC,IAAA,EAAM,SAAA,EAAW,WAAW,CAAA;AAAA,MAC7B,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,iCAAiC,CAC/B,SAAA,EACA,SAAA,EACA,KAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,qCAAA;AAAA,MACA,CAAC,SAAA,EAAW,SAAA,EAAW,KAAK,CAAA;AAAA,MAC5B,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,qBAAA,GAAwB,CACtB,SAAA,EACA,KAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,0BAAA,EAA4B,CAAC,WAAW,KAAK,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACpF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,wBAAwB,CACtB,IAAA,EACA,SAAA,EACA,KAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,4BAA4B,CAAC,IAAA,EAAM,WAAW,KAAK,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC1F,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,0CAA0C,CACxC,SAAA,EACA,SAAA,EACA,WAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,8CAAA;AAAA,MACA,CAAC,SAAA,EAAW,SAAA,EAAW,WAAW,CAAA;AAAA,MAClC,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AACF,CAAA;AAzGOD,MAAAA,GAAA,gBAAA,CAAAC,GAAAA,CAAAA;AAAM,gBAAA,GAAN,iBAAA,CAAAD,MAAAA,EAAA,CAAA,EAAA,kBAAA,EADP,4BAAA,EACa,gBAAA,CAAA;AAAN,iBAAA,CAAAA,QAAA,CAAA,EAAM,gBAAA,CAAA;;;ACPb,IAAA,wBAAA,EAAAA,MAAAA,EAAAC,GAAAA;AAMA,wBAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,YAAA,GAAN,eAA2BA,GAAAA,GAAA,WAAA,EAAY;AAAA,EACnC,IAAA,GAAO,QAAA;AAAA,EACP,WAAA,GAAc,yCAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,QAAA,GAAW,CACT,QAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,WAAA,EAAa,CAAC,QAAQ,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC7D,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,GAAY,CACV,UAAA,EACA,eAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,YAAA,EAAc,CAAC,YAAY,eAAe,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACjF,CAAA;AACF,CAAA;AA1BOD,MAAAA,GAAA,gBAAA,CAAAC,GAAAA,CAAAA;AAAM,YAAA,GAAN,iBAAA,CAAAD,MAAAA,EAAA,CAAA,EAAA,cAAA,EADP,wBAAA,EACa,YAAA,CAAA;AAAN,iBAAA,CAAAA,QAAA,CAAA,EAAM,YAAA,CAAA;;;ACPb,IAAA,sBAAA,EAAAA,MAAAA,EAAAC,GAAAA;AA6BA,sBAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,UAAA,GAAN,eAAyBA,GAAAA,GAAA,WAAA,EAAY;AAAA,EACjC,IAAA,GAAO,MAAA;AAAA,EACP,WAAA,GAAc,uDAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOvB,WAAA,GAAc,CACZ,WAAA,GAAc,EAAA,EACd,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,eAAA,EAAiB,CAAC,WAAW,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACpE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,GAAa,CAAC,SAAA,EAA+C,OAAA,KAAiC;AAC5F,IAAA,IAAA,CAAK,UAAA,CAAW,aAAA,EAAe,EAAC,EAAG,WAAW,OAAO,CAAA;AAAA,EACvD,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,GAAU,CACR,OAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,UAAA,EAAY,CAAC,OAAO,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC3D,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,GAAY,CACV,OAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,YAAA,EAAc,CAAC,OAAO,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC7D,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAA,GAAY,CACV,OAAA,EACA,OAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,YAAA,EAAc,CAAC,SAAS,OAAO,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACtE,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAA,GAAY,CACV,OAAA,EACA,OAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,YAAA,EAAc,CAAC,SAAS,OAAO,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACtE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,GAAU,CACR,OAAA,EACA,IAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,UAAA,EAAY,CAAC,SAAS,IAAI,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACjE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoB,CAClB,OAAA,EACA,sBACA,eAAA,EACA,iBAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,oBAAA;AAAA,MACA,CAAC,OAAA,EAAS,oBAAA,EAAsB,eAAA,EAAiB,iBAAiB,CAAA;AAAA,MAClE,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,WAAA,GAAc,CACZ,OAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,eAAA,EAAiB,CAAC,OAAO,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAChE,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAA,GAAc,CACZ,OAAA,EACA,MAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,eAAA,EAAiB,CAAC,SAAS,MAAM,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACxE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,aAAA,GAAgB,CACd,OAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,iBAAA,EAAmB,CAAC,OAAO,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAClE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB,CACd,OAAA,EACA,QAAA,EACA,YAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,kBAAkB,CAAC,OAAA,EAAS,UAAU,YAAY,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACzF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAA,GAAmB,IAAA,CAAK,mBAAA,CAAiD,eAAe,CAAA;AAAA;AAAA;AAAA;AAAA,EAKxF,eAAA,GAAkB,IAAA,CAAK,mBAAA,CAA0C,aAAa,CAAA;AAAA;AAAA;AAAA;AAAA,EAK9E,YAAA,GAAe,IAAA,CAAK,mBAAA,CAA2C,UAAU,CAAA;AAAA;AAAA;AAAA;AAAA,EAKzE,cAAA,GAAiB,IAAA,CAAK,mBAAA,CAAiD,YAAY,CAAA;AAAA;AAAA;AAAA;AAAA,EAKnF,iBAAiB,IAAA,CAAK,mBAAA;AAAA,IACpB;AAAA,GACF;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB,IAAA,CAAK,mBAAA;AAAA,IACpB;AAAA,GACF;AAAA;AAAA;AAAA;AAAA,EAKA,YAAA,GAAe,IAAA,CAAK,mBAAA,CAAyD,UAAU,CAAA;AAAA;AAAA;AAAA;AAAA,EAKvF,sBAAA,GAAyB,IAAA,CAAK,mBAAA,CAG5B,oBAAoB,CAAA;AAAA;AAAA;AAAA;AAAA,EAKtB,gBAAA,GAAmB,IAAA,CAAK,mBAAA,CAAgD,eAAe,CAAA;AAAA;AAAA;AAAA;AAAA,EAKvF,gBAAA,GAAmB,IAAA,CAAK,mBAAA,CAAyD,eAAe,CAAA;AAAA;AAAA;AAAA;AAAA,EAKhG,kBAAA,GAAqB,IAAA,CAAK,mBAAA,CAAkD,iBAAiB,CAAA;AAAA;AAAA;AAAA;AAAA,EAK7F,qBAAqB,IAAA,CAAK,mBAAA;AAAA,IACxB;AAAA,GACF;AACF,CAAA;AA7NOD,MAAAA,GAAA,gBAAA,CAAAC,GAAAA,CAAAA;AAAM,UAAA,GAAN,iBAAA,CAAAD,MAAAA,EAAA,CAAA,EAAA,YAAA,EADP,sBAAA,EACa,UAAA,CAAA;AAAN,iBAAA,CAAAA,QAAA,CAAA,EAAM,UAAA,CAAA;AAgON,IAAM,UAAA,GAAa,IAAI,UAAA;;;AC9P9B,IAAA,wBAAA,EAAAA,MAAAA,EAAAC,GAAAA;AAYA,wBAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,YAAA,GAAN,eAA2BA,GAAAA,GAAA,WAAA,EAAY;AAAA,EACnC,IAAA,GAAO,QAAA;AAAA,EACP,WAAA,GAAc,yCAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,cAAA,GAAiB,CACf,QAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,iBAAA,EAAmB,CAAC,QAAQ,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACnE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,WAAA,GAAc,CACZ,YAAA,EACA,OAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,aAAA,EAAe,CAAC,cAAc,OAAO,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC5E,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,WAAA,GAAc,CAAC,SAAA,EAA2C,OAAA,KAAiC;AACzF,IAAA,IAAA,CAAK,UAAA,CAAW,cAAA,EAAgB,EAAC,EAAG,WAAW,OAAO,CAAA;AAAA,EACxD,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAA,GAAsB,CACpB,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,uBAAA,EAAyB,EAAC,EAAG,WAAW,OAAO,CAAA;AAAA,EACjE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,sBAAA,GAAyB,CAAC,SAAA,EAAqC,OAAA,KAAiC;AAC9F,IAAA,IAAA,CAAK,UAAA,CAAW,2BAAA,EAA6B,EAAC,EAAG,WAAW,OAAO,CAAA;AAAA,EACrE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,GAAU,CACR,SAAA,EACA,QAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,UAAA,EAAY,CAAC,WAAW,QAAQ,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACvE,CAAA;AACF,CAAA;AA9DOD,MAAAA,GAAA,gBAAA,CAAAC,GAAAA,CAAAA;AAAM,YAAA,GAAN,iBAAA,CAAAD,MAAAA,EAAA,CAAA,EAAA,cAAA,EADP,wBAAA,EACa,YAAA,CAAA;AAAN,iBAAA,CAAAA,QAAA,CAAA,EAAM,YAAA,CAAA;;;ACeN,IAAM,sBAAN,MAA0B;AAAA,EACvB,MAAA;AAAA,EACA,QAAA,uBAAe,GAAA,EAAwB;AAAA,EACvC,eAAA,GAAyC,IAAA;AAAA,EAEjD,WAAA,CAAY,MAAA,GAAiC,EAAC,EAAG;AAC/C,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,WAAA,EAAa,gBAAA;AAAA,MACb,eAAA,EAAiB,CAAA,GAAI,EAAA,GAAK,EAAA,GAAK,GAAA;AAAA;AAAA,MAC/B,SAAA,EAAW,YAAA;AAAA,MACX,GAAG;AAAA,KACL;AAEA,IAAA,IAAA,CAAK,qBAAA,EAAsB;AAC3B,IAAA,IAAA,CAAK,iBAAA,EAAkB;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,CACE,KAAA,EACA,aAAA,EACA,WAAA,EACA,aAAa,IAAA,EACP;AACN,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,MAAM,OAAA,GAAsB;AAAA,MAC1B,KAAA;AAAA,MACA,aAAA;AAAA,MACA,QAAA,EAAU,GAAA;AAAA,MACV,SAAA,EAAW,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,eAAA;AAAA,MAC7B,WAAA;AAAA,MACA;AAAA,KACF;AAGA,IAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,aAAA,EAAe,OAAO,CAAA;AAGxC,IAAA,IAAA,CAAK,aAAA,CAAc,eAAe,OAAO,CAAA;AAEzC,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,gCAAyB,aAAa,CAAA,aAAA,EAAgB,KAAK,MAAA,CAAO,eAAA,GAAkB,MAAO,EAAE,CAAA,SAAA;AAAA,KAC/F;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,aAAA,EAAsC;AAC7C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,aAAa,CAAA;AAE/C,IAAA,IAAI,CAAC,OAAA,EAAS;AAEZ,MAAA,IAAA,CAAK,gBAAgB,aAAa,CAAA;AAClC,MAAA,OAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,aAAa,GAAG,KAAA,IAAS,IAAA;AAAA,IACpD;AAGA,IAAA,IAAI,IAAA,CAAK,GAAA,EAAI,GAAI,OAAA,CAAQ,SAAA,EAAW;AAClC,MAAA,KAAK,IAAA,CAAK,iBAAiB,aAAa,CAAA;AACxC,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,OAAA,CAAQ,KAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAA,GAAkC;AAChC,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,MAAM,iBAA+B,EAAC;AAEtC,IAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,OAAO,KAAK,IAAA,CAAK,QAAA,CAAS,SAAQ,EAAG;AACvD,MAAA,IAAI,GAAA,IAAO,QAAQ,SAAA,EAAW;AAC5B,QAAA,cAAA,CAAe,KAAK,OAAO,CAAA;AAAA,MAC7B,CAAA,MAAO;AAEL,QAAA,KAAK,IAAA,CAAK,iBAAiB,MAAM,CAAA;AAAA,MACnC;AAAA,IACF;AAEA,IAAA,OAAO,cAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,aAAA,EAAgC;AAC5C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,aAAa,CAAA;AAC/C,IAAA,IAAI,CAAC,SAAS,OAAO,KAAA;AAErB,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,OAAA,CAAQ,SAAA,GAAY,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,eAAA;AAEtC,IAAA,KAAK,IAAA,CAAK,aAAA,CAAc,aAAA,EAAe,OAAO,CAAA;AAC9C,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,4BAAA,EAA0B,aAAa,CAAA,CAAE,CAAA;AACrD,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAiB,aAAA,EAAsC;AAC3D,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,aAAa,CAAA;AAE/C,IAAA,IAAI,OAAA,EAAS;AAEX,MAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,QAAA,MAAM,IAAA,CAAK,kBAAA,CAAmB,OAAA,CAAQ,KAAK,CAAA;AAAA,MAC7C;AAGA,MAAA,IAAA,CAAK,QAAA,CAAS,OAAO,aAAa,CAAA;AAGlC,MAAA,IAAA,CAAK,kBAAkB,aAAa,CAAA;AAEpC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,qCAAA,EAA4B,aAAa,CAAA,CAAE,CAAA;AAAA,IACzD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAA,GAAkC;AACtC,IAAA,MAAM,WAAW,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA;AAEhD,IAAA,KAAA,MAAW,UAAU,QAAA,EAAU;AAC7B,MAAA,MAAM,IAAA,CAAK,iBAAiB,MAAM,CAAA;AAAA,IACpC;AAEA,IAAA,OAAA,CAAQ,IAAI,oCAA6B,CAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,SAAA,EAAyC;AACpD,IAAA,IAAA,CAAK,SAAS,EAAE,GAAG,IAAA,CAAK,MAAA,EAAQ,GAAG,SAAA,EAAU;AAG7C,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,aAAA,CAAc,KAAK,eAAe,CAAA;AAAA,IACpC;AACA,IAAA,IAAA,CAAK,iBAAA,EAAkB;AAAA,EACzB;AAAA;AAAA,EAIQ,aAAA,CAAc,eAAuB,OAAA,EAA2B;AACtE,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,SAAA,GAAY,aAAA;AACpC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AAEnC,IAAA,IAAI;AACF,MAAA,QAAQ,IAAA,CAAK,OAAO,WAAA;AAAa,QAC/B,KAAK,gBAAA;AACH,UAAA,IAAI,OAAO,mBAAmB,WAAA,EAAa;AACzC,YAAA,cAAA,CAAe,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA,UAClC;AACA,UAAA;AAAA,QAEF,KAAK,cAAA;AACH,UAAA,IAAI,OAAO,iBAAiB,WAAA,EAAa;AACvC,YAAA,YAAA,CAAa,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA,UAChC;AACA,UAAA;AAAA,QAEF,KAAK,QAAA;AACH,UAAA,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,IAAA,EAAM,OAAA,CAAQ,SAAS,CAAA;AAC3C,UAAA;AAAA,QAEF,KAAK,QAAA;AAEH,UAAA;AAAA;AACJ,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA,CAAK,8BAA8B,KAAK,CAAA;AAAA,IAClD;AAAA,EACF;AAAA,EAEQ,gBAAgB,aAAA,EAA0C;AAChE,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,SAAA,GAAY,aAAA;AAEpC,IAAA,IAAI;AACF,MAAA,IAAI,IAAA,GAAsB,IAAA;AAE1B,MAAA,QAAQ,IAAA,CAAK,OAAO,WAAA;AAAa,QAC/B,KAAK,gBAAA;AACH,UAAA,IAAI,OAAO,mBAAmB,WAAA,EAAa;AACzC,YAAA,IAAA,GAAO,cAAA,CAAe,QAAQ,GAAG,CAAA;AAAA,UACnC;AACA,UAAA;AAAA,QAEF,KAAK,cAAA;AACH,UAAA,IAAI,OAAO,iBAAiB,WAAA,EAAa;AACvC,YAAA,IAAA,GAAO,YAAA,CAAa,QAAQ,GAAG,CAAA;AAAA,UACjC;AACA,UAAA;AAAA,QAEF,KAAK,QAAA;AACH,UAAA,IAAA,GAAO,IAAA,CAAK,UAAU,GAAG,CAAA;AACzB,UAAA;AAAA,QAEF,KAAK,QAAA;AACH,UAAA,OAAO,IAAA;AAAA;AAGX,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAG/B,QAAA,IAAI,IAAA,CAAK,GAAA,EAAI,GAAI,OAAA,CAAQ,SAAA,EAAW;AAClC,UAAA,IAAA,CAAK,kBAAkB,aAAa,CAAA;AACpC,UAAA,OAAO,IAAA;AAAA,QACT;AAEA,QAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,aAAA,EAAe,OAAO,CAAA;AACxC,QAAA,OAAO,OAAA;AAAA,MACT;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA,CAAK,gCAAgC,KAAK,CAAA;AAAA,IACpD;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,kBAAkB,aAAA,EAA6B;AACrD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,SAAA,GAAY,aAAA;AAEpC,IAAA,IAAI;AACF,MAAA,QAAQ,IAAA,CAAK,OAAO,WAAA;AAAa,QAC/B,KAAK,gBAAA;AACH,UAAA,IAAI,OAAO,mBAAmB,WAAA,EAAa;AACzC,YAAA,cAAA,CAAe,WAAW,GAAG,CAAA;AAAA,UAC/B;AACA,UAAA;AAAA,QAEF,KAAK,cAAA;AACH,UAAA,IAAI,OAAO,iBAAiB,WAAA,EAAa;AACvC,YAAA,YAAA,CAAa,WAAW,GAAG,CAAA;AAAA,UAC7B;AACA,UAAA;AAAA,QAEF,KAAK,QAAA;AACH,UAAA,IAAA,CAAK,aAAa,GAAG,CAAA;AACrB,UAAA;AAAA,QAEF,KAAK,QAAA;AAEH,UAAA;AAAA;AACJ,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA,CAAK,kCAAkC,KAAK,CAAA;AAAA,IACtD;AAAA,EACF;AAAA,EAEQ,qBAAA,GAA8B;AAEpC,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AAEnC,IAAA,IAAI;AACF,MAAA,MAAM,OAAiB,EAAC;AAExB,MAAA,QAAQ,IAAA,CAAK,OAAO,WAAA;AAAa,QAC/B,KAAK,gBAAA;AACH,UAAA,IAAI,OAAO,mBAAmB,WAAA,EAAa;AACzC,YAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,cAAA,CAAe,QAAQ,CAAA,EAAA,EAAK;AAC9C,cAAA,MAAM,GAAA,GAAM,cAAA,CAAe,GAAA,CAAI,CAAC,CAAA;AAChC,cAAA,IAAI,GAAA,EAAK,UAAA,CAAW,IAAA,CAAK,MAAA,CAAO,SAAS,CAAA,EAAG;AAC1C,gBAAA,IAAA,CAAK,KAAK,GAAG,CAAA;AAAA,cACf;AAAA,YACF;AAAA,UACF;AACA,UAAA;AAAA,QAEF,KAAK,cAAA;AACH,UAAA,IAAI,OAAO,iBAAiB,WAAA,EAAa;AACvC,YAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,YAAA,CAAa,QAAQ,CAAA,EAAA,EAAK;AAC5C,cAAA,MAAM,GAAA,GAAM,YAAA,CAAa,GAAA,CAAI,CAAC,CAAA;AAC9B,cAAA,IAAI,GAAA,EAAK,UAAA,CAAW,IAAA,CAAK,MAAA,CAAO,SAAS,CAAA,EAAG;AAC1C,gBAAA,IAAA,CAAK,KAAK,GAAG,CAAA;AAAA,cACf;AAAA,YACF;AAAA,UACF;AACA,UAAA;AAAA,QAEF,KAAK,QAAA;AAEH,UAAA;AAAA;AAIJ,MAAA,IAAA,CAAK,QAAQ,CAAA,GAAA,KAAO;AAClB,QAAA,MAAM,gBAAgB,GAAA,CAAI,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,WAAW,EAAE,CAAA;AAC3D,QAAA,IAAA,CAAK,gBAAgB,aAAa,CAAA;AAAA,MACpC,CAAC,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA,CAAK,sCAAsC,KAAK,CAAA;AAAA,IAC1D;AAAA,EACF;AAAA,EAEQ,iBAAA,GAA0B;AAEhC,IAAA,IAAA,CAAK,eAAA,GAAkB,WAAA;AAAA,MACrB,MAAM;AACJ,QAAA,KAAK,KAAK,sBAAA,EAAuB;AAAA,MACnC,CAAA;AAAA,MACA,KAAK,EAAA,GAAK;AAAA,KACZ;AAAA,EACF;AAAA,EAEA,MAAc,sBAAA,GAAwC;AACpD,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,MAAM,kBAA4B,EAAC;AAEnC,IAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,OAAO,KAAK,IAAA,CAAK,QAAA,CAAS,SAAQ,EAAG;AACvD,MAAA,IAAI,GAAA,GAAM,QAAQ,SAAA,EAAW;AAC3B,QAAA,eAAA,CAAgB,KAAK,MAAM,CAAA;AAAA,MAC7B;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,UAAU,eAAA,EAAiB;AACpC,MAAA,MAAM,IAAA,CAAK,iBAAiB,MAAM,CAAA;AAAA,IACpC;AAEA,IAAA,IAAI,eAAA,CAAgB,SAAS,CAAA,EAAG;AAC9B,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,qBAAA,EAAiB,eAAA,CAAgB,MAAM,CAAA,iBAAA,CAAmB,CAAA;AAAA,IACxE;AAAA,EACF;AAAA,EAEA,MAAc,mBAAmB,KAAA,EAA8B;AAC7D,IAAA,IAAI;AAEF,MAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AAEjC,QAAA,MAAM,gBAAA,GAAmB,MAAA;AAEzB,QAAA,IAAI,iBAAiB,MAAA,EAAQ;AAE3B,UAAA,MAAME,UAAS,gBAAA,CAAiB,MAAA;AAEhC,UAAA,OAAO,IAAI,QAAc,CAAA,OAAA,KAAW;AAElC,YAAAA,QAAO,YAAA,CAAa;AAAA,cAClB,MAAA,EAAQ,KAAA;AAAA,cACR,IAAA,EAAM,WAAA;AAAA,cACN,SAAA,EAAW,CAAC,KAAK,CAAA;AAAA,cACjB,WAAW,MAAM;AACf,gBAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,oCAAA,EAAgC,KAAK,CAAA,CAAE,CAAA;AACnD,gBAAA,OAAA,EAAQ;AAAA,cACV,CAAA;AAAA,cACA,OAAA,EAAS,CAAC,KAAA,EAAgB,MAAA,KAAoB;AAC5C,gBAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,qBAAA,EAAwB,KAAK,CAAA,CAAA,CAAA,EAAK,MAAM,CAAA;AACrD,gBAAA,OAAA,EAAQ;AAAA,cACV;AAAA,aACD,CAAA;AAAA,UACH,CAAC,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA,CAAK,qCAAqC,KAAK,CAAA;AAAA,IACzD;AAAA,EACF;AAAA;AAAA,EAGQ,SAAA,CAAU,IAAA,EAAc,KAAA,EAAe,SAAA,EAAyB;AACtE,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AAErC,IAAA,MAAM,OAAA,GAAU,IAAI,IAAA,CAAK,SAAS,EAAE,WAAA,EAAY;AAChD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,CAAO,aAAA,IAAiB,EAAC;AAE9C,IAAA,IAAI,YAAA,GAAe,GAAG,IAAI,CAAA,CAAA,EAAI,mBAAmB,KAAK,CAAC,aAAa,OAAO,CAAA,CAAA;AAE3E,IAAA,IAAI,OAAA,CAAQ,MAAA,EAAQ,YAAA,IAAgB,CAAA,SAAA,EAAY,QAAQ,MAAM,CAAA,CAAA;AAC9D,IAAA,IAAI,OAAA,CAAQ,IAAA,EAAM,YAAA,IAAgB,CAAA,OAAA,EAAU,QAAQ,IAAI,CAAA,CAAA;AACxD,IAAA,IAAI,OAAA,CAAQ,QAAQ,YAAA,IAAgB,UAAA;AACpC,IAAA,IAAI,OAAA,CAAQ,QAAA,EAAU,YAAA,IAAgB,CAAA,WAAA,EAAc,QAAQ,QAAQ,CAAA,CAAA;AAEpE,IAAA,QAAA,CAAS,MAAA,GAAS,YAAA;AAAA,EACpB;AAAA,EAEQ,UAAU,IAAA,EAA6B;AAC7C,IAAA,IAAI,OAAO,QAAA,KAAa,WAAA,EAAa,OAAO,IAAA;AAE5C,IAAA,MAAM,SAAS,IAAA,GAAO,GAAA;AACtB,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA;AAEzC,IAAA,KAAA,IAAS,UAAU,OAAA,EAAS;AAC1B,MAAA,MAAA,GAAS,OAAO,IAAA,EAAK;AACrB,MAAA,IAAI,MAAA,CAAO,UAAA,CAAW,MAAM,CAAA,EAAG;AAC7B,QAAA,OAAO,kBAAA,CAAmB,MAAA,CAAO,SAAA,CAAU,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,MAC3D;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,aAAa,IAAA,EAAoB;AACvC,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AAErC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,CAAO,aAAA,IAAiB,EAAC;AAC9C,IAAA,IAAI,YAAA,GAAe,GAAG,IAAI,CAAA,wCAAA,CAAA;AAE1B,IAAA,IAAI,OAAA,CAAQ,MAAA,EAAQ,YAAA,IAAgB,CAAA,SAAA,EAAY,QAAQ,MAAM,CAAA,CAAA;AAC9D,IAAA,IAAI,OAAA,CAAQ,IAAA,EAAM,YAAA,IAAgB,CAAA,OAAA,EAAU,QAAQ,IAAI,CAAA,CAAA;AAExD,IAAA,QAAA,CAAS,MAAA,GAAS,YAAA;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,GAAgB;AACd,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,aAAA,CAAc,KAAK,eAAe,CAAA;AAClC,MAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AAAA,IACzB;AAAA,EACF;AACF;AAGO,IAAM,cAAA,GAAiB,IAAI,mBAAA;;;ACpclC,IAAA,qBAAA,EAAAF,MAAAA,EAAAC,GAAAA;AAgCA,qBAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,SAAA,GAAN,eAAwBA,GAAAA,GAAA,WAAA,EAAY;AAAA,EAChC,IAAA,GAAO,KAAA;AAAA,EACP,WAAA,GAAc,uEAAA;AAAA;AAAA,EAGvB,oBAAoB,MAAA,EAAsC;AACxD,IAAA,cAAA,CAAe,aAAa,MAAM,CAAA;AAAA,EACpC;AAAA;AAAA,EAGQ,gBAAA,uBAAuB,GAAA,EAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ3D,SAAS,aAAA,EAAsC;AAE7C,IAAA,OAAO,cAAA,CAAe,SAAS,aAAa,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAA,GAAoB;AAClB,IAAA,OAAO,eAAe,iBAAA,EAAkB;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB,UAAA,EAAmC;AAEnD,IAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,IAAI,KAAK,IAAA,CAAK,gBAAA,CAAiB,SAAQ,EAAG;AAC5D,MAAA,IAAI,IAAA,CAAK,UAAU,UAAA,IAAc,IAAA,CAAK,SAAS,UAAA,IAAc,MAAA,CAAO,QAAA,CAAS,UAAU,CAAA,EAAG;AACxF,QAAA,OAAO,MAAA;AAAA,MACT;AAAA,IACF;AAGA,IAAA,MAAM,QAAA,GAAW,eAAe,iBAAA,EAAkB;AAClD,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,IAAI,OAAA,CAAQ,aAAA,CAAc,QAAA,CAAS,UAAU,CAAA,EAAG;AAC9C,QAAA,OAAO,OAAA,CAAQ,aAAA;AAAA,MACjB;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAA,GAAkC;AACtC,IAAA,MAAM,eAAe,gBAAA,EAAiB;AACtC,IAAA,IAAA,CAAK,iBAAiB,KAAA,EAAM;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAA,GAAY,CACV,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,YAAA,EAAc,EAAC,EAAG,WAAW,OAAO,CAAA;AAAA,EACtD,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAA,GAAmB,CACjB,IAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,mBAAA,EAAqB,CAAC,IAAI,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACjE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAA,GAAsB,CACpB,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,uBAAA,EAAyB,EAAC,EAAG,WAAW,OAAO,CAAA;AAAA,EACjE,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAA,GAAU,CACR,IAAA,EACA,IAAA,EACA,MACA,KAAA,EACA,SAAA,EACA,SACA,YAAA,KACS;AACT,IAAA,MAAM,iBAAA,GAAmD,CAAC,KAAA,EAAO,QAAA,KAAa;AAC5E,MAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAEpB,MAAA,MAAM,cAAc,QAAA,CAAS,IAAA;AAE7B,MAAA,MAAM,aAAA,GAAgB,GAAG,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,IAAI,IAAI,KAAK,CAAA,CAAA;AAGtD,MAAA,MAAM,WAAA,GAA8B;AAAA,QAClC,IAAA;AAAA,QACA,IAAA;AAAA,QACA,IAAA;AAAA,QACA,KAAA;AAAA,QACA,YAAA,EAAc,EAAA;AAAA,QACd,WAAA,EAAa,EAAA;AAAA,QACb,aAAA,EAAe,EAAA;AAAA,QACf,WAAA,EAAa,EAAA;AAAA,QACb,UAAA,EAAY,EAAA;AAAA,QACZ,SAAA,EAAW,EAAA;AAAA,QACX,kBAAA,EAAoB,EAAA;AAAA,QACpB,aAAA,EAAe,EAAA;AAAA,QACf,QAAA,EAAU,EAAA;AAAA,QACV,gBAAA,EAAkB,EAAA;AAAA,QAClB,qBAAA,EAAuB,EAAA;AAAA,QACvB,mBAAA,EAAqB,EAAA;AAAA,QACrB,cAAA,EAAgB,EAAA;AAAA,QAChB,aAAA,EAAe,EAAA;AAAA,QACf,oBAAA,EAAsB,EAAA;AAAA,QACtB,sBAAA,EAAwB,EAAA;AAAA,QACxB,gBAAA,EAAkB,EAAA;AAAA,QAClB,mBAAA,EAAqB,EAAA;AAAA,QACrB,sBAAA,EAAwB,KAAA;AAAA,QACxB,wBAAA,EAA0B,KAAA;AAAA,QAC1B,yBAAA,EAA2B,KAAA;AAAA,QAC3B,4BAAA,EAA8B;AAAA,OAChC;AAEA,MAAA,IAAA,CAAK,gBAAA,CAAiB,GAAA,CAAI,aAAA,EAAe,WAAW,CAAA;AAGpD,MAAA,IAAI,YAAA,IAAgB,YAAA,GAAe,CAAA,IAAK,WAAA,CAAY,KAAA,EAAO;AACzD,QAAA,cAAA,CAAe,cAAA;AAAA,UACb,WAAA,CAAY,KAAA;AAAA,UACZ,aAAA;AAAA,UACA,WAAA;AAAA,UACA;AAAA;AAAA,SACF;AAEA,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,gCAAA,EAA4B,YAAY,CAAA,QAAA,EAAW,aAAa,CAAA,CAAE,CAAA;AAAA,MAChF;AAEA,MAAA,SAAA,CAAU,OAAO,QAAQ,CAAA;AAAA,IAC3B,CAAA;AAEA,IAAA,IAAA,CAAK,UAAA,CAAW,YAAY,CAAC,IAAA,EAAM,MAAM,IAAA,EAAM,KAAK,CAAA,EAAG,iBAAA,EAAmB,OAAO,CAAA;AAAA,EACnF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,GAAY,CACV,KAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,YAAA,EAAc,CAAC,KAAK,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC3D,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,GAAiB,CACf,KAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,iBAAA,EAAmB,CAAC,KAAK,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAChE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,GAAiB,CACf,KAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,iBAAA,EAAmB,CAAC,KAAK,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAChE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,GAAU,CACR,IAAA,EACA,IAAA,EACA,IAAA,EACA,KAAA,EACA,EAAA,EACA,cAAA,EACA,oBAAA,EACA,eAAA,EACA,iBAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,UAAA;AAAA,MACA;AAAA,QACE,IAAA;AAAA,QACA,IAAA;AAAA,QACA,IAAA;AAAA,QACA,KAAA;AAAA,QACA,EAAA;AAAA,QACA,cAAA;AAAA,QACA,oBAAA;AAAA,QACA,eAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAA,GAAmB,CACjB,IAAA,EACA,IAAA,EACA,IAAA,EACA,OACA,EAAA,EACA,QAAA,EACA,eAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,oBAAA;AAAA,MACA,CAAC,IAAA,EAAM,IAAA,EAAM,MAAM,KAAA,EAAO,EAAA,EAAI,UAAU,eAAe,CAAA;AAAA,MACvD,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,cAAA,GAAiB,IAAA,CAAK,mBAAA,CAA+C,YAAY,CAAA;AAAA;AAAA;AAAA;AAAA,EAKjF,qBAAA,GAAwB,IAAA,CAAK,mBAAA,CAA+C,mBAAmB,CAAA;AAAA;AAAA;AAAA;AAAA,EAK/F,wBAAA,GAA2B,IAAA,CAAK,mBAAA,CAAyC,uBAAuB,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUhG,eAAe,OACb,IAAA,EACA,IAAA,EACA,IAAA,EACA,OACA,YAAA,KACyB;AACzB,IAAA,OAAO,IAAI,OAAA,CAAqB,CAAC,OAAA,EAAS,MAAA,KAAW;AACnD,MAAA,IAAA,CAAK,OAAA;AAAA,QACH,IAAA;AAAA,QACA,IAAA;AAAA,QACA,IAAA;AAAA,QACA,KAAA;AAAA,QACA,CAAC,OAAO,QAAA,KAAa;AACnB,UAAA,IAAI,QAAA,CAAS,OAAA,IAAW,QAAA,CAAS,IAAA,EAAM;AACrC,YAAA,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,UACvB,CAAA,MAAO;AACL,YAAA,MAAA,CAAO,IAAI,KAAA,CAAM,QAAA,CAAS,MAAA,IAAU,eAAe,CAAC,CAAA;AAAA,UACtD;AAAA,QACF,CAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,GAAiB,IAAA,CAAK,mBAAA,CAAiD,YAAY,CAAA;AAAA;AAAA;AAAA;AAAA,EAKnF,mBAAA,GAAsB,IAAA,CAAK,mBAAA,CAAiD,iBAAiB,CAAA;AAAA;AAAA;AAAA;AAAA,EAK7F,mBAAA,GAAsB,IAAA,CAAK,mBAAA,CAAiD,iBAAiB,CAAA;AAAA;AAAA;AAAA;AAAA,EAK7F,YAAA,GAAe,IAAA,CAAK,mBAAA,CAGlB,UAAU,CAAA;AAAA;AAAA;AAAA;AAAA,EAKZ,qBAAA,GAAwB,IAAA,CAAK,mBAAA,CAG3B,oBAAoB,CAAA;AACxB,CAAA;AAjVOD,MAAAA,GAAA,gBAAA,CAAAC,GAAAA,CAAAA;AAAM,SAAA,GAAN,iBAAA,CAAAD,MAAAA,EAAA,CAAA,EAAA,WAAA,EADP,qBAAA,EACa,SAAA,CAAA;AAAN,iBAAA,CAAAA,QAAA,CAAA,EAAM,SAAA,CAAA;AAoVN,IAAM,SAAA,GAAY,IAAI,SAAA;;;ACrX7B,IAAA,wBAAA,EAAAA,MAAAA,EAAAC,GAAAA;AAkBA,wBAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,YAAA,GAAN,eAA2BA,GAAAA,GAAA,WAAA,EAAY;AAAA,EACnC,IAAA,GAAO,QAAA;AAAA,EACP,WAAA,GAAc,kEAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,mBAAA,GAAsB,CACpB,KAAA,EACA,OAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,wBAAA,EAA0B,CAAC,OAAO,OAAO,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAChF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,eAAA,GAAkB,CAChB,OAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,kBAAA,EAAoB,CAAC,OAAO,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACnE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,YAAA,GAAe,CACb,OAAA,EACA,OAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,eAAA,EAAiB,CAAC,SAAS,OAAO,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACzE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,aAAA,GAAgB,CACd,MAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,iBAAA,EAAmB,CAAC,MAAM,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACjE,CAAA;AACF,CAAA;AAjDOD,MAAAA,GAAA,gBAAA,CAAAC,GAAAA,CAAAA;AAAM,YAAA,GAAN,iBAAA,CAAAD,MAAAA,EAAA,CAAA,EAAA,cAAA,EADP,wBAAA,EACa,YAAA,CAAA;AAAN,iBAAA,CAAAA,QAAA,CAAA,EAAM,YAAA,CAAA;;;ACnBb,IAAA,uBAAA,EAAAA,OAAAA,EAAAC,IAAAA;AAgCA,uBAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,WAAA,GAAN,eAA0BA,IAAAA,GAAA,WAAA,EAAY;AAAA,EAClC,IAAA,GAAO,OAAA;AAAA,EACP,WAAA,GAAc,2CAAA;AAAA;AAAA,EAGf,SAAS,GAAA,EAAsB;AACrC,IAAA,IAAI;AAEF,MAAA,MAAM,aAAA,GAAgB,wBAAA;AACtB,MAAA,IAAI,CAAC,aAAA,CAAc,IAAA,CAAK,GAAG,GAAG,OAAO,KAAA;AAGrC,MAAA,MAAM,OAAA,GAAU,KAAK,GAAG,CAAA;AACxB,MAAA,MAAM,OAAA,GAAU,KAAK,OAAO,CAAA;AAC5B,MAAA,OAAO,OAAA,KAAY,GAAA;AAAA,IACrB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,mBAAA,GAAsB,CACpB,IAAA,EACA,KAAA,EACA,UAA8B,EAAC,EAC/B,WACA,OAAA,KACS;AACT,IAAA,MAAM;AAAA,MACJ,QAAA,GAAW,KAAA;AAAA;AAAA,MACX,UAAA,GAAa;AAAA;AAAA,KACf,GAAI,OAAA;AAGJ,IAAA,IAAI,MAAA,GAAS,IAAA;AACb,IAAA,IAAI,UAAA,IAAc,CAAC,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG;AACtC,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,KAAK,IAAI,CAAA;AAAA,MACpB,SAAS,MAAA,EAAQ;AAEf,QAAA,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,kBAAA,CAAmB,IAAI,CAAC,CAAC,CAAA;AAAA,MAClD;AAAA,IACF;AAGA,IAAA,IAAI,aAAA,GAAmC,EAAA;AACvC,IAAA,IAAI,OAAO,aAAa,SAAA,EAAW;AACjC,MAAA,aAAA,GAAgB,WAAW,KAAA,GAAQ,IAAA;AAAA,IACrC,CAAA,MAAO;AACL,MAAA,aAAA,GAAgB,QAAA;AAAA,IAClB;AAEA,IAAA,IAAA,CAAK,UAAA,CAAW,gBAAgB,CAAC,MAAA,EAAQ,OAAO,aAAa,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACpF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,CACZ,MAAA,EACA,OACA,QAAA,GAA8B,IAAA,EAC9B,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,gBAAgB,CAAC,MAAA,EAAQ,OAAO,QAAQ,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC/E,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,uBAAuB,CACrB,OAAA,EACA,YAAA,GAAe,EAAA,EACf,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,yBAAA,EAA2B,CAAC,SAAS,YAAY,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACxF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,4BAAA,GAA+B,CAC7B,IAAA,EACA,OAAA,EACA,eAAe,EAAA,EACf,UAAA,GAAa,IAAA,EACb,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAI,MAAA,GAAS,IAAA;AACb,IAAA,IAAI,UAAA,IAAc,CAAC,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG;AACtC,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,KAAK,IAAI,CAAA;AAAA,MACpB,SAAS,MAAA,EAAQ;AACf,QAAA,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,kBAAA,CAAmB,IAAI,CAAC,CAAC,CAAA;AAAA,MAClD;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,UAAA,CAAW,2BAA2B,CAAC,MAAA,EAAQ,SAAS,YAAY,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAChG,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,uBAAuB,CACrB,MAAA,EACA,SACA,YAAA,GAAe,EAAA,EACf,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,2BAA2B,CAAC,MAAA,EAAQ,SAAS,YAAY,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAChG,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,sBAAsB,CACpB,OAAA,EACA,cACA,WAAA,GAAc,EAAA,EACd,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,uBAAA;AAAA,MACA,CAAC,OAAA,EAAS,YAAA,EAAc,WAAW,CAAA;AAAA,MACnC,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,2BAAA,GAA8B,CAC5B,IAAA,EACA,OAAA,EACA,YAAA,EACA,cAAc,EAAA,EACd,UAAA,GAAa,IAAA,EACb,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAI,MAAA,GAAS,IAAA;AACb,IAAA,IAAI,UAAA,IAAc,CAAC,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG;AACtC,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,KAAK,IAAI,CAAA;AAAA,MACpB,SAAS,MAAA,EAAQ;AACf,QAAA,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,kBAAA,CAAmB,IAAI,CAAC,CAAC,CAAA;AAAA,MAClD;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,uBAAA;AAAA,MACA,CAAC,MAAA,EAAQ,OAAA,EAAS,YAAA,EAAc,WAAW,CAAA;AAAA,MAC3C,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAA,GAAsB,CACpB,MAAA,EACA,OAAA,EACA,cACA,WAAA,GAAc,EAAA,EACd,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,uBAAA;AAAA,MACA,CAAC,MAAA,EAAQ,OAAA,EAAS,YAAA,EAAc,WAAW,CAAA;AAAA,MAC3C,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,yBAAyB,CACvB,OAAA,EACA,YAAA,EACA,KAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,2BAAA;AAAA,MACA,CAAC,OAAA,EAAS,YAAA,EAAc,KAAK,CAAA;AAAA,MAC7B,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,yBAAyB,CACvB,MAAA,EACA,SACA,YAAA,EACA,KAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,2BAAA;AAAA,MACA,CAAC,MAAA,EAAQ,OAAA,EAAS,YAAA,EAAc,KAAK,CAAA;AAAA,MACrC,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,4BAA4B,CAC1B,OAAA,EACA,kBAAA,EACA,gBAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,8BAAA;AAAA,MACA,CAAC,OAAA,EAAS,kBAAA,EAAoB,gBAAgB,CAAA;AAAA,MAC9C,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAA,GAAsB,CACpB,OAAA,EACA,KAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,uBAAA,EAAyB,CAAC,SAAS,KAAK,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC/E,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,sBAAsB,CACpB,MAAA,EACA,OAAA,EACA,KAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,yBAAyB,CAAC,MAAA,EAAQ,SAAS,KAAK,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACvF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,mBAAmB,OACjB,IAAA,EACA,KAAA,EACA,OAAA,GAA8B,EAAC,KACJ;AAC3B,IAAA,OAAO,IAAI,OAAA,CAAuB,CAAC,OAAA,EAAS,MAAA,KAAW;AACrD,MAAA,IAAA,CAAK,mBAAA;AAAA,QACH,IAAA;AAAA,QACA,KAAA;AAAA,QACA,OAAA;AAAA,QACA,CAAC,QAAQ,QAAA,KAAa;AACpB,UAAA,IAAI,QAAA,CAAS,OAAA,IAAW,QAAA,CAAS,IAAA,EAAM;AACrC,YAAA,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,UACvB,CAAA,MAAO;AACL,YAAA,MAAA,CAAO,IAAI,KAAA,CAAM,QAAA,CAAS,MAAA,IAAU,eAAe,CAAC,CAAA;AAAA,UACtD;AAAA,QACF,CAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,sBAAA,GAAyB,IAAA,CAAK,mBAAA,CAG5B,cAAc,CAAA;AAAA;AAAA;AAAA;AAAA,EAKhB,4BAA4B,IAAA,CAAK,mBAAA;AAAA,IAC/B;AAAA,GACF;AAAA;AAAA;AAAA;AAAA,EAKA,4BAA4B,OAC1B,IAAA,EACA,SACA,YAAA,GAAe,EAAA,EACf,aAAa,IAAA,KACkB;AAC/B,IAAA,OAAO,IAAI,OAAA,CAA2B,CAAC,OAAA,EAAS,MAAA,KAAW;AACzD,MAAA,IAAA,CAAK,4BAAA;AAAA,QACH,IAAA;AAAA,QACA,OAAA;AAAA,QACA,YAAA;AAAA,QACA,UAAA;AAAA,QACA,CAAC,QAAQ,QAAA,KAAa;AACpB,UAAA,IAAI,QAAA,CAAS,OAAA,IAAW,QAAA,CAAS,IAAA,EAAM;AACrC,YAAA,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,UACvB,CAAA,MAAO;AACL,YAAA,MAAA,CAAO,IAAI,KAAA,CAAM,QAAA,CAAS,MAAA,IAAU,eAAe,CAAC,CAAA;AAAA,UACtD;AAAA,QACF,CAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,+BAAA,GAAkC,IAAA,CAAK,mBAAA,CAGrC,yBAAyB,CAAA;AAAA;AAAA;AAAA;AAAA,EAK3B,wBAAA,GAA2B,IAAA,CAAK,mBAAA,CAG9B,uBAAuB,CAAA;AAAA;AAAA;AAAA;AAAA,EAKzB,wBAAA,GAA2B,OACzB,IAAA,EACA,OAAA,EACA,cACA,WAAA,GAAc,EAAA,EACd,aAAa,IAAA,KACkC;AAC/C,IAAA,OAAO,IAAI,OAAA,CAA2C,CAAC,OAAA,EAAS,MAAA,KAAW;AACzE,MAAA,IAAA,CAAK,2BAAA;AAAA,QACH,IAAA;AAAA,QACA,OAAA;AAAA,QACA,YAAA;AAAA,QACA,WAAA;AAAA,QACA,UAAA;AAAA,QACA,CAAC,QAAQ,QAAA,KAAa;AACpB,UAAA,IAAI,QAAA,CAAS,OAAA,IAAW,QAAA,CAAS,IAAA,EAAM;AACrC,YAAA,OAAA,CAAQ,SAAS,IAAI,CAAA;AAAA,UACvB,CAAA,MAAO;AACL,YAAA,MAAA,CAAO,IAAI,KAAA,CAAM,QAAA,CAAS,MAAA,IAAU,eAAe,CAAC,CAAA;AAAA,UACtD;AAAA,QACF,CAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,8BAAA,GAAiC,IAAA,CAAK,mBAAA,CAGpC,uBAAuB,CAAA;AAAA;AAAA;AAAA;AAAA,EAKzB,8BAAA,GAAiC,IAAA,CAAK,mBAAA,CAGpC,8BAA8B,CAAA;AAClC,CAAA;AAjZOD,OAAAA,GAAA,gBAAA,CAAAC,IAAAA,CAAAA;AAAM,WAAA,GAAN,iBAAA,CAAAD,OAAAA,EAAA,CAAA,EAAA,aAAA,EADP,uBAAA,EACa,WAAA,CAAA;AAAN,iBAAA,CAAAA,SAAA,CAAA,EAAM,WAAA,CAAA;AAoZN,IAAM,WAAA,GAAc,IAAI,WAAA;;;ACrb/B,IAAA,qBAAA,EAAAA,OAAAA,EAAAC,IAAAA;AAMA,qBAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,SAAA,GAAN,eAAwBA,IAAAA,GAAA,WAAA,EAAY;AAAA,EAChC,IAAA,GAAO,KAAA;AAAA,EACP,WAAA,GAAc,wDAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,cAAA,GAAiB,CACf,OAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,kBAAA,EAAoB,CAAC,OAAO,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACnE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,GAAiB,CACf,QAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,kBAAA,EAAoB,CAAC,QAAQ,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACpE,CAAA;AACF,CAAA;AAzBOD,OAAAA,GAAA,gBAAA,CAAAC,IAAAA,CAAAA;AAAM,SAAA,GAAN,iBAAA,CAAAD,OAAAA,EAAA,CAAA,EAAA,WAAA,EADP,qBAAA,EACa,SAAA,CAAA;AAAN,iBAAA,CAAAA,SAAA,CAAA,EAAM,SAAA,CAAA;;;ACPb,IAAA,+BAAA,EAAAA,OAAAA,EAAAC,IAAAA;AAMA,+BAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,mBAAA,GAAN,eAAkCA,IAAAA,GAAA,WAAA,EAAY;AAAA,EAC1C,IAAA,GAAO,gBAAA;AAAA,EACP,WAAA,GAAc,0CAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,cAAA,GAAiB,CAAC,SAAA,EAAsC,OAAA,KAAiC;AACvF,IAAA,IAAA,CAAK,UAAA,CAAW,iBAAA,EAAmB,EAAC,EAAG,WAAW,OAAO,CAAA;AAAA,EAC3D,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,mBAAA,GAAwC;AAC5C,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,IAAA,CAAK,cAAA;AAAA,QACH,CAAC,OAAO,IAAA,KAAS;AACf,UAAA,IAAI,KAAK,OAAA,EAAS;AAChB,YAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,UACd,CAAA,MAAO;AACL,YAAA,MAAA,CAAO,IAAI,KAAA,CAAM,IAAA,CAAK,MAAA,IAAU,eAAe,CAAC,CAAA;AAAA,UAClD;AAAA,QACF,CAAA;AAAA,QACA,WAAS,MAAA,CAAO,IAAI,MAAM,MAAA,CAAO,KAAK,CAAC,CAAC;AAAA,OAC1C;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AACF,CAAA;AA9BOD,OAAAA,GAAA,gBAAA,CAAAC,IAAAA,CAAAA;AAAM,mBAAA,GAAN,iBAAA,CAAAD,OAAAA,EAAA,CAAA,EAAA,qBAAA,EADP,+BAAA,EACa,mBAAA,CAAA;AAAN,iBAAA,CAAAA,SAAA,CAAA,EAAM,mBAAA,CAAA;;;ACPb,IAAA,4BAAA,EAAAA,OAAAA,EAAAC,IAAAA;AAMA,4BAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,gBAAA,GAAN,eAA+BA,IAAAA,GAAA,WAAA,EAAY;AAAA,EACvC,IAAA,GAAO,YAAA;AAAA,EACP,WAAA,GAAc,sCAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,cAAA,GAAiB,CACf,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,iBAAA,EAAmB,EAAC,EAAG,WAAW,OAAO,CAAA;AAAA,EAC3D,CAAA;AACF,CAAA;AAbOD,OAAAA,GAAA,gBAAA,CAAAC,IAAAA,CAAAA;AAAM,gBAAA,GAAN,iBAAA,CAAAD,OAAAA,EAAA,CAAA,EAAA,kBAAA,EADP,4BAAA,EACa,gBAAA,CAAA;AAAN,iBAAA,CAAAA,SAAA,CAAA,EAAM,gBAAA,CAAA;;;ACPb,IAAA,2BAAA,EAAAA,OAAAA,EAAAC,IAAAA;AAcA,2BAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,eAAA,GAAN,eAA8BA,IAAAA,GAAA,WAAA,EAAY;AAAA,EACtC,IAAA,GAAO,WAAA;AAAA,EACP,WAAA,GAAc,0CAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,+BAAA,GAAkC,CAChC,IAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,sCAAA,EAAwC,CAAC,IAAI,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACpF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,6BAAA,GAAgC,CAC9B,SAAA,EACA,MAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,mCAAA,EAAqC,CAAC,WAAW,MAAM,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC9F,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,wBAAA,GAA2B,CACzB,IAAA,EACA,MAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,8BAAA,EAAgC,CAAC,MAAM,MAAM,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACpF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,qBAAA,GAAwB,CACtB,KAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,0BAAA,EAA4B,CAAC,KAAK,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACzE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,oCAAA,GAAuC,CACrC,SAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,2CAAA,EAA6C,CAAC,SAAS,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC9F,CAAA;AACF,CAAA;AA5DOD,OAAAA,GAAA,gBAAA,CAAAC,IAAAA,CAAAA;AAAM,eAAA,GAAN,iBAAA,CAAAD,OAAAA,EAAA,CAAA,EAAA,iBAAA,EADP,2BAAA,EACa,eAAA,CAAA;AAAN,iBAAA,CAAAA,SAAA,CAAA,EAAM,eAAA,CAAA;;;ACfb,IAAA,wBAAA,EAAAA,OAAAA,EAAAC,IAAAA;AAMA,wBAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,YAAA,GAAN,eAA2BA,IAAAA,GAAA,WAAA,EAAY;AAAA,EACnC,IAAA,GAAO,QAAA;AAAA,EACP,WAAA,GAAc,gEAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,eAAe,CACb,UAAA,EACA,UAAA,EACA,KAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,iBAAiB,CAAC,UAAA,EAAY,YAAY,KAAK,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACtF,CAAA;AAAA;AAAA,EAGA,MAAM,iBAAA,CAAkB,UAAA,EAAoB,UAAA,EAAoB,KAAA,EAAiC;AAC/F,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,IAAA,CAAK,YAAA;AAAA,QACH,UAAA;AAAA,QACA,UAAA;AAAA,QACA,KAAA;AAAA,QACA,CAAC,OAAO,IAAA,KAAS;AACf,UAAA,IAAI,KAAK,OAAA,EAAS;AAChB,YAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,UACd,CAAA,MAAO;AACL,YAAA,MAAA,CAAO,IAAI,KAAA,CAAM,IAAA,CAAK,MAAA,IAAU,eAAe,CAAC,CAAA;AAAA,UAClD;AAAA,QACF,CAAA;AAAA,QACA,WAAS,MAAA,CAAO,IAAI,MAAM,MAAA,CAAO,KAAK,CAAC,CAAC;AAAA,OAC1C;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AACF,CAAA;AAnCOD,OAAAA,GAAA,gBAAA,CAAAC,IAAAA,CAAAA;AAAM,YAAA,GAAN,iBAAA,CAAAD,OAAAA,EAAA,CAAA,EAAA,cAAA,EADP,wBAAA,EACa,YAAA,CAAA;AAAN,iBAAA,CAAAA,SAAA,CAAA,EAAM,YAAA,CAAA;;;ACPb,IAAA,sBAAA,EAAAA,OAAAA,EAAAC,IAAAA;AAMA,sBAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,UAAA,GAAN,eAAyBA,IAAAA,GAAA,WAAA,EAAY;AAAA,EACjC,IAAA,GAAO,MAAA;AAAA,EACP,WAAA,GAAc,4CAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,iBAAA,GAAoB,CAClB,WAAA,EACA,UAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,oBAAA,EAAsB,CAAC,aAAa,UAAU,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACrF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAA,GAAsB,CACpB,KAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,uBAAA,EAAyB,CAAC,KAAK,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACtE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAA,GAAqB,CACnB,WAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,sBAAA,EAAwB,CAAC,WAAW,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC3E,CAAA;AACF,CAAA;AArCOD,OAAAA,GAAA,gBAAA,CAAAC,IAAAA,CAAAA;AAAM,UAAA,GAAN,iBAAA,CAAAD,OAAAA,EAAA,CAAA,EAAA,YAAA,EADP,sBAAA,EACa,UAAA,CAAA;AAAN,iBAAA,CAAAA,SAAA,CAAA,EAAM,UAAA,CAAA;;;ACPb,IAAA,sBAAA,EAAAA,OAAAA,EAAAC,IAAAA;AAYA,sBAAA,GAAA,CAAC,cAAA,CAAA;AACM,IAAM,UAAA,GAAN,eAAyBA,IAAAA,GAAA,WAAA,EAAY;AAAA,EACjC,IAAA,GAAO,MAAA;AAAA,EACP,WAAA,GAAc,gDAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,SAAA,GAAY,CACV,KAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,YAAA,EAAc,CAAC,KAAK,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EAC3D,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,GAAiB,CACf,IAAA,EACA,IAAA,EACA,MACA,WAAA,EACA,WAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,iBAAA;AAAA,MACA,CAAC,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,aAAa,WAAW,CAAA;AAAA,MAC3C,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,GAAY,CACV,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,YAAA,EAAc,EAAC,EAAG,WAAW,OAAO,CAAA;AAAA,EACtD,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAA,GAAmB,CACjB,IAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,WAAW,mBAAA,EAAqB,CAAC,IAAI,CAAA,EAAG,WAAW,OAAO,CAAA;AAAA,EACjE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB,CACf,IAAA,EACA,MACA,IAAA,EACA,QAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,mBAAmB,CAAC,IAAA,EAAM,MAAM,IAAA,EAAM,QAAQ,CAAA,EAAG,SAAA,EAAW,OAAO,CAAA;AAAA,EACrF,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAA,GAAsB,CACpB,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,uBAAA,EAAyB,EAAC,EAAG,WAAW,OAAO,CAAA;AAAA,EACjE,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,CACR,IAAA,EACA,MACA,IAAA,EACA,KAAA,EACA,WACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA,CAAW,YAAY,CAAC,IAAA,EAAM,MAAM,IAAA,EAAM,KAAK,CAAA,EAAG,SAAA,EAAW,OAAO,CAAA;AAAA,EAC3E,CAAA;AAAA;AAAA;AAAA;AAAA,EAKA,QAAA,GAAW,CACT,IAAA,EACA,IAAA,EACA,MACA,QAAA,EACA,KAAA,EACA,YAAA,EACA,SAAA,EACA,OAAA,KACS;AACT,IAAA,IAAA,CAAK,UAAA;AAAA,MACH,WAAA;AAAA,MACA,CAAC,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,QAAA,EAAU,OAAO,YAAY,CAAA;AAAA,MAChD,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA;AACF,CAAA;AAlHOD,OAAAA,GAAA,gBAAA,CAAAC,IAAAA,CAAAA;AAAM,UAAA,GAAN,iBAAA,CAAAD,OAAAA,EAAA,CAAA,EAAA,YAAA,EADP,sBAAA,EACa,UAAA,CAAA;AAAN,iBAAA,CAAAA,SAAA,CAAA,EAAM,UAAA,CAAA;;;ACqDN,IAAM,WAAN,MAAe;AAAA;AAAA,EAEJ,MAAA,GAAS,cAAA;AAAA;AAAA,EAGT,MAAA,GAAS,qBAAA;AAAA;AAAA,EAGT,OAAA,GAAU,aAAA;AAAA;AAAA,EAGV,GAAA,GAAM,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA;AAAA,EAC7B,KAAA,GAAQ,aAAA,CAAc,GAAA,CAAI,OAAO,CAAA;AAAA,EACjC,IAAA,GAAO,aAAA,CAAc,GAAA,CAAI,MAAM,CAAA;AAAA,EAC/B,UAAA,GAAa,aAAA,CAAc,GAAA,CAAI,YAAY,CAAA;AAAA,EAC3C,aAAA,GAAgB,aAAA,CAAc,GAAA,CAAI,gBAAgB,CAAA;AAAA,EAClD,MAAA,GAAS,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAA;AAAA,EACnC,OAAA,GAAU,aAAA,CAAc,GAAA,CAAI,SAAS,CAAA;AAAA,EACrC,IAAA,GAAO,aAAA,CAAc,GAAA,CAAI,MAAM,CAAA;AAAA,EAC/B,MAAA,GAAS,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAA;AAAA,EACnC,GAAA,GAAM,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA;AAAA,EAC7B,MAAA,GAAS,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAA;AAAA,EACnC,MAAA,GAAS,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAA;AAAA,EACnC,UAAA,GAAa,aAAA,CAAc,GAAA,CAAI,YAAY,CAAA;AAAA,EAC3C,GAAA,GAAM,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA;AAAA,EAC7B,MAAA,GAAS,aAAA,CAAc,GAAA,CAAI,QAAQ,CAAA;AAAA,EACnC,SAAA,GAAY,aAAA,CAAc,GAAA,CAAI,WAAW,CAAA;AAAA,EACzC,IAAA,GAAO,aAAA,CAAc,GAAA,CAAI,MAAM,CAAA;AAAA;AAAA;AAAA;AAAA,EAK/C,MAAM,UAAA,GAAwD;AAC5D,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,IAAA,CAAK,MAAA,CAAO,YAAA;AAAA,QACV,CAAC,KAAA,EAAO,KAAA,KAAU,QAAQ,EAAE,KAAA,EAAO,OAAO,CAAA;AAAA,QAC1C,CAAC,OAAO,MAAA,KAAW,MAAA,CAAO,IAAI,KAAA,CAAM,MAAA,IAAU,sBAAsB,CAAC;AAAA,OACvE;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,GAAgC;AACpC,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,IAAA,CAAK,MAAA,CAAO,cAAA;AAAA,QACV,MAAM,OAAA,EAAQ;AAAA,QACd,CAAC,OAAO,MAAA,KAAW,MAAA,CAAO,IAAI,KAAA,CAAM,MAAA,IAAU,6BAA6B,CAAC;AAAA,OAC9E;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAA,GAAsC;AAC1C,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,IAAA,CAAK,MAAA,CAAO,iBAAA;AAAA,QACV,CAAA,SAAA,KAAa,QAAQ,SAAS,CAAA;AAAA,QAC9B,CAAC,OAAO,MAAA,KAAW,MAAA,CAAO,IAAI,KAAA,CAAM,MAAA,IAAU,sBAAsB,CAAC;AAAA,OACvE;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAA,GAAwD;AAC5D,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,IAAA,CAAK,MAAA,CAAO,OAAA;AAAA,QACV,CAAC,OAAO,IAAA,KAA0B;AAChC,UAAA,IAAI,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,KAAA,IAAS,KAAK,KAAA,EAAO;AAC5C,YAAA,OAAA,CAAQ,EAAE,KAAA,EAAO,IAAA,CAAK,OAAO,KAAA,EAAO,IAAA,CAAK,OAAO,CAAA;AAAA,UAClD,CAAA,MAAO;AACL,YAAA,MAAA,CAAO,IAAI,KAAA,CAAM,IAAA,CAAK,MAAA,IAAU,uBAAuB,CAAC,CAAA;AAAA,UAC1D;AAAA,QACF,CAAA;AAAA,QACA,CAAA,KAAA,KAAS,OAAO,IAAI,KAAA,CAAM,OAAO,KAAK,CAAA,IAAK,sBAAsB,CAAC;AAAA,OACpE;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAA,GAA8B;AAClC,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,IAAA,CAAK,MAAA,CAAO,MAAA;AAAA,QACV,CAAC,OAAO,IAAA,KAAsB;AAC5B,UAAA,IAAI,KAAK,OAAA,EAAS;AAChB,YAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,UACd,CAAA,MAAO;AACL,YAAA,MAAA,CAAO,IAAI,KAAA,CAAM,IAAA,CAAK,MAAA,IAAU,iCAAiC,CAAC,CAAA;AAAA,UACpE;AAAA,QACF,CAAA;AAAA,QACA,CAAA,KAAA,KAAS,OAAO,IAAI,KAAA,CAAM,OAAO,KAAK,CAAA,IAAK,kCAAkC,CAAC;AAAA,OAChF;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAa,YAAA,EAAuC;AACxD,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,MAAA,IAAA,CAAK,MAAA,CAAO,MAAA;AAAA,QACV,YAAA;AAAA,QACA,CAAC,OAAO,IAAA,KAAsB;AAC5B,UAAA,IAAI,KAAK,OAAA,EAAS;AAChB,YAAA,OAAA,EAAQ;AAAA,UACV,CAAA,MAAO;AACL,YAAA,MAAA,CAAO,IAAI,KAAA,CAAM,IAAA,CAAK,MAAA,IAAU,0BAA0B,CAAC,CAAA;AAAA,UAC7D;AAAA,QACF,CAAA;AAAA,QACA,CAAA,KAAA,KAAS,OAAO,IAAI,KAAA,CAAM,OAAO,KAAK,CAAA,IAAK,uBAAuB,CAAC;AAAA,OACrE;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAA,GAAgC;AAC9B,IAAA,OAAO,KAAK,OAAA,CAAQ,MAAA,GAAS,GAAA,CAAI,CAAA,MAAA,KAAU,OAAO,IAAI,CAAA;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,IAAA,EAAuB;AAC/B,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,UAAiC,IAAA,EAA6B;AAC5D,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAO,IAAI,CAAA;AAAA,EACjC;AACF;AAGO,IAAM,QAAA,GAAW,IAAI,QAAA,EAAS;AAGrC,IAAO,iBAAA,GAAQ;;;AC7LR,SAAS,kBAAA,GAA2B;AAEzC,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,IAAA,MAAM,GAAA,GAAM,MAAA;AAGZ,IAAA,GAAA,CAAI,MAAA,GAAS,cAAA;AACb,IAAA,GAAA,CAAI,WAAA,GAAc,qBAAA;AAGlB,IAAA,GAAA,CAAI,MAAA,GAAS,cAAA;AAGb,IAAA,GAAA,CAAI,QAAA,GAAW,QAAA;AAGf,IACE,OAAO,OAAA,KAAY,WAAA,IACnB,OAAO,OAAA,CAAQ,QAAA,KAAa,QAAA,IAC5B,OAAA,CAAQ,OAAA,CAAQ,QAAA,CAAS,IAAI;AA+B/B,EACF;AACF;AAGA,kBAAA,EAAmB","file":"index.cjs","sourcesContent":["// Browser polyfill for process object\r\n// Bu fayl browser environmentda process obyektini safely handle qiladi\r\n\r\nif (typeof globalThis !== 'undefined' && typeof globalThis.process === 'undefined') {\r\n globalThis.process = {\r\n env: {\r\n NODE_ENV: 'production'\r\n },\r\n versions: {\r\n node: null\r\n }\r\n };\r\n}\r\n","// Type declarations for browser environment\ninterface WindowLocation {\n protocol: string;\n}\n\ninterface BrowserWindow {\n location: WindowLocation;\n WebSocket: typeof WebSocket;\n}\n\ninterface EIMZOEXTType {\n URL: string;\n callFunction: (\n funcDef: any,\n callback: (event: MessageEvent, data: any) => void,\n error?: (errorCode?: any) => void\n ) => void;\n version: (\n callback: (event: MessageEvent, data: any) => void,\n error?: (errorCode?: any) => void\n ) => void;\n apidoc: (\n callback: (event: MessageEvent, data: any) => void,\n error?: (errorCode?: any) => void\n ) => void;\n apikey: (\n domainAndKey: any,\n callback: (event: MessageEvent, data: any) => void,\n error?: (errorCode?: any) => void\n ) => void;\n}\n\n// Browser globals\ndeclare const window: BrowserWindow;\ndeclare const EIMZOEXT: EIMZOEXTType | undefined;\n\nconst CAPIWS: EIMZOEXTType =\n typeof EIMZOEXT !== 'undefined'\n ? EIMZOEXT\n : {\n URL:\n (window.location.protocol.toLowerCase() === 'https:'\n ? 'wss://127.0.0.1:64443'\n : 'ws://127.0.0.1:64646') + '/service/cryptapi',\n callFunction: function (\n funcDef: any,\n callback: (event: MessageEvent, data: any) => void,\n error?: (errorCode?: any) => void\n ): void {\n if (!window.WebSocket) {\n if (error) error();\n return;\n }\n let socket: WebSocket;\n try {\n socket = new WebSocket(this.URL);\n } catch (e) {\n if (error) error(e);\n return;\n }\n socket.onclose = function (e: CloseEvent): void {\n if (error) {\n if (e.code !== 1000) {\n error(e.code);\n }\n }\n };\n socket.onmessage = function (event: MessageEvent): void {\n const data = JSON.parse(event.data);\n socket.close();\n callback(event, data);\n };\n socket.onopen = function (): void {\n socket.send(JSON.stringify(funcDef));\n };\n },\n version: function (\n callback: (event: MessageEvent, data: any) => void,\n error?: (errorCode?: any) => void\n ): void {\n if (!window.WebSocket) {\n if (error) error();\n return;\n }\n let socket: WebSocket;\n try {\n socket = new WebSocket(this.URL);\n } catch (e) {\n if (error) error(e);\n return;\n }\n socket.onclose = function (e: CloseEvent): void {\n if (error) {\n if (e.code !== 1000) {\n error(e.code);\n }\n }\n };\n socket.onmessage = function (event: MessageEvent): void {\n const data = JSON.parse(event.data);\n socket.close();\n callback(event, data);\n };\n socket.onopen = function (): void {\n const o = { name: 'version' };\n socket.send(JSON.stringify(o));\n };\n },\n apidoc: function (\n callback: (event: MessageEvent, data: any) => void,\n error?: (errorCode?: any) => void\n ): void {\n if (!window.WebSocket) {\n if (error) error();\n return;\n }\n let socket: WebSocket;\n try {\n socket = new WebSocket(this.URL);\n } catch (e) {\n if (error) error(e);\n return;\n }\n socket.onclose = function (e: CloseEvent): void {\n if (error) {\n if (e.code !== 1000) {\n error(e.code);\n }\n }\n };\n socket.onmessage = function (event: MessageEvent): void {\n const data = JSON.parse(event.data);\n socket.close();\n callback(event, data);\n };\n socket.onopen = function (): void {\n const o = { name: 'apidoc' };\n socket.send(JSON.stringify(o));\n };\n },\n apikey: function (\n domainAndKey: any,\n callback: (event: MessageEvent, data: any) => void,\n error?: (errorCode?: any) => void\n ): void {\n if (!window.WebSocket) {\n if (error) error();\n return;\n }\n let socket: WebSocket;\n try {\n socket = new WebSocket(this.URL);\n } catch (e) {\n if (error) error(e);\n return;\n }\n socket.onclose = function (e: CloseEvent): void {\n if (error) {\n if (e.code !== 1000) {\n error(e.code);\n }\n }\n };\n socket.onmessage = function (event: MessageEvent): void {\n const data = JSON.parse(event.data);\n socket.close();\n callback(event, data);\n };\n socket.onopen = function (): void {\n const o = { name: 'apikey', arguments: domainAndKey };\n socket.send(JSON.stringify(o));\n };\n }\n };\n\nexport default CAPIWS;\nexport type { EIMZOEXTType };\n","// Type definitions for E-IMZO Client\nimport CAPIWS from './e-imzo/capiws';\n\n// Extend Date interface to include custom methods\ndeclare global {\n interface Date {\n yyyymmdd(): string;\n ddmmyyyy(): string;\n }\n\n interface String {\n splitKeep(splitter: string | RegExp, ahead?: boolean): string[];\n }\n}\n\n// Date prototype extensions\nDate.prototype.yyyymmdd = function (): string {\n const yyyy = this.getFullYear().toString();\n const mm = (this.getMonth() + 1).toString(); // getMonth() is zero-based\n const dd = this.getDate().toString();\n return yyyy + (mm[1] ? mm : '0' + mm[0]) + (dd[1] ? dd : '0' + dd[0]); // padding\n};\n\nDate.prototype.ddmmyyyy = function (): string {\n const yyyy = this.getFullYear().toString();\n const mm = (this.getMonth() + 1).toString(); // getMonth() is zero-based\n const dd = this.getDate().toString();\n return (dd[1] ? dd : '0' + dd[0]) + '.' + (mm[1] ? mm : '0' + mm[0]) + '.' + yyyy; // padding\n};\n\n// Type definitions\ninterface DateConvertible {\n year?: number;\n month?: number;\n date?: number;\n}\n\ninterface DatesUtility {\n convert(d: Date | number[] | number | string | DateConvertible): Date | number;\n compare(\n a: Date | number[] | number | string | DateConvertible,\n b: Date | number[] | number | string | DateConvertible\n ): number;\n inRange(\n d: Date | number[] | number | string | DateConvertible,\n start: Date | number[] | number | string | DateConvertible,\n end: Date | number[] | number | string | DateConvertible\n ): boolean | number;\n}\n\ninterface CertificateInfo {\n disk?: string;\n path?: string;\n name?: string;\n alias?: string;\n cardUID?: string;\n statusInfo?: string;\n ownerName?: string;\n info?: string;\n serialNumber: string;\n validFrom: Date;\n validTo: Date;\n CN: string;\n TIN: string;\n UID: string;\n PINFL: string;\n O: string;\n T: string;\n type: 'pfx' | 'ftjc';\n}\n\ninterface ErrorInfo {\n e?: unknown;\n r?: string;\n}\n\ntype FailCallback = (error: unknown, reason: string | null) => void;\n\ntype ItemIdGenerator = (vo: CertificateInfo, rec: string) => string;\n\ntype ItemUiGenerator = (key: string, vo: CertificateInfo) => unknown;\n\ninterface ApiResponse {\n success: boolean;\n reason?: string;\n major?: string;\n minor?: string;\n keyId?: string;\n pkcs7_64?: string;\n readers?: unknown[];\n certificates?: Record<\n string,\n {\n disk: string;\n path: string;\n name: string;\n alias: string;\n }\n >;\n tokens?: Record<\n string,\n {\n cardUID: string;\n statusInfo: string;\n ownerName: string;\n info: string;\n }\n >;\n}\n\ninterface EIMZOClientType {\n NEW_API: boolean;\n NEW_API2: boolean;\n API_KEYS: string[];\n checkVersion(success: (major: string, minor: string) => void, fail: FailCallback): void;\n installApiKeys(success: () => void, fail: FailCallback): void;\n listAllUserKeys(\n itemIdGen: ItemIdGenerator,\n itemUiGen: ItemUiGenerator,\n success: (items: unknown[], firstId: string | null) => void,\n fail: FailCallback\n ): void;\n idCardIsPLuggedIn(success: (isPlugged: boolean) => void, fail: FailCallback): void;\n loadKey(\n itemObject: CertificateInfo,\n success: (id: string) => void,\n fail: FailCallback,\n verifyPassword?: boolean\n ): void;\n changeKeyPassword(itemObject: CertificateInfo, success: () => void, fail: FailCallback): void;\n createPkcs7(\n id: string,\n data: string,\n timestamper: unknown,\n success: (pkcs7: string) => void,\n fail: FailCallback,\n detached?: boolean,\n isDataBase64Encoded?: boolean\n ): void;\n _getX500Val(s: string, f: string): string;\n _findPfxs2(\n itemIdGen: ItemIdGenerator,\n itemUiGen: ItemUiGenerator,\n items: unknown[],\n errors: ErrorInfo[],\n callback: (firstItemId?: string) => void\n ): void;\n _findTokens2(\n itemIdGen: ItemIdGenerator,\n itemUiGen: ItemUiGenerator,\n items: unknown[],\n errors: ErrorInfo[],\n callback: (firstItemId?: string) => void\n ): void;\n}\n\n// Dates utility object\nconst dates: DatesUtility = {\n convert(d: Date | number[] | number | string | DateConvertible): Date | number {\n // Converts the date in d to a date-object. The input can be:\n // a date object: returned without modification\n // an array : Interpreted as [year,month,day]. NOTE: month is 0-11.\n // a number : Interpreted as number of milliseconds\n // since 1 Jan 1970 (a timestamp)\n // a string : Any format supported by the javascript engine, like\n // \"YYYY/MM/DD\", \"MM/DD/YYYY\", \"Jan 31 2009\" etc.\n // an object : Interpreted as an object with year, month and date\n // attributes. **NOTE** month is 0-11.\n if (d instanceof Date) {\n return d;\n } else if (Array.isArray(d) && d.length >= 3) {\n return new Date(d[0] || 0, d[1] || 0, d[2] || 0);\n } else if (typeof d === 'number') {\n return new Date(d);\n } else if (typeof d === 'string') {\n return new Date(d);\n } else if (typeof d === 'object' && d !== null) {\n const dateObj = d as DateConvertible;\n return new Date(dateObj.year || 0, dateObj.month || 0, dateObj.date || 0);\n }\n return NaN;\n },\n\n compare(\n a: Date | number[] | number | string | DateConvertible,\n b: Date | number[] | number | string | DateConvertible\n ): number {\n // Compare two dates (could be of any type supported by the convert\n // function above) and returns:\n // -1 : if a < b\n // 0 : if a = b\n // 1 : if a > b\n // NaN : if a or b is an illegal date\n // NOTE: The code inside isFinite does an assignment (=).\n const aVal = this.convert(a).valueOf();\n const bVal = this.convert(b).valueOf();\n return isFinite(aVal) && isFinite(bVal) ? (aVal > bVal ? 1 : 0) - (aVal < bVal ? 1 : 0) : NaN;\n },\n\n inRange(\n d: Date | number[] | number | string | DateConvertible,\n start: Date | number[] | number | string | DateConvertible,\n end: Date | number[] | number | string | DateConvertible\n ): boolean | number {\n // Checks if date in d is between dates in start and end.\n // Returns a boolean or NaN:\n // true : if d is between start and end (inclusive)\n // false : if d is before start or after end\n // NaN : if one or more of the dates is illegal.\n // NOTE: The code inside isFinite does an assignment (=).\n const dVal = this.convert(d).valueOf();\n const startVal = this.convert(start).valueOf();\n const endVal = this.convert(end).valueOf();\n return isFinite(dVal) && isFinite(startVal) && isFinite(endVal)\n ? startVal <= dVal && dVal <= endVal\n : NaN;\n }\n};\n\n// String prototype extension\nString.prototype.splitKeep = function (splitter: string | RegExp, ahead?: boolean): string[] {\n const result: string[] = [];\n\n if (splitter !== '') {\n // Substitution of matched string\n function getSubst(value: string): string {\n const substChar = value[0] === '0' ? '1' : '0';\n let subst = '';\n for (let i = 0; i < value.length; i++) {\n subst += substChar;\n }\n return subst;\n }\n\n const matches: Array<{ value: string; index: number }> = [];\n\n // Getting matched value and its index\n if (splitter instanceof RegExp) {\n this.replace(splitter, (m: string, ...args: unknown[]) => {\n const offset = args[args.length - 2] as number;\n matches.push({ value: m, index: offset });\n return getSubst(m);\n });\n } else {\n this.replaceAll(splitter, (m: string, offset: number) => {\n matches.push({ value: m, index: offset });\n return getSubst(m);\n });\n }\n\n // Finds split substrings\n let lastIndex = 0;\n for (let i = 0; i < matches.length; i++) {\n const m = matches[i];\n if (m) {\n const nextIndex = ahead === true ? m.index : m.index + m.value.length;\n if (nextIndex !== lastIndex) {\n const part = this.substring(lastIndex, nextIndex);\n result.push(part);\n lastIndex = nextIndex;\n }\n }\n }\n if (lastIndex < this.length) {\n const part = this.substring(lastIndex, this.length);\n result.push(part);\n }\n } else {\n result.push(this.toString());\n }\n return result;\n};\n\n// E-IMZO Client implementation\nconst EIMZOClient: EIMZOClientType = {\n NEW_API: false,\n NEW_API2: false,\n API_KEYS: [\n 'localhost',\n '96D0C1491615C82B9A54D9989779DF825B690748224C2B04F500F370D51827CE2644D8D4A82C18184D73AB8530BB8ED537269603F61DB0D03D2104ABF789970B',\n '127.0.0.1',\n 'A7BCFA5D490B351BE0754130DF03A068F855DB4333D43921125B9CF2670EF6A40370C646B90401955E1F7BC9CDBF59CE0B2C5467D820BE189C845D0B79CFC96F'\n ],\n\n checkVersion(success: (major: string, minor: string) => void, fail: FailCallback): void {\n CAPIWS.version(\n (event: MessageEvent, data: ApiResponse) => {\n if (data.success === true) {\n if (data.major && data.minor) {\n const installedVersion = parseInt(data.major) * 100 + parseInt(data.minor);\n EIMZOClient.NEW_API = installedVersion >= 336;\n EIMZOClient.NEW_API2 = installedVersion >= 412;\n success(data.major, data.minor);\n } else {\n fail(null, 'E-IMZO Version is undefined');\n }\n } else {\n fail(null, data.reason || 'Unknown error');\n }\n },\n (e: unknown) => {\n fail(e, null);\n }\n );\n },\n\n installApiKeys(success: () => void, fail: FailCallback): void {\n CAPIWS.apikey(\n EIMZOClient.API_KEYS,\n (event: MessageEvent, data: ApiResponse) => {\n if (data.success) {\n success();\n } else {\n fail(null, data.reason || 'Unknown error');\n }\n },\n (e: unknown) => {\n fail(e, null);\n }\n );\n },\n\n listAllUserKeys(\n itemIdGen: ItemIdGenerator,\n itemUiGen: ItemUiGenerator,\n success: (items: unknown[], firstId: string | null) => void,\n fail: FailCallback\n ): void {\n const items: unknown[] = [];\n const errors: ErrorInfo[] = [];\n\n if (!EIMZOClient.NEW_API) {\n fail(null, 'Please install new version of E-IMZO');\n } else {\n if (EIMZOClient.NEW_API2) {\n EIMZOClient._findPfxs2(itemIdGen, itemUiGen, items, errors, (firstItmId2?: string) => {\n if (items.length === 0 && errors.length > 0) {\n const firstError = errors[0];\n if (firstError) {\n fail(firstError.e, firstError.r || null);\n }\n } else {\n let firstId: string | null = null;\n if (items.length === 1 && firstItmId2) {\n firstId = firstItmId2;\n }\n success(items, firstId);\n }\n });\n } else {\n EIMZOClient._findPfxs2(itemIdGen, itemUiGen, items, errors, (firstItmId2?: string) => {\n EIMZOClient._findTokens2(itemIdGen, itemUiGen, items, errors, (firstItmId3?: string) => {\n if (items.length === 0 && errors.length > 0) {\n const firstError = errors[0];\n if (firstError) {\n fail(firstError.e, firstError.r || null);\n }\n } else {\n let firstId: string | null = null;\n if (items.length === 1) {\n if (firstItmId2) {\n firstId = firstItmId2;\n } else if (firstItmId3) {\n firstId = firstItmId3;\n }\n }\n success(items, firstId);\n }\n });\n });\n }\n }\n },\n\n idCardIsPLuggedIn(success: (isPlugged: boolean) => void, fail: FailCallback): void {\n if (!EIMZOClient.NEW_API2) {\n console.log('E-IMZO version should be 4.12 or newer');\n success(false);\n } else {\n CAPIWS.callFunction(\n { plugin: 'idcard', name: 'list_readers' },\n (event: MessageEvent, data: ApiResponse) => {\n if (data.success) {\n success((data.readers?.length || 0) > 0);\n } else {\n fail(null, data.reason || 'Unknown error');\n }\n },\n (e: unknown) => {\n fail(e, null);\n }\n );\n }\n },\n\n loadKey(\n itemObject: CertificateInfo,\n success: (id: string) => void,\n fail: FailCallback,\n verifyPassword?: boolean\n ): void {\n if (itemObject) {\n const vo = itemObject;\n if (vo.type === 'pfx') {\n CAPIWS.callFunction(\n {\n plugin: 'pfx',\n name: 'load_key',\n arguments: [vo.disk, vo.path, vo.name, vo.alias]\n },\n (event: MessageEvent, data: ApiResponse) => {\n if (data.success && data.keyId) {\n const id = data.keyId;\n if (verifyPassword) {\n CAPIWS.callFunction(\n { name: 'verify_password', plugin: 'pfx', arguments: [id] },\n (event: MessageEvent, data: ApiResponse) => {\n if (data.success) {\n success(id);\n } else {\n fail(null, data.reason || 'Password verification failed');\n }\n },\n (e: unknown) => {\n fail(e, null);\n }\n );\n } else {\n success(id);\n }\n } else {\n fail(null, data.reason || 'Failed to load key');\n }\n },\n (e: unknown) => {\n fail(e, null);\n }\n );\n } else if (vo.type === 'ftjc') {\n CAPIWS.callFunction(\n { plugin: 'ftjc', name: 'load_key', arguments: [vo.cardUID] },\n (event: MessageEvent, data: ApiResponse) => {\n if (data.success && data.keyId) {\n const id = data.keyId;\n if (verifyPassword) {\n CAPIWS.callFunction(\n { plugin: 'ftjc', name: 'verify_pin', arguments: [id, '1'] },\n (event: MessageEvent, data: ApiResponse) => {\n if (data.success) {\n success(id);\n } else {\n fail(null, data.reason || 'PIN verification failed');\n }\n },\n (e: unknown) => {\n fail(e, null);\n }\n );\n } else {\n success(id);\n }\n } else {\n fail(null, data.reason || 'Failed to load key');\n }\n },\n (e: unknown) => {\n fail(e, null);\n }\n );\n }\n }\n },\n\n changeKeyPassword(itemObject: CertificateInfo, success: () => void, fail: FailCallback): void {\n if (itemObject) {\n const vo = itemObject;\n if (vo.type === 'pfx') {\n CAPIWS.callFunction(\n {\n plugin: 'pfx',\n name: 'load_key',\n arguments: [vo.disk, vo.path, vo.name, vo.alias]\n },\n (event: MessageEvent, data: ApiResponse) => {\n if (data.success && data.keyId) {\n const id = data.keyId;\n CAPIWS.callFunction(\n { name: 'change_password', plugin: 'pfx', arguments: [id] },\n (event: MessageEvent, data: ApiResponse) => {\n if (data.success) {\n success();\n } else {\n fail(null, data.reason || 'Failed to change password');\n }\n },\n (e: unknown) => {\n fail(e, null);\n }\n );\n } else {\n fail(null, data.reason || 'Failed to load key');\n }\n },\n (e: unknown) => {\n fail(e, null);\n }\n );\n } else if (vo.type === 'ftjc') {\n CAPIWS.callFunction(\n { plugin: 'ftjc', name: 'load_key', arguments: [vo.cardUID] },\n (event: MessageEvent, data: ApiResponse) => {\n if (data.success && data.keyId) {\n const id = data.keyId;\n CAPIWS.callFunction(\n { name: 'change_pin', plugin: 'ftjc', arguments: [id, '1'] },\n (event: MessageEvent, data: ApiResponse) => {\n if (data.success) {\n success();\n } else {\n fail(null, data.reason || 'Failed to change PIN');\n }\n },\n (e: unknown) => {\n fail(e, null);\n }\n );\n } else {\n fail(null, data.reason || 'Failed to load key');\n }\n },\n (e: unknown) => {\n fail(e, null);\n }\n );\n }\n }\n },\n\n createPkcs7(\n id: string,\n data: string,\n timestamper: any,\n success: (pkcs7: string) => void,\n fail: FailCallback,\n detached?: boolean,\n isDataBase64Encoded?: boolean\n ): void {\n // Note: Base64 should be imported or defined elsewhere\n let data64: string;\n if (isDataBase64Encoded === true) {\n data64 = data;\n } else {\n // Assuming Base64 utility is available globally or imported\n data64 =\n (\n globalThis as unknown as Record<string, { encode: (data: string) => string }>\n ).Base64?.encode(data) || btoa(data);\n }\n\n const detachedStr = detached === true ? 'yes' : 'no';\n\n CAPIWS.callFunction(\n {\n plugin: 'pkcs7',\n name: 'create_pkcs7',\n arguments: [data64, id, detachedStr]\n },\n (event: MessageEvent, data: ApiResponse) => {\n if (data.success && data.pkcs7_64) {\n const pkcs7 = data.pkcs7_64;\n success(pkcs7);\n } else {\n fail(null, data.reason || 'Failed to create PKCS7');\n }\n },\n (e: unknown) => {\n fail(e, null);\n }\n );\n },\n\n _getX500Val(s: string, f: string): string {\n const res = s.splitKeep(/,[A-Z]+=/g, true);\n for (const i in res) {\n const resItem = res[i];\n if (resItem) {\n const n = resItem.search((parseInt(i) > 0 ? ',' : '') + f + '=');\n if (n !== -1) {\n return resItem.slice(n + f.length + 1 + (parseInt(i) > 0 ? 1 : 0));\n }\n }\n }\n return '';\n },\n\n _findPfxs2(\n itemIdGen: ItemIdGenerator,\n itemUiGen: ItemUiGenerator,\n items: any[],\n errors: ErrorInfo[],\n callback: (firstItemId?: string) => void\n ): void {\n let itmkey0: string | undefined;\n\n CAPIWS.callFunction(\n { plugin: 'pfx', name: 'list_all_certificates' },\n (event: MessageEvent, data: ApiResponse) => {\n if (data.success && data.certificates) {\n for (const rec in data.certificates) {\n const el = data.certificates[rec];\n if (!el) continue;\n\n let x500name_ex = el.alias.toUpperCase();\n x500name_ex = x500name_ex.replace('1.2.860.3.16.1.1=', 'INN=');\n x500name_ex = x500name_ex.replace('1.2.860.3.16.1.2=', 'PINFL=');\n\n const vo: CertificateInfo = {\n disk: el.disk,\n path: el.path,\n name: el.name,\n alias: el.alias,\n serialNumber: EIMZOClient._getX500Val(x500name_ex, 'SERIALNUMBER'),\n validFrom: new Date(\n EIMZOClient._getX500Val(x500name_ex, 'VALIDFROM')\n .replace(/\\./g, '-')\n .replace(' ', 'T')\n ),\n validTo: new Date(\n EIMZOClient._getX500Val(x500name_ex, 'VALIDTO')\n .replace(/\\./g, '-')\n .replace(' ', 'T')\n ),\n CN: EIMZOClient._getX500Val(x500name_ex, 'CN'),\n TIN:\n EIMZOClient._getX500Val(x500name_ex, 'INN') ||\n EIMZOClient._getX500Val(x500name_ex, 'UID'),\n UID: EIMZOClient._getX500Val(x500name_ex, 'UID'),\n PINFL: EIMZOClient._getX500Val(x500name_ex, 'PINFL'),\n O: EIMZOClient._getX500Val(x500name_ex, 'O'),\n T: EIMZOClient._getX500Val(x500name_ex, 'T'),\n type: 'pfx'\n };\n\n if (!vo.TIN && !vo.PINFL) continue;\n\n const itmkey = itemIdGen(vo, rec);\n if (!itmkey0) {\n itmkey0 = itmkey;\n }\n const itm = itemUiGen(itmkey, vo);\n items.push(itm);\n }\n } else {\n errors.push({ r: data.reason || 'Failed to list certificates' });\n }\n callback(itmkey0);\n },\n (e: unknown) => {\n errors.push({ e: e });\n callback(itmkey0);\n }\n );\n },\n\n _findTokens2(\n itemIdGen: ItemIdGenerator,\n itemUiGen: ItemUiGenerator,\n items: any[],\n errors: ErrorInfo[],\n callback: (firstItemId?: string) => void\n ): void {\n let itmkey0: string | undefined;\n\n CAPIWS.callFunction(\n { plugin: 'ftjc', name: 'list_all_keys', arguments: [''] },\n (event: MessageEvent, data: ApiResponse) => {\n if (data.success && data.tokens) {\n for (const rec in data.tokens) {\n const el = data.tokens[rec];\n if (!el) continue;\n\n let x500name_ex = el.info.toUpperCase();\n x500name_ex = x500name_ex.replace('1.2.860.3.16.1.1=', 'INN=');\n x500name_ex = x500name_ex.replace('1.2.860.3.16.1.2=', 'PINFL=');\n\n const vo: CertificateInfo = {\n cardUID: el.cardUID,\n statusInfo: el.statusInfo,\n ownerName: el.ownerName,\n info: el.info,\n serialNumber: EIMZOClient._getX500Val(x500name_ex, 'SERIALNUMBER'),\n validFrom: new Date(EIMZOClient._getX500Val(x500name_ex, 'VALIDFROM')),\n validTo: new Date(EIMZOClient._getX500Val(x500name_ex, 'VALIDTO')),\n CN: EIMZOClient._getX500Val(x500name_ex, 'CN'),\n TIN:\n EIMZOClient._getX500Val(x500name_ex, 'INN') ||\n EIMZOClient._getX500Val(x500name_ex, 'UID'),\n UID: EIMZOClient._getX500Val(x500name_ex, 'UID'),\n PINFL: EIMZOClient._getX500Val(x500name_ex, 'PINFL'),\n O: EIMZOClient._getX500Val(x500name_ex, 'O'),\n T: EIMZOClient._getX500Val(x500name_ex, 'T'),\n type: 'ftjc'\n };\n\n if (!vo.TIN && !vo.PINFL) continue;\n\n const itmkey = itemIdGen(vo, rec);\n if (!itmkey0) {\n itmkey0 = itmkey;\n }\n const itm = itemUiGen(itmkey, vo);\n items.push(itm);\n }\n } else {\n errors.push({ r: data.reason || 'Failed to list tokens' });\n }\n callback(itmkey0);\n },\n (e: unknown) => {\n errors.push({ e: e });\n callback(itmkey0);\n }\n );\n }\n};\n\nexport default EIMZOClient;\nexport { dates, type CertificateInfo, type EIMZOClientType };\n","import CAPIWS from '../e-imzo/capiws.js';\nimport type { BasePlugin, CallbackFunction, ErrorCallback, PluginMethodCall } from './types.js';\n\n/**\n * Core plugin base class that all E-IMZO plugins extend\n */\nexport abstract class EIMZOPlugin implements BasePlugin {\n abstract readonly name: string;\n public readonly version: string = '1.0.0';\n public readonly description: string = '';\n\n /**\n * Execute a plugin method call through CAPIWS\n */\n protected callMethod<T = unknown>(\n methodName: string,\n args: unknown[] = [],\n onSuccess: CallbackFunction<T>,\n onError: ErrorCallback\n ): void {\n const call: PluginMethodCall = {\n plugin: this.name,\n name: methodName,\n ...(args.length > 0 && { arguments: args })\n };\n\n CAPIWS.callFunction(call, onSuccess, onError);\n }\n\n /**\n * Create a promise-based wrapper for plugin methods\n */\n protected createPromiseMethod<TArgs extends unknown[], TResult = unknown>(methodName: string) {\n return (...args: TArgs): Promise<TResult> => {\n return new Promise((resolve, reject) => {\n this.callMethod<TResult>(\n methodName,\n args as unknown[],\n (_event, data) => {\n if (data.success) {\n resolve(data as TResult);\n } else {\n reject(new Error(data.reason ?? 'Unknown error'));\n }\n },\n error => reject(error instanceof Error ? error : new Error(String(error)))\n );\n });\n };\n }\n\n /**\n * Create both callback and promise versions of a method\n */\n protected createMethod<TArgs extends unknown[], TResult = unknown>(methodName: string) {\n const promiseMethod = this.createPromiseMethod<TArgs, TResult>(methodName);\n\n const callbackMethod = (...args: [...TArgs, CallbackFunction<TResult>, ErrorCallback]) => {\n const methodArgs = args.slice(0, -2) as TArgs;\n const onSuccess = args[args.length - 2] as CallbackFunction<TResult>;\n const onError = args[args.length - 1] as ErrorCallback;\n\n this.callMethod<TResult>(methodName, methodArgs as unknown[], onSuccess, onError);\n };\n\n return {\n promise: promiseMethod,\n callback: callbackMethod\n };\n }\n}\n\n/**\n * Plugin manager for registering and accessing plugins\n */\nexport class PluginManager {\n private static plugins = new Map<string, EIMZOPlugin>();\n\n static register(plugin: EIMZOPlugin): void {\n this.plugins.set(plugin.name, plugin);\n }\n\n static get<T extends EIMZOPlugin>(name: string): T | undefined {\n return this.plugins.get(name) as T;\n }\n\n static getAll(): EIMZOPlugin[] {\n return Array.from(this.plugins.values());\n }\n\n static has(name: string): boolean {\n return this.plugins.has(name);\n }\n}\n\n/**\n * Decorator for auto-registering plugins\n */\nexport function RegisterPlugin<T extends new () => EIMZOPlugin>(constructor: T): T {\n const instance = new constructor();\n PluginManager.register(instance);\n return constructor;\n}\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base.js';\nimport type { CallbackFunction, ErrorCallback, CertificateInfo } from '../core/types.js';\n\n/**\n * Плагин для работы с электронными ключами и сертификатами\n */\n@RegisterPlugin\nexport class CertKeyPlugin extends EIMZOPlugin {\n readonly name = 'certkey';\n readonly description = 'Plugin for working with electronic keys and certificates';\n\n /**\n * Удалить загруженные ключи по идентификатору\n */\n unloadKey = (\n keyId: string,\n onSuccess: CallbackFunction<boolean>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('unload_key', [keyId], onSuccess, onError);\n };\n\n /**\n * Получить список дисков\n */\n listDisks = (onSuccess: CallbackFunction<string[]>, onError: ErrorCallback): void => {\n this.callMethod('list_disks', [], onSuccess, onError);\n };\n\n /**\n * Получить список сертификатов пользователя\n */\n listCertificates = (\n diskPath: string,\n onSuccess: CallbackFunction<CertificateInfo[]>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('list_certificates', [diskPath], onSuccess, onError);\n };\n\n /**\n * Получить список всех сертификатов пользователя\n */\n listAllCertificates = (\n onSuccess: CallbackFunction<CertificateInfo[]>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('list_all_certificates', [], onSuccess, onError);\n };\n\n /**\n * Загрузить ключ и получить идентификатор ключа\n */\n loadKey = (\n keyPath: string,\n password: string,\n onSuccess: CallbackFunction<string>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('load_key', [keyPath, password], onSuccess, onError);\n };\n}\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base.js';\nimport type { CallbackFunction, ErrorCallback } from '../core/types.js';\n\n/**\n * Плагин для шифрования и дешифрования документа по алг.шифрования ГОСТ-28147, алг.обмена ключа ECDH-SHA256 в режиме P2P\n */\n@RegisterPlugin\nexport class CipherPlugin extends EIMZOPlugin {\n readonly name = 'cipher';\n readonly description = 'Plugin for encryption/decryption using GOST-28147 and ECDH-SHA256';\n\n /**\n * Создать зашифрованный документ\n */\n encryptDocument = (\n data: string,\n recipientCertificate: string,\n senderKeyId: string,\n onSuccess: CallbackFunction<string>,\n onError: ErrorCallback\n ): void => {\n this.callMethod(\n 'encrypt_document',\n [data, recipientCertificate, senderKeyId],\n onSuccess,\n onError\n );\n };\n\n /**\n * Дешифровать зашифрованный документ\n */\n decryptDocument = (\n encryptedData: string,\n recipientKeyId: string,\n onSuccess: CallbackFunction<string>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('decrypt_document', [encryptedData, recipientKeyId], onSuccess, onError);\n };\n}\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base.js';\nimport type { CallbackFunction, ErrorCallback } from '../core/types.js';\n\nexport interface CRLInfo {\n issuer: string;\n thisUpdate: string;\n nextUpdate: string;\n revokedCertificates: {\n serialNumber: string;\n revocationDate: string;\n reason?: string;\n }[];\n}\n\nexport interface CertificateStatus {\n isRevoked: boolean;\n revocationDate?: string;\n reason?: string;\n}\n\n/**\n * Плагин для работы с CRL (Certificate Revocation List)\n */\n@RegisterPlugin\nexport class CRLPlugin extends EIMZOPlugin {\n readonly name = 'crl';\n readonly description = 'Plugin for working with Certificate Revocation Lists';\n\n /**\n * Открывает CRL\n */\n openCrl = (\n crlData: string,\n onSuccess: CallbackFunction<unknown>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('open_crl', [crlData], onSuccess, onError);\n };\n\n /**\n * Открывает CRL из файла\n */\n openCrlFile = (\n filePath: string,\n onSuccess: CallbackFunction<unknown>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('open_crl_file', [filePath], onSuccess, onError);\n };\n\n /**\n * Проверка статуса сертификата по CRL\n */\n checkCertificate = (\n certificate: string,\n crlId: string,\n onSuccess: CallbackFunction<CertificateStatus>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('check_certificate', [certificate, crlId], onSuccess, onError);\n };\n\n /**\n * Получить информацию о CRL\n */\n getCrlInfo = (\n crlId: string,\n onSuccess: CallbackFunction<CRLInfo>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_crl_info', [crlId], onSuccess, onError);\n };\n\n /**\n * Верификация CRL\n */\n verifyCrl = (\n crlId: string,\n issuerCertificate: string,\n onSuccess: CallbackFunction<boolean>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('verify_crl', [crlId, issuerCertificate], onSuccess, onError);\n };\n}\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base.js';\nimport type { CallbackFunction, ErrorCallback } from '../core/types.js';\n\n/**\n * Плагин для выполнения низкоуровневых криптографических преобразований\n */\n@RegisterPlugin\nexport class CryptoAuthPlugin extends EIMZOPlugin {\n readonly name = 'cryptoauth';\n readonly description = 'Plugin for low-level cryptographic operations';\n\n /**\n * Подписать данные ключем задаваемым идентификатором\n */\n getSignature = (\n keyId: string,\n data: string,\n onSuccess: CallbackFunction<string>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_signature', [keyId, data], onSuccess, onError);\n };\n\n /**\n * Вычислить хеш (в формате HEX) данных по алгоритму OZDST-1106-2009-2-A\n */\n getDigestHex = (\n data: string,\n onSuccess: CallbackFunction<string>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_digest_hex', [data], onSuccess, onError);\n };\n\n /**\n * Верифицировать подпись данных сертификатом\n */\n verifySignatureWithCertificate = (\n data: string,\n signature: string,\n certificate: string,\n onSuccess: CallbackFunction<boolean>,\n onError: ErrorCallback\n ): void => {\n this.callMethod(\n 'verify_signature_with_certificate',\n [data, signature, certificate],\n onSuccess,\n onError\n );\n };\n\n /**\n * Верифицировать подпись хеша (в формате HEX) ключем задаваемым идентификатором\n */\n verifyDigestHexSignatureWithId = (\n digestHex: string,\n signature: string,\n keyId: string,\n onSuccess: CallbackFunction<boolean>,\n onError: ErrorCallback\n ): void => {\n this.callMethod(\n 'verify_digest_hex_signature_with_id',\n [digestHex, signature, keyId],\n onSuccess,\n onError\n );\n };\n\n /**\n * Подписать хеш (в формате HEX) ключем задаваемым идентификатором\n */\n getDigestHexSignature = (\n digestHex: string,\n keyId: string,\n onSuccess: CallbackFunction<string>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_digest_hex_signature', [digestHex, keyId], onSuccess, onError);\n };\n\n /**\n * Верифицировать подпись данных ключем задаваемым идентификатором\n */\n verifySignatureWithId = (\n data: string,\n signature: string,\n keyId: string,\n onSuccess: CallbackFunction<boolean>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('verify_signature_with_id', [data, signature, keyId], onSuccess, onError);\n };\n\n /**\n * Верифицировать подпись хеша (в формате HEX) сертификатом\n */\n verifyDigestHexSignatureWithCertificate = (\n digestHex: string,\n signature: string,\n certificate: string,\n onSuccess: CallbackFunction<boolean>,\n onError: ErrorCallback\n ): void => {\n this.callMethod(\n 'verify_digest_hex_signature_with_certificate',\n [digestHex, signature, certificate],\n onSuccess,\n onError\n );\n };\n}\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base.js';\nimport type { CallbackFunction, ErrorCallback } from '../core/types.js';\n\n/**\n * Плагин для работы с файлами\n */\n@RegisterPlugin\nexport class FileIOPlugin extends EIMZOPlugin {\n readonly name = 'fileio';\n readonly description = 'Plugin for file input/output operations';\n\n /**\n * Загруить файл\n */\n loadFile = (\n filePath: string,\n onSuccess: CallbackFunction<string>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('load_file', [filePath], onSuccess, onError);\n };\n\n /**\n * Записать содержимое zip файла на диск\n */\n writeFile = (\n zipContent: string,\n destinationPath: string,\n onSuccess: CallbackFunction<boolean>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('write_file', [zipContent, destinationPath], onSuccess, onError);\n };\n}\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base';\nimport type { TokenInfo, KeyResponse, CallbackFunction, ErrorCallback } from '../core/types';\n\n// FTJC-specific response types\nexport interface FtjcTokenInfo extends TokenInfo {\n cardUID: string;\n statusInfo: string;\n ownerName: string;\n info: string;\n}\n\nexport interface FtjcListResponse {\n success: true;\n tokens: FtjcTokenInfo[];\n}\n\nexport interface UserDataResponse {\n success: true;\n data_64: string;\n}\n\nexport interface RandomDataResponse {\n success: true;\n random_64: string;\n}\n\n/**\n * FTJC Plugin for working with USB FT Javacard tokens\n */\n@RegisterPlugin\nexport class FtjcPlugin extends EIMZOPlugin {\n readonly name = 'ftjc';\n readonly description = 'Plugin for working with USB FT Javacard tokens - STUB';\n\n // Callback-based methods\n\n /**\n * Get list of all keys from connected tokens\n */\n listAllKeys = (\n exceptCards = '',\n onSuccess: CallbackFunction<FtjcListResponse>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('list_all_keys', [exceptCards], onSuccess, onError);\n };\n\n /**\n * Get list of tokens\n */\n listTokens = (onSuccess: CallbackFunction<FtjcListResponse>, onError: ErrorCallback): void => {\n this.callMethod('list_tokens', [], onSuccess, onError);\n };\n\n /**\n * Load key and get key identifier\n */\n loadKey = (\n cardUID: string,\n onSuccess: CallbackFunction<KeyResponse>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('load_key', [cardUID], onSuccess, onError);\n };\n\n /**\n * Unload key by identifier\n */\n unloadKey = (\n tokenId: string,\n onSuccess: CallbackFunction<{ success: true }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('unload_key', [tokenId], onSuccess, onError);\n };\n\n /**\n * Verify PIN code of token\n * @param pinType 0 - Initialization, 1 - User, 2 - Reset\n */\n verifyPin = (\n tokenId: string,\n pinType: '0' | '1' | '2',\n onSuccess: CallbackFunction<{ success: true }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('verify_pin', [tokenId, pinType], onSuccess, onError);\n };\n\n /**\n * Change PIN code of token\n * @param pinType 0 - Initialization, 1 - User, 2 - Reset\n */\n changePin = (\n tokenId: string,\n pinType: '0' | '1' | '2',\n onSuccess: CallbackFunction<{ success: true }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('change_pin', [tokenId, pinType], onSuccess, onError);\n };\n\n /**\n * Set name for USB token\n */\n setName = (\n tokenId: string,\n name: string,\n onSuccess: CallbackFunction<{ success: true }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('set_name', [tokenId, name], onSuccess, onError);\n };\n\n /**\n * Store certificates in USB token\n */\n storeCertificates = (\n tokenId: string,\n subjectCertificate64: string,\n caCertificate64: string,\n rootCertificate64: string,\n onSuccess: CallbackFunction<{ success: true }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod(\n 'store_certificates',\n [tokenId, subjectCertificate64, caCertificate64, rootCertificate64],\n onSuccess,\n onError\n );\n };\n\n /**\n * Get user data from token\n */\n getUserData = (\n tokenId: string,\n onSuccess: CallbackFunction<UserDataResponse>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_user_data', [tokenId], onSuccess, onError);\n };\n\n /**\n * Set or delete user data in token\n * @param data64 Data in BASE64 encoding or empty string to delete\n */\n setUserData = (\n tokenId: string,\n data64: string,\n onSuccess: CallbackFunction<{ success: true }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('set_user_data', [tokenId, data64], onSuccess, onError);\n };\n\n /**\n * Generate random data in USB token\n */\n getRandomData = (\n tokenId: string,\n onSuccess: CallbackFunction<RandomDataResponse>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_random_data', [tokenId], onSuccess, onError);\n };\n\n /**\n * Install applet in USB token\n */\n installApplet = (\n cardUID: string,\n applet64: string,\n signatureHex: string,\n onSuccess: CallbackFunction<{ success: true }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('install_applet', [cardUID, applet64, signatureHex], onSuccess, onError);\n };\n\n // Promise-based methods\n\n /**\n * List all keys (Promise version)\n */\n listAllKeysAsync = this.createPromiseMethod<[string?], FtjcListResponse>('list_all_keys');\n\n /**\n * List tokens (Promise version)\n */\n listTokensAsync = this.createPromiseMethod<[], FtjcListResponse>('list_tokens');\n\n /**\n * Load key (Promise version)\n */\n loadKeyAsync = this.createPromiseMethod<[string], KeyResponse>('load_key');\n\n /**\n * Unload key (Promise version)\n */\n unloadKeyAsync = this.createPromiseMethod<[string], { success: true }>('unload_key');\n\n /**\n * Verify PIN (Promise version)\n */\n verifyPinAsync = this.createPromiseMethod<[string, '0' | '1' | '2'], { success: true }>(\n 'verify_pin'\n );\n\n /**\n * Change PIN (Promise version)\n */\n changePinAsync = this.createPromiseMethod<[string, '0' | '1' | '2'], { success: true }>(\n 'change_pin'\n );\n\n /**\n * Set name (Promise version)\n */\n setNameAsync = this.createPromiseMethod<[string, string], { success: true }>('set_name');\n\n /**\n * Store certificates (Promise version)\n */\n storeCertificatesAsync = this.createPromiseMethod<\n [string, string, string, string],\n { success: true }\n >('store_certificates');\n\n /**\n * Get user data (Promise version)\n */\n getUserDataAsync = this.createPromiseMethod<[string], UserDataResponse>('get_user_data');\n\n /**\n * Set user data (Promise version)\n */\n setUserDataAsync = this.createPromiseMethod<[string, string], { success: true }>('set_user_data');\n\n /**\n * Get random data (Promise version)\n */\n getRandomDataAsync = this.createPromiseMethod<[string], RandomDataResponse>('get_random_data');\n\n /**\n * Install applet (Promise version)\n */\n installAppletAsync = this.createPromiseMethod<[string, string, string], { success: true }>(\n 'install_applet'\n );\n}\n\n// Export singleton instance\nexport const ftjcPlugin = new FtjcPlugin();\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base.js';\nimport type { CallbackFunction, ErrorCallback, CertificateInfo } from '../core/types.js';\n\nexport interface ReaderInfo {\n name: string;\n connected: boolean;\n cardPresent: boolean;\n}\n\n/**\n * Плагин для работы с ID-card E-IMZO\n */\n@RegisterPlugin\nexport class IDCardPlugin extends EIMZOPlugin {\n readonly name = 'idcard';\n readonly description = 'Plugin for working with E-IMZO ID cards';\n\n /**\n * Проверить пароль хранилища ключей (заглушка)\n */\n verifyPassword = (\n password: string,\n onSuccess: CallbackFunction<boolean>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('verify_password', [password], onSuccess, onError);\n };\n\n /**\n * Персонализировать ID-карту записав новые сертификаты и установив PIN-код\n */\n personalize = (\n certificates: string[],\n pinCode: string,\n onSuccess: CallbackFunction<boolean>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('personalize', [certificates, pinCode], onSuccess, onError);\n };\n\n /**\n * Получить список считывателей\n */\n listReaders = (onSuccess: CallbackFunction<ReaderInfo[]>, onError: ErrorCallback): void => {\n this.callMethod('list_readers', [], onSuccess, onError);\n };\n\n /**\n * Получить список всех сертификатов пользователя (заглушка)\n */\n listAllCertificates = (\n onSuccess: CallbackFunction<CertificateInfo[]>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('list_all_certificates', [], onSuccess, onError);\n };\n\n /**\n * Получить зашифрованный и подписанный заводской номер USB-токена\n */\n getEncryptedSignedCplc = (onSuccess: CallbackFunction<string>, onError: ErrorCallback): void => {\n this.callMethod('get_encrypted_signed_cplc', [], onSuccess, onError);\n };\n\n /**\n * Загрузить ключ и получить идентификатор ключа. Ключ будет доступен определенное время (заглушка)\n */\n loadKey = (\n cardIndex: number,\n password: string,\n onSuccess: CallbackFunction<string>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('load_key', [cardIndex, password], onSuccess, onError);\n };\n}\n","/**\n * E-IMZO Session Manager\n * KeyId larni saqlash va avtomatik unload qilish uchun\n */\n\nexport type StorageType = 'sessionStorage' | 'localStorage' | 'cookie' | 'memory';\n\nexport interface SessionConfig {\n storageType: StorageType;\n autoUnloadAfter: number; // milliseconds, default 6 hours\n keyPrefix: string;\n cookieOptions?: {\n domain?: string;\n path?: string;\n secure?: boolean;\n sameSite?: 'strict' | 'lax' | 'none';\n };\n}\n\nexport interface KeySession {\n keyId: string;\n certificateId: string;\n loadedAt: number;\n expiresAt: number;\n certificate: unknown;\n autoUnload: boolean;\n}\n\nexport class EIMZOSessionManager {\n private config: SessionConfig;\n private sessions = new Map<string, KeySession>();\n private cleanupInterval: NodeJS.Timeout | null = null;\n\n constructor(config: Partial<SessionConfig> = {}) {\n this.config = {\n storageType: 'sessionStorage',\n autoUnloadAfter: 6 * 60 * 60 * 1000, // 6 hours default\n keyPrefix: 'eimzo_key_',\n ...config\n };\n\n this.initializeFromStorage();\n this.startCleanupTimer();\n }\n\n /**\n * KeyId ni session storage ga saqlash\n */\n saveKeySession(\n keyId: string,\n certificateId: string,\n certificate: unknown,\n autoUnload = true\n ): void {\n const now = Date.now();\n const session: KeySession = {\n keyId,\n certificateId,\n loadedAt: now,\n expiresAt: now + this.config.autoUnloadAfter,\n certificate,\n autoUnload\n };\n\n // Memory da saqlash\n this.sessions.set(certificateId, session);\n\n // Storage da saqlash\n this.saveToStorage(certificateId, session);\n\n console.log(\n `🔑 Key session saved: ${certificateId} (expires in ${this.config.autoUnloadAfter / 1000 / 60} minutes)`\n );\n }\n\n /**\n * Certificate ID bo'yicha keyId ni olish\n */\n getKeyId(certificateId: string): string | null {\n const session = this.sessions.get(certificateId);\n\n if (!session) {\n // Storage dan yuklashga harakat qilish\n this.loadFromStorage(certificateId);\n return this.sessions.get(certificateId)?.keyId ?? null;\n }\n\n // Expired bo'lsa null qaytarish\n if (Date.now() > session.expiresAt) {\n void this.removeKeySession(certificateId);\n return null;\n }\n\n return session.keyId;\n }\n\n /**\n * Barcha active key sessions ni olish\n */\n getActiveSessions(): KeySession[] {\n const now = Date.now();\n const activeSessions: KeySession[] = [];\n\n for (const [certId, session] of this.sessions.entries()) {\n if (now <= session.expiresAt) {\n activeSessions.push(session);\n } else {\n // Expired sessionlarni o'chirish\n void this.removeKeySession(certId);\n }\n }\n\n return activeSessions;\n }\n\n /**\n * Session ni kengaytirish (6 soat yana qo'shish)\n */\n extendSession(certificateId: string): boolean {\n const session = this.sessions.get(certificateId);\n if (!session) return false;\n\n const now = Date.now();\n session.expiresAt = now + this.config.autoUnloadAfter;\n\n void this.saveToStorage(certificateId, session);\n console.log(`⏰ Session extended for ${certificateId}`);\n return true;\n }\n\n /**\n * Key session ni o'chirish\n */\n async removeKeySession(certificateId: string): Promise<void> {\n const session = this.sessions.get(certificateId);\n\n if (session) {\n // E-IMZO dan keyni unload qilish\n if (session.autoUnload) {\n await this.unloadKeyFromEIMZO(session.keyId);\n }\n\n // Memory dan o'chirish\n this.sessions.delete(certificateId);\n\n // Storage dan o'chirish\n this.removeFromStorage(certificateId);\n\n console.log(`🗑️ Key session removed: ${certificateId}`);\n }\n }\n\n /**\n * Barcha sessionlarni tozalash\n */\n async clearAllSessions(): Promise<void> {\n const sessions = Array.from(this.sessions.keys());\n\n for (const certId of sessions) {\n await this.removeKeySession(certId);\n }\n\n console.log('🧹 All key sessions cleared');\n }\n\n /**\n * Storage configuration ni o'zgartirish\n */\n updateConfig(newConfig: Partial<SessionConfig>): void {\n this.config = { ...this.config, ...newConfig };\n\n // Cleanup timer ni qayta ishga tushirish\n if (this.cleanupInterval) {\n clearInterval(this.cleanupInterval);\n }\n this.startCleanupTimer();\n }\n\n // Private methods\n\n private saveToStorage(certificateId: string, session: KeySession): void {\n const key = this.config.keyPrefix + certificateId;\n const data = JSON.stringify(session);\n\n try {\n switch (this.config.storageType) {\n case 'sessionStorage':\n if (typeof sessionStorage !== 'undefined') {\n sessionStorage.setItem(key, data);\n }\n break;\n\n case 'localStorage':\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem(key, data);\n }\n break;\n\n case 'cookie':\n this.setCookie(key, data, session.expiresAt);\n break;\n\n case 'memory':\n // Faqat memory da saqlash, hech narsa qilmaymiz\n break;\n }\n } catch (error) {\n console.warn('Failed to save to storage:', error);\n }\n }\n\n private loadFromStorage(certificateId: string): KeySession | null {\n const key = this.config.keyPrefix + certificateId;\n\n try {\n let data: string | null = null;\n\n switch (this.config.storageType) {\n case 'sessionStorage':\n if (typeof sessionStorage !== 'undefined') {\n data = sessionStorage.getItem(key);\n }\n break;\n\n case 'localStorage':\n if (typeof localStorage !== 'undefined') {\n data = localStorage.getItem(key);\n }\n break;\n\n case 'cookie':\n data = this.getCookie(key);\n break;\n\n case 'memory':\n return null; // Memory da faqat current sessions bor\n }\n\n if (data) {\n const session = JSON.parse(data) as KeySession;\n\n // Expired bo'lsa o'chirish\n if (Date.now() > session.expiresAt) {\n this.removeFromStorage(certificateId);\n return null;\n }\n\n this.sessions.set(certificateId, session);\n return session;\n }\n } catch (error) {\n console.warn('Failed to load from storage:', error);\n }\n\n return null;\n }\n\n private removeFromStorage(certificateId: string): void {\n const key = this.config.keyPrefix + certificateId;\n\n try {\n switch (this.config.storageType) {\n case 'sessionStorage':\n if (typeof sessionStorage !== 'undefined') {\n sessionStorage.removeItem(key);\n }\n break;\n\n case 'localStorage':\n if (typeof localStorage !== 'undefined') {\n localStorage.removeItem(key);\n }\n break;\n\n case 'cookie':\n this.deleteCookie(key);\n break;\n\n case 'memory':\n // Memory da hech narsa qilmaymiz\n break;\n }\n } catch (error) {\n console.warn('Failed to remove from storage:', error);\n }\n }\n\n private initializeFromStorage(): void {\n // Browser environment da barcha mavjud sessionlarni yuklash\n if (typeof window === 'undefined') return;\n\n try {\n const keys: string[] = [];\n\n switch (this.config.storageType) {\n case 'sessionStorage':\n if (typeof sessionStorage !== 'undefined') {\n for (let i = 0; i < sessionStorage.length; i++) {\n const key = sessionStorage.key(i);\n if (key?.startsWith(this.config.keyPrefix)) {\n keys.push(key);\n }\n }\n }\n break;\n\n case 'localStorage':\n if (typeof localStorage !== 'undefined') {\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(this.config.keyPrefix)) {\n keys.push(key);\n }\n }\n }\n break;\n\n case 'cookie':\n // Cookie dan key'larni parsing qilish murakkab, skip qilamiz\n break;\n }\n\n // Key'larni yuklash\n keys.forEach(key => {\n const certificateId = key.replace(this.config.keyPrefix, '');\n this.loadFromStorage(certificateId);\n });\n } catch (error) {\n console.warn('Failed to initialize from storage:', error);\n }\n }\n\n private startCleanupTimer(): void {\n // Har 10 daqiqada expired sessionlarni tozalash\n this.cleanupInterval = setInterval(\n () => {\n void this.cleanupExpiredSessions();\n },\n 10 * 60 * 1000\n );\n }\n\n private async cleanupExpiredSessions(): Promise<void> {\n const now = Date.now();\n const expiredSessions: string[] = [];\n\n for (const [certId, session] of this.sessions.entries()) {\n if (now > session.expiresAt) {\n expiredSessions.push(certId);\n }\n }\n\n for (const certId of expiredSessions) {\n await this.removeKeySession(certId);\n }\n\n if (expiredSessions.length > 0) {\n console.log(`🕒 Cleaned up ${expiredSessions.length} expired sessions`);\n }\n }\n\n private async unloadKeyFromEIMZO(keyId: string): Promise<void> {\n try {\n // E-IMZO API dan to'g'ridan-to'g'ri unload qilish\n if (typeof window !== 'undefined') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const windowWithCAPiWS = window as unknown as { CAPIWS?: any };\n\n if (windowWithCAPiWS.CAPIWS) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const CAPIWS = windowWithCAPiWS.CAPIWS;\n\n return new Promise<void>(resolve => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n CAPIWS.callFunction({\n plugin: 'pfx',\n name: 'unloadKey',\n arguments: [keyId],\n onSuccess: () => {\n console.log(`🔓 Key unloaded from E-IMZO: ${keyId}`);\n resolve();\n },\n onError: (error: unknown, reason: unknown) => {\n console.warn(`Failed to unload key ${keyId}:`, reason);\n resolve(); // Xatolik bo'lsa ham davom etish\n }\n });\n });\n }\n }\n } catch (error) {\n console.warn('Failed to unload key from E-IMZO:', error);\n }\n }\n\n // Cookie utility methods\n private setCookie(name: string, value: string, expiresAt: number): void {\n if (typeof document === 'undefined') return;\n\n const expires = new Date(expiresAt).toUTCString();\n const options = this.config.cookieOptions ?? {};\n\n let cookieString = `${name}=${encodeURIComponent(value)}; expires=${expires}`;\n\n if (options.domain) cookieString += `; domain=${options.domain}`;\n if (options.path) cookieString += `; path=${options.path}`;\n if (options.secure) cookieString += '; secure';\n if (options.sameSite) cookieString += `; samesite=${options.sameSite}`;\n\n document.cookie = cookieString;\n }\n\n private getCookie(name: string): string | null {\n if (typeof document === 'undefined') return null;\n\n const nameEQ = name + '=';\n const cookies = document.cookie.split(';');\n\n for (let cookie of cookies) {\n cookie = cookie.trim();\n if (cookie.startsWith(nameEQ)) {\n return decodeURIComponent(cookie.substring(nameEQ.length));\n }\n }\n\n return null;\n }\n\n private deleteCookie(name: string): void {\n if (typeof document === 'undefined') return;\n\n const options = this.config.cookieOptions ?? {};\n let cookieString = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC`;\n\n if (options.domain) cookieString += `; domain=${options.domain}`;\n if (options.path) cookieString += `; path=${options.path}`;\n\n document.cookie = cookieString;\n }\n\n /**\n * Cleanup when instance is destroyed\n */\n destroy(): void {\n if (this.cleanupInterval) {\n clearInterval(this.cleanupInterval);\n this.cleanupInterval = null;\n }\n }\n}\n\n// Global session manager instance\nexport const sessionManager = new EIMZOSessionManager();\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base';\nimport { sessionManager, type SessionConfig } from '../core/session-manager';\nimport type {\n CallbackFunction,\n CertificateInfo,\n ErrorCallback,\n KeyResponse,\n ListResponse\n} from '../core/types';\n\n// PFX-specific response types\nexport interface PfxCertificate extends CertificateInfo {\n disk: string;\n path: string;\n name: string;\n alias: string;\n}\n\nexport interface PfxListResponse extends ListResponse<PfxCertificate> {\n certificates: PfxCertificate[];\n}\n\nexport interface DiskInfo {\n name: string;\n label?: string;\n available: boolean;\n}\n\n/**\n * PFX Plugin for working with PFX key storage files\n * Session management support for automatic key lifecycle\n */\n@RegisterPlugin\nexport class PfxPlugin extends EIMZOPlugin {\n readonly name = 'pfx';\n readonly description = 'Plugin for working with PFX key storage files with session management';\n\n // Session management configuration\n updateSessionConfig(config: Partial<SessionConfig>): void {\n sessionManager.updateConfig(config);\n }\n\n // Certificate cache for keyId lookup\n private certificateCache = new Map<string, PfxCertificate>();\n\n /**\n * Get keyId from certificate identifier\n * Used for: await pfxPlugin.verifyPasswordAsync(keyId);\n * @param certificateId - Format: \"disk:path:name:alias\" or just \"alias\"\n * @returns keyId or null if not found\n */\n getKeyId(certificateId: string): string | null {\n // Certificate ID dan keyId ni olish\n return sessionManager.getKeyId(certificateId);\n }\n\n /**\n * Get all active key sessions\n */\n getActiveSessions() {\n return sessionManager.getActiveSessions();\n }\n\n /**\n * Find certificate ID by partial match (alias, name, etc.)\n */\n findCertificateId(searchTerm: string): string | null {\n // Cache dan qidirish\n for (const [certId, cert] of this.certificateCache.entries()) {\n if (cert.alias === searchTerm || cert.name === searchTerm || certId.includes(searchTerm)) {\n return certId;\n }\n }\n\n // Session dan qidirish\n const sessions = sessionManager.getActiveSessions();\n for (const session of sessions) {\n if (session.certificateId.includes(searchTerm)) {\n return session.certificateId;\n }\n }\n\n return null;\n }\n\n /**\n * Clear all sessions\n */\n async clearAllSessions(): Promise<void> {\n await sessionManager.clearAllSessions();\n this.certificateCache.clear();\n }\n\n // Callback-based methods\n\n /**\n * Get list of available disks\n */\n listDisks = (\n onSuccess: CallbackFunction<{ disks: DiskInfo[] }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('list_disks', [], onSuccess, onError);\n };\n\n /**\n * Get list of certificates from specific disk\n */\n listCertificates = (\n disk: string,\n onSuccess: CallbackFunction<PfxListResponse>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('list_certificates', [disk], onSuccess, onError);\n };\n\n /**\n * Get list of all certificates from all disks\n */\n listAllCertificates = (\n onSuccess: CallbackFunction<PfxListResponse>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('list_all_certificates', [], onSuccess, onError);\n };\n\n /**\n * Load key and get key identifier with session management\n * @param disk - Storage disk name\n * @param path - Path to PFX file\n * @param name - File name\n * @param alias - Certificate alias\n * @param saveForHours - Save in session for automatic management (6 hours default)\n */\n loadKey = (\n disk: string,\n path: string,\n name: string,\n alias: string,\n onSuccess: CallbackFunction<KeyResponse>,\n onError: ErrorCallback,\n saveForHours?: number\n ): void => {\n const originalOnSuccess: CallbackFunction<KeyResponse> = (event, response) => {\n if (!response.data) return;\n\n const keyResponse = response.data;\n // Certificate ID ni yaratish\n const certificateId = `${disk}:${path}:${name}:${alias}`;\n\n // Basic certificate ma'lumotlari\n const certificate: PfxCertificate = {\n disk,\n path,\n name,\n alias,\n serialNumber: '',\n subjectName: '',\n validFromDate: '',\n validToDate: '',\n issuerName: '',\n subjectId: '',\n publicKeyAlgorithm: '',\n signAlgorithm: '',\n keyUsage: '',\n extendedKeyUsage: '',\n crlDistributionPoints: '',\n authorityInfoAccess: '',\n subjectAltName: '',\n issuerAltName: '',\n subjectKeyIdentifier: '',\n authorityKeyIdentifier: '',\n basicConstraints: '',\n certificatePolicies: '',\n keyUsageNonRepudiation: false,\n keyUsageDigitalSignature: false,\n keyUsageContentCommitment: false,\n extendedKeyUsageTimeStamping: false\n };\n\n this.certificateCache.set(certificateId, certificate);\n\n // Session management (faqat saveForHours ko'rsatilgan bo'lsa)\n if (saveForHours && saveForHours > 0 && keyResponse.keyId) {\n sessionManager.saveKeySession(\n keyResponse.keyId,\n certificateId,\n certificate,\n true // Auto unload enabled\n );\n\n console.log(`💾 Key session saved for ${saveForHours} hours: ${certificateId}`);\n }\n\n onSuccess(event, response);\n };\n\n this.callMethod('load_key', [disk, path, name, alias], originalOnSuccess, onError);\n };\n\n /**\n * Unload key by identifier\n */\n unloadKey = (\n keyId: string,\n onSuccess: CallbackFunction<{ success: true }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('unload_key', [keyId], onSuccess, onError);\n };\n\n /**\n * Verify password for key storage\n */\n verifyPassword = (\n keyId: string,\n onSuccess: CallbackFunction<{ success: true }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('verify_password', [keyId], onSuccess, onError);\n };\n\n /**\n * Change password for key storage\n */\n changePassword = (\n keyId: string,\n onSuccess: CallbackFunction<{ success: true }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('change_password', [keyId], onSuccess, onError);\n };\n\n /**\n * Save key pair and certificates to new PFX file\n */\n savePfx = (\n disk: string,\n path: string,\n name: string,\n alias: string,\n id: string,\n newKeyPassword: string,\n subjectCertificate64: string,\n caCertificate64: string,\n rootCertificate64: string,\n onSuccess: CallbackFunction<{ success: true }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod(\n 'save_pfx',\n [\n disk,\n path,\n name,\n alias,\n id,\n newKeyPassword,\n subjectCertificate64,\n caCertificate64,\n rootCertificate64\n ],\n onSuccess,\n onError\n );\n };\n\n /**\n * Save temporary PFX with self-signed certificate\n */\n saveTemporaryPfx = (\n disk: string,\n path: string,\n name: string,\n alias: string,\n id: string,\n password: string,\n subjectX500Name: string,\n onSuccess: CallbackFunction<{ success: true }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod(\n 'save_temporary_pfx',\n [disk, path, name, alias, id, password, subjectX500Name],\n onSuccess,\n onError\n );\n };\n\n // Promise-based methods\n\n /**\n * Get list of available disks (Promise version)\n */\n listDisksAsync = this.createPromiseMethod<[], { disks: DiskInfo[] }>('list_disks');\n\n /**\n * Get list of certificates from specific disk (Promise version)\n */\n listCertificatesAsync = this.createPromiseMethod<[string], PfxListResponse>('list_certificates');\n\n /**\n * Get list of all certificates (Promise version)\n */\n listAllCertificatesAsync = this.createPromiseMethod<[], PfxListResponse>('list_all_certificates');\n\n /**\n * Load key (Promise version) with session management\n * @param disk Storage disk name\n * @param path Path to PFX file\n * @param name File name\n * @param alias Certificate alias\n * @param saveForHours Save in session for automatic management\n */\n loadKeyAsync = async (\n disk: string,\n path: string,\n name: string,\n alias: string,\n saveForHours?: number\n ): Promise<KeyResponse> => {\n return new Promise<KeyResponse>((resolve, reject) => {\n this.loadKey(\n disk,\n path,\n name,\n alias,\n (event, response) => {\n if (response.success && response.data) {\n resolve(response.data);\n } else {\n reject(new Error(response.reason ?? 'Unknown error'));\n }\n },\n reject,\n saveForHours\n );\n });\n };\n\n /**\n * Unload key (Promise version)\n */\n unloadKeyAsync = this.createPromiseMethod<[string], { success: true }>('unload_key');\n\n /**\n * Verify password (Promise version)\n */\n verifyPasswordAsync = this.createPromiseMethod<[string], { success: true }>('verify_password');\n\n /**\n * Change password (Promise version)\n */\n changePasswordAsync = this.createPromiseMethod<[string], { success: true }>('change_password');\n\n /**\n * Save PFX (Promise version)\n */\n savePfxAsync = this.createPromiseMethod<\n [string, string, string, string, string, string, string, string, string],\n { success: true }\n >('save_pfx');\n\n /**\n * Save temporary PFX (Promise version)\n */\n saveTemporaryPfxAsync = this.createPromiseMethod<\n [string, string, string, string, string, string, string],\n { success: true }\n >('save_temporary_pfx');\n}\n\n// Export singleton instance\nexport const pfxPlugin = new PfxPlugin();\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base.js';\nimport type { CallbackFunction, ErrorCallback } from '../core/types.js';\n\nexport interface PKCS10Info {\n subject: string;\n publicKey: string;\n signatureAlgorithm: string;\n [key: string]: unknown;\n}\n\nexport interface KeyPairInfo {\n privateKeyId: string;\n publicKey: string;\n}\n\n/**\n * Плагин для генерации ключевой пары и формирования запроса на сертификат формата PKCS#10\n */\n@RegisterPlugin\nexport class PKCS10Plugin extends EIMZOPlugin {\n readonly name = 'pkcs10';\n readonly description = 'Plugin for generating key pairs and PKCS#10 certificate requests';\n\n /**\n * Формировать запрос на сертификат формата PKCS#10 из существующего ключа\n */\n createPkcs10FromKey = (\n keyId: string,\n subject: string,\n onSuccess: CallbackFunction<string>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('create_pkcs10_from_key', [keyId, subject], onSuccess, onError);\n };\n\n /**\n * Сгенерировать ключевую пару\n */\n generateKeypair = (\n keySize: number,\n onSuccess: CallbackFunction<KeyPairInfo>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('generate_keypair', [keySize], onSuccess, onError);\n };\n\n /**\n * Формировать запрос на сертификат формата PKCS#10\n */\n createPkcs10 = (\n subject: string,\n keySize: number,\n onSuccess: CallbackFunction<string>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('create_pkcs10', [subject, keySize], onSuccess, onError);\n };\n\n /**\n * Получить информацию о запросе PKCS#10\n */\n getPkcs10Info = (\n pkcs10: string,\n onSuccess: CallbackFunction<PKCS10Info>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_pkcs10_info', [pkcs10], onSuccess, onError);\n };\n}\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base';\nimport type { CallbackFunction, ErrorCallback } from '../core/types';\n\n// PKCS7-specific response types\nexport interface Pkcs7Response {\n success: true;\n pkcs7_64: string;\n}\n\n// Enhanced PKCS7 creation options\nexport interface Pkcs7CreateOptions {\n detached?: boolean | 'yes' | 'no' | '';\n autoBase64?: boolean; // Auto-encode string data to base64\n}\n\nexport interface Pkcs7InfoResponse {\n success: boolean;\n signatures: {\n signer: string;\n timestamp?: string;\n valid: boolean;\n }[];\n}\n\nexport interface TimestampTokenResponse {\n success: true;\n timestamp_token_64: string;\n}\n\n/**\n * PKCS7 Plugin for working with PKCS#7/CMS format\n */\n@RegisterPlugin\nexport class Pkcs7Plugin extends EIMZOPlugin {\n readonly name = 'pkcs7';\n readonly description = 'Plugin for working with PKCS#7/CMS format';\n\n // Utility method to check if string is base64\n private isBase64(str: string): boolean {\n try {\n // Base64 pattern check\n const base64Pattern = /^[A-Za-z0-9+/]*={0,2}$/;\n if (!base64Pattern.test(str)) return false;\n\n // Try to decode and encode back\n const decoded = atob(str);\n const encoded = btoa(decoded);\n return encoded === str;\n } catch {\n return false;\n }\n }\n\n // Callback-based methods\n\n /**\n * Create PKCS#7/CMS document by signing with key (enhanced version)\n * @param data - String data or already base64 encoded data\n * @param keyId - Key identifier\n * @param options - Creation options with smart defaults\n */\n createPkcs7Enhanced = (\n data: string,\n keyId: string,\n options: Pkcs7CreateOptions = {},\n onSuccess: CallbackFunction<Pkcs7Response>,\n onError: ErrorCallback\n ): void => {\n const {\n detached = false, // Default to attached (no)\n autoBase64 = true // Default to auto base64 encoding\n } = options;\n\n // Auto base64 encoding agar kerak bo'lsa\n let data64 = data;\n if (autoBase64 && !this.isBase64(data)) {\n try {\n data64 = btoa(data);\n } catch (_error) {\n // UTF-8 string lar uchun\n data64 = btoa(unescape(encodeURIComponent(data)));\n }\n }\n\n // Detached parameter ni normalizatsiya qilish\n let detachedParam: 'yes' | 'no' | '' = '';\n if (typeof detached === 'boolean') {\n detachedParam = detached ? 'yes' : 'no';\n } else {\n detachedParam = detached;\n }\n\n this.callMethod('create_pkcs7', [data64, keyId, detachedParam], onSuccess, onError);\n };\n\n /**\n * Create PKCS#7/CMS document by signing with key (original method)\n */\n createPkcs7 = (\n data64: string,\n keyId: string,\n detached: 'yes' | 'no' | '' = 'no', // Default to attached\n onSuccess: CallbackFunction<Pkcs7Response>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('create_pkcs7', [data64, keyId, detached], onSuccess, onError);\n };\n\n /**\n * Get full information about PKCS#7/CMS document (attached)\n */\n getPkcs7AttachedInfo = (\n pkcs764: string,\n trustStoreId = '',\n onSuccess: CallbackFunction<Pkcs7InfoResponse>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_pkcs7_attached_info', [pkcs764, trustStoreId], onSuccess, onError);\n };\n\n /**\n * Get full information about PKCS#7/CMS document (detached) with auto base64\n */\n getPkcs7DetachedInfoEnhanced = (\n data: string,\n pkcs764: string,\n trustStoreId = '',\n autoBase64 = true,\n onSuccess: CallbackFunction<Pkcs7InfoResponse>,\n onError: ErrorCallback\n ): void => {\n let data64 = data;\n if (autoBase64 && !this.isBase64(data)) {\n try {\n data64 = btoa(data);\n } catch (_error) {\n data64 = btoa(unescape(encodeURIComponent(data)));\n }\n }\n\n this.callMethod('get_pkcs7_detached_info', [data64, pkcs764, trustStoreId], onSuccess, onError);\n };\n\n /**\n * Get full information about PKCS#7/CMS document (detached) - original\n */\n getPkcs7DetachedInfo = (\n data64: string,\n pkcs764: string,\n trustStoreId = '',\n onSuccess: CallbackFunction<Pkcs7InfoResponse>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_pkcs7_detached_info', [data64, pkcs764, trustStoreId], onSuccess, onError);\n };\n\n /**\n * Verify PKCS#7/CMS document (attached) - STUB\n */\n verifyPkcs7Attached = (\n pkcs764: string,\n trustStoreId: string,\n requesterId = '',\n onSuccess: CallbackFunction<{ success: true; valid: boolean }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod(\n 'verify_pkcs7_attached',\n [pkcs764, trustStoreId, requesterId],\n onSuccess,\n onError\n );\n };\n\n /**\n * Verify PKCS#7/CMS document (detached) with auto base64\n */\n verifyPkcs7DetachedEnhanced = (\n data: string,\n pkcs764: string,\n trustStoreId: string,\n requesterId = '',\n autoBase64 = true,\n onSuccess: CallbackFunction<{ success: true; valid: boolean }>,\n onError: ErrorCallback\n ): void => {\n let data64 = data;\n if (autoBase64 && !this.isBase64(data)) {\n try {\n data64 = btoa(data);\n } catch (_error) {\n data64 = btoa(unescape(encodeURIComponent(data)));\n }\n }\n\n this.callMethod(\n 'verify_pkcs7_detached',\n [data64, pkcs764, trustStoreId, requesterId],\n onSuccess,\n onError\n );\n };\n\n /**\n * Verify PKCS#7/CMS document (detached) - STUB\n */\n verifyPkcs7Detached = (\n data64: string,\n pkcs764: string,\n trustStoreId: string,\n requesterId = '',\n onSuccess: CallbackFunction<{ success: true; valid: boolean }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod(\n 'verify_pkcs7_detached',\n [data64, pkcs764, trustStoreId, requesterId],\n onSuccess,\n onError\n );\n };\n\n /**\n * Verify PKCS#7/CMS document with CRL (attached) - STUB\n */\n verifyPkcs7AttachedCrl = (\n pkcs764: string,\n trustStoreId: string,\n crlId: string,\n onSuccess: CallbackFunction<{ success: true; valid: boolean }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod(\n 'verify_pkcs7_attached_crl',\n [pkcs764, trustStoreId, crlId],\n onSuccess,\n onError\n );\n };\n\n /**\n * Verify PKCS#7/CMS document with CRL (detached) - STUB\n */\n verifyPkcs7DetachedCrl = (\n data64: string,\n pkcs764: string,\n trustStoreId: string,\n crlId: string,\n onSuccess: CallbackFunction<{ success: true; valid: boolean }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod(\n 'verify_pkcs7_detached_crl',\n [data64, pkcs764, trustStoreId, crlId],\n onSuccess,\n onError\n );\n };\n\n /**\n * Attach timestamp token to PKCS#7/CMS document - STUB\n */\n attachTimestampTokenPkcs7 = (\n pkcs764: string,\n signerSerialNumber: string,\n timestampToken64: string,\n onSuccess: CallbackFunction<Pkcs7Response>,\n onError: ErrorCallback\n ): void => {\n this.callMethod(\n 'attach_timestamp_token_pkcs7',\n [pkcs764, signerSerialNumber, timestampToken64],\n onSuccess,\n onError\n );\n };\n\n /**\n * Add signature to existing PKCS#7/CMS document (attached) - DEPRECATED\n */\n appendPkcs7Attached = (\n pkcs764: string,\n keyId: string,\n onSuccess: CallbackFunction<Pkcs7Response>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('append_pkcs7_attached', [pkcs764, keyId], onSuccess, onError);\n };\n\n /**\n * Add signature to existing PKCS#7/CMS document (detached) - DEPRECATED\n */\n appendPkcs7Detached = (\n data64: string,\n pkcs764: string,\n keyId: string,\n onSuccess: CallbackFunction<Pkcs7Response>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('append_pkcs7_detached', [data64, pkcs764, keyId], onSuccess, onError);\n };\n\n // Promise-based methods\n\n /**\n * Create PKCS#7/CMS document (Enhanced Promise version)\n * @param data String data (auto base64 encoded) or base64 data\n * @param keyId Key identifier\n * @param options Creation options with smart defaults\n */\n createPkcs7Async = async (\n data: string,\n keyId: string,\n options: Pkcs7CreateOptions = {}\n ): Promise<Pkcs7Response> => {\n return new Promise<Pkcs7Response>((resolve, reject) => {\n this.createPkcs7Enhanced(\n data,\n keyId,\n options,\n (_event, response) => {\n if (response.success && response.data) {\n resolve(response.data);\n } else {\n reject(new Error(response.reason ?? 'Unknown error'));\n }\n },\n reject\n );\n });\n };\n\n /**\n * Create PKCS#7/CMS document (Original Promise version for backward compatibility)\n */\n createPkcs7LegacyAsync = this.createPromiseMethod<\n [string, string, ('yes' | 'no' | '')?],\n Pkcs7Response\n >('create_pkcs7');\n\n /**\n * Get PKCS#7 attached info (Promise version)\n */\n getPkcs7AttachedInfoAsync = this.createPromiseMethod<[string, string?], Pkcs7InfoResponse>(\n 'get_pkcs7_attached_info'\n );\n\n /**\n * Get PKCS#7 detached info (Enhanced Promise version)\n */\n getPkcs7DetachedInfoAsync = async (\n data: string,\n pkcs764: string,\n trustStoreId = '',\n autoBase64 = true\n ): Promise<Pkcs7InfoResponse> => {\n return new Promise<Pkcs7InfoResponse>((resolve, reject) => {\n this.getPkcs7DetachedInfoEnhanced(\n data,\n pkcs764,\n trustStoreId,\n autoBase64,\n (_event, response) => {\n if (response.success && response.data) {\n resolve(response.data);\n } else {\n reject(new Error(response.reason ?? 'Unknown error'));\n }\n },\n reject\n );\n });\n };\n\n /**\n * Get PKCS#7 detached info (Original Promise version)\n */\n getPkcs7DetachedInfoLegacyAsync = this.createPromiseMethod<\n [string, string, string?],\n Pkcs7InfoResponse\n >('get_pkcs7_detached_info');\n\n /**\n * Verify PKCS#7 attached (Promise version)\n */\n verifyPkcs7AttachedAsync = this.createPromiseMethod<\n [string, string, string?],\n { success: true; valid: boolean }\n >('verify_pkcs7_attached');\n\n /**\n * Verify PKCS#7 detached (Enhanced Promise version)\n */\n verifyPkcs7DetachedAsync = async (\n data: string,\n pkcs764: string,\n trustStoreId: string,\n requesterId = '',\n autoBase64 = true\n ): Promise<{ success: true; valid: boolean }> => {\n return new Promise<{ success: true; valid: boolean }>((resolve, reject) => {\n this.verifyPkcs7DetachedEnhanced(\n data,\n pkcs764,\n trustStoreId,\n requesterId,\n autoBase64,\n (_event, response) => {\n if (response.success && response.data) {\n resolve(response.data);\n } else {\n reject(new Error(response.reason ?? 'Unknown error'));\n }\n },\n reject\n );\n });\n };\n\n /**\n * Verify PKCS#7 detached (Original Promise version)\n */\n verifyPkcs7DetachedLegacyAsync = this.createPromiseMethod<\n [string, string, string, string?],\n { success: true; valid: boolean }\n >('verify_pkcs7_detached');\n\n /**\n * Attach timestamp token (Promise version)\n */\n attachTimestampTokenPkcs7Async = this.createPromiseMethod<\n [string, string, string],\n Pkcs7Response\n >('attach_timestamp_token_pkcs7');\n}\n\n// Export singleton instance\nexport const pkcs7Plugin = new Pkcs7Plugin();\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base.js';\nimport type { CallbackFunction, ErrorCallback } from '../core/types.js';\n\n/**\n * Плагин для взаимодейтвия с ИОК (инфраструктура открытых ключей)\n */\n@RegisterPlugin\nexport class PKIPlugin extends EIMZOPlugin {\n readonly name = 'pki';\n readonly description = 'Plugin for PKI (Public Key Infrastructure) interaction';\n\n /**\n * Шаг №1 для получения ключа PFX\n */\n enrollPfxStep1 = (\n request: string,\n onSuccess: CallbackFunction<unknown>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('enroll_pfx_step1', [request], onSuccess, onError);\n };\n\n /**\n * Шаг №2 для получения ключа PFX\n */\n enrollPfxStep2 = (\n response: string,\n onSuccess: CallbackFunction<unknown>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('enroll_pfx_step2', [response], onSuccess, onError);\n };\n}\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base.js';\nimport type { CallbackFunction, ErrorCallback } from '../core/types.js';\n\n/**\n * Плагин для работы с хранилищами доверенных сертификатов формата JKS\n */\n@RegisterPlugin\nexport class TruststoreJKSPlugin extends EIMZOPlugin {\n readonly name = 'truststore-jks';\n readonly description = 'Plugin for working with JKS trust stores';\n\n /**\n * Открывает хранилище доверенных сертификатов 'truststore.jks' в домашней директории пользователя\n */\n openTruststore = (onSuccess: CallbackFunction<unknown>, onError: ErrorCallback): void => {\n this.callMethod('open_truststore', [], onSuccess, onError);\n };\n\n // Promise-based methods\n\n /**\n * Открывает хранилище доверенных сертификатов 'truststore.jks' в домашней директории пользователя\n */\n async openTruststoreAsync(): Promise<unknown> {\n return new Promise((resolve, reject) => {\n this.openTruststore(\n (event, data) => {\n if (data.success) {\n resolve(data);\n } else {\n reject(new Error(data.reason ?? 'Unknown error'));\n }\n },\n error => reject(new Error(String(error)))\n );\n });\n }\n}\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base.js';\nimport type { CallbackFunction, ErrorCallback, CertificateInfo } from '../core/types.js';\n\n/**\n * Плагин для работы с хранилищами доверенных сертификатов\n */\n@RegisterPlugin\nexport class TruststorePlugin extends EIMZOPlugin {\n readonly name = 'truststore';\n readonly description = 'Plugin for working with trust stores';\n\n /**\n * Получить список доверенных сертификатов (ЗАГЛУШКА)\n */\n listTruststore = (\n onSuccess: CallbackFunction<CertificateInfo[]>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('list_truststore', [], onSuccess, onError);\n };\n}\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base.js';\nimport type { CallbackFunction, ErrorCallback } from '../core/types.js';\n\nexport interface TimestampTokenInfo {\n timestamp: string;\n tsaName: string;\n serialNumber: string;\n messageImprint: string;\n policy?: string;\n}\n\n/**\n * Плагин для работы с токенами штампов времени\n */\n@RegisterPlugin\nexport class TSAClientPlugin extends EIMZOPlugin {\n readonly name = 'tsaclient';\n readonly description = 'Plugin for working with timestamp tokens';\n\n /**\n * Получить запрос на получения токена штампа времени для данных\n */\n getTimestampTokenRequestForData = (\n data: string,\n onSuccess: CallbackFunction<string>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_timestamp_token_request_for_data', [data], onSuccess, onError);\n };\n\n /**\n * Получить токен штампа времени на подпись от службы штампов времени по веб-ссылке\n */\n getTimestampTokenForSignature = (\n signature: string,\n tsaUrl: string,\n onSuccess: CallbackFunction<string>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_timestamp_token_for_signature', [signature, tsaUrl], onSuccess, onError);\n };\n\n /**\n * Получить токен штампа времени на данные от службы штампов времени по веб-ссылке\n */\n getTimestampTokenForData = (\n data: string,\n tsaUrl: string,\n onSuccess: CallbackFunction<string>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_timestamp_token_for_data', [data, tsaUrl], onSuccess, onError);\n };\n\n /**\n * Получить информацию о токене штампа времени\n */\n getTimestampTokenInfo = (\n token: string,\n onSuccess: CallbackFunction<TimestampTokenInfo>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_timestamp_token_info', [token], onSuccess, onError);\n };\n\n /**\n * Получить запрос на получения токена штампа времени для подписи\n */\n getTimestampTokenRequestForSignature = (\n signature: string,\n onSuccess: CallbackFunction<string>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_timestamp_token_request_for_signature', [signature], onSuccess, onError);\n };\n}\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base.js';\nimport type { CallbackFunction, ErrorCallback } from '../core/types.js';\n\n/**\n * Плагин для установки зашифрованного соединения с сервером по алг.шифрования ГОСТ-28147\n */\n@RegisterPlugin\nexport class TunnelPlugin extends EIMZOPlugin {\n readonly name = 'tunnel';\n readonly description = 'Plugin for establishing encrypted connections using GOST-28147';\n\n /**\n * Создать зашифрованного соединения с сервером и вернуть TCP-порт для приема/передачи данных\n */\n createTunnel = (\n serverHost: string,\n serverPort: number,\n keyId: string,\n onSuccess: CallbackFunction<{ port: number }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('create_tunnel', [serverHost, serverPort, keyId], onSuccess, onError);\n };\n\n // Promise-based wrapper (если нужен)\n async createTunnelAsync(serverHost: string, serverPort: number, keyId: string): Promise<unknown> {\n return new Promise((resolve, reject) => {\n this.createTunnel(\n serverHost,\n serverPort,\n keyId,\n (event, data) => {\n if (data.success) {\n resolve(data);\n } else {\n reject(new Error(data.reason ?? 'Unknown error'));\n }\n },\n error => reject(new Error(String(error)))\n );\n });\n }\n}\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base.js';\nimport type { CallbackFunction, ErrorCallback, CertificateInfo } from '../core/types.js';\n\n/**\n * Плагин для работы с сертификатами X.509\n */\n@RegisterPlugin\nexport class X509Plugin extends EIMZOPlugin {\n readonly name = 'x509';\n readonly description = 'Plugin for working with X.509 certificates';\n\n /**\n * Верификация подписи сертификата субъектка сертификатом издателя\n */\n verifyCertificate = (\n subjectCert: string,\n issuerCert: string,\n onSuccess: CallbackFunction<boolean>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('verify_certificate', [subjectCert, issuerCert], onSuccess, onError);\n };\n\n /**\n * Получить цепочку сертификатов в кодировке BASE64 по идентификатору ключа\n */\n getCertificateChain = (\n keyId: string,\n onSuccess: CallbackFunction<string[]>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_certificate_chain', [keyId], onSuccess, onError);\n };\n\n /**\n * Получить информацию о сертификате\n */\n getCertificateInfo = (\n certificate: string,\n onSuccess: CallbackFunction<CertificateInfo>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('get_certificate_info', [certificate], onSuccess, onError);\n };\n}\n","import { EIMZOPlugin, RegisterPlugin } from '../core/plugin-base.js';\nimport type { CallbackFunction, ErrorCallback, CertificateInfo } from '../core/types.js';\n\nexport interface DiskInfo {\n name: string;\n path: string;\n available: boolean;\n}\n\n/**\n * Плагин для работы с файлами хранилища ключей формата YTKS\n */\n@RegisterPlugin\nexport class YTKSPlugin extends EIMZOPlugin {\n readonly name = 'ytks';\n readonly description = 'Plugin for working with YTKS key storage files';\n\n /**\n * Удалить загруженные ключи по идентификатору\n */\n unloadKey = (\n keyId: string,\n onSuccess: CallbackFunction<boolean>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('unload_key', [keyId], onSuccess, onError);\n };\n\n /**\n * Изменить пароль хранилища ключей\n */\n changePassword = (\n disk: string,\n path: string,\n name: string,\n oldPassword: string,\n newPassword: string,\n onSuccess: CallbackFunction<boolean>,\n onError: ErrorCallback\n ): void => {\n this.callMethod(\n 'change_password',\n [disk, path, name, oldPassword, newPassword],\n onSuccess,\n onError\n );\n };\n\n /**\n * Получить список дисков\n */\n listDisks = (\n onSuccess: CallbackFunction<{ disks: DiskInfo[] }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('list_disks', [], onSuccess, onError);\n };\n\n /**\n * Получить список сертификатов пользователя\n */\n listCertificates = (\n disk: string,\n onSuccess: CallbackFunction<{ certificates: CertificateInfo[] }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('list_certificates', [disk], onSuccess, onError);\n };\n\n /**\n * Проверить пароль хранилища ключей\n */\n verifyPassword = (\n disk: string,\n path: string,\n name: string,\n password: string,\n onSuccess: CallbackFunction<boolean>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('verify_password', [disk, path, name, password], onSuccess, onError);\n };\n\n /**\n * Получить список всех сертификатов пользователя\n */\n listAllCertificates = (\n onSuccess: CallbackFunction<{ certificates: CertificateInfo[] }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('list_all_certificates', [], onSuccess, onError);\n };\n\n /**\n * Загрузить ключ и получить идентификатор ключа\n */\n loadKey = (\n disk: string,\n path: string,\n name: string,\n alias: string,\n onSuccess: CallbackFunction<{ keyId: string }>,\n onError: ErrorCallback\n ): void => {\n this.callMethod('load_key', [disk, path, name, alias], onSuccess, onError);\n };\n\n /**\n * Сохранить ключевую пару или существующий ключ и новые сертификаты в новый файл формата YTKS\n */\n saveYtks = (\n disk: string,\n path: string,\n name: string,\n password: string,\n keyId: string,\n certificates: string[],\n onSuccess: CallbackFunction<boolean>,\n onError: ErrorCallback\n ): void => {\n this.callMethod(\n 'save_ytks',\n [disk, path, name, password, keyId, certificates],\n onSuccess,\n onError\n );\n };\n}\n","import { PluginManager, type EIMZOPlugin } from './core/plugin-base.js';\nimport EIMZOClient from './e-imzo-client.js';\nimport CAPIWS from './e-imzo/capiws.js';\n\n// Type definitions for E-IMZO API responses\ninterface VersionResponse {\n success: boolean;\n major: string;\n minor: string;\n reason?: string;\n}\n\ninterface ApiResponse {\n success: boolean;\n reason?: string;\n [key: string]: unknown;\n}\n\n// Import all plugins to ensure they're registered\nimport './plugins/certkey.js';\nimport './plugins/cipher.js';\nimport './plugins/crl.js';\nimport './plugins/cryptoauth.js';\nimport './plugins/fileio.js';\nimport './plugins/ftjc.js';\nimport './plugins/idcard.js';\nimport './plugins/pfx.js';\nimport './plugins/pkcs10.js';\nimport './plugins/pkcs7.js';\nimport './plugins/pki.js';\nimport './plugins/truststore-jks.js';\nimport './plugins/truststore.js';\nimport './plugins/tsaclient.js';\nimport './plugins/tunnel.js';\nimport './plugins/x509.js';\nimport './plugins/ytks.js';\n\n// Re-export plugin instances for direct access\nexport { ftjcPlugin } from './plugins/ftjc';\nexport { pfxPlugin } from './plugins/pfx';\nexport { pkcs7Plugin } from './plugins/pkcs7';\n// Note: cryptoauth and other plugins use class-based registration, instances available via PluginManager\n\n// Re-export types\nexport * from './core/types';\nexport type { CertKeyPlugin } from './plugins/certkey';\nexport type { CipherPlugin } from './plugins/cipher';\nexport type { CertificateStatus, CRLInfo, CRLPlugin } from './plugins/crl';\nexport type { CryptoAuthPlugin } from './plugins/cryptoauth';\nexport type { FileIOPlugin } from './plugins/fileio';\nexport type { FtjcPlugin, FtjcTokenInfo } from './plugins/ftjc';\nexport type { IDCardPlugin, ReaderInfo } from './plugins/idcard';\nexport type { PfxCertificate, PfxPlugin } from './plugins/pfx';\nexport type { KeyPairInfo, PKCS10Info, PKCS10Plugin } from './plugins/pkcs10';\nexport type { Pkcs7Plugin, Pkcs7Response } from './plugins/pkcs7';\nexport type { PKIPlugin } from './plugins/pki';\nexport type { TruststorePlugin } from './plugins/truststore';\nexport type { TruststoreJKSPlugin } from './plugins/truststore-jks';\nexport type { TimestampTokenInfo, TSAClientPlugin } from './plugins/tsaclient.js';\nexport type { TunnelPlugin } from './plugins/tunnel';\nexport type { X509Plugin } from './plugins/x509';\nexport type { YTKSPlugin } from './plugins/ytks.js';\n\n/**\n * Main E-IMZO API class providing unified access to all plugins\n */\nexport class EIMZOApi {\n // Core CAPIWS access\n public readonly capiws = CAPIWS;\n\n // Legacy client for backward compatibility\n public readonly client = EIMZOClient;\n\n // Plugin manager for accessing plugins\n public readonly plugins = PluginManager;\n\n // Direct plugin access\n public readonly pfx = PluginManager.get('pfx');\n public readonly pkcs7 = PluginManager.get('pkcs7');\n public readonly ftjc = PluginManager.get('ftjc');\n public readonly cryptoauth = PluginManager.get('cryptoauth');\n public readonly truststoreJks = PluginManager.get('truststore-jks');\n public readonly tunnel = PluginManager.get('tunnel');\n public readonly certkey = PluginManager.get('certkey');\n public readonly x509 = PluginManager.get('x509');\n public readonly cipher = PluginManager.get('cipher');\n public readonly pki = PluginManager.get('pki');\n public readonly pkcs10 = PluginManager.get('pkcs10');\n public readonly idcard = PluginManager.get('idcard');\n public readonly truststore = PluginManager.get('truststore');\n public readonly crl = PluginManager.get('crl');\n public readonly fileio = PluginManager.get('fileio');\n public readonly tsaclient = PluginManager.get('tsaclient');\n public readonly ytks = PluginManager.get('ytks');\n\n /**\n * Initialize E-IMZO API and check version\n */\n async initialize(): Promise<{ major: string; minor: string }> {\n return new Promise((resolve, reject) => {\n this.client.checkVersion(\n (major, minor) => resolve({ major, minor }),\n (error, reason) => reject(new Error(reason ?? 'Version check failed'))\n );\n });\n }\n\n /**\n * Install API keys\n */\n async installApiKeys(): Promise<void> {\n return new Promise((resolve, reject) => {\n this.client.installApiKeys(\n () => resolve(),\n (error, reason) => reject(new Error(reason ?? 'API key installation failed'))\n );\n });\n }\n\n /**\n * Check if ID card is plugged in\n */\n async isIdCardPluggedIn(): Promise<boolean> {\n return new Promise((resolve, reject) => {\n this.client.idCardIsPLuggedIn(\n isPlugged => resolve(isPlugged),\n (error, reason) => reject(new Error(reason ?? 'ID card check failed'))\n );\n });\n }\n\n /**\n * Get version information\n */\n async getVersion(): Promise<{ major: string; minor: string }> {\n return new Promise((resolve, reject) => {\n this.capiws.version(\n (event, data: VersionResponse) => {\n if (data.success && data.major && data.minor) {\n resolve({ major: data.major, minor: data.minor });\n } else {\n reject(new Error(data.reason ?? 'Failed to get version'));\n }\n },\n error => reject(new Error(String(error) || 'Version check failed'))\n );\n });\n }\n\n /**\n * Get API documentation\n */\n async getApiDoc(): Promise<unknown> {\n return new Promise((resolve, reject) => {\n this.capiws.apidoc(\n (event, data: ApiResponse) => {\n if (data.success) {\n resolve(data);\n } else {\n reject(new Error(data.reason ?? 'Failed to get API documentation'));\n }\n },\n error => reject(new Error(String(error) || 'API documentation request failed'))\n );\n });\n }\n\n /**\n * Setup API keys\n */\n async setupApiKeys(domainAndKey: string[]): Promise<void> {\n return new Promise((resolve, reject) => {\n this.capiws.apikey(\n domainAndKey,\n (event, data: ApiResponse) => {\n if (data.success) {\n resolve();\n } else {\n reject(new Error(data.reason ?? 'Failed to setup API keys'));\n }\n },\n error => reject(new Error(String(error) || 'API keys setup failed'))\n );\n });\n }\n\n /**\n * Get all available plugins\n */\n getAvailablePlugins(): string[] {\n return this.plugins.getAll().map(plugin => plugin.name);\n }\n\n /**\n * Check if a plugin is available\n */\n hasPlugin(name: string): boolean {\n return this.plugins.has(name);\n }\n\n /**\n * Get plugin by name with type safety\n */\n getPlugin<T extends EIMZOPlugin>(name: string): T | undefined {\n return this.plugins.get<T>(name);\n }\n}\n\n// Create and export singleton instance\nexport const eimzoApi = new EIMZOApi();\n\n// Default export\nexport default eimzoApi;\n","/**\n * Global browser setup for E-IMZO Agnostic\n * Bu fayl browserda window obyektiga global o'zgaruvchilarni qo'shadi\n */\n\nimport EIMZOClient from './e-imzo-client.js';\nimport CAPIWS from './e-imzo/capiws.js';\nimport { eimzoApi } from './eimzo-api.js';\n\n// Global types\ndeclare global {\n interface Window {\n CAPIWS: typeof CAPIWS;\n EIMZOClient: typeof EIMZOClient;\n capiws: typeof CAPIWS;\n eimzoApi: typeof eimzoApi;\n imzoPlugins?: Record<string, unknown>;\n }\n}\n\n/**\n * Setup global objects in browser environment\n */\nexport function setupGlobalObjects(): void {\n // Browser environment tekshirish\n if (typeof window !== 'undefined') {\n const win = window;\n\n // Legacy global objects (boshqalar ishlatganidek)\n win.CAPIWS = CAPIWS;\n win.EIMZOClient = EIMZOClient;\n\n // Lowercase alias for convenience\n win.capiws = CAPIWS;\n\n // Modern API\n win.eimzoApi = eimzoApi;\n\n // Development mode - barcha pluginlarni expose qilish (browser-safe)\n const isNodeJS =\n typeof process !== 'undefined' &&\n typeof process.versions === 'object' &&\n Boolean(process.versions.node);\n const isDev = isNodeJS && process.env.NODE_ENV === 'development';\n\n if (isDev) {\n win.imzoPlugins = {\n version: '1.0.0',\n loaded: true,\n plugins: [],\n debug: true\n };\n\n console.info('🔧 E-IMZO Agnostic Library - Development Mode');\n console.info('Available APIs:', {\n CAPIWS: 'Main CAPIWS client for E-IMZO communication',\n EIMZOClient: 'Legacy E-IMZO client wrapper',\n capiws: 'Legacy alias for CAPIWS',\n eimzoApi: 'Modern plugin-based E-IMZO API',\n imzoPlugins: 'Plugin system information'\n });\n }\n\n // Log successful initialization\n if (isDev) {\n console.info('✅ E-IMZO Global Setup - Success');\n console.info('Global status:', {\n CAPIWS: Boolean(win.CAPIWS),\n EIMZOClient: Boolean(win.EIMZOClient),\n capiws: Boolean(win.capiws),\n eimzoApi: Boolean(win.eimzoApi),\n imzoPlugins: Boolean(win.imzoPlugins)\n });\n }\n }\n}\n\n// Auto-setup browser globals\nsetupGlobalObjects();\n"]}