iobroker.admin 7.4.1 → 7.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/README.md +5 -5
  2. package/admin/i18n/de/translations.json +1 -1
  3. package/adminWww/asset-manifest.json +13 -13
  4. package/adminWww/index.html +1 -1
  5. package/adminWww/static/js/288.7aa5c1cd.chunk.js +2 -0
  6. package/adminWww/static/js/288.7aa5c1cd.chunk.js.map +1 -0
  7. package/adminWww/static/js/4720.4d2f2008.chunk.js +2 -0
  8. package/adminWww/static/js/4720.4d2f2008.chunk.js.map +1 -0
  9. package/adminWww/static/js/6853.d4463ea5.chunk.js +2 -0
  10. package/adminWww/static/js/6853.d4463ea5.chunk.js.map +1 -0
  11. package/adminWww/static/js/{7137.59c61794.chunk.js → 7137.3d55bb2a.chunk.js} +2 -2
  12. package/adminWww/static/js/7137.3d55bb2a.chunk.js.map +1 -0
  13. package/adminWww/static/js/7424.25b03f3d.chunk.js +2 -0
  14. package/adminWww/static/js/7424.25b03f3d.chunk.js.map +1 -0
  15. package/adminWww/static/js/main.d9df93d8.js +2 -0
  16. package/adminWww/static/js/main.d9df93d8.js.map +1 -0
  17. package/io-package.json +222 -37
  18. package/package.json +4 -4
  19. package/adminWww/static/js/288.8fd137b7.chunk.js +0 -2
  20. package/adminWww/static/js/288.8fd137b7.chunk.js.map +0 -1
  21. package/adminWww/static/js/4720.f547d551.chunk.js +0 -2
  22. package/adminWww/static/js/4720.f547d551.chunk.js.map +0 -1
  23. package/adminWww/static/js/591.675e66af.chunk.js +0 -2
  24. package/adminWww/static/js/591.675e66af.chunk.js.map +0 -1
  25. package/adminWww/static/js/6853.be661c6e.chunk.js +0 -2
  26. package/adminWww/static/js/6853.be661c6e.chunk.js.map +0 -1
  27. package/adminWww/static/js/7137.59c61794.chunk.js.map +0 -1
  28. package/adminWww/static/js/main.d185596b.js +0 -2
  29. package/adminWww/static/js/main.d185596b.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/js/7137.3d55bb2a.chunk.js","mappings":"6KAkBA,MAAMA,EAA8B,CAChCC,YAAa,CACTC,SAAU,IACVC,SAAU,KAEdC,eAAgB,CACZC,QAAS,OACTC,SAAU,UAEdC,UAAW,CACPC,YAAa,GAEjBC,QAAS,CACLC,SAAU,IAEdC,eAAgB,CACZC,SAAU,WACVC,MAAO,EACPC,IAAK,GAETC,qBAAuBC,IAAe,CAClCC,MAAOD,EAAME,QAAQC,QAAQC,QAoJrC,EAzHoBC,IAqBkB,IArBjB,kBACjBC,EAAiB,cACjBC,EAAa,MACbC,EAAK,UACLC,EAAS,KACTC,EAAI,SACJvB,EAAQ,SACRwB,EAAQ,KACRC,EAAI,yBACJC,EAAwB,YACxBC,EAAW,QACXC,EAAO,SACPC,EAAQ,iBACRC,EAAgB,iBAChBC,EAAgB,QAChBC,EAAO,UACPC,EAAS,aACTC,EAAY,eACZjC,EAAc,aACdkC,EAAY,MACZtB,GACeK,EACf,MAAOkB,EAAOC,IAAYC,EAAAA,EAAAA,UAASJ,IACnCK,EAAAA,EAAAA,YAAU,KACNF,EAASH,EAAa,GACvB,CAACA,IAEJ,IAAIM,EAAyD,KAEzDf,IACAe,EAAOf,GAGX,MAAMb,EAAuB6B,EAAAA,MAAMC,SAAS7B,EAAOhB,EAAOe,sBAE1D,OACI+B,EAAAA,EAAAA,MAACC,EAAAA,OAAM,CACHC,MAAM,EACN7C,SAAUA,GAAY,KACtBsB,YAAaA,EACbwB,sBAAsB,EACtBlB,QAASA,EACTmB,GAAI,CAAE,mBAAoBlD,EAAOC,aAA8C+B,SAAA,CAE9ER,IACGsB,EAAAA,EAAAA,MAACK,EAAAA,YAAW,CAAAnB,SAAA,CACPJ,GAAOwB,EAAAA,EAAAA,KAACT,EAAI,CAACU,MAAOrD,EAAOO,YAAgB,KAC3CiB,EACuB,OAAvB8B,EAAAA,KAAKC,eAA0BjC,GAC5B8B,EAAAA,EAAAA,KAACI,EAAAA,WAAU,CACPC,KAAK,QACLJ,MAAO,IAAKrD,EAAOW,kBAAoBY,EAAgBR,OAAuB2C,GAC9EC,QAASA,IAAMrC,IACfE,MAAO8B,EAAAA,KAAKM,EAAE,8BAA8B5B,UAE5CoB,EAAAA,EAAAA,KAACS,EAAAA,SAAY,MAEjB,SAGZf,EAAAA,EAAAA,MAACgB,EAAAA,cAAa,CACVT,MAAO,IAAMjD,EAAiBJ,EAAOI,oBAAiBsD,KAAe1D,EAAOS,QAASsD,WAAY,GAAI/B,SAAA,CAEpGI,IACGgB,EAAAA,EAAAA,KAACY,EAAAA,UACG,CACAC,aAAa,MACbxC,WAAS,EACTyC,WAAS,EACTC,QAAQ,WACRV,KAAK,SAELW,WAAS,EACT7B,MAAOA,EACP8B,SAAUC,GAAK9B,EAAS8B,EAAEC,OAAOhC,OACjCiC,UAAW,CACPC,MAAO,CACHC,aAAcnC,GACVa,EAAAA,EAAAA,KAACuB,EAAAA,eAAc,CAAC/D,SAAS,MAAKoB,UAC1BoB,EAAAA,EAAAA,KAACI,EAAAA,WAAU,CACPC,KAAK,QACLE,QAASA,IAAMnB,EAAS,IAAIR,UAE5BoB,EAAAA,EAAAA,KAACwB,EAAAA,MAAS,QAGlB,SAMnB5C,EACAN,GAAO0B,EAAAA,EAAAA,KAAA,OAAApB,SAAMN,IAAc,SAEhCoB,EAAAA,EAAAA,MAAC+B,EAAAA,cAAa,CAAA7C,SAAA,OACQ0B,IAAhB5B,GAA6BA,KAC3BsB,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACHC,WAAW3B,EAAAA,EAAAA,KAAC4B,EAAAA,MAAS,IACrBC,SAAU3C,GAAgBX,GAAaE,GAA4BQ,IAAiBE,EACpFoB,QAASA,IAAMxB,GAAWA,EAAQC,EAAYG,EAAQ,IACtD4B,QAAQ,YACRlD,MAAM,UAASe,SAEdsB,EAAAA,KAAKM,EAAE3B,GAAoB,SAGpCmB,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACH7D,MAAM,OACN0C,QAAS5B,EACTkD,SAAUtD,EACVwC,QAAQ,YACRY,WAAW3B,EAAAA,EAAAA,KAACwB,EAAAA,MAAS,IAAI5C,SAExBsB,EAAAA,KAAKM,EAAE1B,GAAoB,iBAG/B,C,8JChKjB,MAAMlC,EAA8C,CAChDkF,MAAO,CACHC,OAAQ,OACRC,UAAW,OACXjF,SAAU,OACVG,SAAU,UAEd+E,YAAa,CACT7E,YAAa,EACb8E,MAAO,GACPH,OAAQ,IAEZI,aAAc,CACVC,MAAO,QACP9E,SAAU,GACVO,MAAO,UACPwE,cAAe,YACfC,WAAY,OACZC,YAAa,IAEjBC,UAAW,CACPN,MAAO,OACPH,OAAQ,OACR7E,SAAU,QAEdmB,UAAW,CACP6D,MAAO,QAEXO,eAAgB,CACZP,MAAO,IACPjF,QAAS,eACTyF,cAAe,OAEnBC,eAAgB,CACZT,MAAO,qBACPnF,SAAU,IACVE,QAAS,eACTyF,cAAe,MACf/B,WAAY,IAGhBiC,aAAc,CACV,EAEJC,cAAe,CACXC,gBAAiB,4BAGrBC,mBAAoB,CAChBD,gBAAiB,4BAErBE,oBAAqB,CACjBF,gBAAiB,4BAGrBG,0BAA2B,CACvBH,gBAAiB,4BAErBI,2BAA4B,CACxBJ,gBAAiB,4BAGrBK,eAAgB,CACZlG,QAAS,gBAEbmG,iBAAkB,CACdnG,QAAS,SAyCjB,MAAMoG,UAA2BC,EAAAA,UAiB7BC,WAAAA,CAAYC,GAGR,IAAIC,EAFJC,MAAMF,GAAO,KAjBAG,gBAAU,OAEVC,kBAAY,OAEZC,iBAAW,OAEXC,iBAAW,OAEXC,eAAS,OAElBC,aAAoC,CAAC,EAAE,KAEvCC,QAAE,OAEFC,qBAAe,OAyvBvBC,OAAUF,IACFG,KAAKZ,MAAMa,UAAUC,OAAS,KAAOF,KAAKG,MAAMC,WAChDJ,KAAKH,GAAKA,EACVG,KAAKK,SAAS,CAAEC,kBAAkB,KAElCN,KAAKO,aAAa,IAAIP,KAAKZ,MAAMa,YAAY,KACzCD,KAAKF,gBAAkB,CAAC,EACxBE,KAAKJ,aAAeI,KAAKQ,kBACzBR,KAAKK,SAAS,CAAED,WAAW,EAAOK,gBAAYvE,EAAWwE,UAAW,CAAC,IAAK,KACtEV,KAAKZ,MAAMuB,iBAAiBX,KAAKT,YACjCS,KAAKZ,MAAMvC,UAAS,GAAO,GACvBgD,GACAe,YAAW,IAAMf,KAAM,IAC3B,GACF,GAEV,EAnwBA,IACIR,EAAWwB,KAAKC,OACVC,OAAeC,eAAiBD,OAAOE,cAAcC,QAAQ,wBAA0B,KAEjG,CAAE,MACE7B,EAAW,EACf,CAEAW,KAAKT,WAAa,GAElBS,KAAKG,MAAQ,CACTgB,QAAQ,EACR9B,WACAqB,UAAW,CAAC,EACZN,WAAW,EACXE,kBAAkB,EAClBc,QAAS,EACTC,aAAcrB,KAAKZ,MAAMiC,cAG7BrB,KAAKR,cAAe8B,EAAAA,EAAAA,aAEpBtB,KAAKP,YAAc,CAAC,EAEpBO,KAAKN,YAAc,CAAC,EACpBM,KAAKZ,MAAMmC,iBAAiBC,KAAIC,GAAOzB,KAAKN,YAAY+B,IAAMH,EAAAA,EAAAA,eAE9DtB,KAAKL,UACDK,KAAKZ,MAAMa,UAAUC,OAAS,EACvB,CAAEwB,OAAQ,CAAEC,OAAQ,CAAC,GAAKC,OAAQ,CAAC,GACpCC,EAAAA,EAAWC,UAAU9B,KAAKZ,MAAM2C,QAAQ/B,KAAKZ,MAAMa,UAAU,KAAO,MAE1ED,KAAKL,WACAK,KAAKgC,iBAAiBC,MAAK,KAC5BjC,KAAKJ,aAAeI,KAAKQ,kBACzBR,KAAKK,SAAS,CAAEc,QAAQ,EAAMT,UAAW,CAAC,GAAI,GAG1D,CAEA,uBAAMwB,GACGlC,KAAKG,MAAMkB,cACZrB,KAAKK,SAAS,CAAEgB,mBAAoBrB,KAAKZ,MAAM+C,OAAOC,2BAGtDpC,KAAKZ,MAAMiD,kBACXrC,KAAKZ,MAAMiD,iBAAiBrC,KAAKD,OAEzC,CAEAuC,oBAAAA,GACQtC,KAAKZ,MAAMiD,kBACXrC,KAAKZ,MAAMiD,kBAEnB,CAEA,oBAAML,GACF,MAAMO,EAA4B,GAClC,IAAK,MAAMd,KAAMzB,KAAKZ,MAAMmC,iBAAkB,CAC1C,GAAW,MAAPE,EACA,SAGJ,MAAMe,EAAUf,EAAGgB,QAAQ,SAAU,IAAIA,QAAQ,kBAAmB,SAClCvG,IAA9B8D,KAAKP,YAAY+C,KACjBxC,KAAKP,YAAY+C,GAAW,KAC5BD,EAASG,KAAK1C,KAAK2C,kBAAkBH,IAE7C,OAEMI,QAAQC,IAAIN,GAElBvC,KAAKZ,MAAMmC,iBAAiBuB,SAAQrB,IAChC,MAAMe,EAAUf,EAAGgB,QAAQ,SAAU,IAAIA,QAAQ,kBAAmB,IACpC,IAADM,EAAAC,EAA3BhD,KAAKP,YAAY+C,KACjBxC,KAAKP,YAAY+C,GAASS,aAAejD,KAAKP,YAAY+C,GAASS,cAAgB,CAAC,EACpFjD,KAAKP,YAAY+C,GAASS,aAAaxB,GAAM,CACzCyB,IAAKzB,EACLC,OAAQb,KAAKC,MAAMD,KAAKsC,UAAoD,QAA3CJ,EAAC/C,KAAKZ,MAAM2C,QAAQ,kBAAkBN,YAAK,IAAAsB,OAAA,EAA1CA,EAA4CrB,SAC9EE,OAAQf,KAAKC,MAAMD,KAAKsC,UAAoD,QAA3CH,EAAChD,KAAKZ,MAAM2C,QAAQ,kBAAkBN,YAAK,IAAAuB,OAAA,EAA1CA,EAA4CpB,SAC9EwB,KAAM,WACNC,gBAAiB,GACjBtB,QAAS,IAEjB,GAER,CAEA,uBAAMY,CAAkBH,GAAiC,IAADc,EACpD,MAAMC,EAAKvD,KAAKZ,MAAM2C,QAAQ,kBAAkBS,KAC1CX,EAAAA,EAAWC,UAAU9B,KAAKZ,MAAM2C,QAAQ,kBAAkBS,MAC1D,KAEN,GAAKe,EAAL,CAMA,GAFA1B,EAAAA,EAAW2B,WAAWD,GAEY,UAArB,QAATD,EAAAC,EAAG7B,cAAM,IAAA4B,OAAA,EAATA,EAAWG,QAAQ9B,QACnB,IAKI,IAAI+B,QAJgB1D,KAAKZ,MAAM+C,OAAOwB,WAAW,GAAGnB,UAAiB,2BAE3DxC,KAAKZ,MAAM+C,OAAOyB,SAAS,GAAGpB,UAAiB,oBAGzD,MAAMqB,QAGI7D,KAAKZ,MAAM+C,OAAOyB,SAAS,GAAGpB,UAAiB,mBAQzD,IAAIsB,EALAJ,OADcxH,IAAd2H,EAAKE,KACMF,EAAKE,KAGLF,EAGf,IACIC,EAAaE,IAAAA,MAAYN,GACzB1D,KAAKP,YAAY+C,GAAWxC,KAAKP,YAAY+C,IAAY,CAAC,EAC1DxC,KAAKP,YAAY+C,GAASqB,KAAOC,CACrC,CAAE,MAAOhH,GACLmH,QAAQC,MAAM,8BAA8B1B,MAAY1F,KACxDiE,OAAOoD,MAAM,8BAA8B3B,MAAY1F,IAC3D,CAGA,kBADMsH,EAAAA,oBAAoBC,SAASrE,KAAKZ,MAAM+C,OAAQ2B,EAAWQ,KAAM9B,EAE3E,CAAE,MAAO+B,GACLN,QAAQC,MAAM,6BAA6B1B,MAAY+B,KACvDxD,OAAOoD,MAAM,6BAA6B3B,MAAY+B,IAC1D,CAEJN,QAAQC,MAAM,WAAW1B,mDACzBzB,OAAOoD,MAAM,WAAW3B,kDAvCxB,MAFIyB,QAAQC,MAAM,wBAAwB1B,KA0C9C,CAGAgC,cAAAA,CACIC,EACAC,EACA/E,EACAgF,EACAC,EACAC,EACAC,GAEA,GAAIA,EAAUC,SAASF,GACnB,OAEJC,EAAUpC,KAAKmC,GAEf,IACIG,EADAC,EAA0B,GAoC9B,GAjCIR,GAAwB,kBAATA,GACfQ,EAAgBR,EAAKQ,eAAiB,GACT,kBAAlBA,IACPA,EAAgB,CAACA,IAErBD,EAAUP,EAAKA,MAEfO,EAAUP,EAGdQ,EAAcnC,SAAQoC,IAClB,GAAKN,EAAMM,GAEJ,GAAKN,EAAMM,GAAOC,YAIlB,CACH,MAAMC,EAASpF,KAAKwE,eAChBI,EAAMM,GAAOC,YACbT,EACA/E,EACAgF,EACAC,EACAM,EACAJ,QAEW5I,IAAXkJ,IACAV,EAAKQ,GAASE,EAEtB,MAhBInB,QAAQC,MACJ,oCAAoCgB,qFAHxCjB,QAAQC,MAAM,oCAAoCgB,qBAkBtD,IAGCF,EAGD,IAEI,MAAMK,EAAI,IAAIC,SACV,OACA,eACA,UACA,cACA,YACA,UACAN,EAAQD,SAAS,UAAYC,EAAU,UAAUA,KAErDN,EAAKG,GAAQQ,EACTX,GAAQ1E,KAAKZ,MAAMsF,KACnB1E,KAAKZ,MAAMmG,aACXvF,KAAKZ,MAAMiC,aACXsD,EACAhF,EACAK,KAAKZ,MAAM+C,OAEnB,CAAE,MAAOrF,GAELmH,QAAQC,MAAM,kBAAkBO,MAAS3H,KACzC4H,EAAKG,GAASD,EAAMC,SAAiC3I,IAAxB0I,EAAMC,GAAMW,QAA+BZ,EAAMC,GAAMW,QAAnB,IACrE,MAzBAd,EAAKG,QAAgC3I,IAAxB0I,EAAMC,GAAMW,QAAwB,KAAOZ,EAAMC,GAAMW,QA4BxE,OAAOd,EAAKG,EAChB,CAEA,mBAAOY,CAAab,GAAqF,IAAzDc,EAA4BC,UAAAzF,OAAA,QAAAhE,IAAAyJ,UAAA,GAAAA,UAAA,GAAG,CAAC,EAW5E,OAVIf,GACAgB,OAAOC,KAAKjB,GAAO9B,SAAQ+B,IACnBD,EAAMC,GAAMD,MACZ3F,EAAmBwG,aAAab,EAAMC,GAAMD,MAAOc,GAEnDA,EAAQb,GAAQD,EAAMC,EAC1B,IAIDa,CACX,CAEAI,gBAAAA,CAAiBC,EAAkBC,GAC/B,MAAMC,EAAqC,CAAEC,SAAS,GAChD1D,EAAUuD,EAASI,MAAM,KAAK,GAEpC,GAAInG,KAAKP,YAAY+C,KAAaxC,KAAKP,YAAY+C,GAAS/E,SAAU,CAClE,MAAMmH,EAAQ3F,EAAmBwG,aAAazF,KAAKP,YAAY+C,GAASqB,KAAKe,OAE7E,GAAIA,EAAO,CACP,MAAME,EAAsB,GACtBsB,EAAQR,OAAOC,KAAKjB,GAAOyB,QAAOxB,GAAQD,EAAMC,KAEtDuB,EAAMtD,SAAQ+B,IACLD,EAAMC,GAAMM,kBAAuCjJ,IAAxB0I,EAAMC,GAAMW,UACxCS,EAAcpB,GAAQD,EAAMC,GAAMW,QACtC,IAIJY,EAAMtD,SAAS+B,IACPD,EAAMC,GAAMM,aACZnF,KAAKwE,eACDI,EAAMC,GAAMM,YACZc,EACAD,EACAhG,KAAKP,YAAY+C,GAASS,aAAa8C,GACvCnB,EACAC,EACAC,EAER,GAER,CACJ,CAEA,OAAOmB,CACX,CAEAzF,eAAAA,GACI,MAAM8F,EAAMtG,KAAKZ,MAAMa,WAAa,GAC9B8B,EAAU/B,KAAKZ,MAAM2C,QAErBwE,EAA+B,CAAC,EAkEtC,OA/DAvG,KAAKZ,MAAMmC,iBAAiBuB,SAAQ0D,IAChC,MAAMhE,EAAUgE,EAAKL,MAAM,KAAK,GAC5BnG,KAAKP,YAAY+C,IAAYxC,KAAKP,YAAY+C,GAAS/E,WAG3D8I,EAAQC,GAAQ,CAAC,EACjBF,EAAIxD,SAAQrB,IAAO,IAADgF,EACd,MAAM9G,EAAYoC,EAAQN,GACpBE,EAAkB,OAAThC,QAAS,IAATA,GAAiB,QAAR8G,EAAT9G,EAAW+B,cAAM,IAAA+E,GAAjBA,EAAmB9E,QAAShC,EAAU+B,OAAOC,OAAO6E,IAAgB,KAEnF,GAAI7E,EACAiE,OAAOC,KAAKlE,GAAQmB,SAAQoC,IAEpBA,EAAMwB,WAAW,YAGQxK,IAAzBqK,EAAQC,GAAMtB,GACdqB,EAAQC,GAAMtB,GAASvD,EAAOuD,GACvBqB,EAAQC,GAAMtB,KAAWvD,EAAOuD,KAElCyB,MAAMC,QAAQL,EAAQC,GAAMtB,MAC7BqB,EAAQC,GAAMtB,GAAS,CAACqB,EAAQC,GAAMtB,KAGrCqB,EAAQC,GAAMtB,GAAOH,SAASpD,EAAOuD,KACtCqB,EAAQC,GAAMtB,GAAOxC,KAAKf,EAAOuD,KAEzC,QAED,CAGH,MAAM2B,EAAW7G,KAAK8F,iBAAiBU,EAAM7G,GAC7CkH,EAASX,SAAU,EAEnBN,OAAOC,KAAKgB,GAAU/D,SAAQoC,IACtBA,EAAMwB,WAAW,YAGQxK,IAAzBqK,EAAQC,GAAMtB,GACdqB,EAAQC,GAAMtB,GAAS2B,EAAS3B,GACzBqB,EAAQC,GAAMtB,KAAW2B,EAAS3B,KAEpCyB,MAAMC,QAAQL,EAAQC,GAAMtB,MAC7BqB,EAAQC,GAAMtB,GAAS,CAACqB,EAAQC,GAAMtB,KAGrCqB,EAAQC,GAAMtB,GAAOH,SAAS8B,EAAS3B,KACxCqB,EAAQC,GAAMtB,GAAOxC,KAAKmE,EAAS3B,KAE3C,GAER,KAIJU,OAAOC,KAAKU,EAAQC,IAAO1D,SAAQ+B,IAC3B8B,MAAMC,QAAQL,EAAQC,GAAM3B,KAC5B0B,EAAQC,GAAM3B,GAAMiC,MACxB,IACF,IAGCP,CACX,CAEAQ,SAAAA,CAAUrG,GAEN,OADAA,EAAYA,GAAaV,KAAKG,MAAMO,UAC7BkF,OAAOC,KAAKnF,GAAWsG,MAC1BjB,GAC4B,OAAxBrF,EAAUqF,IACTrF,EAAUqF,IAAaH,OAAOC,KAAKnF,EAAUqF,IAAWiB,MAAKnC,IAASA,EAAK6B,WAAW,QAEnG,CAEAO,gBAAAA,CAAiBlB,GAAkE,IAAhDmB,EAAgBvB,UAAAzF,OAAA,QAAAhE,IAAAyJ,UAAA,IAAAA,UAAA,GAC/C,MAAMjB,EAAO,IAAM1E,KAAKJ,aAAamG,IAAa,CAAC,KAAQ/F,KAAKG,MAAMO,UAAUqF,IAAa,CAAC,GAa9F,OAXImB,GACAtB,OAAOC,KAAKnB,GAAM5B,SAAQ+B,IAClBA,EAAK6B,WAAW,aACThC,EAAKG,EAChB,IAI+B,OAAnC7E,KAAKG,MAAMO,UAAUqF,KACrBrB,EAAKwB,SAAU,GAEZxB,CACX,CAEAyC,eAAAA,CACIpB,EACApB,EACAhF,EACAyH,GACmB,IAADC,EAAAC,EAAAC,EAClB,MAAM/E,EAAUuD,EAASI,MAAM,KAAK,GAE9B/L,EAAO,aAAyBoI,KAAWxC,KAAKZ,MAAM2C,QAAQ,kBAAkBS,KAAWd,OAAOtH,OAElG8L,OACiChK,IAAnC8D,KAAKG,MAAMO,UAAUqF,IACnB/F,KAAKG,MAAMO,UAAUqF,SAAwD7J,IAA3C8D,KAAKG,MAAMO,UAAUqF,GAAUG,QAE1B,OAAnClG,KAAKG,MAAMO,UAAUqF,IAEnB/F,KAAKJ,aAAamG,GAAUG,WAH3BlG,KAAKG,MAAMO,UAAUqF,KAAa/F,KAAKG,MAAMO,UAAUqF,GAAUG,SAIxEsB,EACFb,MAAMC,QAAQV,MACZlG,KAAKG,MAAMO,UAAUqF,SAAwD7J,IAA3C8D,KAAKG,MAAMO,UAAUqF,GAAUG,SAEjEzI,EAAoC,QAA5B4J,EAAGrH,KAAKP,YAAY+C,UAAQ,IAAA6E,GAAM,QAANC,EAAzBD,EAA2BxD,YAAI,IAAAyD,OAAN,EAAzBA,EAAiC7J,SAE5CiH,EAAO1E,KAAKiH,iBAAiBlB,GAEnC,GAAItI,IAAsD,IAA1CuC,KAAKP,YAAY+C,GAASqB,KAAK4D,OAC3C,OAAO,KAGX,GAAqD,kBAA1CzH,KAAKP,YAAY+C,GAASqB,KAAK4D,QAGlCzH,KAAKwE,eACDxE,KAAKP,YAAY+C,GAASqB,KAAK4D,OAC/B/C,EACA/E,EACAgF,EACA3E,KAAKP,YAAY+C,GAASqB,KAAKe,MAC/B,UACA,IAGJ,OAAO,KAIf,IAAI1K,EAAO,KAWX,OAVIuD,GAAYuC,KAAKP,YAAY+C,GAASqB,KAAK3J,OAEvCA,EAD+C,kBAAxC8F,KAAKP,YAAY+C,GAASqB,KAAK3J,KAEjC8F,KAAKP,YAAY+C,GAASqB,KAAK3J,KAA4C8F,KAAKZ,MAAMsI,OACtF1H,KAAKP,YAAY+C,GAASqB,KAAK3J,KAA4CyN,GAEzE3H,KAAKZ,MAAMhD,EAAE4D,KAAKP,YAAY+C,GAASqB,KAAK3J,QAKvDoB,EAAAA,EAAAA,MAACsM,EAAAA,UAAS,CAENnG,GAAI,aAAasE,IACjBlK,MAAOuL,EAAI,EAAI5O,EAAOgG,aAAehG,EAAOiG,cAC5CY,SAAUW,KAAKG,MAAMd,SAAS0F,SAASgB,GACvC8B,IAAK7H,KAAKN,YAAYqG,GACtBlJ,SAAUA,KACN,MAAMwC,EAAW,IAAIW,KAAKG,MAAMd,UAC1ByI,EAAMzI,EAAS0I,QAAQhC,IAChB,IAAT+B,EACAzI,EAASqD,KAAKqD,GAEd1G,EAAS2I,OAAOF,EAAK,IAEvB/G,OAAeC,eAAiBD,OAAOE,cAAcgH,QACnD,sBACApH,KAAKsC,UAAU9D,KAEN,IAATyI,IACE/G,OAAeC,eAAiBD,OAAOE,cAAcgH,QACnD,0BACAlC,GAGR/F,KAAKK,SAAS,CAAEhB,YAAW,EAC7B7E,SAAA,EAEFc,EAAAA,EAAAA,MAAC4M,EAAAA,iBAAgB,CACbC,YAAYvM,EAAAA,EAAAA,KAACwM,EAAAA,WAAc,IAC3B,UAASrC,EACTlK,MACIuL,EAAI,EACElB,EACI1N,EAAOqG,0BACPrG,EAAOmG,mBACXuH,EACE1N,EAAOsG,2BACPtG,EAAOoG,oBAClBpE,SAAA,EAEDoB,EAAAA,EAAAA,KAAA,OACIyM,IAAKjO,EACLyB,MAAOrD,EAAOqF,YACdyK,IAAI,MAER1M,EAAAA,EAAAA,KAAC2M,EAAAA,WAAU,CAAC1M,MAAOrD,EAAOgQ,QAAQhO,SAAEwF,KAAKZ,MAAMhD,EAAE,cAAe2J,MAChEnK,EAAAA,EAAAA,KAAA,OACI6M,UAAU,eACV5M,MAAO,IACArD,EAAOuF,gBACNmI,EAAU1N,EAAOuG,eAAiBvG,EAAOwG,kBAC/CxE,SAEDwF,KAAKZ,MAAMhD,EAAE,iBAGtBd,EAAAA,EAAAA,MAACoN,EAAAA,iBAAgB,CAAAlO,SAAA,EACboB,EAAAA,EAAAA,KAAA,OAAKC,MAAOrD,EAAO6F,eAAe7D,UAC9BoB,EAAAA,EAAAA,KAAC+M,EAAAA,iBAAgB,CACb9M,MAAOrD,EAAOoQ,YACdC,SACIjN,EAAAA,EAAAA,KAACkN,EAAAA,SAAQ,CACLC,cAAevB,EACfwB,UAAW9C,EACXzI,WAAYA,EACZZ,SAAUC,IACNkD,KAAKF,gBAAkBE,KAAKF,iBAAmBE,KAAKG,MAAMO,UAC1D,MAAMA,EAAYmB,EAAAA,EAAWC,UAAU9B,KAAKF,iBAE5CY,EAAUqF,GAAYrF,EAAUqF,IAAa,CAAC,EAC1CyB,GAAmB1K,EAAEC,OAAOiM,QAC5BtI,EAAUqF,GAAUG,SAAU,EACvBA,GACHlG,KAAKJ,aAAamG,GAAUG,QAC5BxF,EAAUqF,GAAY,YAKnBrF,EAAUqF,GAErB/F,KAAKF,gBAAkBY,EACvBV,KAAKK,SAAS,CAAEK,YAAWD,WAAYT,KAAK+G,UAAUrG,KAAc,KAChEV,KAAKF,qBAAkB5D,EACnB8D,KAAKZ,MAAMvC,UACXmD,KAAKZ,MAAMvC,WAAWmD,KAAKG,MAAMM,WACrC,GACF,IAIdwI,MAAOjJ,KAAKZ,MAAMhD,EAAE,gBAG5Bd,EAAAA,EAAAA,MAAA,OAAKO,MAAOrD,EAAO+F,eAAe/D,SAAA,EAC5BiD,IAAayI,GAAWsB,IAAoBxH,KAAKG,MAAMkB,cACrDzF,EAAAA,EAAAA,KAACwI,EAAAA,oBAAmB,CAChBO,YAAaA,EACbhF,UAAWA,EACXgC,QAAM,EACNuH,YAAa1G,EACbuD,SAAUoD,SAAmC,QAA3B5B,EAAS,OAARxB,QAAQ,IAARA,OAAQ,EAARA,EAAUI,MAAM,KAAKiD,aAAK,IAAA7B,EAAAA,EAAI,IAAK,KAAO,EAC7DpF,OAAQnC,KAAKZ,MAAM+C,OACnBkH,UAAWrJ,KAAKZ,MAAMiK,UACtBC,UAAWtJ,KAAKZ,MAAMkK,UACtB9P,MAAOwG,KAAKZ,MAAM5F,MAClB+P,UAAWvJ,KAAKZ,MAAMa,UAAUC,OAAS,EACzCsJ,OAAQxJ,KAAKP,YAAY+C,GAASqB,KAClCa,KAAMA,EACN+E,aAAczJ,KAAKZ,MAAMiC,aAAaK,OAAO+H,aAC7CC,WAAY1J,KAAKZ,MAAMiC,aAAaK,OAAOgI,WAC3CC,QAAUzF,GACNlE,KAAKK,SAAS,CAAE6D,UAAS,IAAMlE,KAAKZ,MAAMuK,SAAW3J,KAAKZ,MAAMuK,QAAQzF,KAE5E0F,cAAeA,CAAC/E,EAAc9J,KAAgB,IAAD8O,EACzC7J,KAAKF,gBAAkBE,KAAKF,iBAAmBE,KAAKG,MAAMO,UAC1DuD,QAAQ6F,IAAI,GAAGjF,QAAW9J,KAC1B,MAAM2F,EAAYmB,EAAAA,EAAWC,UAAU9B,KAAKF,iBAC5CY,EAAUqF,GAAYrF,EAAUqF,IAAa,CAAC,EAE1ClF,KAAKsC,UAAU4G,EAAAA,cAAcC,SAA0B,QAAlBH,EAAC7J,KAAKJ,oBAAY,IAAAiK,OAAA,EAAjBA,EAAoB9D,GAAWlB,MACrEhE,KAAKsC,UAAUpI,IAEfgP,EAAAA,cAAc/O,SAAS0F,EAAUqF,GAAWlB,EAAM,MAC7Ce,OAAOC,KAAKnF,EAAUqF,IAAW7F,eAC3BQ,EAAUqF,IAGrBgE,EAAAA,cAAc/O,SAAS0F,EAAUqF,GAAWlB,EAAM9J,GAEtDiF,KAAKF,gBAAkBY,EACvBV,KAAKK,SAAS,CAAEK,YAAWD,WAAYT,KAAK+G,UAAUrG,KAAc,KAChEV,KAAKF,qBAAkB5D,EACnB8D,KAAKZ,MAAMvC,UACXmD,KAAKZ,MAAMvC,WAAWmD,KAAKG,MAAMM,WACrC,GACF,IAGV,KAEHvG,UA5IJ6L,EAiJjB,CAEAkE,kBAAAA,GACI,QACMjK,KAAKG,MAAM+D,QACTtI,EAAAA,EAAAA,KAACsO,EAAAA,YAAW,CACRlQ,MAAOgG,KAAKZ,MAAMhD,EAAE,SACpB+N,KAAMnK,KAAKG,MAAM+D,MAAQ,QAAU,GACnC3J,QAASA,IAAMyF,KAAKK,SAAS,CAAE6D,OAAO,KAItD,CAEAkG,SAAAA,CACIrI,EACAsI,EACA5I,GAEA,OAAIM,EAAQN,GACDmB,QAAQ0H,QAAQvI,EAAQN,IAE5BzB,KAAKZ,MAAM+C,OAAOiI,UAAU3I,GAAIQ,MAAM+D,IACzCqE,EAAW5I,GAAMI,EAAAA,EAAWC,UAAUkE,GACtCjE,EAAQN,GAAMuE,EACPA,IAEf,CAEAzF,YAAAA,CAAa+F,EAAezG,EAAgB0K,EAAgBC,GAIxD,GAHAD,EAAWA,GAAY,CAAC,EACxBC,EAAcA,GAAe,CAAC,EAEtB,OAAHlE,QAAG,IAAHA,GAAAA,EAAKpG,OA8BH,CACH,MAAMkB,EAAUpB,KAAKG,MAAMiB,SAAWkF,EAAIpG,OAEf,OAAvBF,KAAKG,MAAMiB,SACXpB,KAAKK,SAAS,CAAEe,QAASkF,EAAIpG,SAAU,IAAMF,KAAKZ,MAAMqL,YAAW,KAIvEzK,KAAKK,SAAS,CAAElG,SAAUuQ,KAAKC,OAAQvJ,EAAUkF,EAAIpG,QAAUkB,EAAW,MAE1E,MAAMK,EAAK6E,EAAIsE,QACf5K,KAAKoK,UAAUG,EAAUC,EAAa/I,GAAIQ,MAAM+D,IAA8B,IAAD6E,EACzE,IAAK7E,EAED,YADAjF,OAAOoD,MAAM,kBAAkB1C,KAKrB,QAAdoJ,EAAI7E,EAAItE,cAAM,IAAAmJ,GAAVA,EAAYlJ,QACZiE,OAAOC,KAAKG,EAAItE,OAAOC,QAAQmB,SAAQgI,IAC9B9E,EAAItE,OAAOC,OAAOmJ,IAAS9E,EAAItE,OAAOC,OAAOmJ,GAAK5E,UACnDF,EAAItE,OAAOC,OAAOmJ,GAAO,KAC7B,IAIR,MAAMC,EAAYnF,OAAOC,KAAK7F,KAAKG,MAAMO,WAEzC,IAAK,IAAI0G,EAAI,EAAGA,EAAI2D,EAAU7K,OAAQkH,IAAK,CACvC,MAAMrB,EAAWgF,EAAU3D,GAErB1G,EAAYV,KAAKiH,iBAAiBlB,GAAU,GAEhB,IAADiF,EAAAC,EAAjC,IAA0B,IAAtBvK,EAAUwF,QACI,QAAd8E,EAAIhF,EAAItE,cAAM,IAAAsJ,GAAQ,QAARC,EAAVD,EAAYrJ,cAAM,IAAAsJ,GAAlBA,EAAqBlF,KACrBC,EAAItE,OAAOC,OAAOoE,GAAY,WAE/B,GAAIrF,EAAUwF,QAAS,CAE1B,GADAF,EAAItE,OAASsE,EAAItE,QAAU,CAAC,EACxBiF,MAAMC,QAAQlG,EAAUwF,YAEnBF,EAAItE,OAAOC,SACXqE,EAAItE,OAAOC,OAAOoE,KAClBC,EAAItE,OAAOC,OAAOoE,GAAUG,SAC/B,CAEMF,EAAItE,OAAOC,QAAUqE,EAAItE,OAAOC,OAAOoE,KACvCC,EAAItE,OAAOC,OAAOoE,GAAY,MAElC,QACJ,CAKJ,GAFAC,EAAItE,OAAOC,OAASqE,EAAItE,OAAOC,QAAU,CAAC,GAErCqE,EAAItE,OAAOC,OAAOoE,KAAcC,EAAItE,OAAOC,OAAOoE,GAAUG,QAAS,CAEtE,MAAMW,EAAW7G,KAAK8F,iBAAiBC,EAAUC,GACjDA,EAAItE,OAAOC,OAAOoE,GAAYlF,KAAKC,MAAMD,KAAKsC,UAAU0D,GAAY,CAAC,IAErEjB,OAAOC,KAAKG,EAAItE,OAAOC,OAAOoE,IAAWjD,SAAQ+B,IACzCA,EAAK6B,WAAW,aACTV,EAAItE,OAAOC,OAAOoE,GAAUlB,EACvC,GAER,CAEA,MAAMqG,EAAclL,KAAKZ,MAAMa,UAAUC,OAAS,EAElD8F,EAAItE,OAAOC,OAAOoE,GAAUG,SAAU,EAEtCN,OAAOC,KAAKnF,GAAWoC,SAAQ+B,IAE3B,IAAKA,EAAK6B,WAAW,KAAM,CAEvB,GAAIC,MAAMC,QAAQlG,EAAUmE,KAAUqG,EAClC,OAGJlF,EAAItE,OAAOC,OAAOoE,GAAUlB,GAAQnE,EAAUmE,EAClD,IAER,CACJ,CAEAjE,YAAW,IAAMZ,KAAKO,aAAa+F,EAAKzG,EAAI0K,EAAUC,IAAc,EAAE,GAE9E,KArHkB,CAEd,MAAM3E,EAAiBD,OAAOC,KAAK0E,GACnC,GAAK1E,EAAK3F,OAKH,CACHF,KAAKK,SAAS,CACVlG,SAAUuQ,KAAKC,OAAQ3K,KAAKG,MAAMiB,QAAUyE,EAAK3F,QAAUF,KAAKG,MAAMiB,QAAW,IAAM,KAE3F,MAAMK,EAAKoE,EAAK+E,QAChB,GAAI/J,KAAKsC,UAAUoH,EAAS9I,GAAIC,UAAYb,KAAKsC,UAAUqH,EAAY/I,GAAIC,QAWvE,OAVK1B,KAAKT,WAAWwF,SAAStD,IAC1BzB,KAAKT,WAAWmD,KAAKjB,QAGpBzB,KAAKZ,MAAM+C,OAAOgJ,UAAU1J,EAAI8I,EAAS9I,IAAKQ,MAAKmJ,iBAC7Cb,EAAS9I,UACT+I,EAAY/I,GACnBzB,KAAKZ,MAAM2C,QAAQN,SAAYzB,KAAKZ,MAAM+C,OAAOiI,UAAU3I,GAC3Db,YAAW,IAAMZ,KAAKO,aAAa+F,EAAKzG,EAAI0K,EAAUC,IAAc,EAAE,WAIvED,EAAS9I,UACT+I,EAAY/I,GACnBb,YAAW,IAAMZ,KAAKO,aAAa+F,EAAKzG,EAAI0K,EAAUC,IAAc,EACxE,MAzBIxK,KAAKK,SAAS,CAAEe,QAAS,IAAK,IAAMpB,KAAKZ,MAAMqL,YAAW,KACtD5K,GACAA,GAwBZ,CAwFJ,CAEAwL,wBAAAA,GACI,OAAKrL,KAAKG,MAAMG,kBAIZ1E,EAAAA,EAAAA,KAAC0P,EAAAA,cAAa,CACVnB,KAAMnK,KAAKZ,MAAMhD,EACb,0DACA4D,KAAKZ,MAAMa,UAAUC,OAAOqL,YAEhCC,GAAIxL,KAAKZ,MAAMhD,EAAE,OACjB7B,QAAS6K,IACDA,EACApF,KAAKK,SAAS,CAAEC,kBAAkB,EAAOF,WAAW,IAAQ,KACxD,MAAMP,EAAKG,KAAKH,GAChBG,KAAKH,QAAK3D,EACV8D,KAAKD,OAAOF,EAAG,KAGnBG,KAAKH,QAAK3D,EACV8D,KAAKK,SAAS,CAAEC,kBAAkB,IACtC,IAnBD,IAuBf,CAqBAmL,MAAAA,GACI,GAAuB,OAAnBzL,KAAKL,UACL,OAAO/D,EAAAA,EAAAA,KAAA,OAAKC,MAAO,CAAEpC,MAAO,OAAQP,SAAU,IAAKsB,SAAEwF,KAAKZ,MAAMhD,EAAE,4BAEtE,IAAK4D,KAAKG,MAAMgB,OACZ,OAAOvF,EAAAA,EAAAA,KAAC8P,EAAAA,eAAc,IAE1B,IAAIC,EAAQ,EAEZ,OACIrQ,EAAAA,EAAAA,MAACsQ,EAAAA,MAAK,CAAC/P,MAAOrD,EAAOkF,MAAMlD,SAAA,CACtBwF,KAAKG,MAAMiB,QAAU,IAClBxF,EAAAA,EAAAA,KAAC8P,EAAAA,eAAc,CACXjS,MAAM,YACNkD,QAAQ,cACR5B,MAAOiF,KAAKG,MAAMhG,YAG1ByB,EAAAA,EAAAA,KAAA,OACIC,MAAOrD,EAAO4F,UACdyJ,IAAK7H,KAAKR,aAAahF,SAEC,IAAvBwF,KAAKG,MAAMiB,SACRwE,OAAOiG,OAAO7L,KAAKP,aAAa+B,KAAIsK,GAC5BA,EACOlG,OAAOC,KAAKiG,EAAW7I,cAAczB,KAAIuE,GAC5C/F,KAAKmH,gBACDpB,EACA+F,EAAW7I,aAAa8C,GACxB/F,KAAKL,UACLgM,OAIL,SAGlB3L,KAAKiK,qBACLjK,KAAKqL,6BAGlB,EAGJ,SAAeU,EAAAA,EAAAA,YAAf,CAA2B9M,G,+CC17BpB,MAAM+M,EAAY,CACrBrE,GAAIsE,EAAAA,KACJC,GAAIC,EAAAA,GACJC,GAAIC,EAAAA,GACJC,GAAIC,EAAAA,GACJC,GAAIC,EAAAA,GACJC,GAAIC,EAAAA,KACJC,GAAIC,EAAAA,GACJC,GAAIC,EAAAA,GACJC,GAAIC,EAAAA,GACJC,GAAIC,EAAAA,GACJC,GAAIC,EAAAA,GACJ,QAASC,EAAAA,MCmBP9U,EAA8B,CAChCkF,MAAO,CACHC,OAAQ,OACRC,UAAW,OACXjF,SAAU,OACVG,SAAU,UAEdyU,SAAW/T,IAAe,CACtBmE,OAAQ,eAAewL,SAAS3P,EAAMgU,OAAOC,QAAQC,UAAqB,IAAM,OAChF5U,SAAU,SACVgF,MAAO,SAEX6P,UAAW,CACPhQ,OAAQ,QAEZiQ,MAAQpU,IAAe,CAEnBd,SAAU,IACVoF,MAAO,OACP,sBAAuB,CACnBhF,SAAU,SACV+U,WAAY,UAEhB,uBAAwB,CACpBnP,gBAAwC,SAAvBlF,EAAME,QAAQoU,KAAkB,UAAY,aAGrEC,IAAK,CACDC,WAAY,OAIZ5U,SAAU,WACV,UAAW,CACP6U,QAAS,IAEb,OAAQ,CACJ7U,SAAU,aAGlB8U,WAAY,CACRC,UAAW,cAEfC,gBAAiB,CACbH,QAAS,IAEbI,qBAAsB,CAClBvQ,MAAO,KAEXwQ,mBAAoB,CAChBC,WAAY,GACZzQ,MAAO,KAEX0Q,iBAAkB,CACdP,QAAS,IAEbQ,YAAcjV,IAAe,CACzBC,MAAOD,EAAME,QAAQC,QAAQC,OAEjC8U,YAAclV,IAAe,CACzBkF,gBAAiBlF,EAAME,QAAQiV,UAAU/U,KACzCH,MAAOD,EAAME,QAAQiV,UAAUC,aAC/B,OAAQ,CACJnV,MAAOD,EAAME,QAAQiV,UAAUC,aAC/BlQ,gBAAiBlF,EAAME,QAAQiV,UAAU/U,QAGjDiV,WAAarV,IAAe,CACxBJ,SAAU,WACV0V,cAAe,OACfxV,IAAK,EACLyV,OAAQ,EACRC,KAAM,EACN3V,MAAO,EACP4V,EAAG,MACHC,OAAQ,cAAc1V,EAAME,QAAQyV,OAAOC,WAE/CC,KAAM,CACFC,SAAU,GAEdC,QAAS,CACLzR,MAAO,GACPkP,GAAI,OACJwC,GAAI,MACJ,UAAW,CACPC,GAAI,SAGZC,YAAclW,IAAe,CACzBC,MAA8B,SAAvBD,EAAME,QAAQoU,KAAkB,UAAY,YAEvD6B,aAAc,CACVlW,MAAO,WAEXmW,YAAa,CACT9R,MAAO,IACP2R,GAAI,MACJ,aAAc,CACV5W,QAAS,QAEb,UAAW,CACPgX,QAAS,aAEb,4BAA6B,CACzBL,GAAI,EACJC,GAAI,QAGZK,YAAa,CACThS,MAAO,GACP2R,GAAI,MAEJ,aAAc,CACV5W,QAAS,QAEb,UAAW,CACPgX,QAAS,aAEb,4BAA6B,CACzBL,GAAI,EACJC,GAAI,QAGZM,gBAAiB,CACb3W,SAAU,WACVmV,WAAY,EACZpQ,YAAa,EACb6R,aAAc,EACdzT,WAAY,EACZ0T,cAAe,EACff,OAAQ,qBACRgB,aAAc,EACdrX,QAAS,QAEbsX,iBAAkB,CACd/W,SAAU,WACVyW,QAAS,EACT3W,SAAU,SACV8V,KAAM,EACN1V,KAAM,GAEV8W,kBAAmB,CACftS,MAAO,OACPH,OAAQ,GAGZ0S,SAAU,CAAC,EACXC,OAAQ,CACJ,EAEJC,QAAS,CACL,EAEJC,cAAe,CACX,EAEJC,MAAO,CACH,GA8DR,MAAMC,UAA0BxR,EAAAA,UAmB5BC,WAAAA,CAAYC,GACRE,MAAMF,GAAO,KAnBAuR,mBAAa,OAEbC,+BAAyB,OAEzBC,UAAI,OAEbC,eAAS,OAETC,kCAA4B,OAE5BC,iBAAW,OAEXC,cAAQ,OAERC,gBAAU,OAEDjQ,kBAAY,OAyH7BpE,SAAW,CAAC4E,EAAYtB,KACpB,GACIsB,IAAOzB,KAAKZ,MAAM4G,IAAI9C,KACtB/C,GACAH,KAAKG,MAAM0L,UACT7L,KAAKG,MAAM0L,OAAO3L,QAAUF,KAAKG,MAAM0L,OAAO7L,KAAKG,MAAM0L,OAAO3L,OAAS,GAAGiR,GAAKhR,EAAMgR,IAC3F,CACE,MAAMtF,EAAS,IAAI7L,KAAKG,MAAM0L,OAAQ1L,GACtCH,KAAKK,SAAS,CAAEwL,UACpB,MAAO,GAAIpK,EAAGiF,WAAW,oBAAsBjF,EAAG2P,SAAS,UAAW,CAClE,MAAMrL,EAAWtE,EAAG4P,UAAU,GAA0B5P,EAAGvB,OAAS,GAC9DoR,EAAOtR,KAAKG,MAAMoR,iBAClBC,EAAYF,EAAKG,WAAU3E,GAAMA,EAAGrL,KAAOsE,IACjD,IAAmB,IAAfyL,GACIF,EAAKE,GAAWE,UAAiB,OAALvR,QAAK,IAALA,IAAAA,EAAOwR,KAAK,CACxC,MAAMJ,EAAmB1Q,KAAKC,MAAMD,KAAKsC,UAAUmO,IACnDC,EAAiBC,GAAWE,QAAe,OAALvR,QAAK,IAALA,IAAAA,EAAOwR,KAC7C3R,KAAKK,SAAS,CAAEkR,qBAAoB,KAE5BA,EAAiBC,GAAWE,OAAS1R,KAAKG,MAAMyR,kBAAoB7L,GAC/D/F,KAAK6R,mBAAmB5P,MAAK,IAAMjC,KAAK8R,eACjD,GAER,CAER,GA7IA9R,KAAKiB,aAAgBF,OAAeC,eAAiBD,OAAOE,aAE5D,IAAI8Q,EAAgB/R,KAAKiB,aAAaC,QAAQ,sBAAwB,WACtE,MAAM8Q,EAAQ7I,SAASnJ,KAAKiB,aAAaC,QAAQ,qBAAsB,KAAO,EACxE+Q,EAAM9I,SAASnJ,KAAKiB,aAAaC,QAAQ,mBAAoB,KAAO,EACpEgR,EAAclS,KAAKiB,aAAaC,QAAQ,wBAA0B,GAClEiR,EAAehJ,SAASnJ,KAAKiB,aAAaC,QAAQ,2BAA4B,KAAO,KACrFkR,EAAqBpS,KAAKiB,aAAaC,QAAQ,kCAAoC,KAUzF,IAAImR,EAREL,GAAUC,GAAUF,GAAmC,aAAlBA,IACvCA,EAAgB,MAGhBC,GAASC,IACTF,EAAgB,YAIpB,IACIM,EAAWxR,KAAKC,MAAMoR,EAC1B,CAAE,MACEG,EAAW,EACf,CAEArS,KAAKG,MAAQ,CACT6R,QACAC,MACApG,OAAQ,KACRkG,gBACAM,WACAF,eACAC,qBACAR,gBAAiB,GACjBU,cAAc,EACdC,cAAc,EACdhB,iBAAkB,KAElBiB,WAAW,EAEXC,YAAY,EACZC,aAAa,EACbC,kBAAmB,GACnBC,MAAM,EACNC,KAAM,CAAC,GAEX7S,KAAK2Q,cAAgBxH,SAASpI,OAAO+R,SAASC,OAAOC,MAAM,GAAI,KAAO,EAEtEhT,KAAK4Q,0BAA4B,CAAC,EAElC5Q,KAAK6Q,KAAO7Q,KAAKZ,MAAM4G,IAAItE,QAAU1B,KAAKZ,MAAM4G,IAAItE,OAAOmP,KAAO,IAAI7Q,KAAKZ,MAAM4G,IAAItE,OAAOmP,OAAS,GAErG7Q,KAAK8Q,eAAY5U,EACjB8D,KAAKkR,WAAa,GAEblR,KAAKiT,cACLhR,MAAK,IAAMjC,KAAK6R,qBAChB5P,MAAK,KACoB,aAAlB8P,EACA/R,KAAKkT,oBAAoBlT,KAAKG,MAAM4R,eAAe,GAE9C/R,KAAK8R,aACd,GAEZ,CAEAqB,qBAAAA,CAAsBvB,GAElB,OADAA,EAAkBA,GAAmB5R,KAAKG,MAAMyR,kBAI5C5R,KAAK4Q,0BAA0BgB,aAA4BhP,UAI/D5C,KAAK4Q,0BAA0BgB,GAAmB,IAAIhP,SAAQ0H,IACtDtK,KAAK+Q,8BACLqC,aAAapT,KAAK+Q,8BAEtB/Q,KAAK+Q,6BAA+BnQ,YAAW,KAC3CZ,KAAK+Q,kCAA+B7U,EACpCoO,EAAQ,GAAG,GACZ,KAEEtK,KAAKZ,MAAM+C,OACXkR,OAAOzB,EAAiB,WAAY,MACpC3P,MAAMmD,IACCpF,KAAK+Q,8BACLqC,aAAapT,KAAK+Q,8BAClB/Q,KAAK+Q,kCAA+B7U,EACpCoO,EAAQlF,GAASA,EAAOuN,mBAA0B,KAElD3S,KAAKK,SAAS,CAAEsS,kBAAmBvN,GAASA,EAAOuN,mBAA0B,IACjF,GACF,KAtBC3S,KAAK4Q,0BAA0BgB,IAH/BhP,QAAQ0H,QAAQ,GA4B/B,CAEA,uBAAMpI,SACIlC,KAAKZ,MAAM+C,OAAOmR,eAAetT,KAAKZ,MAAM4G,IAAI9C,IAAKlD,KAAKnD,SACpE,CAEAyF,oBAAAA,GACQtC,KAAK8Q,YACLsC,aAAapT,KAAK8Q,WAClB9Q,KAAK8Q,eAAY5U,GAGrB,IAAK,IAAIkL,EAAI,EAAGA,EAAIpH,KAAKkR,WAAWhR,OAAQkH,IACxCpH,KAAKZ,MAAM+C,OAAOoR,iBAAiBvT,KAAKkR,WAAW9J,GAAIpH,KAAKnD,UAEhEmD,KAAKkR,WAAa,GAElBlR,KAAKZ,MAAM+C,OAAOoR,iBAAiBvT,KAAKZ,MAAM4G,IAAI9C,IAAKlD,KAAKnD,SAChE,CA8BA,iBAAMoW,GAA8B,IAADO,EAC/B,MAAMlC,QAA+CtR,KAAKyT,sBAEpDC,QAA4C1T,KAAKZ,MAAM+C,OAAOC,yBAC9DuR,EAAuB,OAAND,QAAM,IAANA,GAAc,QAARF,EAANE,EAAQhS,cAAM,IAAA8R,OAAR,EAANA,EAAgBG,eAIvC,IAAI/B,EAAkB5R,KAAKiB,aAAaC,QAAQ,wBAA0B,GAK1E,GAJK0Q,GAAoBN,EAAKtK,MAAK8F,GAAMA,EAAGrL,KAAOmQ,GAAmB9E,EAAG4E,UAErEE,EAAkB+B,IAEjB/B,IAAoBN,EAAKtK,MAAK8F,GAAMA,EAAGrL,KAAOmQ,GAAmB9E,EAAG4E,QAAQ,CAE7E,MAAMkC,EAAsBtC,EAAKtK,MAAK8F,GAAMA,EAAG4E,QAC3CkC,IACAhC,EAAkBgC,EAAoBnS,GAE9C,EAEKmQ,GAAmBN,EAAKpR,SACzB0R,EAAkB+B,GAEtB,MAAMhB,QAA6C3S,KAAKmT,sBAAsBvB,SACxE,IAAIhP,SAAc0H,IAGpBtK,KAAKK,SACD,CACIuS,MAAOc,EAAOhS,OAAOgI,YAAc,IAAI3E,SAAS,KAChDwM,iBAAkBD,EAElBM,kBACAe,sBAEJ,IAAMrI,KACT,GAET,CAEAmJ,mBAAAA,GACI,MAAMnC,EAAyC,GACzChL,EAAgB,GAUtB,OATAtG,KAAKZ,MAAMmC,iBAAiBuB,SAAQiD,IAChC,MAAM8N,EAAU7T,KAAKZ,MAAM2C,QAAQ,kBAAkBgE,KACrD,GAAI8N,GAAWA,EAAQnS,QAAUmS,EAAQnS,OAAOoS,WAAY,CACxD,MAAMC,EAAU,CAAEtS,GAAIsE,EAAU2L,OAAO,GACvCJ,EAAK5O,KAAKqR,GACVzN,EAAI5D,KAAK,kBAAkBqD,UAC/B,KAGAO,EAAIpG,OACGF,KAAKZ,MAAM+C,OAAO6R,iBAAiB1N,GAAKrE,MAAKmJ,UAChDxF,OAAOC,KAAKoO,GAAQnR,SAAQrB,IACxB,MAAMyS,EAAO5C,EAAKtK,MAAK8F,GAAMrL,EAAG2P,SAAS,GAAGtE,EAAGrL,cACpC,IAAD0S,EAAND,IACAA,EAAKxC,QAAoB,QAAXyC,EAACF,EAAOxS,UAAG,IAAA0S,IAAVA,EAAYxC,KAC/B,IAEJ3R,KAAKkR,WAAa5K,EAClB,IAAK,IAAIc,EAAI,EAAGA,EAAId,EAAIpG,OAAQkH,UACtBpH,KAAKZ,MAAM+C,OAAOmR,eAAehN,EAAIc,GAAIpH,KAAKnD,UAGxD,OAAOyU,CAAI,IAGZ1O,QAAQ0H,QAAQgH,EAC3B,CAEAQ,WAAAA,CAAYE,EAAgBC,GAAqC,IAADmC,EAI5D,OAHApC,EAAQA,GAAShS,KAAKG,MAAM6R,MAC5BC,EAAMA,GAAOjS,KAAKG,MAAM8R,IAGnBjS,KAAKG,MAAMyR,iBACgB,QAA5BwC,EAACpU,KAAKG,MAAMoR,wBAAgB,IAAA6C,GAA3BA,EAA6BpN,MAAK8F,GAAMA,EAAGrL,KAAOzB,KAAKG,MAAMyR,iBAAmB9E,EAAG4E,SAKxF1R,KAAKK,SAAS,CAAEgU,SAAS,IAElBrU,KAAKZ,MAAM+C,OACb2R,WAAW9T,KAAKZ,MAAM4G,IAAI9C,IAAK,CAC5B6C,SAAU/F,KAAKG,MAAMyR,gBACrBI,QACAC,MACAqC,MAAM,EACNC,KAAK,EACLC,GAAG,EACHC,OAAO,EACPC,UAAW,OACXC,qBAAqB,IAExB1S,MAAM4J,IAEH,MAAM+I,EAAQ,GACRC,EAAQ7U,KAAKgR,YACnB,IAAIwB,GAAY,EAEZC,GAAa,EACbC,GAAc,EAsBlB,GAlBImC,GAASA,EAAM3U,UAAY2L,IAAWA,EAAO3L,QAAU2U,EAAM,GAAG1D,GAAKtF,EAAO,GAAGsF,MAC/EyD,EAAMlS,KAAKmS,EAAM,IACjBD,EAAMlS,KAAK,CAAEyO,GAAI0D,EAAM,GAAG1D,GAAK,EAAGrU,GAAG,IACrCmH,QAAQ6F,IAAI,OAAO,IAAIgL,KAAKD,EAAM,GAAG1D,IAAI4D,kBAAkBF,EAAM,GAAGlD,OAI/Dc,QAA+BvW,IAAjB2Y,EAAM,GAAGN,MACxB9B,GAAa,IAEZC,GAAemC,EAAM,GAAGP,OACzB5B,GAAc,IAOZ,OAAN7G,QAAM,IAANA,GAAAA,EAAQ3L,OACR,IAAK,IAAI9D,EAAI,EAAGA,EAAIyP,EAAO3L,OAAQ9D,IAE3ByP,EAAOzP,MAAQwY,EAAM1U,QAAU0U,EAAMA,EAAM1U,OAAS,GAAGiR,GAAKtF,EAAOzP,GAAG+U,KACtEyD,EAAMlS,KAAKmJ,EAAOzP,IACdyP,EAAOzP,GAAGkY,OACNzI,EAAOzP,GAAGkY,KAAK5N,WAAW,mBAC1BmF,EAAOzP,GAAGkY,KAAOzI,EAAOzP,GAAGkY,KAAKjD,UAAU,IACnCxF,EAAOzP,GAAGkY,KAAK5N,WAAW,kBACjCmF,EAAOzP,GAAGkY,KAAOzI,EAAOzP,GAAGkY,KAAKjD,UAAU,MAG7CmB,GAAa3G,EAAOzP,GAAG4Y,KACxBxC,GAAY,GAKXC,QAAgCvW,IAAlB2P,EAAOzP,GAAGmY,MACzB9B,GAAa,IAEZC,GAAe7G,EAAOzP,GAAGkY,OAC1B5B,GAAc,GAKlBzO,QAAQ6F,IAAI,aAAa,IAAIgL,KAAKjJ,EAAOzP,GAAG+U,IAAI4D,kBAAkBlJ,EAAOzP,GAAGuV,QAE5EiD,EAAMA,EAAM1U,OAAS,GAAGiR,KAAOtF,EAAOzP,GAAG+U,IACzCyD,EAAMA,EAAM1U,OAAS,GAAGyR,MAAQ9F,EAAOzP,GAAG+U,IAE1ClN,QAAQC,MAAM,sBAItB0Q,EAAMlS,KAAK,CAAEuS,iBAAiB,IAG7BL,EAAM1U,QACP0U,EAAMlS,KAAK,CAAEwS,QAAQ,IAGzBlV,KAAKK,SAAS,CACVgU,SAAS,EACTxI,OAAQ+I,EACRpC,YACAE,cAEAD,cAEF,KAjGC,IAmGf,CAEAZ,gBAAAA,GAAmC,IAADsD,EAC9B,MAAMC,EAAM,IAAIN,KACVO,EAAS,IAAIP,KAAK,IAAO,EAAG,GAElC,OACK9U,KAAKG,MAAMyR,iBACgB,QAA5BuD,EAACnV,KAAKG,MAAMoR,wBAAgB,IAAA4D,GAA3BA,EAA6BnO,MAAK8F,GAAMA,EAAGrL,KAAOzB,KAAKG,MAAMyR,iBAAmB9E,EAAG4E,SAKxF1R,KAAKK,SAAS,CAAEgU,SAAS,IAElBrU,KAAKZ,MAAM+C,OACb2R,WAAW9T,KAAKZ,MAAM4G,IAAI9C,IAAK,CAC5B6C,SAAU/F,KAAKG,MAAMyR,gBACrBI,MAAOqD,EAAOC,UACdrD,IAAKmD,EAAIE,UAETC,MAAO,EACPjB,MAAM,EACNC,KAAK,EACLC,GAAG,EACHC,OAAO,EACPC,UAAW,SAEdzS,MAAM4J,IACCA,EAAO3L,QAEe,OAAlB2L,EAAO,GAAG8F,KAAgB9F,EAAO,GAAGsF,KAAOkE,EAAOC,WAClDzJ,EAAOjB,QAGXiB,EAAO/I,SAAQgK,GAAOA,EAAG1F,GAAI,IAC7BpH,KAAKgR,YAAcnF,EACnB7L,KAAKK,SAAS,CACVgU,SAAS,MAGbrU,KAAKgR,YAAc,GACnBhR,KAAKK,SAAS,CAAEgU,SAAS,IAC7B,KAjCGzR,QAAQ0H,SAmCvB,CAEAkL,cAAAA,CAAe1Y,EAA2CqU,EAAYsE,GAClE,IAAIpD,EAAW,IAAIrS,KAAKG,MAAMkS,UAC9B,MAAMvK,EAAMuK,EAAStK,QAAQoJ,GAC7B,GAAIrU,EAAE4Y,UAAY1V,KAAKG,MAAMgS,aAAc,CACvC,IAAIwD,GAAO,EACPC,GAAQ,EACZvD,EAAW,GACX,IAAK,IAAIjL,EAAI,EAAGA,EAAIpH,KAAKG,MAAM0L,OAAO3L,SAC9BF,KAAKG,MAAM0L,OAAOzE,GAAG+J,KAAOA,IAC5BwE,EAAMvO,EACFwO,IAASD,GACTtD,EAAS3P,KAAK1C,KAAKG,MAAM0L,OAAOzE,GAAG+J,KAE1B,IAATwE,IAAwB,IAAVC,MAIlB5V,KAAKG,MAAM0L,OAAOzE,GAAG+J,KAAOnR,KAAKG,MAAMgS,eACvCyD,EAAOxO,EACHwO,IAASD,GACTtD,EAAS3P,KAAK1C,KAAKG,MAAM0L,OAAOzE,GAAG+J,KAE1B,IAATwE,IAAwB,IAAVC,IAfoBxO,KAmB7B,IAATuO,IAAwB,IAAVC,GACdvD,EAAS3P,KAAK1C,KAAKG,MAAM0L,OAAOzE,GAAG+J,GAG/C,MAAWrU,EAAE+Y,UACI,IAAT/N,EACAuK,EAASrK,OAAOF,EAAK,GAErBuK,EAAS3P,KAAKyO,GAElBkB,EAASvL,QAETuL,EAAW,CAAClB,GAGhBnR,KAAKiB,aAAagH,QAAQ,0BAA2BkJ,EAAG5F,YACxDvL,KAAKiB,aAAagH,QAAQ,gCAAiCwN,GAC3DzV,KAAKiB,aAAagH,QAAQ,sBAAuBpH,KAAKsC,UAAUkP,IAChErS,KAAKK,SAAS,CAAEgS,WAAUF,aAAchB,EAAIiB,mBAAoBqD,GACpE,CAEAK,YAAAA,GACI,MAAMC,EAAO,GACb,IAAK,IAAIC,EAAIhW,KAAKG,MAAM0L,OAAO3L,OAAS,EAAG8V,GAAK,EAAGA,IAAK,CACpD,MAAM7V,EAAQH,KAAKG,MAAM0L,OAAOmK,GAC1B7E,EAAKhR,EAAMgR,GACjB,GAAIhR,EAAMrD,EACNiZ,EAAKrT,MACDpH,EAAAA,EAAAA,MAAC2a,EAAAA,SAAQ,CACLva,GAAI,IAAKlD,EAAOuV,OAAQvV,EAAO0V,cAAe1V,EAAO4V,iBAErD8H,OAAK,EAAA1b,SAAA,EAELoB,EAAAA,EAAAA,KAACua,EAAAA,UAAS,KACVva,EAAAA,EAAAA,KAACua,EAAAA,UAAS,CAAA3b,SAAC,QACVwF,KAAKG,MAAMsS,YAAa7W,EAAAA,EAAAA,KAACua,EAAAA,UAAS,IAAM,KACxCnW,KAAKG,MAAMuS,aAAc9W,EAAAA,EAAAA,KAACua,EAAAA,UAAS,IAAM,KACzCnW,KAAKG,MAAMqS,WAAY5W,EAAAA,EAAAA,KAACua,EAAAA,UAAS,IAAM,OAPnChF,SAUV,GAAIhR,EAAM+U,QAAU/U,EAAM8U,gBAC7Bc,EAAKrT,MACDpH,EAAAA,EAAAA,MAAC2a,EAAAA,SAAQ,CACLva,GAAI,IAAKlD,EAAOuV,OAAQvV,EAAO0V,cAAe1V,EAAO4d,WAErDF,OAAK,EAAA1b,SAAA,EAELoB,EAAAA,EAAAA,KAACua,EAAAA,UAAS,KACVva,EAAAA,EAAAA,KAACua,EAAAA,UAAS,CAAA3b,SACL2F,EAAM+U,OACDlV,KAAKZ,MAAMhD,EAAE,sBACb4D,KAAKZ,MAAMhD,EAAE,4CAEtB4D,KAAKG,MAAMsS,YAAa7W,EAAAA,EAAAA,KAACua,EAAAA,UAAS,IAAM,KACxCnW,KAAKG,MAAMuS,aAAc9W,EAAAA,EAAAA,KAACua,EAAAA,UAAS,IAAM,KACzCnW,KAAKG,MAAMqS,WAAY5W,EAAAA,EAAAA,KAACua,EAAAA,UAAS,IAAM,OAXnChW,EAAM+U,OAAS,SAAW,SAcpC,CACH,MAAMmB,EAAelW,EAAMiH,EACrBiL,EAAWrS,KAAKG,MAAMgS,eAAiBhB,EAC7C,IAAIQ,EAAMxR,EAAMwR,IACZ3R,KAAKZ,MAAMqK,cAA+C,WAA/BzJ,KAAKZ,MAAM4G,IAAItE,OAAO0B,MAAqBuO,IACtEA,EAAMA,EAAIpG,WAAW9I,QAAQ,IAAK,MAE1B,OAARkP,IACAA,EAAM,aAEEzV,IAARyV,IACAA,EAAM,KAEV,MAAM2E,EAAgBtW,KAAKG,MAAMkS,SAAStN,SAASoM,GAEnD4E,EAAKrT,MACDpH,EAAAA,EAAAA,MAAC2a,EAAAA,SAAQ,CACLva,GAAI,IACGlD,EAAOuV,OACPvV,EAAO0V,cACNmI,EAAe7d,EAAO4V,qBAAkBlS,KACxCoa,EAAgB9d,EAAOkW,iBAAcxS,GAC3C1B,SAAA,EAGFc,EAAAA,EAAAA,MAAC6a,EAAAA,UAAS,CAACha,QAASW,IAAMuZ,GAAgBrW,KAAKwV,eAAe1Y,EAAGqU,EAAI,MAAM3W,SAAA,CACtE,GAAGkW,EAAkB6F,gBAAgBpW,EAAMgR,MAC3CkB,GAA8C,OAAlCrS,KAAKG,MAAMiS,oBACpBxW,EAAAA,EAAAA,KAAC4a,EAAAA,IAAG,CACAC,UAAU,MACV/a,GAAIlD,EAAOqW,aAGf,OAGRvT,EAAAA,EAAAA,MAAC6a,EAAAA,UAAS,CAACha,QAASW,IAAMuZ,GAAgBrW,KAAKwV,eAAe1Y,EAAGqU,EAAI,OAAO3W,SAAA,CACvEmX,EAAM3R,KAAK6Q,KACXwB,GAA8C,QAAlCrS,KAAKG,MAAMiS,oBACpBxW,EAAAA,EAAAA,KAAC4a,EAAAA,IAAG,CACAC,UAAU,MACV/a,GAAIlD,EAAOqW,aAGf,MAGP7O,KAAKG,MAAMsS,YACRnX,EAAAA,EAAAA,MAAC6a,EAAAA,UAAS,CACNha,QAASW,IAAMuZ,GAAgBrW,KAAKwV,eAAe1Y,EAAGqU,EAAI,OAC1DzV,GAAIyE,EAAMoU,IAAM/b,EAAOkX,YAAclX,EAAOmX,aAAanV,SAAA,CAExD2F,EAAMoU,IAAM,OAAS,QACrBlC,GAA8C,QAAlCrS,KAAKG,MAAMiS,oBACpBxW,EAAAA,EAAAA,KAAC4a,EAAAA,IAAG,CACAC,UAAU,MACV/a,GAAIlD,EAAOqW,aAGf,MAGR,KACH7O,KAAKG,MAAMuS,aACRpX,EAAAA,EAAAA,MAAC6a,EAAAA,UAAS,CAACha,QAASW,IAAMuZ,GAAgBrW,KAAKwV,eAAe1Y,EAAGqU,EAAI,QAAQ3W,SAAA,CACxE2F,EAAMmU,MAAQ,GACdjC,GAA8C,SAAlCrS,KAAKG,MAAMiS,oBACpBxW,EAAAA,EAAAA,KAAC4a,EAAAA,IAAG,CACAC,UAAU,MACV/a,GAAIlD,EAAOqW,aAGf,MAGR,KACH7O,KAAKG,MAAMqS,WACRlX,EAAAA,EAAAA,MAAC6a,EAAAA,UAAS,CAACha,QAASW,IAAMuZ,GAAgBrW,KAAKwV,eAAe1Y,EAAGqU,EAAI,MAAM3W,SAAA,CACtE2F,EAAM6U,GACD,GAAG,IAAIF,KAAK3U,EAAM6U,IAAI0B,wBAAwB,IAAI5B,KAAK3U,EAAM6U,IAAI2B,yBAAyBxW,EAAMgR,GAAK,KAAM5F,WAAWqL,SAAS,EAAG,OAClI,GACLvE,GAA8C,OAAlCrS,KAAKG,MAAMiS,oBACpBxW,EAAAA,EAAAA,KAAC4a,EAAAA,IAAG,CACAC,UAAU,MACV/a,GAAIlD,EAAOqW,aAGf,MAGR,OAnECsC,EAAG5F,YAAcpL,EAAMwR,KAAO,IAAIpG,YAsEnD,CACJ,CAEA,OAAOwK,CACX,CAEAc,SAAAA,GACI,MAAMzB,EAAM,IAAIN,KACVgC,EAAQ,IAAQ1B,EAAI2B,cAAgB,IAAO3B,EAAI4B,mBAEjD5B,EAAI4B,mBACJ5B,EAAI6B,gBAAgB,KAEpB7B,EAAI2B,cACJ3B,EAAI8B,WAAW,IAGnB,MAAMjF,EAAMmD,EAAIE,UAChB,IAAItD,EACJ,MAAMmF,EAAOnX,KAAKG,MAAM4R,cAExB,GAAa,QAAToF,EACA/B,EAAIgC,SAAS,GACbhC,EAAIiC,WAAW,GACfjC,EAAI8B,WAAW,GACflF,EAAQoD,EAAIE,eACT,GAAa,SAAT6B,EAAiB,CACxB/B,EAAIgC,SAAS,GACbhC,EAAIiC,WAAW,GACfjC,EAAI8B,WAAW,GACf9B,EAAI6B,gBAAgB,GAEpB,MAAMK,EAAMlC,EAAImC,UAAY,EAChB,IAARD,GACAlC,EAAIgC,UAAU,IAAME,EAAM,IAE9BtF,EAAQoD,EAAIE,SAChB,MAAO,GAAa,WAAT6B,EAAmB,CAC1B/B,EAAIgC,SAAS,GACbhC,EAAIiC,WAAW,GACfjC,EAAI8B,WAAW,GACf9B,EAAIoC,QAAQpC,EAAIqC,UAAY,GAE5B,MAAMH,EAAMlC,EAAImC,UAAY,EAChB,IAARD,GACAlC,EAAIgC,UAAU,IAAME,EAAM,IAE9BtF,EAAQoD,EAAIE,SAChB,KAAoB,UAAT6B,GACP/B,EAAIgC,SAAS,GACbhC,EAAIiC,WAAW,GACfjC,EAAI8B,WAAW,GACf9B,EAAIoC,QAAQ,GACZxF,EAAQoD,EAAIE,WACI,SAAT6B,GACP/B,EAAIgC,SAAS,GACbhC,EAAIiC,WAAW,GACfjC,EAAI8B,WAAW,GACf9B,EAAIoC,QAAQ,GACZpC,EAAIsC,SAAS,GACb1F,EAAQoD,EAAIE,WACI,aAAT6B,GACP/B,EAAIgC,SAAS,GACbhC,EAAIiC,WAAW,GACfjC,EAAI8B,WAAW,GACf9B,EAAIuC,YAAYvC,EAAIwC,cAAgB,GACpC5F,EAAQoD,EAAIE,WAEZtD,EAAQC,EAAqC,IAA/B9I,SAASgO,EAAgB,IAG3CnX,KAAKK,SAAS,CAAE2R,QAAOC,QAAO,IAAMjS,KAAK8R,gBAEzC9R,KAAK8Q,UAAYlQ,YAAW,KACxBZ,KAAK8Q,eAAY5U,EACjB8D,KAAK6W,WAAW,GACjBC,GAAS,IAChB,CAEA5D,mBAAAA,CAAoBiE,EAAuBU,GAKvC,GAJKA,IACD7X,KAAKiB,aAAagH,QAAQ,oBAAqBkP,EAAK5L,YACpDvL,KAAKK,SAAS,CAAE0R,cAAeoF,KAEtB,aAATA,EAKA,YAJInX,KAAK8Q,YACLsC,aAAapT,KAAK8Q,WAClB9Q,KAAK8Q,eAAY5U,IAIzB8D,KAAKiB,aAAa6W,WAAW,qBAC7B9X,KAAKiB,aAAa6W,WAAW,gBAE7B,MAAM1C,EAAM,IAAIN,KAEhB,IAAK9U,KAAK8Q,UAAW,CACjB,MAAMgG,EAAQ,IAAS1B,EAAI2B,cAAgB,IAAQ3B,EAAI4B,mBACvDhX,KAAK8Q,UAAYlQ,YAAW,KACxBZ,KAAK8Q,eAAY5U,EACjB8D,KAAK6W,WAAW,GACjBC,GAAS,IAChB,CAEI1B,EAAI4B,mBACJ5B,EAAI6B,gBAAgB,KAEpB7B,EAAI2B,cACJ3B,EAAI8B,WAAW,IAGnB,MAAMjF,EAAMmD,EAAIE,UAChB,IAAItD,EAEJ,GAAa,QAATmF,EACA/B,EAAIgC,SAAS,GACbhC,EAAIiC,WAAW,GACfjC,EAAI8B,WAAW,GACflF,EAAQoD,EAAIE,eACT,GAAa,SAAT6B,EAAiB,CACxB/B,EAAIgC,SAAS,GACbhC,EAAIiC,WAAW,GACfjC,EAAI8B,WAAW,GAEf,MAAMI,EAAMlC,EAAImC,UAAY,EAChB,IAARD,GACAlC,EAAIgC,UAAU,IAAME,EAAM,IAG9BtF,EAAQoD,EAAIE,SAChB,MAAO,GAAa,WAAT6B,EAAmB,CAC1B/B,EAAIgC,SAAS,GACbhC,EAAIiC,WAAW,GACfjC,EAAI8B,WAAW,GACf9B,EAAIoC,QAAQpC,EAAIqC,UAAY,GAE5B,MAAMH,EAAMlC,EAAImC,UAAY,EAChB,IAARD,GACAlC,EAAIgC,UAAU,IAAME,EAAM,IAG9BtF,EAAQoD,EAAIE,SAChB,KAAoB,UAAT6B,GACP/B,EAAIgC,SAAS,GACbhC,EAAIiC,WAAW,GACfjC,EAAI8B,WAAW,GACf9B,EAAIoC,QAAQ,GACZxF,EAAQoD,EAAIE,WACI,SAAT6B,GACP/B,EAAIgC,SAAS,GACbhC,EAAIiC,WAAW,GACfjC,EAAI8B,WAAW,GACf9B,EAAIoC,QAAQ,GACZpC,EAAIsC,SAAS,GACb1F,EAAQoD,EAAIE,WACI,aAAT6B,GACP/B,EAAIgC,SAAS,GACbhC,EAAIiC,WAAW,GACfjC,EAAI8B,WAAW,GACf9B,EAAIuC,YAAYvC,EAAIwC,cAAgB,GACpC5F,EAAQoD,EAAIE,WAGZtD,EAAQC,EAAa,KADrBkF,EAAOY,OAAOZ,IAIlBnX,KAAKK,SAAS,CAAE2R,QAAOC,QAAO,IAAMjS,KAAK8R,eAC7C,CAEAkG,WAAAA,GAA4B,IAADC,EACvB,IAAKjY,KAAKG,MAAMyR,gBACZ,OAAOhW,EAAAA,EAAAA,KAAA,OAAKC,MAAO,CAAEqc,UAAW,GAAIhf,SAAU,IAAKsB,SAAEwF,KAAKZ,MAAMhD,EAAE,mCAEtE,GAAgC,QAA5B6b,EAACjY,KAAKG,MAAMoR,wBAAgB,IAAA0G,IAA3BA,EAA6BjR,MAAK8F,GAAMA,EAAGrL,KAAOzB,KAAKG,MAAMyR,iBAAmB9E,EAAG4E,QACpF,OAAO9V,EAAAA,EAAAA,KAAA,OAAKC,MAAO,CAAEqc,UAAW,GAAIhf,SAAU,IAAKsB,SAAEwF,KAAKZ,MAAMhD,EAAE,gCAGtE,GAAI4D,KAAKG,MAAM0L,OAAQ,CACnB,MAAMsM,EAAqC,CAAC,IAAK,QAC3CC,EAAY,CAAC,IAAK,KAcxB,OAbIpY,KAAKG,MAAMsS,aACX0F,EAAczV,KAAK,IACnB0V,EAAU1V,KAAK,KAEf1C,KAAKG,MAAMuS,cACXyF,EAAczV,KAAK,KACnB0V,EAAU1V,KAAK,MAEf1C,KAAKG,MAAMqS,YACX2F,EAAczV,KAAK,KACnB0V,EAAU1V,KAAK,OAIf9G,EAAAA,EAAAA,KAACyc,EAAAA,eAAc,CAACxc,MAAOrD,EAAOmV,UAAUnT,UACpCc,EAAAA,EAAAA,MAACgd,EAAAA,YAAW,CACRC,cAAY,EACZ7c,GAAIlD,EAAOoV,MACXuK,cAAeA,EACfC,UAAWA,EACXI,SAAUxY,KAAKZ,MAAMhD,EAAE,yCAAyC5B,SAAA,EAEhEoB,EAAAA,EAAAA,KAAC6c,EAAAA,UAAS,CAAAje,UACNc,EAAAA,EAAAA,MAAC2a,EAAAA,SAAQ,CAAAzb,SAAA,EACLoB,EAAAA,EAAAA,KAACua,EAAAA,UAAS,CAACta,MAAOrD,EAAOiY,MAAMjW,SAAEwF,KAAKZ,MAAMhD,EAAE,gBAC9CR,EAAAA,EAAAA,KAACua,EAAAA,UAAS,CAACta,MAAOrD,EAAO6X,SAAS7V,SAAEwF,KAAKZ,MAAMhD,EAAE,WAChD4D,KAAKG,MAAMsS,YACR7W,EAAAA,EAAAA,KAACua,EAAAA,UAAS,CAACta,MAAOrD,EAAO8X,OAAO9V,SAAEwF,KAAKZ,MAAMhD,EAAE,SAC/C,KACH4D,KAAKG,MAAMuS,aACR9W,EAAAA,EAAAA,KAACua,EAAAA,UAAS,CAACta,MAAOrD,EAAO+X,QAAQ/V,SAAEwF,KAAKZ,MAAMhD,EAAE,UAChD,KACH4D,KAAKG,MAAMqS,WACR5W,EAAAA,EAAAA,KAACua,EAAAA,UAAS,CAACta,MAAOrD,EAAOgY,cAAchW,SAAEwF,KAAKZ,MAAMhD,EAAE,QACtD,WAGZR,EAAAA,EAAAA,KAAC8c,EAAAA,UAAS,CAAAle,SAAEwF,KAAK8V,qBAIjC,CACA,OAAOla,EAAAA,EAAAA,KAAC8P,EAAAA,eAAc,GAC1B,CAEAiN,mBAAAA,GACI,OACIrd,EAAAA,EAAAA,MAACC,EAAAA,OAAM,CACHC,OAAQwE,KAAKG,MAAMyY,WACnBre,QAASA,IAAMyF,KAAKK,SAAS,CAAEuY,YAAY,IAC3C,kBAAgB,qBAChB,mBAAiB,2BAA0Bpe,SAAA,EAE3CoB,EAAAA,EAAAA,KAACD,EAAAA,YAAW,CAAC8F,GAAG,wBAChBnG,EAAAA,EAAAA,MAACgB,EAAAA,cAAa,CAAA9B,SAAA,EACVoB,EAAAA,EAAAA,KAACid,EAAAA,kBAAiB,CAACpX,GAAG,2BAA0BjH,SAAEwF,KAAKZ,MAAMhD,EAAE,oBAC/DR,EAAAA,EAAAA,KAAC+M,EAAAA,iBAAgB,CACbE,SACIjN,EAAAA,EAAAA,KAACkN,EAAAA,SAAQ,CACL/N,MAAOiF,KAAKG,MAAM2Y,gBAClBjc,SAAUA,IAAMmD,KAAKK,SAAS,CAAEyY,iBAAiB,MAGzD7P,MAAOjJ,KAAKZ,MAAMhD,EAAE,gCAG5Bd,EAAAA,EAAAA,MAAC+B,EAAAA,cAAa,CAAA7C,SAAA,EACVoB,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACHX,QAAQ,YACRR,QAASA,IACL6D,KAAKK,SACD,CAAEuY,YAAY,EAAOE,gBAAiB9Y,KAAKG,MAAM2Y,iBAAmBhE,KAAKM,QACzE,IAAMpV,KAAK+Y,aAGnBtf,MAAM,UACNiD,WAAS,EACTa,WAAW3B,EAAAA,EAAAA,KAACod,EAAAA,OAAU,IAAIxe,SAEzBwF,KAAKZ,MAAMhD,EAAE,aAElBR,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACHX,QAAQ,YACRR,QAASA,IAAM6D,KAAKK,SAAS,CAAEuY,YAAY,IAC3Cnf,MAAM,YACN8D,WAAW3B,EAAAA,EAAAA,KAACqd,EAAAA,MAAS,IAAIze,SAExBwF,KAAKZ,MAAMhD,EAAE,iBAKlC,CAEA2c,QAAAA,GACI,MAAMG,EAAQlZ,KAAKG,MAAMkS,SAAS7Q,KAAI2P,IAAE,CAAOhR,MAAO,CAAEgR,MAAM1P,GAAIzB,KAAKZ,MAAM4G,IAAI9C,QAC5ElD,KAAKZ,MAAM+C,OAAOkR,OAAOrT,KAAKG,MAAMyR,gBAAiB,SAAUsH,GAAOjX,MAAK,IAAMjC,KAAK8R,eAC/F,CAEAqH,QAAAA,GACI,IAAIxH,EAAM3R,KAAKG,MAAM0S,KAAKlB,IAEtB3R,KAAKZ,MAAM4G,IAAItE,SACoB,WAA/B1B,KAAKZ,MAAM4G,IAAItE,OAAO0B,KACH,kBAARuO,IACPA,EAAMyH,WAAWzH,EAAIpG,WAAW9I,QAAQ,IAAK,OAEX,YAA/BzC,KAAKZ,MAAM4G,IAAItE,OAAO0B,OAC7BuO,EAAc,SAARA,GAA0B,SAARA,IAA0B,IAARA,GAAwB,MAARA,GAAuB,IAARA,IAIjF,MAAMxR,EAAgC,CAClCwR,MACA4C,IAAKvU,KAAKG,MAAM0S,KAAK0B,IACrBpD,GAAInR,KAAKG,MAAMkS,SAAS,GACxBiC,KAAM,wBAAwBtU,KAAK2Q,gBACnC6D,EAAGxU,KAAKG,MAAM0S,KAAK2B,GAGvB,IAAK,MAAO3P,EAAMwU,KAAazT,OAAO0T,QAAQnZ,QACzBjE,IAAbmd,UAEOlZ,EAAM0E,IAIhB7E,KAAKG,MAAMqS,WAAarS,EAAM6U,WACxB7U,EAAM6U,GAEZhV,KAAKZ,MAAM+C,OACXkR,OAAOrT,KAAKG,MAAMyR,gBAAiB,SAAU,CAAC,CAAEnQ,GAAIzB,KAAKZ,MAAM4G,IAAI9C,IAAK/C,WACxE8B,MAAK,IAAMjC,KAAK8R,eACzB,CAEAyH,QAAAA,GACI,IAAI5H,EAAM3R,KAAKG,MAAM0S,KAAKlB,IAEtB3R,KAAKZ,MAAM4G,IAAItE,SACoB,WAA/B1B,KAAKZ,MAAM4G,IAAItE,OAAO0B,KACtBuO,EAAMyH,WAAWzH,EAAIpG,WAAW9I,QAAQ,IAAK,MACP,YAA/BzC,KAAKZ,MAAM4G,IAAItE,OAAO0B,OAC7BuO,EAAc,SAARA,GAA0B,SAARA,IAA0B,IAARA,GAAwB,MAARA,GAAuB,IAARA,IAIjF,MAAMR,EAAKnR,KAAKG,MAAM0S,KAAK2G,KAC3BrI,EAAGiG,SAASpX,KAAKG,MAAM0S,KAAK4G,KAAKC,YACjCvI,EAAGkG,WAAWrX,KAAKG,MAAM0S,KAAK4G,KAAKE,cACnCxI,EAAG+F,WAAWlX,KAAKG,MAAM0S,KAAK4G,KAAK1C,cACnC5F,EAAG8F,gBAAgB9N,SAASnJ,KAAKG,MAAM0S,KAAK+G,GAAqB,KAEjE,MAAMzZ,EAAgC,CAClCgR,GAAIA,EAAGmE,UACP3D,MACA4C,IAAKvU,KAAKG,MAAM0S,KAAK0B,IACrBD,KAAM,wBAAwBtU,KAAK2Q,gBACnC6D,EAAGxU,KAAKG,MAAM0S,KAAK2B,GAAK,IAGvBxU,KAAKG,MAAMqS,WAAarS,EAAM6U,WACxB7U,EAAM6U,GAGjB,IAAK,MAAOnQ,EAAMwU,KAAazT,OAAO0T,QAAQnZ,QACzBjE,IAAbmd,UAEOlZ,EAAM0E,GAIhB7E,KAAKZ,MAAM+C,OACXkR,OAAOrT,KAAKG,MAAMyR,gBAAiB,SAAU,CAAC,CAAEnQ,GAAIzB,KAAKZ,MAAM4G,IAAI9C,IAAK/C,WACxE8B,MAAK,IAAMjC,KAAK8R,eACzB,CAEA+H,UAAAA,CAAWC,EAAc/e,GACrB,MAAM8X,EAAOhS,KAAKC,MAAMD,KAAKsC,UAAUnD,KAAKG,MAAM0S,OAClDA,EAAK4G,KAAO,IAAI3E,KAAKjC,EAAK4G,MAC1B5G,EAAK2G,KAAO,IAAI1E,KAAKjC,EAAK2G,MAC1B3G,EAAKiH,GAAQ/e,EAEbiF,KAAKK,SAAS,CAAEwS,QACpB,CAEAkH,gBAAAA,GACI,OACIze,EAAAA,EAAAA,MAACC,EAAAA,OAAM,CACHC,KAAMwE,KAAKG,MAAMmS,cAAgBtS,KAAKG,MAAMoS,aAC5ChY,QAASA,IAAMyF,KAAKK,SAAS,CAAEiS,cAAc,EAAOC,cAAc,IAClE,kBAAgB,oBAChB,mBAAiB,0BAAyB/X,SAAA,EAE1CoB,EAAAA,EAAAA,KAACD,EAAAA,YAAW,CAAC8F,GAAG,oBAAmBjH,SAC9BwF,KAAKG,MAAMmS,aAAetS,KAAKZ,MAAMhD,EAAE,gBAAkB4D,KAAKZ,MAAMhD,EAAE,mBAE3ER,EAAAA,EAAAA,KAACU,EAAAA,cAAa,CAAA9B,UACVc,EAAAA,EAAAA,MAAA,QACI0e,YAAU,EACVvd,aAAa,MAAKjC,SAAA,CAEc,mBAAxBwF,KAAKG,MAAM0S,KAAKlB,KACpB/V,EAAAA,EAAAA,KAAC+M,EAAAA,iBAAgB,CACbE,SACIjN,EAAAA,EAAAA,KAACkN,EAAAA,SAAQ,CACLE,QAAShJ,KAAKG,MAAM0S,KAAKlB,IACzB9U,SAAUC,GAAKkD,KAAK6Z,WAAW,MAAO/c,EAAEC,OAAOiM,WAGvDC,MAAOjJ,KAAKZ,MAAMhD,EAAE,YAGxBR,EAAAA,EAAAA,KAACY,EAAAA,UAAS,CACNG,QAAQ,WACRsM,MAAOjJ,KAAKZ,MAAMhD,EAAE,SACpBrB,MAAOiF,KAAKG,MAAM0S,KAAKlB,IACvB9U,SAAUC,GAAKkD,KAAK6Z,WAAW,MAAO/c,EAAEC,OAAOhC,UAGvDa,EAAAA,EAAAA,KAAA,UACAA,EAAAA,EAAAA,KAAC+M,EAAAA,iBAAgB,CACbE,SACIjN,EAAAA,EAAAA,KAACkN,EAAAA,SAAQ,CACLE,QAAShJ,KAAKG,MAAM0S,KAAK0B,IACzB1X,SAAUC,GAAKkD,KAAK6Z,WAAW,MAAO/c,EAAEC,OAAOiM,WAGvDC,MAAOjJ,KAAKZ,MAAMhD,EAAE,kBAGvB4D,KAAKG,MAAMoS,cACR3W,EAAAA,EAAAA,KAACqe,EAAAA,qBAAoB,CACjBC,YAAaC,EAAAA,EACbC,cAAepO,EAAUhM,KAAKZ,MAAMsI,MAAMlN,UAE1Cc,EAAAA,EAAAA,MAAA,OAAKO,MAAOrD,EAAOuX,gBAAgBvV,SAAA,EAC/BoB,EAAAA,EAAAA,KAAA,OAAKC,MAAOrD,EAAO2X,iBAAiB3V,SAAEwF,KAAKZ,MAAMhD,EAAE,WACnDR,EAAAA,EAAAA,KAACye,EAAAA,WAAU,CACP3e,GAAIlD,EAAOoX,YACX7U,MAAOiF,KAAKG,MAAM0S,KAAK2G,KACvB3c,SAAU2c,GAAQxZ,KAAK6Z,WAAW,OAAQL,MAE9C5d,EAAAA,EAAAA,KAAC0e,EAAAA,WAAU,CACP5e,GAAIlD,EAAOsX,YACX8C,KAAM5S,KAAKG,MAAMyS,KACjB2H,MAAO,CAAC,QAAS,UAAW,WAC5Bxf,MAAOiF,KAAKG,MAAM0S,KAAK4G,KACvB5c,SAAU4c,GAAQzZ,KAAK6Z,WAAW,OAAQJ,MAE9C7d,EAAAA,EAAAA,KAACY,EAAAA,UAAS,CACNG,QAAQ,WACRjB,GAAIlD,EAAO+W,QACXiL,WAAYxa,KAAKZ,MAAMhD,EAAE,MACzBgH,KAAK,SACLpG,UAAW,CACPyd,UAAW,CACPC,IAAK,IACLC,IAAK,IAGb5f,MAAOiF,KAAKG,MAAM0S,KAAK+G,GACvB/c,SAAUC,GAAKkD,KAAK6Z,WAAW,KAAM/c,EAAEC,OAAOhC,cAI1D,WAGZO,EAAAA,EAAAA,MAAC+B,EAAAA,cAAa,CAAA7C,SAAA,EACVoB,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACHX,QAAQ,YACRc,SAAkC,KAAxBuC,KAAKG,MAAM0S,KAAKlB,IAC1BxV,QAASA,KACL,MAAMye,EAAW5a,KAAKG,MAAMmS,aAC5BtS,KAAKK,SAAS,CAAEiS,cAAc,EAAOC,cAAc,IAAS,IACxDqI,EAAW5a,KAAKmZ,WAAanZ,KAAKuZ,YACrC,EAEL9f,MAAM,UACNiD,WAAS,EAAAlC,SAERwF,KAAKG,MAAMmS,aAAetS,KAAKZ,MAAMhD,EAAE,UAAY4D,KAAKZ,MAAMhD,EAAE,UAErER,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACHX,QAAQ,YACRR,QAASA,IAAM6D,KAAKK,SAAS,CAAEiS,cAAc,EAAOC,cAAc,IAClE9Y,MAAM,OAAMe,SAEXwF,KAAKZ,MAAMhD,EAAE,iBAKlC,CAEAye,YAAAA,CAAaC,GACT,MAAM9I,EAAQ8I,EAAUxF,UACpBtV,KAAK8Q,YACLsC,aAAapT,KAAK8Q,WAClB9Q,KAAK8Q,eAAY5U,GAErB8D,KAAKiB,aAAagH,QAAQ,oBAAqB,YAC/CjI,KAAKiB,aAAagH,QAAQ,oBAAqB+J,EAAMzG,YACrDvL,KAAKiB,aAAagH,QAAQ,kBAAmBjI,KAAKG,MAAM8R,IAAI1G,YAC5DvL,KAAKK,SAAS,CAAE2R,QAAOD,cAAe,aAAc,IAAM/R,KAAK8R,eACnE,CAEAiJ,UAAAA,CAAWC,GACP,MAAM/I,EAAM+I,EAAQ1F,UACpBtV,KAAKiB,aAAagH,QAAQ,oBAAqB,YAC/CjI,KAAKiB,aAAagH,QAAQ,oBAAqBjI,KAAKG,MAAM6R,MAAMzG,YAChEvL,KAAKiB,aAAagH,QAAQ,kBAAmBgK,EAAI1G,YAC7CvL,KAAK8Q,YACLsC,aAAapT,KAAK8Q,WAClB9Q,KAAK8Q,eAAY5U,GAErB8D,KAAKK,SAAS,CAAE4R,MAAKF,cAAe,aAAc,IAAM/R,KAAK8R,eACjE,CAEAmJ,aAAAA,GAA8B,IAADC,EAAAC,EACzB,OACI7f,EAAAA,EAAAA,MAAC8f,EAAAA,QAAO,CAAA5gB,SAAA,EACJc,EAAAA,EAAAA,MAAC+f,EAAAA,YAAW,CACR1e,QAAQ,WACRd,MAAOrD,EAAO6V,qBAAqB7T,SAAA,EAEnCoB,EAAAA,EAAAA,KAAC0f,EAAAA,WAAU,CAAA9gB,SAAEwF,KAAKZ,MAAMhD,EAAE,uBAC1BR,EAAAA,EAAAA,KAAC2f,EAAAA,OAAM,CACH5e,QAAQ,WACR5B,MAAOiF,KAAKG,MAAMyR,iBAAmB,GACrC/U,SAAUC,IACN,MAAM8U,EAAkB9U,EAAEC,OAAOhC,MACjCiF,KAAKiB,aAAagH,QAAQ,sBAAuB2J,GAC5C5R,KAAKmT,sBAAsBvB,GAAiB3P,MAC5C0Q,GACG3S,KAAKK,SAAS,CAAEuR,kBAAiBe,sBAAqB,IAAM3S,KAAK8R,iBACxE,EACHtX,SAE0B,QAF1B0gB,EAEDlb,KAAKG,MAAMoR,wBAAgB,IAAA2J,OAAA,EAA3BA,EAA6B1Z,KAAIsL,IAC9BlR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAO+R,EAAGrL,GACV5F,MAAQiR,EAAG4E,WAAkCxV,EAA1B1D,EAAOgW,iBAA6BhU,SAEtDsS,EAAGrL,IAJCqL,EAAGrL,YASxBnG,EAAAA,EAAAA,MAAC+f,EAAAA,YAAW,CACR1e,QAAQ,WACRd,MAAOrD,EAAO8V,mBAAmB9T,SAAA,EAEjCoB,EAAAA,EAAAA,KAAC0f,EAAAA,WAAU,CAAA9gB,SAAEwF,KAAKZ,MAAMhD,EAAE,eAC1Bd,EAAAA,EAAAA,MAACigB,EAAAA,OAAM,CACH5e,QAAQ,WACRkL,IAAK7H,KAAKiR,SACVlW,MAAOiF,KAAKG,MAAM4R,cAClBlV,SAAUC,GAAKkD,KAAKkT,oBAAoBpW,EAAEC,OAAOhC,OAAOP,SAAA,EAExDoB,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAM,WACNW,GAAIlD,EAAOiW,YAAYjU,SAEtBwF,KAAKZ,MAAMhD,EAAE,iBAJV,WAMRR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAO,GAAGP,SAETwF,KAAKZ,MAAMhD,EAAE,oBAHV,MAKRR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAO,GAAGP,SAETwF,KAAKZ,MAAMhD,EAAE,oBAHV,MAKRR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAO,GAAGP,SAETwF,KAAKZ,MAAMhD,EAAE,cAHV,MAKRR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAM,MAAKP,SAEVwF,KAAKZ,MAAMhD,EAAE,aAHV,MAKRR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAO,KAAQP,SAEdwF,KAAKZ,MAAMhD,EAAE,kBAHV,MAKRR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAM,OAAMP,SAEXwF,KAAKZ,MAAMhD,EAAE,cAHV,MAKRR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAO,MAAYP,SAElBwF,KAAKZ,MAAMhD,EAAE,cAHV,MAKRR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAM,SAAQP,SAEbwF,KAAKZ,MAAMhD,EAAE,iBAHV,MAKRR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAO,MAAaP,SAEnBwF,KAAKZ,MAAMhD,EAAE,iBAHV,MAKRR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAM,QAAOP,SAEZwF,KAAKZ,MAAMhD,EAAE,eAHV,OAKRR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAO,MAAaP,SAEnBwF,KAAKZ,MAAMhD,EAAE,iBAHV,OAKRR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAM,OAAMP,SAEXwF,KAAKZ,MAAMhD,EAAE,cAHV,OAKRR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAM,WAAUP,SAEfwF,KAAKZ,MAAMhD,EAAE,mBAHV,aAQhBd,EAAAA,EAAAA,MAAC2e,EAAAA,qBAAoB,CACjBC,YAAaC,EAAAA,EACbC,cAAepO,EAAUhM,KAAKZ,MAAMsI,MAAMlN,SAAA,EAE1Cc,EAAAA,EAAAA,MAAA,OAAKO,MAAOrD,EAAOuX,gBAAgBvV,SAAA,EAC/BoB,EAAAA,EAAAA,KAAA,OACIC,MAAO,IACArD,EAAO2X,iBACVlC,QAAsC,aAA7BjO,KAAKG,MAAM4R,cAA+B,QAAM7V,GAC3D1B,SAEDwF,KAAKZ,MAAMhD,EAAE,iBAElBR,EAAAA,EAAAA,KAACye,EAAAA,WAAU,CACP3e,GAAIlD,EAAOoX,YACXnS,SAAuC,aAA7BuC,KAAKG,MAAM4R,cACrBhX,MAAO,IAAI+Z,KAAK9U,KAAKG,MAAM6R,OAC3BnV,SAAU2c,GAAQxZ,KAAK6a,aAAarB,MAExC5d,EAAAA,EAAAA,KAAC0e,EAAAA,WAAU,CACP7c,SAAuC,aAA7BuC,KAAKG,MAAM4R,cACrBrW,GAAIlD,EAAOsX,YACX8C,KAAM5S,KAAKG,MAAMyS,KACjB7X,MAAO,IAAI+Z,KAAK9U,KAAKG,MAAM6R,OAC3BnV,SAAU2c,GAAQxZ,KAAK6a,aAAarB,SAG5Cle,EAAAA,EAAAA,MAAA,OAAKO,MAAOrD,EAAOuX,gBAAgBvV,SAAA,EAC/BoB,EAAAA,EAAAA,KAAA,OACIC,MAAO,IACArD,EAAO2X,iBACVlC,QAAsC,aAA7BjO,KAAKG,MAAM4R,cAA+B,QAAM7V,GAC3D1B,SAEDwF,KAAKZ,MAAMhD,EAAE,eAElBR,EAAAA,EAAAA,KAACye,EAAAA,WAAU,CACP5c,SAAuC,aAA7BuC,KAAKG,MAAM4R,cACrBrW,GAAIlD,EAAOoX,YACX7U,MAAO,IAAI+Z,KAAK9U,KAAKG,MAAM8R,KAC3BpV,SAAU2c,GAAQxZ,KAAK+a,WAAWvB,MAEtC5d,EAAAA,EAAAA,KAAC0e,EAAAA,WAAU,CACP7c,SAAuC,aAA7BuC,KAAKG,MAAM4R,cACrBrW,GAAIlD,EAAOsX,YACX8C,KAAM5S,KAAKG,MAAMyS,KACjB7X,MAAO,IAAI+Z,KAAK9U,KAAKG,MAAM8R,KAC3BpV,SAAU2c,GAAQxZ,KAAK+a,WAAWvB,YAI9C5d,EAAAA,EAAAA,KAAC4a,EAAAA,IAAG,CACAC,UAAU,MACV/a,GAAIlD,EAAO6W,OAGG,QAAjB8L,EAAAnb,KAAKG,MAAM0L,cAAM,IAAAsP,GAAjBA,EAAmBjb,QAChBtE,EAAAA,EAAAA,KAACI,EAAAA,WAAU,CACPC,KAAK,QACLE,QAASA,IAAM6D,KAAKyb,aACpBzhB,MAAOgG,KAAKZ,MAAMhD,EAAE,oBAAoB5B,UAExCoB,EAAAA,EAAAA,KAAC8f,EAAAA,IAAU,MAEf,KAEH1b,KAAKG,MAAMwS,kBAAkB5N,SAAS,WAAa/E,KAAKZ,MAAMuc,YAC3D/f,EAAAA,EAAAA,KAACI,EAAAA,WAAU,CACPC,KAAK,QACLE,QAASA,KACL,MAAMsd,EAAO,IAAI3E,KAEXjC,EAA8B,CAChC0B,IAAKvU,KAAKG,MAAM0L,OAAO7L,KAAKG,MAAM0L,OAAO3L,OAAS,GAAGqU,IACrD5C,IAAK3R,KAAKG,MAAM0L,OAAO7L,KAAKG,MAAM0L,OAAO3L,OAAS,GAAGyR,IACrD6H,KAAM,IAAI1E,KAAK2E,GACfG,GAAI,EACJH,KAAM,IAAI3E,KAAK2E,GACfjF,EAAG,GAGPxU,KAAKK,SAAS,CACVwS,OACAN,cAAc,GAChB,EACJ/X,UAEFoB,EAAAA,EAAAA,KAACggB,EAAAA,IAAU,MAEf,KACH5b,KAAKG,MAAMwS,kBAAkB5N,SAAS,WAAa/E,KAAKZ,MAAMuc,YAC3D/f,EAAAA,EAAAA,KAACI,EAAAA,WAAU,CACPC,KAAK,QACLwB,SAAyC,IAA/BuC,KAAKG,MAAMkS,SAASnS,OAC9B/D,QAASA,KACL,MAAMgE,EAAQU,KAAKC,MACfD,KAAKsC,UACDnD,KAAKG,MAAM0L,OAAO7E,MAAM8F,GAAoBA,EAAGqE,KAAOnR,KAAKG,MAAMgS,iBAGnEsH,EAAO,IAAI3E,KAAK3U,EAAMgR,IAC5BhR,EAAMqZ,KAAO,IAAI1E,KAAK2E,GACtBtZ,EAAMsZ,KAAO,IAAI3E,KAAK2E,GAEtBzZ,KAAKK,SAAS,CACVwS,KAAM1S,EACNmS,cAAc,GAChB,EACJ9X,UAEFoB,EAAAA,EAAAA,KAACigB,EAAAA,KAAQ,MAEb,KACH7b,KAAKG,MAAMwS,kBAAkB5N,SAAS,WAAa/E,KAAKZ,MAAMuc,YAC3D/f,EAAAA,EAAAA,KAACI,EAAAA,WAAU,CACPC,KAAK,QACLwB,UAAWuC,KAAKG,MAAMkS,SAASnS,OAC/B/D,QAASA,KAEqC,kBAA/B6D,KAAKG,MAAM2Y,iBAClBhE,KAAKM,MAAQpV,KAAKG,MAAM2Y,gBAAkB,IAE1C9Y,KAAK+Y,WAEL/Y,KAAKK,SAAS,CAAEuY,YAAY,GAChC,EACFpe,UAEFoB,EAAAA,EAAAA,KAACod,EAAAA,OAAU,MAEf,OAGhB,CAEAyC,UAAAA,GACI,IAAIK,EAAU/a,OAAOgb,SAASC,eAAe,eACxCF,IACDA,EAAUC,SAASE,cAAc,KACjCH,EAAQI,aAAa,KAAM,eAC3BJ,EAAQjgB,MAAMhD,QAAU,OACxBkjB,SAASI,KAAKC,YAAYN,IAG9B,MAAMO,EAAQ,CAAC,sCAEfrc,KAAKG,MAAM0L,OAAO/I,SACb3C,IACIA,EAAMiH,IACNjH,EAAMrD,GACPuf,EAAM3Z,KACF,CACIgO,EAAkB6F,gBAAgBpW,EAAMgR,IAC1B,OAAdhR,EAAMwR,UAA8BzV,IAAdiE,EAAMwR,IAAoB,OAASxR,EAAMwR,IAAIpG,WACnEpL,EAAMoU,IAAM,OAAS,QACrBpU,EAAMmU,MAAQ,IAChBgI,KAAK,QAInBR,EAAQI,aAAa,OAAQ,iCAAiCK,mBAAmBF,EAAMC,KAAK,UAC5FR,EAAQI,aACJ,WACA,GAAG9gB,EAAAA,MAAMohB,cAAc,CAAE,CAACxc,KAAKZ,MAAM4G,IAAI9C,KAAMlD,KAAKZ,MAAM4G,KAAOhG,KAAKZ,MAAM4G,IAAI9C,IAAKlD,KAAKZ,MAAMsI,aAGpGoU,EAAQW,QAERV,SAASI,KAAKO,YAAYZ,EAC9B,CAEArQ,MAAAA,GACI,OAAKzL,KAAKG,MAAMoR,kBAKZjW,EAAAA,EAAAA,MAACsQ,EAAAA,MAAK,CAAC/P,MAAOrD,EAAOkF,MAAMlD,SAAA,CACtBwF,KAAKG,MAAMkU,SAAUzY,EAAAA,EAAAA,KAAC8P,EAAAA,eAAc,KAAM9P,EAAAA,EAAAA,KAAA,OAAKC,MAAOrD,EAAO4X,oBAC7DpQ,KAAKib,iBACNrf,EAAAA,EAAAA,KAAC4a,EAAAA,IAAG,CACAC,UAAU,MACV/a,GAAIlD,EAAO+U,SAAS/S,SAEnBwF,KAAKgY,gBAEThY,KAAK2Y,sBACL3Y,KAAK+Z,uBAdHne,EAAAA,EAAAA,KAAC8P,EAAAA,eAAc,GAiB9B,CAOA,sBAAO6K,CAAgBpF,GACnB,MAAO,GAAG,IAAI2D,KAAK3D,GAAIuF,wBAAwB,IAAI5B,KAAK3D,GAAIwF,yBAAyBxF,EAAK,KAAO5F,WAAWqL,SAAS,EAAG,MAC5H,EAGJ,SAAe7K,EAAAA,EAAAA,YAAf,CAA2B2E,G,iHCplD3BiM,EAAAA,EAAY,CACRC,EAAAA,EACAC,EAAAA,EACAC,EAAAA,EACAC,EAAAA,EACAC,EAAAA,EACAC,EAAAA,EACAC,EAAAA,IAGJ,MAAM1kB,EAA8B,CAChCkF,MAAO,CACHC,OAAQ,OACRC,UAAW,OACXjF,SAAU,OACVG,SAAU,SACVgF,MAAO,QAEX8W,MAAO,CACH9W,MAAO,OACPhF,SAAU,UAEdqkB,iBAAmB3jB,IAAe,CAC9BmE,OAAQ,eAAewL,SAAS3P,EAAMgU,OAAOC,QAAQC,UAAqB,IAAM,SAEpF0P,oBAAqB,CACjBzf,OAAQ,QAEZ0Q,qBAAsB,CAClBvQ,MAAO,KAEXwQ,mBAAoB,CAChBC,WAAY,GACZzQ,MAAO,KAEX0Q,iBAAkB,CACdP,QAAS,IAEbQ,YAAcjV,IAAe,CACzBC,MAAOD,EAAME,QAAQC,QAAQC,OAEjCyjB,oBAAqB,CACjBrkB,YAAa,GAEjBqW,KAAM,CACFC,SAAU,GAEdM,YAAa,CACT9R,MAAO,IACP2R,GAAI,MACJ,aAAc,CACV5W,QAAS,QAEb,UAAW,CACPgX,QAAS,aAEb,4BAA6B,CACzBL,GAAI,EACJC,GAAI,QAGZK,YAAa,CACThS,MAAO,GACP2R,GAAI,MAEJ,aAAc,CACV5W,QAAS,QAEb,UAAW,CACPgX,QAAS,aAEb,4BAA6B,CACzBL,GAAI,EACJC,GAAI,QAGZU,iBAAkB,CACd/W,SAAU,WACVyW,QAAS,EACT3W,SAAU,SACV8V,KAAM,EACN1V,KAAM,GAEVyW,gBAAiB,CACb3W,SAAU,WACVmV,WAAY,EACZpQ,YAAa,EACb6R,aAAc,EACdzT,WAAY,EACZ0T,cAAe,EACff,OAAQ,qBACRgB,aAAc,EACdrX,QAAS,QAEbykB,WAAY,CACRxf,MAAO,GACPH,OAAQ,IAEZ4f,cAAe,CACXvkB,YAAa,EACb2E,OAAQ,GACRG,MAAO,KAIT0f,EAAoB,GACpBC,EAAqB,GA4C3B,MAAMC,UAAoBxe,EAAAA,UA+CtBC,WAAAA,CAAYC,GAIR,GAHAE,MAAMF,GAAO,KA/CTue,kBAAY,OAEH1M,cAAQ,OAEjB2M,YAAoD,KAAK,KAEzDC,iBAAW,OAEX7M,iBAAW,OAEXE,gBAAU,OAEDL,UAAI,OAEJiN,YAAM,OAEflJ,WAAK,OAULmJ,YAAoD,KAAK,KAEzDC,YAAoD,KAAK,KAEzDC,UAAI,OAEJC,UAAI,OAEJpN,UAAkD,KAAK,KAEvDqN,eAAuD,KAAK,KAE5DC,eAAS,OAETpM,WAAK,OAELC,SAAG,OAEMhR,kBAAY,OA2G7Bod,SAAW,KACHre,KAAK+d,aACL3K,aAAapT,KAAK+d,aAEtB/d,KAAK+d,YAAcnd,YAAW,KAC1BZ,KAAK+d,YAAc,KACnB/d,KAAKse,oBAAoB,GAC3B,EACJ,KAEFzhB,SAAW,CAAC4E,EAAYtB,KACpB,GACIsB,IAAOzB,KAAKZ,MAAM4G,IAAI9C,KACtB/C,GACAH,KAAKgR,eACHhR,KAAKgR,YAAY9Q,QAAUF,KAAKgR,YAAYhR,KAAKgR,YAAY9Q,OAAS,GAAGiR,GAAKhR,EAAMgR,MAEjFnR,KAAKG,MAAMua,KAAOva,EAAMgR,GAAKnR,KAAKG,MAAMua,IAAM,QAC3C1a,KAAK6d,aACL7d,KAAK6d,YAAYnb,KAAK,CAAEiP,IAAKxR,EAAMwR,IAAKR,GAAIhR,EAAMgR,KAEtDnR,KAAKgR,YAAYtO,KAAK,CAAEiP,IAAKxR,EAAMwR,IAAKR,GAAIhR,EAAMgR,KAG9ChR,EAAMgR,IAAMnR,KAAK4U,MAAM+F,KAAOxa,EAAMgR,IAAMnR,KAAK4U,MAAM8F,IAAM,KAC3D1a,KAAKue,oBAGV,GAAI9c,EAAGiF,WAAW,oBAAsBjF,EAAG2P,SAAS,WAAapR,KAAKG,MAAMoR,iBAAkB,CACjG,MAAMxL,EAAWtE,EAAG4P,UAAU,GAA0B5P,EAAGvB,OAAS,GAC9DoR,EAAOtR,KAAKG,MAAMoR,iBAClBC,EAAYF,EAAKG,WAAU3E,GAAMA,EAAGrL,KAAOsE,IACjD,IAAmB,IAAfyL,GACIF,EAAKE,GAAWE,UAAiB,OAALvR,QAAK,IAALA,IAAAA,EAAOwR,KAAK,CACxC,MAAMJ,EAAmB1Q,KAAKC,MAAMD,KAAKsC,UAAUmO,IACnDC,EAAiBC,GAAWE,QAAe,OAALvR,QAAK,IAALA,IAAAA,EAAOwR,KAC7C3R,KAAKK,SAAS,CAAEkR,qBAAoB,KAE5BA,EAAiBC,GAAWE,OAAS1R,KAAKG,MAAMyR,kBAAoB7L,GAC/D/F,KAAK6R,mBAAmB5P,MAAK,IAAMjC,KAAKue,eACjD,GAER,CAER,GAnJAve,KAAKiB,aAAgBF,OAAeC,eAAiBD,OAAOE,aAEvDjB,KAAKZ,MAAMkV,KAKZtU,KAAKgS,MAAQhS,KAAKZ,MAAMkV,SALN,CAClB,MAAMA,EAAO,IAAIQ,KACjBR,EAAK8C,SAAS9C,EAAKoF,WAAa,KAChC1Z,KAAKgS,MAAQsC,EAAKgB,SACtB,CAGKtV,KAAKZ,MAAM6S,IAGZjS,KAAKiS,IAAMjS,KAAKZ,MAAM6S,IAFtBjS,KAAKiS,IAAM6C,KAAKM,MAIpB,IAAIrD,EAAgB/R,KAAKiB,aAAaC,QAAQ,sBAAwB,KACtE,MAAMyZ,EAAMxR,SAASnJ,KAAKiB,aAAaC,QAAQ,qBAAsB,KAAO,EACtEwZ,EAAMvR,SAASnJ,KAAKiB,aAAaC,QAAQ,mBAAoB,KAAO,EAEpEyZ,GAAQD,GAAU3I,GAAmC,aAAlBA,IACrCA,EAAgB,MAGhB2I,GAAOC,IACP5I,EAAgB,YAGpB/R,KAAKG,MAAQ,CACTyR,gBAAiB5R,KAAKZ,MAAMwS,iBAAmB,GAC/CL,iBAAkB,KAClBoC,eAAgB,GAChB6K,YAAa,IACbC,WAAY,IACZ7L,MAAM,EACNb,gBACA2M,UAA0D,SAA/C1e,KAAKiB,aAAaC,QAAQ,iBACrCyZ,MACAD,MACAiE,QAAS,EACTC,SAAU,GACVC,aAAa,GAGjB7e,KAAK2d,aAAe,KACpB3d,KAAKiR,UAAW3P,EAAAA,EAAAA,aAChBtB,KAAK4d,YAAc,KACnB5d,KAAK6d,YAAc,KACnB7d,KAAKgR,YAAc,KACnBhR,KAAKkR,WAAa,GAElBlR,KAAK6Q,KAAO7Q,KAAKZ,MAAM4G,IAAItE,QAAU1B,KAAKZ,MAAM4G,IAAItE,OAAOmP,KAAO,IAAI7Q,KAAKZ,MAAM4G,IAAItE,OAAOmP,OAAS,GAErG7Q,KAAK8d,QAASxc,EAAAA,EAAAA,aAEdtB,KAAK4U,MAAQ,CAAC,CAClB,CAEA1S,iBAAAA,GACSlC,KAAKZ,MAAM+C,OAAOmR,eAAetT,KAAKZ,MAAM4G,IAAI9C,IAAKlD,KAAKnD,UAC/DkE,OAAO+d,iBAAiB,SAAU9e,KAAKqe,UAClCre,KAAKiT,cACLhR,MAAK,KAAOjC,KAAKZ,MAAM2f,WAAa/e,KAAK6R,qBACzC5P,MAAK,IAAMjC,KAAKkT,oBAAoBlT,KAAKG,MAAM4R,eAAe,GAAM,IAAM/R,KAAKgf,iBACxF,CAEA1c,oBAAAA,GACQtC,KAAK4d,cACLxK,aAAapT,KAAK4d,aAClB5d,KAAK4d,YAAc,MAGnB5d,KAAK8Q,YACLsC,aAAapT,KAAK8Q,WAClB9Q,KAAK8Q,UAAY,MAGjB9Q,KAAKme,iBACL/K,aAAapT,KAAKme,gBAClBne,KAAKme,eAAiB,MAGtBne,KAAK+d,cACL3K,aAAapT,KAAK+d,aAClB/d,KAAK+d,YAAc,MAGnB/d,KAAKge,cACL5K,aAAapT,KAAKge,aAClBhe,KAAKge,YAAc,MAGnBhe,KAAK2d,cACL3d,KAAK2d,aAAasB,qBAAqBC,UAG3C,IAAK,IAAI9X,EAAI,EAAGA,EAAIpH,KAAKkR,WAAWhR,OAAQkH,IACxCpH,KAAKZ,MAAM+C,OAAOoR,iBAAiBvT,KAAKkR,WAAW9J,GAAIpH,KAAKnD,UAEhEmD,KAAKkR,WAAa,GAElBlR,KAAKZ,MAAM+C,OAAOoR,iBAAiBvT,KAAKZ,MAAM4G,IAAI9C,IAAKlD,KAAKnD,UAC5DkE,OAAOoe,oBAAoB,SAAUnf,KAAKqe,SAC9C,CAiDA,iBAAMpL,GAA8B,IAADmM,EAC/B,GAAIpf,KAAKZ,MAAM2f,UAAW,CACtB,MAAMM,EACFrf,KAAKZ,MAAMuU,sBACJ3T,KAAKZ,MAAM+C,OAAOmd,SAAS,kBAAkBtf,KAAKZ,MAAMuU,wBAqBnE,OAnBK3T,KAAKkR,WAAWhR,SACjBF,KAAKkR,WAAa,CAAC,kBAAkBlR,KAAKZ,MAAMuU,8BAC1C3T,KAAKZ,MAAM+C,OAAOmR,eACpB,kBAAkBtT,KAAKZ,MAAMuU,uBAC7B3T,KAAKnD,sBAIP,IAAI+F,SAAQ0H,IACdtK,KAAKK,SACD,CAEIsT,eAAgB3T,KAAKZ,MAAMuU,eAC3B/B,gBAAiB5R,KAAKZ,MAAMuU,eAC5BpC,iBAAkB,CAAC,CAAE9P,GAAIzB,KAAKZ,MAAMuU,eAAgBjC,QAAgB,OAAP2N,QAAO,IAAPA,IAAAA,EAAS1N,SAE1E,IAAMrH,EAAQ,OACjB,GAGT,CAEA,IAAIgH,QAA+CtR,KAAKyT,sBACxD,MAAMC,QAAe1T,KAAKZ,MAAM+C,OAAOC,yBACvC,IAAI2I,EAAuC,GACvC/K,KAAKZ,MAAMmgB,mBACXxU,QAAkB/K,KAAKZ,MAAM+C,OAAOqd,oBAAoB,WAAW,IAGvE,MAAMX,IAAgB9T,EAAU/D,MAAKkN,GAAQA,EAAKhR,IAAIwD,WAAW,6BAE3DiN,EAAiBD,GAAUA,EAAOhS,QAAUgS,EAAOhS,OAAOiS,eAE5D3T,KAAKZ,MAAM4G,IAAItE,OAAOC,SACtB2P,EAAOA,EAAKjL,QAAOyG,GAAM9M,KAAKZ,MAAM4G,IAAItE,OAAOC,OAAOmL,EAAGrL,OAK7D,IAAImQ,EAAkB5R,KAAKiB,aAAaC,QAAQ,wBAA0B,GAK1E,GAJK0Q,GAAoBN,EAAKtK,MAAK8F,GAAMA,EAAGrL,KAAOmQ,GAAmB9E,EAAG4E,UAErEE,EAAkB+B,IAEjB/B,IAAoBN,EAAKtK,MAAK8F,GAAMA,EAAGrL,KAAOmQ,GAAmB9E,EAAG4E,QAAQ,CAE7E,MAAMkC,EAAsBtC,EAAKtK,MAAK8F,GAAMA,EAAG4E,QAC3CkC,IACAhC,EAAkBgC,EAAoBnS,GAE9C,EAEKmQ,GAAmBN,EAAKpR,SACzB0R,EAAkB+B,GAGtB3T,KAAKK,SAAS,CACVuS,KAAMc,EAAOhS,OAAOgI,WAAW3E,SAAS,KAExCwM,iBAAkBD,EAClBqC,iBACA/B,kBACAiN,cACAD,SAAU5e,KAAKZ,MAAM4G,IAAItE,OAAOC,SACmB,QAA7Cyd,EAAApf,KAAKZ,MAAM4G,IAAItE,OAAOC,OAAOiQ,UAAgB,IAAAwN,OAAA,EAA7CA,EAA+CK,YAC/C,IAEd,CAEAhM,mBAAAA,GACI,GAAIzT,KAAKZ,MAAMwS,gBACX,OAAOhP,QAAQ0H,QAAQ,IAE3B,MAAMgH,EAAyC,GACzChL,EAAgB,GAatB,OAXAtG,KAAKZ,MAAMmC,iBAAiBuB,SAAQiD,IAAa,IAAD2Z,EAC5C,MAAM7L,EAAmC7T,KAAKZ,MAAM2C,QAAQ,kBAAkBgE,KAG9E,GAAW,OAAP8N,QAAO,IAAPA,GAAe,QAAR6L,EAAP7L,EAASnS,cAAM,IAAAge,GAAfA,EAAiB5L,WAAY,CAC7B,MAAMC,EAAU,CAAEtS,GAAIsE,EAAU2L,OAAO,GACvCJ,EAAK5O,KAAKqR,GACVzN,EAAI5D,KAAK,kBAAkBqD,UAC/B,KAGAO,EAAIpG,OACGF,KAAKZ,MAAM+C,OAAO6R,iBAAiB1N,GAAKrE,MAAKmJ,UAChDxF,OAAOC,KAAKoO,GAAQnR,SAAQrB,IACxB,MAAMyS,EAAO5C,EAAKtK,MAAK8F,GAAMrL,EAAG2P,SAAS,GAAGtE,EAAGrL,cACpC,IAAD0S,EAAND,IACAA,EAAKxC,QAAoB,QAAXyC,EAACF,EAAOxS,UAAG,IAAA0S,IAAVA,EAAYxC,KAC/B,IAEJ3R,KAAKkR,WAAa5K,EAClB,IAAK,IAAIc,EAAI,EAAGA,EAAId,EAAIpG,OAAQkH,UACtBpH,KAAKZ,MAAM+C,OAAOmR,eAAehN,EAAIc,GAAIpH,KAAKnD,UAGxD,OAAOyU,CAAI,IAIZ1O,QAAQ0H,QAAQgH,EAC3B,CAEAO,gBAAAA,GAAmC,IAADuC,EAC9B,MAAMgB,EAAM,IAAIN,KACVO,EAAS,IAAIP,KAAK,IAAM,EAAG,GAEjC,OAA+B,QAA/BV,EAAIpU,KAAKG,MAAMoR,wBAAgB,IAAA6C,GAA3BA,EAA6BpN,MAAK8F,GAAMA,EAAGrL,KAAOzB,KAAKG,MAAMyR,iBAAmB9E,EAAG4E,QAC5E1R,KAAKZ,MAAM+C,OACb2R,WAAW9T,KAAKZ,MAAM4G,IAAI9C,IAAK,CAC5B6C,SAAU/F,KAAKG,MAAMyR,gBACrBI,MAAOqD,EAAOC,UACdrD,IAAKmD,EAAIE,UAETC,MAAO,EACPjB,MAAM,EACNC,KAAK,EACLC,GAAG,EACHC,OAAO,EACPC,UAAW,SAEdzS,MAAM4J,IAAwD,IAAD8T,EAEtD9T,GAA6B,QAAV,QAAT8T,EAAA9T,EAAO,UAAE,IAAA8T,OAAA,EAATA,EAAWhO,MACrB9F,EAAOjB,QAEX5K,KAAKgR,YAAcnF,CAAM,IAI9BjJ,QAAQ0H,SACnB,CAEAwH,WAAAA,CAAYE,EAAgBC,GAAoE,IAADkD,EAgB3F,IACKnV,KAAKG,MAAMyR,iBACgB,QAA5BuD,EAACnV,KAAKG,MAAMoR,wBAAgB,IAAA4D,IAA3BA,EAA6BnO,MAAK8F,GAAMA,EAAGrL,KAAOzB,KAAKG,MAAMyR,iBAAmB9E,EAAG4E,QAEpF,OAAO9O,QAAQ0H,QAAQ,IAG3B,MAAMsV,EAAsC,CACxC7Z,SAAU/F,KAAKG,MAAMyR,gBACrBI,QACAC,MACAqC,MAAM,EACNC,KAAK,EACLC,GAAG,EACHC,OAAO,EACPC,UAAW,OACXC,qBAAqB,GAezB,OAVI1C,EAAMD,EAAQ,SAEqB,YAA/BhS,KAAKZ,MAAM4G,IAAItE,OAAO0B,MACU,WAA/BpD,KAAKZ,MAAM4G,IAAItE,OAAO0B,MAAqBpD,KAAKZ,MAAM4G,IAAItE,OAAOme,UAGtED,EAAQlL,UAAY,UAIjB1U,KAAKZ,MAAM+C,OACb2R,WAAW9T,KAAKZ,MAAM4G,IAAI9C,IAAK0c,GAC/B3d,MAAM4J,IAEH,MAAM+I,EAAQ,GACd,IAAIoB,EAAI,EACR,MAAMnB,EAAQ7U,KAAKgR,YACnB,IAAIiN,EAAO,KACPC,EAAO,KAEX,IAAK,IAAI9hB,EAAI,EAAGA,EAAIyP,EAAO3L,OAAQ9D,IAAK,CACpC,GAAIyY,EACA,KAAOmB,EAAInB,EAAM3U,QAAU2U,EAAMmB,GAAG7E,GAAKtF,EAAOzP,GAAG+U,IAC/CyD,EAAMlS,KAAKmS,EAAMmB,IAEjBA,KAIHpB,EAAM1U,QAAU0U,EAAMA,EAAM1U,OAAS,GAAGiR,GAAKtF,EAAOzP,GAAG+U,GACxDyD,EAAMlS,KAAKmJ,EAAOzP,IAGlBwY,EAAMA,EAAM1U,OAAS,GAAGiR,KAAOtF,EAAOzP,GAAG+U,IACzCyD,EAAMA,EAAM1U,OAAS,GAAGyR,MAAQ9F,EAAOzP,GAAG+U,IAE1ClN,QAAQC,MAAM,kBAEL,OAAT+Z,GAAiBpS,EAAOzP,GAAGuV,IAAMsM,KACjCA,EAAOpS,EAAOzP,GAAGuV,MAER,OAATuM,GAAiBrS,EAAOzP,GAAGuV,IAAMuM,KACjCA,EAAOrS,EAAOzP,GAAGuV,IAEzB,CAEA,GAAIkD,EACA,KAAOmB,EAAInB,EAAM3U,QACb0U,EAAMlS,KAAKmS,EAAMmB,IACjB/R,QAAQ6F,IAAI,aAAa,IAAIgL,KAAKD,EAAMmB,GAAG7E,IAAI4D,kBAAkBF,EAAMmB,GAAGrE,OAC1EqE,IAsBR,OAjBApB,EAAM9N,MAAK,CAACgZ,EAAGC,IAAOD,EAAE3O,GAAK4O,EAAE5O,GAAK,EAAI2O,EAAE3O,GAAK4O,EAAE5O,IAAM,EAAI,IAE3DnR,KAAK6d,YAAcjJ,EACnB5U,KAAKie,KAAOA,EACZje,KAAKke,KAAOA,EAERle,KAAKie,KAAO,GACZje,KAAKie,KAAOvT,KAAKC,MAAkB,GAAZ3K,KAAKie,MAAa,GAEzCje,KAAKie,KAAOvT,KAAKsV,KAAKhgB,KAAKie,MAE3Bje,KAAKke,KAAO,GACZle,KAAKke,KAAOxT,KAAKC,MAAkB,GAAZ3K,KAAKke,MAAa,GAEzCle,KAAKke,KAAOxT,KAAKsV,KAAKhgB,KAAKke,MAGxBtJ,CAAK,GAExB,CAEAqL,WAAAA,CAAYpU,GAER,MAAMnH,EAA+C,GACrD,KAFAmH,EAASA,GAAU7L,KAAK6d,aAEZ3d,OACR,MAAO,GAEX,IAAK,IAAIkH,EAAI,EAAGA,EAAIyE,EAAO3L,OAAQkH,IAAK,CACpC,MAAM8Y,EAA2C,CAAEnlB,MAAO,CAAC8Q,EAAOzE,GAAG+J,GAAItF,EAAOzE,GAAGuK,MAC/E9F,EAAOzE,GAAGA,IACV8Y,EAAGC,OAAQ,GAEfzb,EAAKhC,KAAKwd,EACd,CAMA,OALKlgB,KAAK4U,MAAM+F,MACZ3a,KAAK4U,MAAM+F,IAAM9O,EAAO,GAAGsF,GAC3BnR,KAAK4U,MAAM8F,IAAM7O,EAAOA,EAAO3L,OAAS,GAAGiR,IAGxCzM,CACX,CAEA0b,SAAAA,GACI,IAAIC,EAIJ,GAHkB,OAAdrgB,KAAKie,WAA+B/hB,IAAd8D,KAAKie,OAC3BoC,EAAwD,GAA3CrgB,KAAKie,KAAK1S,WAAavL,KAAK6Q,MAAM3Q,OAAa,IAE9C,OAAdF,KAAKke,WAA+BhiB,IAAd8D,KAAKke,KAAoB,CAC/C,MAAMoC,EAAgD,GAA3CtgB,KAAKke,KAAK3S,WAAavL,KAAK6Q,MAAM3Q,OAAa,GACtDogB,EAAID,IACJA,EAAYC,EAEpB,CAEA,GAAItgB,KAAKG,MAAMwe,QAAS,CACpB,MAAM2B,EAAyB,EAArBtgB,KAAKG,MAAMwe,QAAc,GAC/B2B,EAAID,IACJA,EAAYC,EAEpB,CAEA,MAAMC,EAAQ,CACVC,WAAY,EACZpd,KAAM,OACNqd,KAC4B,cAAxBzgB,KAAKG,MAAMye,SACL,QACwB,eAAxB5e,KAAKG,MAAMye,SACT,SACwB,YAAxB5e,KAAKG,MAAMye,SACT,WACA1iB,EACdwkB,YAAY,EACZC,gBAAgB,EAChBxS,WAAW,EACXzJ,KAAM1E,KAAKigB,cACXW,UAAW,CACPnnB,MAAO,WAEXonB,UAAW,CAAC,GAGVC,EAA8B,CAChC1d,KAAM,QACN2d,YAAa,CAAC,EAAG,QACjBrC,UAAW,CACPsC,KAAMhhB,KAAKZ,MAAM2f,aAAe/e,KAAKG,MAAMue,WAE/CuC,YAAavW,KAAKC,MAAM3K,KAAKG,MAAMqe,YAAc,IACjD0C,UAAW,CACPC,UAAYpmB,IACR,IAAIoP,EAoBJ,OAlBIA,EADAnK,KAAKZ,MAAMqK,aACJ1O,EAAMwQ,WAAW9I,QAAQ,IAAK,KAAOzC,KAAK6Q,KAE1C9V,EAAQiF,KAAK6Q,KAGpB7Q,KAAKG,MAAMwe,QAAUxU,EAAKjK,SACtBF,KAAKme,gBACL/K,aAAapT,KAAKme,gBAEtBne,KAAKme,eAAiBvd,YAClB+d,IACI3e,KAAKme,eAAiB,KACtBne,KAAKK,SAAS,CAAEse,WAAU,GAE9B,IACAxU,EAAKjK,SAGNiK,CAAI,EAEfiX,cAAc,EACdC,cAAc,GAElBC,SAAU,CAENC,gBAAgB,IAIxB,GAAmC,YAA/BvhB,KAAKZ,MAAM4G,IAAItE,OAAO0B,KACtBmd,EAAME,KAAO,MACbK,EAAMI,UAAUE,cAAe,EAE/BN,EAAMI,UAAUC,UAAapmB,GAA6B,IAAVA,EAAc,OAAS,QACvE+lB,EAAMpG,IAAM,IAEZoG,EAAMU,SAAW,EACjBnB,EAAY,QACT,GAAmC,WAA/BrgB,KAAKZ,MAAM4G,IAAItE,OAAO0B,MAAqBpD,KAAKZ,MAAM4G,IAAItE,OAAOme,OAAQ,CAChFU,EAAME,KAAO,MACbK,EAAMI,UAAUE,cAAe,EAC/B,MAAMvB,EAAS7f,KAAKZ,MAAM4G,IAAItE,OAAOme,OAErCiB,EAAMI,UAAUC,UAAapmB,QAAqCmB,IAAlB2jB,EAAO9kB,GAAuB8kB,EAAO9kB,GAASA,EAC9F,MAAM8K,EAAOD,OAAOC,KAAK7F,KAAKZ,MAAM4G,IAAItE,OAAOme,QAC/Cha,EAAKiB,OACLga,EAAMpG,IAAMtB,WAAWvT,EAAKA,EAAK3F,OAAS,IAAM,GAEhD4gB,EAAMU,SAAW,EACjB,IAAI9G,EAAM,GACV,IAAK,IAAItT,EAAI,EAAGA,EAAIvB,EAAK3F,OAAQkH,IACE,kBAApByY,EAAOha,EAAKuB,KAAoByY,EAAOha,EAAKuB,IAAIlH,OAASwa,EAAIxa,SACpEwa,EAAMmF,EAAOha,EAAKuB,KAG1BiZ,GAA0B,EAAb3F,EAAIxa,QAAc,IAAM,EACzC,CAEA,MAAM+gB,EAAcjhB,KAAK4U,MAAM6M,YACzB/W,KAAKC,OAAO3K,KAAKG,MAAMse,WAAahB,EAAqBD,GAAqB,KAC9E9S,KAAKC,OAAO3K,KAAKG,MAAMse,WAAahB,EAAqBD,GAAqB,IAEpF,MAAO,CACH9e,gBAAiB,cACjB1E,MAAO,CACHmQ,KAAMnK,KAAKZ,MAAM2f,UAAY,GAAK3jB,EAAAA,MAAMsmB,qBAAqB1hB,KAAKZ,MAAM4G,IAAKhG,KAAKZ,MAAMsI,MACxFmI,QAAS,CACL,GACA,EACA,EACAwQ,EAAYA,EAAY,GAAK7C,KAGrCmE,KAAM,CACF3S,KAAMqR,GAAa7C,EACnBlkB,IAAK,EACLD,MAAO2G,KAAKZ,MAAM2f,UAAY,EAAItB,EAClC1O,OAAQ,IAEZ6S,QAAS,CACLC,QAAS,OACTV,UAAWW,IAEP,MAAMC,EAAQD,EAAO,GACftI,EAAO,IAAI1E,KAAKiN,EAAMhnB,MAAM,IAClC,IAAIA,EAAyBgnB,EAAMhnB,MAAM,GAIzC,OAHc,OAAVA,GAAkBiF,KAAKZ,MAAMqK,eAC7B1O,EAAQA,EAAMwQ,WAAW9I,QAAQ,IAAK,MAEnC,IAAmB,IAAhBsf,EAAM5B,MAAkB,IAAM,KAAK3G,EAAKwI,oBAAoBxI,EAAKxC,kBAAkBzL,WAAWqL,SAAS,EAAG,SAAS7b,IAAQiF,KAAK6Q,MAAM,EAEpJoR,YAAa,CACT9T,WAAW,IAGnB+T,MAAO,CAEHxD,UAAW,CACPsC,MAAM,GAEVC,cACAtG,IAAK3a,KAAK4U,MAAM+F,IAChBD,IAAK1a,KAAK4U,MAAM8F,IAChB4G,SAAU,CAENC,gBAAgB,GAEpBL,UAAW,CACPC,UAAYpmB,IACR,MAAMye,EAAO,IAAI1E,KAAK/Z,GACtB,OAAIiF,KAAK4U,MAAM6M,YACJ,GAAGjI,EAAKE,WAAWnO,WAAWqL,SAAS,EAAG,QAAQ4C,EAAKG,aAAapO,WAAWqL,SAAS,EAAG,QAAQ4C,EAAKzC,aAAaxL,WAAWqL,SAAS,EAAG,OAEnJ5W,KAAK4U,MAAMuN,SACJ,GAAG3I,EAAKE,WAAWnO,WAAWqL,SAAS,EAAG,QAAQ4C,EAAKG,aAAapO,WAAWqL,SAAS,EAAG,SAAS4C,EAAK/B,UAAUlM,WAAWqL,SAAS,EAAG,SAAS4C,EAAK4I,WAAa,GAAG7W,WAAWqL,SAAS,EAAG,OAEnM,GAAG4C,EAAK/B,UAAUlM,WAAWqL,SAAS,EAAG,SAAS4C,EAAK4I,WAAa,GAAG7W,WAAWqL,SAAS,EAAG,SAAS4C,EAAK5B,eAAe,IAI9IkJ,QACAuB,QAAS,CACLrT,KAAM,QACNsT,QAAStiB,KAAKZ,MAAM2f,eACd7iB,EACA,CACIqmB,YAAa,CACTvoB,MAAOgG,KAAKZ,MAAMhD,EAAE,iBACpB4kB,MAAM,KAKxBwB,OAAQ,CAACjC,GAEjB,CAEA,+BAAOkC,CAAyBC,EAA0BC,GACtD,OAAO,IACX,CAEApE,WAAAA,CAAYvM,EAAgBC,EAAc2Q,EAAwB/iB,GAC1DmS,IACAhS,KAAKgS,MAAQA,GAEbC,IACAjS,KAAKiS,IAAMA,GAEfD,EAAQA,GAAShS,KAAKgS,MACtBC,EAAMA,GAAOjS,KAAKiS,IAEdjS,KAAK4d,aACLxK,aAAapT,KAAK4d,aAGtB5d,KAAK4d,YAAchd,YAAW,KAC1BZ,KAAK4d,YAAc,KAEnB,MAAMiF,EAAO7iB,KAAK4U,MAAM8F,IAAM1a,KAAK4U,MAAM+F,IAsBjC,IAADmI,GArBHD,IAAS7iB,KAAK4U,MAAMiO,OACpB7iB,KAAK4U,MAAMiO,KAAOA,EAClB7iB,KAAK4U,MAAMuN,SAAWniB,KAAK4U,MAAMiO,KAAO,OACxC7iB,KAAK4U,MAAM6M,YAAczhB,KAAK4U,MAAMiO,KAAO,MAG3CD,GACK5iB,KAAK8R,YAAYE,EAAOC,GAAKhQ,MAAM4J,IAA2B,IAADkX,EACT,oBAAzB,QAAxBA,EAAO/iB,KAAK2d,oBAAY,IAAAoF,OAAA,EAAjBA,EAAmB9D,qBAC1Bjf,KAAK2d,aAAasB,qBAAqB+D,UAAU,CAC7CR,OAAQ,CAAC,CAAE9d,KAAM1E,KAAKigB,YAAYpU,KAClCqW,MAAO,CACHvH,IAAK3a,KAAK4U,MAAM+F,IAChBD,IAAK1a,KAAK4U,MAAM8F,OAIxB7a,GACAA,GACJ,KAGiD,oBAAzB,QAAxBijB,EAAO9iB,KAAK2d,oBAAY,IAAAmF,OAAA,EAAjBA,EAAmB7D,qBAC1Bjf,KAAK2d,aAAasB,qBAAqB+D,UAAU,CAC7CR,OAAQ,CAAC,CAAE9d,KAAM1E,KAAKigB,gBACtBiC,MAAO,CACHvH,IAAK3a,KAAK4U,MAAM+F,IAChBD,IAAK1a,KAAK4U,MAAM8F,OAIxB7a,GACAA,IAER,GACD,IACP,CAEAojB,WAAAA,CAAYC,GAA2B,IAADC,EAOlCnjB,KAAK4U,MAAMiO,KAAO7iB,KAAK4U,MAAM8F,IAAM1a,KAAK4U,MAAM+F,IAC9C3a,KAAK4U,MAAMuN,SAAWniB,KAAK4U,MAAMiO,KAAO,OACxC7iB,KAAK4U,MAAM6M,YAAczhB,KAAK4U,MAAMiO,KAAO,KAEV,aAA7B7iB,KAAKG,MAAM4R,eACX/R,KAAKK,SAAS,CAAE0R,cAAe,aAE3B/R,KAAK8Q,YACLsC,aAAapT,KAAK8Q,WAClB9Q,KAAK8Q,UAAY,OAEmC,oBAAzB,QAAxBqS,EAAOnjB,KAAK2d,oBAAY,IAAAwF,OAAA,EAAjBA,EAAmBlE,sBACjCjf,KAAK2d,aAAasB,qBAAqB+D,UAAU,CAC7Cd,MAAO,CACHvH,IAAK3a,KAAK4U,MAAM+F,IAChBD,IAAK1a,KAAK4U,MAAM8F,OAIpBwI,GACAljB,KAAKue,YAAYve,KAAK4U,MAAM+F,IAAK3a,KAAK4U,MAAM8F,KAAK,GAG7D,CAEA7D,SAAAA,GACI,MAAMzB,EAAM,IAAIN,KACVgC,EAAQ,IAAQ1B,EAAI2B,cAAgB,IAAO3B,EAAI4B,mBAEjD5B,EAAI4B,mBACJ5B,EAAI6B,gBAAgB,KAEpB7B,EAAI2B,cACJ3B,EAAI8B,WAAW,IAGnB,MAAMwD,EAAMtF,EAAIE,UAChB,IAAIqF,EACJ,MAAMxD,EAAOnX,KAAKG,MAAM4R,cAExB,GAAa,QAAToF,EACA/B,EAAIgC,SAAS,GACbhC,EAAIiC,WAAW,GACfjC,EAAI8B,WAAW,GACfyD,EAAMvF,EAAIE,eACP,GAAa,SAAT6B,EAAiB,CACxB/B,EAAIgC,SAAS,GACbhC,EAAIiC,WAAW,GACfjC,EAAI8B,WAAW,GAEf,MAAMI,EAAMlC,EAAImC,UAAY,EAChB,IAARD,GACAlC,EAAIgC,UAAU,IAAME,EAAM,IAG9BqD,EAAMvF,EAAIE,SACd,MAAO,GAAa,WAAT6B,EAAmB,CAC1B/B,EAAIgC,SAAS,GACbhC,EAAIiC,WAAW,GACfjC,EAAI8B,WAAW,GACf9B,EAAIoC,QAAQpC,EAAIqC,UAAY,GAE5B,MAAMH,EAAMlC,EAAImC,UAAY,EAChB,IAARD,GACAlC,EAAIgC,UAAU,IAAME,EAAM,IAG9BqD,EAAMvF,EAAIE,SACd,KAAoB,UAAT6B,GACP/B,EAAIgC,SAAS,GACbhC,EAAIiC,WAAW,GACfjC,EAAI8B,WAAW,GACf9B,EAAIoC,QAAQ,GACZmD,EAAMvF,EAAIE,WACM,SAAT6B,GACP/B,EAAIgC,SAAS,GACbhC,EAAIiC,WAAW,GACfjC,EAAI8B,WAAW,GACf9B,EAAIoC,QAAQ,GACZpC,EAAIsC,SAAS,GACbiD,EAAMvF,EAAIE,WACM,aAAT6B,GACP/B,EAAIgC,SAAS,GACbhC,EAAIiC,WAAW,GACfjC,EAAI8B,WAAW,GACf9B,EAAIuC,YAAYvC,EAAIwC,cAAgB,GACpC+C,EAAMvF,EAAIE,WAEVqF,EAAMD,EAA2B,IAArBvR,SAASgO,EAAM,IAG/BnX,KAAK4U,MAAM+F,IAAMA,EACjB3a,KAAK4U,MAAM8F,IAAMA,EAEjB1a,KAAKK,SAAS,CAAEsa,MAAKD,QAAO,IAAM1a,KAAKue,YAAYve,KAAK4U,MAAM+F,IAAK3a,KAAK4U,MAAM8F,KAAK,KAEnF1a,KAAK8Q,UAAYlQ,YAAW,KACxBZ,KAAK8Q,UAAY,KACjB9Q,KAAK6W,WAAW,GACjBC,GAAS,IAChB,CAEA5D,mBAAAA,CAAoBiE,EAAcU,EAAoBhY,GAKlD,GAJKgY,IACD7X,KAAKiB,aAAagH,QAAQ,oBAAqBkP,GAC/CnX,KAAKK,SAAS,CAAE0R,cAAeoF,KAEtB,aAATA,EAMA,OALInX,KAAK8Q,YACLsC,aAAapT,KAAK8Q,WAClB9Q,KAAK8Q,UAAY,WAErB9Q,KAAKue,YAAYve,KAAK4U,MAAM+F,IAAK3a,KAAK4U,MAAM8F,KAAK,EAAM7a,GAG3DG,KAAKiB,aAAa6W,WAAW,qBAC7B9X,KAAKiB,aAAa6W,WAAW,mBAE7B,MAAM1C,EAAM,IAAIN,KAEhB,IAAK9U,KAAK8Q,UAAW,CACjB,MAAMgG,EAAQ,IAAQ1B,EAAI2B,cAAgB,IAAO3B,EAAI4B,mBACrDhX,KAAK8Q,UAAYlQ,YAAW,KACxBZ,KAAK8Q,UAAY,KACjB9Q,KAAK6W,WAAW,GACjBC,GAAS,IAChB,CAWA,GATI1B,EAAI4B,mBACJ5B,EAAI6B,gBAAgB,KAEpB7B,EAAI2B,cACJ3B,EAAI8B,WAAW,IAGnBlX,KAAK4U,MAAM8F,IAAMtF,EAAIE,UAER,QAAT6B,EACA/B,EAAIgC,SAAS,GACbhC,EAAIiC,WAAW,GACfjC,EAAI8B,WAAW,GACflX,KAAK4U,MAAM+F,IAAMvF,EAAIE,eAClB,GAAa,SAAT6B,EAAiB,CACxB/B,EAAIgC,SAAS,GACbhC,EAAIiC,WAAW,GACfjC,EAAI8B,WAAW,GAEf,MAAMI,EAAMlC,EAAImC,UAAY,EAChB,IAARD,GACAlC,EAAIgC,UAAU,IAAME,EAAM,IAG9BtX,KAAK4U,MAAM+F,IAAMvF,EAAIE,SACzB,MAAO,GAAa,WAAT6B,EAAmB,CAC1B/B,EAAIgC,SAAS,GACbhC,EAAIiC,WAAW,GACfjC,EAAI8B,WAAW,GACf9B,EAAIoC,QAAQpC,EAAIqC,UAAY,GAE5B,MAAMH,EAAMlC,EAAImC,UAAY,EAChB,IAARD,GACAlC,EAAIgC,UAAU,IAAME,EAAM,IAG9BtX,KAAK4U,MAAM+F,IAAMvF,EAAIE,SACzB,KAAoB,UAAT6B,GACP/B,EAAIgC,SAAS,GACbhC,EAAIiC,WAAW,GACfjC,EAAI8B,WAAW,GACf9B,EAAIoC,QAAQ,GACZxX,KAAK4U,MAAM+F,IAAMvF,EAAIE,WACL,SAAT6B,GACP/B,EAAIgC,SAAS,GACbhC,EAAIiC,WAAW,GACfjC,EAAI8B,WAAW,GACf9B,EAAIoC,QAAQ,GACZpC,EAAIsC,SAAS,GACb1X,KAAK4U,MAAM+F,IAAMvF,EAAIE,WACL,aAAT6B,GACP/B,EAAIgC,SAAS,GACbhC,EAAIiC,WAAW,GACfjC,EAAI8B,WAAW,GACf9B,EAAIuC,YAAYvC,EAAIwC,cAAgB,GACpC5X,KAAK4U,MAAM+F,IAAMvF,EAAIE,WAErBtV,KAAK4U,MAAM+F,IAAM3a,KAAK4U,MAAM8F,IAA2B,IAArBvR,SAASgO,EAAM,IAGrDnX,KAAKK,SAAS,CAAEsa,IAAK3a,KAAK4U,MAAM+F,IAAKD,IAAK1a,KAAK4U,MAAM8F,MAAO,IACxD1a,KAAKue,YAAYve,KAAK4U,MAAM+F,IAAK3a,KAAK4U,MAAM8F,KAAK,EAAM7a,IAE/D,CAEAujB,oBAAAA,GACI,IAAKpjB,KAAK2d,cAAgE,oBAAzC3d,KAAK2d,aAAasB,mBAC/C,OAGJ,MAAMoE,EAAKrjB,KAAK2d,aAAasB,qBAAqBqE,QAC5CD,EAAWE,gBACZF,EAAWE,eAAgB,EAC5BF,EAAGG,GAAG,aAAc1mB,IAChBmH,QAAQ6F,IAAI,cACZ9J,KAAKoe,WAAY,EACjBpe,KAAK4U,MAAM6O,MAAQ3mB,EAAE4mB,OAAO,IAEhCL,EAAGG,GAAG,WAAW,KACbvf,QAAQ6F,IAAI,YACZ9J,KAAKoe,WAAY,EACjBpe,KAAKijB,aAAY,EAAK,IAE1BI,EAAGG,GAAG,cAAc1mB,IAChB,IAAI+lB,EAAO7iB,KAAK4U,MAAM8F,IAAM1a,KAAK4U,MAAM+F,IACvC,MAAM7c,EAAQkC,KAAKG,MAAMse,WAAahB,EAAqBD,EAErD1V,GADIhL,EAAE4mB,QAAUlG,GACN1f,EAEV6lB,EAAUd,EAEhBA,GADe/lB,EAAE8mB,WAAa,EAAI,IAAM,GAExC,MAAMC,EAAOF,EAAUd,EACvB7iB,KAAK4U,MAAM8F,KAAOmJ,GAAQ,EAAI/b,GAC9B9H,KAAK4U,MAAM+F,KAAOkJ,EAAO/b,EAEzB9H,KAAKijB,aAAa,IAEtBI,EAAGG,GAAG,aAAc1mB,IAChB,GAAIkD,KAAKoe,UAAW,CAChB,MAAM0F,EAAQ9jB,KAAK4U,MAAM6O,OAAS3mB,EAAE4mB,QAAUlG,GAC9Cxd,KAAK4U,MAAM6O,MAAQ3mB,EAAE4mB,QAAUlG,EAC/B,MAAMqF,EAAO7iB,KAAK4U,MAAM8F,IAAM1a,KAAK4U,MAAM+F,IACnC7c,EAAQkC,KAAKG,MAAMse,WAAahB,EAAqBD,EAErD5S,EAAQF,KAAKC,MAAOmZ,EAAQjB,EAAQ/kB,GAC1CkC,KAAK4U,MAAM+F,KAAO/P,EAClB5K,KAAK4U,MAAM8F,KAAO9P,EAClB5K,KAAKijB,aACT,KAGJI,EAAGG,GAAG,cAAe1mB,IACjBA,EAAEinB,iBACF/jB,KAAKoe,WAAY,EAEjB,MAAM4F,EAAUlnB,EAAEknB,SAAWlnB,EAAEmnB,cAAcD,QACzCA,IACAhkB,KAAK4U,MAAM6O,MAAQO,EAAQA,EAAQ9jB,OAAS,GAAGgkB,MAC3CF,EAAQ9jB,OAAS,EACjBF,KAAK4U,MAAMuP,UAAYzZ,KAAK0Z,IAAIJ,EAAQ,GAAGE,MAAQF,EAAQ,GAAGE,OAE9DlkB,KAAK4U,MAAMuP,UAAY,KAE/B,IAEJd,EAAGG,GAAG,YAAY1mB,IACdA,EAAEinB,iBACF/jB,KAAKoe,WAAY,EACjBpe,KAAKijB,aAAY,EAAK,IAE1BI,EAAGG,GAAG,aAAa1mB,IACfA,EAAEinB,iBACF,MAAMC,EAAUlnB,EAAEknB,SAAWlnB,EAAEmnB,cAAcD,QAC7C,IAAKA,EACD,OAEJ,MAAME,EAAQF,EAAQA,EAAQ9jB,OAAS,GAAGgkB,MAAQ1G,EAClD,GAAIxd,KAAKoe,UACL,GAAI4F,EAAQ9jB,OAAS,EAAG,CAEpB,MAAMmkB,EAAc3Z,KAAK0Z,IAAIJ,EAAQ,GAAGE,MAAQF,EAAQ,GAAGE,OAC3D,GAA6B,OAAzBlkB,KAAK4U,MAAMuP,WAAsBE,IAAgBrkB,KAAK4U,MAAMuP,UAAW,CACvE,IAAItB,EAAO7iB,KAAK4U,MAAM8F,IAAM1a,KAAK4U,MAAM+F,IACvC,MAAM8D,EAAaze,KAAKG,MAAMse,WAAahB,EAAqBD,EAE1D8G,EAASD,EAAcrkB,KAAK4U,MAAMuP,UAAY,IAAM,GAMpDrc,GAJFkc,EAAQ,GAAGE,MAAQF,EAAQ,GAAGE,MACxBF,EAAQ,GAAGE,MAAQ1G,EAAoB6G,EAAc,EACrDL,EAAQ,GAAGE,MAAQ1G,EAAoB6G,EAAc,GAEvC5F,EAElBkF,EAAUd,EAChBA,GAAQyB,EACR,MAAMT,EAAOF,EAAUd,EAEvB7iB,KAAK4U,MAAM8F,KAAOmJ,GAAQ,EAAI/b,GAC9B9H,KAAK4U,MAAM+F,KAAOkJ,EAAO/b,EAEzB9H,KAAKijB,aACT,CACAjjB,KAAK4U,MAAMuP,UAAYE,CAC3B,KAAO,CAEH,MAAMP,EAAQ9jB,KAAK4U,MAAM6O,MAAQS,EAC3BrB,EAAO7iB,KAAK4U,MAAM8F,IAAM1a,KAAK4U,MAAM+F,IACnC8D,EAAaze,KAAKG,MAAMse,WAAahB,EAAqBD,EAE1D5S,EAAQF,KAAKC,MAAOmZ,EAAQjB,EAAQpE,GAC1Cze,KAAK4U,MAAM+F,KAAO/P,EAClB5K,KAAK4U,MAAM8F,KAAO9P,EAElB5K,KAAKijB,aACT,CAEJjjB,KAAK4U,MAAM6O,MAAQS,CAAK,IAGpC,CAEQK,WAAAA,GAA4B,IAADtM,EAC/B,OAAKjY,KAAKG,MAAMyR,gBAOgB,QAA5BqG,EAACjY,KAAKG,MAAMoR,wBAAgB,IAAA0G,GAA3BA,EAA6BjR,MAAK8F,GAAMA,EAAGrL,KAAOzB,KAAKG,MAAMyR,iBAAmB9E,EAAG4E,QAOpF1R,KAAK6d,aAEDjiB,EAAAA,EAAAA,KAAC4oB,EAAAA,EAAgB,CACb3c,IAAK/K,GAAMkD,KAAK2d,aAAe7gB,EAC/B6f,QAASA,EACT8H,OAAQzkB,KAAKogB,YACbsE,UAAQ,EACRC,YAAU,EACVnrB,MAAgC,SAAzBwG,KAAKZ,MAAMkK,UAAuB,OAAS,GAClDzN,MAAO,CAAE8B,OAAQ,GAAGqC,KAAKG,MAAMqe,gBAAiB1gB,MAAO,QACvD8mB,KAAM,CAAEC,SAAU,OAClBC,SAAU,CAAEC,SAAUA,IAAM/kB,KAAKojB,2BAKtCxnB,EAAAA,EAAAA,KAAC8P,EAAAA,eAAc,KArBd9P,EAAAA,EAAAA,KAAA,OAAKC,MAAO,CAAEqc,UAAW,GAAIhf,SAAU,GAAIqV,WAAY,IAAK/T,SACvDwF,KAAKZ,MAAMhD,EAAE,iCARlBR,EAAAA,EAAAA,KAAA,OAAKC,MAAO,CAAEqc,UAAW,GAAIhf,SAAU,GAAIqV,WAAY,IAAK/T,SACvDwF,KAAKZ,MAAMhD,EAAE,kCA4B9B,CAEAkiB,kBAAAA,GACI,GAAIte,KAAK8d,OAAOkH,QAAS,CACrB,MAAMlnB,EAAQkC,KAAK8d,OAAOkH,QAAQC,YAC5BtnB,EAASqC,KAAK8d,OAAOkH,QAAQE,aAC/BllB,KAAKG,MAAMqe,cAAgB7gB,IAEvBqC,KAAKge,aACL5K,aAAapT,KAAKge,aAEtBhe,KAAKge,YAAcpd,YAAW,KAC1BZ,KAAKge,YAAc,KACnBhe,KAAKK,SAAS,CAAEme,YAAa7gB,EAAQ8gB,WAAY3gB,GAAQ,GAC1D,KAEX,CACJ,CAEA+c,YAAAA,CAAaF,GACT,MAAMwK,EAAoBxK,EAAIrF,UAC1BtV,KAAK8Q,YACLsC,aAAapT,KAAK8Q,WAClB9Q,KAAK8Q,UAAY,MAErB9Q,KAAKiB,aAAagH,QAAQ,oBAAqB,YAC/CjI,KAAKiB,aAAagH,QAAQ,oBAAqBkd,EAAU5Z,YACzDvL,KAAKiB,aAAagH,QAAQ,kBAAmBjI,KAAKG,MAAMua,IAAInP,YAE5DvL,KAAK4U,MAAM+F,IAAMwK,EAEjBnlB,KAAKK,SAAS,CAAEsa,IAAKwK,EAAWpT,cAAe,aAAc,IACzD/R,KAAKue,YAAYve,KAAK4U,MAAM+F,IAAK3a,KAAK4U,MAAM8F,KAAK,IAEzD,CAEAK,UAAAA,CAAWL,GACP,MAAM0K,EAAoB1K,EAAIpF,UAC9BtV,KAAKiB,aAAagH,QAAQ,oBAAqB,YAC/CjI,KAAKiB,aAAagH,QAAQ,oBAAqBjI,KAAKG,MAAMwa,IAAIpP,YAC9DvL,KAAKiB,aAAagH,QAAQ,kBAAmBmd,EAAU7Z,YACnDvL,KAAK8Q,YACLsC,aAAapT,KAAK8Q,WAClB9Q,KAAK8Q,UAAY,MAErB9Q,KAAK4U,MAAM8F,IAAM0K,EACjBplB,KAAKK,SAAS,CAAEqa,IAAK0K,EAAWrT,cAAe,aAAc,IACzD/R,KAAKue,YAAYve,KAAK4U,MAAM+F,IAAK3a,KAAK4U,MAAM8F,KAAK,IAEzD,CAEA2K,WAAAA,GACI,MAAMC,EAAO,CACT,MAAMvkB,OAAOwb,mBAAmBvc,KAAKZ,MAAM4G,IAAI9C,OAC/C,YAAYnC,OAAOwb,mBAAmBvc,KAAKG,MAAMyR,mBACjD,oBAG6B,aAA7B5R,KAAKG,MAAM4R,eACXuT,EAAK5iB,KAAK,SAAS1C,KAAK4U,MAAM+F,OAC9B2K,EAAK5iB,KAAK,OAAO1C,KAAK4U,MAAM8F,QAE5B4K,EAAK5iB,KAAK,SAAS1C,KAAKG,MAAM4R,iBAGlChR,OAAOvF,KACH,GAAGuF,OAAO+R,SAASyS,aAAaxkB,OAAO+R,SAAS0S,iCAAiCF,EAAKhJ,KAAK,OAC3F,UAER,CAEA,mBAAMmJ,CAAc7G,GAEhB,MAAM5Y,QAAYhG,KAAKZ,MAAM+C,OAAOiI,UAAUpK,KAAKZ,MAAM4G,IAAI9C,KAEzD8C,EAAItE,OAAOC,QACXqE,EAAItE,OAAOC,OAAO3B,KAAKG,MAAMyR,kBAC7B5L,EAAItE,OAAOC,OAAO3B,KAAKG,MAAMyR,iBAAiB6N,YAAcb,IAE5D5Y,EAAItE,OAAOC,OAAO3B,KAAKG,MAAMyR,iBAAiB6N,UAAYb,QACpD5e,KAAKZ,MAAM+C,OAAOgJ,UAAUnF,EAAI9C,IAAK8C,IAE/ChG,KAAKK,SAAS,CAAEue,WAAU8G,aAAc,MAC5C,CAEAzK,aAAAA,GACI,OAAIjb,KAAKZ,MAAM2f,UACJ,MAIPzjB,EAAAA,EAAAA,MAAC8f,EAAAA,QAAO,CAAA5gB,SAAA,EACFwF,KAAKZ,MAAMwS,kBACTtW,EAAAA,EAAAA,MAAC+f,EAAAA,YAAW,CACR1e,QAAQ,WACRd,MAAOrD,EAAO6V,qBAAqB7T,SAAA,EAEnCoB,EAAAA,EAAAA,KAAC0f,EAAAA,WAAU,CAAA9gB,SAAEwF,KAAKZ,MAAMhD,EAAE,uBAC1BR,EAAAA,EAAAA,KAAC2f,EAAAA,OAAM,CACH5e,QAAQ,WACR5B,MAAOiF,KAAKG,MAAMyR,gBAClB/U,SAAWC,IACPkD,KAAKiB,aAAagH,QAAQ,sBAAuBnL,EAAEC,OAAOhC,OAC1DiF,KAAKK,SAAS,CAAEuR,gBAAiB9U,EAAEC,OAAOhC,OAAQ,EACpDP,SAEDwF,KAAKG,MAAMoR,iBAAiB/P,KAAIsL,IAC7BlR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAO+R,EAAGrL,GACV5F,MAAQiR,EAAG4E,WAAkCxV,EAA1B1D,EAAOgW,iBAA6BhU,SAEtDsS,EAAGrL,IAJCqL,EAAGrL,YAU5BnG,EAAAA,EAAAA,MAAC+f,EAAAA,YAAW,CACR1e,QAAQ,WACRd,MAAOrD,EAAO8V,mBAAmB9T,SAAA,EAEjCoB,EAAAA,EAAAA,KAAC0f,EAAAA,WAAU,CAAA9gB,SAAEwF,KAAKZ,MAAMhD,EAAE,eAC1Bd,EAAAA,EAAAA,MAACigB,EAAAA,OAAM,CACH5e,QAAQ,WACRkL,IAAK7H,KAAKiR,SACVlW,MAAOiF,KAAKG,MAAM4R,cAClBlV,SAAUC,GAAKkD,KAAKkT,oBAAoBpW,EAAEC,OAAOhC,OAAOP,SAAA,EAExDoB,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAM,WACNW,GAAIlD,EAAOiW,YAAYjU,SAEtBwF,KAAKZ,MAAMhD,EAAE,iBAJV,WAMRR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAO,GAAGP,SAETwF,KAAKZ,MAAMhD,EAAE,oBAHV,MAKRR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAO,GAAGP,SAETwF,KAAKZ,MAAMhD,EAAE,oBAHV,MAKRR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAO,GAAGP,SAETwF,KAAKZ,MAAMhD,EAAE,cAHV,MAKRR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAM,MAAKP,SAEVwF,KAAKZ,MAAMhD,EAAE,aAHV,MAKRR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAO,KAAQP,SAEdwF,KAAKZ,MAAMhD,EAAE,kBAHV,MAKRR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAM,OAAMP,SAEXwF,KAAKZ,MAAMhD,EAAE,cAHV,MAKRR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAO,MAAYP,SAElBwF,KAAKZ,MAAMhD,EAAE,cAHV,MAKRR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAM,SAAQP,SAEbwF,KAAKZ,MAAMhD,EAAE,iBAHV,MAKRR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAO,MAAaP,SAEnBwF,KAAKZ,MAAMhD,EAAE,iBAHV,MAKRR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAM,QAAOP,SAEZwF,KAAKZ,MAAMhD,EAAE,eAHV,OAKRR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAO,MAAaP,SAEnBwF,KAAKZ,MAAMhD,EAAE,iBAHV,OAKRR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAM,OAAMP,SAEXwF,KAAKZ,MAAMhD,EAAE,cAHV,OAKRR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAM,WAAUP,SAEfwF,KAAKZ,MAAMhD,EAAE,mBAHV,aAOhBd,EAAAA,EAAAA,MAAC2e,EAAAA,qBAAoB,CACjBC,YAAaC,EAAAA,EACbC,cAAepO,EAAUhM,KAAKZ,MAAMsI,MAAMlN,SAAA,EAE1Cc,EAAAA,EAAAA,MAAA,OAAKO,MAAOrD,EAAOuX,gBAAgBvV,SAAA,EAC/BoB,EAAAA,EAAAA,KAAA,OACIC,MAAO,IACArD,EAAO2X,iBACVlC,QAAsC,aAA7BjO,KAAKG,MAAM4R,cAA+B,QAAM7V,GAC3D1B,SAEDwF,KAAKZ,MAAMhD,EAAE,iBAElBR,EAAAA,EAAAA,KAACye,EAAAA,WAAU,CACP3e,GAAIlD,EAAOoX,YACXnS,SAAuC,aAA7BuC,KAAKG,MAAM4R,cACrBhX,MAAO,IAAI+Z,KAAK9U,KAAKG,MAAMwa,KAC3B9d,SAAU2c,GAAQxZ,KAAK6a,aAAarB,MAExC5d,EAAAA,EAAAA,KAAC0e,EAAAA,WAAU,CACP7c,SAAuC,aAA7BuC,KAAKG,MAAM4R,cACrBrW,GAAIlD,EAAOsX,YACX8C,KAAM5S,KAAKG,MAAMyS,KACjB7X,MAAO,IAAI+Z,KAAK9U,KAAKG,MAAMwa,KAC3B9d,SAAU2c,GAAQxZ,KAAK6a,aAAarB,SAG5Cle,EAAAA,EAAAA,MAAA,OAAKO,MAAOrD,EAAOuX,gBAAgBvV,SAAA,EAC/BoB,EAAAA,EAAAA,KAAA,OACIC,MAAO,IACArD,EAAO2X,iBACVlC,QAAsC,aAA7BjO,KAAKG,MAAM4R,cAA+B,QAAM7V,GAC3D1B,SAEDwF,KAAKZ,MAAMhD,EAAE,eAElBR,EAAAA,EAAAA,KAACye,EAAAA,WAAU,CACP5c,SAAuC,aAA7BuC,KAAKG,MAAM4R,cACrBrW,GAAIlD,EAAOoX,YACX7U,MAAO,IAAI+Z,KAAK9U,KAAKG,MAAMua,KAC3B7d,SAAU2c,GAAQxZ,KAAK+a,WAAWvB,MAEtC5d,EAAAA,EAAAA,KAAC0e,EAAAA,WAAU,CACP7c,SAAuC,aAA7BuC,KAAKG,MAAM4R,cACrBrW,GAAIlD,EAAOsX,YACX8C,KAAM5S,KAAKG,MAAMyS,KACjB7X,MAAO,IAAI+Z,KAAK9U,KAAKG,MAAMua,KAC3B7d,SAAU2c,GAAQxZ,KAAK+a,WAAWvB,YAI9C5d,EAAAA,EAAAA,KAAA,OAAKC,MAAOrD,EAAO6W,QACnBzT,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACHzB,MAAO,CAAE7C,YAAa,IACtB2D,QAAQ,WACRR,QAASW,GAAKkD,KAAKK,SAAS,CAAEqlB,aAAc5oB,EAAEC,SAAyBvC,SAEtEwF,KAAKG,MAAMye,SAAW5e,KAAKZ,MAAMhD,EAAE4D,KAAKG,MAAMye,UAAY5e,KAAKZ,MAAMhD,EAAE,eAE3E4D,KAAKG,MAAMulB,cACRpqB,EAAAA,EAAAA,MAACqqB,EAAAA,KAAI,CACDnqB,MAAM,EACNoqB,SAAU5lB,KAAKG,MAAMulB,aACrBnrB,QAASA,IAAMyF,KAAKK,SAAS,CAAEqlB,aAAc,OAAQlrB,SAAA,EAErDoB,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CACLnJ,SAAkC,KAAxBrS,KAAKG,MAAMye,SACrBziB,QAASA,IAAM6D,KAAKylB,cAAc,IAAIjrB,SAErCwF,KAAKZ,MAAMhD,EAAE,WAElBR,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CACLnJ,SAAkC,cAAxBrS,KAAKG,MAAMye,SACrBziB,QAASA,IAAM6D,KAAKylB,cAAc,aAAajrB,SAE9CwF,KAAKZ,MAAMhD,EAAE,kBAGtB,KACH4D,KAAKZ,MAAMmgB,kBAAoBvf,KAAKG,MAAM0e,cACvCjjB,EAAAA,EAAAA,KAACiqB,EAAAA,IAAG,CACAhqB,MAAOrD,EAAO+kB,cACdthB,KAAK,QACLE,QAASA,IAAM6D,KAAKqlB,cACpBrrB,MAAOgG,KAAKZ,MAAMhD,EAAE,6BAA6B5B,UAEjDoB,EAAAA,EAAAA,KAAA,OACIyM,I,qmPACAC,IAAI,UACJzM,MAAOrD,EAAO8kB,gBAI1BhiB,EAAAA,EAAAA,MAACuqB,EAAAA,IAAG,CACAlpB,QAAQ,WACRV,KAAK,QACLxC,MAAOuG,KAAKG,MAAMue,UAAY,UAAY,UAC1C,aAAW,aACXviB,QAASA,KACL6D,KAAKiB,aAAagH,QAAQ,gBAAiBjI,KAAKG,MAAMue,UAAY,QAAU,QAC5E1e,KAAKK,SAAS,CAAEqe,WAAY1e,KAAKG,MAAMue,WAAY,EACrDlkB,SAAA,EAEFoB,EAAAA,EAAAA,KAACkqB,EAAAA,IAAa,CAACjqB,MAAOrD,EAAO6kB,sBAC5Brd,KAAKZ,MAAMhD,EAAE,mBAI9B,CAEAqP,MAAAA,GACI,OAAKzL,KAAKG,MAAMoR,kBAAqBvR,KAAKG,MAAMwT,gBAK5CrY,EAAAA,EAAAA,MAACsQ,EAAAA,MAAK,CAAC/P,MAAOrD,EAAOkF,MAAMlD,SAAA,CACtBwF,KAAKib,iBACNrf,EAAAA,EAAAA,KAAA,OACIiM,IAAK7H,KAAK8d,OACVjiB,MAAOT,EAAAA,MAAMC,SACT2E,KAAKZ,MAAM5F,MACXhB,EAAOoc,MACP5U,KAAKZ,MAAM2f,UAAYvmB,EAAO4kB,oBAAsB5kB,EAAO2kB,kBAC7D3iB,SAEDwF,KAAKukB,oBAdP3oB,EAAAA,EAAAA,KAAC8P,EAAAA,eAAc,GAkB9B,EAGJ,SAAeK,EAAAA,EAAAA,YAAf,CAA2B2R,G,eC1jD3B,MAAMllB,EAA8B,CAChCutB,OAAQ,CACJpoB,OAAQ,QAEZD,MAAO,CACHC,OAAQ,qBAEZ1E,QAAS,CACL+sB,UAAW,SACXltB,SAAU,UAEdmtB,SAAWzsB,IAAe,CACtBsE,MAAO,OACPhF,SAAU,SACV6E,OAAQ,eAAenE,EAAMgU,OAAOC,QAAQC,iBAEhDwY,YAAc1sB,IAAe,CACzBC,MAA8B,SAAvBD,EAAME,QAAQoU,KAAkBtU,EAAME,QAAQiV,UAAUC,aAAe,uBAElFuX,cAAgB3sB,IAAe,CAC3BkF,gBAAiBlF,EAAME,QAAQiV,UAAU/U,QA+BjD,MAAMwsB,UAA2BC,EAAAA,EAK7BlnB,WAAAA,CAAYC,GACRE,MAAMF,GAAO,KALTknB,oBAAc,OAEdC,SAA8D,KAKlE,IAAIC,EAAard,UACVpI,OAAeC,eAA6BD,OAAOE,cAAcC,QAAQ,wBAA0B,IACtG,IAKJ,GAFAlB,KAAKsmB,eAAiBtmB,KAAKymB,mBAEvBzmB,KAAKsmB,eAAgB,CACrB,MAAMxT,EAAW4T,EAAAA,OAAOC,cACH,UAAjB7T,EAAS8T,IACTJ,EAAa,EACW,UAAjB1T,EAAS8T,MAChBJ,EAAa,EAErB,MACIA,EAAa,EAGjBxmB,KAAKG,MAAQ,CACTM,YAAY,EACZ+lB,aACAK,eAAe,EACfC,OAAQT,EAAAA,EAAaU,WACrBC,iBAAiB,EACjBC,YAAajnB,KAAKZ,MAAM8nB,kBAEhC,CAEAT,gBAAAA,GACI,IAAIH,EAAiD,IAAhCtmB,KAAKZ,MAAMa,UAAUC,OAC1C,GAAIomB,EAAgB,CAAC,IAADa,EAAAC,EAChB,MAAM3lB,EAAKzB,KAAKZ,MAAMa,UAAU,GAE5BqmB,IADsB,QAA1Ba,EAAInnB,KAAKZ,MAAM2C,QAAQN,UAAG,IAAA0lB,GAAQ,QAARC,EAAtBD,EAAwBzlB,cAAM,IAAA0lB,IAA9BA,EAAgCzlB,WACbiE,OAAOC,KAAK7F,KAAKZ,MAAM2C,QAAQN,GAAIC,OAAOC,QAAQqF,MAAKR,IACtE,MAAMR,EAAMhG,KAAKZ,MAAM2C,QAAQ,kBAAkByE,KACjD,OAAOR,GAAOA,EAAItE,QAAUsE,EAAItE,OAAOoS,UAAU,GAK7D,CACA,OAAOwS,CACX,CAEAe,YAAAA,GACI,OACIzrB,EAAAA,EAAAA,KAAC8hB,EAAW,CACRjc,GAAG,wBACHgI,aAAczJ,KAAKZ,MAAMqK,aACzB8V,kBAAgB,EAChBnjB,EAAG4D,KAAKZ,MAAMhD,EACdsL,KAAM1H,KAAKZ,MAAMsI,KACjBiU,WAAY3b,KAAKZ,MAAMuc,WACvBxZ,OAAQnC,KAAKZ,MAAM+C,OACnB6D,IAAKhG,KAAKZ,MAAM2C,QAAQ/B,KAAKZ,MAAMa,UAAU,IAC7CsB,iBAAkBvB,KAAKZ,MAAMmC,iBAC7B+H,UAAWtJ,KAAKZ,MAAMkK,UACtB9P,MAAOwG,KAAKZ,MAAM5F,MAClBuI,QAAS/B,KAAKZ,MAAM2C,SAGhC,CAEAiW,WAAAA,GACI,OACIpc,EAAAA,EAAAA,KAAC8U,EAAiB,CACdjP,GAAG,0BACHrF,EAAG4D,KAAKZ,MAAMhD,EACdqN,aAAczJ,KAAKZ,MAAMqK,aACzB/B,KAAM1H,KAAKZ,MAAMsI,KACjBiU,WAAY3b,KAAKZ,MAAMuc,WACvBxZ,OAAQnC,KAAKZ,MAAM+C,OACnB6D,IAAKhG,KAAKZ,MAAM2C,QAAQ/B,KAAKZ,MAAMa,UAAU,IAC7CsB,iBAAkBvB,KAAKZ,MAAMmC,iBAC7B8H,UAAWrJ,KAAKZ,MAAMiK,UACtBtH,QAAS/B,KAAKZ,MAAM2C,SAGhC,CAEAulB,kBAAAA,GACI,OACI1rB,EAAAA,EAAAA,KAACqD,EAAkB,CACfwC,GAAG,2BACHY,iBAAmBoC,GAAoDzE,KAAKumB,SAAW9hB,EACvFrI,EAAG4D,KAAKZ,MAAMhD,EACd8qB,kBAAmBlnB,KAAKZ,MAAM8nB,kBAC9Bxf,KAAM1H,KAAKZ,MAAMsI,KACjBiU,WAAY3b,KAAKZ,MAAMuc,WACvBxZ,OAAQnC,KAAKZ,MAAM+C,OACnBlC,UAAWD,KAAKZ,MAAMa,UACtBsB,iBAAkBvB,KAAKZ,MAAMmC,iBAC7BQ,QAAS/B,KAAKZ,MAAM2C,QACpB0I,WAAauc,GAA6BhnB,KAAKK,SAAS,CAAE2mB,oBAC1DrmB,iBAAkBX,KAAKZ,MAAMuB,iBAC7B9D,SAAUA,CAAC4D,EAAqB8mB,KAC5BvnB,KAAKK,SAAS,CAAEI,eAAc,KAC1B,GAAI8mB,EAAQ,CACR,MAAMjB,EAAiBtmB,KAAKymB,mBACxBH,IAAmBtmB,KAAKsmB,iBACxBtmB,KAAKsmB,eAAiBA,EACtBtmB,KAAKgf,cAEb,IACF,EAENxlB,MAAOwG,KAAKZ,MAAM5F,MAClB6P,UAAWrJ,KAAKZ,MAAMiK,UACtBC,UAAWtJ,KAAKZ,MAAMkK,UACtBjI,aAAcrB,KAAKZ,MAAMiC,cAGrC,CAEAsX,mBAAAA,GACI,OAAK3Y,KAAKG,MAAM0mB,eAIZjrB,EAAAA,EAAAA,KAAC0P,EAAAA,cAAa,CACVtR,MAAO8B,EAAAA,KAAKM,EAAE,4BACd+N,KAAMrO,EAAAA,KAAKM,EAAE,YACboP,GAAI1P,EAAAA,KAAKM,EAAE,OACXorB,OAAQ1rB,EAAAA,KAAKM,EAAE,UACf7B,QAASktB,GAASznB,KAAKK,SAAS,CAAEwmB,eAAe,IAAS,IAAMY,GAASznB,KAAKZ,MAAM7E,cARjF,IAWf,CAEAA,OAAAA,GACQyF,KAAKG,MAAMM,WACXT,KAAKK,SAAS,CAAEwmB,eAAe,IAE/B7mB,KAAKZ,MAAM7E,SAEnB,CAEAmtB,mBAAAA,GACI,OAAK1nB,KAAKG,MAAM8mB,aAIZrrB,EAAAA,EAAAA,KAAC0P,EAAAA,cAAa,CACVnB,MACIvO,EAAAA,EAAAA,KAAA,OAAKC,MAAO,CAAEpC,MAAO,QAASe,SACzBwF,KAAKZ,MAAMhD,EAAE,wDAGtBoP,GAAIxL,KAAKZ,MAAMhD,EAAE,OACjB7B,QAAS6K,IACLpF,KAAKK,SAAS,CAAE4mB,aAAa,IACxB7hB,GACDpF,KAAKzF,SACT,IAdD,IAkBf,CAEAkR,MAAAA,GAAuB,IAADkc,EAAAC,EAClB,MAAMC,EAAqD,QAA9CF,EAAG3nB,KAAKZ,MAAM2C,QAAQ/B,KAAKZ,MAAMa,UAAU,WAAG,IAAA0nB,GAAQ,QAARC,EAA3CD,EAA6CjmB,cAAM,IAAAkmB,OAAR,EAA3CA,EAAqDxkB,KAErE,OACI9H,EAAAA,EAAAA,MAACC,EAAAA,OAAM,CACHG,GAAI,CAAE,0BAA2BlD,EAAOutB,OAAQ,qBAAsBvtB,EAAOkF,OAC7EoqB,OAAO,QACPtsB,MAAM,EACNjB,QAASA,IAAMyF,KAAKZ,MAAM7E,UAC1BN,WAAS,EACTtB,SAAS,KACT,kBAAgB,oBAAmB6B,SAAA,CAElCwF,KAAK2Y,sBACL3Y,KAAK0nB,uBACN9rB,EAAAA,EAAAA,KAACD,EAAAA,YAAW,CAAAnB,SACPwF,KAAKZ,MAAMa,UAAUC,OAAS,EACzBF,KAAKZ,MAAMhD,EAAE,4BAA6B4D,KAAKZ,MAAMa,UAAUC,QAC/DF,KAAKZ,MAAMhD,EAAE,kBAAmB4D,KAAKZ,MAAMa,UAAU,OAE/D3E,EAAAA,EAAAA,MAACgB,EAAAA,cAAa,CAACT,MAAOrD,EAAOS,QAAQuB,SAAA,EACjCoB,EAAAA,EAAAA,KAACmsB,EAAAA,OAAM,CAAC3uB,SAAS,SAAQoB,UACrBc,EAAAA,EAAAA,MAAC0sB,EAAAA,KAAI,CACDjtB,MAAOiF,KAAKG,MAAMqmB,WAClB3pB,SAAUA,CAACorB,EAAQC,KACfxB,EAAAA,OAAOyB,WACH,KACA,KACA,KACW,IAAXD,EAAe,QAAqB,IAAXA,EAAe,QAAU,UAEtDloB,KAAKK,SAAS,CAAEmmB,WAAY0B,KACzBnnB,OAAeC,eAA6BD,OAAOE,cAAcgH,QAChE,sBACAigB,EACH,EAELxsB,GAAI,CAAE,uBAAwBlD,EAAO2tB,eACrCiC,eAAe,YAAW5tB,SAAA,EAE1BoB,EAAAA,EAAAA,KAACysB,EAAAA,IAAG,CACA5qB,SAAUuC,KAAKG,MAAM6mB,gBACrB/d,MAAOjJ,KAAKZ,MAAMhD,EAAE,mBACpBqF,GAAG,sBACH,gBAAc,2BACd/F,GAAI,CAAE,iBAAkBlD,EAAO0tB,eAEF,IAAhClmB,KAAKZ,MAAMa,UAAUC,QAAgBF,KAAKsmB,gBACvC1qB,EAAAA,EAAAA,KAACysB,EAAAA,IAAG,CACA5qB,SAAUuC,KAAKG,MAAM6mB,gBACrB/d,MAAOjJ,KAAKZ,MAAMhD,EAAE,gBACpBqF,GAAG,mBACH,gBAAc,0BACd/F,GAAI,CAAE,iBAAkBlD,EAAO0tB,eAEnC,KACU,WAAZ2B,GAAoC,YAAZA,GACM,IAAhC7nB,KAAKZ,MAAMa,UAAUC,SACrBF,KAAKsmB,eAQD,MAPA1qB,EAAAA,EAAAA,KAACysB,EAAAA,IAAG,CACA5qB,SAAUuC,KAAKG,MAAM6mB,gBACrB/d,MAAOjJ,KAAKZ,MAAMhD,EAAE,SACpBqF,GAAG,YACH,gBAAc,wBACd/F,GAAI,CAAE,iBAAkBlD,EAAO0tB,oBAKpB,IAA1BlmB,KAAKG,MAAMqmB,YACR5qB,EAAAA,EAAAA,KAAC4a,EAAAA,IAAG,CACAC,UAAU,MACV/a,GAAIlD,EAAOytB,SAASzrB,SAEnBwF,KAAKsnB,uBAEV,KAC6B,IAAhCtnB,KAAKZ,MAAMa,UAAUC,QAAgBF,KAAKsmB,gBAA4C,IAA1BtmB,KAAKG,MAAMqmB,YACpE5qB,EAAAA,EAAAA,KAAC4a,EAAAA,IAAG,CACAC,UAAU,MACV/a,GAAIlD,EAAOytB,SAASzrB,SAEnBwF,KAAKgY,gBAEV,KACU,WAAZ6P,GAAoC,YAAZA,GACM,IAAhC7nB,KAAKZ,MAAMa,UAAUC,SACrBF,KAAKsmB,gBACqB,IAA1BtmB,KAAKG,MAAMqmB,WAOP,MANA5qB,EAAAA,EAAAA,KAAC4a,EAAAA,IAAG,CACAC,UAAU,MACV/a,GAAIlD,EAAOytB,SAASzrB,SAEnBwF,KAAKqnB,qBAIlB/rB,EAAAA,EAAAA,MAAC+B,EAAAA,cAAa,CAAA7C,SAAA,CACiB,IAA1BwF,KAAKG,MAAMqmB,aACR5qB,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACHmE,GAAG,4BACH9E,QAAQ,YACRlD,MAAM,UACNgE,UAAWuC,KAAKG,MAAMM,YAAcT,KAAKG,MAAM6mB,gBAC/C7qB,QAASA,IAAM6D,KAAKumB,UAAYvmB,KAAKumB,WAAW/rB,SAE/CwF,KAAKsoB,gBAAe1sB,EAAAA,EAAAA,KAAC2sB,EAAAA,KAAQ,IAAKvoB,KAAKZ,MAAMhD,EAAE,WAG7B,IAA1B4D,KAAKG,MAAMqmB,aACR5qB,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACHmE,GAAG,kCACH9E,QAAQ,YACRlD,MAAM,UACNgE,UAAWuC,KAAKG,MAAMM,YAAcT,KAAKG,MAAM6mB,gBAC/C7qB,QAASA,KACD6D,KAAKumB,SACLvmB,KAAKumB,UAASriB,IAAUA,GAASlE,KAAKzF,YAEtCyF,KAAKzF,SACT,EACFC,SAEDwF,KAAKsoB,gBAAe1sB,EAAAA,EAAAA,KAAC2sB,EAAAA,KAAQ,IAAKvoB,KAAKZ,MAAMhD,EAAE,iBAAiBR,EAAAA,EAAAA,KAACwB,EAAAA,MAAS,QAGnFxB,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACHmE,GAAG,6BACHhE,SAAUuC,KAAKG,MAAM6mB,gBACrBrqB,QAAQ,YACRR,QAASA,IAAM6D,KAAKzF,UACpBd,MAAM,OAAMe,SAEXwF,KAAKsoB,gBAAe1sB,EAAAA,EAAAA,KAACwB,EAAAA,MAAS,IAAK4C,KAAKZ,MAAMhD,EAAE,iBAKrE,EAGJ,U,eCpVA,MAAM5D,EAA8B,CAChCoQ,YAAa,CACTlQ,SAAU,KAEd8vB,QAAS,CACL1qB,MAAO,qBAEX2qB,OAAQ,CACJjZ,GAAI,EACJ1R,MAAO,IAEX4qB,SAAU,CACNhqB,gBAAiB,WAErBiqB,aAAc,CACVlvB,MAAO,UACP8U,WAAY,GAEhBqa,cAAe,CACX,uCAAwC,CACpC,MAAO,CACH1vB,SAAU,KAGlB,uCAAwC,CACpC,MAAO,CACHA,SAAU,MAItB2vB,YAAa,CACTta,WAAY,GAEhBwX,OAAQ,CACJrY,UAAY3M,OAAe+nB,aAAe,GAAK,IAAM,IAAO/nB,OAAe+nB,aAAe,IAE9FlH,QAAS,CACL9S,cAAe,SA+CvB,MAAMia,UAA2B7pB,EAAAA,UAmB7BC,WAAAA,CAAYC,GACRE,MAAMF,GAnBY,KACL4pB,gBAAU,EAEJ,KACNC,eAAS,EAEE,KACpB1U,SAAG,EAES,KACH2U,SAAWC,IAAAA,YAER,KACZ3U,OAAC,EAEqB,KACtBiU,YAAM,EAKV,IAAIrlB,EAA4DpD,KAAKZ,MAAMgE,KACtEA,IACDA,SAAcpD,KAAKZ,MAAMrE,OAG7B,IAAIA,EAAQiF,KAAKZ,MAAMrE,MASvB,GARAiF,KAAKgpB,WAAajuB,EAEM,OAApBiF,KAAKgpB,WACLhpB,KAAKgpB,WAAa,YACS9sB,IAApB8D,KAAKgpB,aACZhpB,KAAKgpB,WAAa,aAGlBhpB,KAAKZ,MAAMygB,OACXzc,EAAO,cACJ,GAAa,WAATA,GAA8B,SAATA,GAC5B,GACIrI,GACiB,kBAAVA,IACLA,EAAM2L,WAAW,MAAQ3L,EAAMqW,SAAS,MAAUrW,EAAM2L,WAAW,MAAQ3L,EAAMqW,SAAS,MAE5F,IACIrW,EAAQ8F,KAAKC,MAAM/F,GACnBA,EAAQ8F,KAAKsC,UAAUpI,EAAO,KAAM,GACpCiF,KAAKgpB,WAAajuB,EAClBqI,EAAO,MACX,CAAE,MACE,MAGQ,WAATA,IACPrI,EAAQqe,WAAWpZ,KAAKgpB,aAAe,GAG3ChpB,KAAKG,MAAQ,CACTiD,OACAwR,OAAO,EACPwU,aAC4F,WAAtFroB,OAAeC,eAAiBD,OAAOE,cAAcC,QAAQ,qBACnEmoB,WAAiG,UAAnFtoB,OAAeC,eAAiBD,OAAOE,cAAcC,QAAQ,kBAC3EooB,YAAavuB,EAEbwuB,OAAO,EACPC,WAAW,GAGfxpB,KAAKuU,KAAM,EACXvU,KAAKwU,EAAI,EACTxU,KAAKyoB,OAAS,EAEdzoB,KAAKkpB,SAAWC,IAAAA,YAEhBnpB,KAAKipB,UAAYnU,KAAKM,MAAQ,IAClC,CAEAlT,iBAAAA,GAA2B,IAADunB,EAAAC,EAAAC,EAElB3pB,KAAKZ,MAAMuU,gBACM,QADQ8V,EACzBzpB,KAAKZ,MAAMwqB,cAAM,IAAAH,GAAQ,QAARC,EAAjBD,EAAmB/nB,cAAM,IAAAgoB,GAAzBA,EAA2B/nB,QAC+B,QADzBgoB,EACjC3pB,KAAKZ,MAAMwqB,OAAOloB,OAAOC,OAAO3B,KAAKZ,MAAMuU,uBAAe,IAAAgW,GAA1DA,EAA4DzjB,SAEvDlG,KAAKZ,MAAM+C,OACXmd,SAAS,kBAAkBtf,KAAKZ,MAAMuU,wBACtC1R,MAAM9B,GAA6CH,KAAKK,SAAS,CAAEuU,QAAc,OAALzU,QAAK,IAALA,IAAAA,EAAOwR,SAG5F/Q,YAAW,KAAO,IAADipB,EACb,GAAiB,QAAjBA,EAAI7pB,KAAKkpB,gBAAQ,IAAAW,GAAbA,EAAe7E,QAAS,CACxB,MAAM8E,EAAK9pB,KAAKkpB,SAASlE,QACnBjqB,EAAQ+uB,EAAG/uB,OAAS,GACpBgvB,EAAWD,EAAG1mB,KAGJ,WAAZ0mB,EAAG1mB,OACH0mB,EAAG1mB,KAAO,QAGd0mB,EAAGE,kBAAkB,EAAGjvB,EAAMmF,QAEb,WAAb6pB,IACAD,EAAG1mB,KAAO2mB,EAElB,IACD,IACP,CAEA5Q,QAAAA,CAASrc,GACDA,IACAA,EAAEmtB,kBACFntB,EAAEinB,kBAGN,IAAIhpB,EAAQiF,KAAKG,MAAMmpB,YACvB,GAAwB,WAApBtpB,KAAKG,MAAMiD,KACX,GAAc,SAAVrI,EACAA,EAAQ,SACL,CACH,MAAMqI,EAAOpD,KAAKZ,MAAMgE,aAAepD,KAAKG,MAAMmpB,YAElDvuB,EAAyB,kBAAVA,EAAqBA,EAAMA,MAAQA,EAErC,WAATqI,EACqB,kBAAVrI,IACPA,EAAQqe,WAAWre,EAAM0H,QAAQ,IAAK,OAAS,GAEnC,YAATW,IACPrI,GAAkB,IAAVA,GAA4B,SAAVA,GAA8B,MAAVA,GAA2B,OAAVA,GAA4B,OAAVA,EAEzF,KAC2B,WAApBiF,KAAKG,MAAMiD,KACJ,SAAVrI,EACAA,EAAQ,KACgB,kBAAVA,IACdA,EAAQqe,WAAWre,EAAM0H,QAAQ,IAAK,OAAS,GAExB,YAApBzC,KAAKG,MAAMiD,OAEdrI,EADU,SAAVA,EACQ,MAEU,IAAVA,GAA4B,SAAVA,GAA8B,MAAVA,GAA2B,OAAVA,GAA4B,OAAVA,GAIzFiF,KAAKZ,MAAM7E,QAAQ,CACfoX,IAAK5W,EACLwZ,IAAKvU,KAAKuU,IACVC,EAAGxU,KAAKwU,EACRiU,OAAQtf,SAASnJ,KAAKyoB,OAAyB,UAAOvsB,GAE9D,CAOA,oBAAOguB,CAActK,GACjB,MAAM,OAAEle,EAAM,MAAE3G,GAAU6kB,EAE1B,GAAc,KAAV7kB,EACA,OAAO,EAGX,MAAMovB,EAASpS,OAAOhd,GAEtB,QAA0B,kBAAf2G,EAAOiZ,KAAoBwP,EAASzoB,EAAOiZ,QAIvB,kBAAfjZ,EAAOgZ,KAAoByP,EAASzoB,EAAOgZ,IAC/D,CAKA0P,gBAAAA,GACI,OACI9uB,EAAAA,EAAAA,MAAC2e,EAAAA,qBAAoB,CACjBG,cAAepO,EAAUhM,KAAKZ,MAAMsI,MACpCwS,YAAaC,EAAAA,EAAe3f,SAAA,EAE5BoB,EAAAA,EAAAA,KAACye,EAAAA,WAAU,CACPtf,MAAOgd,OAAO/X,KAAKG,MAAMmpB,aACzBzsB,SAAU9B,IACDA,GAGLiF,KAAKK,SAAS,CAAEipB,YAAa5e,KAAKC,MAAM5P,EAAMua,YAAa,KAInE1Z,EAAAA,EAAAA,KAAC0e,EAAAA,WAAU,CACPvf,MAAOgd,OAAO/X,KAAKG,MAAMmpB,aACzB/O,MAAO,CAAC,QAAS,UAAW,WAC5B1d,SAAU9B,IACDA,GAILiF,KAAKK,SAAS,CAAEipB,YAAa5e,KAAKC,MAAM5P,EAAMua,YAAa,MAK/E,CAEAiP,WAAAA,GACI,OACI3oB,EAAAA,EAAAA,KAAC8hB,EAAW,CACRthB,EAAG4D,KAAKZ,MAAMhD,EACdqN,aAAczJ,KAAKZ,MAAMqK,aACzB8V,kBAAkB,EAClB7X,KAAM1H,KAAKZ,MAAMsI,KACjBvF,OAAQnC,KAAKZ,MAAM+C,OACnB6D,IAAKhG,KAAKZ,MAAMwqB,OAChBtgB,UAAWtJ,KAAKZ,MAAMkK,UACtB9P,MAAOwG,KAAKZ,MAAM5F,MAClB8a,KAAMtU,KAAKipB,UACXhX,IAAK6C,KAAKM,MACV2J,WAAS,EACTrV,WAAY1J,KAAKZ,MAAMsK,WACvBiK,eAAgB3T,KAAKZ,MAAMuU,gBAGvC,CAEA,qBAAO0W,CAAetvB,GAClB,IAEI,OADA8F,KAAKC,MAAM/F,IACJ,CACX,CAAE,MACE,OAAO,CACX,CACJ,CAEAuvB,gBAAAA,GACI,OACI1uB,EAAAA,EAAAA,KAAC2uB,EAAAA,EAAM,CACHrmB,MAAOlE,KAAKG,MAAMqpB,UAClBgB,eAAa,EACblhB,UAAWtJ,KAAKZ,MAAMkK,UACtBzO,cAAemF,KAAKgpB,YAAc,IAAIzd,WACtC1O,SAAW4tB,GACPzqB,KAAKK,SAAS,CACVipB,YAAamB,EACbjB,UAAWT,EAAmBsB,eAAeI,MAKjE,CAEAC,YAAAA,GACI,IAAK1qB,KAAKZ,MAAMygB,OACZ,OAAO,KAEX,GACwB,WAApB7f,KAAKZ,MAAMgE,WACsBlH,IAAjC8D,KAAKZ,MAAMwqB,OAAOloB,OAAOgZ,UACQxe,IAAjC8D,KAAKZ,MAAMwqB,OAAOloB,OAAOiZ,IAC3B,CACE,MAAMiF,EAAUha,OAAOC,KAAK7F,KAAKZ,MAAMygB,QAAQre,KAAImpB,IAAG,CAClD1hB,MAAOjJ,KAAKZ,MAAMygB,OAAO8K,GACzB5vB,MAAO4vB,MAGX,OACI/uB,EAAAA,EAAAA,KAACgvB,EAAAA,aAAY,CACT/uB,MAAOrD,EAAOoQ,YACdiiB,eAAa,EACbhwB,kBAC2CqB,IAAvC8D,KAAKZ,MAAMygB,OAAO7f,KAAKgpB,YACjBhpB,KAAKZ,MAAMygB,OAAO7f,KAAKgpB,YACvBhpB,KAAKgpB,WAEfpJ,QAASA,EACTkL,cAAc,GACdC,UAAQ,EACRC,eAAgBvG,IACN,OAANA,QAAM,IAANA,OAAM,EAANA,EAAQxb,cAAqB/M,IAAXuoB,GAAmC,OAAXA,EAAkBA,EAAOlZ,WAAa,IAEpF1O,SAAUA,CAACC,EAAG/B,IAAUiF,KAAKK,SAAS,CAAEipB,YAAavuB,IACrDkwB,cAAeA,CAACnuB,EAAG/B,IAAUiF,KAAKK,SAAS,CAAEipB,YAAavuB,IAC1DmwB,QAASpuB,GAAe,UAAVA,EAAE6tB,KAAmB3qB,KAAKmZ,SAASrc,GACjDquB,YAAarJ,IACTlmB,EAAAA,EAAAA,KAACY,EAAAA,UAAS,IACFslB,EACJ7Y,MAAOjJ,KAAKZ,MAAMhD,EAAE,SACpBO,QAAQ,cAK5B,CACA,OACIrB,EAAAA,EAAAA,MAAC+f,EAAAA,YAAW,CACR1e,QAAQ,WACRd,MAAOrD,EAAOoQ,YAAYpO,SAAA,EAE1BoB,EAAAA,EAAAA,KAAC0f,EAAAA,WAAU,CAAA9gB,SAAEwF,KAAKZ,MAAMhD,EAAE,YAC1BR,EAAAA,EAAAA,KAAC2f,EAAAA,OAAM,CACH5e,QAAQ,WACR9B,aAAcmF,KAAKgpB,WACnBnsB,SAAUC,GAAKkD,KAAKK,SAAS,CAAEipB,YAAaxsB,EAAEC,OAAOhC,QAASP,SAE7DoL,OAAOC,KAAK7F,KAAKZ,MAAMygB,QAAQre,KAAI,CAACmpB,EAAKvjB,KACtCxL,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAELzgB,MAAO4vB,EAAInwB,SAEVwF,KAAKZ,MAAMygB,OAAO8K,IAHdvjB,SAS7B,CAEAqE,MAAAA,GAAuB,IAAD2f,EAAAC,EAAAC,EAClB,MAAMzC,GACFvtB,EAAAA,EAAAA,MAAA,OAAKO,MAAO,CAAEhD,QAAS,OAAQ0yB,WAAY,UAAW/wB,SAAA,EAClDoB,EAAAA,EAAAA,KAAC+M,EAAAA,iBAAgB,CACb9M,MAAO,IACArD,EAAOoQ,eACL5I,KAAKZ,MAAMuc,gBAAkCzf,EAArB1D,EAAOqwB,aAExChgB,SACIjN,EAAAA,EAAAA,KAACkN,EAAAA,SAAQ,CACL0iB,gBAAgB,EAChB3uB,SAAUC,GAAMkD,KAAKuU,IAAMzX,EAAEC,OAAOiM,UAG5CC,MAAOjJ,KAAKZ,MAAMhD,EAAE,mBAExBR,EAAAA,EAAAA,KAAC6vB,EAAAA,QAAO,CACJzxB,MAAOgG,KAAKZ,MAAMhD,EAAE,4BACpBY,UAAW,CAAE0uB,OAAQ,CAAEhwB,GAAIlD,EAAOopB,UAAYpnB,UAE9CoB,EAAAA,EAAAA,KAAC+vB,EAAAA,KAAQ,CAAClyB,MAAM,iBAK5B,OACI6B,EAAAA,EAAAA,MAACC,EAAAA,OAAM,CACHC,MAAM,EACN7C,SACwB,WAApBqH,KAAKG,MAAMiD,MAAyC,YAApBpD,KAAKG,MAAMiD,MAA0C,WAApBpD,KAAKG,MAAMiD,KACtEpD,KAAKG,MAAMyU,OAAS5U,KAAKG,MAAMipB,aAC3B,UACAltB,EACJ,KAEVjC,UACyB,SAApB+F,KAAKG,MAAMiD,MAAmBpD,KAAKG,MAAMkpB,YACrB,WAApBrpB,KAAKG,MAAMiD,MAAyC,YAApBpD,KAAKG,MAAMiD,MAA0C,WAApBpD,KAAKG,MAAMiD,MAC5EpD,KAAKG,MAAMyU,OAAS5U,KAAKG,MAAMipB,aAEpCC,WAAgC,SAApBrpB,KAAKG,MAAMiD,MAAmBpD,KAAKG,MAAMkpB,WACrD9uB,QAASA,IAAMyF,KAAKZ,MAAM7E,UAC1B,kBAAgB,0BAChB,mBAAiB,gCACjBmB,GAAI,CAAE,qBAA0C,SAApBsE,KAAKG,MAAMiD,KAAkB5K,EAAOutB,YAAS7pB,GAAY1B,SAAA,EAErFc,EAAAA,EAAAA,MAACK,EAAAA,YAAW,CAAC8F,GAAG,0BAAyBjH,SAAA,CACpCwF,KAAKZ,MAAMhD,EAAE,gBACuB,KAAZ,QAAxBgvB,EAAAprB,KAAKZ,MAAMwqB,OAAOloB,cAAM,IAAA0pB,OAAA,EAAxBA,EAA0BQ,QACvBtwB,EAAAA,EAAAA,MAAA,QAAMO,MAAOrD,EAAOmwB,aAAanuB,SAAA,CAAC,IAAEwF,KAAKZ,MAAMhD,EAAE,aAAa,OAC9D,KAEH4D,KAAKG,MAAMyU,OACRhZ,EAAAA,EAAAA,KAACiqB,EAAAA,IAAG,CACAhqB,MAAO,CAAEmC,MAAO,SAChB/B,KAAK,QACLxC,MAAOuG,KAAKG,MAAMipB,aAAe,UAAY,UAC7CjtB,QAASA,MACH4E,OAAeC,eAAiBD,OAAOE,cAAcgH,QACnD,oBACAjI,KAAKG,MAAMipB,aAAe,QAAU,QAExCppB,KAAKK,SAAS,CAAE+oB,cAAeppB,KAAKG,MAAMipB,cAAe,EAC3D5uB,UAEFoB,EAAAA,EAAAA,KAACiwB,EAAAA,UAAS,MAEd,KACiB,SAApB7rB,KAAKG,MAAMiD,MACRxH,EAAAA,EAAAA,KAACI,EAAAA,WAAU,CACPH,MAAO,CAAEmC,MAAO,SAChB7B,QAASA,MACH4E,OAAeC,eAAiBD,OAAOE,cAAcgH,QACnD,iBACAjI,KAAKG,MAAMkpB,WAAa,QAAU,QAEtCrpB,KAAKK,SAAS,CAAEgpB,YAAarpB,KAAKG,MAAMkpB,YAAa,EACvD7uB,SAEDwF,KAAKG,MAAMkpB,YAAaztB,EAAAA,EAAAA,KAACkwB,EAAAA,eAAkB,KAAMlwB,EAAAA,EAAAA,KAACmwB,EAAAA,WAAc,MAErE,SAERnwB,EAAAA,EAAAA,KAACU,EAAAA,cAAa,CAAA9B,UACVoB,EAAAA,EAAAA,KAAA,QACIoe,YAAU,EACVvd,aAAa,MACbuvB,SAAUA,KAAM,EAChBnwB,MAAO,IAAKrD,EAAOyzB,WAAYtuB,OAAQ,QAASnD,UAEhDc,EAAAA,EAAAA,MAAC4wB,EAAAA,MAAK,CACFve,WAAS,EACTwe,UAAU,MACVC,QAAS,EACTvwB,MAAO,CAAE8B,OAAQ,QAASnD,SAAA,EAE1BoB,EAAAA,EAAAA,KAACswB,EAAAA,MAAK,CACFjwB,KAAM,CAAEowB,GAAIrsB,KAAKG,MAAMyU,OAAS5U,KAAKG,MAAMipB,aAAe,EAAI,IAC9DvtB,MAAO,CAAE8B,OAAQ,QAASnD,UAE1Bc,EAAAA,EAAAA,MAAC4wB,EAAAA,MAAK,CACFve,WAAS,EACTwe,UAAU,SACVC,QAAS,EACTvwB,MAAO,CAAEqc,UAAW,EAAGva,OAAQ,QAASnD,SAAA,CAEvCwF,KAAKZ,MAAMuc,YACR/f,EAAAA,EAAAA,KAACswB,EAAAA,MAAK,CAAA1xB,UACFc,EAAAA,EAAAA,MAAC4wB,EAAAA,MAAK,CACFve,WAAS,EACTwe,UAAU,MACVC,QAAS,EACTvwB,MAAO,CAAEqc,UAAW,GAAI1d,SAAA,CAEvBwF,KAAKZ,MAAMuc,YACR/f,EAAAA,EAAAA,KAACswB,EAAAA,MAAK,CAAA1xB,UACFc,EAAAA,EAAAA,MAAC+f,EAAAA,YAAW,CAACxf,MAAOrD,EAAOoQ,YAAYpO,SAAA,EACnCoB,EAAAA,EAAAA,KAAC0f,EAAAA,WAAU,CAAA9gB,SAAEwF,KAAKZ,MAAMhD,EAAE,iBAC1Bd,EAAAA,EAAAA,MAACigB,EAAAA,OAAM,CACH5e,QAAQ,WACR5B,MAAOiF,KAAKG,MAAMiD,KAClBvG,SAAUC,IACNkD,KAAKK,SACD,CACI+C,KAAMtG,EAAEC,OAAOhC,MAMfwuB,MACuB,WAAnBzsB,EAAEC,OAAOhC,OACHguB,EAAmBmB,cAAc,CAC7BnvB,MAAOiF,KAAKG,MAAMmpB,YAClB5nB,OAAQ1B,KAAKZ,MAAMwqB,OACdloB,SAGnB8nB,WAAW,IAEf,KAC4B,SAApBxpB,KAAKG,MAAMiD,MACXpD,KAAKK,SAAS,CACVipB,aACItpB,KAAKG,MAAMmpB,aAAe,IAC5B/d,WACFie,UACIT,EAAmBsB,gBAEXrqB,KAAKG,MACAmpB,aAAe,IACtB/d,aAGlB,GAEP,EACH/Q,SAAA,EAEFoB,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAACzgB,MAAM,SAAQP,SAAC,YACzBoB,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAACzgB,MAAM,SAAQP,SAAC,YACzBoB,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAACzgB,MAAM,UAASP,SAAC,aAC1BoB,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAACzgB,MAAM,OAAMP,SAAC,SACtBwF,KAAKZ,MAAMygB,QACRjkB,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAACzgB,MAAM,SAAQP,SAAC,WACzB,aAIhB,KACiB,SAApBwF,KAAKG,MAAMiD,MAAkBxH,EAAAA,EAAAA,KAACswB,EAAAA,MAAK,CAACI,KAAM,IAAc,UAGjE,MACJ1wB,EAAAA,EAAAA,KAACswB,EAAAA,MAAK,CACFI,KAA0B,SAApBtsB,KAAKG,MAAMiD,MAAmBpD,KAAKG,MAAMkpB,WAAa,OAAIntB,EAChEL,MAAO,CAAEU,WAAY,GAAI/B,SAEJ,YAApBwF,KAAKG,MAAMiD,MACRxH,EAAAA,EAAAA,KAAC2M,EAAAA,WAAU,CACPkO,UAAU,MACV5a,MACImE,KAAKZ,MAAMuc,WACL,CACIzD,UAAW,GACXpa,MAAO,OACPY,gBAC6B,SAAzBsB,KAAKZ,MAAMkK,UACL,UACA,UACV4G,aAAc,EACdL,QAAS,QAEb3T,EACT1B,UAEDc,EAAAA,EAAAA,MAAC4wB,EAAAA,MAAK,CACFzV,UAAU,QACV9I,WAAS,EACT4d,WAAW,SACXa,QAAS,EAAE5xB,SAAA,EAEXc,EAAAA,EAAAA,MAAC4wB,EAAAA,MAAK,CAACrwB,MAAO,CAAE7C,YAAa,IAAKwB,SAAA,CAAEwF,KAAKZ,MAAMhD,EAAE,SAAS,QAC1DR,EAAAA,EAAAA,KAACswB,EAAAA,MAAK,CAAA1xB,SAAC,WACPoB,EAAAA,EAAAA,KAACswB,EAAAA,MAAK,CAAA1xB,UACFoB,EAAAA,EAAAA,KAAC2wB,EAAAA,OAAM,CACH7vB,WAAS,EACT8uB,eACwB,SAApBxrB,KAAKgpB,YACe,cAApBhpB,KAAKgpB,cAEGhpB,KAAKgpB,WAEjBkC,QAASpuB,GAAe,UAAVA,EAAE6tB,KAAmB3qB,KAAKmZ,SAASrc,GACjDD,SAAUC,GACNkD,KAAKK,SAAS,CAAEipB,YAAaxsB,EAAEC,OAAOiM,eAIlDpN,EAAAA,EAAAA,KAACswB,EAAAA,MAAK,CAAA1xB,SAAC,cAGK,WAApBwF,KAAKG,MAAMiD,MACXxH,EAAAA,EAAAA,KAACY,EAAAA,UAAS,CACNG,QAAQ,WACR1C,WAAS,EACTyC,WAAS,EACTwH,OAAQlE,KAAKG,MAAMopB,MACnBnmB,KAAK,SACLopB,WAAY,CACR/L,KAAMzgB,KAAKZ,MAAMwqB,OAAOloB,OAAO+e,KAC/B9F,IAAK3a,KAAKZ,MAAMwqB,OAAOloB,OAAOiZ,IAC9BD,IAAK1a,KAAKZ,MAAMwqB,OAAOloB,OAAOgZ,KAElCwO,SAAUlpB,KAAKkpB,SACf1O,WAAYxa,KAAKZ,MAAMhD,EACnB,gDAEJrB,MAAOiF,KAAKG,MAAMmpB,YAAY/d,WAC9BtC,MACIjJ,KAAKZ,MAAMhD,EAAE,eACqBF,IAAjC8D,KAAKZ,MAAMwqB,OAAOloB,OAAOiZ,KACQ,MAAlC3a,KAAKZ,MAAMwqB,OAAOloB,OAAOmP,KACnB,KAAK7Q,KAAKZ,MAAMhD,EAAE,gBAA4CF,IAAjC8D,KAAKZ,MAAMwqB,OAAOloB,OAAOiZ,IAAoB3a,KAAKZ,MAAMwqB,OAAOloB,OAAOiZ,IAAM,IACzG,UAC4Bze,IAAjC8D,KAAKZ,MAAMwqB,OAAOloB,OAAOgZ,KACQ,MAAlC1a,KAAKZ,MAAMwqB,OAAOloB,OAAOmP,KACnB,KAAK7Q,KAAKZ,MAAMhD,EAAE,gBAA4CF,IAAjC8D,KAAKZ,MAAMwqB,OAAOloB,OAAOgZ,IAAoB1a,KAAKZ,MAAMwqB,OAAOloB,OAAOgZ,IAAM,MACzG,IAEVwQ,QAASpuB,GAAe,UAAVA,EAAE6tB,KAAmB3qB,KAAKG,MAAMopB,OAASvpB,KAAKmZ,SAASrc,GACrED,SAAUC,IACNkD,KAAKK,SAAS,CACVipB,YAAaxsB,EAAEC,OAAOhC,MACtBwuB,MAAOR,EAAmBmB,cAAc,CACpCnvB,MAAO+B,EAAEC,OAAOhC,MAChB2G,OAAQ1B,KAAKZ,MAAMwqB,OAAOloB,UAEhC,IAGU,SAApB1B,KAAKG,MAAMiD,KACXpD,KAAKsqB,mBACe,WAApBtqB,KAAKG,MAAMiD,KACXpD,KAAK0qB,gBAEL9uB,EAAAA,EAAAA,KAACY,EAAAA,UAAS,CACNG,QAAQ,WACR1C,WAAS,EACTivB,SAAUlpB,KAAKkpB,SACfxsB,WAAS,EACT8d,WAAYxa,KAAKZ,MAAMhD,EACnB,qDAEJ6M,MAAOjJ,KAAKZ,MAAMhD,EAAE,SACpBQ,WAAS,EACT6vB,UAAW3vB,GAAKA,EAAE+Y,SAAqB,UAAV/Y,EAAE6tB,KAAmB3qB,KAAKmZ,SAASrc,GAChEjC,aAAcmF,KAAKgpB,WAAWzd,WAC9B1O,SAAUC,GAAKkD,KAAKK,SAAS,CAAEipB,YAAaxsB,EAAEC,OAAOhC,aAK3C,SAApBiF,KAAKZ,MAAMstB,MAAkC,QAAnBrB,EAAIrrB,KAAKZ,MAAMstB,YAAI,IAAArB,GAAfA,EAAiB3kB,WAAW,WACxC,WAApB1G,KAAKG,MAAMiD,MACPxH,EAAAA,EAAAA,KAACswB,EAAAA,MAAK,CACFrwB,MAAO,CAAEhD,QAAS,OAAQ8zB,IAAK,OAC/B1wB,KAAM,CAAEowB,GAAI,GAAI7xB,SAEfwF,KAAKoqB,qBAEV,KAEHpqB,KAAKZ,MAAMuc,YAAa/f,EAAAA,EAAAA,KAACswB,EAAAA,MAAK,CAAA1xB,SAAEquB,IAAuB,KAEvD7oB,KAAKZ,MAAMuc,YACRrgB,EAAAA,EAAAA,MAAC4wB,EAAAA,MAAK,CAAA1xB,SAAA,EACFc,EAAAA,EAAAA,MAAC+f,EAAAA,YAAW,CACR1e,QAAQ,WACRd,MAAOrD,EAAOgwB,QAAQhuB,SAAA,EAEtBoB,EAAAA,EAAAA,KAAC0f,EAAAA,WAAU,CAAA9gB,SAAEwF,KAAKZ,MAAMhD,EAAE,cAC1Bd,EAAAA,EAAAA,MAACigB,EAAAA,OAAM,CACH5e,QAAQ,WACR9B,aAAc,EACdgC,SAAUC,GACLkD,KAAKwU,EAAIuD,OACNjb,EAAEC,OAAOhC,OAEhBP,SAAA,EAEDoB,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAACzgB,MAAO,EAAKP,SAAC,iBAEvBoB,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAACzgB,MAAO,EAAKP,SAAC,4BACvBoB,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAACzgB,MAAO,EAAKP,SAAC,kCAEvBoB,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAACzgB,MAAO,GAAKP,SAAC,6CAGvBoB,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAACzgB,MAAO,GAAKP,SAAC,qCACvBoB,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAACzgB,MAAO,GAAKP,SAAC,qDAGvBoB,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAACzgB,MAAO,IAAKP,SAAC,yCAIvBoB,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAACzgB,MAAO,GAAKP,SAAC,wCACvBoB,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAACzgB,MAAO,GAAKP,SAAC,sCACvBoB,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAACzgB,MAAO,IAAKP,SAAC,sCAEvBoB,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAACzgB,MAAO,GAAKP,SAAC,mCACvBoB,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAACzgB,MAAO,GAAKP,SAAC,iCACvBoB,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAACzgB,MAAO,IAAKP,SAAC,iCAEvBoB,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAACzgB,MAAO,GAAKP,SAAC,iCACvBoB,EAAAA,EAAAA,KAAC4f,EAAAA,SAAQ,CAACzgB,MAAO,IAAKP,SAAC,uCAG/BoB,EAAAA,EAAAA,KAACY,EAAAA,UAAS,CACNG,QAAQ,WACR3C,MAAOgG,KAAKZ,MAAMhD,EAAE,qBACpBV,GAAI,CAAE,sBAAuBlD,EAAOiwB,QACpCxf,MAAOjJ,KAAKZ,MAAMhD,EAAE,UACpBgH,KAAK,SACLopB,WAAY,CAAE7R,IAAK,GACnBH,WAAYxa,KAAKZ,MAAMhD,EAAE,cACzBvB,aAAcmF,KAAKyoB,OACnB5rB,SAAUC,GAAMkD,KAAKyoB,OAAS1Q,OAAOjb,EAAEC,OAAOhC,YAGtD,UAGXiF,KAAKG,MAAMyU,OAAS5U,KAAKG,MAAMipB,cAAoC,SAApBppB,KAAKG,MAAMiD,MACvDxH,EAAAA,EAAAA,KAACswB,EAAAA,MAAK,CACFjwB,KAAM,CAAEowB,GAAI,GACZxwB,MAAO,CAAE6R,UAAW,KACpBhS,GAAI,CAAE7C,QAAS,CAAE+zB,GAAI,OAAQC,GAAI,iBAAmBryB,SAEnDwF,KAAKukB,gBAEV,aAIhBjpB,EAAAA,EAAAA,MAAC+B,EAAAA,cAAa,CAAC3B,GAAIlD,EAAOowB,cAAcpuB,SAAA,CAClCwF,KAAKZ,MAAMuc,WAA2B,KAAdkN,EACxB7oB,KAAKZ,MAAMuc,WAA+C,MAAlC/f,EAAAA,EAAAA,KAAA,OAAKC,MAAO,CAAEyT,SAAU,MAClD1T,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACHX,QAAQ,YACRc,UAAWuC,KAAKG,MAAMopB,MACtBptB,QAASW,GAAKkD,KAAKmZ,SAASrc,GAC5BrD,MAAM,UACN8D,UAAgC,OAArByC,KAAKZ,MAAMtB,OAAiBlC,EAAAA,EAAAA,KAACkxB,EAAAA,MAAS,SAAM5wB,EACvDL,OAA2C,KAAZ,QAAxByvB,EAAAtrB,KAAKZ,MAAMwqB,OAAOloB,cAAM,IAAA4pB,OAAA,EAAxBA,EAA0BM,OAAkBpzB,EAAOkwB,cAAWxsB,EAAU1B,SAEzD,OAArBwF,KAAKZ,MAAMtB,MAAiBkC,KAAKZ,MAAMhD,EAAE,cAAeR,EAAAA,EAAAA,KAACkxB,EAAAA,MAAS,CAAC5zB,SAAS,aAEjF0C,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACHX,QAAQ,YACRR,QAASA,IAAM6D,KAAKZ,MAAM7E,UAC1Bd,MAAM,OACN8D,UAAgC,OAArByC,KAAKZ,MAAMtB,OAAiBlC,EAAAA,EAAAA,KAACmxB,EAAAA,MAAU,SAAM7wB,EAAU1B,SAE5C,OAArBwF,KAAKZ,MAAMtB,MAAiBkC,KAAKZ,MAAMhD,EAAE,WAAYR,EAAAA,EAAAA,KAACmxB,EAAAA,MAAU,CAAC7zB,SAAS,iBAK/F,EAGJ,UCpxBMV,EAA8B,CAChCw0B,gBAAiB,CACblvB,MAAO,OACPH,OAAQ,OACRuR,OAAQ,uBAEZ+d,sBAAuB,CACnBtvB,OAAQ,qBAEZuG,MAAO,CACHgL,OAAQ,qBAEZzN,GAAI,CACAyrB,UAAW,UAEfnH,OAAQ,CACJpoB,OAAQ,qBAEZwvB,YAAa,CACTrvB,MAAO,KAEXsvB,OAAQ,CACJlV,UAAW,GACX3J,WAAY,GAEhB8e,YAAa,CACTvvB,MAAO,QAEXwvB,aAAc,CACVz0B,QAAS,eACTiF,MAAO,IAEXyvB,SAAU,CACNzvB,MAAO,KAEX0vB,SAAU,CACN1vB,MAAO,GACPH,OAAQ,IAEZua,UAAW,CACPA,UAAW,IAEfuV,iBAAkB,CACdC,SAAU,OACV70B,QAAS,OACT8zB,IAAK,GAETgB,cAAe,CACX7vB,MAAO,IACPpF,SAAU,KAEdk1B,SAAU,CACN9vB,MAAO,OACPnF,SAAU,IACVk1B,OAAQ,OACRh1B,QAAS,QAEbi1B,YAAa,CACT5V,UAAW,IAEf6V,UAAW,CACPr1B,SAAU,KAEds1B,UAAW,CACPlwB,MAAO,QAEXwuB,KAAM,CACFzzB,QAAS,OACT,UAAW,CACPo1B,GAAI,QAGZC,MAAO,CACHpwB,MAAO,OACPH,OAAQ,OACRsQ,QAAS,MACTkgB,OAAQ,UACR/0B,SAAU,WACVE,IAAK,GACL80B,WAAY,gBACZ,UAAW,CACPC,UAAW,iBAEf,WAAY,CACRj1B,SAAU,WACV4V,KAAM,MACN/V,QAAS,KACT0E,OAAQ,OACRG,MAAO,MACPY,gBAAiB,UACjB2vB,UAAW,iBAEf,UAAW,CACPj1B,SAAU,WACV4V,KAAM,MACN/V,QAAS,KACT0E,OAAQ,OACRG,MAAO,MACPY,gBAAiB,UACjB2vB,UAAW,mBAGnB50B,MAAO,CACHqE,MAAO,IAEXwwB,oBAAqB,CACjBl1B,SAAU,WACVm1B,OAAQ,IACRl1B,MAAO,GAEXm1B,YAAa,CACT3e,QAAS,YAEb+Y,cAAe,CACX,uCAAwC,CACpC,MAAO,CACH1vB,SAAU,KAGlB,uCAAwC,CACpC,MAAO,CACHA,SAAU,KAItBu1B,gBAAiB,CACbh1B,MAAO,WAEXi1B,YAAa,CACTngB,WAAY,EACZN,QAAS,GACTif,UAAW,SACXh0B,SAAU,WAEd0oB,QAAS,CACL9S,cAAe,SAIjB6f,EAAgB,CAClB,SACA,qBACA,qBACA,iBACA,cACA,cACA,mBACA,qBACA,cACA,oBACA,mBACA,eACA,cACA,mBACA,mBACA,QACA,OACA,WACA,kBACA,aACA,eACA,cACA,YACA,OACA,YACA,kBACA,uBACA,wBACA,yBACA,yBACA,sBACA,wBACA,8BACA,+BACA,8BACA,sBACA,eACA,eACA,gBACA,gBACA,UACA,WACA,YACA,YACA,cACA,eACA,cACA,OACA,QACA,aACA,cACA,mBACA,kBACA,wBACA,kBACA,yBACA,gBACA,4BACA,qBACA,iBACA,mBACA,wBACA,kBACA,oBACA,aACA,cACA,eACA,cACA,eACA,qBACA,OACA,WACA,YACA,gBACA,sBACA,gBACA,cACA,gBACA,cACA,kBACA,oBACA,aACA,iBACA,sBACA,gBACA,qBACA,gBACA,cACA,cACA,aACA,aACA,oBACA,qBACA,aACA,mBACA,eACA,iBACA,eACA,aACA,cACA,cACA,cACA,YACA,YACA,yBACA,gBACA,eACA,oBACA,qBACA,qBACA,sBACA,cACA,eACA,cACA,gBACA,eACA,cACA,gBACA,QACA,SACA,gBACA,cACA,cACA,eACA,mBACA,qBACA,cACA,mBACA,oBACA,oBACA,qBACA,wBACA,oBACA,qBACA,eACA,oBACA,OACA,aACA,WACA,MACA,YACA,YACA,UACA,WACA,QACA,gBACA,cACA,oBACA,mBACA,eACA,gBACA,gBACA,gBACA,kBACA,2BACA,2BACA,uBACA,kCACA,kCACA,iBACA,aACA,aACA,YACA,qBACA,sBACA,qBACA,sBACA,mBACA,mBACA,mBACA,wBACA,mBACA,qBACA,sBACA,iBACA,iBACA,qBACA,qBACA,iBACA,aACA,YACA,iBACA,cACA,0BACA,yBACA,uBACA,sBACA,6BACA,qCACA,iCACA,2BACA,uCACA,4BACA,2BACA,+BACA,+BACA,+BACA,iBACA,4BACA,4BACA,kBACA,aACA,kBACA,mBACA,iBACA,aACA,kBACA,mBACA,iBACA,cACA,uBACA,uBACA,mBACA,8BACA,wBACA,cACA,oBACA,sBACA,oBACA,oBACA,6BACA,8BACA,wBACA,mCACA,wBACA,mCACA,mCACA,8BACA,aACA,aACA,WACA,cACA,gBACA,gBACA,cACA,cACA,gBACA,oBACA,6BACA,yBACA,oCACA,eACA,eACA,0BACA,oBACA,oBACA,eACA,gBACA,2BACA,2BACA,2BACA,sBACA,gBAuDJ,MAAMC,UAAgC1vB,EAAAA,UAIlCC,WAAAA,CAAYC,GACRE,MAAMF,GAJwB,KAC1ByvB,iBAAW,OAiInBC,gBAAkB,CAAC5rB,EAAa8C,KACxBhG,KAAK6uB,cAAgBhuB,KAAKsC,UAAU6C,EAAK,KAAM,KAC/ChG,KAAK6uB,YAAchuB,KAAKsC,UAAU6C,EAAK,KAAM,GACxChG,KAAKG,MAAM4uB,QAGZ/uB,KAAKgf,cAFLhf,KAAKK,SAAS,CAAE8J,KAAMnK,KAAK6uB,cAInC,EApIA,MAAMG,EAAYhvB,KAAKZ,MAAM4G,IAAI9C,IAAIwD,WAAW,YAAsC,UAAxB1G,KAAKZ,MAAM4G,IAAI5C,KAC7E,IAAI6rB,GACEluB,OAAeC,eAAiBD,OAAOE,cAAcC,QACnD,GAAGlB,KAAKZ,MAAM8vB,YAAc,kBAC3B,SAGG,UAARD,GAAoBD,IACpBC,EAAM,UAENjvB,KAAKZ,MAAM+vB,UAAYH,IACvBC,EAAM,SAGV,MAAMjpB,EAAMhG,KAAKZ,MAAM4G,IAEjBopB,EACFppB,EAAItE,QAAU,SAAUsE,EAAItE,QAAU,UAAWsE,EAAItE,OAASsE,EAAItE,OAAO2tB,MAAMC,UAAOpzB,EACpFqzB,EACFvpB,EAAItE,QAAU,SAAUsE,EAAItE,QAAU,UAAWsE,EAAItE,OAASsE,EAAItE,OAAO2tB,MAAMzD,WAAQ1vB,EAE3F8D,KAAKG,MAAQ,CACTgK,KAAMtJ,KAAKsC,UAAUnD,KAAKZ,MAAM4G,IAAK,KAAM,GAC3C9B,OAAO,EACPsrB,aAAa,EACbT,SAAS,EACTU,UAAWzvB,KAAK0vB,cAAcN,GAAW,GACzCO,WAAY3vB,KAAK0vB,cAAcH,GAAY,GAC3CN,MACAW,eAAgB,GAChBC,yBAAyB,EACzBC,UAAU,EACVC,YAAY,EACZC,aAAa,EACbC,MAAO,GACPvoB,KAAM5L,EAAAA,KAAKC,eAGfiE,KAAK6uB,YAAchuB,KAAKsC,UAAUnD,KAAKZ,MAAM4G,IAAK,KAAM,EAC5D,CAEA,uBAAM9D,GAAoC,IAADguB,EAAA9Q,EAAA+Q,EAGrC,MAAMC,GAEa,QAAfF,EAAClwB,KAAKZ,MAAM4G,WAAG,IAAAkqB,GAAQ,QAAR9Q,EAAd8Q,EAAgBxuB,cAAM,IAAA0d,OAAR,EAAdA,EAAwBgR,eAEV,QADfD,EACCnwB,KAAKZ,MAAM4G,WAAG,IAAAmqB,OAAA,EAAdA,EAAgBC,aAEfC,EAAwC,GAE9C,GAAID,EACA,GAA2B,kBAAhBA,EAA0B,CACjC,MAAME,EAAU1qB,OAAOC,KAAKuqB,GAC5B,IAAK,IAAIhpB,EAAI,EAAGA,EAAIkpB,EAAQpwB,OAAQkH,IAChC,IACI,MAAMoC,QAAiD+mB,EAAAA,EAAAA,YACnDH,EAAYE,EAAQlpB,IACpBpH,KAAKZ,MAAM+C,QAOf,GALAqH,EAAOmhB,IAAM2F,EAAQlpB,GACjBoC,GAA4B,kBAAXA,GAEjB6mB,EAAe3tB,KAAK8G,GAEpBA,EAAOpP,KACP,IACI,MAAMo2B,GAASC,EAAAA,EAAAA,aAAYjnB,EAAOpP,MAClC,GAAoB,WAAhBo2B,EAAOptB,MAAqC,SAAhBotB,EAAOptB,KAAiB,CACpD,MAAMhJ,QAAam2B,EAAAA,EAAAA,YAAWC,EAAQxwB,KAAKZ,MAAM+C,QAC7C/H,IACAoP,EAAOpP,KAAOA,EAEtB,CACJ,CAAE,MAAO0C,GACLmH,QAAQysB,KAAK,oCAAoClnB,EAAOpP,UAAU0C,KAClE0M,EAAOpP,UAAO8B,CAClB,CAER,CAAE,MAAOY,GACLmH,QAAQysB,KAAK,+BAA+BN,EAAYE,EAAQlpB,SAAStK,IAC7E,CAEAuzB,EAAenwB,SACfmwB,EAAevpB,MAAK,CAACgZ,EAAGC,SACJ7jB,IAAZ4jB,EAAE6Q,YAAmCz0B,IAAZ6jB,EAAE4Q,MACpB7Q,EAAE6Q,MAAQ5Q,EAAE4Q,WAEPz0B,IAAZ4jB,EAAE6Q,OACM,OAEIz0B,IAAZ6jB,EAAE4Q,OAGC7Q,EAAE6K,IAAM5K,EAAE4K,IAFN,GAEiB,IAEhC3qB,KAAKK,SAAS,CAAEgwB,mBAExB,MACIpsB,QAAQysB,KACJ,4BAA4BN,uCAAiDA,KAMlE,WAAnBpwB,KAAKG,MAAM8uB,KACQ,WAAnBjvB,KAAKG,MAAM8uB,KACS,UAAnBjvB,KAAKG,MAAM8uB,MACY,UAAnBjvB,KAAKG,MAAM8uB,KACNjvB,KAAKZ,MAAM4G,IAAI9C,IAAIwD,WAAW,YAAsC,UAAxB1G,KAAKZ,MAAM4G,IAAI5C,OACpEitB,EAAerpB,MAAKioB,GAAOA,EAAItE,MAAQ3qB,KAAKG,MAAM8uB,OAEnDjvB,KAAKK,SAAS,CAAE4uB,IAAK,WAGpBjvB,KAAKZ,MAAM+C,OAAOyuB,gBAAgB5wB,KAAKZ,MAAM4G,IAAI9C,IAAKlD,KAAK8uB,gBACpE,CAEAxsB,oBAAAA,GACStC,KAAKZ,MAAM+C,OAAO0uB,kBAAkB7wB,KAAKZ,MAAM4G,IAAI9C,IAAKlD,KAAK8uB,gBACtE,CAaAY,aAAAA,CAAcjrB,EAAcqsB,GAA2B,IAADC,EAAAC,EAAAC,EAAAC,EAAAC,EAClD,IAAK1sB,EACD,MAAO,GAEX,GAAIA,EAAKM,SAAS,eAEd,MAAO,GAEX,IAAIlB,EAOAutB,EANJ,IACIvtB,EAAOhD,KAAKC,MAAMd,KAAKG,MAAMgK,KACjC,CAAE,MACE,CAIJ,IAEIinB,EAAS,IAAI9rB,SAAS,MAAOb,EAAKM,SAAS,UAAYN,EAAO,UAAUA,IAC5E,CAAE,MACE,OAAOzE,KAAKZ,MAAMhD,EAAE,qBACxB,CAGA,GAAQ,QAAJ20B,EAAAltB,SAAI,IAAAktB,GAAQ,QAARC,EAAJD,EAAMrvB,cAAM,IAAAsvB,GAAZA,EAAc5tB,MAAkD,QAA9C6tB,EAAKjxB,KAAKZ,MAAM2C,QAAyB,QAAlBovB,EAACttB,EAAKnC,OAAO2tB,aAAK,IAAA8B,OAAA,EAAjBA,EAAmB1vB,WAAG,IAAAwvB,GAAQ,QAARC,EAAzCD,EAA2CvvB,cAAM,IAAAwvB,GAAlDA,EAA6E9tB,KAAM,CACzG,MAAMiuB,EAAmCP,EACnCjtB,EAAKnC,OAAO0B,KACXpD,KAAKZ,MAAM2C,QAAQ8B,EAAKnC,OAAO2tB,MAAM5tB,IAA6BC,OAAO0B,KAC1EkuB,EAAiCR,EAChC9wB,KAAKZ,MAAM2C,QAAQ8B,EAAKnC,OAAO2tB,MAAM5tB,IAA6BC,OAAO0B,KAC1ES,EAAKnC,OAAO0B,KAClB,GAAIiuB,GAAeC,EAAW,CAC1B,IAAI1K,EAAM,KAQV,GAPoB,YAAhByK,EACAzK,GAAM,EACiB,WAAhByK,EACPzK,EAAM,EACiB,WAAhByK,GAA4C,UAAhBA,IACnCzK,EAAM,UAEE,OAARA,EACA,IACI,MAAMxhB,EAASgsB,EAAOxK,GACtB,MAAkB,UAAd0K,EAEO,GAEO,OAAXlsB,UAA0BA,IAAWksB,EACtCtxB,KAAKZ,MAAMhD,EAAE,wCAAyCk1B,GACtD,EACV,CAAE,MAAOx0B,GACL,MAAO,GAAGkD,KAAKZ,MAAMhD,EAAE,+BAA+BU,EAAEyO,YAC5D,CAER,CACJ,CAEA,MAAO,EACX,CAEAgmB,aAAAA,CAAcx2B,GACVA,EAAQA,GAASiF,KAAKG,MAAMgK,KAC5B,IAAK,IAADU,EAAAG,EAAAwmB,EAAAC,EACA,MAAMzrB,EAAMnF,KAAKC,MAAM/F,GAmCvB,OAlCAiL,EAAI9C,IAAMlD,KAAKZ,MAAM4G,IAAI9C,IAGX,QAAd2H,EAAI7E,EAAItE,cAAM,IAAAmJ,GAAVA,EAAYwkB,QACPrpB,EAAItE,OAAO2tB,MAAM5tB,WACXuE,EAAItE,OAAO2tB,MAAM5tB,KAGtBuE,EAAItE,OAAO2tB,MAAMC,WAAkCpzB,IAA1B8J,EAAItE,OAAO2tB,MAAMC,MAClB,QAA1BtpB,EAAItE,OAAO2tB,MAAMC,cAEVtpB,EAAItE,OAAO2tB,MAAMC,OAGtBtpB,EAAItE,OAAO2tB,MAAMzD,YAAoC1vB,IAA3B8J,EAAItE,OAAO2tB,MAAMzD,OAClB,QAA3B5lB,EAAItE,OAAO2tB,MAAMzD,eAEV5lB,EAAItE,OAAO2tB,MAAMzD,MAEvB5lB,EAAItE,OAAO2tB,MAAM5tB,IAAOuE,EAAItE,OAAO2tB,MAAMC,MAAStpB,EAAItE,OAAO2tB,MAAMzD,cAC7D5lB,EAAItE,OAAO2tB,YAIFnzB,KAAV,QAAV8O,EAAAhF,EAAItE,cAAM,IAAAsJ,OAAA,EAAVA,EAAY2P,MAA+C,kBAAnB3U,EAAItE,OAAOiZ,MACnD3U,EAAItE,OAAOiZ,IAAMvB,WAAWpT,EAAItE,OAAOiZ,WAEnBze,KAAV,QAAVs1B,EAAAxrB,EAAItE,cAAM,IAAA8vB,OAAA,EAAVA,EAAY9W,MAA+C,kBAAnB1U,EAAItE,OAAOgZ,MACnD1U,EAAItE,OAAOgZ,IAAMtB,WAAWpT,EAAItE,OAAOgZ,WAElBxe,KAAX,QAAVu1B,EAAAzrB,EAAItE,cAAM,IAAA+vB,OAAA,EAAVA,EAAYhR,OAAiD,kBAApBza,EAAItE,OAAO+e,OACpDza,EAAItE,OAAO+e,KAAOrH,WAAWpT,EAAItE,OAAO+e,OAGrCza,CACX,CAAE,MACE,OAAO,IACX,CACJ,CAEAnJ,QAAAA,CAAS9B,EAAe8E,GACpB,MAAMgE,EAAO7D,KAAKuxB,cAAcx2B,GAC1B22B,EAAkD,CAAEvnB,KAAMpP,GAChE,GAAI8I,EAAM,CAAC,IAAD8tB,EAAAC,EAAAC,EAAAC,EACNJ,EAAS3C,QAAU/uB,KAAK6uB,cAAgBhuB,KAAKsC,UAAUU,EAAM,KAAM,GAGnE6tB,EAAS7B,yBAA0B,EACnC,MAAMhB,EAAchuB,KAAKC,MAAMd,KAAK6uB,aAChChrB,EAAKnC,QACLkE,OAAOC,KAAKgpB,EAAYntB,QAAU,CAAC,GAAGoB,SAAQ+B,SAChB3I,IAAtB2H,EAAKnC,OAAOmD,KACZ6sB,EAAS7B,yBAA0B,EACvC,IAIR6B,EAASxtB,OAAQ,EACjBwtB,EAASjC,UAAYzvB,KAAK0vB,cAAyB,QAAZiC,EAAC9tB,EAAKnC,cAAM,IAAAiwB,GAAO,QAAPC,EAAXD,EAAatC,aAAK,IAAAuC,OAAP,EAAXA,EAAoBtC,MAAM,GAClEoC,EAAS/B,WAAa3vB,KAAK0vB,cAAyB,QAAZmC,EAAChuB,EAAKnC,cAAM,IAAAmwB,GAAO,QAAPC,EAAXD,EAAaxC,aAAK,IAAAyC,OAAP,EAAXA,EAAoBlG,OAAO,EACxE,MACI8F,EAAS7B,yBAA0B,EACnC6B,EAASxtB,OAAQ,EAGrBlE,KAAKK,SAASqxB,GAA0C,IAAM7xB,GAAMA,KACxE,CAEAsZ,QAAAA,GACI,IAAK,IAAD4Y,EAAAC,EAAAC,EAAAC,EACA,MAAMlsB,EAAMnF,KAAKC,MAAMd,KAAKG,MAAMgK,MAClCnE,EAAI9C,IAAMlD,KAAKZ,MAAM4G,IAAI9C,IAGX,QAAd6uB,EAAI/rB,EAAItE,cAAM,IAAAqwB,GAAVA,EAAY1C,QACPrpB,EAAItE,OAAO2tB,MAAM5tB,WACXuE,EAAItE,OAAO2tB,MAAM5tB,KAGtBuE,EAAItE,OAAO2tB,MAAMC,WAAkCpzB,IAA1B8J,EAAItE,OAAO2tB,MAAMC,MAClB,QAA1BtpB,EAAItE,OAAO2tB,MAAMC,cAEVtpB,EAAItE,OAAO2tB,MAAMC,OAGtBtpB,EAAItE,OAAO2tB,MAAMzD,YAAoC1vB,IAA3B8J,EAAItE,OAAO2tB,MAAMzD,OAClB,QAA3B5lB,EAAItE,OAAO2tB,MAAMzD,eAEV5lB,EAAItE,OAAO2tB,MAAMzD,MAEvB5lB,EAAItE,OAAO2tB,MAAM5tB,IAAOuE,EAAItE,OAAO2tB,MAAMC,MAAStpB,EAAItE,OAAO2tB,MAAMzD,cAC7D5lB,EAAItE,OAAO2tB,YAIFnzB,KAAV,QAAV81B,EAAAhsB,EAAItE,cAAM,IAAAswB,OAAA,EAAVA,EAAYrX,MAA+C,kBAAnB3U,EAAItE,OAAOiZ,MACnD3U,EAAItE,OAAOiZ,IAAMvB,WAAWpT,EAAItE,OAAOiZ,WAEnBze,KAAV,QAAV+1B,EAAAjsB,EAAItE,cAAM,IAAAuwB,OAAA,EAAVA,EAAYvX,MAA+C,kBAAnB1U,EAAItE,OAAOgZ,MACnD1U,EAAItE,OAAOgZ,IAAMtB,WAAWpT,EAAItE,OAAOgZ,WAElBxe,KAAX,QAAVg2B,EAAAlsB,EAAItE,cAAM,IAAAwwB,OAAA,EAAVA,EAAYzR,OAAiD,kBAApBza,EAAItE,OAAO+e,OACpDza,EAAItE,OAAO+e,KAAOrH,WAAWpT,EAAItE,OAAO+e,OAG5CzgB,KAAKZ,MAAM7E,QAAQyL,EACvB,CAAE,MACE/B,QAAQC,MAAM,iBAAiBlE,KAAKG,MAAMgK,OAC9C,CACJ,CAEA,sBAAOgoB,CAAgBhoB,EAAcioB,GACjC,OAAIA,GACOC,EAAAA,EAAAA,iBAAgBxxB,KAAKC,MAAMqJ,GAAOioB,EAAKjsB,MAAM,MAEjDtF,KAAKC,MAAMqJ,EACtB,CAEA,sBAAOmoB,CAAgBnoB,EAAcpP,EAAYq3B,GAC7C,IAAI1tB,EAAY7D,KAAKC,MAAMqJ,GAC3B,YAAajO,IAATwI,EACOyF,GAEXzF,GAAO6tB,EAAAA,EAAAA,iBAAgB7tB,EAAM0tB,EAAKjsB,MAAM,KAAMpL,GACvC8F,KAAKsC,UAAUuB,EAAM,KAAM,GACtC,CAEA8tB,iBAAAA,GAAyC,IAADC,EACpC,MAAMxD,EAA+B,QAA5BwD,EAAGzyB,KAAKG,MAAMkwB,sBAAc,IAAAoC,OAAA,EAAzBA,EAA2BzrB,MAAK8F,GAAMA,EAAG6d,MAAQ3qB,KAAKG,MAAM8uB,MACxE,IAAKA,EACD,OAAO,KAEX,IAAIvqB,EACJ,IACIA,EAAOkqB,EAAwBuD,gBAAgBnyB,KAAKG,MAAMgK,KAAM8kB,EAAImD,KACxE,CAAE,MAAOt1B,GAEL,OADAmH,QAAQC,MAAM,uBAAuB+qB,EAAImD,SAASt1B,MAC3ClB,EAAAA,EAAAA,KAAA,OAAApB,SAAMsB,EAAAA,KAAKM,EAAE,6BAA8B6yB,EAAImD,KAAMt1B,IAChE,CAEA,OAAK4H,GAKD9I,EAAAA,EAAAA,KAACwI,EAAAA,oBAAmB,CAChB5K,MAAOwG,KAAKZ,MAAM5F,MAClB2I,OAAQnC,KAAKZ,MAAM+C,OACnBkH,UAAWrJ,KAAKZ,MAAM5F,MAAME,QAAQoU,KACpCxE,UAAWtJ,KAAKZ,MAAM5F,MAAME,QAAQoU,KACpCpE,WAAY1J,KAAKZ,MAAMsK,WACvBD,aAAczJ,KAAKZ,MAAMqK,aACzBD,OAAQylB,EAAIprB,KACZa,KAAMA,EACN7H,SAAU6H,IACN,IACI,MAAMyF,EAAOykB,EAAwB0D,gBAAgBtyB,KAAKG,MAAMgK,KAAMzF,EAAMuqB,EAAImD,MAChFpyB,KAAKnD,SAASsN,EAClB,CAAE,MAAOrN,GACLmH,QAAQC,MAAM,uBAAuB+qB,EAAImD,SAASt1B,IACtD,GAEJoM,YAAa,GACbnD,SAAU,EACV4D,QAAUzF,IACND,QAAQysB,KAAK,yBAAyBxsB,KAClClE,KAAKG,MAAMqvB,cAAgBtrB,GAC3BlE,KAAKK,SAAS,CAAEmvB,YAAatrB,GACjC,KA3BDtI,EAAAA,EAAAA,KAAA,OAAApB,SAAMsB,EAAAA,KAAKM,EAAE,yBAA0B6yB,EAAImD,OA+B1D,CAEAM,eAAAA,CAAgBzD,EAA0B0D,GAA6D,IAADC,EAClG,IAAI/2B,EACJ,IAAK82B,EACD,OAAO,KAEX,KAAKN,EAAAA,EAAAA,iBAAgBM,EAAmB,QAAVC,EAAE3D,EAAImD,YAAI,IAAAQ,OAAA,EAARA,EAAUzsB,MAAM,MAE5C,OAAO,KAGP8oB,EAAIx1B,QACJoC,EAAQ,CACJ6C,gBAAiBuwB,EAAIx1B,MACrBA,MAAO2B,EAAAA,MAAMy3B,YAAY5D,EAAIx1B,OAAO,KAI5C,MAAMwP,EACFgmB,EAAIhmB,OAA8B,kBAAdgmB,EAAIhmB,MAClBgmB,EAAIhmB,MAAMjJ,KAAKG,MAAMuH,OAASunB,EAAIhmB,MAAMtB,GACxCsnB,EAAIl1B,cACDk1B,EAAIhmB,OAAoBgmB,EAAItE,IAC7B3qB,KAAKZ,MAAMhD,EAAG6yB,EAAIhmB,OAAoBgmB,EAAItE,KAEtD,OACI/uB,EAAAA,EAAAA,KAACysB,EAAAA,IAAG,CACA5qB,SAAUuC,KAAKG,MAAM+D,OAASlE,KAAKG,MAAMqvB,YACzCz0B,MAAOk0B,EAAItE,IACX1hB,MAAOA,EACPpN,MAAOA,EACPi3B,aAAa,QACb14B,KACI60B,EAAI70B,MACAwB,EAAAA,EAAAA,KAACT,EAAAA,KAAI,CACDkN,IAAK4mB,EAAI70B,KACTyB,MAAOrD,EAAOg1B,gBAElBtxB,GAIpB,CAEA62B,UAAAA,CAAWJ,GAA6D,IAADK,EACnE,OACI13B,EAAAA,EAAAA,MAAC0sB,EAAAA,KAAI,CACDnsB,MAAOrD,EAAOg2B,YACdzzB,MAAOiF,KAAKG,MAAM8uB,IAClBpyB,SAAUA,CAACo2B,EAAIhE,KAMX,IALEluB,OAAeC,eAAiBD,OAAOE,cAAcgH,QACnD,GAAGjI,KAAKZ,MAAM8vB,YAAc,gBAC5BD,GAGQ,WAARA,EACA,IAAK,IAADiE,EAAAC,EAAAC,EACA,MAAMptB,EAAMnF,KAAKC,MAAMd,KAAKG,MAAMgK,MAClC,IAAI4kB,GAAU,OACU7yB,KAAV,QAAVg3B,EAAAltB,EAAItE,cAAM,IAAAwxB,OAAA,EAAVA,EAAYvY,MAA+C,kBAAnB3U,EAAItE,OAAOiZ,MACnD3U,EAAItE,OAAOiZ,IAAMvB,WAAWpT,EAAItE,OAAOiZ,KACvCoU,GAAU,QAEU7yB,KAAV,QAAVi3B,EAAAntB,EAAItE,cAAM,IAAAyxB,OAAA,EAAVA,EAAYzY,MAA+C,kBAAnB1U,EAAItE,OAAOgZ,MACnD1U,EAAItE,OAAOgZ,IAAMtB,WAAWpT,EAAItE,OAAOgZ,KACvCqU,GAAU,QAEW7yB,KAAX,QAAVk3B,EAAAptB,EAAItE,cAAM,IAAA0xB,OAAA,EAAVA,EAAY3S,OAAiD,kBAApBza,EAAItE,OAAO+e,OACpDza,EAAItE,OAAO+e,KAAOrH,WAAWpT,EAAItE,OAAO+e,MACxCsO,GAAU,GAEVA,GACA/uB,KAAKK,SAAS,CAAE8J,KAAMtJ,KAAKsC,UAAU6C,EAAK,KAAM,IAExD,CAAE,MACE,CAIRhG,KAAKK,SAAS,CAAE4uB,OAAM,EACxBz0B,SAAA,EAEFoB,EAAAA,EAAAA,KAACysB,EAAAA,IAAG,CACAttB,MAAM,SACN0C,SAAUuC,KAAKG,MAAMqvB,aAAexvB,KAAKG,MAAM+D,MAC/C+E,MAAOjJ,KAAKZ,MAAMhD,EAAE,aAExBR,EAAAA,EAAAA,KAACysB,EAAAA,IAAG,CACAttB,MAAM,SACN0C,SAAUuC,KAAKG,MAAMqvB,YACrBvmB,MAAOjJ,KAAKZ,MAAMhD,EAAE,iBAEvB4D,KAAKZ,MAAM4G,IAAI9C,IAAIwD,WAAW,YAAsC,UAAxB1G,KAAKZ,MAAM4G,IAAI5C,OACxDxH,EAAAA,EAAAA,KAACysB,EAAAA,IAAG,CACA5qB,SAAUuC,KAAKG,MAAMqvB,aAAexvB,KAAKG,MAAM+D,MAC/CnJ,MAAM,QACNkO,MAAOjJ,KAAKZ,MAAMhD,EAAE,WAGF,QADzB42B,EACAhzB,KAAKG,MAAMkwB,sBAAc,IAAA2C,OAAA,EAAzBA,EAA2BxxB,KAAIytB,GAAOjvB,KAAK0yB,gBAAgBzD,EAAK0D,OAG7E,CAEAU,kBAAAA,GACI,IAAKrzB,KAAKG,MAAM2vB,WAAa9vB,KAAKG,MAAM4vB,aAAe/vB,KAAKG,MAAM6vB,YAC9D,OAAO,KAGX,IACInsB,EADApC,EAAK,GAET,IAAK,IAAD6xB,EAAAC,EACA1vB,EAAOhD,KAAKC,MAAMd,KAAKG,MAAMgK,MAE7B,MAAMilB,EACFvrB,EAAKnC,QAAU,SAAUmC,EAAKnC,QAAU,UAAWmC,EAAKnC,OAA0B,QAApB4xB,EAAGzvB,EAAKnC,OAAO2tB,aAAK,IAAAiE,OAAA,EAAjBA,EAAmBhE,KAAO,GACzFC,EACF1rB,EAAKnC,QAAU,SAAUmC,EAAKnC,QAAU,UAAWmC,EAAKnC,OAA0B,QAApB6xB,EAAG1vB,EAAKnC,OAAO2tB,aAAK,IAAAkE,OAAA,EAAjBA,EAAmB3H,MAAQ,GAEtE,IAAD4H,EAAAC,EAAzB,GAAIzzB,KAAKG,MAAM2vB,SACXruB,GAAiB,QAAZ+xB,EAAC3vB,EAAKnC,cAAM,IAAA8xB,GAAO,QAAPC,EAAXD,EAAanE,aAAK,IAAAoE,OAAP,EAAXA,EAAoBhyB,KAAiB,QACpCzB,KAAKG,MAAM4vB,WAClBtuB,EAAc,OAAT2tB,QAAS,IAATA,EAAAA,EAAa,GACXpvB,KAAKG,MAAM6vB,cAClBvuB,EAAe,OAAV8tB,QAAU,IAAVA,EAAAA,EAAc,GAE3B,CAAE,MACEtrB,QAAQC,MAAM,gBAAgBlE,KAAKG,MAAMgK,OAC7C,CAEA,OACIvO,EAAAA,EAAAA,KAAC83B,EAAAA,eAAc,CAEXC,YAAY,IACZjqB,WAAY1J,KAAKZ,MAAMsK,WACvBlQ,MAAOwG,KAAKZ,MAAM5F,MAClBiQ,aAAczJ,KAAKZ,MAAMqK,aACzBtH,OAAQnC,KAAKZ,MAAM+C,OACnB+sB,WAAW,cACXl1B,MAAO,GAAGgG,KAAKZ,MAAMhD,EAAE,iBAAiB4D,KAAKZ,MAAM4G,IAAI9C,MACvDmP,SAAU5Q,EACVmyB,KAAOC,IACH,MAAM9D,EAAa/vB,KAAKG,MAAM4vB,WACxBC,EAAchwB,KAAKG,MAAM6vB,YACzBF,EAAW9vB,KAAKG,MAAM2vB,SACtBgE,EAAUntB,MAAMC,QAAQitB,GAAOA,EAAI,GAAKA,EAC9C7zB,KAAKK,SAAS,CAAEyvB,UAAU,EAAOC,YAAY,EAAOC,aAAa,IAAS,KAClED,EACA/vB,KAAK+zB,aAAalwB,EAAM,UAAWiwB,GAC5B9D,EACPhwB,KAAK+zB,aAAalwB,EAAM,WAAYiwB,GAC7BhE,GACP9vB,KAAK+zB,aAAalwB,EAAM,KAAMiwB,EAClC,GACF,EAENv5B,QAASA,IAAMyF,KAAKK,SAAS,CAAEyvB,UAAU,EAAOC,YAAY,EAAOC,aAAa,KAxB5E,eA2BhB,CAEA+D,YAAAA,CAAalwB,EAA4BiW,EAAc/e,EAAe8E,GAClEgE,EAAKnC,OAASmC,EAAKnC,QAAW,CAAC,EAC/B,MAAMsyB,EAAcnwB,EAAKnC,OAAO2tB,OAAU,CAAC,EAE9B,YAATvV,EACIka,EAAYvyB,IAAgC,kBAAnBuyB,EAAYvyB,GACrCuyB,EAAYvyB,GAAG6tB,KAAOv0B,EAEtBi5B,EAAYvyB,GAAK,CAAE6tB,KAAMv0B,EAAO6wB,MAAO7wB,GAE3B,aAAT+e,EACHka,EAAYvyB,IAAgC,kBAAnBuyB,EAAYvyB,GACrCuyB,EAAYvyB,GAAGmqB,MAAQ7wB,EAEvBi5B,EAAYvyB,GAAK,CAAE6tB,KAAMv0B,EAAO6wB,MAAO7wB,GAG1Ci5B,EAAoBla,GAAQ/e,EAIjC8I,EAAKnC,OAAO2tB,MAAQ2E,EACpBh0B,KAAKnD,SAASgE,KAAKsC,UAAUU,EAAM,KAAM,GAAIhE,EACjD,CAEAo0B,aAAAA,CAAcpwB,EAA2BiW,EAAc/e,GACnD8I,EAAKnC,OAAOoY,GAAQ/e,EACpBiF,KAAKnD,SAASgE,KAAKsC,UAAUU,EAAM,KAAM,GAC7C,CAEAqwB,gBAAAA,CAAiBrwB,EAA2BiW,UACjCjW,EAAKnC,OAAOoY,GACnB9Z,KAAKnD,SAASgE,KAAKsC,UAAUU,EAAM,KAAM,GAC7C,CAEA,mBAAOswB,CAAaC,EAAiBv0B,GACjC,OACIjE,EAAAA,EAAAA,KAAA,OAAKC,MAAOrD,EAAOs1B,YAAYtzB,UAC3BoB,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACHzB,MAAOrD,EAAOu1B,UACdpxB,QAAQ,YACRlD,MAAM,YACN8D,WAAW3B,EAAAA,EAAAA,KAACy4B,EAAAA,IAAO,IACnBl4B,QAAS0D,EAAGrF,SAEX45B,KAIjB,CAEAE,eAAAA,CAAgBF,EAAiBv0B,GAC7B,MAAM,EAAEzD,GAAM4D,KAAKZ,MACnB,OACIxD,EAAAA,EAAAA,KAAC6vB,EAAAA,QAAO,CACJzxB,MAAOoC,EAAE,sBAAuBg4B,GAChCp3B,UAAW,CAAE0uB,OAAQ,CAAEhwB,GAAIlD,EAAOopB,UAAYpnB,UAE9CoB,EAAAA,EAAAA,KAAC4a,EAAAA,IAAG,CACAC,UAAU,MACV/a,GAAIlD,EAAO01B,MACX/xB,QAAS0D,KAIzB,CAEA00B,gBAAAA,GACI,IACI,MAAM1wB,EAAOhD,KAAKC,MAAMd,KAAKG,MAAMgK,MAC7BqqB,EAAwC,CAAC,SAAU,SAAU,UAAW,QAAS,SAAU,SAC3F/2B,GAAW,GACX,EAAErB,EAAC,UAAEq4B,EAAS,IAAEzuB,GAAQhG,KAAKZ,MAC7Bs1B,EAA0B,UAAb1uB,EAAI5C,KACjBuxB,EAAyB,YAAb3uB,EAAI5C,MAAmC,WAAb4C,EAAI5C,MAAqBsxB,EAG/DE,EAAyB,IAAIjG,GAInC,IAAIkG,EAEJ,GALAJ,EAAU3xB,SAAQ4pB,IAASkI,EAAa7vB,SAAS2nB,IAASkI,EAAalyB,KAAKgqB,KAC5EkI,EAAa9tB,OAITjD,EAAKnC,OAAOtH,OACZy6B,EACkB,aAAdhxB,EAAKT,MAAqC,YAAdS,EAAKT,KAC3B,aAAaS,EAAKnC,OAAOoY,QAAQjW,EAAKnC,OAAOtH,OAC7CyJ,EAAKnC,OAAOtH,MACjBy6B,EAASnuB,WAAW,OAASmuB,EAASnuB,WAAW,OAASmuB,EAASnuB,WAAW,UAAU,CACzF,MAAMouB,EAAQ9uB,EAAI9C,IAAIiD,MAAM,KAExB0uB,EADa,WAAbC,EAAM,GACK,WAAWA,EAAM,KAAKD,EAASnuB,WAAW,KAAO,GAAK,MAAMmuB,IAE5D,WAAWC,EAAM,KAAKD,EAASnuB,WAAW,KAAO,GAAK,MAAMmuB,GAE/E,CAEJ,OACIv5B,EAAAA,EAAAA,MAACkb,EAAAA,IAAG,CACA3a,MAAOrD,EAAOi1B,iBACdhB,UAAW3vB,IACO,UAAVA,EAAE6tB,MACF7tB,EAAEinB,iBACFjnB,EAAEmtB,kBACFjqB,KAAKmZ,WACT,EACF3e,SAAA,EAEFc,EAAAA,EAAAA,MAACkb,EAAAA,IAAG,CACA3a,MAAO,IACArD,EAAOm1B,cACV7vB,MAA4B,OAArBkC,KAAKZ,MAAMtB,MAAiB,YAAS5B,EAC5CxD,SAA+B,OAArBsH,KAAKZ,MAAMtB,MAAiB,YAAS5B,EAC/CywB,IAA0B,OAArB3sB,KAAKZ,MAAMtB,MAAiB,GAAK,EACtCjF,QAA8B,OAArBmH,KAAKZ,MAAMtB,MAAiB,YAAS5B,EAC9C64B,cAAoC,OAArB/0B,KAAKZ,MAAMtB,MAAiB,cAAW5B,GACxD1B,SAAA,CAE2B,qBAArBqJ,EAAKnC,OAAOoY,MAChBle,EAAAA,EAAAA,KAACY,EAAAA,UAAS,CACNG,QAAQ,WACRc,SAAUA,EACVwL,MAAO7M,EAAE,QACTP,MAAO,IAAKrD,EAAOw1B,UAAW9V,UAAW,GACzCje,WAAS,EACTc,MAAOK,EAAAA,MAAMsmB,qBAAqB7d,EAAM/H,EAAAA,KAAKC,cAAe,CAAC,GAAG,GAAO,GACvEc,SAAUitB,GAAM9pB,KAAKi0B,cAAcpwB,EAAM,OAAQimB,EAAG/sB,OAAOhC,SAG/D6zB,EAAwBuF,aAAa,QAAQ,IAAMn0B,KAAKi0B,cAAcpwB,EAAM,OAAQ,MAEvF6wB,EAC+B,qBAArB7wB,EAAKnC,OAAO0B,MACf9H,EAAAA,EAAAA,MAACkb,EAAAA,IAAG,CACAC,UAAU,MACV/a,GAAIlD,EAAO8zB,KAAK9xB,SAAA,EAEhBc,EAAAA,EAAAA,MAAC+f,EAAAA,YAAW,CACRxf,MAAOrD,EAAOs1B,YACd7zB,WAAS,EAAAO,SAAA,EAEToB,EAAAA,EAAAA,KAAC0f,EAAAA,WAAU,CAACzf,MAAO,CAAEwyB,UAAW,eAAgB7zB,SAAE4B,EAAE,iBACpDR,EAAAA,EAAAA,KAAC2f,EAAAA,OAAM,CACH5e,QAAQ,WACRc,SAAUA,EACV1C,MAAO8I,EAAKnC,OAAO0B,KACnBvG,SAAUitB,GAAM9pB,KAAKi0B,cAAcpwB,EAAM,OAAQimB,EAAG/sB,OAAOhC,OAAOP,SAEjEg6B,EAAehzB,KAAIsoB,IAChBxuB,EAAAA,EAAAA,MAACkgB,EAAAA,SAAQ,CAELzgB,MAAO+uB,EAAGtvB,SAAA,CAET4B,EAAE0tB,IACHxuB,EAAAA,EAAAA,MAAA,QAAMO,MAAOrD,EAAOk2B,YAAYl0B,SAAA,CAAC,IAAEsvB,EAAG,SAJjCA,UASpB9pB,KAAKs0B,gBAAgB,QAAQ,IAAMt0B,KAAKk0B,iBAAiBrwB,EAAM,aAGpE+qB,EAAwBuF,aAAa,QAAQ,IACzCn0B,KAAKi0B,cAAcpwB,EAAM,OAAQ,YAGzC,MACJvI,EAAAA,EAAAA,MAACkb,EAAAA,IAAG,CACAC,UAAU,MACV/a,GAAI,IAAKlD,EAAO8zB,KAAM0I,SAA+B,OAArBh1B,KAAKZ,MAAMtB,MAAiB,YAAS5B,GAAY1B,SAAA,CAEhFk6B,EAC+B,qBAArB7wB,EAAKnC,OAAO4tB,MACfh0B,EAAAA,EAAAA,MAACkb,EAAAA,IAAG,CACAC,UAAU,MACV/a,GAAIlD,EAAO8zB,KAAK9xB,SAAA,EAEhBoB,EAAAA,EAAAA,KAAC+M,EAAAA,iBAAgB,CACb9M,MAAOrD,EAAOs1B,YACdjlB,SACIjN,EAAAA,EAAAA,KAACkN,EAAAA,SAAQ,CACLrL,SAAUA,EACVuL,QAASnF,EAAKnC,OAAO4tB,KAErBnzB,QAAS2tB,GAAM9pB,KAAKi0B,cAAcpwB,EAAM,OAAQimB,EAAG/sB,OAAOiM,WAGlEC,MAAO7M,EAAE,cAEZ4D,KAAKs0B,gBAAgB,QAAQ,IAAMt0B,KAAKk0B,iBAAiBrwB,EAAM,aAGpE+qB,EAAwBuF,aAAa,QAAQ,IACzCn0B,KAAKi0B,cAAcpwB,EAAM,QAAQ,KAGzC,KACH6wB,EACgC,qBAAtB7wB,EAAKnC,OAAOkqB,OACftwB,EAAAA,EAAAA,MAACkb,EAAAA,IAAG,CACAC,UAAU,MACV/a,GAAIlD,EAAO8zB,KAAK9xB,SAAA,EAEhBoB,EAAAA,EAAAA,KAAC+M,EAAAA,iBAAgB,CACb9M,MAAOrD,EAAOs1B,YACdjlB,SACIjN,EAAAA,EAAAA,KAACkN,EAAAA,SAAQ,CACLrL,SAAUA,EACVuL,QAASnF,EAAKnC,OAAOkqB,MAErBzvB,QAAS2tB,GAAM9pB,KAAKi0B,cAAcpwB,EAAM,QAASimB,EAAG/sB,OAAOiM,WAGnEC,MAAO7M,EAAE,eAEZ4D,KAAKs0B,gBAAgB,SAAS,IAAMt0B,KAAKk0B,iBAAiBrwB,EAAM,cAGrE+qB,EAAwBuF,aAAa,SAAS,IAC1Cn0B,KAAKi0B,cAAcpwB,EAAM,SAAS,KAG1C,QAEP8wB,EAC+B,qBAArB9wB,EAAKnC,OAAOgrB,MACfpxB,EAAAA,EAAAA,MAACkb,EAAAA,IAAG,CACAC,UAAU,MACV/a,GAAIlD,EAAO8zB,KAAK9xB,SAAA,EAEhBoB,EAAAA,EAAAA,KAACgvB,EAAAA,aAAY,CACT/uB,MAAOrD,EAAOs1B,YACd7zB,WAAS,EACTwD,SAAUA,EACV1C,MAAO8I,EAAKnC,OAAOgrB,KACnB7vB,SAAUA,CAACo4B,EAAGn4B,IAAMkD,KAAKi0B,cAAcpwB,EAAM,OAAQ/G,GACrD8iB,QAAS6U,EACTtJ,YAAarJ,IACTlmB,EAAAA,EAAAA,KAACY,EAAAA,UAAS,CACNG,QAAQ,cACJmlB,EACJ7Y,MAAO7M,EAAE,YAIpB4D,KAAKs0B,gBAAgB,QAAQ,IAAMt0B,KAAKk0B,iBAAiBrwB,EAAM,aAGpE+qB,EAAwBuF,aAAa,QAAQ,IAAMn0B,KAAKi0B,cAAcpwB,EAAM,OAAQ,MAExF,KAC0B,qBAAtBA,EAAKnC,OAAOjI,OAChB6B,EAAAA,EAAAA,MAACkb,EAAAA,IAAG,CACAC,UAAU,MACV/a,GAAIlD,EAAO8zB,KAAK9xB,SAAA,EAEhBoB,EAAAA,EAAAA,KAACY,EAAAA,UAAS,CACNG,QAAQ,WACRc,SAAUA,EACV5B,MAAO,IAAKrD,EAAOs1B,eAAgBt1B,EAAOiB,OAC1CwP,MAAO7M,EAAE,SACTgH,KAAK,QACLrI,MAAO8I,EAAKnC,OAAOjI,MACnBoD,SAAUitB,GAAM9pB,KAAKi0B,cAAcpwB,EAAM,QAASimB,EAAG/sB,OAAOhC,SAE/DiF,KAAKs0B,gBAAgB,SAAS,IAAMt0B,KAAKk0B,iBAAiBrwB,EAAM,cAGrE+qB,EAAwBuF,aAAa,SAAS,IAAMn0B,KAAKi0B,cAAcpwB,EAAM,QAAS,OAE1FvI,EAAAA,EAAAA,MAACkb,EAAAA,IAAG,CACAC,UAAU,MACV/a,GAAI,IACGlD,EAAO8zB,KACV0I,SAA+B,OAArBh1B,KAAKZ,MAAMtB,MAAiB,YAAS5B,EAC/CywB,IAA0B,OAArB3sB,KAAKZ,MAAMtB,MAAiB,YAAS5B,GAC5C1B,SAAA,CAEoB,WAArBqJ,EAAKnC,OAAO0B,KACkB,qBAApBS,EAAKnC,OAAOiZ,KACfrf,EAAAA,EAAAA,MAACkb,EAAAA,IAAG,CACAC,UAAU,MACV/a,GAAIlD,EAAO8zB,KAAK9xB,SAAA,EAEhBoB,EAAAA,EAAAA,KAACY,EAAAA,UAAS,CACNG,QAAQ,WACRc,SAAUA,EACVgL,UAAW,IAAKjQ,EAAOs1B,eAAgBt1B,EAAOiB,OAC9CwP,MAAO7M,EAAE,OACTrB,MAAO8I,EAAKnC,OAAOiZ,IACnB9d,SAAUitB,GAAM9pB,KAAKi0B,cAAcpwB,EAAM,MAAOimB,EAAG/sB,OAAOhC,SAE7DiF,KAAKs0B,gBAAgB,OAAO,IAAMt0B,KAAKk0B,iBAAiBrwB,EAAM,aAGnEjI,EAAAA,EAAAA,KAAC4a,EAAAA,IAAG,CACAC,UAAU,MACV/a,GAAIlD,EAAO8zB,KAAK9xB,SAEfo0B,EAAwBuF,aAAa,OAAO,IACzCn0B,KAAKi0B,cAAcpwB,EAAM,MAAO,OAI5C,KACkB,WAArBA,EAAKnC,OAAO0B,KACkB,qBAApBS,EAAKnC,OAAOgZ,KACfpf,EAAAA,EAAAA,MAACkb,EAAAA,IAAG,CACAC,UAAU,MACV/a,GAAIlD,EAAO8zB,KAAK9xB,SAAA,EAEhBoB,EAAAA,EAAAA,KAACY,EAAAA,UAAS,CACNG,QAAQ,WACRc,SAAUA,EACVgL,UAAW,IAAKjQ,EAAOs1B,eAAgBt1B,EAAOiB,OAC9CwP,MAAO7M,EAAE,OACTrB,MAAO8I,EAAKnC,OAAOgZ,IACnB7d,SAAUitB,GAAM9pB,KAAKi0B,cAAcpwB,EAAM,MAAOimB,EAAG/sB,OAAOhC,SAE7DiF,KAAKs0B,gBAAgB,OAAO,IAAMt0B,KAAKk0B,iBAAiBrwB,EAAM,aAGnEjI,EAAAA,EAAAA,KAAC4a,EAAAA,IAAG,CACAC,UAAU,MACV/a,GAAIlD,EAAO8zB,KAAK9xB,SAEfo0B,EAAwBuF,aAAa,OAAO,IACzCn0B,KAAKi0B,cAAcpwB,EAAM,MAAO,SAI5C,KACkB,WAArBA,EAAKnC,OAAO0B,KACmB,qBAArBS,EAAKnC,OAAO+e,MACfnlB,EAAAA,EAAAA,MAACkb,EAAAA,IAAG,CACAC,UAAU,MACV/a,GAAIlD,EAAO8zB,KAAK9xB,SAAA,EAEhBoB,EAAAA,EAAAA,KAACY,EAAAA,UAAS,CACNG,QAAQ,WACRc,SAAUA,EACVgL,UAAW,IAAKjQ,EAAOs1B,eAAgBt1B,EAAOiB,OAC9CwP,MAAO7M,EAAE,QACTrB,MAAO8I,EAAKnC,OAAO+e,KACnB5jB,SAAUitB,GAAM9pB,KAAKi0B,cAAcpwB,EAAM,OAAQimB,EAAG/sB,OAAOhC,SAE9DiF,KAAKs0B,gBAAgB,QAAQ,IAAMt0B,KAAKk0B,iBAAiBrwB,EAAM,cAGpEjI,EAAAA,EAAAA,KAAC4a,EAAAA,IAAG,CACAC,UAAU,MACV/a,GAAIlD,EAAO8zB,KAAK9xB,SAEfo0B,EAAwBuF,aAAa,QAAQ,IAC1Cn0B,KAAKi0B,cAAcpwB,EAAM,OAAQ,OAI7C,QAEc,WAArBA,EAAKnC,OAAO0B,KACmB,qBAArBS,EAAKnC,OAAOmP,MACfvV,EAAAA,EAAAA,MAACkb,EAAAA,IAAG,CACAC,UAAU,MACV/a,GAAIlD,EAAO8zB,KAAK9xB,SAAA,EAEhBoB,EAAAA,EAAAA,KAACY,EAAAA,UAAS,CACNG,QAAQ,WACRc,SAAUA,EACVgL,UAAW,IAAKjQ,EAAOs1B,eAAgBt1B,EAAOiB,OAC9CwP,MAAO7M,EAAE,QACTrB,MAAO8I,EAAKnC,OAAOmP,KACnBhU,SAAUitB,GAAM9pB,KAAKi0B,cAAcpwB,EAAM,OAAQimB,EAAG/sB,OAAOhC,SAE9DiF,KAAKs0B,gBAAgB,QAAQ,IAAMt0B,KAAKk0B,iBAAiBrwB,EAAM,cAGpEjI,EAAAA,EAAAA,KAAA,OAAKC,MAAOrD,EAAOo1B,SAASpzB,SACvBo0B,EAAwBuF,aAAa,QAAQ,IAC1Cn0B,KAAKi0B,cAAcpwB,EAAM,OAAQ,QAI7C,QAEqB,qBAArBA,EAAKnC,OAAOtH,MAChBkB,EAAAA,EAAAA,MAACkb,EAAAA,IAAG,CACAC,UAAU,MACV/a,GAAIlD,EAAO8zB,KACXzwB,MAAO,CAAEyT,SAAU,EAAG5W,SAAU,KAAM8B,SAAA,EAEtCoB,EAAAA,EAAAA,KAACs5B,EAAAA,YAAW,CACRz3B,SAAUA,EACV03B,QAAS,MACT/6B,KAAMy6B,EACNO,eAAgBA,IAAMp1B,KAAKi0B,cAAcpwB,EAAM,OAAQ,IACvDhH,SAAUw4B,GAAUr1B,KAAKi0B,cAAcpwB,EAAM,OAAQwxB,KAExDr1B,KAAKs0B,gBAAgB,QAAQ,IAAMt0B,KAAKk0B,iBAAiBrwB,EAAM,cAGpEjI,EAAAA,EAAAA,KAAC4a,EAAAA,IAAG,CACAC,UAAU,MACV/a,GAAIlD,EAAO8zB,KAAK9xB,SAEfo0B,EAAwBuF,aAAa,QAAQ,IAAMn0B,KAAKi0B,cAAcpwB,EAAM,OAAQ,UAKzG,CAAE,MACE,OAAOjI,EAAAA,EAAAA,KAAA,OAAApB,SAAMwF,KAAKZ,MAAMhD,EAAE,uBAC9B,CACJ,CAEAk5B,eAAAA,GACI,IAAK,IAADC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACA,MAAMj0B,EAAOhD,KAAKC,MAAMd,KAAKG,MAAMgK,MAC7B4tB,OAA2C77B,KAAlB,QAAXq5B,EAAA1xB,EAAKnC,cAAM,IAAA6zB,GAAO,QAAPC,EAAXD,EAAalG,aAAK,IAAAmG,OAAP,EAAXA,EAAoBlG,YAAoDpzB,KAAnB,QAAXu5B,EAAA5xB,EAAKnC,cAAM,IAAA+zB,GAAO,QAAPC,EAAXD,EAAapG,aAAK,IAAAqG,OAAP,EAAXA,EAAoB9J,OAElF,OACItwB,EAAAA,EAAAA,MAAC4wB,EAAAA,MAAK,CACFve,WAAS,EACTwe,UAAU,SACVtwB,MAAOrD,EAAO0f,UAAU1d,SAAA,EAExBoB,EAAAA,EAAAA,KAACswB,EAAAA,MAAK,CAAA1xB,UACFoB,EAAAA,EAAAA,KAAC+M,EAAAA,iBAAgB,CACbE,SACIjN,EAAAA,EAAAA,KAACkN,EAAAA,SAAQ,CACLE,QAA2C,kBAAhB,QAAlB2sB,EAAO9xB,EAAKnC,cAAM,IAAAi0B,GAAO,QAAPC,EAAXD,EAAatG,aAAK,IAAAuG,OAAP,EAAXA,EAAoBn0B,IACpC5E,SAAUA,KAAO,IAADm7B,EAAAC,EACoCC,EAAAC,EAAAC,EAEzCC,EAAAC,EAF+B,kBAAhB,QAAlBN,EAAOn0B,EAAKnC,cAAM,IAAAs2B,GAAO,QAAPC,EAAXD,EAAa3I,aAAK,IAAA4I,OAAP,EAAXA,EAAoBx2B,IAC3BzB,KAAK+zB,aAAalwB,EAAM,MAAiB,QAAXq0B,EAAAr0B,EAAKnC,cAAM,IAAAw2B,GAAO,QAAPC,EAAXD,EAAa7I,aAAK,IAAA8I,GAAI,QAAJC,EAAlBD,EAAoB12B,UAAE,IAAA22B,OAAX,EAAXA,EAAwB9I,OAAQ,IAE9DtvB,KAAK+zB,aAAalwB,EAAM,WAAsB,QAAXw0B,EAAAx0B,EAAKnC,cAAM,IAAA22B,GAAO,QAAPC,EAAXD,EAAahJ,aAAK,IAAAiJ,OAAP,EAAXA,EAAoB72B,KAAM,GACjE,IAIZwH,MAAOjJ,KAAKZ,MAAMhD,EAAE,wCAGO,kBAAhB,QAAlBy5B,EAAOhyB,EAAKnC,cAAM,IAAAm0B,GAAO,QAAPC,EAAXD,EAAaxG,aAAK,IAAAyG,OAAP,EAAXA,EAAoBr0B,KACxBnG,EAAAA,EAAAA,MAAC4wB,EAAAA,MAAK,CAAA1xB,SAAA,EACFoB,EAAAA,EAAAA,KAACY,EAAAA,UAAS,CACNG,QAAQ,WACRsM,MAAOjJ,KAAKZ,MAAMhD,EAAE,eACpBrB,OAAkB,QAAXg7B,EAAAlyB,EAAKnC,cAAM,IAAAq0B,GAAO,QAAPC,EAAXD,EAAa1G,aAAK,IAAA2G,OAAP,EAAXA,EAAoBv0B,KAAM,GACjC5F,MAAOrD,EAAO20B,YACdnwB,UAAW,CACPC,MAAO,CACHC,aAAyB,QAAX+4B,EAAApyB,EAAKnC,cAAM,IAAAu0B,GAAO,QAAPC,EAAXD,EAAa5G,aAAK,IAAA6G,GAAlBA,EAAoBz0B,IAC9B7F,EAAAA,EAAAA,KAACuB,EAAAA,eAAc,CAAC/D,SAAS,MAAKoB,UAC1BoB,EAAAA,EAAAA,KAACI,EAAAA,WAAU,CACPC,KAAK,QACLE,QAASA,IAAM6D,KAAK+zB,aAAalwB,EAAM,KAAM,IAAIrJ,UAEjDoB,EAAAA,EAAAA,KAACqd,EAAAA,MAAS,QAGlB,OAGZpc,SAAUC,GAAKkD,KAAK+zB,aAAalwB,EAAM,KAAM/G,EAAEC,OAAOhC,OACtD8yB,OAAO,YAEXjyB,EAAAA,EAAAA,KAACiqB,EAAAA,IAAG,CACAhqB,MAAOrD,EAAO40B,OACdnxB,KAAK,QACLE,QAASA,IAAM6D,KAAKK,SAAS,CAAEyvB,UAAU,EAAMC,YAAY,EAAOC,aAAa,IAASx1B,SAC3F,WAIL,KAE+B,kBAAhB,QAAlB27B,EAAOtyB,EAAKnC,cAAM,IAAAy0B,GAAO,QAAPC,EAAXD,EAAa9G,aAAK,IAAA+G,OAAP,EAAXA,EAAoB30B,KACxBnG,EAAAA,EAAAA,MAAC4wB,EAAAA,MAAK,CAAA1xB,SAAA,EACFoB,EAAAA,EAAAA,KAACY,EAAAA,UAAS,CACNG,QAAQ,WACRsM,MAAOjJ,KAAKZ,MAAMhD,EAAE,oBACpBrB,OAAkB,QAAXs7B,EAAAxyB,EAAKnC,cAAM,IAAA20B,GAAO,QAAPC,EAAXD,EAAahH,aAAK,IAAAiH,GAAI,QAAJC,EAAlBD,EAAoB70B,UAAE,IAAA80B,OAAX,EAAXA,EAAwBjH,OAAQ,GACvCzzB,MAAOrD,EAAO20B,YACdnwB,UAAW,CACPC,MAAO,CACHC,aAAyB,QAAXs5B,EAAA3yB,EAAKnC,cAAM,IAAA80B,GAAO,QAAPC,EAAXD,EAAanH,aAAK,IAAAoH,GAAI,QAAJC,EAAlBD,EAAoBh1B,UAAE,IAAAi1B,GAAtBA,EAAwBpH,MAClC1zB,EAAAA,EAAAA,KAACuB,EAAAA,eAAc,CAAC/D,SAAS,MAAKoB,UAC1BoB,EAAAA,EAAAA,KAACI,EAAAA,WAAU,CACPC,KAAK,QACLE,QAASA,IAAM6D,KAAK+zB,aAAalwB,EAAM,UAAW,IAAIrJ,UAEtDoB,EAAAA,EAAAA,KAACqd,EAAAA,MAAS,QAGlB,OAGZpc,SAAUC,GAAKkD,KAAK+zB,aAAalwB,EAAM,UAAW/G,EAAEC,OAAOhC,OAC3D8yB,OAAO,YAEXjyB,EAAAA,EAAAA,KAACiqB,EAAAA,IAAG,CACAhqB,MAAOrD,EAAO40B,OACdnxB,KAAK,QACLE,QAASA,IAAM6D,KAAKK,SAAS,CAAEyvB,UAAU,EAAOC,YAAY,EAAMC,aAAa,IAASx1B,SAC3F,WAIL,KAE+B,kBAAhB,QAAlBm8B,EAAO9yB,EAAKnC,cAAM,IAAAi1B,GAAO,QAAPC,EAAXD,EAAatH,aAAK,IAAAuH,OAAP,EAAXA,EAAoBn1B,KACxBnG,EAAAA,EAAAA,MAAC4wB,EAAAA,MAAK,CAAA1xB,SAAA,EACFoB,EAAAA,EAAAA,KAACY,EAAAA,UAAS,CACNG,QAAQ,WACRsM,MAAOjJ,KAAKZ,MAAMhD,EAAE,qBACpBrB,OAAkB,QAAX87B,EAAAhzB,EAAKnC,cAAM,IAAAm1B,GAAO,QAAPC,EAAXD,EAAaxH,aAAK,IAAAyH,GAAI,QAAJC,EAAlBD,EAAoBr1B,UAAE,IAAAs1B,OAAX,EAAXA,EAAwBnL,QAAS,GACxC/vB,MAAOrD,EAAO20B,YACdnwB,UAAW,CACPC,MAAO,CACHC,aAAyB,QAAX85B,EAAAnzB,EAAKnC,cAAM,IAAAs1B,GAAO,QAAPC,EAAXD,EAAa3H,aAAK,IAAA4H,GAAI,QAAJC,EAAlBD,EAAoBx1B,UAAE,IAAAy1B,GAAtBA,EAAwBtL,OAClChwB,EAAAA,EAAAA,KAACuB,EAAAA,eAAc,CAAC/D,SAAS,MAAKoB,UAC1BoB,EAAAA,EAAAA,KAACI,EAAAA,WAAU,CACPC,KAAK,QACLE,QAASA,IAAM6D,KAAK+zB,aAAalwB,EAAM,WAAY,IAAIrJ,UAEvDoB,EAAAA,EAAAA,KAACqd,EAAAA,MAAS,QAGlB,OAGZpc,SAAUC,GAAKkD,KAAK+zB,aAAalwB,EAAM,WAAY/G,EAAEC,OAAOhC,OAC5D8yB,OAAO,YAEXjyB,EAAAA,EAAAA,KAACiqB,EAAAA,IAAG,CACAhqB,MAAOrD,EAAO40B,OACdnxB,KAAK,QACLE,QAASA,IAAM6D,KAAKK,SAAS,CAAEyvB,UAAU,EAAOC,YAAY,EAAOC,aAAa,IAAQx1B,SAC3F,WAIL,MACJoB,EAAAA,EAAAA,KAACswB,EAAAA,MAAK,CAACrwB,MAAOrD,EAAO0f,UAAU1d,UAC3BoB,EAAAA,EAAAA,KAAC+M,EAAAA,iBAAgB,CACbE,SACIjN,EAAAA,EAAAA,KAACkN,EAAAA,SAAQ,CACLE,aACiC9M,KAAlB,QAAXi7B,EAAAtzB,EAAKnC,cAAM,IAAAy1B,GAAO,QAAPC,EAAXD,EAAa9H,aAAK,IAAA+H,OAAP,EAAXA,EAAoB9H,YACUpzB,KAAnB,QAAXm7B,EAAAxzB,EAAKnC,cAAM,IAAA21B,GAAO,QAAPC,EAAXD,EAAahI,aAAK,IAAAiI,OAAP,EAAXA,EAAoB1L,OAExB/uB,SAAUA,KACFk7B,UACOl0B,EAAKnC,OAAO2tB,MAAMC,YAClBzrB,EAAKnC,OAAO2tB,MAAMzD,QAEzB/nB,EAAKnC,OAASmC,EAAKnC,QAAU,CAAC,EAC9BmC,EAAKnC,OAAO2tB,MAAQxrB,EAAKnC,OAAO2tB,OAAS,CAAC,EAC1CxrB,EAAKnC,OAAO2tB,MAAMC,KAAO,MACzBzrB,EAAKnC,OAAO2tB,MAAMzD,MAAQ,OAE9B5rB,KAAKnD,SAASgE,KAAKsC,UAAUU,EAAM,KAAM,GAAG,IAIxDoF,MAAOjJ,KAAKZ,MAAMhD,EAAE,6BAG3B27B,GACGn8B,EAAAA,EAAAA,KAACswB,EAAAA,MAAK,CAAA1xB,UACFoB,EAAAA,EAAAA,KAACY,EAAAA,UAAS,CACNG,QAAQ,WACRsM,MAAOjJ,KAAKZ,MAAMhD,EAAE,kBACpBrB,OAAkB,QAAXw8B,EAAA1zB,EAAKnC,cAAM,IAAA61B,GAAO,QAAPC,EAAXD,EAAalI,aAAK,IAAAmI,OAAP,EAAXA,EAAoBlI,OAAQ,MACnCzzB,MAAOrD,EAAO+0B,SACdrpB,QAASlE,KAAKG,MAAMsvB,UACpBzyB,UAAW,CACPC,MAAO,CACHC,aAAyB,QAAXu6B,EAAA5zB,EAAKnC,cAAM,IAAA+1B,GAAO,QAAPC,EAAXD,EAAapI,aAAK,IAAAqI,GAAlBA,EAAoBpI,MAC9B1zB,EAAAA,EAAAA,KAACuB,EAAAA,eAAc,CAAC/D,SAAS,MAAKoB,UAC1BoB,EAAAA,EAAAA,KAACI,EAAAA,WAAU,CACPC,KAAK,QACLE,QAASA,IAAM6D,KAAK+zB,aAAalwB,EAAM,OAAQ,IAAIrJ,UAEnDoB,EAAAA,EAAAA,KAACqd,EAAAA,MAAS,QAGlB,KACJsf,gBACI38B,EAAAA,EAAAA,KAACuB,EAAAA,eAAc,CAAC/D,SAAS,QAAOoB,UAC5BoB,EAAAA,EAAAA,KAAC48B,EAAAA,OAAM,CAAC38B,MAAOrD,EAAOg1B,eAKtC3wB,SAAUC,GAAKkD,KAAK+zB,aAAalwB,EAAM,OAAQ/G,EAAEC,OAAOhC,OACxDyf,WACIxa,KAAKG,MAAMsvB,WAAa,GAAGzvB,KAAKZ,MAAMhD,EAAE,qCAE5CyxB,OAAO,aAGf,KACHkK,GACGn8B,EAAAA,EAAAA,KAACswB,EAAAA,MAAK,CAAA1xB,UACFoB,EAAAA,EAAAA,KAACY,EAAAA,UAAS,CACNG,QAAQ,WACRsM,MAAOjJ,KAAKZ,MAAMhD,EAAE,mBACpB8H,QAASlE,KAAKG,MAAMwvB,WACpB50B,OAAkB,QAAX48B,EAAA9zB,EAAKnC,cAAM,IAAAi2B,GAAO,QAAPC,EAAXD,EAAatI,aAAK,IAAAuI,OAAP,EAAXA,EAAoBhM,QAAS,MACpCpR,WACIxa,KAAKG,MAAMwvB,YAAc,GAAG3vB,KAAKZ,MAAMhD,EAAE,uCAE7CP,MAAOrD,EAAO+0B,SACdvwB,UAAW,CACPC,MAAO,CACHC,aAAyB,QAAX26B,EAAAh0B,EAAKnC,cAAM,IAAAm2B,GAAO,QAAPC,EAAXD,EAAaxI,aAAK,IAAAyI,GAAlBA,EAAoBlM,OAC9BhwB,EAAAA,EAAAA,KAACuB,EAAAA,eAAc,CAAC/D,SAAS,MAAKoB,UAC1BoB,EAAAA,EAAAA,KAACI,EAAAA,WAAU,CACPC,KAAK,QACLE,QAASA,IAAM6D,KAAK+zB,aAAalwB,EAAM,QAAS,IAAIrJ,UAEpDoB,EAAAA,EAAAA,KAACqd,EAAAA,MAAS,QAGlB,KACJsf,gBACI38B,EAAAA,EAAAA,KAACuB,EAAAA,eAAc,CAAC/D,SAAS,QAAOoB,UAC5BoB,EAAAA,EAAAA,KAAC48B,EAAAA,OAAM,CAAC38B,MAAOrD,EAAOg1B,eAKtC3wB,SAAUC,GAAKkD,KAAK+zB,aAAalwB,EAAM,QAAS/G,EAAEC,OAAOhC,OACzD8yB,OAAO,aAGf,OAGhB,CAAE,MACE,OAAOjyB,EAAAA,EAAAA,KAAA,OAAApB,SAAMwF,KAAKZ,MAAMhD,EAAE,uBAC9B,CACJ,CAEAq8B,MAAAA,CAAO37B,GACH1B,EAAAA,MAAMs9B,gBAAgB14B,KAAKG,MAAMgK,KAAMrN,GACvCiE,OAAOoD,MAAMnE,KAAKZ,MAAMhD,EAAE,aAC9B,CAEAu8B,OAAAA,CAAQC,EAAe3I,GACnB,MAAM4I,EAASh4B,KAAKC,MAAMD,KAAKsC,UAAUnD,KAAKZ,MAAM2C,QAAQ62B,YACrDC,EAAOvkB,YACPukB,EAAO1nB,UACP0nB,EAAOC,KACdD,EAAO31B,IAAM+sB,EACbjwB,KAAKZ,MAAM2C,QAAQ82B,EAAO31B,KAAO21B,EACjC74B,KAAKZ,MAAM25B,YAAYF,EAC3B,CAEAG,gBAAAA,GACI,OAAKh5B,KAAKG,MAAMyvB,gBAIZt0B,EAAAA,EAAAA,MAACC,EAAAA,OAAM,CACHC,MAAM,EACN7C,SAAS,KACTsB,WAAS,EACTM,QAASA,IAAMyF,KAAKK,SAAS,CAAEuvB,eAAgB,KAAMp1B,SAAA,EAErDoB,EAAAA,EAAAA,KAACD,EAAAA,YAAW,CAAAnB,SAAEwF,KAAKZ,MAAMhD,EAAE,mCAC3BR,EAAAA,EAAAA,KAACU,EAAAA,cAAa,CAAA9B,UACVoB,EAAAA,EAAAA,KAACY,EAAAA,UAAS,CACNG,QAAQ,WACRD,WAAS,EACTzC,WAAS,EACTgP,MAAOjJ,KAAKZ,MAAMhD,EAAE,iBACpBrB,MAAOiF,KAAKG,MAAM8vB,MAClBxD,UAAW3vB,IACO,UAAVA,EAAE6tB,KAAoB3qB,KAAKZ,MAAM2C,QAAQ/B,KAAKG,MAAM8vB,SACpDjwB,KAAKK,SAAS,CAAEuvB,eAAgB,KAChC5vB,KAAK24B,QAAQ34B,KAAKG,MAAMyvB,eAAgB5vB,KAAKG,MAAM8vB,OACvD,EAEJpzB,SAAUC,GAAKkD,KAAKK,SAAS,CAAE4vB,MAAOnzB,EAAEC,OAAOhC,aAGvDO,EAAAA,EAAAA,MAAC+B,EAAAA,cAAa,CAAA7C,SAAA,EACVoB,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACHG,WAAYuC,KAAKZ,MAAM2C,QAAQ/B,KAAKG,MAAM8vB,OAC1C9zB,QAASA,KACL6D,KAAKK,SAAS,CAAEuvB,eAAgB,KAChC5vB,KAAK24B,QAAQ34B,KAAKG,MAAMyvB,eAAgB5vB,KAAKG,MAAM8vB,MAAM,EAE7Dx2B,MAAM,UACN8D,WAAW3B,EAAAA,EAAAA,KAACq9B,EAAAA,SAAQ,IAAIz+B,SAEvBwF,KAAKZ,MAAMhD,EAAE,YAElBR,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACH7D,MAAM,OACN0C,QAASA,IAAM6D,KAAKK,SAAS,CAAEuvB,eAAgB,KAC/CryB,WAAW3B,EAAAA,EAAAA,KAACqd,EAAAA,MAAS,IAAIze,SAExBwF,KAAKZ,MAAMhD,EAAE,kBA3CnB,IAgDf,CAEA88B,iBAAAA,CAAkBlK,GACd,OACI1zB,EAAAA,EAAAA,MAAA,OACIO,MAAO,IACArD,EAAOw0B,mBACNgC,EAAYx2B,EAAOy0B,2BAAwB/wB,KAC3C8D,KAAKG,MAAM+D,MAAQ1L,EAAO0L,WAAQhI,GAE1CuwB,UAAW3vB,IACHA,EAAE+Y,SAAqB,UAAV/Y,EAAE6tB,MACf7tB,EAAEinB,iBACFjnB,EAAEmtB,kBACFjqB,KAAKmZ,WACT,EACF3e,SAAA,EAEFoB,EAAAA,EAAAA,KAAC2uB,EAAAA,EAAM,CACHxvB,MAAOiF,KAAKG,MAAMgK,KAClBtN,SAAU4tB,GAAYzqB,KAAKnD,SAAS4tB,GACpC3Q,KAAK,mBACLxQ,UAAWtJ,KAAKZ,MAAMkK,YAEzBtJ,KAAKG,MAAM0vB,yBACRj0B,EAAAA,EAAAA,KAAA,OAAKC,MAAOrD,EAAOi2B,gBAAgBj0B,SAAEsB,EAAAA,KAAKM,EAAE,uBAC5C,OAGhB,CAEAqP,MAAAA,GACI,MAAMzF,EAAMhG,KAAKZ,MAAM4G,IAEjBgpB,EAAYhpB,EAAI9C,IAAIwD,WAAW,YAA2B,UAAbV,EAAI5C,KACjDnJ,EAAyB,UAAb+L,EAAI5C,MAAyC,WAApB4C,EAAItE,OAAO0B,MAAyC,YAApB4C,EAAItE,OAAO0B,KAEtF,IAKIuvB,EALAwG,EAAc3gC,EAAOutB,OACrBhlB,OAAOq4B,WAAa,OACpBD,EAAc,IAAKA,EAAaxgC,SAAU,uBAI9C,IACIg6B,EAAY9xB,KAAKC,MAAMd,KAAKG,MAAMgK,KACtC,CAAE,MACE,CAGJ,OACI7O,EAAAA,EAAAA,MAACC,EAAAA,OAAM,CACHG,GAAI,CAAE,mBAAoBy9B,GAC1B39B,MAAM,EACN7C,SAAS,KACTsB,UAAWA,EACXovB,YAAY,EACZ9uB,QAASA,IAAMyF,KAAKZ,MAAM7E,UAC1B,kBAAgB,0BAChB,mBAAiB,gCAA+BC,SAAA,EAEhDc,EAAAA,EAAAA,MAACK,EAAAA,YAAW,CACR8F,GAAG,0BACH5F,MAAO,CACHiC,MAAO,oBACPhF,SAAU,SACVugC,aAAc,YAChB7+B,SAAA,CAEDwF,KAAKZ,MAAMhD,EAAE,gBAAiB,KAC/BR,EAAAA,EAAAA,KAAC4a,EAAAA,IAAG,CACAC,UAAU,OACV5a,MAAOrD,EAAOiJ,GACd/F,GAAI,CAAExC,SAAU,CAAEmzB,GAAI,KAAO7xB,SAE5BwF,KAAKZ,MAAM4G,IAAI9C,SAIvBlD,KAAK+yB,WAAWJ,GAChB3yB,KAAKg5B,oBAEN19B,EAAAA,EAAAA,MAACgB,EAAAA,cAAa,CACVZ,GAAI,CACA49B,EACyB,OAArBt5B,KAAKZ,MAAMtB,OAAqC,WAAnBkC,KAAKG,MAAM8uB,IAClC,MACmB,WAAnBjvB,KAAKG,MAAM8uB,KACU,WAAnBjvB,KAAKG,MAAM8uB,KACQ,UAAnBjvB,KAAKG,MAAM8uB,IACX,SACA,QACZn2B,SACuB,WAAnBkH,KAAKG,MAAM8uB,KAAuC,WAAnBjvB,KAAKG,MAAM8uB,KAAuC,UAAnBjvB,KAAKG,MAAM8uB,SACnE/yB,EACA,UACZ1B,SAAA,CAEkB,WAAnBwF,KAAKG,MAAM8uB,IAAmBjvB,KAAKk5B,kBAAkBlK,GAAa,KAC/C,UAAnBhvB,KAAKG,MAAM8uB,KACZjvB,KAAKZ,MAAM4G,IAAI9C,IAAIwD,WAAW,YACN,UAAxB1G,KAAKZ,MAAM4G,IAAI5C,KACTpD,KAAKs1B,kBACL,KACc,WAAnBt1B,KAAKG,MAAM8uB,IAAmBjvB,KAAKu0B,mBAAqB,KACxDv0B,KAAKwyB,oBACLxyB,KAAKqzB,yBAEV/3B,EAAAA,EAAAA,MAAC+B,EAAAA,cAAa,CAAC3B,GAAIlD,EAAOowB,cAAcpuB,SAAA,EACpCoB,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACH7D,MAAM,OACN0C,QAASA,IAAM6D,KAAKK,SAAS,CAAEuvB,eAAgB5vB,KAAKZ,MAAM4G,IAAI9C,IAAK+sB,MAAOjwB,KAAKZ,MAAM4G,IAAI9C,MACzFzF,SAAUuC,KAAKG,MAAM+D,OAASlE,KAAKG,MAAM4uB,QACzC/0B,MAAOgG,KAAKZ,MAAMhD,EAAE,gCAAgC5B,UAEpDoB,EAAAA,EAAAA,KAACq9B,EAAAA,SAAQ,CAAC//B,SAA+B,OAArB8G,KAAKZ,MAAMtB,MAAiB,aAAU5B,OAE9DN,EAAAA,EAAAA,KAAA,OAAKC,MAAO,CAAEyT,SAAU,KACJ,WAAnBtP,KAAKG,MAAM8uB,MACRrzB,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACH7D,MAAM,OACN0C,QAASW,GAAKkD,KAAKy4B,OAAO37B,GAC1BW,SAAUuC,KAAKG,MAAM+D,MACrBlK,MAA4B,OAArBgG,KAAKZ,MAAMtB,MAAiBkC,KAAKZ,MAAMhD,EAAE,uBAAyB,GACzEmB,UAAgC,OAArByC,KAAKZ,MAAMtB,WAAiB5B,GAAYN,EAAAA,EAAAA,KAAC29B,EAAAA,IAAiB,IAAI/+B,SAEnD,OAArBwF,KAAKZ,MAAMtB,OACRlC,EAAAA,EAAAA,KAAC29B,EAAAA,IAAiB,CAACrgC,SAAU,KAE7B8G,KAAKZ,MAAMhD,EAAE,0BAIzBR,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACHX,QAAQ,YACRc,SAAUuC,KAAKG,MAAM+D,QAAUlE,KAAKG,MAAM4uB,SAAW/uB,KAAKG,MAAMqvB,YAChErzB,QAASA,IAAM6D,KAAKmZ,WACpB5b,UAAgC,OAArByC,KAAKZ,MAAMtB,WAAiB5B,GAAYN,EAAAA,EAAAA,KAACkxB,EAAAA,MAAS,IAC7DrzB,MAAM,UAASe,SAEO,OAArBwF,KAAKZ,MAAMtB,OAAiBlC,EAAAA,EAAAA,KAACkxB,EAAAA,MAAS,CAAC5zB,SAAS,UAAa8G,KAAKZ,MAAMhD,EAAE,YAE/ER,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACH7D,MAAM,OACNkD,QAAQ,YACRR,QAASA,IAAM6D,KAAKZ,MAAM7E,UAC1BgD,UAAgC,OAArByC,KAAKZ,MAAMtB,WAAiB5B,GAAYN,EAAAA,EAAAA,KAACqd,EAAAA,MAAS,IAAIze,SAE3C,OAArBwF,KAAKZ,MAAMtB,OAAiBlC,EAAAA,EAAAA,KAACqd,EAAAA,MAAS,CAAC/f,SAAS,UAAa8G,KAAKZ,MAAMhD,EAAE,iBAK/F,EAGJ,UC51DA,MAAMo9B,UAA8Bt6B,EAAAA,UAGhCC,WAAAA,CAAYC,GACRE,MAAMF,GAAO,KAHTwqB,OAAiC,KAKrC5pB,KAAKG,MAAQ,CACTusB,KAAM,KACN+M,SAAU,KACVC,UAAW,KAEnB,CAEAx3B,iBAAAA,GACSlC,KAAKZ,MAAM+C,OACXiI,UAAUpK,KAAKZ,MAAMqC,IACrBQ,MAAM+D,IAA0B,IAAD6E,EAC5B7K,KAAK4pB,OAAS5jB,EACd,MAAMjL,GAAW,OAAHiL,QAAG,IAAHA,GAAW,QAAR6E,EAAH7E,EAAKtE,cAAM,IAAAmJ,OAAR,EAAHA,EAAa6hB,OAAQ,KACnC1sB,KAAKK,SAAS,CAAEqsB,KAAM3xB,EAAO0+B,SAAU1+B,EAAO2+B,UAAW3+B,GAAQ,IAEpE4+B,OAAO78B,GAAcmH,QAAQC,MAAMpH,IAC5C,CAEAqc,QAAAA,GACInZ,KAAK4pB,OAAOloB,OAAS1B,KAAK4pB,OAAOloB,QAAW,CAAC,EAC7C1B,KAAK4pB,OAAOloB,OAAOgrB,KAAO1sB,KAAKG,MAAMu5B,UAChC15B,KAAKZ,MAAM+C,OAAOgJ,UAAUnL,KAAK4pB,OAAO1mB,IAAKlD,KAAK4pB,QAAQ3nB,MAAK,IAAMjC,KAAKZ,MAAM7E,QAAQyF,KAAK4pB,SACtG,CAEAne,MAAAA,GACI,OACInQ,EAAAA,EAAAA,MAACC,EAAAA,OAAM,CAEHC,MAAM,EACN7C,SAAS,KACTsB,WAAS,EACTM,QAASA,IAAMyF,KAAKZ,MAAM7E,UAC1B,kBAAgB,yBAChB,mBAAiB,+BAA8BC,SAAA,EAE/CoB,EAAAA,EAAAA,KAACD,EAAAA,YAAW,CAAC8F,GAAG,yBAAwBjH,SACnCwF,KAAK4pB,OAAS5pB,KAAKZ,MAAMhD,EAAE,qBAAsB4D,KAAK4pB,OAAO1mB,KAAO,QAEzEtH,EAAAA,EAAAA,KAACU,EAAAA,cAAa,CAAA9B,UACVoB,EAAAA,EAAAA,KAACgvB,EAAAA,aAAY,CACTG,UAAQ,EACRnL,QAAS5f,KAAKZ,MAAMw6B,MACpB/9B,MAAO,CAAEiC,MAAO,QAChB/C,MAAOiF,KAAKG,MAAMusB,KAClB7vB,SAAUA,CAACg9B,EAAOnN,IAAS1sB,KAAKK,SAAS,CAAEqsB,OAAMgN,UAAWhN,IAC5DzB,cAAeA,CAAC4O,EAAOnN,IAAS1sB,KAAKK,SAAS,CAAEq5B,UAAWhN,IAC3DvB,YAAarJ,IACTlmB,EAAAA,EAAAA,KAACY,EAAAA,UAAS,CACNG,QAAQ,cACJmlB,EACJ7Y,MAAOjJ,KAAKZ,MAAMhD,EAAE,eAKpCd,EAAAA,EAAAA,MAAC+B,EAAAA,cAAa,CAAA7C,SAAA,EACVoB,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACHG,SAAUuC,KAAKG,MAAMs5B,WAAaz5B,KAAKG,MAAMu5B,UAC7C/8B,QAAQ,YACRR,QAASA,IAAM6D,KAAKmZ,WACpB1f,MAAM,UACN8D,WAAW3B,EAAAA,EAAAA,KAACkxB,EAAAA,MAAS,IAAItyB,SAExBwF,KAAKZ,MAAMhD,EAAE,YAElBR,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACHX,QAAQ,YACRR,QAASA,IAAM6D,KAAKZ,MAAM7E,UAC1Bd,MAAM,OACN8D,WAAW3B,EAAAA,EAAAA,KAACmxB,EAAAA,MAAU,IAAIvyB,SAEzBwF,KAAKZ,MAAMhD,EAAE,iBA5ClB,wBAiDhB,EAGJ,UCpFMo4B,EAAiB,CAAC,QAAS,UAAW,OAAQ,OAAQ,QAAS,SAAU,SAAU,UAEnFsF,GAAiB,CACnBC,SAAS,EACTC,OAAQ,GACRC,OAAQ,GAGNC,GACK,CAAEpgB,KAAM,QAAS/e,MAAO,SAD7Bm/B,GAEO,CAAEpgB,KAAM,UAAW/e,MAAO,WAFjCm/B,GAGM,CAAEpgB,KAAM,SAAU/e,MAAO,UAH/Bm/B,GAIM,CAAEpgB,KAAM,SAAU/e,MAAO,UAmSrC,GArR8DlB,IAS1C,IAADsgC,EAAA,IAT4C,QAC3D5/B,EAAO,QACPI,EAAO,SACP0X,EAAQ,UACRlH,EAAS,QACTpJ,EAAO,WACP4Z,EAAU,YACV0V,EAAW,iBACX+I,GACHvgC,EACG,MAAMwgC,EAAgC,CAClCl6B,MAAOrE,EAAAA,KAAKM,EAAE,aACdk+B,QAASx+B,EAAAA,KAAKM,EAAE,eAChBm+B,OAAQz+B,EAAAA,KAAKM,EAAE,cACfo+B,OAAQ1+B,EAAAA,KAAKM,EAAE,eAGbq+B,EAAQ,GAGRC,EAA8B,QAApBP,EAAGp4B,EAAQsQ,UAAS,IAAA8nB,OAAA,EAAjBA,EAAmB/2B,KAClCrB,EAAQsQ,GACW,YAAfqoB,GACAD,EAAM/3B,KAAKw3B,IACX7I,EAAcA,GAAe,SACP,WAAfqJ,GACPrJ,EAAcA,GAAe,UAC7BoJ,EAAM/3B,KAAKw3B,IACXO,EAAM/3B,KAAKw3B,KACW,UAAfQ,EACPrJ,EAAcA,GAAe,IAE7BoJ,EAAM/3B,KAAKw3B,IACXO,EAAM/3B,KAAKw3B,IACXO,EAAM/3B,KAAKw3B,IAGP7nB,EAAS3L,WAAW,gBACpB2L,EAAS3L,WAAW,aACP,eAAb2L,GACa,YAAbA,GAEAooB,EAAM/3B,KAAKw3B,IACX7I,EAAcA,GAAe,UAE7BA,EAAcA,GAAe,UAIrCoJ,EAAM/3B,KAAKw3B,IACX7I,EAAcA,GAAe,SAEzB1V,IAAetJ,EAAS3L,WAAW,UAAY2L,EAAS3L,WAAW,kBACnE+zB,EAAM/3B,KAAKw3B,IACXO,EAAM/3B,KAAKw3B,IACXO,EAAM/3B,KAAKw3B,MAInB,MAAMS,GAAgB55B,OAAeC,eAA6BD,OAAOE,cAAcC,QACnF,sBAMJ,SAAS05B,EAAQC,GACb,MAAO,GAAGxoB,KAAYwoB,EAAMtvB,WAAW9I,QAAQrH,EAAAA,MAAM0/B,gBAAiB,KAAKr4B,QAAQ,MAAO,KAAKA,QAAQ,MAAO,MAClH,CANIk4B,GAAcF,EAAMzzB,MAAKkN,GAAQA,EAAKnZ,QAAU4/B,MAChDtJ,EAAcsJ,GAOlB,MAAOv3B,EAAM23B,IAAW9/B,EAAAA,EAAAA,UAAsCo2B,IACvDvX,EAAMkhB,IAAW//B,EAAAA,EAAAA,UAAiBo/B,EAAMhJ,KACxC4J,EAAWC,IAAgBjgC,EAAAA,EAAAA,UAC7Bm/B,IACMr5B,OAAeC,eAA6BD,OAAOE,cAAcC,QAAQ,sBAC5E,WAEDi6B,EAAQC,IAAangC,EAAAA,EAAAA,WAAmB8G,EAAQ64B,EAAQP,EAAMl6B,SAE/Dk7B,EAAeA,KACjB,MAAMxC,EAAyB,CAC3Bn3B,OAAQ,CACJoY,OACAwhB,KAAMx/B,EAAAA,KAAKM,EAAE,qBAEjBgH,QAGS,UAATA,GACAy1B,EAAOn3B,OAAS,IACTm3B,EAAOn3B,OACVgrB,KAAM,QACNtpB,KAAM63B,EACN3L,MAAM,EACN1D,OAAO,EACP2P,IAAKzB,GAAemB,IAExBpC,EAAOj3B,OAAS,CAAC,GACD,WAATwB,EACPy1B,EAAOn3B,OAAS,IACTm3B,EAAOn3B,OACVgrB,KAAM,GACNtyB,KAAM,WAGHy+B,EAAOn3B,OAAO45B,KAGpBnwB,EAAU,GAAGkH,KAAYyH,EAAK3T,MAAM,KAAKmW,KAAK,OAAQuc,GAAQ52B,MAAK,IAAMtH,KAAU,EAGtF+M,EAAO5L,EAAAA,KAAKC,cAElB,OACIT,EAAAA,EAAAA,MAACC,EAAAA,OAAM,CACHC,MAAM,EACNvB,WAAS,EACTtB,SAAS,KACT8C,sBAAsB,EAEtBlB,QAASA,EACTC,SAAA,EAEAoB,EAAAA,EAAAA,KAACD,EAAAA,YAAW,CAAAnB,UACRc,EAAAA,EAAAA,MAAA,OACIO,MAAO,CACHgyB,OAAQ,GACR30B,SAAU,GACVL,QAAS,OACT0yB,WAAY,SACZoB,IAAK,GACPnyB,SAAA,EAEFoB,EAAAA,EAAAA,KAAC4/B,EAAAA,OAAO,IACP1/B,EAAAA,KAAKM,EAAE,oBACRd,EAAAA,EAAAA,MAAA,QAAMO,MAAO,CAAEqxB,UAAW,UAAW1yB,SAAA,CAChC6X,EAAS,IAAEyH,WAIxBle,EAAAA,EAAAA,KAACU,EAAAA,cAAa,CAAA9B,UACVc,EAAAA,EAAAA,MAAA,OAAKO,MAAO,CAAEhD,QAAS,OAAQk8B,cAAe,UAAWv6B,SAAA,EACrDoB,EAAAA,EAAAA,KAACY,EAAAA,UAAS,CACNG,QAAQ,WACRsM,MAAOnN,EAAAA,KAAKM,EAAE,UACdP,MAAO,CAAEgyB,OAAQ,SACjBpwB,UAAQ,EACR1C,MAAOsX,KAEX/W,EAAAA,EAAAA,MAAC+f,EAAAA,YAAW,CACR1e,QAAQ,WACRd,MAAO,CAAEqc,UAAW,GAAIujB,aAAc,IAAKjhC,SAAA,EAE3CoB,EAAAA,EAAAA,KAAC0f,EAAAA,WAAU,CAAA9gB,SAAEsB,EAAAA,KAAKM,EAAE,WACpBR,EAAAA,EAAAA,KAAC2f,EAAAA,OAAM,CACH5e,QAAQ,WACR5B,MAAOqI,EACPvG,SAAUitB,KACH/oB,OAAeC,eAA6BD,OAAOE,cAAcgH,QAChE,qBACA6hB,EAAG/sB,OAAOhC,OAGV+e,IAASugB,EAAMj3B,KACf43B,EAAQX,EAAMvQ,EAAG/sB,OAAOhC,QACxBqgC,IAAYr5B,EAAQ64B,EAAQP,EAAMvQ,EAAG/sB,OAAOhC,WAGhDggC,EAAQjR,EAAG/sB,OAAOhC,MAAgC,EACpDP,SAEDigC,EAAMj5B,KAAIsoB,IACPxuB,EAAAA,EAAAA,MAACkgB,EAAAA,SAAQ,CAELzgB,MAAO+uB,EAAG/uB,MAAMP,SAAA,CAEfsB,EAAAA,KAAKM,EAAE0tB,EAAGhQ,MACD,OAATpS,IACGpM,EAAAA,EAAAA,MAAA,QAAMO,MAAO,CAAE3C,SAAU,UAAW+U,QAAS,GAAKM,WAAY,GAAI/T,SAAA,CAAC,IAC7DsvB,EAAG/uB,MAAM,SANd+uB,EAAG/uB,cAad,UAATqI,IACG9H,EAAAA,EAAAA,MAAC+f,EAAAA,YAAW,CAACxf,MAAO,CAAEqc,UAAW,GAAIujB,aAAc,IAAKjhC,SAAA,EACpDoB,EAAAA,EAAAA,KAAC0f,EAAAA,WAAU,CAACzf,MAAO,CAAEmT,MAAO,IAAKxU,SAAEsB,EAAAA,KAAKM,EAAE,iBAC1CR,EAAAA,EAAAA,KAAC2f,EAAAA,OAAM,CACH1f,MAAO,CAAEqc,UAAW,GACpBvb,QAAQ,WACR5B,MAAOkgC,EACPp+B,SAAUitB,KACH/oB,OAAeC,eAA6BD,OAAOE,cAAcgH,QAChE,oBACA6hB,EAAG/sB,OAAOhC,OAEdmgC,EAAapR,EAAG/sB,OAAOhC,MAAqC,EAC9DP,SAEDg6B,EAAehzB,KAAIsoB,IAChBxuB,EAAAA,EAAAA,MAACkgB,EAAAA,SAAQ,CAELzgB,MAAO+uB,EAAGtvB,SAAA,CAETsB,EAAAA,KAAKM,EAAE0tB,GACE,OAATpiB,GAAiB5L,EAAAA,KAAKM,EAAE0tB,KAAQA,IAC7BxuB,EAAAA,EAAAA,MAAA,QAAMO,MAAO,CAAE3C,SAAU,UAAW+U,QAAS,GAAKM,WAAY,GAAI/T,SAAA,CAAC,IAC7DsvB,EAAG,SANRA,WAczBluB,EAAAA,EAAAA,KAACY,EAAAA,UAAS,CACNG,QAAQ,WACRsM,MAAOnN,EAAAA,KAAKM,EAAE,QACdP,MAAO,CAAEgyB,OAAQ,SACjBnxB,WAAS,EACT3B,MAAO+e,EACP2S,UAAW3vB,IACO,UAAVA,EAAE6tB,MACF7tB,EAAEinB,iBACEjK,GACAuhB,IAER,EAEJr+B,UAAW,CACPC,MAAO,CACHC,aAAc4c,GACVle,EAAAA,EAAAA,KAACuB,EAAAA,eAAc,CAAC/D,SAAS,MAAKoB,UAC1BoB,EAAAA,EAAAA,KAACI,EAAAA,WAAU,CACPC,KAAK,QACLE,QAASA,IAAM6+B,EAAQ,IAAIxgC,UAE3BoB,EAAAA,EAAAA,KAACwB,EAAAA,MAAS,QAGlB,OAGZP,SAAUitB,IACNsR,GAAWr5B,EAAQ64B,EAAQ9Q,EAAG/sB,OAAOhC,SACrCigC,EAAQlR,EAAG/sB,OAAOhC,MAAM,UAKxCO,EAAAA,EAAAA,MAAC+B,EAAAA,cAAa,CAAA7C,SAAA,EACVoB,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACHmE,GAAG,4BACHlE,WAAW3B,EAAAA,EAAAA,KAAC4B,EAAAA,MAAS,IACrBC,UAAWqc,IAAS1W,IAAS+3B,GAAoB,UAAT/3B,IAAqB63B,EAC7D9+B,QAASA,IAAMk/B,IACf1+B,QAAQ,YACRlD,MAAM,UAASe,SAEdsB,EAAAA,KAAKM,EAAE,UAEZR,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACHmE,GAAG,+BACHhI,MAAM,OACN0C,QAAS5B,EACToC,QAAQ,YACRY,WAAW3B,EAAAA,EAAAA,KAACwB,EAAAA,MAAS,IAAI5C,SAExBsB,EAAAA,KAAKM,EAAE,oBAGX,E,gBC1TjB,MAAMs/B,GAAwF,CAC1F,CACIC,MAAO,CACH,CAAE7hB,KAAM,OAAQ8hB,SAAU,KAAO5hC,MAAO,cACxC,CAAE8f,KAAM,QAAS8hB,SAAU,IAAO5hC,MAAO,iBAGjD,CACI6hC,MAAO,CACH,CAAE/hB,KAAM,OAAQ8hB,SAAU,GAAM5hC,MAAO,cACvC,CAAE8f,KAAM,QAAS8hB,SAAU,GAAM5hC,MAAO,iBAGhD,CACI8hC,SAAU,CACN,CAAEhiB,KAAM,OAAQ8hB,SAAU,EAAK5hC,MAAO,iBACtC,CAAE8f,KAAM,QAAS8hB,SAAU,EAAK5hC,MAAO,qBAqCnD,SAAS+hC,GAAsBhhC,EAAe0vB,EAAkBuR,GAG5D,OAFAjhC,GAAS0vB,EAAWuR,EACpBjhC,GAAS0vB,EAAoB,OAAPuR,CAE1B,CAaA,MAAMC,GAA4CpiC,IAS9B,IAT+B,MAC/CkB,EAAK,SACLC,EAAQ,EACRoB,EAAC,gBACD8/B,EAAe,gBACfC,EAAe,KACfH,EAAI,QACJI,EAAO,SACP3+B,GACH5D,GACGqB,EAAAA,EAAAA,YAAU,KACN,GAAIihC,EAAiB,CACjB,IAAIE,EAAkB,EACtB,IAAK,IAAIv/B,EAAI,EAAGA,EAAIo/B,EAAgBh8B,OAAQpD,IACxCu/B,GAAmBthC,EAAQmhC,EAAgBp/B,GAE/Cs/B,EAAQC,EACZ,MACID,EAAQ,EACZ,GACD,CAACF,EAAiBC,EAAiBC,EAASrhC,IAE/C,IAAIuhC,EAAcvhC,EAElB,OACIa,EAAAA,EAAAA,KAAA,OACIC,MAAO,CACHhD,QAAS,OACTiF,MAAO,cACP+vB,OAAQ,GACR3e,OAAQ,YACRqtB,WAAY,GACd/hC,SAEDkhC,GAAel6B,KAAIsoB,IAChB,MAAMhQ,EAAOlU,OAAOC,KAAKikB,GAAI,GAC7B,OACIxuB,EAAAA,EAAAA,MAAA,OACIO,MAAO,CACHiC,MAAO,IACPH,OAAQ,IACR9E,QAAS,OACTk8B,cAAe,SACfxJ,WAAY,SACZgR,WAAY,aACd/hC,SAAA,EAGFoB,EAAAA,EAAAA,KAAA,OACIC,MAAO,CACH8B,OAAQ,GACR9E,QAAS,OACT0yB,WAAY,SACZryB,SAAU,GACVsjC,aAAc,mBACd1+B,MAAO,OACP2+B,eAAgB,UAClBjiC,SAED4B,EAAE0d,MAEPle,EAAAA,EAAAA,KAAA,OACIC,MAAO,CACHhD,QAAS,OACTiF,MAAO,QACTtD,SAEDsvB,EAAGhQ,GAAMtY,KAAI,CAACwE,EAAK6tB,KAChB,IAAI6I,GAAO,EACPJ,EAAct2B,EAAI41B,UAAY,IAC9BU,GAAet2B,EAAI41B,SACnBc,GAAO,GAEX,MAAMC,EAASX,EAAOh2B,EAAI41B,SAC1B,OACItgC,EAAAA,EAAAA,MAAA,OACIO,MAAO,CACHhD,QAAS,OACTk8B,cAAe,SACfzI,KAAM,EACNf,WAAY,SACZqR,YAAqB,IAAR/I,EAAY,YAAc,GACzCr5B,SAAA,EAGFoB,EAAAA,EAAAA,KAAA,OACIC,MAAO,CACH8B,OAAQ,GACR6+B,aAAc,YACd1+B,MAAO,OACP2+B,eAAgB,SAChB5jC,QAAS,OACT0yB,WAAY,SACZ9xB,MAAO,UACTe,SAED4B,EAAE4J,EAAI8T,SAEXle,EAAAA,EAAAA,KAAA,OAAKC,MAAO,CAAE8B,OAAQ,GAAI9E,QAAS,QAAS2B,UACxCoB,EAAAA,EAAAA,KAACkN,EAAAA,SAAQ,CACLrL,SAAUA,EACVuL,QAAS0zB,EACTjjC,MAAOkjC,EAAS,UAAY,YAC5B5zB,gBAAiB4zB,EACjB9gC,MAAO8gC,EAAS,CAAE1uB,QAAS,SAAQ/R,EACnCW,SAAUC,IACF6/B,IACAX,GAAwB,OAAfh2B,EAAI41B,SACbQ,EAAQJ,IAEZ,IAAIvR,EAAW1vB,EACV+B,EAAEC,OAAOiM,QAGVyhB,GAAYzkB,EAAI41B,SAFhBnR,GAA4B,OAAfzkB,EAAI41B,SAIrB5gC,EAASyvB,EAAS,QAjCzBzkB,EAAI41B,SAqCP,QA1Eb9hB,EA8EH,KAGZ,EA0ed,GA1d4E+iB,IAUrE,IAVsE,QACzEtiC,EAAO,QACPI,EAAO,SACP0X,EAAQ,aACRyqB,EAAY,QACZ/6B,EAAO,EACP3F,EAAC,aACD2gC,EAAY,UACZzzB,EAAS,MACT9P,GACHqjC,EACG,MAAOG,EAAgBC,IAAqBhiC,EAAAA,EAAAA,UAA4B,OACjEiiC,EAAiBC,IAAsBliC,EAAAA,EAAAA,UAA6B,OACpEmiC,EAAYC,IAAiBpiC,EAAAA,EAAAA,UAA8B,KAC3DqiC,EAAaC,IAAkBtiC,EAAAA,EAAAA,UAA+B,KAC9DkhC,EAAiBqB,IAAsBviC,EAAAA,EAAAA,WAAS,IAChDy5B,EAAY+I,IAAiBxiC,EAAAA,EAAAA,WAAS,IACtCyiC,EAAeC,IAAoB1iC,EAAAA,EAAAA,UAAS,IAC5C2iC,EAA0BC,IAA+B5iC,EAAAA,EAAAA,UAAiB,OAC1E6iC,EAAyBC,IAA8B9iC,EAAAA,EAAAA,UAAiB,OACxE+iC,EAAgBC,IAAqBhjC,EAAAA,EAAAA,WAAS,IAC9CijC,EAAgBC,IAAqBljC,EAAAA,EAAAA,WAAS,IAC9CmjC,EAAgBC,IAAqBpjC,EAAAA,EAAAA,UAAS,KAC9CqjC,EAAiBC,IAAsBtjC,EAAAA,EAAAA,UAAS,KAChDujC,EAAWC,IAAgBxjC,EAAAA,EAAAA,UAAS,IACpCyjC,EAAYC,IAAiB1jC,EAAAA,EAAAA,UAAS,IACtCqL,EAAKs4B,IAAU3jC,EAAAA,EAAAA,UAAmB,KAClCd,EAAU0kC,IAAe5jC,EAAAA,EAAAA,WAAS,IAElC6jC,EAAgBC,IAAqB9jC,EAAAA,EAAAA,WAAS,GAE/C+jC,EAAY5iC,EAAE,aA2LpB,OAzLAlB,EAAAA,EAAAA,YAAU,KACN,IAAI+jC,EAAQ,EACZ,MAAMC,EAA4B,GAC5BC,EAA6B,GAE7B19B,EAAK4Q,GAAY0qB,EACjBqC,EAAY,GAAG39B,KACfoE,EAAOD,OAAOC,KAAK9D,GAAS+E,OAClC,IAAIu4B,GAAc,EAClB,MAAMC,EAA+B,GAC/BC,EAA6B,GAC7B73B,EAAO5L,EAAAA,KAAKC,cAElB,IAAIyjC,GAAkB,EAClBC,GAAkB,EAClBC,EAA0B,KAC1BC,EAA2B,KAC3BC,EAAoC,KACpCC,EAAmC,KACvC,MAAMC,EAAiB,GAEvB,IAAK,IAAIC,EAAI,EAAGA,EAAIl6B,EAAK3F,OAAQ6/B,IAAK,CAClC,MAAMpV,EAAM9kB,EAAKk6B,GACX/5B,EAAMjE,EAAQ4oB,GACpB,GAAI3kB,IAAQ2kB,IAAQlpB,GAAMkpB,EAAIjkB,WAAW04B,IAAa,CAGlD,GAFAH,IACAa,EAAKp9B,KAAKioB,IACL3kB,EAAIg6B,IACL,SAG8B,OAA9BJ,QAAyD1jC,IAAnB8J,EAAIg6B,IAAIpW,SAC9CgW,EAA4B55B,EAAIg6B,IAAIpW,QAEP,OAA7BiW,QAAiF3jC,IAA3C8J,EAA6Bg6B,IAAI7/B,QACvE0/B,EAA4B75B,EAA6Bg6B,IAAI7/B,OAEzC,OAApBu/B,QAA8CxjC,IAAlB8J,EAAIg6B,IAAIC,QACpCP,EAAkB15B,EAAIg6B,IAAIC,OAEL,OAArBN,QAAoDzjC,IAAvB8J,EAAIg6B,IAAIE,aACrCP,EAAmB35B,EAAIg6B,IAAIE,YAG1BlC,GAAkB0B,IAAoB15B,EAAIg6B,IAAIC,YAA2B/jC,IAAlB8J,EAAIg6B,IAAIC,QAChET,GAAkB,GAEjBtB,GAAkByB,IAAqB35B,EAAIg6B,IAAIE,iBAAqChkC,IAAvB8J,EAAIg6B,IAAIE,aACtET,GAAkB,QAG0BvjC,IAA3C8J,EAA6Bg6B,IAAI7/B,OAClC0/B,IAA8B75B,EAA6Bg6B,IAAI7/B,OAC9D++B,EAAgBn6B,SAAUiB,EAA6Bg6B,IAAI7/B,QAE5D++B,EAAgBx8B,KAAMsD,EAA6Bg6B,IAAI7/B,YAGpCjE,IAAnB8J,EAAIg6B,IAAIpW,QACRgW,IAA8B55B,EAAIg6B,IAAIpW,QACrCuV,EAAiBp6B,SAASiB,EAAIg6B,IAAIpW,SAEnCuV,EAAiBz8B,KAAKsD,EAAIg6B,IAAIpW,QAEjB,UAAb5jB,EAAI5C,OACJi8B,GAAc,EAEtB,CAE+D,IAADx0B,EAAAG,EAA9D,GAAI2f,EAAIjkB,WAAW,kBAAkC,WAAX,OAAHV,QAAG,IAAHA,OAAG,EAAHA,EAAK5C,MACxCk8B,EAAO58B,KAAK,CACRoX,KAAM1e,EAAAA,MAAMsmB,qBAAqB1b,EAAK0B,GAAMjF,QAAQ,gBAAiB,IACrE1H,MAAO4vB,EACPvwB,KAAgB,QAAZyQ,EAAE7E,EAAItE,cAAM,IAAAmJ,OAAA,EAAVA,EAAYzQ,KAClBX,MAAiB,QAAZuR,EAAEhF,EAAItE,cAAM,IAAAsJ,OAAA,EAAVA,EAAYvR,aAEpB,GAAIkxB,EAAIjkB,WAAW,iBAAiC,UAAX,OAAHV,QAAG,IAAHA,OAAG,EAAHA,EAAK5C,MAAiB,CAAC,IAADouB,EAAAC,EAC/D8N,EAAM78B,KAAK,CACPoX,KAAM1e,EAAAA,MAAMsmB,qBAAqB1b,EAAK0B,GAAMjF,QAAQ,eAAgB,IACpE1H,MAAO4vB,EACPvwB,KAAgB,QAAZo3B,EAAExrB,EAAItE,cAAM,IAAA8vB,OAAA,EAAVA,EAAYp3B,KAClBX,MAAiB,QAAZg4B,EAAEzrB,EAAItE,cAAM,IAAA+vB,OAAA,EAAVA,EAAYh4B,OAE3B,CACJ,CAEAimC,EAAkBA,GAAmB39B,EAAQ,iBAAiBL,OAAOy+B,cAAcF,MACnFN,EAAmBA,GAAoB59B,EAAQ,iBAAiBL,OAAOy+B,cAAcD,WACrFN,EAA4BA,GAA6B79B,EAAQ,iBAAiBL,OAAOy+B,cAAcvW,OACvGiU,EACI9lB,OAAOqoB,MAAMR,GACP79B,EAAQ,iBAAiBL,OAAOy+B,cAAcvW,OAC9CgW,GAGNP,IACAQ,EAA2BA,GAA4B99B,EAAQ,iBAAiBL,OAAOy+B,cAAchgC,MACrG49B,EACIhmB,OAAOqoB,MAAMP,GACP99B,EAAQ,iBAAiBL,OAAOy+B,cAAchgC,MAC9C0/B,IAId,MAAMQ,EAAWd,EAAMv4B,MAAKkN,GAAQA,EAAKnZ,QAAU2kC,IAC7CY,EAAYhB,EAAOt4B,MAAKkN,GAAQA,EAAKnZ,QAAU4kC,IAErD1C,EAAkBoD,GAClBlD,EAAmBmD,GAEnBrC,EAAkBuB,GAClBrB,EAAkBsB,GAElBpC,EAAckC,GACdhC,EAAe+B,GAEXD,GACA5B,GAAc,GAEdV,GACAS,GAAmB,GAEvBG,EAAiBsB,GAEjBZ,EAAkBa,GAClBX,EAAmBY,GAEnBP,EAAOkB,EAAK,GACb,CAAC/9B,EAASsQ,EAAU6rB,EAAgBF,EAAgBjB,KAEvD7hC,EAAAA,EAAAA,YAAU,KACFihC,GACI+B,IAC8B,cAA1BhB,EAAgBniC,OAChBoiC,EAAmB,CAAErjB,KAAMklB,EAAWjkC,MAAO,cAE5CuiC,EAAYt2B,MAAKkN,GAAuB,cAAfA,EAAKnZ,SAC/BwiC,GAAezT,GAAM,CACjB,CACIhQ,KAAMklB,EACNjkC,MAAO,gBAER+uB,MAKXkU,IACKhB,GAA2C,cAAzBA,EAAejiC,OAClCkiC,EAAkB,CAAEnjB,KAAMklB,EAAWjkC,MAAO,cAE3CqiC,EAAWp2B,MAAKkN,GAAuB,cAAfA,EAAKnZ,SAC9BsiC,GAAcvT,GAAM,CAChB,CACIhQ,KAAMklB,EACNjkC,MAAO,gBAER+uB,QAKXkT,GAA2C,cAAzBA,EAAejiC,OACjCkiC,EAAkBl7B,EAAQsQ,GAAU2tB,IAAIC,OAExC/C,GAA6C,cAA1BA,EAAgBniC,OACnCoiC,EAAmBp7B,EAAQsQ,GAAU2tB,IAAIE,YAG7C3C,GAAezT,GAAMA,EAAGzjB,QAAOk6B,IAAA,IAAC,MAAExlC,GAAOwlC,EAAA,MAAe,cAAVxlC,CAAqB,MACnEsiC,GAAcvT,GAAMA,EAAGzjB,QAAOm6B,IAAA,IAAC,MAAEzlC,GAAOylC,EAAA,MAAe,cAAVzlC,CAAqB,MACtE,GACD,CACCqiC,EACAjB,EACA6B,EACAE,EACAn8B,EACAsQ,EACA6qB,EACAF,EACAgC,EACA1B,IAGCh3B,EAAIpG,QAILtE,EAAAA,EAAAA,KAAC6kC,GAAAA,EAAW,CACRjnC,MAAOA,EACPiB,iBAAiB,QACjB7B,gBAAc,EACdkC,aAAcgkC,EACd3kC,SAAUA,EACVI,QAASA,EACTI,QAASA,KACLkkC,GAAY,GACZj+B,YAAW,KACP,GAAKu7B,EAUE,CAEH,MAAMuE,EAA0B,OAAZlC,EAGdmC,EAA4B,OAAbjC,EAErB,IAAK,IAAIt3B,EAAI,EAAGA,EAAId,EAAIpG,OAAQkH,IAAK,CACjC,MAAMujB,EAAMrkB,EAAIc,GACVpB,EAAMjE,EAAQ4oB,GACdiW,EAAqCxlC,EAAAA,MAAMylC,MAAM76B,EAAIg6B,KAAO,CAAC,GACnEY,EAAOhX,OAASmS,GAAsB/1B,EAAIg6B,IAAIpW,OAAQgU,EAA0B8C,GAC5E1D,GAA2C,cAAzBA,EAAejiC,QACjC6lC,EAAOX,MAAQjD,EAAejiC,OAE9BmiC,GAA6C,cAA1BA,EAAgBniC,QACnC6lC,EAAOV,WAAahD,EAAgBniC,OAEvB,UAAbiL,EAAI5C,OACJw9B,EAAOzgC,MAAQ47B,GACX/1B,EAAIg6B,IAAI7/B,MACR29B,EACA6C,IAGR7D,EAAanS,EAAK,CAAEqV,IAAKY,GAC7B,CACJ,KArCsB,CAClB,MAAMA,EAAqCxlC,EAAAA,MAAMylC,MAAM9+B,EAAQsQ,GAAU2tB,KAAO,CAAC,GACjFY,EAAOhX,OAASgU,EAChBgD,EAAOX,MAAQjD,EAAiBA,EAAejiC,MAAQ,oBACvD6lC,EAAOV,WAAahD,EAAkBA,EAAgBniC,MAAQ,6BAE/B,UAA3BgH,EAAQsQ,GAAUjP,OAClBw9B,EAAOzgC,MAAQ29B,GAEnBhB,EAAazqB,EAAU,CAAE2tB,IAAKY,GAClC,CA6BA/B,GAAY,GACZlkC,GAAS,GACV,IAAI,EACTH,UAEFc,EAAAA,EAAAA,MAAA,OAAKO,MAAO,CAAEhD,QAAS,OAAQk8B,cAAe,UAAWv6B,SAAA,EACrDoB,EAAAA,EAAAA,KAAA,OACIC,MAAO,CACHgyB,OAAQ,GACR30B,SAAU,IACZsB,SAED4B,EAAE,0BAA2BiW,GAAY0qB,MAE9CzhC,EAAAA,EAAAA,MAAA,OAAKO,MAAO,CAAEhD,QAAS,QAAS2B,SAAA,EAC5Bc,EAAAA,EAAAA,MAAC+f,EAAAA,YAAW,CACR1e,QAAQ,WACR1C,WAAS,EACT4B,MAAO,CAAE7C,YAAa,IAAKwB,SAAA,EAE3BoB,EAAAA,EAAAA,KAAC0f,EAAAA,WAAU,CAAA9gB,SAAE4B,EAAE,iBACfR,EAAAA,EAAAA,KAAC2f,EAAAA,OAAM,CACH5e,QAAQ,WACRc,SAAUtD,EACVY,MAAOiiC,EAAiBA,EAAejiC,MAAQ,GAC/C+lC,YAAaA,KACTxlC,EAAAA,EAAAA,MAAA,QAAAd,SAAA,CACmB,OAAdwiC,QAAc,IAAdA,GAAAA,EAAgB5iC,MACbwB,EAAAA,EAAAA,KAACT,EAAAA,KAAI,CACDkN,IAAK20B,EAAe5iC,KACpByB,MAAO,CAAEiC,MAAO,GAAIH,OAAQ,GAAI3E,YAAa,KAEjD,KACHgkC,EAAiBA,EAAeljB,KAAO,MAGhDje,MAC8B,eAAZ,OAAdmhC,QAAc,IAAdA,OAAc,EAAdA,EAAgBjiC,OACV,CAAEkT,QAAS,IACX,CACIxU,OAAqB,OAAdujC,QAAc,IAAdA,OAAc,EAAdA,EAAgBvjC,aAASyC,EAChCwC,gBAAiBtD,EAAAA,MAAM2lC,iBAA+B,OAAd/D,QAAc,IAAdA,OAAc,EAAdA,EAAgBvjC,MAAO6P,IAG7EzM,SAAUitB,IACN,MAAMuW,EAAWjD,EAAWp2B,MAAKkN,GAAQA,EAAKnZ,QAAU+uB,EAAG/sB,OAAOhC,QAClEkiC,EAAkBoD,GAClBtB,GAAkB,EAAM,EAC1BvkC,SAED4iC,EAAW57B,KAAIsoB,IACZxuB,EAAAA,EAAAA,MAACkgB,EAAAA,SAAQ,CACL3f,MACiB,cAAbiuB,EAAG/uB,MACG,CAAEkT,QAAS,IACX,CACIxU,MAAOqwB,EAAGrwB,YAASyC,EACnBwC,gBAAiBtD,EAAAA,MAAM2lC,iBAAiBjX,EAAGrwB,MAAO6P,IAIhEvO,MAAO+uB,EAAG/uB,MAAMP,SAAA,CAEfsvB,EAAG1vB,MACAwB,EAAAA,EAAAA,KAACT,EAAAA,KAAI,CACDkN,IAAKyhB,EAAG1vB,KACRyB,MAAO,CAAEiC,MAAO,GAAIH,OAAQ,GAAI3E,YAAa,KAEjD,KACH8wB,EAAGhQ,OATCgQ,EAAG/uB,eAcxBO,EAAAA,EAAAA,MAAC+f,EAAAA,YAAW,CACR1e,QAAQ,WACR1C,WAAS,EAAAO,SAAA,EAEToB,EAAAA,EAAAA,KAAC0f,EAAAA,WAAU,CAAA9gB,SAAE4B,EAAE,kBACfR,EAAAA,EAAAA,KAAC2f,EAAAA,OAAM,CACH5e,QAAQ,WACRc,SAAUtD,EACVY,MAAOmiC,EAAkBA,EAAgBniC,MAAQ,GACjD+lC,YAAaA,KACTxlC,EAAAA,EAAAA,MAAA,QAAAd,SAAA,CACoB,OAAf0iC,QAAe,IAAfA,GAAAA,EAAiB9iC,MACdwB,EAAAA,EAAAA,KAACT,EAAAA,KAAI,CACDkN,IAAK60B,EAAgB9iC,KACrByB,MAAO,CAAEiC,MAAO,GAAIH,OAAQ,GAAI3E,YAAa,KAEjD,KACHkkC,EAAkBA,EAAgBpjB,KAAO,MAGlDje,MAC+B,eAAZ,OAAfqhC,QAAe,IAAfA,OAAe,EAAfA,EAAiBniC,OACX,CAAEkT,QAAS,IACX,CACIxU,OAAsB,OAAfyjC,QAAe,IAAfA,OAAe,EAAfA,EAAiBzjC,aAASyC,EACjCwC,gBAAiBtD,EAAAA,MAAM2lC,iBAAgC,OAAf7D,QAAe,IAAfA,OAAe,EAAfA,EAAiBzjC,MAAO6P,IAG9EzM,SAAUitB,IACN,MAAMwW,EAAYhD,EAAYt2B,MAAKkN,GAAQA,EAAKnZ,QAAU+uB,EAAG/sB,OAAOhC,QACpEoiC,EAAmBmD,GACnBvB,GAAkB,EAAM,EAC1BvkC,SAED8iC,EAAY97B,KAAIsoB,IACbxuB,EAAAA,EAAAA,MAACkgB,EAAAA,SAAQ,CAELzgB,MAAO+uB,EAAG/uB,MACVc,MACiB,cAAbiuB,EAAG/uB,MACG,CAAEkT,QAAS,IACX,CACIxU,MAAOqwB,EAAGrwB,YAASyC,EACnBwC,gBAAiBtD,EAAAA,MAAM2lC,iBAAiBjX,EAAGrwB,MAAO6P,IAE/D9O,SAAA,CAEAsvB,EAAG1vB,MACAwB,EAAAA,EAAAA,KAACT,EAAAA,KAAI,CACDkN,IAAKyhB,EAAG1vB,KACRyB,MAAO,CAAEiC,MAAO,GAAIH,OAAQ,GAAI3E,YAAa,KAEjD,KACH8wB,EAAGhQ,OAjBCgQ,EAAG/uB,kBAwB5BO,EAAAA,EAAAA,MAAA,OACIO,MAAO,CACHhD,QAAS,OACTg1B,OAAQ,GACRtC,WAAY,SACZryB,SAAU,GACVqV,WAAY,EACZ9U,MAAO,UACTe,SAAA,EAEFoB,EAAAA,EAAAA,KAAA,OAAKC,MAAQsgC,EAAuC,KAArB,CAAE1iC,MAAO,SAAiBe,SAAE4B,EAAE,wBAC7DR,EAAAA,EAAAA,KAAC2wB,EAAAA,OAAM,CACH9uB,SAAUtD,KAAc4iC,GAAkC,IAAlBW,EACxC10B,UAAW+zB,GAAgBZ,EAC3Bt/B,SAAUC,IACN0gC,EAAmB1gC,EAAEC,OAAOiM,SAC5B+1B,GAAkB,EAAM,EAE5BtlC,MAAM,aAEV6B,EAAAA,EAAAA,MAAA,OAAKO,MAAOsgC,EAAkB,CAAE1iC,MAAO,SAAY,KAAKe,SAAA,CACnD4B,EAAE,0BAA2B,IAC7B2gC,GAAgBW,EAAgB,EAAI,IAAIA,KAAiBthC,EAAE,gBAAkB,SAIrFjC,IAAYyB,EAAAA,EAAAA,KAAC8P,EAAAA,eAAc,KAE5BpQ,EAAAA,EAAAA,MAAA,OAAKO,MAAO,CAAEmlC,UAAW,QAASxmC,SAAA,EAC9Bc,EAAAA,EAAAA,MAAA,OAAAd,SAAA,EACIoB,EAAAA,EAAAA,KAAA,MAAApB,SAAK4B,EAAE,oBACPR,EAAAA,EAAAA,KAACqgC,GAAY,CACTD,KAAM0C,EACNjhC,SAAUtD,EACViiC,QAASuC,EACTxC,gBAAiBA,EACjBD,gBAAiBoC,EACjBliC,EAAGA,EACHpB,SAAU8B,IACN+gC,EAA4B/gC,GAC5BiiC,GAAkB,EAAM,EAE5BhkC,MAAO6iC,OAGdlJ,IACGp5B,EAAAA,EAAAA,MAAA,OAAAd,SAAA,EACIoB,EAAAA,EAAAA,KAAA,MAAApB,SAAK4B,EAAE,oBACPR,EAAAA,EAAAA,KAACqgC,GAAY,CACTD,KAAMwC,EACN/gC,SAAUtD,EACViiC,QAASqC,EACTtC,gBAAiBA,EACjBD,gBAAiBC,EAAkBiC,EAAiB,GACpDhiC,EAAGA,EACHpB,SAAU8B,IACNihC,EAA2BjhC,GAC3BiiC,GAAkB,EAAM,EAE5BhkC,MAAO+iC,gBArPxBliC,EAAAA,EAAAA,KAAC8P,EAAAA,eAAc,GA2PR,ECvqBhBlT,GAA8B,CAChCutB,OAAQ,CACJpoB,OAAQ,OACRC,UAAW,OACXjF,SAAU,QAEdM,QAAS,CACL+sB,UAAW,UAEf9hB,MAAQ1K,IAAe,CACnBC,MAA8B,SAAvBD,EAAME,QAAQoU,KAAkB,UAAY,YAEvDmzB,MAAO,CACHtjC,OAAQ,OACRG,MAAO,QAEXqM,KAAM,CACF+2B,WAAY,qCACZpjC,MAAO,QAEXqjC,SAAU,CACNC,eAAgB,OAChBnjC,cAAe,YACf/E,SAAU,GACVO,MAAO,QACPyV,OAAQ,kBACRgB,aAAc,EACdL,QAAS,WACT7W,YAAa,IAqBrB,MAAMqoC,WAA6BniC,EAAAA,UAG/BC,WAAAA,CAAYC,GACRE,MAAMF,GAAO,KAHjBkiC,cAAQ,EAKJ,MAAMxM,EAAQ90B,KAAKZ,MAAM4G,IAAI9C,IAAIiD,MAAM,KAEvCnG,KAAKG,MAAQ,CACT+D,MAAO,GACP+8B,MAAO,KACP92B,KAAM,KACNo3B,OAAQ,KACRC,SAAU,GAAG1M,EAAMA,EAAM50B,OAAS,MAAM40B,EAAMA,EAAM50B,OAAS,MAGjEF,KAAKshC,SAAWnY,IAAAA,WACpB,CAEAjnB,iBAAAA,GACIlC,KAAKZ,MAAM+C,OACNs/B,eAAezhC,KAAKZ,MAAM4G,IAAI9C,KAC9BjB,MAAMyC,IACH,IAAIg9B,EAAM1hC,KAAKZ,MAAM4G,IAAI9C,IAAIy+B,cAAcx7B,MAAM,KAAKiD,MAEtD,MAAMw4B,EAAmBxmC,EAAAA,MAAMymC,eAAen9B,GAK9C,GAJIk9B,IACAF,EAAME,GAGE,QAARF,EACA1hC,KAAKK,SAAS,CAAE4gC,OAAO,EAAMM,OAAQ78B,EAAMo9B,KAAM,oBAC9C,GAAY,QAARJ,EACP1hC,KAAKK,SAAS,CAAE4gC,OAAO,EAAMM,OAAQ78B,EAAMo9B,KAAM,uBAC9C,GAAY,QAARJ,GAAyB,QAARA,EACxB1hC,KAAKK,SAAS,CAAE4gC,OAAO,EAAMM,OAAQ78B,EAAMo9B,KAAM,SAASJ,WACvD,GAAY,QAARA,EACP1hC,KAAKK,SAAS,CAAE0hC,OAAO,EAAMR,OAAQ78B,EAAMo9B,KAAM,oBAC9C,GAAY,QAARJ,EACP1hC,KAAKK,SAAS,CAAE0hC,OAAO,EAAMR,OAAQ78B,EAAMo9B,KAAM,mBAC9C,GAAY,QAARJ,GAAyB,QAARA,EACxB,IACI,MAAMv3B,EAAO63B,KAAKt9B,GAClB1E,KAAKK,SAAS,CAAE8J,OAAMo3B,OAAQ78B,EAAMo9B,KAAM,cAC9C,CAAE,MACE,CAER,IAEHnI,OAAMz1B,GAASlE,KAAKK,SAAS,CAAE6D,WACxC,CAEAuH,MAAAA,GACI,OACInQ,EAAAA,EAAAA,MAACC,EAAAA,OAAM,CACHM,MAAOrD,GAAOutB,OACdvqB,MAAM,EACN7C,SAAUqH,KAAKG,MAAM4hC,MAAQ,KAAO,KACpCxnC,QAASA,IAAMyF,KAAKZ,MAAM7E,UAC1BN,WAAS,EACT,kBAAgB,2BAA0BO,SAAA,EAE1CoB,EAAAA,EAAAA,KAACD,EAAAA,YAAW,CAAC8F,GAAG,2BAA0BjH,SACrCwF,KAAKZ,MAAMhD,EAAE,yBAA0B4D,KAAKZ,MAAM4G,IAAI9C,QAE3D5H,EAAAA,EAAAA,MAACgB,EAAAA,cAAa,CAACT,MAAOrD,GAAOS,QAAQuB,SAAA,CAChCwF,KAAKG,MAAM+D,OACRtI,EAAAA,EAAAA,KAAC4a,EAAAA,IAAG,CACAC,UAAU,MACV/a,GAAIlD,GAAO0L,MAAM1J,SAEK,wBAArBwF,KAAKG,MAAM+D,MACNlE,KAAKZ,MAAMhD,EAAE,sBACb4D,KAAKZ,MAAMhD,EAAE4D,KAAKG,MAAM+D,SAElC,KACHlE,KAAKG,MAAM4hC,OACRnmC,EAAAA,EAAAA,KAAA,SACIiM,IAAK7H,KAAKshC,SACVj5B,IAAK,QAAQrI,KAAKG,MAAM2hC,eAAe9hC,KAAKG,MAAMohC,WAEtD,KACHvhC,KAAKG,MAAM4hC,OACRnmC,EAAAA,EAAAA,KAACiqB,EAAAA,IAAG,CACApsB,MAAM,UACN0C,QAASA,IAAM6D,KAAKshC,SAAStc,SAAWhlB,KAAKshC,SAAStc,QAAQid,OAAOznC,UAErEoB,EAAAA,EAAAA,KAACsmC,EAAAA,UAAQ,MAEb,KACHliC,KAAKG,MAAM8gC,OACRrlC,EAAAA,EAAAA,KAAA,OACIyM,IAAK,QAAQrI,KAAKG,MAAM2hC,eAAe9hC,KAAKG,MAAMohC,SAClDj5B,IAAKtI,KAAKZ,MAAM4G,IAAI9C,IACpBrH,MAAOrD,GAAOyoC,QAElB,KACiB,OAApBjhC,KAAKG,MAAMgK,MAAgBvO,EAAAA,EAAAA,KAAA,OAAKC,MAAOrD,GAAO2R,KAAK3P,SAAEwF,KAAKG,MAAMgK,OAAc,SAEnF7O,EAAAA,EAAAA,MAAC+B,EAAAA,cAAa,CAAA7C,SAAA,EACVc,EAAAA,EAAAA,MAAA,KACIO,MAAOrD,GAAO2oC,SACdA,SAAUnhC,KAAKG,MAAMqhC,SACrBW,KAAM,QAAQniC,KAAKG,MAAM2hC,eAAe9hC,KAAKG,MAAMohC,SAAS/mC,SAAA,EAE5DoB,EAAAA,EAAAA,KAACwmC,EAAAA,OAAY,CAACvmC,MAAO,CAAEmU,aAAc,EAAGrS,OAAQ,OAChD/B,EAAAA,EAAAA,KAAA,QAAApB,SAAOwF,KAAKZ,MAAMhD,EAAE,kBAExBR,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACHX,QAAQ,YACRR,QAASA,IAAM6D,KAAKZ,MAAM7E,UAC1BgD,WAAW3B,EAAAA,EAAAA,KAACwB,EAAAA,MAAS,IACrB3D,MAAM,OAAMe,SAEXwF,KAAKZ,MAAMhD,EAAE,gBAKlC,EAGJ,UAAe2P,EAAAA,EAAAA,YAAf,CAA2Bs1B,ICvJrB7oC,GAA8B,CAChCg1B,SAAU,CACN1vB,MAAO,GACPH,OAAQ,IAEZ0kC,iBAAkB,CACd5G,aAAc,IAElBhiC,MAAO,CAEHqE,MAAO,IAEX4wB,YAAa,CACTngB,WAAY,EACZN,QAAS,GACTif,UAAW,SACXh0B,SAAU,WAEdopC,YAAa,CACT,EAEJC,YAAc/oC,IAAe,CACzBkF,gBAAiBlF,EAAME,QAAQC,QAAQC,QAGzC46B,GAAiB,CAAC,QAAS,UAAW,OAAQ,OAAQ,QAAS,SAAU,SAAU,UA8BzF,MAAMgO,WAA0BtjC,EAAAA,UAG5BC,WAAAA,CAAYC,GACRE,MAAMF,GAAO,KAHjBqjC,cAAQ,EAKJ,MAAMC,EAA0B,GAC1BjhC,EAAKzB,KAAKZ,MAAM4G,IAAI9C,IAE1BlD,KAAKyiC,SAAW78B,OAAOC,KAAK7F,KAAKZ,MAAM2C,SAASsE,QAAOnD,GAAOA,EAAIwD,WAAW,aAE7E,IAAK,IAAIU,EAAI,EAAGA,EAAIpH,KAAKyiC,SAASviC,OAAQkH,IAAK,CAAC,IAADugB,EAC3C,MAAM0H,EAAmD,QAA9C1H,EAAG3nB,KAAKZ,MAAM2C,QAAQ/B,KAAKyiC,SAASr7B,IAAI1F,cAAM,IAAAimB,OAAA,EAA3CA,EAA6C0H,OAElD,OAALA,QAAK,IAALA,OAAK,EAALA,EAAO5tB,MAAOA,IACQ,kBAAT,OAAL4tB,QAAK,IAALA,OAAK,EAALA,EAAO5tB,KAAoB4tB,EAAM5tB,GAAG6tB,OAAS7tB,GAAM4tB,EAAM5tB,GAAGmqB,QAAUnqB,IAE9EihC,EAAchgC,KAAK1C,KAAKyiC,SAASr7B,GAEzC,CAEApH,KAAKG,MAAQ,CACTuiC,gBACAC,iBAAkBD,EAAcxiC,OAChC0iC,WAAY5iC,KAAKZ,MAAM4G,IAAI9C,IAC3B2/B,aAAcL,GAAkBM,QAAQ9iC,KAAKZ,MAAM4G,IAAItE,OAAOoY,MAAQ9Z,KAAKZ,MAAM4G,IAAI9C,KACrF6/B,aAAc/iC,KAAKZ,MAAM4G,IAAItE,OAAO4tB,KACpC0T,cAAehjC,KAAKZ,MAAM4G,IAAItE,OAAOkqB,MACrCqX,aAAcjjC,KAAKZ,MAAM4G,IAAItE,OAAOmP,KACpCqyB,aAAcV,GAAkBM,QAAQ9iC,KAAKZ,MAAM4G,IAAItE,OAAO45B,MAC9D6H,aAAcnjC,KAAKZ,MAAM4G,IAAItE,OAAO0B,KACpCggC,oBAAoB,EACpBC,oBAAqB,MACrBC,qBAAsB,MACtBC,cAAevjC,KAAKZ,MAAM4G,IAAItE,OAAOjI,MACrC+pC,aAAcxjC,KAAKZ,MAAM4G,IAAItE,OAAOtH,KAE5C,CAEA,cAAO0oC,CAAQ34B,GACX,OAAKA,EAGe,kBAATA,EACAA,EAAKrO,EAAAA,KAAKC,gBAAkBoO,EAAKxC,IAAM,GAE3CwC,EAAKoB,WALD,EAMf,CAEAk4B,iBAAAA,GACI,OAAKzjC,KAAKG,MAAMwiC,iBAIZrnC,EAAAA,EAAAA,MAACC,EAAAA,OAAM,CACHC,MAAM,EACNjB,QAASA,IAAMyF,KAAKK,SAAS,CAAEsiC,iBAAiB,IAASnoC,SAAA,EAEzDoB,EAAAA,EAAAA,KAACD,EAAAA,YAAW,CAAAnB,SAAEsB,EAAAA,KAAKM,EAAE,uBAAwB,WAAW4D,KAAKG,MAAMyiC,iBACnEtnC,EAAAA,EAAAA,MAACgB,EAAAA,cAAa,CAAA9B,SAAA,EACVoB,EAAAA,EAAAA,KAACY,EAAAA,UAAS,CACNX,MAAOrD,GAAO6pC,iBACd1lC,QAAQ,WACR5B,MAAOiF,KAAKG,MAAMyiC,WAClB5lC,UAAW,CACPC,MAAO,CACHC,aAAc8C,KAAKG,MAAMyiC,YACrBhnC,EAAAA,EAAAA,KAACuB,EAAAA,eAAc,CAAC/D,SAAS,MAAKoB,UAC1BoB,EAAAA,EAAAA,KAACI,EAAAA,WAAU,CACPC,KAAK,QACLE,QAASA,IAAM6D,KAAKK,SAAS,CAAEuiC,WAAY,KAAMpoC,UAEjDoB,EAAAA,EAAAA,KAACqd,EAAAA,MAAS,QAGlB,OAGZpc,SAAUC,GAAKkD,KAAKK,SAAS,CAAEuiC,WAAY9lC,EAAEC,OAAOhC,QACpDkO,MAAOnN,EAAAA,KAAKM,EAAE,YACdoe,WAAY,WAAWxa,KAAKG,MAAMyiC,aAClC3oC,WAAS,KAEb2B,EAAAA,EAAAA,KAACY,EAAAA,UAAS,CACNX,MAAOrD,GAAO6pC,iBACd1lC,QAAQ,WACR5B,MAAOiF,KAAKG,MAAM0iC,aAClB7lC,UAAW,CACPC,MAAO,CACHC,aAAc8C,KAAKG,MAAM0iC,cACrBjnC,EAAAA,EAAAA,KAACuB,EAAAA,eAAc,CAAC/D,SAAS,MAAKoB,UAC1BoB,EAAAA,EAAAA,KAACI,EAAAA,WAAU,CACPC,KAAK,QACLE,QAASA,IAAM6D,KAAKK,SAAS,CAAEwiC,aAAc,KAAMroC,UAEnDoB,EAAAA,EAAAA,KAACqd,EAAAA,MAAS,QAGlB,OAGZpc,SAAUC,GAAKkD,KAAKK,SAAS,CAAEwiC,aAAc/lC,EAAEC,OAAOhC,QACtDkO,MAAOnN,EAAAA,KAAKM,EAAE,cACdnC,WAAS,KAEb2B,EAAAA,EAAAA,KAACY,EAAAA,UAAS,CACNX,MAAOrD,GAAO6pC,iBACd1lC,QAAQ,WACR5B,MAAOiF,KAAKG,MAAM+iC,aAClBlmC,UAAW,CACPC,MAAO,CACHC,aAAc8C,KAAKG,MAAM+iC,cACrBtnC,EAAAA,EAAAA,KAACuB,EAAAA,eAAc,CAAC/D,SAAS,MAAKoB,UAC1BoB,EAAAA,EAAAA,KAACI,EAAAA,WAAU,CACPC,KAAK,QACLE,QAASA,IAAM6D,KAAKK,SAAS,CAAE6iC,aAAc,KAAM1oC,UAEnDoB,EAAAA,EAAAA,KAACqd,EAAAA,MAAS,QAGlB,OAGZpc,SAAUC,GAAKkD,KAAKK,SAAS,CAAE6iC,aAAcpmC,EAAEC,OAAOhC,QACtDkO,MAAOnN,EAAAA,KAAKM,EAAE,qBACdnC,WAAS,KAEbqB,EAAAA,EAAAA,MAAC+f,EAAAA,YAAW,CACRxf,MAAOrD,GAAO6pC,iBACdpoC,WAAS,EAAAO,SAAA,EAEToB,EAAAA,EAAAA,KAAC0f,EAAAA,WAAU,CAAA9gB,SAAEsB,EAAAA,KAAKM,EAAE,iBACpBR,EAAAA,EAAAA,KAAC2f,EAAAA,OAAM,CACH5e,QAAQ,WACR5B,MAAOiF,KAAKG,MAAMgjC,aAClBtmC,SAAUC,GAAKkD,KAAKK,SAAS,CAAE8iC,aAAcrmC,EAAEC,OAAOhC,QAASP,SAE9Dg6B,GAAehzB,KAAIsoB,IAChBxuB,EAAAA,EAAAA,MAACkgB,EAAAA,SAAQ,CAELzgB,MAAO+uB,EAAGtvB,SAAA,CAETsB,EAAAA,KAAKM,EAAE0tB,IACRxuB,EAAAA,EAAAA,MAAA,QAAMO,MAAOrD,GAAOk2B,YAAYl0B,SAAA,CAAC,IAAEsvB,EAAG,SAJjCA,WASrBluB,EAAAA,EAAAA,KAACY,EAAAA,UAAS,CACNX,MAAOrD,GAAO6pC,iBACd1lC,QAAQ,WACR5B,MAAOiF,KAAKG,MAAM8iC,aAClBjmC,UAAW,CACPC,MAAO,CACHC,aAAc8C,KAAKG,MAAM8iC,cACrBrnC,EAAAA,EAAAA,KAACuB,EAAAA,eAAc,CAAC/D,SAAS,MAAKoB,UAC1BoB,EAAAA,EAAAA,KAACI,EAAAA,WAAU,CACPC,KAAK,QACLE,QAASA,IAAM6D,KAAKK,SAAS,CAAE4iC,aAAc,KAAMzoC,UAEnDoB,EAAAA,EAAAA,KAACqd,EAAAA,MAAS,QAGlB,OAGZpc,SAAUC,GAAKkD,KAAKK,SAAS,CAAE4iC,aAAcnmC,EAAEC,OAAOhC,QACtDkO,MAAOnN,EAAAA,KAAKM,EAAE,eACdnC,WAAS,KAEb2B,EAAAA,EAAAA,KAACY,EAAAA,UAAS,CACNG,QAAQ,WACRd,MAAO,IAAKrD,GAAO6pC,oBAAqB7pC,GAAOiB,OAC/CwP,MAAOnN,EAAAA,KAAKM,EAAE,SACdgH,KAAK,QACLrI,MAAOiF,KAAKG,MAAMojC,cAClB1mC,SAAUC,GAAKkD,KAAKK,SAAS,CAAEkjC,cAAezmC,EAAEC,OAAOhC,WAE3Da,EAAAA,EAAAA,KAAC+M,EAAAA,iBAAgB,CACb9M,MAAO,IAAKrD,GAAO6pC,iBAAkB9zB,WAAY,IACjD1F,SACIjN,EAAAA,EAAAA,KAACkN,EAAAA,SAAQ,CACLC,mBACgC7M,IAA5B8D,KAAKG,MAAM4iC,cAA0D,OAA5B/iC,KAAKG,MAAM4iC,aAExD/5B,QAAShJ,KAAKG,MAAM4iC,aACpBlmC,SAAUC,IACN,MAAM40B,EAA4C,CAC9CqR,aAAcjmC,EAAEC,OAAOiM,UAGG,IAA1B0oB,EAASqR,eAAuD,IAA7B/iC,KAAKG,MAAM6iC,gBAC9CtR,EAASsR,eAAgB,GAE7BhjC,KAAKK,SAASqxB,EAAmC,IAI7DzoB,MAAOnN,EAAAA,KAAKM,EAAE,iBAElBR,EAAAA,EAAAA,KAAC+M,EAAAA,iBAAgB,CACb9M,MAAOrD,GAAO6pC,iBACdx5B,SACIjN,EAAAA,EAAAA,KAACkN,EAAAA,SAAQ,CACLC,mBACiC7M,IAA7B8D,KAAKG,MAAM6iC,eAA4D,OAA7BhjC,KAAKG,MAAM6iC,cAEzDh6B,QAAShJ,KAAKG,MAAM6iC,cACpBnmC,SAAUC,IACN,MAAM40B,EAA4C,CAC9CsR,cAAelmC,EAAEC,OAAOiM,UAGE,IAA1B0oB,EAASqR,eAAuD,IAA7B/iC,KAAKG,MAAM6iC,gBAC9CtR,EAASqR,cAAe,GAE5B/iC,KAAKK,SAASqxB,EAAmC,IAI7DzoB,MAAOnN,EAAAA,KAAKM,EAAE,kBAElBR,EAAAA,EAAAA,KAAC+M,EAAAA,iBAAgB,CACb9M,MAAOrD,GAAO6pC,iBACdx5B,SACIjN,EAAAA,EAAAA,KAACkN,EAAAA,SAAQ,CACLE,QAAShJ,KAAKG,MAAMijC,mBACpBvmC,SAAUC,GAAKkD,KAAKK,SAAS,CAAE+iC,mBAAoBtmC,EAAEC,OAAOiM,YAGpEC,MAAOnN,EAAAA,KAAKM,EAAE,2BAEjB4D,KAAKG,MAAMijC,oBAAsBpjC,KAAKG,MAAM4iC,cACzCnnC,EAAAA,EAAAA,KAACY,EAAAA,UAAS,CACNX,MAAOrD,GAAO6pC,iBACd1lC,QAAQ,WACR5B,MAAOiF,KAAKG,MAAMkjC,oBAClBxmC,SAAUC,GAAKkD,KAAKK,SAAS,CAAEgjC,oBAAqBvmC,EAAEC,OAAOhC,QAC7DkO,MAAOnN,EAAAA,KAAKM,EAAE,gBACdoe,WAAY,GAAG1e,EAAAA,KAAKM,EAAE,qCACtBY,UAAW,CACPC,MAAO,CACHC,aACI8C,KAAKG,MAAMkjC,qBAA0D,QAAnCrjC,KAAKG,MAAMkjC,qBACzCznC,EAAAA,EAAAA,KAACuB,EAAAA,eAAc,CAAC/D,SAAS,MAAKoB,UAC1BoB,EAAAA,EAAAA,KAACI,EAAAA,WAAU,CACPC,KAAK,QACLE,QAASA,IAAM6D,KAAKK,SAAS,CAAEgjC,oBAAqB,QAAS7oC,UAE7DoB,EAAAA,EAAAA,KAACqd,EAAAA,MAAS,QAGlB,KACRsf,gBACI38B,EAAAA,EAAAA,KAACuB,EAAAA,eAAc,CAAC/D,SAAS,QAAOoB,UAC5BoB,EAAAA,EAAAA,KAAC48B,EAAAA,OAAM,CAAC38B,MAAOrD,GAAOg1B,eAKtCvzB,WAAS,IAEb,KACH+F,KAAKG,MAAMijC,oBAAsBpjC,KAAKG,MAAM6iC,eACzCpnC,EAAAA,EAAAA,KAACY,EAAAA,UAAS,CACNX,MAAOrD,GAAO6pC,iBACd1lC,QAAQ,WACR5B,MAAOiF,KAAKG,MAAMmjC,qBAClBzmC,SAAUC,GAAKkD,KAAKK,SAAS,CAAEijC,qBAAsBxmC,EAAEC,OAAOhC,QAC9DkO,MAAOnN,EAAAA,KAAKM,EAAE,iBACdY,UAAW,CACPC,MAAO,CACHC,aACI8C,KAAKG,MAAMmjC,sBAA4D,QAApCtjC,KAAKG,MAAMmjC,sBAC1C1nC,EAAAA,EAAAA,KAACuB,EAAAA,eAAc,CAAC/D,SAAS,MAAKoB,UAC1BoB,EAAAA,EAAAA,KAACI,EAAAA,WAAU,CACPC,KAAK,QACLE,QAASA,IAAM6D,KAAKK,SAAS,CAAEijC,qBAAsB,QAAS9oC,UAE9DoB,EAAAA,EAAAA,KAACqd,EAAAA,MAAS,QAGlB,KACRsf,gBACI38B,EAAAA,EAAAA,KAACuB,EAAAA,eAAc,CAAC/D,SAAS,QAAOoB,UAC5BoB,EAAAA,EAAAA,KAAC48B,EAAAA,OAAM,CAAC38B,MAAOrD,GAAOg1B,eAKtChT,WAAY,GAAG1e,EAAAA,KAAKM,EAAE,qCACtBnC,WAAS,IAEb,SAERqB,EAAAA,EAAAA,MAAC+B,EAAAA,cAAa,CAAA7C,SAAA,EACVoB,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACHX,QAAQ,YACRc,UAAWuC,KAAKG,MAAMyiC,cAAgB5iC,KAAKZ,MAAM2C,QAAQ,WAAW/B,KAAKG,MAAMyiC,cAC/EzmC,QAASiP,UACL,MAAMpF,EAAsB,CACxB9C,IAAK,WAAWlD,KAAKG,MAAMyiC,aAC3Bx/B,KAAM,QACN1B,OAAQ,CACJoY,KAAM9Z,KAAKG,MAAM0iC,aACjBz/B,KAAMpD,KAAKZ,MAAM4G,IAAItE,OAAO0B,KAC5BisB,MAAO,CACH5tB,GAAIzB,KAAKZ,MAAM4G,IAAI9C,MAG3BtB,OAAQ,CAAC,GAET5B,KAAKG,MAAM+iC,eACXl9B,EAAItE,OAAO45B,KAAOt7B,KAAKG,MAAM+iC,cAE7BljC,KAAKG,MAAMgjC,eACXn9B,EAAItE,OAAO0B,KAAOpD,KAAKG,MAAMgjC,cAE7BnjC,KAAKG,MAAM8iC,eACXj9B,EAAItE,OAAOmP,KAAO7Q,KAAKG,MAAM8iC,mBAED/mC,IAA5B8D,KAAKG,MAAM4iC,cAA0D,OAA5B/iC,KAAKG,MAAM4iC,eACpD/8B,EAAItE,OAAO4tB,KAAOtvB,KAAKG,MAAM4iC,mBAEA7mC,IAA7B8D,KAAKG,MAAM6iC,eAA4D,OAA7BhjC,KAAKG,MAAM6iC,gBACrDh9B,EAAItE,OAAOkqB,MAAQ5rB,KAAKG,MAAM6iC,eAE9BhjC,KAAKG,MAAMojC,gBACXv9B,EAAItE,OAAOjI,MAAQuG,KAAKG,MAAMojC,eAE9BvjC,KAAKG,MAAMqjC,eACXx9B,EAAItE,OAAOtH,KAAO4F,KAAKG,MAAMqjC,cAE7BxjC,KAAKG,MAAMijC,sBAEa,IAApBp9B,EAAItE,OAAO4tB,MACXtvB,KAAKG,MAAMkjC,qBACwB,QAAnCrjC,KAAKG,MAAMkjC,sBAEXr9B,EAAItE,OAAO2tB,MAAMC,KAAOtvB,KAAKG,MAAMkjC,sBAGd,IAArBr9B,EAAItE,OAAOkqB,OACX5rB,KAAKG,MAAMmjC,sBACyB,QAApCtjC,KAAKG,MAAMmjC,uBAEXt9B,EAAItE,OAAO2tB,MAAMzD,MAAQ5rB,KAAKG,MAAMmjC,6BAGtCtjC,KAAKZ,MAAM+C,OAAOgJ,UAAUnF,EAAI9C,IAAK8C,GAC3ChG,KAAKK,SAAS,CAAEsiC,iBAAiB,IACjC3iC,KAAKZ,MAAMskC,WAAW19B,EAAI9C,IAAK,KAC/BlD,KAAKZ,MAAM7E,SAAS,EAExBgD,WAAW3B,EAAAA,EAAAA,KAAC+nC,EAAAA,QAAO,IACnBlqC,MAAM,UAASe,SAEdwF,KAAKZ,MAAMhD,EAAE,aAElBR,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACHX,QAAQ,YACRR,QAASA,IAAM6D,KAAKK,SAAS,CAAEsiC,iBAAiB,IAChDplC,WAAW3B,EAAAA,EAAAA,KAACgoC,EAAAA,MAAK,IACjBnqC,MAAM,OAAMe,SAEXwF,KAAKZ,MAAMhD,EAAE,iBA1TnB,IA+Tf,CAEAqP,MAAAA,GACI,OACInQ,EAAAA,EAAAA,MAACC,EAAAA,OAAM,CAEHC,MAAM,EACN7C,SAAS,KACT4B,QAASA,IAAMyF,KAAKZ,MAAM7E,UAC1BN,WAAS,EACT,kBAAgB,4BAA2BO,SAAA,CAE1CwF,KAAKyjC,qBACN7nC,EAAAA,EAAAA,KAACD,EAAAA,YAAW,CAAC8F,GAAG,4BAA2BjH,SACtCwF,KAAKG,MAAMuiC,cAAcxiC,OACpBpE,EAAAA,KAAKM,EAAE,kCACPN,EAAAA,KAAKM,EAAE,mDAEjBR,EAAAA,EAAAA,KAACU,EAAAA,cAAa,CAAA9B,UACVc,EAAAA,EAAAA,MAACuoC,EAAAA,SAAQ,CAAChoC,MAAO,CAAElD,SAAU,KAAM6B,SAAA,CAC9BwF,KAAKG,MAAMuiC,cAAclhC,KAAIsiC,IAC1BxoC,EAAAA,EAAAA,MAACkgB,EAAAA,SAAQ,CACL3f,MAAOrD,GAAO8pC,YAEdnmC,QAASA,IAAM6D,KAAKZ,MAAMskC,WAAWI,GAAStpC,SAAA,EAE9CoB,EAAAA,EAAAA,KAACmoC,EAAAA,aAAY,CAAAvpC,UACToB,EAAAA,EAAAA,KAACooC,EAAAA,KAAQ,CAAC9qC,SAAS,aAEvB0C,EAAAA,EAAAA,KAACqoC,EAAAA,aAAY,CAAAzpC,SAAEspC,MANVA,MASbxoC,EAAAA,EAAAA,MAACkgB,EAAAA,SAAQ,CACLrf,QAASA,IAAM6D,KAAKK,SAAS,CAAEsiC,iBAAiB,IAChDjnC,GAAIlD,GAAO+pC,YAAY/nC,SAAA,EAEvBoB,EAAAA,EAAAA,KAACmoC,EAAAA,aAAY,CAAAvpC,UACToB,EAAAA,EAAAA,KAAC+nC,EAAAA,QAAO,CAACzqC,SAAS,aAEtB0C,EAAAA,EAAAA,KAACqoC,EAAAA,aAAY,CAAAzpC,SAAEsB,EAAAA,KAAKM,EAAE,wCAIlCR,EAAAA,EAAAA,KAACyB,EAAAA,cAAa,CAAA7C,UACVoB,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACHX,QAAQ,YACRR,QAASA,IAAM6D,KAAKZ,MAAM7E,UAC1BgD,WAAW3B,EAAAA,EAAAA,KAACgoC,EAAAA,MAAK,IACjBnqC,MAAM,OAAMe,SAEXwF,KAAKZ,MAAMhD,EAAE,eA7ClB,YAkDhB,EAGJ,UAAe2P,EAAAA,EAAAA,YAAf,CAA2By2B,ICzdrB0B,GAAgBC,EAAAA,OAChB3rC,GAA8C,CAChD8kB,WAAY,CACRtkB,YAAa,GAEjBorC,UAAW,CACP3qC,MAAO,WAEXgI,GAAI,CACAyrB,UAAW,UAEfmX,WAAY,CACRx2B,WAAY,WA2BpB,MAAMy2B,WAAgBplC,EAAAA,UASlBC,WAAAA,CAAYC,GACRE,MAAMF,GAAO,KATA8vB,gBAAU,OAEnBqV,aAAO,OAEEnoC,OAAC,OAEDooC,eAAS,OAkC1BC,UAAY,CAACC,EAAcC,EAAWC,SACrB1oC,IAATyoC,EACO3kC,KAAKZ,MAAMhD,EAAEsoC,EAAMC,EAAMC,IAG/B5kC,KAAKwkC,UAAUE,KAChB1kC,KAAKwkC,UAAUE,GAAQ1kC,KAAKZ,MAAMhD,EAAEsoC,IAGjC1kC,KAAKwkC,UAAUE,IAtCtB1kC,KAAKkvB,WAAa,eAElB,MAAM2V,GACC9jC,OAAeC,eAA6BD,OAAOE,cAAcC,QAChE,GAAGlB,KAAKkvB,YAAc,kBACrB,KAET,IACIlvB,KAAKukC,QAAU1jC,KAAKC,MAAM+jC,EAC9B,CAAE,MACE7kC,KAAKukC,QAAU,CAAC,CACpB,CAEA,MAAMlyB,GACCtR,OAAeC,eAA6BD,OAAOE,cAAcC,QAChE,GAAGlB,KAAKkvB,YAAc,mBACrB,GAETlvB,KAAKG,MAAQ,CACTkS,WACAyH,KAAM,GACNgrB,MAAO,GACPC,iBAAkB,MAGtB/kC,KAAK5D,EAAI4D,KAAKykC,UACdzkC,KAAKwkC,UAAY,CAAC,CACtB,CAcAzrB,QAAAA,CAASisB,GACL,MAAMvjC,EAAKzB,KAAKG,MAAM4kC,iBAAiBtjC,GACnCujC,GACAhlC,KAAKZ,MAAM+C,OACN8iC,WAAWxjC,GAAI,GACfQ,MAAK,IAAMjC,KAAKK,SAAS,CAAEykC,MAAO9kC,KAAK5D,EAAE,mBACzCu9B,OAAM78B,GAAKiE,OAAOoD,MAAM,yBAAyBrH,OAEtDkD,KAAKK,SAAS,CAAE0kC,iBAAkB,SAElC/kC,KAAKZ,MAAM+C,OAAO+iC,UAAUzjC,GAAI,GAAOk4B,OAAM78B,GAAKiE,OAAOoD,MAAM,yBAAyBrH,OACxFkD,KAAKK,SAAS,CAAE0kC,iBAAkB,OAE1C,CAEAI,WAAAA,GACI,OACIvpC,EAAAA,EAAAA,KAACwpC,EAAAA,SAAQ,CAELC,aAAc,CACVC,SAAU,SACVC,WAAY,SAEhB/pC,OAAQwE,KAAKG,MAAM2kC,MACnBU,iBAAkB,IAClBjrC,QAASA,IAAMyF,KAAKK,SAAS,CAAEykC,MAAO,KACtCW,QAASzlC,KAAKG,MAAM2kC,MACpB31B,QACIvT,EAAAA,EAAAA,KAACI,EAAAA,WAAU,CACPC,KAAK,QACL,aAAW,QACXxC,MAAM,UACN0C,QAASA,IAAM6D,KAAKK,SAAS,CAAEykC,MAAO,KAAMtqC,UAE5CoB,EAAAA,EAAAA,KAACmxB,EAAAA,OAAU,CAAC7zB,SAAS,aAhBzB,QAqBhB,CAEAwsC,kBAAAA,GACI,OAAK1lC,KAAKG,MAAM4kC,kBAIZzpC,EAAAA,EAAAA,MAACC,EAAAA,OAAM,CAEH5C,SAAS,KACT6C,MAAM,EACNjB,QAASA,IAAMyF,KAAKK,SAAS,CAAE0kC,iBAAkB,OACjD,kBAAgB,6BAChB,mBAAiB,mCAAkCvqC,SAAA,EAEnDc,EAAAA,EAAAA,MAACK,EAAAA,YAAW,CAAC8F,GAAG,6BAA4BjH,SAAA,CACvCwF,KAAKG,MAAM4kC,iBAAiBY,YAAc3lC,KAAK5D,EAAE,oBAAsB4D,KAAK5D,EAAE,iBAAiB,IAAE,KAClGR,EAAAA,EAAAA,KAAA,QAAMC,MAAOrD,GAAOiJ,GAAGjH,SAAEwF,KAAKG,MAAM4kC,iBAAiBtjC,SAEzD7F,EAAAA,EAAAA,KAACU,EAAAA,cAAa,CAAA9B,UACVoB,EAAAA,EAAAA,KAACid,EAAAA,kBAAiB,CAAAre,SACbwF,KAAK5D,EAAE,sBAchBd,EAAAA,EAAAA,MAAC+B,EAAAA,cAAa,CAAA7C,SAAA,CACTwF,KAAKG,MAAM4kC,iBAAiBY,aACzB/pC,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACHX,QAAQ,YACRlD,MAAM,OACNiC,GAAI,CAAE,oBAAqBlD,GAAO6rC,YAClCloC,QAASA,IAAM6D,KAAK+Y,UAAS,GAC7Bxb,WAAW3B,EAAAA,EAAAA,KAACsoC,GAAa,CAACroC,MAAOrD,GAAO4rC,YAAc5pC,SAErDwF,KAAK5D,EAAE,uBAAwB4D,KAAKG,MAAM4kC,iBAAiBrH,iBAEhE,KACH19B,KAAKG,MAAM4kC,iBAAiBa,QACzBhqC,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACHX,QAAQ,YACRjB,GAAI,CAAE,oBAAqBlD,GAAO6rC,YAClCloC,QAASA,IAAM6D,KAAK+Y,UAAS,GAC7Btf,MAAM,UACN8D,WAAW3B,EAAAA,EAAAA,KAACuoC,EAAAA,OAAa,IACzBznC,WAAS,EAAAlC,SAERwF,KAAK5D,EAAE,qBAEZ,MACJR,EAAAA,EAAAA,KAAC0B,EAAAA,OAAM,CACHX,QAAQ,YACRlD,MAAM,OACN0C,QAASA,IAAM6D,KAAKK,SAAS,CAAE0kC,iBAAkB,OACjDxnC,WAAW3B,EAAAA,EAAAA,KAACmxB,EAAAA,OAAU,IAAIvyB,SAEzBwF,KAAK5D,EAAE,oBAzDZ,UAJD,IAkEf,CAEAqP,MAAAA,GACI,MAAO,CACHzL,KAAKmlC,eACLvpC,EAAAA,EAAAA,KAACiqC,EAAAA,cAAa,CAEV3W,WAAW,QACX4W,cAAe9lC,KAAKZ,MAAM0mC,cAC1BC,OAAQ/lC,KAAKZ,MAAM2mC,OACnBC,eAAgBhmC,KAAKukC,QACrB0B,WAAYjmC,KAAKZ,MAAM6mC,WACvBpqC,MAAO,CAAEiC,MAAO,OAAQH,OAAQ,QAChCwE,OAAQnC,KAAKZ,MAAM+C,OACnBkQ,SAAUrS,KAAKG,MAAMkS,SACrByH,KAAM9Z,KAAKG,MAAM2Z,KACjB6B,WAAY3b,KAAKZ,MAAMuc,WACvBlS,aAAczJ,KAAKZ,MAAMqK,aACzBC,WAAY1J,KAAKZ,MAAMsK,WACvBtN,EAAG4D,KAAK5D,EACRsL,KAAM1H,KAAKZ,MAAMsI,KACjB2B,UAAWrJ,KAAKZ,MAAMiK,UACtBC,UAAWtJ,KAAKZ,MAAMkK,UACtB9P,MAAOwG,KAAKZ,MAAM5F,MAClB0sC,mBAAoB9f,EACpB+f,mBAAoBpd,EACpBqd,wBAAyBxX,EACzByX,sBAAuB7M,EACvB8M,sBAAuBjF,GACvBkF,yBAA0B/D,GAC1BgE,OAAQ9f,EAAAA,OACR+f,sBAAoB,EACpBC,eAAgBA,CAACjlC,EAAYkkC,EAAsBgB,EAAuBjJ,IACtE19B,KAAKK,SAAS,CACV0kC,iBAAkB,CACdtjC,KACAkkC,cACAC,OAAQe,EACRjJ,mBAIZkJ,gBAAkBC,IACd7mC,KAAKukC,QAAUsC,GACZ9lC,OAAeC,eAA6BD,OAAOE,cAAcgH,QAChE,GAAGjI,KAAKkvB,YAAc,gBACtBruB,KAAKsC,UAAU0jC,GAClB,EAELC,SAAWz0B,IACH1L,MAAMC,QAAQyL,IACXtR,OAAeC,eAA6BD,OAAOE,cAAcgH,QAChE,GAAGjI,KAAKkvB,YAAc,iBACtB7c,EAAS,IAAM,KAGhBtR,OAAeC,eAA6BD,OAAOE,cAAcgH,QAChE,GAAGjI,KAAKkvB,YAAc,iBACtB7c,GAAY,GAEpB,EAEJ00B,mBAAiB,EACjBC,kBAAgB,EAChBC,kBAAgB,EAChBC,oBAAkB,EAClBC,2BAAyB,EACzBC,eAAiBC,IACbzrC,EAAAA,EAAAA,KAAC0rC,GAAkB,CACfvlC,QAASslC,EAAQtlC,QACjB4Z,WAAY3b,KAAKZ,MAAMuc,WACvBxQ,UAAWA,CAAC1J,EAAIiD,IACZ1E,KAAKZ,MAAM+C,OAAOgJ,UAAU1J,EAAIiD,GAAMi1B,OAAMz1B,GAASnD,OAAOoD,MAAMD,KAEtEmO,SAAUg1B,EAAQlnC,MAAMonC,YAAY9lC,GACpC4vB,YAAagW,EAAQlnC,MAAMonC,YAAYlW,YACvC+I,iBAAkBiN,EAAQlnC,MAAMonC,YAAYnN,iBAC5C7/B,QAASA,IAAM8sC,EAAQhnC,SAAS,CAAEknC,YAAa,OAC/C5sC,QAASA,IAAM0sC,EAAQhnC,SAAS,CAAEknC,YAAa,SAGvDC,yBAA0BA,CAACH,EAA6BI,KACpD7rC,EAAAA,EAAAA,KAAC8rC,GAAyB,CACtBluC,MAAOwG,KAAKZ,MAAM5F,MAClB8P,UAAWtJ,KAAKZ,MAAMkK,UACtBwzB,aAAcA,CAACr7B,EAAYiD,KACvB1E,KAAKZ,MAAM+C,OAAO26B,aAAar7B,EAAIiD,GAAMi1B,OAAMz1B,GAASnD,OAAOoD,MAAMD,KAErEujC,EAAQE,WAAa,IAAI,EAE7Bt1B,SAAUg1B,EAAQlnC,MAAMkS,SAAS,GAEjC0qB,aAAc0K,EAAQzhC,IAAM,GAAKyhC,EAAQhmC,GACzCM,QAASslC,EAAQtlC,QACjB3F,EAAG4D,KAAK5D,EACR7B,QAASA,IAAM8sC,EAAQhnC,SAAS,CAAEunC,mBAAmB,EAAOC,yBAA0B,OACtFltC,QAASA,IAAM0sC,EAAQhnC,SAAS,CAAEunC,mBAAmB,EAAOC,yBAA0B,UA1F1F,WA8FR7nC,KAAK0lC,qBAEb,EAGJ,UAAe35B,EAAAA,EAAAA,YAAf,CAA2Bu4B,G","sources":["components/CustomModal.tsx","components/Object/ObjectCustomEditor.tsx","components/Object/utils.tsx","components/Object/ObjectHistoryData.tsx","components/Object/ObjectChart.tsx","dialogs/ObjectCustomDialog.tsx","components/Object/ObjectBrowserValue.tsx","components/Object/ObjectBrowserEditObject.tsx","components/Object/ObjectBrowserEditRole.tsx","dialogs/ObjectAddNewObject.tsx","dialogs/ObjectEditOfAccessControl.tsx","dialogs/ObjectViewFileDialog.tsx","dialogs/ObjectAliasEditor.tsx","tabs/Objects.tsx"],"sourcesContent":["import React, { useEffect, useState, type JSX } from 'react';\n\nimport {\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n TextField,\n Button,\n InputAdornment,\n type Breakpoint,\n} from '@mui/material';\n\nimport { Check as CheckIcon, Close as CloseIcon, Language as LanguageIcon } from '@mui/icons-material';\n\nimport { I18n, type IobTheme, Utils } from '@iobroker/adapter-react-v5';\n\nconst styles: Record<string, any> = {\n modalDialog: {\n minWidth: 400,\n maxWidth: 800,\n },\n overflowHidden: {\n display: 'flex',\n overflow: 'hidden',\n },\n titleIcon: {\n marginRight: 5,\n },\n content: {\n fontSize: 16,\n },\n languageButton: {\n position: 'absolute',\n right: 8,\n top: 8,\n },\n languageButtonActive: (theme: IobTheme) => ({\n color: theme.palette.primary.main,\n }),\n};\n\ninterface CustomModalProps {\n icon?: React.FC<{ style?: React.CSSProperties }>;\n onClose: () => void;\n children?: JSX.Element | JSX.Element[];\n title?: string;\n titleButtonClose?: string;\n titleButtonApply?: string;\n onApply?: (value: string | number) => void;\n fullWidth?: boolean;\n maxWidth?: Breakpoint;\n applyButton?: boolean;\n disableApplyIfNotChanged?: boolean;\n overflowHidden?: boolean;\n help?: string;\n noTranslation?: boolean;\n toggleTranslation?: () => void;\n textInput?: boolean;\n defaultValue?: string | number;\n progress?: boolean;\n disableApply?: boolean;\n theme: IobTheme;\n}\n\nconst CustomModal = ({\n toggleTranslation,\n noTranslation,\n title,\n fullWidth,\n help,\n maxWidth,\n progress,\n icon,\n disableApplyIfNotChanged,\n applyButton,\n onClose,\n children,\n titleButtonApply,\n titleButtonClose,\n onApply,\n textInput,\n defaultValue,\n overflowHidden,\n disableApply,\n theme,\n}: CustomModalProps): JSX.Element => {\n const [value, setValue] = useState(defaultValue);\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n let Icon: React.FC<{ style?: React.CSSProperties }> | null = null;\n\n if (icon) {\n Icon = icon;\n }\n\n const languageButtonActive = Utils.getStyle(theme, styles.languageButtonActive);\n\n return (\n <Dialog\n open={!0}\n maxWidth={maxWidth || 'md'}\n fullWidth={!!fullWidth}\n disableEscapeKeyDown={false}\n onClose={onClose}\n sx={{ '& .MuiPaper-root': styles.modalDialog /* paper: classes.background */ }}\n >\n {title && (\n <DialogTitle>\n {icon ? <Icon style={styles.titleIcon} /> : null}\n {title}\n {I18n.getLanguage() !== 'en' && toggleTranslation ? (\n <IconButton\n size=\"large\"\n style={{ ...styles.languageButton, ...(noTranslation ? languageButtonActive : undefined) }}\n onClick={() => toggleTranslation()}\n title={I18n.t('Disable/Enable translation')}\n >\n <LanguageIcon />\n </IconButton>\n ) : null}\n </DialogTitle>\n )}\n <DialogContent\n style={{ ...(overflowHidden ? styles.overflowHidden : undefined), ...styles.content, paddingTop: 8 }}\n >\n {textInput && (\n <TextField\n // className={className}\n autoComplete=\"off\"\n fullWidth\n autoFocus\n variant=\"standard\"\n size=\"medium\"\n // rows={10}\n multiline\n value={value}\n onChange={e => setValue(e.target.value)}\n slotProps={{\n input: {\n endAdornment: value ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => setValue('')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n // customValue\n />\n )}\n {children}\n {help ? <div>{help}</div> : null}\n </DialogContent>\n <DialogActions>\n {(applyButton === undefined || applyButton) && (\n <Button\n startIcon={<CheckIcon />}\n disabled={disableApply || progress || (disableApplyIfNotChanged && defaultValue === value)}\n onClick={() => onApply && onApply(textInput ? value : '')}\n variant=\"contained\"\n color=\"primary\"\n >\n {I18n.t(titleButtonApply || 'Ok')}\n </Button>\n )}\n <Button\n color=\"grey\"\n onClick={onClose}\n disabled={progress}\n variant=\"contained\"\n startIcon={<CloseIcon />}\n >\n {I18n.t(titleButtonClose || 'Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default CustomModal;\n","import React, { createRef, Component, type RefObject, type JSX } from 'react';\nimport JSON5 from 'json5';\n\nimport {\n LinearProgress,\n Accordion,\n AccordionSummary,\n AccordionDetails,\n Typography,\n Paper,\n FormControlLabel,\n Checkbox,\n} from '@mui/material';\n\n// Icons\nimport { ExpandMore as ExpandMoreIcon } from '@mui/icons-material';\n\nimport { withWidth, DialogError, DialogConfirm, type IobTheme } from '@iobroker/adapter-react-v5';\n\nimport { ConfigGeneric, JsonConfigComponent, type ConfigItemPanel } from '@iobroker/json-config';\nimport AdminUtils from '@/helpers/AdminUtils';\nimport type { BasicComponentProps } from '@/types';\n\nconst styles: Record<string, React.CSSProperties> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n },\n headingIcon: {\n marginRight: 5,\n width: 32,\n height: 32,\n },\n titleEnabled: {\n float: 'right',\n fontSize: 16,\n color: '#7ff57f',\n textTransform: 'uppercase',\n fontWeight: 'bold',\n paddingLeft: 20,\n },\n scrollDiv: {\n width: '100%',\n height: '100%', // `calc(100% - ${theme.mixins.toolbar.minHeight}px)`,\n overflow: 'auto',\n },\n fullWidth: {\n width: '100%',\n },\n enabledControl: {\n width: 130,\n display: 'inline-block',\n verticalAlign: 'top',\n },\n customControls: {\n width: 'calc(100% - 130px)',\n maxWidth: 800,\n display: 'inline-block',\n verticalAlign: 'top',\n paddingTop: 16,\n },\n\n accordionOdd: {\n // backgroundColor: 'rgba(128, 128, 128, 0.2)'\n },\n accordionEven: {\n backgroundColor: 'rgba(128, 128, 128, 0.1)',\n },\n\n accordionHeaderOdd: {\n backgroundColor: 'rgba(128, 128, 128, 0.2)',\n },\n accordionHeaderEven: {\n backgroundColor: 'rgba(128, 128, 128, 0.3)',\n },\n\n accordionHeaderEnabledOdd: {\n backgroundColor: 'rgba(128, 255, 128, 0.2)',\n },\n accordionHeaderEnabledEven: {\n backgroundColor: 'rgba(128, 255, 128, 0.2)',\n },\n\n enabledVisible: {\n display: 'inline-block',\n },\n enabledInvisible: {\n display: 'none',\n },\n};\n\nconst URL_PREFIX = '.'; // or './' or 'http://localhost:8081' for debug\n\ninterface ObjectCustomEditorProps extends BasicComponentProps {\n objects: Record<string, ioBroker.Object>;\n /** All adapter instances that support custom attribute */\n customsInstances: string[];\n objectIDs: string[];\n registerSaveFunc: (cb?: () => void) => void;\n onProgress: (progress: boolean) => void;\n onError: (err?: boolean) => void;\n data: Record<string, any>;\n originalData: Record<string, any>;\n systemConfig?: ioBroker.SystemConfigObject;\n onChange: (hasChanges?: boolean, update?: boolean) => void;\n reportChangedIds: (changedIds: string[]) => void;\n theme: IobTheme;\n}\n\ninterface ObjectCustomEditorState {\n newValues: Record<string, any>;\n loaded: boolean;\n hasChanges?: string;\n expanded: string[];\n progress?: number;\n maxOids: number;\n confirmed: boolean;\n showConfirmation: boolean;\n error?: boolean;\n systemConfig?: ioBroker.SystemConfigObject;\n}\n\ninterface JsonConfigStorage {\n json?: ConfigItemPanel | null;\n instanceObjs?: Record<string, ioBroker.InstanceObject>;\n disabled?: boolean;\n}\n\nclass ObjectCustomEditor extends Component<ObjectCustomEditorProps, ObjectCustomEditorState> {\n private readonly changedIds: string[];\n\n private readonly scrollDivRef: React.RefObject<HTMLDivElement>;\n\n private readonly jsonConfigs: Record<string, null | JsonConfigStorage>;\n\n private readonly refTemplate: Record<string, RefObject<HTMLDivElement>>;\n\n private readonly customObj: ioBroker.AnyObject;\n\n private commonConfig: Record<string, any> = {};\n\n private cb?: () => void;\n\n private cachedNewValues?: Record<string, any>;\n\n constructor(props: ObjectCustomEditorProps) {\n super(props);\n\n let expanded: string[];\n try {\n expanded = JSON.parse(\n ((window as any)._localStorage || window.localStorage).getItem('App.customsExpanded') || '[]',\n );\n } catch {\n expanded = [];\n }\n\n this.changedIds = [];\n\n this.state = {\n loaded: false,\n expanded,\n newValues: {},\n confirmed: false,\n showConfirmation: false,\n maxOids: 0,\n systemConfig: this.props.systemConfig,\n };\n\n this.scrollDivRef = createRef();\n\n this.jsonConfigs = {};\n\n this.refTemplate = {};\n this.props.customsInstances.map(id => (this.refTemplate[id] = createRef()));\n\n this.customObj =\n this.props.objectIDs.length > 1\n ? ({ common: { custom: {} }, native: {} } as ioBroker.AnyObject)\n : AdminUtils.deepClone(this.props.objects[this.props.objectIDs[0]] || null);\n\n if (this.customObj) {\n void this.loadAllCustoms().then(() => {\n this.commonConfig = this.getCommonConfig();\n this.setState({ loaded: true, newValues: {} });\n });\n }\n }\n\n async componentDidMount(): Promise<void> {\n if (!this.state.systemConfig) {\n this.setState({ systemConfig: await this.props.socket.getCompactSystemConfig() });\n }\n\n if (this.props.registerSaveFunc) {\n this.props.registerSaveFunc(this.onSave);\n }\n }\n\n componentWillUnmount(): void {\n if (this.props.registerSaveFunc) {\n this.props.registerSaveFunc();\n }\n }\n\n async loadAllCustoms(): Promise<void> {\n const promises: Promise<void>[] = [];\n for (const id of this.props.customsInstances) {\n if (id === '_') {\n continue;\n }\n\n const adapter = id.replace(/\\.\\d+$/, '').replace('system.adapter.', '');\n if (this.jsonConfigs[adapter] === undefined) {\n this.jsonConfigs[adapter] = null;\n promises.push(this.getCustomTemplate(adapter));\n }\n }\n\n await Promise.all(promises);\n\n this.props.customsInstances.forEach(id => {\n const adapter = id.replace(/\\.\\d+$/, '').replace('system.adapter.', '');\n if (this.jsonConfigs[adapter]) {\n this.jsonConfigs[adapter].instanceObjs = this.jsonConfigs[adapter].instanceObjs || {};\n this.jsonConfigs[adapter].instanceObjs[id] = {\n _id: id as `system.adapter.${string}.${number}`,\n common: JSON.parse(JSON.stringify(this.props.objects[`system.adapter.${id}`]?.common)),\n native: JSON.parse(JSON.stringify(this.props.objects[`system.adapter.${id}`]?.native)),\n type: 'instance',\n instanceObjects: [],\n objects: [],\n };\n }\n });\n }\n\n async getCustomTemplate(adapter: string): Promise<void> {\n const ad = this.props.objects[`system.adapter.${adapter}`]\n ? AdminUtils.deepClone(this.props.objects[`system.adapter.${adapter}`])\n : null;\n\n if (!ad) {\n console.error(`Cannot find adapter \"${adapter}\"`);\n return;\n }\n AdminUtils.fixAdminUI(ad);\n\n if (ad.common?.adminUI.custom === 'json') {\n try {\n const exist = await this.props.socket.fileExists(`${adapter}.admin`, 'jsonCustom.json5');\n if (exist) {\n await this.props.socket.readFile(`${adapter}.admin`, 'jsonCustom.json5');\n }\n let jsonText: string;\n const json: {\n file: string;\n mimeType: string;\n } = await this.props.socket.readFile(`${adapter}.admin`, 'jsonCustom.json');\n\n if (json.file !== undefined) {\n jsonText = json.file;\n } else {\n // @ts-expect-error deprecated, but still possible\n jsonText = json;\n }\n let jsonSchema: ConfigItemPanel;\n try {\n jsonSchema = JSON5.parse(jsonText);\n this.jsonConfigs[adapter] = this.jsonConfigs[adapter] || {};\n this.jsonConfigs[adapter].json = jsonSchema;\n } catch (e) {\n console.error(`Cannot parse jsonConfig of ${adapter}: ${e}`);\n window.alert(`Cannot parse jsonConfig of ${adapter}: ${e}`);\n }\n\n await JsonConfigComponent.loadI18n(this.props.socket, jsonSchema.i18n, adapter);\n return;\n } catch (e1) {\n console.error(`Cannot load jsonConfig of ${adapter}: ${e1}`);\n window.alert(`Cannot load jsonConfig of ${adapter}: ${e1}`);\n }\n }\n console.error(`Adapter ${adapter} is not yet supported by this version of admin`);\n window.alert(`Adapter ${adapter} is not yet supported by this version of admin`);\n }\n\n // See configGeneric _executeCustom\n _executeCustom(\n func: string | { func: string; alsoDependsOn: string[] },\n data: Record<string, any>,\n customObj: Record<string, any>,\n instanceObj: ioBroker.InstanceObject,\n items: Record<string, any>,\n attr: string,\n processed: string[],\n ): boolean | undefined {\n if (processed.includes(attr)) {\n return undefined;\n }\n processed.push(attr);\n\n let alsoDependsOn: string[] = [];\n let strFunc: string;\n\n if (func && typeof func === 'object') {\n alsoDependsOn = func.alsoDependsOn || [];\n if (typeof alsoDependsOn === 'string') {\n alsoDependsOn = [alsoDependsOn];\n }\n strFunc = func.func;\n } else {\n strFunc = func as string;\n }\n\n alsoDependsOn.forEach(_attr => {\n if (!items[_attr]) {\n console.error(`[JsonConfigComponent] attribute \"${_attr}\" does not exist!`);\n } else if (!items[_attr].defaultFunc) {\n console.error(\n `[JsonConfigComponent] attribute \"${_attr}\" is not required to be includes in \"alsoDependsOn\" while has static value!`,\n );\n } else {\n const result = this._executeCustom(\n items[_attr].defaultFunc,\n data,\n customObj,\n instanceObj,\n items,\n _attr,\n processed,\n );\n if (result !== undefined) {\n data[_attr] = result;\n }\n }\n });\n\n if (!strFunc) {\n data[attr] = items[attr].default === undefined ? null : items[attr].default;\n } else {\n try {\n // eslint-disable-next-line no-new-func\n const f = new Function(\n 'data',\n 'originalData',\n '_system',\n 'instanceObj',\n 'customObj',\n '_socket',\n strFunc.includes('return') ? strFunc : `return ${strFunc}`,\n );\n data[attr] = f(\n data || this.props.data,\n this.props.originalData,\n this.props.systemConfig,\n instanceObj,\n customObj,\n this.props.socket,\n );\n } catch (e) {\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n console.error(`Cannot execute ${func}: ${e}`);\n data[attr] = !items[attr] || items[attr].default === undefined ? null : items[attr].default;\n }\n }\n\n return data[attr];\n }\n\n static flattenItems(items: Record<string, any>, _result: Record<string, any> = {}): Record<string, any> {\n if (items) {\n Object.keys(items).forEach(attr => {\n if (items[attr].items) {\n ObjectCustomEditor.flattenItems(items[attr].items, _result);\n } else {\n _result[attr] = items[attr];\n }\n });\n }\n\n return _result;\n }\n\n getDefaultValues(instance: string, obj: Record<string, any>): Record<string, any> {\n const defaultValues: Record<string, any> = { enabled: false };\n const adapter = instance.split('.')[0];\n\n if (this.jsonConfigs[adapter] && !this.jsonConfigs[adapter].disabled) {\n const items = ObjectCustomEditor.flattenItems(this.jsonConfigs[adapter].json.items);\n\n if (items) {\n const processed: string[] = [];\n const attrs = Object.keys(items).filter(attr => items[attr]);\n // first init simple defaults\n attrs.forEach(attr => {\n if (!items[attr].defaultFunc && items[attr].default !== undefined) {\n defaultValues[attr] = items[attr].default;\n }\n });\n\n // now init default that must be calculated\n attrs.forEach((attr): void => {\n if (items[attr].defaultFunc) {\n this._executeCustom(\n items[attr].defaultFunc,\n defaultValues,\n obj,\n this.jsonConfigs[adapter].instanceObjs[instance],\n items,\n attr,\n processed,\n );\n }\n });\n }\n }\n\n return defaultValues;\n }\n\n getCommonConfig(): Record<string, any> {\n const ids = this.props.objectIDs || [];\n const objects = this.props.objects;\n\n const commons: Record<string, any> = {};\n\n // calculate common settings\n this.props.customsInstances.forEach(inst => {\n const adapter = inst.split('.')[0];\n if (this.jsonConfigs[adapter] && this.jsonConfigs[adapter].disabled) {\n return;\n }\n commons[inst] = {};\n ids.forEach(id => {\n const customObj = objects[id];\n const custom = customObj?.common?.custom ? customObj.common.custom[inst] || null : null;\n\n if (custom) {\n Object.keys(custom).forEach(_attr => {\n // remove all temporary values\n if (_attr.startsWith('_')) {\n return;\n }\n if (commons[inst][_attr] === undefined) {\n commons[inst][_attr] = custom[_attr];\n } else if (commons[inst][_attr] !== custom[_attr]) {\n // different\n if (!Array.isArray(commons[inst][_attr])) {\n commons[inst][_attr] = [commons[inst][_attr]];\n }\n\n if (!commons[inst][_attr].includes(custom[_attr])) {\n commons[inst][_attr].push(custom[_attr]);\n }\n }\n });\n } else {\n // const adapter = inst.split('.')[0];\n // Calculate defaults for this object\n const _default = this.getDefaultValues(inst, customObj);\n _default.enabled = false;\n\n Object.keys(_default).forEach(_attr => {\n if (_attr.startsWith('_')) {\n return;\n }\n if (commons[inst][_attr] === undefined) {\n commons[inst][_attr] = _default[_attr];\n } else if (commons[inst][_attr] !== _default[_attr]) {\n // different\n if (!Array.isArray(commons[inst][_attr])) {\n commons[inst][_attr] = [commons[inst][_attr]];\n }\n\n if (!commons[inst][_attr].includes(_default[_attr])) {\n commons[inst][_attr].push(_default[_attr]);\n }\n }\n });\n }\n });\n\n // sort all \"different\" arrays\n Object.keys(commons[inst]).forEach(attr => {\n if (Array.isArray(commons[inst][attr])) {\n commons[inst][attr].sort();\n }\n });\n });\n\n return commons;\n }\n\n isChanged(newValues: Record<string, any>): string | undefined {\n newValues = newValues || this.state.newValues;\n return Object.keys(newValues).find(\n instance =>\n newValues[instance] === null ||\n (newValues[instance] && Object.keys(newValues[instance]).find(attr => !attr.startsWith('_'))),\n );\n }\n\n combineNewAndOld(instance: string, ignoreUnderscore = false): Record<string, any> {\n const data = { ...(this.commonConfig[instance] || {}), ...(this.state.newValues[instance] || {}) };\n\n if (ignoreUnderscore) {\n Object.keys(data).forEach(attr => {\n if (attr.startsWith('_')) {\n delete data[attr];\n }\n });\n }\n\n if (this.state.newValues[instance] === null) {\n data.enabled = false;\n }\n return data;\n }\n\n renderOneCustom(\n instance: string,\n instanceObj: ioBroker.InstanceObject,\n customObj: ioBroker.AnyObject,\n i: number,\n ): JSX.Element | null {\n const adapter = instance.split('.')[0];\n\n const icon = `${URL_PREFIX}/adapter/${adapter}/${this.props.objects[`system.adapter.${adapter}`].common.icon}`;\n // could be: true, false, [true, false]\n const enabled =\n this.state.newValues[instance] !== undefined &&\n (!this.state.newValues[instance] || this.state.newValues[instance].enabled !== undefined)\n ? !!(this.state.newValues[instance] && this.state.newValues[instance].enabled)\n : this.state.newValues[instance] === null\n ? false\n : this.commonConfig[instance].enabled;\n const isIndeterminate =\n Array.isArray(enabled) &&\n (!this.state.newValues[instance] || this.state.newValues[instance].enabled === undefined);\n\n const disabled = this.jsonConfigs[adapter]?.json?.disabled;\n\n const data = this.combineNewAndOld(instance);\n\n if (disabled && this.jsonConfigs[adapter].json.hidden === true) {\n return null;\n }\n\n if (typeof this.jsonConfigs[adapter].json.hidden === 'string') {\n // evaluate function\n if (\n this._executeCustom(\n this.jsonConfigs[adapter].json.hidden as string,\n data,\n customObj,\n instanceObj,\n this.jsonConfigs[adapter].json.items,\n 'enabled',\n [],\n )\n ) {\n return null;\n }\n }\n\n let help = null;\n if (disabled && this.jsonConfigs[adapter].json.help) {\n if (typeof this.jsonConfigs[adapter].json.help === 'object') {\n help =\n (this.jsonConfigs[adapter].json.help as Record<ioBroker.Languages, string>)[this.props.lang] ||\n (this.jsonConfigs[adapter].json.help as Record<ioBroker.Languages, string>).en;\n } else {\n help = this.props.t(this.jsonConfigs[adapter].json.help as string);\n }\n }\n\n return (\n <Accordion\n key={instance}\n id={`Accordion_${instance}`}\n style={i % 2 ? styles.accordionOdd : styles.accordionEven}\n expanded={this.state.expanded.includes(instance)}\n ref={this.refTemplate[instance]}\n onChange={() => {\n const expanded = [...this.state.expanded];\n const pos = expanded.indexOf(instance);\n if (pos === -1) {\n expanded.push(instance);\n } else {\n expanded.splice(pos, 1);\n }\n ((window as any)._localStorage || window.localStorage).setItem(\n 'App.customsExpanded',\n JSON.stringify(expanded),\n );\n if (pos === -1) {\n ((window as any)._localStorage || window.localStorage).setItem(\n 'App.customsLastExpanded',\n instance,\n );\n }\n this.setState({ expanded });\n }}\n >\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n data-id={instance}\n style={\n i % 2\n ? enabled\n ? styles.accordionHeaderEnabledOdd\n : styles.accordionHeaderOdd\n : enabled\n ? styles.accordionHeaderEnabledEven\n : styles.accordionHeaderEven\n }\n >\n <img\n src={icon}\n style={styles.headingIcon}\n alt=\"\"\n />\n <Typography style={styles.heading}>{this.props.t('Settings %s', instance)}</Typography>\n <div\n className=\"titleEnabled\"\n style={{\n ...styles.titleEnabled,\n ...(enabled ? styles.enabledVisible : styles.enabledInvisible),\n }}\n >\n {this.props.t('Enabled')}\n </div>\n </AccordionSummary>\n <AccordionDetails>\n <div style={styles.enabledControl}>\n <FormControlLabel\n style={styles.formControl}\n control={\n <Checkbox\n indeterminate={isIndeterminate}\n checked={!!enabled}\n disabled={!!disabled}\n onChange={e => {\n this.cachedNewValues = this.cachedNewValues || this.state.newValues;\n const newValues = AdminUtils.deepClone(this.cachedNewValues);\n\n newValues[instance] = newValues[instance] || {};\n if (isIndeterminate || e.target.checked) {\n newValues[instance].enabled = true;\n } else if (enabled) {\n if (this.commonConfig[instance].enabled) {\n newValues[instance] = null;\n } else {\n delete newValues[instance];\n }\n } else {\n delete newValues[instance];\n }\n this.cachedNewValues = newValues;\n this.setState({ newValues, hasChanges: this.isChanged(newValues) }, () => {\n this.cachedNewValues = undefined;\n if (this.props.onChange) {\n this.props.onChange(!!this.state.hasChanges);\n }\n });\n }}\n />\n }\n label={this.props.t('Enabled')}\n />\n </div>\n <div style={styles.customControls}>\n {!disabled && (enabled || isIndeterminate) && this.state.systemConfig ? (\n <JsonConfigComponent\n instanceObj={instanceObj}\n customObj={customObj as ioBroker.Object}\n custom\n adapterName={adapter}\n instance={parseInt(instance?.split('.').pop() ?? '0', 10) || 0}\n socket={this.props.socket}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n theme={this.props.theme}\n multiEdit={this.props.objectIDs.length > 1}\n schema={this.jsonConfigs[adapter].json}\n data={data}\n isFloatComma={this.props.systemConfig.common.isFloatComma}\n dateFormat={this.props.systemConfig.common.dateFormat}\n onError={(error: boolean) =>\n this.setState({ error }, () => this.props.onError && this.props.onError(error))\n }\n onValueChange={(attr: string, value: any) => {\n this.cachedNewValues = this.cachedNewValues || this.state.newValues;\n console.log(`${attr} => ${value}`);\n const newValues = AdminUtils.deepClone(this.cachedNewValues);\n newValues[instance] = newValues[instance] || {};\n if (\n JSON.stringify(ConfigGeneric.getValue(this.commonConfig?.[instance], attr)) ===\n JSON.stringify(value)\n ) {\n ConfigGeneric.setValue(newValues[instance], attr, null);\n if (!Object.keys(newValues[instance]).length) {\n delete newValues[instance];\n }\n } else {\n ConfigGeneric.setValue(newValues[instance], attr, value);\n }\n this.cachedNewValues = newValues;\n this.setState({ newValues, hasChanges: this.isChanged(newValues) }, () => {\n this.cachedNewValues = undefined;\n if (this.props.onChange) {\n this.props.onChange(!!this.state.hasChanges);\n }\n });\n }}\n />\n ) : null}\n\n {help}\n </div>\n </AccordionDetails>\n </Accordion>\n );\n }\n\n renderErrorMessage(): JSX.Element {\n return (\n !!this.state.error && (\n <DialogError\n title={this.props.t('Error')}\n text={this.state.error ? 'Error' : ''}\n onClose={() => this.setState({ error: false })}\n />\n )\n );\n }\n\n getObject(\n objects: Record<string, ioBroker.AnyObject>,\n oldObjects: Record<string, ioBroker.AnyObject>,\n id: string,\n ): Record<string, any> {\n if (objects[id]) {\n return Promise.resolve(objects[id]);\n }\n return this.props.socket.getObject(id).then((obj: ioBroker.AnyObject) => {\n oldObjects[id] = AdminUtils.deepClone(obj);\n objects[id] = obj;\n return obj;\n });\n }\n\n saveOneState(ids: string[], cb: () => void, _objects?: any, _oldObjects?: any): void {\n _objects = _objects || {};\n _oldObjects = _oldObjects || {};\n\n if (!ids?.length) {\n // save all objects\n const keys: string[] = Object.keys(_objects);\n if (!keys.length) {\n this.setState({ maxOids: 0 }, () => this.props.onProgress(false));\n if (cb) {\n cb();\n }\n } else {\n this.setState({\n progress: Math.round(((this.state.maxOids - keys.length) / this.state.maxOids) * 50) + 50,\n });\n const id = keys.shift();\n if (JSON.stringify(_objects[id].common) !== JSON.stringify(_oldObjects[id].common)) {\n if (!this.changedIds.includes(id)) {\n this.changedIds.push(id);\n }\n\n void this.props.socket.setObject(id, _objects[id]).then(async () => {\n delete _objects[id];\n delete _oldObjects[id];\n this.props.objects[id] = await this.props.socket.getObject(id);\n setTimeout(() => this.saveOneState(ids, cb, _objects, _oldObjects), 0);\n });\n return;\n }\n delete _objects[id];\n delete _oldObjects[id];\n setTimeout(() => this.saveOneState(ids, cb, _objects, _oldObjects), 0);\n }\n } else {\n const maxOids = this.state.maxOids || ids.length;\n\n if (this.state.maxOids === null) {\n this.setState({ maxOids: ids.length }, () => this.props.onProgress(true));\n }\n\n // 0 - 50\n this.setState({ progress: Math.round(((maxOids - ids.length) / maxOids) * 50) });\n\n const id = ids.shift();\n this.getObject(_objects, _oldObjects, id).then((obj: Record<string, any>) => {\n if (!obj) {\n window.alert(`Invalid object ${id}`);\n return;\n }\n\n // remove all disabled commons\n if (obj.common?.custom) {\n Object.keys(obj.common.custom).forEach(ins => {\n if (!obj.common.custom[ins] || !obj.common.custom[ins].enabled) {\n obj.common.custom[ins] = null;\n }\n });\n }\n\n const instances = Object.keys(this.state.newValues);\n\n for (let i = 0; i < instances.length; i++) {\n const instance = instances[i];\n // const adapter = instance.split('.')[0];\n const newValues = this.combineNewAndOld(instance, true);\n\n if (newValues.enabled === false) {\n if (obj.common?.custom?.[instance]) {\n obj.common.custom[instance] = null; // here must be null and not deleted, so controller can remove it\n }\n } else if (newValues.enabled) {\n obj.common = obj.common || {};\n if (Array.isArray(newValues.enabled)) {\n if (\n !obj.common.custom ||\n !obj.common.custom[instance] ||\n !obj.common.custom[instance].enabled\n ) {\n // leave this object disabled\n if (obj.common.custom && obj.common.custom[instance]) {\n obj.common.custom[instance] = null;\n }\n continue; // instance disabled\n }\n }\n\n obj.common.custom = obj.common.custom || {};\n\n if (!obj.common.custom[instance] || !obj.common.custom[instance].enabled) {\n // provide defaults\n const _default = this.getDefaultValues(instance, obj);\n obj.common.custom[instance] = JSON.parse(JSON.stringify(_default || {}));\n // remove all temporary values\n Object.keys(obj.common.custom[instance]).forEach(attr => {\n if (attr.startsWith('_')) {\n delete obj.common.custom[instance][attr];\n }\n });\n }\n\n const isMultiEdit = this.props.objectIDs.length > 1;\n\n obj.common.custom[instance].enabled = true;\n\n Object.keys(newValues).forEach(attr => {\n // if not different\n if (!attr.startsWith('_')) {\n // if we have an array, it is still the data of multiple different fields (multiEdit) do not override issue#2359\n if (Array.isArray(newValues[attr]) && isMultiEdit) {\n return;\n }\n\n obj.common.custom[instance][attr] = newValues[attr];\n }\n });\n }\n }\n\n setTimeout(() => this.saveOneState(ids, cb, _objects, _oldObjects), 0);\n });\n }\n }\n\n renderConfirmationDialog(): JSX.Element | null {\n if (!this.state.showConfirmation) {\n return null;\n }\n return (\n <DialogConfirm\n text={this.props.t(\n 'The changes will be applied to %s states. Are you sure?',\n this.props.objectIDs.length.toString(),\n )}\n ok={this.props.t('Yes')}\n onClose={result => {\n if (result) {\n this.setState({ showConfirmation: false, confirmed: true }, () => {\n const cb = this.cb;\n this.cb = undefined;\n this.onSave(cb);\n });\n } else {\n this.cb = undefined;\n this.setState({ showConfirmation: false });\n }\n }}\n />\n );\n }\n\n onSave = (cb?: () => void): void => {\n if (this.props.objectIDs.length > 10 && !this.state.confirmed) {\n this.cb = cb;\n this.setState({ showConfirmation: true });\n } else {\n this.saveOneState([...this.props.objectIDs], () => {\n this.cachedNewValues = {};\n this.commonConfig = this.getCommonConfig();\n this.setState({ confirmed: false, hasChanges: undefined, newValues: {} }, () => {\n this.props.reportChangedIds(this.changedIds);\n this.props.onChange(false, true);\n if (cb) {\n setTimeout(() => cb(), 100);\n }\n });\n });\n }\n };\n\n render(): JSX.Element {\n if (this.customObj === null) {\n return <div style={{ color: '#F55', fontSize: 32 }}>{this.props.t('Object does not exist!')}</div>;\n }\n if (!this.state.loaded) {\n return <LinearProgress />;\n }\n let index = 0;\n\n return (\n <Paper style={styles.paper}>\n {this.state.maxOids > 1 && (\n <LinearProgress\n color=\"secondary\"\n variant=\"determinate\"\n value={this.state.progress}\n />\n )}\n <div\n style={styles.scrollDiv}\n ref={this.scrollDivRef}\n >\n {this.state.maxOids === 0 &&\n Object.values(this.jsonConfigs).map(jsonConfig => {\n if (jsonConfig) {\n return Object.keys(jsonConfig.instanceObjs).map(instance =>\n this.renderOneCustom(\n instance,\n jsonConfig.instanceObjs[instance],\n this.customObj,\n index++,\n ),\n );\n }\n return null;\n })}\n </div>\n {this.renderErrorMessage()}\n {this.renderConfirmationDialog()}\n </Paper>\n );\n }\n}\n\nexport default withWidth()(ObjectCustomEditor);\n","import {\n fr as frLocale,\n ru as ruLocale,\n enUS as enLocale,\n es as esLocale,\n pl as plLocale,\n pt as ptLocale,\n it as itLocale,\n zhCN as cnLocale,\n ptBR as brLocale,\n de as deLocale,\n uk as ukLocale,\n nl as nlLocale,\n} from 'date-fns/locale';\n\nexport const localeMap = {\n en: enLocale,\n fr: frLocale,\n ru: ruLocale,\n de: deLocale,\n es: esLocale,\n br: brLocale,\n nl: nlLocale,\n it: itLocale,\n pt: ptLocale,\n pl: plLocale,\n uk: ukLocale,\n 'zh-cn': cnLocale,\n};\n","import React, { Component, type JSX } from 'react';\n\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3';\nimport { LocalizationProvider, TimePicker, DatePicker } from '@mui/x-date-pickers';\n\nimport {\n Paper,\n LinearProgress,\n InputLabel,\n MenuItem,\n FormControl,\n Select,\n Toolbar,\n IconButton,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n Button,\n FormControlLabel,\n Checkbox,\n TableHead,\n TableRow,\n TableCell,\n TextField,\n TableBody,\n TableContainer,\n Box,\n} from '@mui/material';\n\n// icons\nimport { FaPlusSquare as InsertIcon, FaDownload as ExportIcon } from 'react-icons/fa';\nimport { Edit as IconEdit, Delete as IconDelete, Close as IconClose } from '@mui/icons-material';\n\nimport {\n Utils,\n withWidth,\n TableResize,\n type AdminConnection,\n type IobTheme,\n type Translate,\n} from '@iobroker/adapter-react-v5';\n\nimport { localeMap } from './utils';\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n },\n tableDiv: (theme: IobTheme) => ({\n height: `calc(100% - ${parseInt(theme.mixins.toolbar.minHeight as string, 10) + 8}px)`,\n overflow: 'hidden',\n width: '100%',\n }),\n container: {\n height: '100%',\n },\n table: (theme: IobTheme) => ({\n // tableLayout: 'fixed',\n minWidth: 960,\n width: '100%',\n '& td:nth-of-type(5)': {\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n },\n '& tr:nth-child(even)': {\n backgroundColor: theme.palette.mode === 'dark' ? '#383838' : '#b2b2b2',\n },\n }),\n row: {\n userSelect: 'none',\n /* '&:nth-of-type(odd)': {\n backgroundColor: theme.palette.background.default,\n }, */\n position: 'relative',\n '&:hover': {\n opacity: 0.7,\n },\n '& td': {\n position: 'relative',\n },\n },\n updatedRow: {\n animation: 'updated 1s',\n },\n rowInterpolated: {\n opacity: 0.5,\n },\n selectHistoryControl: {\n width: 130,\n },\n selectRelativeTime: {\n marginLeft: 10,\n width: 200,\n },\n notAliveInstance: {\n opacity: 0.5,\n },\n customRange: (theme: IobTheme) => ({\n color: theme.palette.primary.main,\n }),\n rowSelected: (theme: IobTheme) => ({\n backgroundColor: theme.palette.secondary.main,\n color: theme.palette.secondary.contrastText,\n '& td': {\n color: theme.palette.secondary.contrastText,\n backgroundColor: theme.palette.secondary.main,\n },\n }),\n rowFocused: (theme: IobTheme) => ({\n position: 'absolute',\n pointerEvents: 'none',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n m: '3px',\n border: `1px dotted ${theme.palette.action.active}`,\n }),\n grow: {\n flexGrow: 1,\n },\n msInput: {\n width: 50,\n pt: '10px',\n ml: '5px',\n '& label': {\n mt: '15px',\n },\n },\n cellAckTrue: (theme: IobTheme) => ({\n color: theme.palette.mode === 'dark' ? '#66ff7f' : '#04a821',\n }),\n cellAckFalse: {\n color: '#FF6666',\n },\n toolbarDate: {\n width: 124,\n mt: '9px',\n '& fieldset': {\n display: 'none',\n },\n '& input': {\n padding: '8px 0 0 0',\n },\n '& .MuiInputAdornment-root': {\n ml: 0,\n mt: '7px',\n },\n },\n toolbarTime: {\n width: 84,\n mt: '9px',\n // marginLeft: 8,\n '& fieldset': {\n display: 'none',\n },\n '& input': {\n padding: '8px 0 0 0',\n },\n '& .MuiInputAdornment-root': {\n ml: 0,\n mt: '7px',\n },\n },\n toolbarTimeGrid: {\n position: 'relative',\n marginLeft: 8,\n paddingLeft: 8,\n paddingRight: 8,\n paddingTop: 4,\n paddingBottom: 4,\n border: '1px dotted #AAAAAA',\n borderRadius: 8,\n display: 'flex',\n },\n toolbarTimeLabel: {\n position: 'absolute',\n padding: 8,\n fontSize: '0.8rem',\n left: 2,\n top: -9,\n },\n noLoadingProgress: {\n width: '100%',\n height: 4,\n },\n\n colValue: {},\n colAck: {\n // width: 50,\n },\n colFrom: {\n // width: 150,\n },\n colLastChange: {\n // width: 200,\n },\n colTs: {\n // width: 200,\n },\n};\n\ntype SupportedFeatures = ('insert' | 'update' | 'delete')[];\n\ninterface ObjectHistoryDataProps {\n t: Translate;\n lang: ioBroker.Languages;\n expertMode: boolean;\n socket: AdminConnection;\n obj: ioBroker.StateObject;\n customsInstances: string[];\n objects: Record<string, ioBroker.Object>;\n isFloatComma: boolean;\n}\n\ninterface HistoryItem {\n ts: number;\n e?: boolean;\n ack?: boolean;\n val?: string | number | boolean | null;\n noData?: boolean;\n noDataForPeriod?: boolean;\n i?: boolean;\n from?: string;\n lc?: number;\n}\n\ninterface ObjectHistoryDataEdit {\n val?: number | string | boolean;\n ack?: boolean;\n q?: ioBroker.STATE_QUALITY[keyof ioBroker.STATE_QUALITY];\n date?: Date;\n time?: Date;\n ms?: number;\n}\n\ninterface ObjectHistoryDataState {\n areYouSure?: boolean;\n historyInstance: string;\n relativeRange: string | number;\n start: number;\n end: number;\n values: HistoryItem[] | null;\n selected: number[];\n lastSelected: number | null;\n lastSelectedColumn: string | null;\n updateOpened: boolean;\n insertOpened: boolean;\n historyInstances: null | { id: string; alive: boolean }[];\n ampm: boolean;\n lcVisible: boolean;\n ackVisible: boolean;\n fromVisible: boolean;\n /** 'insert', 'update', 'delete' */\n supportedFeatures: SupportedFeatures;\n edit: ObjectHistoryDataEdit;\n loading?: boolean;\n suppressMessage?: number | boolean;\n}\n\nclass ObjectHistoryData extends Component<ObjectHistoryDataProps, ObjectHistoryDataState> {\n private readonly adminInstance: number;\n\n private readonly supportedFeaturesPromises: Record<string, Promise<SupportedFeatures>>;\n\n private readonly unit: string;\n\n private timeTimer?: ReturnType<typeof setTimeout>;\n\n private readSupportedFeaturesTimeout?: ReturnType<typeof setTimeout>;\n\n private rangeValues: any;\n\n private rangeRef?: React.RefObject<any>;\n\n private subscribes: string[];\n\n private readonly localStorage: Storage;\n\n constructor(props: ObjectHistoryDataProps) {\n super(props);\n\n this.localStorage = (window as any)._localStorage || window.localStorage;\n\n let relativeRange = this.localStorage.getItem('App.relativeRange') || 'absolute';\n const start = parseInt(this.localStorage.getItem('App.absoluteStart'), 10) || 0;\n const end = parseInt(this.localStorage.getItem('App.absoluteEnd'), 10) || 0;\n const selectedStr = this.localStorage.getItem('App.historySelected') || '';\n const lastSelected = parseInt(this.localStorage.getItem('App.historyLastSelected'), 10) || null;\n const lastSelectedColumn = this.localStorage.getItem('App.historyLastSelectedColumn') || null;\n\n if ((!start || !end) && (!relativeRange || relativeRange === 'absolute')) {\n relativeRange = '30';\n }\n\n if (start && end) {\n relativeRange = 'absolute';\n }\n\n let selected: number[];\n try {\n selected = JSON.parse(selectedStr);\n } catch {\n selected = [];\n }\n\n this.state = {\n start,\n end,\n values: null,\n relativeRange,\n selected,\n lastSelected,\n lastSelectedColumn,\n historyInstance: '',\n updateOpened: false,\n insertOpened: false,\n historyInstances: null,\n // defaultHistory: '',\n lcVisible: true,\n // qVisible: true,\n ackVisible: true,\n fromVisible: true,\n supportedFeatures: [],\n ampm: false,\n edit: {},\n };\n this.adminInstance = parseInt(window.location.search.slice(1), 10) || 0;\n\n this.supportedFeaturesPromises = {};\n\n this.unit = this.props.obj.common && this.props.obj.common.unit ? ` ${this.props.obj.common.unit}` : '';\n\n this.timeTimer = undefined;\n this.subscribes = [];\n\n void this.prepareData()\n .then(() => this.readHistoryRange())\n .then(() => {\n if (relativeRange !== 'absolute') {\n this.setRelativeInterval(this.state.relativeRange, true);\n } else {\n void this.readHistory();\n }\n });\n }\n\n readSupportedFeatures(historyInstance: string): Promise<SupportedFeatures> {\n historyInstance = historyInstance || this.state.historyInstance;\n if (!historyInstance) {\n return Promise.resolve([] as SupportedFeatures);\n }\n if (this.supportedFeaturesPromises[historyInstance] instanceof Promise) {\n return this.supportedFeaturesPromises[historyInstance];\n }\n\n this.supportedFeaturesPromises[historyInstance] = new Promise(resolve => {\n if (this.readSupportedFeaturesTimeout) {\n clearTimeout(this.readSupportedFeaturesTimeout);\n }\n this.readSupportedFeaturesTimeout = setTimeout(() => {\n this.readSupportedFeaturesTimeout = undefined;\n resolve([]);\n }, 2_000);\n\n void this.props.socket\n .sendTo(historyInstance, 'features', null)\n .then((result: { supportedFeatures: SupportedFeatures }) => {\n if (this.readSupportedFeaturesTimeout) {\n clearTimeout(this.readSupportedFeaturesTimeout);\n this.readSupportedFeaturesTimeout = undefined;\n resolve(result ? result.supportedFeatures || [] : []);\n } else {\n this.setState({ supportedFeatures: result ? result.supportedFeatures || [] : [] });\n }\n });\n });\n return this.supportedFeaturesPromises[historyInstance];\n }\n\n async componentDidMount(): Promise<void> {\n await this.props.socket.subscribeState(this.props.obj._id, this.onChange);\n }\n\n componentWillUnmount(): void {\n if (this.timeTimer) {\n clearTimeout(this.timeTimer);\n this.timeTimer = undefined;\n }\n\n for (let i = 0; i < this.subscribes.length; i++) {\n this.props.socket.unsubscribeState(this.subscribes[i], this.onChange);\n }\n this.subscribes = [];\n\n this.props.socket.unsubscribeState(this.props.obj._id, this.onChange);\n }\n\n onChange = (id: string, state: ioBroker.State): void => {\n if (\n id === this.props.obj._id &&\n state &&\n this.state.values &&\n (!this.state.values.length || this.state.values[this.state.values.length - 1].ts < state.ts)\n ) {\n const values = [...this.state.values, state];\n this.setState({ values });\n } else if (id.startsWith('system.adapter.') && id.endsWith('.alive')) {\n const instance = id.substring('system.adapter.'.length, id.length - '.alive'.length);\n const list = this.state.historyInstances;\n const itemIndex = list.findIndex(it => it.id === instance);\n if (itemIndex !== -1) {\n if (list[itemIndex].alive !== !!state?.val) {\n const historyInstances = JSON.parse(JSON.stringify(list));\n historyInstances[itemIndex].alive = !!state?.val;\n this.setState({ historyInstances }, () => {\n // read data if the instance becomes alive\n if (historyInstances[itemIndex].alive && this.state.historyInstance === instance) {\n void this.readHistoryRange().then(() => this.readHistory());\n }\n });\n }\n }\n }\n };\n\n async prepareData(): Promise<void> {\n const list: { id: string; alive: boolean }[] = await this.getHistoryInstances();\n // read default history\n const config: ioBroker.SystemConfigObject = await this.props.socket.getCompactSystemConfig();\n const defaultHistory = config?.common?.defaultHistory;\n\n // find current history\n // first read from localstorage\n let historyInstance = this.localStorage.getItem('App.historyInstance') || '';\n if (!historyInstance || !list.find(it => it.id === historyInstance && it.alive)) {\n // try default history\n historyInstance = defaultHistory;\n }\n if (!historyInstance || !list.find(it => it.id === historyInstance && it.alive)) {\n // find first the alive history\n const historyInstanceItem = list.find(it => it.alive);\n if (historyInstanceItem) {\n historyInstance = historyInstanceItem.id;\n }\n }\n // get first entry\n if (!historyInstance && list.length) {\n historyInstance = defaultHistory;\n }\n const supportedFeatures: SupportedFeatures = await this.readSupportedFeatures(historyInstance);\n await new Promise<void>(resolve => {\n // supportedFeatures = ['insert', 'update', 'delete'];\n\n this.setState(\n {\n ampm: (config.common.dateFormat || '').includes('/'),\n historyInstances: list,\n // defaultHistory,\n historyInstance,\n supportedFeatures,\n },\n () => resolve(),\n );\n });\n }\n\n getHistoryInstances(): Promise<{ id: string; alive: boolean }[]> {\n const list: { id: string; alive: boolean }[] = [];\n const ids: string[] = [];\n this.props.customsInstances.forEach(instance => {\n const instObj = this.props.objects[`system.adapter.${instance}`];\n if (instObj && instObj.common && instObj.common.getHistory) {\n const listObj = { id: instance, alive: false };\n list.push(listObj);\n ids.push(`system.adapter.${instance}.alive`);\n }\n });\n\n if (ids.length) {\n return this.props.socket.getForeignStates(ids).then(async (alives: Record<string, ioBroker.State>) => {\n Object.keys(alives).forEach(id => {\n const item = list.find(it => id.endsWith(`${it.id}.alive`));\n if (item) {\n item.alive = !!alives[id]?.val;\n }\n });\n this.subscribes = ids;\n for (let i = 0; i < ids.length; i++) {\n await this.props.socket.subscribeState(ids[i], this.onChange);\n }\n\n return list;\n });\n }\n return Promise.resolve(list);\n }\n\n readHistory(start?: number, end?: number): Promise<void | null> {\n start = start || this.state.start;\n end = end || this.state.end;\n\n if (\n !this.state.historyInstance ||\n !this.state.historyInstances?.find(it => it.id === this.state.historyInstance && it.alive)\n ) {\n return null;\n }\n\n this.setState({ loading: true });\n\n return this.props.socket\n .getHistory(this.props.obj._id, {\n instance: this.state.historyInstance,\n start,\n end,\n from: true,\n ack: true,\n q: true,\n addID: false,\n aggregate: 'none',\n returnNewestEntries: true,\n })\n .then((values: ioBroker.GetHistoryResult) => {\n // merge range and chart\n const chart = [];\n const range = this.rangeValues;\n let lcVisible = false;\n // let qVisible = false;\n let ackVisible = false;\n let fromVisible = false;\n // let cVisible = false;\n\n // get the very first item\n if (range && range.length && (!values || !values.length || range[0].ts < values[0].ts)) {\n chart.push(range[0]);\n chart.push({ ts: range[0].ts + 1, e: true });\n console.log(`add ${new Date(range[0].ts).toISOString()}: ${range[0].val}`);\n // if (!qVisible && range[0].q !== undefined) {\n // qVisible = true;\n // }\n if (!ackVisible && range[0].ack !== undefined) {\n ackVisible = true;\n }\n if (!fromVisible && range[0].from) {\n fromVisible = true;\n }\n // if (!cVisible && range[0].c) {\n // cVisible = true;\n // }\n }\n\n if (values?.length) {\n for (let t = 0; t < values.length; t++) {\n // if range and details are not equal\n if (values[t] && (!chart.length || chart[chart.length - 1].ts < values[t].ts)) {\n chart.push(values[t]);\n if (values[t].from) {\n if (values[t].from.startsWith('system.adapter.')) {\n values[t].from = values[t].from.substring(15);\n } else if (values[t].from.startsWith('system.host.')) {\n values[t].from = values[t].from.substring(7);\n }\n }\n if (!lcVisible && values[t].lc) {\n lcVisible = true;\n }\n // if (!qVisible && values[t].q !== undefined) {\n // qVisible = true;\n // }\n if (!ackVisible && values[t].ack !== undefined) {\n ackVisible = true;\n }\n if (!fromVisible && values[t].from) {\n fromVisible = true;\n }\n // if (!cVisible && values[t].c) {\n // cVisible = true;\n // }\n console.log(`add value ${new Date(values[t].ts).toISOString()}: ${values[t].val}`);\n } else if (\n chart[chart.length - 1].ts === values[t].ts &&\n chart[chart.length - 1].val !== values[t].ts\n ) {\n console.error('Strange data!');\n }\n }\n } else {\n chart.push({ noDataForPeriod: true });\n }\n\n if (!chart.length) {\n chart.push({ noData: true });\n }\n\n this.setState({\n loading: false,\n values: chart,\n lcVisible,\n fromVisible,\n // qVisible,\n ackVisible,\n // cVisible,\n });\n });\n }\n\n readHistoryRange(): Promise<void> {\n const now = new Date();\n const oldest = new Date(2_000, 0, 1);\n\n if (\n !this.state.historyInstance ||\n !this.state.historyInstances?.find(it => it.id === this.state.historyInstance && it.alive)\n ) {\n return Promise.resolve();\n }\n\n this.setState({ loading: true });\n // this is a code that makes problems. It is no good idea doing this!\n return this.props.socket\n .getHistory(this.props.obj._id, {\n instance: this.state.historyInstance,\n start: oldest.getTime(),\n end: now.getTime(),\n // step: 3600000 * 24 * 30, // monthly\n limit: 1, // is that a way to make it faster?\n from: false,\n ack: false,\n q: false,\n addID: false,\n aggregate: 'none',\n })\n .then((values: ioBroker.GetHistoryResult) => {\n if (values.length) {\n // remove interpolated first value\n if (values[0].val === null || values[0].ts === oldest.getTime()) {\n values.shift();\n }\n // @ts-expect-error mark interpolated\n values.forEach(it => (it.i = true));\n this.rangeValues = values;\n this.setState({\n loading: false,\n });\n } else {\n this.rangeValues = [];\n this.setState({ loading: false });\n }\n });\n }\n\n onToggleSelect(e: React.KeyboardEvent | React.MouseEvent, ts: number, column: string): void {\n let selected = [...this.state.selected];\n const pos = selected.indexOf(ts);\n if (e.shiftKey && this.state.lastSelected) {\n let pps = -1;\n let ppls = -1;\n selected = [];\n for (let i = 0; i < this.state.values.length; i++) {\n if (this.state.values[i].ts === ts) {\n pps = i;\n if (ppls !== pps) {\n selected.push(this.state.values[i].ts);\n }\n if (pps !== -1 && ppls !== -1) {\n break;\n }\n }\n if (this.state.values[i].ts === this.state.lastSelected) {\n ppls = i;\n if (ppls !== pps) {\n selected.push(this.state.values[i].ts);\n }\n if (pps !== -1 && ppls !== -1) {\n break;\n }\n }\n if (pps !== -1 || ppls !== -1) {\n selected.push(this.state.values[i].ts);\n }\n }\n } else if (e.ctrlKey) {\n if (pos !== -1) {\n selected.splice(pos, 1);\n } else {\n selected.push(ts);\n }\n selected.sort();\n } else {\n selected = [ts];\n }\n\n this.localStorage.setItem('App.historyLastSelected', ts.toString());\n this.localStorage.setItem('App.historyLastSelectedColumn', column);\n this.localStorage.setItem('App.historySelected', JSON.stringify(selected));\n this.setState({ selected, lastSelected: ts, lastSelectedColumn: column });\n }\n\n getTableRows(): JSX.Element[] {\n const rows = [];\n for (let r = this.state.values.length - 1; r >= 0; r--) {\n const state = this.state.values[r];\n const ts = state.ts;\n if (state.e) {\n rows.push(\n <TableRow\n sx={{ ...styles.row, ...styles.updatedRow, ...styles.rowInterpolated }}\n key={ts}\n hover\n >\n <TableCell />\n <TableCell>...</TableCell>\n {this.state.ackVisible ? <TableCell /> : null}\n {this.state.fromVisible ? <TableCell /> : null}\n {this.state.lcVisible ? <TableCell /> : null}\n </TableRow>,\n );\n } else if (state.noData || state.noDataForPeriod) {\n rows.push(\n <TableRow\n sx={{ ...styles.row, ...styles.updatedRow, ...styles.rowNoData }}\n key={state.noData ? 'nodata' : ''}\n hover\n >\n <TableCell />\n <TableCell>\n {state.noData\n ? this.props.t('No data in history')\n : this.props.t('No data in history for selected period')}\n </TableCell>\n {this.state.ackVisible ? <TableCell /> : null}\n {this.state.fromVisible ? <TableCell /> : null}\n {this.state.lcVisible ? <TableCell /> : null}\n </TableRow>,\n );\n } else {\n const interpolated = state.i;\n const selected = this.state.lastSelected === ts;\n let val = state.val;\n if (this.props.isFloatComma && this.props.obj.common.type === 'number' && val) {\n val = val.toString().replace('.', ',');\n }\n if (val === null) {\n val = 'null';\n }\n if (val === undefined) {\n val = '_';\n }\n const selectedClass = this.state.selected.includes(ts);\n\n rows.push(\n <TableRow\n sx={{\n ...styles.row,\n ...styles.updatedRow,\n ...(interpolated ? styles.rowInterpolated : undefined),\n ...(selectedClass ? styles.rowSelected : undefined),\n }}\n key={ts.toString() + (state.val || '').toString()}\n >\n <TableCell onClick={e => !interpolated && this.onToggleSelect(e, ts, 'ts')}>\n {`${ObjectHistoryData.formatTimestamp(state.ts)}`}\n {selected && this.state.lastSelectedColumn === 'ts' ? (\n <Box\n component=\"div\"\n sx={styles.rowFocused}\n />\n ) : (\n ''\n )}\n </TableCell>\n <TableCell onClick={e => !interpolated && this.onToggleSelect(e, ts, 'val')}>\n {val + this.unit}\n {selected && this.state.lastSelectedColumn === 'val' ? (\n <Box\n component=\"div\"\n sx={styles.rowFocused}\n />\n ) : (\n ''\n )}\n </TableCell>\n {this.state.ackVisible ? (\n <TableCell\n onClick={e => !interpolated && this.onToggleSelect(e, ts, 'ack')}\n sx={state.ack ? styles.cellAckTrue : styles.cellAckFalse}\n >\n {state.ack ? 'true' : 'false'}\n {selected && this.state.lastSelectedColumn === 'ack' ? (\n <Box\n component=\"div\"\n sx={styles.rowFocused}\n />\n ) : (\n ''\n )}\n </TableCell>\n ) : null}\n {this.state.fromVisible ? (\n <TableCell onClick={e => !interpolated && this.onToggleSelect(e, ts, 'from')}>\n {state.from || ''}\n {selected && this.state.lastSelectedColumn === 'from' ? (\n <Box\n component=\"div\"\n sx={styles.rowFocused}\n />\n ) : (\n ''\n )}\n </TableCell>\n ) : null}\n {this.state.lcVisible ? (\n <TableCell onClick={e => !interpolated && this.onToggleSelect(e, ts, 'lc')}>\n {state.lc\n ? `${new Date(state.lc).toLocaleDateString()} ${new Date(state.lc).toLocaleTimeString()}.${(state.ts % 1000).toString().padStart(3, '0')}`\n : ''}\n {selected && this.state.lastSelectedColumn === 'lc' ? (\n <Box\n component=\"div\"\n sx={styles.rowFocused}\n />\n ) : (\n ''\n )}\n </TableCell>\n ) : null}\n </TableRow>,\n );\n }\n }\n\n return rows;\n }\n\n shiftTime(): void {\n const now = new Date();\n const delay = 60000 - now.getSeconds() - (1000 - now.getMilliseconds());\n\n if (now.getMilliseconds()) {\n now.setMilliseconds(1000);\n }\n if (now.getSeconds()) {\n now.setSeconds(60);\n }\n\n const end = now.getTime();\n let start;\n const mins = this.state.relativeRange;\n\n if (mins === 'day') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n start = now.getTime();\n } else if (mins === 'week') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setMilliseconds(0);\n // find week start\n const day = now.getDay() || 7;\n if (day !== 1) {\n now.setHours(-24 * (day - 1));\n }\n start = now.getTime();\n } else if (mins === '2weeks') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setDate(now.getDate() - 7); // 1 week earlier\n\n const day = now.getDay() || 7;\n if (day !== 1) {\n now.setHours(-24 * (day - 1));\n }\n start = now.getTime();\n } else if (mins === 'month') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setDate(1);\n start = now.getTime();\n } else if (mins === 'year') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setDate(1);\n now.setMonth(0);\n start = now.getTime();\n } else if (mins === '12months') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setFullYear(now.getFullYear() - 1);\n start = now.getTime();\n } else {\n start = end - parseInt(mins as string, 10) * 60000;\n }\n\n this.setState({ start, end }, () => this.readHistory());\n\n this.timeTimer = setTimeout(() => {\n this.timeTimer = undefined;\n this.shiftTime();\n }, delay || 60_000);\n }\n\n setRelativeInterval(mins: string | number, dontSave?: boolean): void {\n if (!dontSave) {\n this.localStorage.setItem('App.relativeRange', mins.toString());\n this.setState({ relativeRange: mins });\n }\n if (mins === 'absolute') {\n if (this.timeTimer) {\n clearTimeout(this.timeTimer);\n this.timeTimer = undefined;\n }\n return;\n }\n this.localStorage.removeItem('App.absoluteStart');\n this.localStorage.removeItem('App.absolute');\n\n const now = new Date();\n\n if (!this.timeTimer) {\n const delay = 60_000 - now.getSeconds() - (1_000 - now.getMilliseconds());\n this.timeTimer = setTimeout(() => {\n this.timeTimer = undefined;\n this.shiftTime();\n }, delay || 60_000);\n }\n\n if (now.getMilliseconds()) {\n now.setMilliseconds(1_000);\n }\n if (now.getSeconds()) {\n now.setSeconds(60);\n }\n\n const end = now.getTime();\n let start;\n\n if (mins === 'day') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n start = now.getTime();\n } else if (mins === 'week') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n\n const day = now.getDay() || 7;\n if (day !== 1) {\n now.setHours(-24 * (day - 1));\n }\n\n start = now.getTime();\n } else if (mins === '2weeks') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setDate(now.getDate() - 7); // 1 week earlier\n\n const day = now.getDay() || 7;\n if (day !== 1) {\n now.setHours(-24 * (day - 1));\n }\n\n start = now.getTime();\n } else if (mins === 'month') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setDate(1);\n start = now.getTime();\n } else if (mins === 'year') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setDate(1);\n now.setMonth(0);\n start = now.getTime();\n } else if (mins === '12months') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setFullYear(now.getFullYear() - 1);\n start = now.getTime();\n } else {\n mins = Number(mins);\n start = end - mins * 60_000;\n }\n\n this.setState({ start, end }, () => this.readHistory());\n }\n\n renderTable(): JSX.Element {\n if (!this.state.historyInstance) {\n return <div style={{ marginTop: 20, fontSize: 24 }}>{this.props.t('History instance not selected')}</div>;\n }\n if (!this.state.historyInstances?.find(it => it.id === this.state.historyInstance && it.alive)) {\n return <div style={{ marginTop: 20, fontSize: 24 }}>{this.props.t('History instance not alive')}</div>;\n }\n\n if (this.state.values) {\n const initialWidths: (number | 'auto')[] = [200, 'auto'];\n const minWidths = [190, 100];\n if (this.state.ackVisible) {\n initialWidths.push(50);\n minWidths.push(50);\n }\n if (this.state.fromVisible) {\n initialWidths.push(150);\n minWidths.push(150);\n }\n if (this.state.lcVisible) {\n initialWidths.push(200);\n minWidths.push(190);\n }\n\n return (\n <TableContainer style={styles.container}>\n <TableResize\n stickyHeader\n sx={styles.table}\n initialWidths={initialWidths}\n minWidths={minWidths}\n dblTitle={this.props.t('ra_Double click to reset table layout')}\n >\n <TableHead>\n <TableRow>\n <TableCell style={styles.colTs}>{this.props.t('Timestamp')}</TableCell>\n <TableCell style={styles.colValue}>{this.props.t('Value')}</TableCell>\n {this.state.ackVisible ? (\n <TableCell style={styles.colAck}>{this.props.t('Ack')}</TableCell>\n ) : null}\n {this.state.fromVisible ? (\n <TableCell style={styles.colFrom}>{this.props.t('From')}</TableCell>\n ) : null}\n {this.state.lcVisible ? (\n <TableCell style={styles.colLastChange}>{this.props.t('lc')}</TableCell>\n ) : null}\n </TableRow>\n </TableHead>\n <TableBody>{this.getTableRows()}</TableBody>\n </TableResize>\n </TableContainer>\n );\n }\n return <LinearProgress />;\n }\n\n renderDialogConfirm(): JSX.Element {\n return (\n <Dialog\n open={!!this.state.areYouSure}\n onClose={() => this.setState({ areYouSure: false })}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n <DialogTitle id=\"alert-dialog-title\">{}</DialogTitle>\n <DialogContent>\n <DialogContentText id=\"alert-dialog-description\">{this.props.t('Are you sure?')}</DialogContentText>\n <FormControlLabel\n control={\n <Checkbox\n value={this.state.suppressMessage}\n onChange={() => this.setState({ suppressMessage: true })}\n />\n }\n label={this.props.t('Suppress for 5 minutes')}\n />\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n onClick={() =>\n this.setState(\n { areYouSure: false, suppressMessage: this.state.suppressMessage && Date.now() },\n () => this.onDelete(),\n )\n }\n color=\"primary\"\n autoFocus\n startIcon={<IconDelete />}\n >\n {this.props.t('Delete')}\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => this.setState({ areYouSure: false })}\n color=\"secondary\"\n startIcon={<IconClose />}\n >\n {this.props.t('Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n onDelete(): void {\n const tasks = this.state.selected.map(ts => ({ state: { ts }, id: this.props.obj._id }));\n void this.props.socket.sendTo(this.state.historyInstance, 'delete', tasks).then(() => this.readHistory());\n }\n\n onUpdate(): void {\n let val = this.state.edit.val;\n\n if (this.props.obj.common) {\n if (this.props.obj.common.type === 'number') {\n if (typeof val !== 'number') {\n val = parseFloat(val.toString().replace(',', '.'));\n }\n } else if (this.props.obj.common.type === 'boolean') {\n val = val === 'true' || val === 'TRUE' || val === true || val === '1' || val === 1;\n }\n }\n\n const state: ioBroker.SettableState = {\n val,\n ack: this.state.edit.ack,\n ts: this.state.selected[0],\n from: `system.adapter.admin.${this.adminInstance}`,\n q: this.state.edit.q,\n };\n\n for (const [attr, stateVal] of Object.entries(state)) {\n if (stateVal === undefined) {\n // @ts-expect-error can be fixed later\n delete state[attr];\n }\n }\n\n if (!this.state.lcVisible && state.lc) {\n delete state.lc;\n }\n void this.props.socket\n .sendTo(this.state.historyInstance, 'update', [{ id: this.props.obj._id, state }])\n .then(() => this.readHistory());\n }\n\n onInsert(): void {\n let val = this.state.edit.val;\n\n if (this.props.obj.common) {\n if (this.props.obj.common.type === 'number') {\n val = parseFloat(val.toString().replace(',', '.'));\n } else if (this.props.obj.common.type === 'boolean') {\n val = val === 'true' || val === 'TRUE' || val === true || val === '1' || val === 1;\n }\n }\n\n const ts = this.state.edit.date;\n ts.setHours(this.state.edit.time.getHours());\n ts.setMinutes(this.state.edit.time.getMinutes());\n ts.setSeconds(this.state.edit.time.getSeconds());\n ts.setMilliseconds(parseInt(this.state.edit.ms as any as string, 10));\n\n const state: ioBroker.SettableState = {\n ts: ts.getTime(),\n val,\n ack: this.state.edit.ack,\n from: `system.adapter.admin.${this.adminInstance}`,\n q: this.state.edit.q || 0,\n };\n\n if (!this.state.lcVisible && state.lc) {\n delete state.lc;\n }\n\n for (const [attr, stateVal] of Object.entries(state)) {\n if (stateVal === undefined) {\n // @ts-expect-error can be fixed later\n delete state[attr];\n }\n }\n\n void this.props.socket\n .sendTo(this.state.historyInstance, 'insert', [{ id: this.props.obj._id, state }])\n .then(() => this.readHistory());\n }\n\n updateEdit(name: string, value: string | number | boolean | Date): void {\n const edit = JSON.parse(JSON.stringify(this.state.edit));\n edit.time = new Date(edit.time);\n edit.date = new Date(edit.date);\n edit[name] = value;\n\n this.setState({ edit });\n }\n\n renderEditDialog(): JSX.Element {\n return (\n <Dialog\n open={this.state.updateOpened || this.state.insertOpened}\n onClose={() => this.setState({ updateOpened: false, insertOpened: false })}\n aria-labelledby=\"edit-dialog-title\"\n aria-describedby=\"edit-dialog-description\"\n >\n <DialogTitle id=\"edit-dialog-title\">\n {this.state.updateOpened ? this.props.t('Update entry') : this.props.t('Insert entry')}\n </DialogTitle>\n <DialogContent>\n <form\n noValidate\n autoComplete=\"off\"\n >\n {typeof this.state.edit.val === 'boolean' ? (\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.edit.val}\n onChange={e => this.updateEdit('val', e.target.checked)}\n />\n }\n label={this.props.t('Value')}\n />\n ) : (\n <TextField\n variant=\"standard\"\n label={this.props.t('Value')}\n value={this.state.edit.val}\n onChange={e => this.updateEdit('val', e.target.value)}\n />\n )}\n <br />\n <FormControlLabel\n control={\n <Checkbox\n checked={this.state.edit.ack}\n onChange={e => this.updateEdit('ack', e.target.checked)}\n />\n }\n label={this.props.t('Acknowledged')}\n />\n\n {this.state.insertOpened ? (\n <LocalizationProvider\n dateAdapter={AdapterDateFns}\n adapterLocale={localeMap[this.props.lang]}\n >\n <div style={styles.toolbarTimeGrid}>\n <div style={styles.toolbarTimeLabel}>{this.props.t('Time')}</div>\n <DatePicker\n sx={styles.toolbarDate}\n value={this.state.edit.date}\n onChange={date => this.updateEdit('date', date)}\n />\n <TimePicker\n sx={styles.toolbarTime}\n ampm={this.state.ampm}\n views={['hours', 'minutes', 'seconds']}\n value={this.state.edit.time}\n onChange={time => this.updateEdit('time', time)}\n />\n <TextField\n variant=\"standard\"\n sx={styles.msInput}\n helperText={this.props.t('ms')}\n type=\"number\"\n slotProps={{\n htmlInput: {\n max: 999,\n min: 0,\n },\n }}\n value={this.state.edit.ms}\n onChange={e => this.updateEdit('ms', e.target.value)}\n />\n </div>\n </LocalizationProvider>\n ) : null}\n </form>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n disabled={this.state.edit.val === ''}\n onClick={() => {\n const isUpdate = this.state.updateOpened;\n this.setState({ updateOpened: false, insertOpened: false }, () =>\n isUpdate ? this.onUpdate() : this.onInsert(),\n );\n }}\n color=\"primary\"\n autoFocus\n >\n {this.state.updateOpened ? this.props.t('Update') : this.props.t('Add')}\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => this.setState({ updateOpened: false, insertOpened: false })}\n color=\"grey\"\n >\n {this.props.t('Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n setStartDate(startDate: Date): void {\n const start = startDate.getTime();\n if (this.timeTimer) {\n clearTimeout(this.timeTimer);\n this.timeTimer = undefined;\n }\n this.localStorage.setItem('App.relativeRange', 'absolute');\n this.localStorage.setItem('App.absoluteStart', start.toString());\n this.localStorage.setItem('App.absoluteEnd', this.state.end.toString());\n this.setState({ start, relativeRange: 'absolute' }, () => this.readHistory());\n }\n\n setEndDate(endDate: Date): void {\n const end = endDate.getTime();\n this.localStorage.setItem('App.relativeRange', 'absolute');\n this.localStorage.setItem('App.absoluteStart', this.state.start.toString());\n this.localStorage.setItem('App.absoluteEnd', end.toString());\n if (this.timeTimer) {\n clearTimeout(this.timeTimer);\n this.timeTimer = undefined;\n }\n this.setState({ end, relativeRange: 'absolute' }, () => this.readHistory());\n }\n\n renderToolbar(): JSX.Element {\n return (\n <Toolbar>\n <FormControl\n variant=\"standard\"\n style={styles.selectHistoryControl}\n >\n <InputLabel>{this.props.t('History instance')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.historyInstance || ''}\n onChange={e => {\n const historyInstance = e.target.value;\n this.localStorage.setItem('App.historyInstance', historyInstance);\n void this.readSupportedFeatures(historyInstance).then(\n (supportedFeatures: SupportedFeatures) =>\n this.setState({ historyInstance, supportedFeatures }, () => this.readHistory()),\n );\n }}\n >\n {this.state.historyInstances?.map(it => (\n <MenuItem\n key={it.id}\n value={it.id}\n style={!it.alive ? styles.notAliveInstance : undefined}\n >\n {it.id}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <FormControl\n variant=\"standard\"\n style={styles.selectRelativeTime}\n >\n <InputLabel>{this.props.t('Relative')}</InputLabel>\n <Select\n variant=\"standard\"\n ref={this.rangeRef}\n value={this.state.relativeRange}\n onChange={e => this.setRelativeInterval(e.target.value)}\n >\n <MenuItem\n key=\"custom\"\n value=\"absolute\"\n sx={styles.customRange}\n >\n {this.props.t('custom range')}\n </MenuItem>\n <MenuItem\n key=\"1\"\n value={10}\n >\n {this.props.t('last 10 minutes')}\n </MenuItem>\n <MenuItem\n key=\"2\"\n value={30}\n >\n {this.props.t('last 30 minutes')}\n </MenuItem>\n <MenuItem\n key=\"3\"\n value={60}\n >\n {this.props.t('last hour')}\n </MenuItem>\n <MenuItem\n key=\"4\"\n value=\"day\"\n >\n {this.props.t('this day')}\n </MenuItem>\n <MenuItem\n key=\"5\"\n value={24 * 60}\n >\n {this.props.t('last 24 hours')}\n </MenuItem>\n <MenuItem\n key=\"6\"\n value=\"week\"\n >\n {this.props.t('this week')}\n </MenuItem>\n <MenuItem\n key=\"7\"\n value={24 * 60 * 7}\n >\n {this.props.t('last week')}\n </MenuItem>\n <MenuItem\n key=\"8\"\n value=\"2weeks\"\n >\n {this.props.t('this 2 weeks')}\n </MenuItem>\n <MenuItem\n key=\"9\"\n value={24 * 60 * 14}\n >\n {this.props.t('last 2 weeks')}\n </MenuItem>\n <MenuItem\n key=\"10\"\n value=\"month\"\n >\n {this.props.t('this month')}\n </MenuItem>\n <MenuItem\n key=\"11\"\n value={30 * 24 * 60}\n >\n {this.props.t('last 30 days')}\n </MenuItem>\n <MenuItem\n key=\"12\"\n value=\"year\"\n >\n {this.props.t('this year')}\n </MenuItem>\n <MenuItem\n key=\"13\"\n value=\"12months\"\n >\n {this.props.t('last 12 months')}\n </MenuItem>\n </Select>\n </FormControl>\n\n <LocalizationProvider\n dateAdapter={AdapterDateFns}\n adapterLocale={localeMap[this.props.lang]}\n >\n <div style={styles.toolbarTimeGrid}>\n <div\n style={{\n ...styles.toolbarTimeLabel,\n opacity: this.state.relativeRange !== 'absolute' ? 0.5 : undefined,\n }}\n >\n {this.props.t('Start time')}\n </div>\n <DatePicker\n sx={styles.toolbarDate}\n disabled={this.state.relativeRange !== 'absolute'}\n value={new Date(this.state.start)}\n onChange={date => this.setStartDate(date)}\n />\n <TimePicker\n disabled={this.state.relativeRange !== 'absolute'}\n sx={styles.toolbarTime}\n ampm={this.state.ampm}\n value={new Date(this.state.start)}\n onChange={date => this.setStartDate(date)}\n />\n </div>\n <div style={styles.toolbarTimeGrid}>\n <div\n style={{\n ...styles.toolbarTimeLabel,\n opacity: this.state.relativeRange !== 'absolute' ? 0.5 : undefined,\n }}\n >\n {this.props.t('End time')}\n </div>\n <DatePicker\n disabled={this.state.relativeRange !== 'absolute'}\n sx={styles.toolbarDate}\n value={new Date(this.state.end)}\n onChange={date => this.setEndDate(date)}\n />\n <TimePicker\n disabled={this.state.relativeRange !== 'absolute'}\n sx={styles.toolbarTime}\n ampm={this.state.ampm}\n value={new Date(this.state.end)}\n onChange={date => this.setEndDate(date)}\n />\n </div>\n </LocalizationProvider>\n <Box\n component=\"div\"\n sx={styles.grow}\n />\n\n {this.state.values?.length ? (\n <IconButton\n size=\"large\"\n onClick={() => this.exportData()}\n title={this.props.t('Save data as csv')}\n >\n <ExportIcon />\n </IconButton>\n ) : null}\n\n {this.state.supportedFeatures.includes('insert') && this.props.expertMode ? (\n <IconButton\n size=\"large\"\n onClick={() => {\n const time = new Date();\n\n const edit: ObjectHistoryDataEdit = {\n ack: this.state.values[this.state.values.length - 1].ack,\n val: this.state.values[this.state.values.length - 1].val,\n date: new Date(time),\n ms: 0,\n time: new Date(time),\n q: 0,\n };\n\n this.setState({\n edit,\n insertOpened: true,\n });\n }}\n >\n <InsertIcon />\n </IconButton>\n ) : null}\n {this.state.supportedFeatures.includes('update') && this.props.expertMode ? (\n <IconButton\n size=\"large\"\n disabled={this.state.selected.length !== 1}\n onClick={() => {\n const state = JSON.parse(\n JSON.stringify(\n this.state.values.find((it: HistoryItem) => it.ts === this.state.lastSelected),\n ),\n );\n const time = new Date(state.ts);\n state.date = new Date(time);\n state.time = new Date(time);\n\n this.setState({\n edit: state,\n updateOpened: true,\n });\n }}\n >\n <IconEdit />\n </IconButton>\n ) : null}\n {this.state.supportedFeatures.includes('delete') && this.props.expertMode ? (\n <IconButton\n size=\"large\"\n disabled={!this.state.selected.length}\n onClick={() => {\n if (\n typeof this.state.suppressMessage === 'number' &&\n Date.now() - this.state.suppressMessage < 300_000\n ) {\n this.onDelete();\n } else {\n this.setState({ areYouSure: true });\n }\n }}\n >\n <IconDelete />\n </IconButton>\n ) : null}\n </Toolbar>\n );\n }\n\n exportData(): void {\n let element = window.document.getElementById('export-file');\n if (!element) {\n element = document.createElement('a');\n element.setAttribute('id', 'export-file');\n element.style.display = 'none';\n document.body.appendChild(element);\n }\n\n const lines = ['timestamp;value;acknowledged;from;'];\n\n this.state.values.forEach(\n (state: HistoryItem) =>\n !state.i &&\n !state.e &&\n lines.push(\n [\n ObjectHistoryData.formatTimestamp(state.ts),\n state.val === null || state.val === undefined ? 'null' : state.val.toString(),\n state.ack ? 'true' : 'false',\n state.from || '',\n ].join(';'),\n ),\n );\n\n element.setAttribute('href', `data:text/plain;charset=utf-8,${encodeURIComponent(lines.join('\\n'))}`);\n element.setAttribute(\n 'download',\n `${Utils.getObjectName({ [this.props.obj._id]: this.props.obj }, this.props.obj._id, this.props.lang)}.csv`,\n );\n\n element.click();\n\n document.body.removeChild(element);\n }\n\n render(): JSX.Element {\n if (!this.state.historyInstances) {\n return <LinearProgress />;\n }\n\n return (\n <Paper style={styles.paper}>\n {this.state.loading ? <LinearProgress /> : <div style={styles.noLoadingProgress} />}\n {this.renderToolbar()}\n <Box\n component=\"div\"\n sx={styles.tableDiv}\n >\n {this.renderTable()}\n </Box>\n {this.renderDialogConfirm()}\n {this.renderEditDialog()}\n </Paper>\n );\n }\n\n /**\n * Convert timestamp to human-readable date string\n *\n * @param ts the timestamp\n */\n static formatTimestamp(ts: number): string {\n return `${new Date(ts).toLocaleDateString()} ${new Date(ts).toLocaleTimeString()}.${(ts % 1_000).toString().padStart(3, '0')}`;\n }\n}\n\nexport default withWidth()(ObjectHistoryData);\n","import React, { Component, createRef, type JSX } from 'react';\n\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3';\nimport { DatePicker, LocalizationProvider, TimePicker } from '@mui/x-date-pickers';\nimport {\n Button,\n Fab,\n FormControl,\n InputLabel,\n LinearProgress,\n Menu,\n MenuItem,\n Paper,\n Select,\n Toolbar,\n} from '@mui/material';\n\nimport ReactEchartsCore from 'echarts-for-react/lib/core';\nimport type { EChartsOption, YAXisComponentOption } from 'echarts/types/dist/echarts';\n\nimport * as echarts from 'echarts/core';\nimport { LineChart } from 'echarts/charts';\nimport {\n GridComponent,\n TimelineComponent,\n TitleComponent,\n ToolboxComponent,\n TooltipComponent,\n} from 'echarts/components';\nimport { SVGRenderer } from 'echarts/renderers';\n\nimport {\n type AdminConnection,\n Utils,\n withWidth,\n type IobTheme,\n type ThemeType,\n type Translate,\n} from '@iobroker/adapter-react-v5';\n\n// icons\nimport { FaChartLine as SplitLineIcon } from 'react-icons/fa';\nimport EchartsIcon from '../../assets/echarts.png';\nimport { localeMap } from './utils';\n\necharts.use([\n TimelineComponent,\n ToolboxComponent,\n TitleComponent,\n TooltipComponent,\n GridComponent,\n LineChart,\n SVGRenderer,\n]);\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n width: '100%',\n },\n chart: {\n width: '100%',\n overflow: 'hidden',\n },\n chartWithToolbar: (theme: IobTheme) => ({\n height: `calc(100% - ${parseInt(theme.mixins.toolbar.minHeight as string, 10) + 8}px)`,\n }),\n chartWithoutToolbar: {\n height: '100%',\n },\n selectHistoryControl: {\n width: 130,\n },\n selectRelativeTime: {\n marginLeft: 10,\n width: 200,\n },\n notAliveInstance: {\n opacity: 0.5,\n },\n customRange: (theme: IobTheme) => ({\n color: theme.palette.primary.main,\n }),\n splitLineButtonIcon: {\n marginRight: 8,\n },\n grow: {\n flexGrow: 1,\n },\n toolbarDate: {\n width: 124,\n mt: '9px',\n '& fieldset': {\n display: 'none',\n },\n '& input': {\n padding: '8px 0 0 0',\n },\n '& .MuiInputAdornment-root': {\n ml: 0,\n mt: '7px',\n },\n },\n toolbarTime: {\n width: 84,\n mt: '9px',\n // marginLeft: 8,\n '& fieldset': {\n display: 'none',\n },\n '& input': {\n padding: '8px 0 0 0',\n },\n '& .MuiInputAdornment-root': {\n ml: 0,\n mt: '7px',\n },\n },\n toolbarTimeLabel: {\n position: 'absolute',\n padding: 8,\n fontSize: '0.8rem',\n left: 2,\n top: -9,\n },\n toolbarTimeGrid: {\n position: 'relative',\n marginLeft: 8,\n paddingLeft: 8,\n paddingRight: 8,\n paddingTop: 4,\n paddingBottom: 4,\n border: '1px dotted #AAAAAA',\n borderRadius: 8,\n display: 'flex',\n },\n buttonIcon: {\n width: 24,\n height: 24,\n },\n echartsButton: {\n marginRight: 8,\n height: 34,\n width: 34,\n },\n};\n\nconst GRID_PADDING_LEFT = 80;\nconst GRID_PADDING_RIGHT = 25;\n\ninterface ObjectChartProps {\n obj: ioBroker.StateObject;\n customsInstances: string[];\n objects: Record<string, ioBroker.Object>;\n socket: AdminConnection;\n lang: ioBroker.Languages;\n themeType: ThemeType;\n // dateFormat: string;\n isFloatComma: boolean;\n noToolbar: boolean;\n showJumpToEchart: boolean;\n defaultHistory: string;\n historyInstance: string;\n from: number;\n end: number;\n t: Translate;\n theme: IobTheme;\n}\n\ninterface ObjectChartState {\n historyInstance: string;\n historyInstances: { id: string; alive: boolean }[] | null;\n defaultHistory: string;\n chartHeight: number;\n chartWidth: number;\n ampm: boolean;\n relativeRange: string;\n splitLine: boolean;\n min: number;\n max: number;\n maxYLen: number;\n stepType: string;\n echartsJump: boolean;\n showStepMenu?: null | HTMLElement;\n}\n\ninterface HistoryItem {\n val: ioBroker.StateValue;\n ts: number;\n i?: boolean;\n}\n\nclass ObjectChart extends Component<ObjectChartProps, ObjectChartState> {\n private echartsReact: ReactEchartsCore;\n\n private readonly rangeRef: React.RefObject<HTMLDivElement>;\n\n private readTimeout: ReturnType<typeof setTimeout> | null = null;\n\n private chartValues: { val: ioBroker.StateValue; ts: number }[] | null;\n\n private rangeValues: { val: ioBroker.StateValue; ts: number }[] | null;\n\n private subscribes: string[];\n\n private readonly unit: string;\n\n private readonly divRef: React.RefObject<HTMLDivElement>;\n\n private chart: {\n min?: number;\n max?: number;\n withSeconds?: boolean;\n withTime?: boolean;\n diff?: number;\n lastX?: number;\n lastWidth?: number;\n };\n\n private timerResize: ReturnType<typeof setTimeout> | null = null;\n\n private updateTimer: ReturnType<typeof setTimeout> | null = null;\n\n private minY: number;\n\n private maxY: number;\n\n private timeTimer: ReturnType<typeof setTimeout> | null = null;\n\n private maxYLenTimeout: ReturnType<typeof setTimeout> | null = null;\n\n private mouseDown: boolean;\n\n private start: number;\n\n private end: number;\n\n private readonly localStorage: Storage;\n\n constructor(props: ObjectChartProps) {\n super(props);\n this.localStorage = (window as any)._localStorage || window.localStorage;\n\n if (!this.props.from) {\n const from = new Date();\n from.setHours(from.getHours() - 24 * 7);\n this.start = from.getTime();\n } else {\n this.start = this.props.from;\n }\n if (!this.props.end) {\n this.end = Date.now();\n } else {\n this.end = this.props.end;\n }\n let relativeRange = this.localStorage.getItem('App.relativeRange') || '30';\n const min = parseInt(this.localStorage.getItem('App.absoluteStart'), 10) || 0;\n const max = parseInt(this.localStorage.getItem('App.absoluteEnd'), 10) || 0;\n\n if ((!min || !max) && (!relativeRange || relativeRange === 'absolute')) {\n relativeRange = '30';\n }\n\n if (max && min) {\n relativeRange = 'absolute';\n }\n\n this.state = {\n historyInstance: this.props.historyInstance || '',\n historyInstances: null,\n defaultHistory: '',\n chartHeight: 300,\n chartWidth: 500,\n ampm: false,\n relativeRange,\n splitLine: this.localStorage.getItem('App.splitLine') === 'true',\n min,\n max,\n maxYLen: 0,\n stepType: '',\n echartsJump: false,\n };\n\n this.echartsReact = null;\n this.rangeRef = createRef();\n this.readTimeout = null;\n this.chartValues = null;\n this.rangeValues = null;\n this.subscribes = [];\n\n this.unit = this.props.obj.common && this.props.obj.common.unit ? ` ${this.props.obj.common.unit}` : '';\n\n this.divRef = createRef();\n\n this.chart = {};\n }\n\n componentDidMount(): void {\n void this.props.socket.subscribeState(this.props.obj._id, this.onChange);\n window.addEventListener('resize', this.onResize);\n void this.prepareData()\n .then(() => !this.props.noToolbar && this.readHistoryRange())\n .then(() => this.setRelativeInterval(this.state.relativeRange, true, () => this.forceUpdate()));\n }\n\n componentWillUnmount(): void {\n if (this.readTimeout) {\n clearTimeout(this.readTimeout);\n this.readTimeout = null;\n }\n\n if (this.timeTimer) {\n clearTimeout(this.timeTimer);\n this.timeTimer = null;\n }\n\n if (this.maxYLenTimeout) {\n clearTimeout(this.maxYLenTimeout);\n this.maxYLenTimeout = null;\n }\n\n if (this.timerResize) {\n clearTimeout(this.timerResize);\n this.timerResize = null;\n }\n\n if (this.updateTimer) {\n clearTimeout(this.updateTimer);\n this.updateTimer = null;\n }\n\n if (this.echartsReact) {\n this.echartsReact.getEchartsInstance().dispose();\n }\n\n for (let i = 0; i < this.subscribes.length; i++) {\n this.props.socket.unsubscribeState(this.subscribes[i], this.onChange);\n }\n this.subscribes = [];\n\n this.props.socket.unsubscribeState(this.props.obj._id, this.onChange);\n window.removeEventListener('resize', this.onResize);\n }\n\n onResize = (): void => {\n if (this.timerResize) {\n clearTimeout(this.timerResize);\n }\n this.timerResize = setTimeout(() => {\n this.timerResize = null;\n this.componentDidUpdate();\n });\n };\n\n onChange = (id: string, state: ioBroker.State): void => {\n if (\n id === this.props.obj._id &&\n state &&\n this.rangeValues &&\n (!this.rangeValues.length || this.rangeValues[this.rangeValues.length - 1].ts < state.ts)\n ) {\n if (!this.state.max || state.ts - this.state.max < 120_000) {\n if (this.chartValues) {\n this.chartValues.push({ val: state.val, ts: state.ts });\n }\n this.rangeValues.push({ val: state.val, ts: state.ts });\n\n // update only if an end is near to now\n if (state.ts >= this.chart.min && state.ts <= this.chart.max + 300_000) {\n this.updateChart();\n }\n }\n } else if (id.startsWith('system.adapter.') && id.endsWith('.alive') && this.state.historyInstances) {\n const instance = id.substring('system.adapter.'.length, id.length - '.alive'.length);\n const list = this.state.historyInstances;\n const itemIndex = list.findIndex(it => it.id === instance);\n if (itemIndex !== -1) {\n if (list[itemIndex].alive !== !!state?.val) {\n const historyInstances = JSON.parse(JSON.stringify(list));\n historyInstances[itemIndex].alive = !!state?.val;\n this.setState({ historyInstances }, () => {\n // read data if the instance becomes alive\n if (historyInstances[itemIndex].alive && this.state.historyInstance === instance) {\n void this.readHistoryRange().then(() => this.updateChart());\n }\n });\n }\n }\n }\n };\n\n async prepareData(): Promise<void> {\n if (this.props.noToolbar) {\n const isAlive =\n this.props.defaultHistory &&\n (await this.props.socket.getState(`system.adapter.${this.props.defaultHistory}.alive`));\n\n if (!this.subscribes.length) {\n this.subscribes = [`system.adapter.${this.props.defaultHistory}.alive`];\n await this.props.socket.subscribeState(\n `system.adapter.${this.props.defaultHistory}.alive`,\n this.onChange,\n );\n }\n\n await new Promise(resolve => {\n this.setState(\n {\n // dateFormat: this.props.dateFormat.replace(/D/g, 'd').replace(/Y/g, 'y'),\n defaultHistory: this.props.defaultHistory,\n historyInstance: this.props.defaultHistory,\n historyInstances: [{ id: this.props.defaultHistory, alive: !!isAlive?.val }],\n },\n () => resolve(null),\n );\n });\n return;\n }\n\n let list: { id: string; alive: boolean }[] = await this.getHistoryInstances();\n const config = await this.props.socket.getCompactSystemConfig();\n let instances: ioBroker.InstanceObject[] = [];\n if (this.props.showJumpToEchart) {\n instances = await this.props.socket.getAdapterInstances('echarts', true);\n }\n // collect all echarts instances\n const echartsJump = !!instances.find(item => item._id.startsWith('system.adapter.echarts.'));\n\n const defaultHistory = config && config.common && config.common.defaultHistory;\n // filter out history instances, that does not have data for this object\n if (this.props.obj.common.custom) {\n list = list.filter(it => this.props.obj.common.custom[it.id]);\n }\n\n // find current history\n // first read from localstorage\n let historyInstance = this.localStorage.getItem('App.historyInstance') || '';\n if (!historyInstance || !list.find(it => it.id === historyInstance && it.alive)) {\n // try default history\n historyInstance = defaultHistory;\n }\n if (!historyInstance || !list.find(it => it.id === historyInstance && it.alive)) {\n // find first the alive history\n const historyInstanceItem = list.find(it => it.alive);\n if (historyInstanceItem) {\n historyInstance = historyInstanceItem.id;\n }\n }\n // get first entry\n if (!historyInstance && list.length) {\n historyInstance = defaultHistory;\n }\n\n this.setState({\n ampm: config.common.dateFormat.includes('/'),\n // dateFormat: (config.common.dateFormat || 'dd.MM.yyyy').replace(/D/g, 'd').replace(/Y/g, 'y'),\n historyInstances: list,\n defaultHistory,\n historyInstance,\n echartsJump,\n stepType: this.props.obj.common.custom\n ? this.props.obj.common.custom[historyInstance]?.chartStep || ''\n : '',\n });\n }\n\n getHistoryInstances(): Promise<{ id: string; alive: boolean }[]> {\n if (this.props.historyInstance) {\n return Promise.resolve([]);\n }\n const list: { id: string; alive: boolean }[] = [];\n const ids: string[] = [];\n\n this.props.customsInstances.forEach(instance => {\n const instObj: ioBroker.InstanceObject = this.props.objects[`system.adapter.${instance}`] as\n | ioBroker.InstanceObject\n | undefined;\n if (instObj?.common?.getHistory) {\n const listObj = { id: instance, alive: false };\n list.push(listObj);\n ids.push(`system.adapter.${instance}.alive`);\n }\n });\n\n if (ids.length) {\n return this.props.socket.getForeignStates(ids).then(async (alives: Record<string, ioBroker.State>) => {\n Object.keys(alives).forEach(id => {\n const item = list.find(it => id.endsWith(`${it.id}.alive`));\n if (item) {\n item.alive = !!alives[id]?.val;\n }\n });\n this.subscribes = ids;\n for (let i = 0; i < ids.length; i++) {\n await this.props.socket.subscribeState(ids[i], this.onChange);\n }\n\n return list;\n });\n }\n\n return Promise.resolve(list);\n }\n\n readHistoryRange(): Promise<void> {\n const now = new Date();\n const oldest = new Date(2000, 0, 1);\n\n if (this.state.historyInstances?.find(it => it.id === this.state.historyInstance && it.alive)) {\n return this.props.socket\n .getHistory(this.props.obj._id, {\n instance: this.state.historyInstance,\n start: oldest.getTime(),\n end: now.getTime(),\n // step: 3600000, // hourly\n limit: 1,\n from: false,\n ack: false,\n q: false,\n addID: false,\n aggregate: 'none',\n })\n .then((values: { val: ioBroker.StateValue; ts: number }[]) => {\n // remove interpolated first value\n if (values && values[0]?.val === null) {\n values.shift();\n }\n this.rangeValues = values;\n });\n }\n\n return Promise.resolve();\n }\n\n readHistory(start?: number, end?: number): Promise<{ val: ioBroker.StateValue; ts: number }[]> {\n /* interface GetHistoryOptions {\n instance?: string;\n start?: number;\n end?: number;\n step?: number;\n count?: number;\n from?: boolean;\n ack?: boolean;\n q?: boolean;\n addID?: boolean;\n limit?: number;\n ignoreNull?: boolean;\n sessionId?: any;\n aggregate?: 'minmax' | 'min' | 'max' | 'average' | 'total' | 'count' | 'none';\n } */\n if (\n !this.state.historyInstance ||\n !this.state.historyInstances?.find(it => it.id === this.state.historyInstance && it.alive)\n ) {\n return Promise.resolve([]);\n }\n\n const options: ioBroker.GetHistoryOptions = {\n instance: this.state.historyInstance,\n start,\n end,\n from: false,\n ack: false,\n q: false,\n addID: false,\n aggregate: 'none',\n returnNewestEntries: true,\n };\n\n // if more than 24 hours => aggregate\n if (\n end - start > 60000 * 24 &&\n !(\n this.props.obj.common.type === 'boolean' ||\n (this.props.obj.common.type === 'number' && this.props.obj.common.states)\n )\n ) {\n options.aggregate = 'minmax';\n // options.step = 60000;\n }\n\n return this.props.socket\n .getHistory(this.props.obj._id, options)\n .then((values: { val: ioBroker.StateValue; ts: number }[]) => {\n // merge range and chart\n const chart = [];\n let r = 0;\n const range = this.rangeValues;\n let minY = null;\n let maxY = null;\n\n for (let t = 0; t < values.length; t++) {\n if (range) {\n while (r < range.length && range[r].ts < values[t].ts) {\n chart.push(range[r]);\n // console.log(`add ${new Date(range[r].ts).toISOString()}: ${range[r].val}`);\n r++;\n }\n }\n // if range and details are not equal\n if (!chart.length || chart[chart.length - 1].ts < values[t].ts) {\n chart.push(values[t]);\n // console.log(`add value ${new Date(values[t].ts).toISOString()}: ${values[t].val}`)\n } else if (\n chart[chart.length - 1].ts === values[t].ts &&\n chart[chart.length - 1].val !== values[t].ts\n ) {\n console.error('Strange data!');\n }\n if (minY === null || values[t].val < minY) {\n minY = values[t].val;\n }\n if (maxY === null || values[t].val > maxY) {\n maxY = values[t].val;\n }\n }\n\n if (range) {\n while (r < range.length) {\n chart.push(range[r]);\n console.log(`add range ${new Date(range[r].ts).toISOString()}: ${range[r].val}`);\n r++;\n }\n }\n\n // sort\n chart.sort((a, b) => (a.ts > b.ts ? 1 : a.ts < b.ts ? -1 : 0));\n\n this.chartValues = chart;\n this.minY = minY as number;\n this.maxY = maxY as number;\n\n if (this.minY < 10) {\n this.minY = Math.round(this.minY * 10) / 10;\n } else {\n this.minY = Math.ceil(this.minY);\n }\n if (this.maxY < 10) {\n this.maxY = Math.round(this.maxY * 10) / 10;\n } else {\n this.maxY = Math.ceil(this.maxY);\n }\n\n return chart;\n });\n }\n\n convertData(values?: HistoryItem[]): { value: number[]; exact?: boolean }[] {\n values = values || this.chartValues;\n const data: { value: number[]; exact?: boolean }[] = [];\n if (!values.length) {\n return [];\n }\n for (let i = 0; i < values.length; i++) {\n const dp: { value: number[]; exact?: boolean } = { value: [values[i].ts, values[i].val as number] };\n if (values[i].i) {\n dp.exact = false;\n }\n data.push(dp);\n }\n if (!this.chart.min) {\n this.chart.min = values[0].ts;\n this.chart.max = values[values.length - 1].ts;\n }\n\n return data;\n }\n\n getOption(): EChartsOption {\n let widthAxis;\n if (this.minY !== null && this.minY !== undefined) {\n widthAxis = (this.minY.toString() + this.unit).length * 9 + 12;\n }\n if (this.maxY !== null && this.maxY !== undefined) {\n const w = (this.maxY.toString() + this.unit).length * 9 + 12;\n if (w > widthAxis) {\n widthAxis = w;\n }\n }\n\n if (this.state.maxYLen) {\n const w = this.state.maxYLen * 9 + 12;\n if (w > widthAxis) {\n widthAxis = w;\n }\n }\n\n const serie = {\n xAxisIndex: 0,\n type: 'line',\n step:\n this.state.stepType === 'stepStart'\n ? 'start'\n : this.state.stepType === 'stepMiddle'\n ? 'middle'\n : this.state.stepType === 'stepEnd'\n ? 'end'\n : undefined,\n showSymbol: false,\n hoverAnimation: true,\n animation: false,\n data: this.convertData(),\n lineStyle: {\n color: '#4dabf5',\n },\n areaStyle: {},\n };\n\n const yAxis: YAXisComponentOption = {\n type: 'value',\n boundaryGap: [0, '100%'],\n splitLine: {\n show: this.props.noToolbar || !!this.state.splitLine,\n },\n splitNumber: Math.round(this.state.chartHeight / 50),\n axisLabel: {\n formatter: (value: number) => {\n let text;\n if (this.props.isFloatComma) {\n text = value.toString().replace(',', '.') + this.unit;\n } else {\n text = value + this.unit;\n }\n\n if (this.state.maxYLen < text.length) {\n if (this.maxYLenTimeout) {\n clearTimeout(this.maxYLenTimeout);\n }\n this.maxYLenTimeout = setTimeout(\n maxYLen => {\n this.maxYLenTimeout = null;\n this.setState({ maxYLen });\n },\n 200,\n text.length,\n );\n }\n return text;\n },\n showMaxLabel: true,\n showMinLabel: true,\n },\n axisTick: {\n // @ts-expect-error fix later\n alignWithLabel: true,\n },\n };\n\n if (this.props.obj.common.type === 'boolean') {\n serie.step = 'end';\n yAxis.axisLabel.showMaxLabel = false;\n // @ts-expect-error fix later\n yAxis.axisLabel.formatter = (value: number) => (value === 1 ? 'TRUE' : 'FALSE');\n yAxis.max = 1.5;\n // @ts-expect-error fix later\n yAxis.interval = 1;\n widthAxis = 50;\n } else if (this.props.obj.common.type === 'number' && this.props.obj.common.states) {\n serie.step = 'end';\n yAxis.axisLabel.showMaxLabel = false;\n const states = this.props.obj.common.states as Record<string, string>;\n // @ts-expect-error fix later\n yAxis.axisLabel.formatter = (value: number) => (states[value] !== undefined ? states[value] : value);\n const keys = Object.keys(this.props.obj.common.states);\n keys.sort();\n yAxis.max = parseFloat(keys[keys.length - 1]) + 0.5;\n // @ts-expect-error fix later\n yAxis.interval = 1;\n let max = '';\n for (let i = 0; i < keys.length; i++) {\n if (typeof states[keys[i]] === 'string' && states[keys[i]].length > max.length) {\n max = states[keys[i]];\n }\n }\n widthAxis = (max.length * 9 || 50) + 12;\n }\n\n const splitNumber = this.chart.withSeconds\n ? Math.round((this.state.chartWidth - GRID_PADDING_RIGHT - GRID_PADDING_LEFT) / 100)\n : Math.round((this.state.chartWidth - GRID_PADDING_RIGHT - GRID_PADDING_LEFT) / 60);\n\n return {\n backgroundColor: 'transparent',\n title: {\n text: this.props.noToolbar ? '' : Utils.getObjectNameFromObj(this.props.obj, this.props.lang),\n padding: [\n 10, // up\n 0, // right\n 0, // down\n widthAxis ? widthAxis + 10 : GRID_PADDING_LEFT + 10, // left\n ],\n },\n grid: {\n left: widthAxis || GRID_PADDING_LEFT,\n top: 8,\n right: this.props.noToolbar ? 5 : GRID_PADDING_RIGHT,\n bottom: 40,\n },\n tooltip: {\n trigger: 'axis',\n formatter: params => {\n // @ts-expect-error fix later\n const param = params[0];\n const date = new Date(param.value[0]);\n let value: number | string = param.value[1];\n if (value !== null && this.props.isFloatComma) {\n value = value.toString().replace('.', ',');\n }\n return `${param.exact === false ? 'i' : ''}${date.toLocaleString()}.${date.getMilliseconds().toString().padStart(3, '0')}: ${value}${this.unit}`;\n },\n axisPointer: {\n animation: true,\n },\n },\n xAxis: {\n // type: 'time',\n splitLine: {\n show: false,\n },\n splitNumber,\n min: this.chart.min,\n max: this.chart.max,\n axisTick: {\n // @ts-expect-error fix later\n alignWithLabel: true,\n },\n axisLabel: {\n formatter: (value: number) => {\n const date = new Date(value);\n if (this.chart.withSeconds) {\n return `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}:${date.getSeconds().toString().padStart(2, '0')}`;\n }\n if (this.chart.withTime) {\n return `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}\\n${date.getDate().toString().padStart(2, '0')}.${(date.getMonth() + 1).toString().padStart(2, '0')}`;\n }\n return `${date.getDate().toString().padStart(2, '0')}.${(date.getMonth() + 1).toString().padStart(2, '0')}\\n${date.getFullYear()}`;\n },\n },\n },\n yAxis,\n toolbox: {\n left: 'right',\n feature: this.props.noToolbar\n ? undefined\n : {\n saveAsImage: {\n title: this.props.t('Save as image'),\n show: true,\n },\n },\n },\n // @ts-expect-error fix later\n series: [serie],\n };\n }\n\n static getDerivedStateFromProps(_props: ObjectChartProps, _state: ObjectChartState): null {\n return null;\n }\n\n updateChart(start?: number, end?: number, withReadData?: boolean, cb?: () => void): void {\n if (start) {\n this.start = start;\n }\n if (end) {\n this.end = end;\n }\n start = start || this.start;\n end = end || this.end;\n\n if (this.readTimeout) {\n clearTimeout(this.readTimeout);\n }\n\n this.readTimeout = setTimeout(() => {\n this.readTimeout = null;\n\n const diff = this.chart.max - this.chart.min;\n if (diff !== this.chart.diff) {\n this.chart.diff = diff;\n this.chart.withTime = this.chart.diff < 3600000 * 24 * 7;\n this.chart.withSeconds = this.chart.diff < 60000 * 30;\n }\n\n if (withReadData) {\n void this.readHistory(start, end).then((values: HistoryItem[]) => {\n if (typeof this.echartsReact?.getEchartsInstance === 'function') {\n this.echartsReact.getEchartsInstance().setOption({\n series: [{ data: this.convertData(values) }],\n xAxis: {\n min: this.chart.min,\n max: this.chart.max,\n },\n });\n }\n if (cb) {\n cb();\n }\n });\n } else {\n if (typeof this.echartsReact?.getEchartsInstance === 'function') {\n this.echartsReact.getEchartsInstance().setOption({\n series: [{ data: this.convertData() }],\n xAxis: {\n min: this.chart.min,\n max: this.chart.max,\n },\n });\n }\n if (cb) {\n cb();\n }\n }\n }, 400);\n }\n\n setNewRange(readData?: boolean): void {\n /* if (this.rangeRef.current &&\n this.rangeRef.current.childNodes[1] &&\n this.rangeRef.current.childNodes[1].value) {\n this.rangeRef.current.childNodes[0].innerHTML = '';\n this.rangeRef.current.childNodes[1].value = '';\n } */\n this.chart.diff = this.chart.max - this.chart.min;\n this.chart.withTime = this.chart.diff < 3600000 * 24 * 7;\n this.chart.withSeconds = this.chart.diff < 60000 * 30;\n\n if (this.state.relativeRange !== 'absolute') {\n this.setState({ relativeRange: 'absolute' });\n // stop shift timer\n if (this.timeTimer) {\n clearTimeout(this.timeTimer);\n this.timeTimer = null;\n }\n } else if (typeof this.echartsReact?.getEchartsInstance === 'function') {\n this.echartsReact.getEchartsInstance().setOption({\n xAxis: {\n min: this.chart.min,\n max: this.chart.max,\n },\n });\n\n if (readData) {\n this.updateChart(this.chart.min, this.chart.max, true);\n }\n }\n }\n\n shiftTime(): void {\n const now = new Date();\n const delay = 60000 - now.getSeconds() - (1000 - now.getMilliseconds());\n\n if (now.getMilliseconds()) {\n now.setMilliseconds(1000);\n }\n if (now.getSeconds()) {\n now.setSeconds(60);\n }\n\n const max = now.getTime();\n let min;\n const mins = this.state.relativeRange;\n\n if (mins === 'day') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n min = now.getTime();\n } else if (mins === 'week') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n\n const day = now.getDay() || 7;\n if (day !== 1) {\n now.setHours(-24 * (day - 1));\n }\n\n min = now.getTime();\n } else if (mins === '2weeks') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setDate(now.getDate() - 7); // 1 week earlier\n\n const day = now.getDay() || 7;\n if (day !== 1) {\n now.setHours(-24 * (day - 1));\n }\n\n min = now.getTime();\n } else if (mins === 'month') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setDate(1);\n min = now.getTime();\n } else if (mins === 'year') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setDate(1);\n now.setMonth(0);\n min = now.getTime();\n } else if (mins === '12months') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setFullYear(now.getFullYear() - 1);\n min = now.getTime();\n } else {\n min = max - parseInt(mins, 10) * 60000;\n }\n\n this.chart.min = min;\n this.chart.max = max;\n\n this.setState({ min, max }, () => this.updateChart(this.chart.min, this.chart.max, true));\n\n this.timeTimer = setTimeout(() => {\n this.timeTimer = null;\n this.shiftTime();\n }, delay || 60000);\n }\n\n setRelativeInterval(mins: string, dontSave?: boolean, cb?: () => void): void {\n if (!dontSave) {\n this.localStorage.setItem('App.relativeRange', mins);\n this.setState({ relativeRange: mins });\n }\n if (mins === 'absolute') {\n if (this.timeTimer) {\n clearTimeout(this.timeTimer);\n this.timeTimer = null;\n }\n this.updateChart(this.chart.min, this.chart.max, true, cb);\n return;\n }\n this.localStorage.removeItem('App.absoluteStart');\n this.localStorage.removeItem('App.absoluteEnd');\n\n const now = new Date();\n\n if (!this.timeTimer) {\n const delay = 60000 - now.getSeconds() - (1000 - now.getMilliseconds());\n this.timeTimer = setTimeout(() => {\n this.timeTimer = null;\n this.shiftTime();\n }, delay || 60000);\n }\n\n if (now.getMilliseconds()) {\n now.setMilliseconds(1000);\n }\n if (now.getSeconds()) {\n now.setSeconds(60);\n }\n\n this.chart.max = now.getTime();\n\n if (mins === 'day') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n this.chart.min = now.getTime();\n } else if (mins === 'week') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n\n const day = now.getDay() || 7;\n if (day !== 1) {\n now.setHours(-24 * (day - 1));\n }\n\n this.chart.min = now.getTime();\n } else if (mins === '2weeks') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setDate(now.getDate() - 7); // 1 week earlier\n\n const day = now.getDay() || 7;\n if (day !== 1) {\n now.setHours(-24 * (day - 1));\n }\n\n this.chart.min = now.getTime();\n } else if (mins === 'month') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setDate(1);\n this.chart.min = now.getTime();\n } else if (mins === 'year') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setDate(1);\n now.setMonth(0);\n this.chart.min = now.getTime();\n } else if (mins === '12months') {\n now.setHours(0);\n now.setMinutes(0);\n now.setSeconds(0);\n now.setFullYear(now.getFullYear() - 1);\n this.chart.min = now.getTime();\n } else {\n this.chart.min = this.chart.max - parseInt(mins, 10) * 60000;\n }\n\n this.setState({ min: this.chart.min, max: this.chart.max }, () =>\n this.updateChart(this.chart.min, this.chart.max, true, cb),\n );\n }\n\n installEventHandlers(): void {\n if (!this.echartsReact || typeof this.echartsReact.getEchartsInstance !== 'function') {\n return;\n }\n\n const zr = this.echartsReact.getEchartsInstance().getZr();\n if (!(zr as any)._iobInstalled) {\n (zr as any)._iobInstalled = true;\n zr.on('mousedown', (e: MouseEvent) => {\n console.log('mouse down');\n this.mouseDown = true;\n this.chart.lastX = e.offsetX;\n });\n zr.on('mouseup', () => {\n console.log('mouse up');\n this.mouseDown = false;\n this.setNewRange(true);\n });\n zr.on('mousewheel', e => {\n let diff = this.chart.max - this.chart.min;\n const width = this.state.chartWidth - GRID_PADDING_RIGHT - GRID_PADDING_LEFT;\n const x = e.offsetX - GRID_PADDING_LEFT;\n const pos = x / width;\n\n const oldDiff = diff;\n const amount = e.wheelDelta > 0 ? 1.1 : 0.9;\n diff *= amount;\n const move = oldDiff - diff;\n this.chart.max += move * (1 - pos);\n this.chart.min -= move * pos;\n\n this.setNewRange();\n });\n zr.on('mousemove', (e: MouseEvent) => {\n if (this.mouseDown) {\n const moved = this.chart.lastX - (e.offsetX - GRID_PADDING_LEFT);\n this.chart.lastX = e.offsetX - GRID_PADDING_LEFT;\n const diff = this.chart.max - this.chart.min;\n const width = this.state.chartWidth - GRID_PADDING_RIGHT - GRID_PADDING_LEFT;\n\n const shift = Math.round((moved * diff) / width);\n this.chart.min += shift;\n this.chart.max += shift;\n this.setNewRange();\n }\n });\n\n zr.on('touchstart', (e: React.TouchEvent) => {\n e.preventDefault();\n this.mouseDown = true;\n // @ts-expect-error fix later\n const touches = e.touches || e.originalEvent.touches;\n if (touches) {\n this.chart.lastX = touches[touches.length - 1].pageX;\n if (touches.length > 1) {\n this.chart.lastWidth = Math.abs(touches[0].pageX - touches[1].pageX);\n } else {\n this.chart.lastWidth = null;\n }\n }\n });\n zr.on('touchend', e => {\n e.preventDefault();\n this.mouseDown = false;\n this.setNewRange(true);\n });\n zr.on('touchmove', e => {\n e.preventDefault();\n const touches = e.touches || e.originalEvent.touches;\n if (!touches) {\n return;\n }\n const pageX = touches[touches.length - 1].pageX - GRID_PADDING_LEFT;\n if (this.mouseDown) {\n if (touches.length > 1) {\n // zoom\n const fingerWidth = Math.abs(touches[0].pageX - touches[1].pageX);\n if (this.chart.lastWidth !== null && fingerWidth !== this.chart.lastWidth) {\n let diff = this.chart.max - this.chart.min;\n const chartWidth = this.state.chartWidth - GRID_PADDING_RIGHT - GRID_PADDING_LEFT;\n\n const amount = fingerWidth > this.chart.lastWidth ? 1.1 : 0.9;\n const positionX =\n touches[0].pageX > touches[1].pageX\n ? touches[1].pageX - GRID_PADDING_LEFT + fingerWidth / 2\n : touches[0].pageX - GRID_PADDING_LEFT + fingerWidth / 2;\n\n const pos = positionX / chartWidth;\n\n const oldDiff = diff;\n diff *= amount;\n const move = oldDiff - diff;\n\n this.chart.max += move * (1 - pos);\n this.chart.min -= move * pos;\n\n this.setNewRange();\n }\n this.chart.lastWidth = fingerWidth;\n } else {\n // swipe\n const moved = this.chart.lastX - pageX;\n const diff = this.chart.max - this.chart.min;\n const chartWidth = this.state.chartWidth - GRID_PADDING_RIGHT - GRID_PADDING_LEFT;\n\n const shift = Math.round((moved * diff) / chartWidth);\n this.chart.min += shift;\n this.chart.max += shift;\n\n this.setNewRange();\n }\n }\n this.chart.lastX = pageX;\n });\n }\n }\n\n private renderChart(): JSX.Element {\n if (!this.state.historyInstance) {\n return (\n <div style={{ marginTop: 20, fontSize: 24, marginLeft: 24 }}>\n {this.props.t('History instance not selected')}\n </div>\n );\n }\n if (!this.state.historyInstances?.find(it => it.id === this.state.historyInstance && it.alive)) {\n return (\n <div style={{ marginTop: 20, fontSize: 24, marginLeft: 24 }}>\n {this.props.t('History instance not alive')}\n </div>\n );\n }\n if (this.chartValues) {\n return (\n <ReactEchartsCore\n ref={e => (this.echartsReact = e)}\n echarts={echarts}\n option={this.getOption()}\n notMerge\n lazyUpdate\n theme={this.props.themeType === 'dark' ? 'dark' : ''}\n style={{ height: `${this.state.chartHeight}px`, width: '100%' }}\n opts={{ renderer: 'svg' }}\n onEvents={{ rendered: () => this.installEventHandlers() }}\n />\n );\n }\n\n return <LinearProgress />;\n }\n\n componentDidUpdate(): void {\n if (this.divRef.current) {\n const width = this.divRef.current.offsetWidth;\n const height = this.divRef.current.offsetHeight;\n if (this.state.chartHeight !== height) {\n // || this.state.chartHeight !== height) {\n if (this.updateTimer) {\n clearTimeout(this.updateTimer);\n }\n this.updateTimer = setTimeout(() => {\n this.updateTimer = null;\n this.setState({ chartHeight: height, chartWidth: width });\n }, 100);\n }\n }\n }\n\n setStartDate(min: Date): void {\n const minNumber: number = min.getTime();\n if (this.timeTimer) {\n clearTimeout(this.timeTimer);\n this.timeTimer = null;\n }\n this.localStorage.setItem('App.relativeRange', 'absolute');\n this.localStorage.setItem('App.absoluteStart', minNumber.toString());\n this.localStorage.setItem('App.absoluteEnd', this.state.max.toString());\n\n this.chart.min = minNumber;\n\n this.setState({ min: minNumber, relativeRange: 'absolute' }, () =>\n this.updateChart(this.chart.min, this.chart.max, true),\n );\n }\n\n setEndDate(max: Date): void {\n const maxNumber: number = max.getTime();\n this.localStorage.setItem('App.relativeRange', 'absolute');\n this.localStorage.setItem('App.absoluteStart', this.state.min.toString());\n this.localStorage.setItem('App.absoluteEnd', maxNumber.toString());\n if (this.timeTimer) {\n clearTimeout(this.timeTimer);\n this.timeTimer = null;\n }\n this.chart.max = maxNumber;\n this.setState({ max: maxNumber, relativeRange: 'absolute' }, () =>\n this.updateChart(this.chart.min, this.chart.max, true),\n );\n }\n\n openEcharts(): void {\n const args = [\n `id=${window.encodeURIComponent(this.props.obj._id)}`,\n `instance=${window.encodeURIComponent(this.state.historyInstance)}`,\n 'menuOpened=false',\n ];\n\n if (this.state.relativeRange === 'absolute') {\n args.push(`start=${this.chart.min}`);\n args.push(`end=${this.chart.max}`);\n } else {\n args.push(`range=${this.state.relativeRange}`);\n }\n\n window.open(\n `${window.location.protocol}//${window.location.host}/adapter/echarts/tab.html#${args.join('&')}`,\n 'echarts',\n );\n }\n\n async onStepChanged(stepType: string): Promise<void> {\n // save in an object\n const obj = await this.props.socket.getObject(this.props.obj._id);\n if (\n obj.common.custom &&\n obj.common.custom[this.state.historyInstance] &&\n obj.common.custom[this.state.historyInstance].chartStep !== stepType\n ) {\n obj.common.custom[this.state.historyInstance].chartStep = stepType;\n await this.props.socket.setObject(obj._id, obj);\n }\n this.setState({ stepType, showStepMenu: null });\n }\n\n renderToolbar(): JSX.Element | null {\n if (this.props.noToolbar) {\n return null;\n }\n\n return (\n <Toolbar>\n {!this.props.historyInstance && (\n <FormControl\n variant=\"standard\"\n style={styles.selectHistoryControl}\n >\n <InputLabel>{this.props.t('History instance')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.historyInstance}\n onChange={(e): void => {\n this.localStorage.setItem('App.historyInstance', e.target.value);\n this.setState({ historyInstance: e.target.value });\n }}\n >\n {this.state.historyInstances.map(it => (\n <MenuItem\n key={it.id}\n value={it.id}\n style={!it.alive ? styles.notAliveInstance : undefined}\n >\n {it.id}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n )}\n <FormControl\n variant=\"standard\"\n style={styles.selectRelativeTime}\n >\n <InputLabel>{this.props.t('Relative')}</InputLabel>\n <Select\n variant=\"standard\"\n ref={this.rangeRef}\n value={this.state.relativeRange}\n onChange={e => this.setRelativeInterval(e.target.value)}\n >\n <MenuItem\n key=\"custom\"\n value=\"absolute\"\n sx={styles.customRange}\n >\n {this.props.t('custom range')}\n </MenuItem>\n <MenuItem\n key=\"1\"\n value={10}\n >\n {this.props.t('last 10 minutes')}\n </MenuItem>\n <MenuItem\n key=\"2\"\n value={30}\n >\n {this.props.t('last 30 minutes')}\n </MenuItem>\n <MenuItem\n key=\"3\"\n value={60}\n >\n {this.props.t('last hour')}\n </MenuItem>\n <MenuItem\n key=\"4\"\n value=\"day\"\n >\n {this.props.t('this day')}\n </MenuItem>\n <MenuItem\n key=\"5\"\n value={24 * 60}\n >\n {this.props.t('last 24 hours')}\n </MenuItem>\n <MenuItem\n key=\"6\"\n value=\"week\"\n >\n {this.props.t('this week')}\n </MenuItem>\n <MenuItem\n key=\"7\"\n value={24 * 60 * 7}\n >\n {this.props.t('last week')}\n </MenuItem>\n <MenuItem\n key=\"8\"\n value=\"2weeks\"\n >\n {this.props.t('this 2 weeks')}\n </MenuItem>\n <MenuItem\n key=\"9\"\n value={24 * 60 * 14}\n >\n {this.props.t('last 2 weeks')}\n </MenuItem>\n <MenuItem\n key=\"10\"\n value=\"month\"\n >\n {this.props.t('this month')}\n </MenuItem>\n <MenuItem\n key=\"11\"\n value={30 * 24 * 60}\n >\n {this.props.t('last 30 days')}\n </MenuItem>\n <MenuItem\n key=\"12\"\n value=\"year\"\n >\n {this.props.t('this year')}\n </MenuItem>\n <MenuItem\n key=\"13\"\n value=\"12months\"\n >\n {this.props.t('last 12 months')}\n </MenuItem>\n </Select>\n </FormControl>\n <LocalizationProvider\n dateAdapter={AdapterDateFns}\n adapterLocale={localeMap[this.props.lang]}\n >\n <div style={styles.toolbarTimeGrid}>\n <div\n style={{\n ...styles.toolbarTimeLabel,\n opacity: this.state.relativeRange !== 'absolute' ? 0.5 : undefined,\n }}\n >\n {this.props.t('Start time')}\n </div>\n <DatePicker\n sx={styles.toolbarDate}\n disabled={this.state.relativeRange !== 'absolute'}\n value={new Date(this.state.min)}\n onChange={date => this.setStartDate(date)}\n />\n <TimePicker\n disabled={this.state.relativeRange !== 'absolute'}\n sx={styles.toolbarTime}\n ampm={this.state.ampm}\n value={new Date(this.state.min)}\n onChange={date => this.setStartDate(date)}\n />\n </div>\n <div style={styles.toolbarTimeGrid}>\n <div\n style={{\n ...styles.toolbarTimeLabel,\n opacity: this.state.relativeRange !== 'absolute' ? 0.5 : undefined,\n }}\n >\n {this.props.t('End time')}\n </div>\n <DatePicker\n disabled={this.state.relativeRange !== 'absolute'}\n sx={styles.toolbarDate}\n value={new Date(this.state.max)}\n onChange={date => this.setEndDate(date)}\n />\n <TimePicker\n disabled={this.state.relativeRange !== 'absolute'}\n sx={styles.toolbarTime}\n ampm={this.state.ampm}\n value={new Date(this.state.max)}\n onChange={date => this.setEndDate(date)}\n />\n </div>\n </LocalizationProvider>\n <div style={styles.grow} />\n <Button\n style={{ marginRight: 10 }}\n variant=\"outlined\"\n onClick={e => this.setState({ showStepMenu: e.target as HTMLElement })}\n >\n {this.state.stepType ? this.props.t(this.state.stepType) : this.props.t('Step type')}\n </Button>\n {this.state.showStepMenu ? (\n <Menu\n open={!0}\n anchorEl={this.state.showStepMenu}\n onClose={() => this.setState({ showStepMenu: null })}\n >\n <MenuItem\n selected={this.state.stepType === ''}\n onClick={() => this.onStepChanged('')}\n >\n {this.props.t('None')}\n </MenuItem>\n <MenuItem\n selected={this.state.stepType === 'stepStart'}\n onClick={() => this.onStepChanged('stepStart')}\n >\n {this.props.t('stepStart')}\n </MenuItem>\n </Menu>\n ) : null}\n {this.props.showJumpToEchart && this.state.echartsJump && (\n <Fab\n style={styles.echartsButton}\n size=\"small\"\n onClick={() => this.openEcharts()}\n title={this.props.t('Open charts in new window')}\n >\n <img\n src={EchartsIcon}\n alt=\"echarts\"\n style={styles.buttonIcon}\n />\n </Fab>\n )}\n <Fab\n variant=\"extended\"\n size=\"small\"\n color={this.state.splitLine ? 'primary' : 'default'}\n aria-label=\"show lines\"\n onClick={() => {\n this.localStorage.setItem('App.splitLine', this.state.splitLine ? 'false' : 'true');\n this.setState({ splitLine: !this.state.splitLine });\n }}\n >\n <SplitLineIcon style={styles.splitLineButtonIcon} />\n {this.props.t('Show lines')}\n </Fab>\n </Toolbar>\n );\n }\n\n render(): JSX.Element {\n if (!this.state.historyInstances && !this.state.defaultHistory) {\n return <LinearProgress />;\n }\n\n return (\n <Paper style={styles.paper}>\n {this.renderToolbar()}\n <div\n ref={this.divRef}\n style={Utils.getStyle(\n this.props.theme,\n styles.chart,\n this.props.noToolbar ? styles.chartWithoutToolbar : styles.chartWithToolbar,\n )}\n >\n {this.renderChart()}\n </div>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(ObjectChart);\n","import React, { type JSX } from 'react';\n\nimport { Button, Dialog, DialogActions, DialogContent, DialogTitle, AppBar, Tabs, Tab, Box } from '@mui/material';\n\nimport {\n I18n,\n DialogConfirm,\n Router,\n type AdminConnection,\n type IobTheme,\n type ThemeType,\n type ThemeName,\n type Translate,\n} from '@iobroker/adapter-react-v5';\n\n// Icons\nimport { Close as CloseIcon, Save as SaveIcon } from '@mui/icons-material';\n\nimport ObjectCustomEditor from '../components/Object/ObjectCustomEditor';\nimport ObjectHistoryData from '../components/Object/ObjectHistoryData';\nimport ObjectChart from '../components/Object/ObjectChart';\nimport MobileDialog from '../helpers/MobileDialog';\n\nconst styles: Record<string, any> = {\n dialog: {\n height: '100%',\n },\n paper: {\n height: 'calc(100% - 64px)',\n },\n content: {\n textAlign: 'center',\n overflow: 'hidden',\n },\n tabPanel: (theme: IobTheme) => ({\n width: '100%',\n overflow: 'hidden',\n height: `calc(100% - ${theme.mixins.toolbar.minHeight}px)`,\n }),\n tabSelected: (theme: IobTheme) => ({\n color: theme.palette.mode === 'dark' ? theme.palette.secondary.contrastText : '#FFFFFF !important',\n }),\n tabsIndicator: (theme: IobTheme) => ({\n backgroundColor: theme.palette.secondary.main,\n }),\n};\n\ninterface ObjectCustomDialogProps {\n t: Translate;\n lang: ioBroker.Languages;\n expertMode?: boolean;\n objects: Record<string, ioBroker.Object>;\n socket: AdminConnection;\n theme: IobTheme;\n themeName: ThemeName;\n themeType: ThemeType;\n customsInstances: string[];\n objectIDs: string[];\n onClose: () => void;\n reportChangedIds: (ids: string[]) => void;\n isFloatComma: boolean;\n allVisibleObjects: boolean;\n systemConfig: ioBroker.SystemConfigObject;\n}\n\ninterface ObjectCustomDialogState {\n hasChanges: boolean;\n currentTab: number;\n confirmDialog: boolean;\n mobile: boolean;\n progressRunning: boolean;\n showWarning: boolean;\n}\n\nclass ObjectCustomDialog extends MobileDialog<ObjectCustomDialogProps, ObjectCustomDialogState> {\n private chartAvailable: boolean;\n\n private saveFunc: ((cb?: (error?: boolean) => void) => void) | null = null;\n\n constructor(props: ObjectCustomDialogProps) {\n super(props);\n\n let currentTab = parseInt(\n (((window as any)._localStorage as Storage) || window.localStorage).getItem('App.objectCustomTab') || '0',\n 10,\n );\n\n this.chartAvailable = this.isChartAvailable();\n\n if (this.chartAvailable) {\n const location = Router.getLocation();\n if (location.arg === 'chart') {\n currentTab = 2;\n } else if (location.arg === 'table') {\n currentTab = 1;\n }\n } else {\n currentTab = 0;\n }\n\n this.state = {\n hasChanges: false,\n currentTab,\n confirmDialog: false,\n mobile: MobileDialog.isMobile(),\n progressRunning: false,\n showWarning: this.props.allVisibleObjects,\n };\n }\n\n isChartAvailable(): boolean {\n let chartAvailable = this.props.objectIDs.length === 1;\n if (chartAvailable) {\n const id = this.props.objectIDs[0];\n if (this.props.objects[id]?.common?.custom) {\n chartAvailable = !!Object.keys(this.props.objects[id].common.custom).find(inst => {\n const obj = this.props.objects[`system.adapter.${inst}`];\n return obj && obj.common && obj.common.getHistory;\n });\n } else {\n chartAvailable = false;\n }\n }\n return chartAvailable;\n }\n\n renderCharts(): JSX.Element {\n return (\n <ObjectChart\n id=\"custom-tabpanel-chart\"\n isFloatComma={this.props.isFloatComma}\n showJumpToEchart\n t={this.props.t}\n lang={this.props.lang}\n expertMode={this.props.expertMode}\n socket={this.props.socket}\n obj={this.props.objects[this.props.objectIDs[0]]}\n customsInstances={this.props.customsInstances}\n themeType={this.props.themeType}\n theme={this.props.theme}\n objects={this.props.objects}\n />\n );\n }\n\n renderTable(): JSX.Element {\n return (\n <ObjectHistoryData\n id=\"custom-tabpanel-history\"\n t={this.props.t}\n isFloatComma={this.props.isFloatComma}\n lang={this.props.lang}\n expertMode={this.props.expertMode}\n socket={this.props.socket}\n obj={this.props.objects[this.props.objectIDs[0]]}\n customsInstances={this.props.customsInstances}\n themeName={this.props.themeName}\n objects={this.props.objects}\n />\n );\n }\n\n renderCustomEditor(): JSX.Element {\n return (\n <ObjectCustomEditor\n id=\"custom-tabpanel-settings\"\n registerSaveFunc={(func: (cb?: (error?: boolean) => void) => void) => (this.saveFunc = func)}\n t={this.props.t}\n allVisibleObjects={this.props.allVisibleObjects}\n lang={this.props.lang}\n expertMode={this.props.expertMode}\n socket={this.props.socket}\n objectIDs={this.props.objectIDs}\n customsInstances={this.props.customsInstances}\n objects={this.props.objects}\n onProgress={(progressRunning: boolean) => this.setState({ progressRunning })}\n reportChangedIds={this.props.reportChangedIds}\n onChange={(hasChanges: boolean, update: boolean) => {\n this.setState({ hasChanges }, () => {\n if (update) {\n const chartAvailable = this.isChartAvailable();\n if (chartAvailable !== this.chartAvailable) {\n this.chartAvailable = chartAvailable;\n this.forceUpdate();\n }\n }\n });\n }}\n theme={this.props.theme}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n systemConfig={this.props.systemConfig}\n />\n );\n }\n\n renderDialogConfirm(): JSX.Element | null {\n if (!this.state.confirmDialog) {\n return null;\n }\n return (\n <DialogConfirm\n title={I18n.t('You have unsaved changes')}\n text={I18n.t('Discard?')}\n ok={I18n.t('Yes')}\n cancel={I18n.t('Cancel')}\n onClose={isYes => this.setState({ confirmDialog: false }, () => isYes && this.props.onClose())}\n />\n );\n }\n\n onClose(): void {\n if (this.state.hasChanges) {\n this.setState({ confirmDialog: true });\n } else {\n this.props.onClose();\n }\n }\n\n renderWarningDialog(): JSX.Element | null {\n if (!this.state.showWarning) {\n return null;\n }\n return (\n <DialogConfirm\n text={\n <div style={{ color: '#F00' }}>\n {this.props.t('Your are intend to edit ALL objects. Are you sure?')}\n </div>\n }\n ok={this.props.t('Yes')}\n onClose={result => {\n this.setState({ showWarning: false });\n if (!result) {\n this.onClose();\n }\n }}\n />\n );\n }\n\n render(): JSX.Element {\n const varType = this.props.objects[this.props.objectIDs[0]]?.common?.type;\n\n return (\n <Dialog\n sx={{ '&.MuiDialog-scrollPaper': styles.dialog, '& .MuiDialog-paper': styles.paper }}\n scroll=\"paper\"\n open={!0}\n onClose={() => this.props.onClose()}\n fullWidth\n maxWidth=\"xl\"\n aria-labelledby=\"form-dialog-title\"\n >\n {this.renderDialogConfirm()}\n {this.renderWarningDialog()}\n <DialogTitle>\n {this.props.objectIDs.length > 1\n ? this.props.t('Edit config for %s states', this.props.objectIDs.length)\n : this.props.t('Edit config: %s', this.props.objectIDs[0])}\n </DialogTitle>\n <DialogContent style={styles.content}>\n <AppBar position=\"static\">\n <Tabs\n value={this.state.currentTab}\n onChange={(_event, newTab) => {\n Router.doNavigate(\n null,\n null,\n null,\n newTab === 1 ? 'table' : newTab === 2 ? 'chart' : 'config',\n );\n this.setState({ currentTab: newTab });\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n 'App.objectCustomTab',\n newTab,\n );\n }}\n sx={{ '& .MuiTabs-indicator': styles.tabsIndicator }}\n indicatorColor=\"secondary\"\n >\n <Tab\n disabled={this.state.progressRunning}\n label={this.props.t('Custom settings')}\n id=\"custom-settings-tab\"\n aria-controls=\"custom-tabpanel-settings\"\n sx={{ '&.Mui-selected': styles.tabSelected }}\n />\n {this.props.objectIDs.length === 1 && this.chartAvailable ? (\n <Tab\n disabled={this.state.progressRunning}\n label={this.props.t('History data')}\n id=\"history-data-tab\"\n aria-controls=\"custom-tabpanel-history\"\n sx={{ '&.Mui-selected': styles.tabSelected }}\n />\n ) : null}\n {(varType === 'number' || varType === 'boolean') &&\n this.props.objectIDs.length === 1 &&\n this.chartAvailable ? (\n <Tab\n disabled={this.state.progressRunning}\n label={this.props.t('Chart')}\n id=\"chart-tab\"\n aria-controls=\"custom-tabpanel-chart\"\n sx={{ '&.Mui-selected': styles.tabSelected }}\n />\n ) : null}\n </Tabs>\n </AppBar>\n {this.state.currentTab === 0 ? (\n <Box\n component=\"div\"\n sx={styles.tabPanel}\n >\n {this.renderCustomEditor()}\n </Box>\n ) : null}\n {this.props.objectIDs.length === 1 && this.chartAvailable && this.state.currentTab === 1 ? (\n <Box\n component=\"div\"\n sx={styles.tabPanel}\n >\n {this.renderTable()}\n </Box>\n ) : null}\n {(varType === 'number' || varType === 'boolean') &&\n this.props.objectIDs.length === 1 &&\n this.chartAvailable &&\n this.state.currentTab === 2 ? (\n <Box\n component=\"div\"\n sx={styles.tabPanel}\n >\n {this.renderCharts()}\n </Box>\n ) : null}\n </DialogContent>\n <DialogActions>\n {this.state.currentTab === 0 && (\n <Button\n id=\"object-custom-dialog-save\"\n variant=\"contained\"\n color=\"primary\"\n disabled={!this.state.hasChanges || this.state.progressRunning}\n onClick={() => this.saveFunc && this.saveFunc()}\n >\n {this.getButtonTitle(<SaveIcon />, this.props.t('Save'))}\n </Button>\n )}\n {this.state.currentTab === 0 && (\n <Button\n id=\"object-custom-dialog-save-close\"\n variant=\"contained\"\n color=\"primary\"\n disabled={!this.state.hasChanges || this.state.progressRunning}\n onClick={() => {\n if (this.saveFunc) {\n this.saveFunc(error => !error && this.onClose());\n } else {\n this.onClose();\n }\n }}\n >\n {this.getButtonTitle(<SaveIcon />, this.props.t('Save & close'), <CloseIcon />)}\n </Button>\n )}\n <Button\n id=\"object-custom-dialog-close\"\n disabled={this.state.progressRunning}\n variant=\"contained\"\n onClick={() => this.onClose()}\n color=\"grey\"\n >\n {this.getButtonTitle(<CloseIcon />, this.props.t('Close'))}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default ObjectCustomDialog;\n","import React, { Component, type JSX } from 'react';\n\nimport { DatePicker, LocalizationProvider, TimePicker } from '@mui/x-date-pickers';\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3';\n\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n FormControlLabel,\n Checkbox,\n TextField,\n DialogActions,\n Button,\n IconButton,\n InputLabel,\n MenuItem,\n FormControl,\n Select,\n Grid2,\n Fab,\n Typography,\n Switch,\n Autocomplete,\n Tooltip,\n} from '@mui/material';\n\nimport {\n ShowChart as ChartIcon,\n Close as IconCancel,\n Check as IconCheck,\n Fullscreen as FullscreenIcon,\n FullscreenExit as FullscreenExitIcon,\n Info as InfoIcon,\n} from '@mui/icons-material';\n\nimport { type AdminConnection, type IobTheme, type ThemeType, type Translate } from '@iobroker/adapter-react-v5';\n\nimport ObjectChart from './ObjectChart';\nimport { localeMap } from './utils';\nimport Editor from '../Editor';\n\nconst styles: Record<string, any> = {\n formControl: {\n minWidth: 100,\n },\n quality: {\n width: 'calc(100% - 88px)',\n },\n expire: {\n ml: 1,\n width: 80,\n },\n readOnly: {\n backgroundColor: '#b74848',\n },\n readOnlyText: {\n color: '#b74848',\n marginLeft: 8,\n },\n wrapperButton: {\n '@media screen and (max-width: 465px)': {\n '& *': {\n fontSize: 12,\n },\n },\n '@media screen and (max-width: 380px)': {\n '& *': {\n fontSize: 11,\n },\n },\n },\n ackCheckbox: {\n marginLeft: 4,\n },\n dialog: {\n minHeight: (window as any).clientHeight - 50 > 500 ? 500 : (window as any).clientHeight - 50,\n },\n tooltip: {\n pointerEvents: 'none',\n },\n};\n\ninterface NumberValidationOptions {\n value: unknown;\n common: ioBroker.StateCommon;\n}\n\ninterface ObjectBrowserValueProps {\n /** State type */\n type: 'states' | 'string' | 'number' | 'boolean' | 'json';\n /** State role */\n role: string;\n /** common.states */\n states: Record<string, string> | null;\n /** The state value */\n value: string | number | boolean | null;\n /** If expert mode is enabled */\n expertMode: boolean;\n onClose: (newValue?: { val: ioBroker.StateValue; ack: boolean; q: number; expire: number | undefined }) => void;\n /** Configured theme */\n themeType: ThemeType;\n theme: IobTheme;\n socket: AdminConnection;\n defaultHistory: string;\n dateFormat: string;\n object: ioBroker.StateObject;\n isFloatComma: boolean;\n t: Translate;\n lang: ioBroker.Languages;\n width: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n}\n\ninterface ObjectBrowserValueState {\n /** The state value */\n targetValue: ioBroker.StateValue;\n /** State type */\n type: 'states' | 'string' | 'number' | 'boolean' | 'json';\n chart: boolean;\n chartEnabled: boolean;\n fullScreen: boolean;\n /** If input is invalid, set value button is disabled */\n valid: boolean;\n jsonError?: boolean;\n}\n\nclass ObjectBrowserValue extends Component<ObjectBrowserValueProps, ObjectBrowserValueState> {\n /** The state value */\n private readonly propsValue: any;\n\n /** Chart start date */\n private readonly chartFrom: number;\n\n /** Ack flag of the state */\n private ack: boolean;\n\n /** TextField Ref */\n private readonly inputRef = React.createRef<any>();\n\n /** State quality */\n private q: ioBroker.STATE_QUALITY[keyof ioBroker.STATE_QUALITY];\n\n /** Expiration of the state */\n private expire: number;\n\n constructor(props: ObjectBrowserValueProps) {\n super(props);\n\n let type: 'states' | 'string' | 'number' | 'boolean' | 'json' = this.props.type;\n if (!type) {\n type = typeof this.props.value as 'boolean' | 'string' | 'number';\n }\n\n let value = this.props.value;\n this.propsValue = value;\n\n if (this.propsValue === null) {\n this.propsValue = 'null';\n } else if (this.propsValue === undefined) {\n this.propsValue = 'undefined';\n }\n\n if (this.props.states) {\n type = 'states';\n } else if (type === 'string' || type === 'json') {\n if (\n value &&\n typeof value === 'string' &&\n ((value.startsWith('[') && value.endsWith(']')) || (value.startsWith('{') && value.endsWith('}')))\n ) {\n try {\n value = JSON.parse(value);\n value = JSON.stringify(value, null, 2);\n this.propsValue = value;\n type = 'json';\n } catch {\n // ignore\n }\n }\n } else if (type === 'number') {\n value = parseFloat(this.propsValue) || 0;\n }\n\n this.state = {\n type,\n chart: false,\n chartEnabled:\n ((window as any)._localStorage || window.localStorage).getItem('App.chartSetValue') !== 'false',\n fullScreen: ((window as any)._localStorage || window.localStorage).getItem('App.fullScreen') === 'true',\n targetValue: value,\n /** If input is invalid, set value button is disabled */\n valid: true,\n jsonError: false,\n };\n\n this.ack = false;\n this.q = 0;\n this.expire = 0;\n\n this.inputRef = React.createRef();\n\n this.chartFrom = Date.now() - 3_600_000 * 2;\n }\n\n componentDidMount(): void {\n if (\n this.props.defaultHistory &&\n this.props.object?.common?.custom &&\n this.props.object.common.custom[this.props.defaultHistory]?.enabled\n ) {\n void this.props.socket\n .getState(`system.adapter.${this.props.defaultHistory}.alive`)\n .then((state: ioBroker.State | null | undefined) => this.setState({ chart: !!state?.val }));\n }\n\n setTimeout(() => {\n if (this.inputRef?.current) {\n const el = this.inputRef.current;\n const value = el.value || '';\n const origType = el.type;\n\n // type number cannot be selected, so we perform a short workaround\n if (el.type === 'number') {\n el.type = 'text';\n }\n\n el.setSelectionRange(0, value.length);\n\n if (origType === 'number') {\n el.type = origType;\n }\n }\n }, 200);\n }\n\n onUpdate(e: React.KeyboardEvent | React.MouseEvent): void {\n if (e) {\n e.stopPropagation();\n e.preventDefault();\n }\n\n let value = this.state.targetValue;\n if (this.state.type === 'states') {\n if (value === 'null') {\n value = null;\n } else {\n const type = this.props.type || typeof this.state.targetValue;\n // @ts-expect-error deprecated\n value = typeof value === 'object' ? value.value : value;\n\n if (type === 'number') {\n if (typeof value === 'string') {\n value = parseFloat(value.replace(',', '.')) || 0;\n }\n } else if (type === 'boolean') {\n value = value === true || value === 'true' || value === '1' || value === 'ON' || value === 'on';\n }\n }\n } else if (this.state.type === 'number') {\n if (value === 'null') {\n value = null;\n } else if (typeof value === 'string') {\n value = parseFloat(value.replace(',', '.')) || 0;\n }\n } else if (this.state.type === 'boolean') {\n if (value === 'null') {\n value = null;\n } else {\n value = value === true || value === 'true' || value === '1' || value === 'ON' || value === 'on';\n }\n }\n\n this.props.onClose({\n val: value,\n ack: this.ack,\n q: this.q,\n expire: parseInt(this.expire as any as string, 10) || undefined,\n });\n }\n\n /**\n * Check if a number value is valid according to the objects common properties\n *\n * @param options value and common information\n */\n static isNumberValid(options: NumberValidationOptions): boolean {\n const { common, value } = options;\n\n if (value === '') {\n return false;\n }\n\n const numVal = Number(value);\n\n if (typeof common.min === 'number' && numVal < common.min) {\n return false;\n }\n\n return !(typeof common.max === 'number' && numVal > common.max);\n }\n\n /**\n * Render time picker component for date type\n */\n renderTimePicker(): JSX.Element {\n return (\n <LocalizationProvider\n adapterLocale={localeMap[this.props.lang]}\n dateAdapter={AdapterDateFns}\n >\n <DatePicker\n value={Number(this.state.targetValue) as any as Date}\n onChange={value => {\n if (!value) {\n return;\n }\n this.setState({ targetValue: Math.round(value.getTime()) });\n }}\n />\n\n <TimePicker\n value={Number(this.state.targetValue) as any as Date}\n views={['hours', 'minutes', 'seconds']}\n onChange={value => {\n if (!value) {\n return;\n }\n\n this.setState({ targetValue: Math.round(value.getTime()) });\n }}\n />\n </LocalizationProvider>\n );\n }\n\n renderChart(): JSX.Element {\n return (\n <ObjectChart\n t={this.props.t}\n isFloatComma={this.props.isFloatComma}\n showJumpToEchart={false}\n lang={this.props.lang}\n socket={this.props.socket}\n obj={this.props.object}\n themeType={this.props.themeType}\n theme={this.props.theme}\n from={this.chartFrom}\n end={Date.now()}\n noToolbar\n dateFormat={this.props.dateFormat}\n defaultHistory={this.props.defaultHistory}\n />\n );\n }\n\n static checkJsonError(value: string): boolean {\n try {\n JSON.parse(value);\n return false;\n } catch {\n return true;\n }\n }\n\n renderJsonEditor(): JSX.Element {\n return (\n <Editor\n error={this.state.jsonError}\n editValueMode\n themeType={this.props.themeType}\n defaultValue={(this.propsValue || '').toString()}\n onChange={(newValue: string) =>\n this.setState({\n targetValue: newValue,\n jsonError: ObjectBrowserValue.checkJsonError(newValue),\n })\n }\n />\n );\n }\n\n renderStates(): JSX.Element | null {\n if (!this.props.states) {\n return null;\n }\n if (\n this.props.type === 'number' &&\n this.props.object.common.max !== undefined &&\n this.props.object.common.min !== undefined\n ) {\n const options = Object.keys(this.props.states).map(key => ({\n label: this.props.states[key],\n value: key,\n }));\n\n return (\n <Autocomplete\n style={styles.formControl}\n disablePortal\n defaultValue={\n this.props.states[this.propsValue] !== undefined\n ? this.props.states[this.propsValue]\n : this.propsValue\n }\n options={options}\n noOptionsText=\"\"\n freeSolo\n getOptionLabel={option =>\n option?.label || (option !== undefined && option !== null ? option.toString() : '')\n }\n onChange={(e, value) => this.setState({ targetValue: value })}\n onInputChange={(e, value) => this.setState({ targetValue: value })}\n onKeyUp={e => e.key === 'Enter' && this.onUpdate(e)}\n renderInput={params => (\n <TextField\n {...params}\n label={this.props.t('Value')}\n variant=\"standard\"\n />\n )}\n />\n );\n }\n return (\n <FormControl\n variant=\"standard\"\n style={styles.formControl}\n >\n <InputLabel>{this.props.t('Value')}</InputLabel>\n <Select\n variant=\"standard\"\n defaultValue={this.propsValue}\n onChange={e => this.setState({ targetValue: e.target.value })}\n >\n {Object.keys(this.props.states).map((key, i) => (\n <MenuItem\n key={i}\n value={key}\n >\n {this.props.states[key]}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n );\n }\n\n render(): JSX.Element {\n const ackCheckbox = (\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <FormControlLabel\n style={{\n ...styles.formControl,\n ...(!this.props.expertMode ? styles.ackCheckbox : undefined),\n }}\n control={\n <Checkbox\n defaultChecked={false}\n onChange={e => (this.ack = e.target.checked)}\n />\n }\n label={this.props.t('Acknowledged')}\n />\n <Tooltip\n title={this.props.t('Acknowledged explanation')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <InfoIcon color=\"primary\" />\n </Tooltip>\n </div>\n );\n\n return (\n <Dialog\n open={!0}\n maxWidth={\n this.state.type === 'number' || this.state.type === 'boolean' || this.state.type === 'states'\n ? this.state.chart && this.state.chartEnabled\n ? 'lg'\n : undefined\n : 'md'\n }\n fullWidth={\n (this.state.type === 'json' && this.state.fullScreen) ||\n (this.state.type !== 'number' && this.state.type !== 'boolean' && this.state.type !== 'states') ||\n (this.state.chart && this.state.chartEnabled)\n }\n fullScreen={this.state.type === 'json' && this.state.fullScreen}\n onClose={() => this.props.onClose()}\n aria-labelledby=\"edit-value-dialog-title\"\n aria-describedby=\"edit-value-dialog-description\"\n sx={{ '&. MuiDialog-paper': this.state.type === 'json' ? styles.dialog : undefined }}\n >\n <DialogTitle id=\"edit-value-dialog-title\">\n {this.props.t('Write value')}\n {this.props.object.common?.write === false ? (\n <span style={styles.readOnlyText}>({this.props.t('read only')})</span>\n ) : null}\n {/* this.state.chart ? <div style={{flexGrow: 1}}/> : null */}\n {this.state.chart ? (\n <Fab\n style={{ float: 'right' }}\n size=\"small\"\n color={this.state.chartEnabled ? 'primary' : 'default'}\n onClick={() => {\n ((window as any)._localStorage || window.localStorage).setItem(\n 'App.chartSetValue',\n this.state.chartEnabled ? 'false' : 'true',\n );\n this.setState({ chartEnabled: !this.state.chartEnabled });\n }}\n >\n <ChartIcon />\n </Fab>\n ) : null}\n {this.state.type === 'json' ? (\n <IconButton\n style={{ float: 'right' }}\n onClick={() => {\n ((window as any)._localStorage || window.localStorage).setItem(\n 'App.fullScreen',\n this.state.fullScreen ? 'false' : 'true',\n );\n this.setState({ fullScreen: !this.state.fullScreen });\n }}\n >\n {this.state.fullScreen ? <FullscreenExitIcon /> : <FullscreenIcon />}\n </IconButton>\n ) : null}\n </DialogTitle>\n <DialogContent>\n <form\n noValidate\n autoComplete=\"off\"\n onSubmit={() => false}\n style={{ ...styles.dialogForm, height: '100%' }}\n >\n <Grid2\n container\n direction=\"row\"\n spacing={2}\n style={{ height: '100%' }}\n >\n <Grid2\n size={{ xs: this.state.chart && this.state.chartEnabled ? 6 : 12 }}\n style={{ height: '100%' }}\n >\n <Grid2\n container\n direction=\"column\"\n spacing={2}\n style={{ marginTop: 0, height: '100%' }}\n >\n {this.props.expertMode ? (\n <Grid2>\n <Grid2\n container\n direction=\"row\"\n spacing={2}\n style={{ marginTop: 0 }}\n >\n {this.props.expertMode ? (\n <Grid2>\n <FormControl style={styles.formControl}>\n <InputLabel>{this.props.t('Value type')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.type}\n onChange={e => {\n this.setState(\n {\n type: e.target.value as\n | 'states'\n | 'string'\n | 'number'\n | 'boolean'\n | 'json',\n valid:\n e.target.value === 'number'\n ? ObjectBrowserValue.isNumberValid({\n value: this.state.targetValue,\n common: this.props.object\n .common,\n })\n : true,\n jsonError: false,\n },\n () => {\n if (this.state.type === 'json') {\n this.setState({\n targetValue: (\n this.state.targetValue || ''\n ).toString(),\n jsonError:\n ObjectBrowserValue.checkJsonError(\n (\n this.state\n .targetValue || ''\n ).toString(),\n ),\n });\n }\n },\n );\n }}\n >\n <MenuItem value=\"string\">String</MenuItem>\n <MenuItem value=\"number\">Number</MenuItem>\n <MenuItem value=\"boolean\">Boolean</MenuItem>\n <MenuItem value=\"json\">JSON</MenuItem>\n {this.props.states ? (\n <MenuItem value=\"states\">States</MenuItem>\n ) : null}\n </Select>\n </FormControl>\n </Grid2>\n ) : null}\n {this.state.type === 'json' ? <Grid2 flex={1}></Grid2> : null}\n </Grid2>\n </Grid2>\n ) : null}\n <Grid2\n flex={this.state.type === 'json' && this.state.fullScreen ? 1 : undefined}\n style={{ paddingTop: 0 }}\n >\n {this.state.type === 'boolean' ? (\n <Typography\n component=\"div\"\n style={\n this.props.expertMode\n ? {\n marginTop: 20,\n width: '100%',\n backgroundColor:\n this.props.themeType === 'dark'\n ? '#595959'\n : '#dadada',\n borderRadius: 5,\n padding: 5,\n }\n : undefined\n }\n >\n <Grid2\n component=\"label\"\n container\n alignItems=\"center\"\n spacing={1}\n >\n <Grid2 style={{ marginRight: 10 }}>{this.props.t('Value')}:</Grid2>\n <Grid2>FALSE</Grid2>\n <Grid2>\n <Switch\n autoFocus\n defaultChecked={\n this.propsValue === 'null' ||\n this.propsValue === 'undefined'\n ? false\n : !!this.propsValue\n }\n onKeyUp={e => e.key === 'Enter' && this.onUpdate(e)}\n onChange={e =>\n this.setState({ targetValue: e.target.checked })\n }\n />\n </Grid2>\n <Grid2>TRUE</Grid2>\n </Grid2>\n </Typography>\n ) : this.state.type === 'number' ? (\n <TextField\n variant=\"standard\"\n fullWidth\n autoFocus\n error={!this.state.valid}\n type=\"number\"\n inputProps={{\n step: this.props.object.common.step,\n min: this.props.object.common.min,\n max: this.props.object.common.max,\n }}\n inputRef={this.inputRef}\n helperText={this.props.t(\n 'Press ENTER to write the value, when focused',\n )}\n value={this.state.targetValue.toString()}\n label={\n this.props.t('Value') +\n (this.props.object.common.min !== undefined ||\n this.props.object.common.unit === '%'\n ? `, ${this.props.t('min:')} ${this.props.object.common.min !== undefined ? this.props.object.common.min : 0}`\n : '') +\n (this.props.object.common.max !== undefined ||\n this.props.object.common.unit === '%'\n ? `, ${this.props.t('max:')} ${this.props.object.common.max !== undefined ? this.props.object.common.max : 100}`\n : '')\n }\n onKeyUp={e => e.key === 'Enter' && this.state.valid && this.onUpdate(e)}\n onChange={e => {\n this.setState({\n targetValue: e.target.value,\n valid: ObjectBrowserValue.isNumberValid({\n value: e.target.value,\n common: this.props.object.common,\n }),\n });\n }}\n />\n ) : this.state.type === 'json' ? (\n this.renderJsonEditor()\n ) : this.state.type === 'states' ? (\n this.renderStates()\n ) : (\n <TextField\n variant=\"standard\"\n fullWidth\n inputRef={this.inputRef}\n autoFocus\n helperText={this.props.t(\n 'Press CTRL+ENTER to write the value, when focused',\n )}\n label={this.props.t('Value')}\n multiline\n onKeyDown={e => e.ctrlKey && e.key === 'Enter' && this.onUpdate(e)}\n defaultValue={this.propsValue.toString()}\n onChange={e => this.setState({ targetValue: e.target.value })}\n />\n )}\n </Grid2>\n\n {(this.props.role === 'date' || this.props.role?.startsWith('date.')) &&\n this.state.type === 'number' ? (\n <Grid2\n style={{ display: 'flex', gap: '5px' }}\n size={{ xs: 6 }}\n >\n {this.renderTimePicker()}\n </Grid2>\n ) : null}\n\n {this.props.expertMode ? <Grid2>{ackCheckbox}</Grid2> : null}\n\n {this.props.expertMode ? (\n <Grid2>\n <FormControl\n variant=\"standard\"\n style={styles.quality}\n >\n <InputLabel>{this.props.t('Quality')}</InputLabel>\n <Select\n variant=\"standard\"\n defaultValue={0}\n onChange={e =>\n (this.q = Number(\n e.target.value,\n ) as ioBroker.STATE_QUALITY[keyof ioBroker.STATE_QUALITY])\n }\n >\n <MenuItem value={0x00}>0x00 - good</MenuItem>\n\n <MenuItem value={0x01}>0x01 - general problem</MenuItem>\n <MenuItem value={0x02}>0x02 - no connection problem</MenuItem>\n\n <MenuItem value={0x10}>\n 0x10 - substitute value from controller\n </MenuItem>\n <MenuItem value={0x20}>0x20 - substitute initial value</MenuItem>\n <MenuItem value={0x40}>\n 0x40 - substitute value from device or instance\n </MenuItem>\n <MenuItem value={0x80}>\n 0x80 - substitute value from sensor\n </MenuItem>\n\n <MenuItem value={0x11}>0x11 - general problem by instance</MenuItem>\n <MenuItem value={0x41}>0x41 - general problem by device</MenuItem>\n <MenuItem value={0x81}>0x81 - general problem by sensor</MenuItem>\n\n <MenuItem value={0x12}>0x12 - instance not connected</MenuItem>\n <MenuItem value={0x42}>0x42 - device not connected</MenuItem>\n <MenuItem value={0x82}>0x82 - sensor not connected</MenuItem>\n\n <MenuItem value={0x44}>0x44 - device reports error</MenuItem>\n <MenuItem value={0x84}>0x84 - sensor reports error</MenuItem>\n </Select>\n </FormControl>\n <TextField\n variant=\"standard\"\n title={this.props.t('0 - no expiration')}\n sx={{ '&.MuiTextField-root': styles.expire }}\n label={this.props.t('Expire')}\n type=\"number\"\n inputProps={{ min: 0 }}\n helperText={this.props.t('in seconds')}\n defaultValue={this.expire}\n onChange={e => (this.expire = Number(e.target.value))}\n />\n </Grid2>\n ) : null}\n </Grid2>\n </Grid2>\n {this.state.chart && this.state.chartEnabled && this.state.type !== 'json' ? (\n <Grid2\n size={{ xs: 6 }}\n style={{ minHeight: 300 }}\n sx={{ display: { sm: 'none', md: 'inline-block' } }}\n >\n {this.renderChart()}\n </Grid2>\n ) : null}\n </Grid2>\n </form>\n </DialogContent>\n <DialogActions sx={styles.wrapperButton}>\n {!this.props.expertMode ? ackCheckbox : null}\n {!this.props.expertMode ? <div style={{ flexGrow: 1 }} /> : null}\n <Button\n variant=\"contained\"\n disabled={!this.state.valid}\n onClick={e => this.onUpdate(e)}\n color=\"primary\"\n startIcon={this.props.width !== 'xs' ? <IconCheck /> : undefined}\n style={this.props.object.common?.write === false ? styles.readOnly : undefined}\n >\n {this.props.width !== 'xs' ? this.props.t('Set value') : <IconCheck fontSize=\"large\" />}\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => this.props.onClose()}\n color=\"grey\"\n startIcon={this.props.width !== 'xs' ? <IconCancel /> : undefined}\n >\n {this.props.width !== 'xs' ? this.props.t('Cancel') : <IconCancel fontSize=\"large\" />}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default ObjectBrowserValue;\n","import React, { Component, type JSX } from 'react';\n\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n Tabs,\n Tab,\n TextField,\n Grid2,\n InputAdornment,\n Checkbox,\n FormControlLabel,\n Fab,\n IconButton,\n FormControl,\n InputLabel,\n MenuItem,\n Select,\n Tooltip,\n Autocomplete,\n Box,\n} from '@mui/material';\n\nimport { Close as IconClose, Check as IconCheck, Add as IconAdd, FileCopy as IconCopy } from '@mui/icons-material';\n\nimport { FaClipboard as IconCopyClipboard } from 'react-icons/fa';\n\nimport {\n Utils,\n I18n,\n DialogSelectID,\n IconFx,\n UploadImage,\n type Connection,\n type AdminConnection,\n type Translate,\n type ThemeType,\n type IobTheme,\n Icon,\n iobUriParse,\n iobUriRead,\n type IobUri,\n setAttrInObject,\n getAttrInObject,\n} from '@iobroker/adapter-react-v5';\nimport { JsonConfigComponent, type ConfigItemPanel, type ConfigItemTabs } from '@iobroker/json-config';\n\nimport Editor from '../Editor';\n\nconst styles: Record<string, any> = {\n divWithoutTitle: {\n width: '100%',\n height: '100%',\n border: '2px solid #00000000',\n },\n divWithoutTitleAndTab: {\n height: 'calc(100% - 48px)',\n },\n error: {\n border: '2px solid #FF0000',\n },\n id: {\n fontStyle: 'italic',\n },\n dialog: {\n height: 'calc(100% - 64px)',\n },\n aliasIdEdit: {\n width: 400 - 32,\n },\n button: {\n marginTop: 20,\n marginLeft: 8,\n },\n funcDivEdit: {\n width: '100%',\n },\n funcEditName: {\n display: 'inline-block',\n width: 85,\n },\n funcEdit: {\n width: 400,\n },\n funcIcon: {\n width: 16,\n height: 16,\n },\n marginTop: {\n marginTop: 20,\n },\n commonTabWrapper: {\n flexFlow: 'wrap',\n display: 'flex',\n gap: 8,\n },\n commonWrapper: {\n width: 500,\n minWidth: 300,\n },\n flexDrop: {\n width: '100%',\n maxWidth: 500,\n margin: 'auto',\n display: 'flex',\n },\n marginBlock: {\n marginTop: 20,\n },\n buttonAdd: {\n minWidth: 150,\n },\n textField: {\n width: '100%',\n },\n flex: {\n display: 'flex',\n '& > div': {\n mr: '8px',\n },\n },\n close: {\n width: '20px',\n height: '20px',\n opacity: '0.9',\n cursor: 'pointer',\n position: 'relative',\n top: 20,\n transition: 'all 0.6s ease',\n '&:hover': {\n transform: 'rotate(90deg)',\n },\n '&:before': {\n position: 'absolute',\n left: '9px',\n content: '\"\"',\n height: '20px',\n width: '3px',\n backgroundColor: '#ff4f4f',\n transform: 'rotate(45deg)',\n },\n '&:after': {\n position: 'absolute',\n left: '9px',\n content: '\"\"',\n height: '20px',\n width: '3px',\n backgroundColor: '#ff4f4f',\n transform: 'rotate(-45deg)',\n },\n },\n color: {\n width: 70,\n },\n buttonRemoveWrapper: {\n position: 'absolute',\n zIndex: 222,\n right: 0,\n },\n tabsPadding: {\n padding: '0px 24px',\n },\n wrapperButton: {\n '@media screen and (max-width: 465px)': {\n '& *': {\n fontSize: 10,\n },\n },\n '@media screen and (max-width: 380px)': {\n '& *': {\n fontSize: 9,\n },\n },\n },\n commonDeleteTip: {\n color: '#fa4a4a',\n },\n typeNameEng: {\n marginLeft: 8,\n opacity: 0.7,\n fontStyle: 'italic',\n fontSize: 'smaller',\n },\n tooltip: {\n pointerEvents: 'none',\n },\n};\n\nconst DEFAULT_ROLES = [\n 'button',\n 'button.close.blind',\n 'button.fastforward',\n 'button.forward',\n 'button.long',\n 'button.mode',\n 'button.mode.auto',\n 'button.mode.silent',\n 'button.next',\n 'button.open.blind',\n 'button.open.door',\n 'button.pause',\n 'button.stop',\n 'button.stop.tilt',\n 'button.volume.up',\n 'chart',\n 'date',\n 'date.end',\n 'date.forecast.1',\n 'date.start',\n 'date.sunrise',\n 'date.sunset',\n 'dayofweek',\n 'html',\n 'indicator',\n 'indicator.alarm',\n 'indicator.alarm.fire',\n 'indicator.alarm.flood',\n 'indicator.alarm.health',\n 'indicator.alarm.secure',\n 'indicator.connected',\n 'indicator.maintenance',\n 'indicator.maintenance.alarm',\n 'indicator.maintenance.lowbat',\n 'indicator.maintenance.waste',\n 'indicator.reachable',\n 'info.address',\n 'info.display',\n 'info.firmware',\n 'info.hardware',\n 'info.ip',\n 'info.mac',\n 'info.name',\n 'info.port',\n 'info.serial',\n 'info.standby',\n 'info.status',\n 'json',\n 'level',\n 'level.bass',\n 'level.blind',\n 'level.color.blue',\n 'level.color.hue',\n 'level.color.luminance',\n 'level.color.red',\n 'level.color.saturation',\n 'level.curtain',\n 'level.mode.airconditioner',\n 'level.mode.cleanup',\n 'level.mode.fan',\n 'level.mode.swing',\n 'level.mode.thermostat',\n 'level.mode.work',\n 'level.temperature',\n 'level.tilt',\n 'level.timer',\n 'level.treble',\n 'level.valve',\n 'level.volume',\n 'level.volume.group',\n 'list',\n 'location',\n 'media.add',\n 'media.bitrate',\n 'media.broadcastDate',\n 'media.browser',\n 'media.clear',\n 'media.content',\n 'media.cover',\n 'media.cover.big',\n 'media.cover.small',\n 'media.date',\n 'media.duration',\n 'media.duration.text',\n 'media.elapsed',\n 'media.elapsed.text',\n 'media.episode',\n 'media.genre',\n 'media.input',\n 'media.jump',\n 'media.link',\n 'media.mode.repeat',\n 'media.mode.shuffle',\n 'media.mute',\n 'media.mute.group',\n 'media.playid',\n 'media.playlist',\n 'media.season',\n 'media.seek',\n 'media.state',\n 'media.titel',\n 'media.track',\n 'media.tts',\n 'media.url',\n 'media.url.announcement',\n 'medien.artist',\n 'sensor.alarm',\n 'sensor.alarm.fire',\n 'sensor.alarm.flood',\n 'sensor.alarm.power',\n 'sensor.alarm.secure',\n 'sensor.door',\n 'sensor.light',\n 'sensor.lock',\n 'sensor.motion',\n 'sensor.noise',\n 'sensor.rain',\n 'sensor.window',\n 'state',\n 'switch',\n 'switch.enable',\n 'switch.gate',\n 'switch.gate',\n 'switch.light',\n 'switch.lock.door',\n 'switch.lock.window',\n 'switch.mode',\n 'switch.mode.auto',\n 'switch.mode.boost',\n 'switch.mode.color',\n 'switch.mode.manual',\n 'switch.mode.moonlight',\n 'switch.mode.party',\n 'switch.mode.silent',\n 'switch.power',\n 'switch.power.zone',\n 'text',\n 'text.phone',\n 'text.url',\n 'url',\n 'url.audio',\n 'url.blank',\n 'url.cam',\n 'url.same',\n 'value',\n 'value.battery',\n 'value.blind',\n 'value.blood.sugar',\n 'value.brightness',\n 'value.clouds',\n 'value.current',\n 'value.curtain',\n 'value.default',\n 'value.direction',\n 'value.direction.max.wind',\n 'value.direction.min.wind',\n 'value.direction.wind',\n 'value.direction.wind.forecast.0',\n 'value.direction.wind.forecast.1',\n 'value.distance',\n 'value.fill',\n 'value.gate',\n 'value.gps',\n 'value.gps.accuracy',\n 'value.gps.elevation',\n 'value.gps.latitude',\n 'value.gps.longitude',\n 'value.gps.radius',\n 'value.health.bmi',\n 'value.health.bpm',\n 'value.health.calories',\n 'value.health.fat',\n 'value.health.steps',\n 'value.health.weight',\n 'value.humidity',\n 'value.humidity',\n 'value.humidity.max',\n 'value.humidity.min',\n 'value.interval',\n 'value.lock',\n 'value.min',\n 'value.position',\n 'value.power',\n 'value.power.consumption',\n 'value.power.production',\n 'value.power.reactive',\n 'value.precipitation',\n 'value.precipitation.chance',\n 'value.precipitation.day.forecast.0',\n 'value.precipitation.forecast.0',\n 'value.precipitation.hour',\n 'value.precipitation.night.forecast.0',\n 'value.precipitation.today',\n 'value.precipitation.type',\n 'value.prepitation.forecast.0',\n 'value.prepitation.forecast.1',\n 'value.prepitation.forecast.1',\n 'value.pressure',\n 'value.pressure.forecast.0',\n 'value.pressure.forecast.1',\n 'value.radiation',\n 'value.rain',\n 'value.rain.hour',\n 'value.rain.today',\n 'value.severity',\n 'value.snow',\n 'value.snow.hour',\n 'value.snow.today',\n 'value.snowline',\n 'value.speed',\n 'value.speed.max.wind',\n 'value.speed.min.wind',\n 'value.speed.wind',\n 'value.speed.wind.forecast.0',\n 'value.speed.wind.gust',\n 'value.state',\n 'value.sun.azimuth',\n 'value.sun.elevation',\n 'value.temperature',\n 'value.temperature',\n 'value.temperature.dewpoint',\n 'value.temperature.feelslike',\n 'value.temperature.max',\n 'value.temperature.max.forecast.0',\n 'value.temperature.min',\n 'value.temperature.min.forecast.0',\n 'value.temperature.min.forecast.1',\n 'value.temperature.windchill',\n 'value.tilt',\n 'value.time',\n 'value.uv',\n 'value.valve',\n 'value.voltage',\n 'value.warning',\n 'value.waste',\n 'value.water',\n 'waether.title',\n 'weather.chart.url',\n 'weather.chart.url.forecast',\n 'weather.direction.wind',\n 'weather.direction.wind.forecast.0',\n 'weather.html',\n 'weather.icon',\n 'weather.icon.forecast.1',\n 'weather.icon.name',\n 'weather.icon.wind',\n 'weather.json',\n 'weather.state',\n 'weather.state.forecast.0',\n 'weather.state.forecast.1',\n 'weather.title.forecast.0',\n 'weather.title.short',\n 'weather.type',\n] as const;\n\ninterface EditSchemaTab {\n json: ConfigItemPanel | ConfigItemTabs;\n label?: ioBroker.StringOrTranslated;\n /** Do not translate label */\n noTranslation?: boolean;\n path?: string; // path in object, like common or native.json\n icon?: IobUri;\n color?: string;\n order?: number;\n}\n\ninterface EditSchemaTabEditor extends EditSchemaTab {\n key?: string;\n}\n\ninterface ObjectBrowserEditObjectProps {\n socket: Connection;\n obj: ioBroker.AnyObject;\n roleArray: string[];\n expertMode: boolean;\n themeType: ThemeType;\n theme: IobTheme;\n aliasTab: boolean;\n onClose: (obj?: ioBroker.AnyObject) => void;\n dialogName?: string;\n objects: Record<string, ioBroker.AnyObject>;\n dateFormat: string;\n isFloatComma: boolean;\n onNewObject: (obj: ioBroker.AnyObject) => void;\n t: Translate;\n width: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n}\n\ninterface ObjectBrowserEditObjectState {\n text: string;\n error: boolean;\n customError: boolean;\n changed: boolean;\n readError: string;\n writeError: string;\n /** name of active tab */\n tab: string;\n showCopyDialog: string;\n showCommonDeleteMessage: boolean;\n selectId: boolean;\n selectRead: boolean;\n selectWrite: boolean;\n newId: string;\n customEditTabs?: EditSchemaTabEditor[];\n lang: ioBroker.Languages;\n}\n\nclass ObjectBrowserEditObject extends Component<ObjectBrowserEditObjectProps, ObjectBrowserEditObjectState> {\n /** Original object stringified */\n private originalObj: string;\n\n constructor(props: ObjectBrowserEditObjectProps) {\n super(props);\n\n const withAlias = this.props.obj._id.startsWith('alias.0') && this.props.obj.type === 'state';\n let tab =\n ((window as any)._localStorage || window.localStorage).getItem(\n `${this.props.dialogName || 'App'}.editTab`,\n ) || 'object';\n\n // select another tab if alias not present\n if (tab === 'alias' && !withAlias) {\n tab = 'common';\n }\n if (this.props.aliasTab && withAlias) {\n tab = 'alias';\n }\n\n const obj = this.props.obj;\n\n const aliasRead =\n obj.common && 'type' in obj.common && 'alias' in obj.common ? obj.common.alias.read : undefined;\n const aliasWrite =\n obj.common && 'type' in obj.common && 'alias' in obj.common ? obj.common.alias.write : undefined;\n\n this.state = {\n text: JSON.stringify(this.props.obj, null, 2),\n error: false,\n customError: false,\n changed: false,\n readError: this.checkFunction(aliasRead, false),\n writeError: this.checkFunction(aliasWrite, true),\n tab,\n showCopyDialog: '',\n showCommonDeleteMessage: false,\n selectId: false,\n selectRead: false,\n selectWrite: false,\n newId: '',\n lang: I18n.getLanguage(),\n };\n\n this.originalObj = JSON.stringify(this.props.obj, null, 2);\n }\n\n async componentDidMount(): Promise<void> {\n // editSchemas is like 'iobobject://system.adapter.admin/native.schemas.specificObject'\n\n const editSchemas: Record<string, IobUri> | undefined =\n // @ts-expect-error fixed in js-controller\n (this.props.obj?.common?.editSchemas as Record<string, IobUri>) ||\n // @ts-expect-error fixed in js-controller\n (this.props.obj?.editSchemas as Record<string, IobUri>);\n\n const customEditTabs: EditSchemaTabEditor[] = [];\n\n if (editSchemas) {\n if (typeof editSchemas === 'object') {\n const schemas = Object.keys(editSchemas);\n for (let i = 0; i < schemas.length; i++) {\n try {\n const schema: EditSchemaTabEditor | undefined = (await iobUriRead(\n editSchemas[schemas[i]],\n this.props.socket,\n )) as EditSchemaTab;\n schema.key = schemas[i];\n if (schema && typeof schema === 'object') {\n // we expect { json: ..., title: {}, icon?, color? }\n customEditTabs.push(schema);\n }\n if (schema.icon) {\n try {\n const parsed = iobUriParse(schema.icon);\n if (parsed.type !== 'base64' && parsed.type !== 'http') {\n const icon = await iobUriRead(parsed, this.props.socket);\n if (icon) {\n schema.icon = icon;\n }\n }\n } catch (e) {\n console.warn(`Cannot get icon for schema from \"${schema.icon}\": ${e}`);\n schema.icon = undefined;\n }\n }\n } catch (e) {\n console.warn(`Cannot get edit schema for \"${editSchemas[schemas[i]]}\": ${e}`);\n }\n }\n if (customEditTabs.length) {\n customEditTabs.sort((a, b) => {\n if (a.order !== undefined && b.order !== undefined) {\n return a.order - b.order;\n }\n if (a.order !== undefined) {\n return -1;\n }\n if (b.order !== undefined) {\n return 1;\n }\n return a.key > b.key ? 1 : -1;\n });\n this.setState({ customEditTabs });\n }\n } else {\n console.warn(\n `Invalid edit schema for \"${editSchemas}\": expected object, but got ${typeof editSchemas}`,\n );\n }\n }\n\n if (\n this.state.tab !== 'object' &&\n this.state.tab !== 'common' &&\n (this.state.tab !== 'alias' ||\n (this.state.tab === 'alias' &&\n (!this.props.obj._id.startsWith('alias.0') || this.props.obj.type !== 'state'))) &&\n !customEditTabs.find(tab => tab.key === this.state.tab)\n ) {\n this.setState({ tab: 'object' });\n }\n\n void this.props.socket.subscribeObject(this.props.obj._id, this.onObjectUpdated);\n }\n\n componentWillUnmount(): void {\n void this.props.socket.unsubscribeObject(this.props.obj._id, this.onObjectUpdated);\n }\n\n onObjectUpdated = (_id: string, obj: ioBroker.AnyObject): void => {\n if (this.originalObj !== JSON.stringify(obj, null, 2)) {\n this.originalObj = JSON.stringify(obj, null, 2);\n if (!this.state.changed) {\n this.setState({ text: this.originalObj });\n } else {\n this.forceUpdate();\n }\n }\n };\n\n checkFunction(func: string, isWrite: boolean): string {\n if (!func) {\n return '';\n }\n if (func.includes('JSON.parse(')) {\n // Unable to validate (a result is unknown)\n return '';\n }\n let json;\n try {\n json = JSON.parse(this.state.text);\n } catch {\n // ignore\n }\n\n let jsFunc;\n try {\n // eslint-disable-next-line no-new-func\n jsFunc = new Function('val', func.includes('return') ? func : `return ${func}`);\n } catch {\n return this.props.t('Cannot parse code!');\n }\n\n // if source and target types exist\n if (json?.common?.type && (this.props.objects[json.common.alias?.id]?.common as ioBroker.StateCommon)?.type) {\n const initialType: ioBroker.CommonType = isWrite\n ? json.common.type\n : (this.props.objects[json.common.alias.id] as ioBroker.StateObject).common.type;\n const finalType: ioBroker.CommonType = isWrite\n ? (this.props.objects[json.common.alias.id] as ioBroker.StateObject).common.type\n : json.common.type;\n if (initialType && finalType) {\n let arg = null;\n if (initialType === 'boolean') {\n arg = true;\n } else if (initialType === 'number') {\n arg = 1;\n } else if (initialType === 'string' || initialType === 'mixed') {\n arg = 'string';\n }\n if (arg !== null) {\n try {\n const result = jsFunc(arg);\n if (finalType === 'mixed') {\n // we cannot check the value with type mixed\n return '';\n }\n return result !== null && typeof result !== finalType\n ? this.props.t('Type of result is not as expected: %s', finalType)\n : '';\n } catch (e) {\n return `${this.props.t('Cannot execute function')}: ${e.toString()}`;\n }\n }\n }\n }\n\n return '';\n }\n\n prepareObject(value: string): ioBroker.Object {\n value = value || this.state.text;\n try {\n const obj = JSON.parse(value);\n obj._id = this.props.obj._id; // do not allow change of id\n\n // check aliases\n if (obj.common?.alias) {\n if (!obj.common.alias.id) {\n delete obj.common.alias.id;\n }\n if (\n (!obj.common.alias.read && obj.common.alias.read !== undefined) ||\n obj.common.alias.read === 'val'\n ) {\n delete obj.common.alias.read;\n }\n if (\n (!obj.common.alias.write && obj.common.alias.write !== undefined) ||\n obj.common.alias.write === 'val'\n ) {\n delete obj.common.alias.write;\n }\n if (!obj.common.alias.id && !obj.common.alias.read && !obj.common.alias.write) {\n delete obj.common.alias;\n }\n }\n\n if (obj.common?.min !== undefined && typeof obj.common.min !== 'number') {\n obj.common.min = parseFloat(obj.common.min);\n }\n if (obj.common?.max !== undefined && typeof obj.common.max !== 'number') {\n obj.common.max = parseFloat(obj.common.max);\n }\n if (obj.common?.step !== undefined && typeof obj.common.step !== 'number') {\n obj.common.step = parseFloat(obj.common.step);\n }\n\n return obj;\n } catch {\n return null;\n }\n }\n\n onChange(value: string, cb?: () => void): void {\n const json = this.prepareObject(value);\n const newState: Partial<ObjectBrowserEditObjectState> = { text: value };\n if (json) {\n newState.changed = this.originalObj !== JSON.stringify(json, null, 2);\n\n // check if some common attributes are deleted\n newState.showCommonDeleteMessage = false;\n const originalObj = JSON.parse(this.originalObj);\n if (json.common) {\n Object.keys(originalObj.common || {}).forEach(attr => {\n if (json.common[attr] === undefined) {\n newState.showCommonDeleteMessage = true;\n }\n });\n }\n\n newState.error = false;\n newState.readError = this.checkFunction(json.common?.alias?.read, false);\n newState.writeError = this.checkFunction(json.common?.alias?.write, true);\n } else {\n newState.showCommonDeleteMessage = false;\n newState.error = true;\n }\n\n this.setState(newState as ObjectBrowserEditObjectState, () => cb && cb());\n }\n\n onUpdate(): void {\n try {\n const obj = JSON.parse(this.state.text);\n obj._id = this.props.obj._id; // do not allow change of id\n\n // check aliases\n if (obj.common?.alias) {\n if (!obj.common.alias.id) {\n delete obj.common.alias.id;\n }\n if (\n (!obj.common.alias.read && obj.common.alias.read !== undefined) ||\n obj.common.alias.read === 'val'\n ) {\n delete obj.common.alias.read;\n }\n if (\n (!obj.common.alias.write && obj.common.alias.write !== undefined) ||\n obj.common.alias.write === 'val'\n ) {\n delete obj.common.alias.write;\n }\n if (!obj.common.alias.id && !obj.common.alias.read && !obj.common.alias.write) {\n delete obj.common.alias;\n }\n }\n\n if (obj.common?.min !== undefined && typeof obj.common.min !== 'number') {\n obj.common.min = parseFloat(obj.common.min);\n }\n if (obj.common?.max !== undefined && typeof obj.common.max !== 'number') {\n obj.common.max = parseFloat(obj.common.max);\n }\n if (obj.common?.step !== undefined && typeof obj.common.step !== 'number') {\n obj.common.step = parseFloat(obj.common.step);\n }\n\n this.props.onClose(obj);\n } catch {\n console.error(`Cannot parse: ${this.state.text}`);\n }\n }\n\n static getPartOfObject(text: string, path?: string): any {\n if (path) {\n return getAttrInObject(JSON.parse(text), path.split('.'));\n }\n return JSON.parse(text);\n }\n\n static setPartOfObject(text: string, value: any, path?: string): string {\n let data: any = JSON.parse(text);\n if (data === undefined) {\n return text;\n }\n data = setAttrInObject(data, path.split('.'), value);\n return JSON.stringify(data, null, 2);\n }\n\n renderCustomPanel(): JSX.Element | null {\n const tab = this.state.customEditTabs?.find(it => it.key === this.state.tab);\n if (!tab) {\n return null;\n }\n let data: Record<string, any>;\n try {\n data = ObjectBrowserEditObject.getPartOfObject(this.state.text, tab.path);\n } catch (e) {\n console.error(`Cannot get data for ${tab.path}: ${e}`);\n return <div>{I18n.t('Cannot get data for %s: %s', tab.path, e)}</div>;\n }\n\n if (!data) {\n return <div>{I18n.t('Cannot get data for %s', tab.path)}</div>;\n }\n\n return (\n <JsonConfigComponent\n theme={this.props.theme}\n socket={this.props.socket as unknown as AdminConnection}\n themeName={this.props.theme.palette.mode}\n themeType={this.props.theme.palette.mode}\n dateFormat={this.props.dateFormat}\n isFloatComma={this.props.isFloatComma}\n schema={tab.json}\n data={data}\n onChange={data => {\n try {\n const text = ObjectBrowserEditObject.setPartOfObject(this.state.text, data, tab.path);\n this.onChange(text);\n } catch (e) {\n console.error(`Cannot set data for ${tab.path}: ${e}`);\n }\n }}\n adapterName={''}\n instance={0}\n onError={(error: boolean): void => {\n console.warn(`Error in JSON editor: ${error}`);\n if (this.state.customError !== error) {\n this.setState({ customError: error });\n }\n }}\n />\n );\n }\n\n renderCustomTab(tab: EditSchemaTabEditor, parsedObj: ioBroker.Object | null | undefined): JSX.Element {\n let style: React.CSSProperties | undefined;\n if (!parsedObj) {\n return null;\n }\n if (!getAttrInObject(parsedObj, tab.path?.split('.'))) {\n // no part in object found\n return null;\n }\n\n if (tab.color) {\n style = {\n backgroundColor: tab.color,\n color: Utils.invertColor(tab.color, true),\n };\n }\n\n const label: string | React.JSX.Element =\n tab.label && typeof tab.label === 'object'\n ? tab.label[this.state.lang] || tab.label.en\n : tab.noTranslation\n ? (tab.label as string) || tab.key\n : this.props.t((tab.label as string) || tab.key);\n\n return (\n <Tab\n disabled={this.state.error || this.state.customError}\n value={tab.key}\n label={label}\n style={style}\n iconPosition=\"start\"\n icon={\n tab.icon ? (\n <Icon\n src={tab.icon}\n style={styles.funcIcon}\n />\n ) : undefined\n }\n />\n );\n }\n\n renderTabs(parsedObj: ioBroker.Object | null | undefined): JSX.Element {\n return (\n <Tabs\n style={styles.tabsPadding}\n value={this.state.tab}\n onChange={(_e, tab) => {\n ((window as any)._localStorage || window.localStorage).setItem(\n `${this.props.dialogName || 'App'}.editTab`,\n tab,\n );\n\n if (tab === 'object') {\n try {\n const obj = JSON.parse(this.state.text);\n let changed = false;\n if (obj.common?.min !== undefined && typeof obj.common.min !== 'number') {\n obj.common.min = parseFloat(obj.common.min);\n changed = true;\n }\n if (obj.common?.max !== undefined && typeof obj.common.max !== 'number') {\n obj.common.max = parseFloat(obj.common.max);\n changed = true;\n }\n if (obj.common?.step !== undefined && typeof obj.common.step !== 'number') {\n obj.common.step = parseFloat(obj.common.step);\n changed = true;\n }\n if (changed) {\n this.setState({ text: JSON.stringify(obj, null, 2) });\n }\n } catch {\n // ignore\n }\n }\n\n this.setState({ tab });\n }}\n >\n <Tab\n value=\"common\"\n disabled={this.state.customError || this.state.error}\n label={this.props.t('Common')}\n />\n <Tab\n value=\"object\"\n disabled={this.state.customError}\n label={this.props.t('Object data')}\n />\n {this.props.obj._id.startsWith('alias.0') && this.props.obj.type === 'state' && (\n <Tab\n disabled={this.state.customError || this.state.error}\n value=\"alias\"\n label={this.props.t('Alias')}\n />\n )}\n {this.state.customEditTabs?.map(tab => this.renderCustomTab(tab, parsedObj))}\n </Tabs>\n );\n }\n\n renderSelectDialog(): JSX.Element {\n if (!this.state.selectId && !this.state.selectRead && !this.state.selectWrite) {\n return null;\n }\n\n let id = '';\n let json: ioBroker.StateObject;\n try {\n json = JSON.parse(this.state.text);\n\n const aliasRead =\n json.common && 'type' in json.common && 'alias' in json.common ? json.common.alias?.read : '';\n const aliasWrite =\n json.common && 'type' in json.common && 'alias' in json.common ? json.common.alias?.write : '';\n\n if (this.state.selectId) {\n id = (json.common?.alias?.id as string) || '';\n } else if (this.state.selectRead) {\n id = aliasRead ?? '';\n } else if (this.state.selectWrite) {\n id = aliasWrite ?? '';\n }\n } catch {\n console.error(`Cannot parse ${this.state.text}`);\n }\n\n return (\n <DialogSelectID\n key=\"selectDialog\"\n imagePrefix=\".\"\n dateFormat={this.props.dateFormat}\n theme={this.props.theme}\n isFloatComma={this.props.isFloatComma}\n socket={this.props.socket}\n dialogName=\"aliasesEdit\"\n title={`${this.props.t('Select for')} ${this.props.obj._id}`}\n selected={id}\n onOk={(idx: string | string[] | undefined) => {\n const selectRead = this.state.selectRead;\n const selectWrite = this.state.selectWrite;\n const selectId = this.state.selectId;\n const stateId = Array.isArray(idx) ? idx[0] : idx;\n this.setState({ selectId: false, selectRead: false, selectWrite: false }, () => {\n if (selectRead) {\n this.setAliasItem(json, 'id.read', stateId);\n } else if (selectWrite) {\n this.setAliasItem(json, 'id.write', stateId);\n } else if (selectId) {\n this.setAliasItem(json, 'id', stateId);\n }\n });\n }}\n onClose={() => this.setState({ selectId: false, selectRead: false, selectWrite: false })}\n />\n );\n }\n\n setAliasItem(json: ioBroker.StateObject, name: string, value: string, cb?: () => void): void {\n json.common = json.common || ({} as any);\n const commonAlias = json.common.alias || ({} as Record<string, any>);\n\n if (name === 'id.read') {\n if (commonAlias.id && typeof commonAlias.id === 'object') {\n commonAlias.id.read = value;\n } else {\n commonAlias.id = { read: value, write: value };\n }\n } else if (name === 'id.write') {\n if (commonAlias.id && typeof commonAlias.id === 'object') {\n commonAlias.id.write = value;\n } else {\n commonAlias.id = { read: value, write: value };\n }\n } else {\n (commonAlias as any)[name] = value;\n }\n\n // @ts-expect-error fix later\n json.common.alias = commonAlias;\n this.onChange(JSON.stringify(json, null, 2), cb);\n }\n\n setCommonItem(json: Record<string, any>, name: string, value: any): void {\n json.common[name] = value;\n this.onChange(JSON.stringify(json, null, 2));\n }\n\n removeCommonItem(json: Record<string, any>, name: string): void {\n delete json.common[name];\n this.onChange(JSON.stringify(json, null, 2));\n }\n\n static buttonAddKey(nameKey: string, cb: () => void): JSX.Element {\n return (\n <div style={styles.marginBlock}>\n <Button\n style={styles.buttonAdd}\n variant=\"contained\"\n color=\"secondary\"\n startIcon={<IconAdd />}\n onClick={cb}\n >\n {nameKey}\n </Button>\n </div>\n );\n }\n\n buttonRemoveKey(nameKey: string, cb: () => void): JSX.Element {\n const { t } = this.props;\n return (\n <Tooltip\n title={t('Remove attribute %s', nameKey)}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <Box\n component=\"div\"\n sx={styles.close}\n onClick={cb}\n />\n </Tooltip>\n );\n }\n\n renderCommonEdit(): JSX.Element {\n try {\n const json = JSON.parse(this.state.text);\n const stateTypeArray: ioBroker.CommonType[] = ['number', 'string', 'boolean', 'array', 'object', 'mixed'];\n const disabled = false;\n const { t, roleArray, obj } = this.props;\n const checkState = obj.type === 'state';\n const checkRole = obj.type === 'channel' || obj.type === 'device' || checkState;\n\n // add default roles to roleArray\n const bigRoleArray: string[] = [...DEFAULT_ROLES];\n roleArray.forEach(role => !bigRoleArray.includes(role) && bigRoleArray.push(role));\n bigRoleArray.sort();\n\n let iconPath;\n\n if (json.common.icon) {\n iconPath =\n json.type === 'instance' || json.type === 'adapter'\n ? `./adapter/${json.common.name}/${json.common.icon}`\n : json.common.icon;\n if (!iconPath.startsWith('.') && !iconPath.startsWith('/') && !iconPath.startsWith('data:')) {\n const parts = obj._id.split('.');\n if (parts[0] === 'system') {\n iconPath = `adapter/${parts[2]}${iconPath.startsWith('/') ? '' : '/'}${iconPath}`;\n } else {\n iconPath = `adapter/${parts[0]}${iconPath.startsWith('/') ? '' : '/'}${iconPath}`;\n }\n }\n }\n return (\n <Box\n style={styles.commonTabWrapper}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n e.preventDefault();\n e.stopPropagation();\n this.onUpdate();\n }\n }}\n >\n <Box\n style={{\n ...styles.commonWrapper,\n width: this.props.width === 'xs' ? '100%' : undefined,\n minWidth: this.props.width === 'xs' ? '100%' : undefined,\n gap: this.props.width === 'xs' ? 10 : 8,\n display: this.props.width === 'xs' ? 'flex' : undefined,\n flexDirection: this.props.width === 'xs' ? 'column' : undefined,\n }}\n >\n {typeof json.common.name !== 'undefined' ? (\n <TextField\n variant=\"standard\"\n disabled={disabled}\n label={t('Name')}\n style={{ ...styles.textField, marginTop: 8 }}\n fullWidth\n value={Utils.getObjectNameFromObj(json, I18n.getLanguage(), {}, false, true)}\n onChange={el => this.setCommonItem(json, 'name', el.target.value)}\n />\n ) : (\n ObjectBrowserEditObject.buttonAddKey('name', () => this.setCommonItem(json, 'name', ''))\n )}\n {checkState ? (\n typeof json.common.type !== 'undefined' ? (\n <Box\n component=\"div\"\n sx={styles.flex}\n >\n <FormControl\n style={styles.marginBlock}\n fullWidth\n >\n <InputLabel style={{ transform: 'scale(0.75)' }}>{t('State type')}</InputLabel>\n <Select\n variant=\"standard\"\n disabled={disabled}\n value={json.common.type}\n onChange={el => this.setCommonItem(json, 'type', el.target.value)}\n >\n {stateTypeArray.map(el => (\n <MenuItem\n key={el}\n value={el}\n >\n {t(el)}\n <span style={styles.typeNameEng}>({el})</span>\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n {this.buttonRemoveKey('type', () => this.removeCommonItem(json, 'type'))}\n </Box>\n ) : (\n ObjectBrowserEditObject.buttonAddKey('type', () =>\n this.setCommonItem(json, 'type', 'string'),\n )\n )\n ) : null}\n <Box\n component=\"div\"\n sx={{ ...styles.flex, flexWrap: this.props.width === 'xs' ? 'wrap' : undefined }}\n >\n {checkState ? (\n typeof json.common.read !== 'undefined' ? (\n <Box\n component=\"div\"\n sx={styles.flex}\n >\n <FormControlLabel\n style={styles.marginBlock}\n control={\n <Checkbox\n disabled={disabled}\n checked={json.common.read}\n // @ts-expect-error check later\n onClick={el => this.setCommonItem(json, 'read', el.target.checked)}\n />\n }\n label={t('Readable')}\n />\n {this.buttonRemoveKey('read', () => this.removeCommonItem(json, 'read'))}\n </Box>\n ) : (\n ObjectBrowserEditObject.buttonAddKey('read', () =>\n this.setCommonItem(json, 'read', true),\n )\n )\n ) : null}\n {checkState ? (\n typeof json.common.write !== 'undefined' ? (\n <Box\n component=\"div\"\n sx={styles.flex}\n >\n <FormControlLabel\n style={styles.marginBlock}\n control={\n <Checkbox\n disabled={disabled}\n checked={json.common.write}\n // @ts-expect-error check later\n onClick={el => this.setCommonItem(json, 'write', el.target.checked)}\n />\n }\n label={t('Writeable')}\n />\n {this.buttonRemoveKey('write', () => this.removeCommonItem(json, 'write'))}\n </Box>\n ) : (\n ObjectBrowserEditObject.buttonAddKey('write', () =>\n this.setCommonItem(json, 'write', true),\n )\n )\n ) : null}\n </Box>\n {checkRole ? (\n typeof json.common.role !== 'undefined' ? (\n <Box\n component=\"div\"\n sx={styles.flex}\n >\n <Autocomplete\n style={styles.marginBlock}\n fullWidth\n disabled={disabled}\n value={json.common.role}\n onChange={(_, e) => this.setCommonItem(json, 'role', e)}\n options={roleArray}\n renderInput={params => (\n <TextField\n variant=\"standard\"\n {...params}\n label={t('Role')}\n />\n )}\n />\n {this.buttonRemoveKey('role', () => this.removeCommonItem(json, 'role'))}\n </Box>\n ) : (\n ObjectBrowserEditObject.buttonAddKey('role', () => this.setCommonItem(json, 'role', ''))\n )\n ) : null}\n {typeof json.common.color !== 'undefined' ? (\n <Box\n component=\"div\"\n sx={styles.flex}\n >\n <TextField\n variant=\"standard\"\n disabled={disabled}\n style={{ ...styles.marginBlock, ...styles.color }}\n label={t('Color')}\n type=\"color\"\n value={json.common.color}\n onChange={el => this.setCommonItem(json, 'color', el.target.value)}\n />\n {this.buttonRemoveKey('color', () => this.removeCommonItem(json, 'color'))}\n </Box>\n ) : (\n ObjectBrowserEditObject.buttonAddKey('color', () => this.setCommonItem(json, 'color', ''))\n )}\n <Box\n component=\"div\"\n sx={{\n ...styles.flex,\n flexWrap: this.props.width === 'xs' ? 'wrap' : undefined,\n gap: this.props.width === 'xs' ? '10px' : undefined,\n }}\n >\n {json.common.type === 'number' ? (\n typeof json.common.min !== 'undefined' ? (\n <Box\n component=\"div\"\n sx={styles.flex}\n >\n <TextField\n variant=\"standard\"\n disabled={disabled}\n className={{ ...styles.marginBlock, ...styles.color }}\n label={t('Min')}\n value={json.common.min}\n onChange={el => this.setCommonItem(json, 'min', el.target.value)}\n />\n {this.buttonRemoveKey('min', () => this.removeCommonItem(json, 'min'))}\n </Box>\n ) : (\n <Box\n component=\"div\"\n sx={styles.flex}\n >\n {ObjectBrowserEditObject.buttonAddKey('min', () =>\n this.setCommonItem(json, 'min', 0),\n )}\n </Box>\n )\n ) : null}\n {json.common.type === 'number' ? (\n typeof json.common.max !== 'undefined' ? (\n <Box\n component=\"div\"\n sx={styles.flex}\n >\n <TextField\n variant=\"standard\"\n disabled={disabled}\n className={{ ...styles.marginBlock, ...styles.color }}\n label={t('Max')}\n value={json.common.max}\n onChange={el => this.setCommonItem(json, 'max', el.target.value)}\n />\n {this.buttonRemoveKey('max', () => this.removeCommonItem(json, 'max'))}\n </Box>\n ) : (\n <Box\n component=\"div\"\n sx={styles.flex}\n >\n {ObjectBrowserEditObject.buttonAddKey('max', () =>\n this.setCommonItem(json, 'max', 100),\n )}\n </Box>\n )\n ) : null}\n {json.common.type === 'number' ? (\n typeof json.common.step !== 'undefined' ? (\n <Box\n component=\"div\"\n sx={styles.flex}\n >\n <TextField\n variant=\"standard\"\n disabled={disabled}\n className={{ ...styles.marginBlock, ...styles.color }}\n label={t('Step')}\n value={json.common.step}\n onChange={el => this.setCommonItem(json, 'step', el.target.value)}\n />\n {this.buttonRemoveKey('step', () => this.removeCommonItem(json, 'step'))}\n </Box>\n ) : (\n <Box\n component=\"div\"\n sx={styles.flex}\n >\n {ObjectBrowserEditObject.buttonAddKey('step', () =>\n this.setCommonItem(json, 'step', 1),\n )}\n </Box>\n )\n ) : null}\n </Box>\n {json.common.type === 'number' ? (\n typeof json.common.unit !== 'undefined' ? (\n <Box\n component=\"div\"\n sx={styles.flex}\n >\n <TextField\n variant=\"standard\"\n disabled={disabled}\n className={{ ...styles.marginBlock, ...styles.color }}\n label={t('Unit')}\n value={json.common.unit}\n onChange={el => this.setCommonItem(json, 'unit', el.target.value)}\n />\n {this.buttonRemoveKey('unit', () => this.removeCommonItem(json, 'unit'))}\n </Box>\n ) : (\n <div style={styles.flexDrop}>\n {ObjectBrowserEditObject.buttonAddKey('unit', () =>\n this.setCommonItem(json, 'unit', ''),\n )}\n </div>\n )\n ) : null}\n </Box>\n {typeof json.common.icon !== 'undefined' ? (\n <Box\n component=\"div\"\n sx={styles.flex}\n style={{ flexGrow: 1, minWidth: 158 }}\n >\n <UploadImage\n disabled={disabled}\n maxSize={10 * 1024}\n icon={iconPath}\n removeIconFunc={() => this.setCommonItem(json, 'icon', '')}\n onChange={base64 => this.setCommonItem(json, 'icon', base64)}\n />\n {this.buttonRemoveKey('icon', () => this.removeCommonItem(json, 'icon'))}\n </Box>\n ) : (\n <Box\n component=\"div\"\n sx={styles.flex}\n >\n {ObjectBrowserEditObject.buttonAddKey('icon', () => this.setCommonItem(json, 'icon', ''))}\n </Box>\n )}\n </Box>\n );\n } catch {\n return <div>{this.props.t('Cannot parse JSON!')}</div>;\n }\n }\n\n renderAliasEdit(): JSX.Element {\n try {\n const json = JSON.parse(this.state.text);\n const funcVisible = json.common?.alias?.read !== undefined || json.common?.alias?.write !== undefined;\n\n return (\n <Grid2\n container\n direction=\"column\"\n style={styles.marginTop}\n >\n <Grid2>\n <FormControlLabel\n control={\n <Checkbox\n checked={typeof json.common?.alias?.id === 'object'}\n onChange={() => {\n if (typeof json.common?.alias?.id === 'object') {\n this.setAliasItem(json, 'id', json.common?.alias?.id?.read || '');\n } else {\n this.setAliasItem(json, 'id.read', json.common?.alias?.id || '');\n }\n }}\n />\n }\n label={this.props.t('Different IDs for read and write')}\n />\n </Grid2>\n {typeof json.common?.alias?.id !== 'object' ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Alias state')}\n value={json.common?.alias?.id || ''}\n style={styles.aliasIdEdit}\n slotProps={{\n input: {\n endAdornment: json.common?.alias?.id ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"large\"\n onClick={() => this.setAliasItem(json, 'id', '')}\n >\n <IconClose />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n onChange={e => this.setAliasItem(json, 'id', e.target.value)}\n margin=\"normal\"\n />\n <Fab\n style={styles.button}\n size=\"small\"\n onClick={() => this.setState({ selectId: true, selectRead: false, selectWrite: false })}\n >\n ...\n </Fab>\n </Grid2>\n ) : null}\n\n {typeof json.common?.alias?.id === 'object' ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Alias read state')}\n value={json.common?.alias?.id?.read || ''}\n style={styles.aliasIdEdit}\n slotProps={{\n input: {\n endAdornment: json.common?.alias?.id?.read ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"large\"\n onClick={() => this.setAliasItem(json, 'id.read', '')}\n >\n <IconClose />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n onChange={e => this.setAliasItem(json, 'id.read', e.target.value)}\n margin=\"normal\"\n />\n <Fab\n style={styles.button}\n size=\"small\"\n onClick={() => this.setState({ selectId: false, selectRead: true, selectWrite: false })}\n >\n ...\n </Fab>\n </Grid2>\n ) : null}\n\n {typeof json.common?.alias?.id === 'object' ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Alias write state')}\n value={json.common?.alias?.id?.write || ''}\n style={styles.aliasIdEdit}\n slotProps={{\n input: {\n endAdornment: json.common?.alias?.id?.write ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"large\"\n onClick={() => this.setAliasItem(json, 'id.write', '')}\n >\n <IconClose />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n onChange={e => this.setAliasItem(json, 'id.write', e.target.value)}\n margin=\"normal\"\n />\n <Fab\n style={styles.button}\n size=\"small\"\n onClick={() => this.setState({ selectId: false, selectRead: false, selectWrite: true })}\n >\n ...\n </Fab>\n </Grid2>\n ) : null}\n <Grid2 style={styles.marginTop}>\n <FormControlLabel\n control={\n <Checkbox\n checked={\n json.common?.alias?.read !== undefined ||\n json.common?.alias?.write !== undefined\n }\n onChange={() => {\n if (funcVisible) {\n delete json.common.alias.read;\n delete json.common.alias.write;\n } else {\n json.common = json.common || {};\n json.common.alias = json.common.alias || {};\n json.common.alias.read = 'val';\n json.common.alias.write = 'val';\n }\n this.onChange(JSON.stringify(json, null, 2));\n }}\n />\n }\n label={this.props.t('Use convert functions')}\n />\n </Grid2>\n {funcVisible ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Read converter')}\n value={json.common?.alias?.read || 'val'}\n style={styles.funcEdit}\n error={!!this.state.readError}\n slotProps={{\n input: {\n endAdornment: json.common?.alias?.read ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"large\"\n onClick={() => this.setAliasItem(json, 'read', '')}\n >\n <IconClose />\n </IconButton>\n </InputAdornment>\n ) : null,\n startAdornment: (\n <InputAdornment position=\"start\">\n <IconFx style={styles.funcIcon} />\n </InputAdornment>\n ),\n },\n }}\n onChange={e => this.setAliasItem(json, 'read', e.target.value)}\n helperText={\n this.state.readError || `${this.props.t('JS function like')} \"val / 5 + 21\"`\n }\n margin=\"normal\"\n />\n </Grid2>\n ) : null}\n {funcVisible ? (\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Write converter')}\n error={!!this.state.writeError}\n value={json.common?.alias?.write || 'val'}\n helperText={\n this.state.writeError || `${this.props.t('JS function like')} \"(val - 21) * 5\"`\n }\n style={styles.funcEdit}\n slotProps={{\n input: {\n endAdornment: json.common?.alias?.write ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"large\"\n onClick={() => this.setAliasItem(json, 'write', '')}\n >\n <IconClose />\n </IconButton>\n </InputAdornment>\n ) : null,\n startAdornment: (\n <InputAdornment position=\"start\">\n <IconFx style={styles.funcIcon} />\n </InputAdornment>\n ),\n },\n }}\n onChange={e => this.setAliasItem(json, 'write', e.target.value)}\n margin=\"normal\"\n />\n </Grid2>\n ) : null}\n </Grid2>\n );\n } catch {\n return <div>{this.props.t('Cannot parse JSON!')}</div>;\n }\n }\n\n onCopy(e: React.MouseEvent<HTMLButtonElement, MouseEvent>): void {\n Utils.copyToClipboard(this.state.text, e as unknown as Event);\n window.alert(this.props.t('ra_Copied'));\n }\n\n onClone(oldId: string, newId: string): void {\n const newObj = JSON.parse(JSON.stringify(this.props.objects[oldId]));\n delete newObj.from;\n delete newObj.ts;\n delete newObj.user;\n newObj._id = newId;\n this.props.objects[newObj._id] = newObj; // bad practice, but no time to wait till this object will be created\n this.props.onNewObject(newObj);\n }\n\n renderCopyDialog(): JSX.Element | null {\n if (!this.state.showCopyDialog) {\n return null;\n }\n return (\n <Dialog\n open={!0}\n maxWidth=\"md\"\n fullWidth\n onClose={() => this.setState({ showCopyDialog: '' })}\n >\n <DialogTitle>{this.props.t('Enter new ID for this object')}</DialogTitle>\n <DialogContent>\n <TextField\n variant=\"standard\"\n autoFocus\n fullWidth\n label={this.props.t('New object ID')}\n value={this.state.newId}\n onKeyDown={e => {\n if (e.key === 'Enter' && !this.props.objects[this.state.newId]) {\n this.setState({ showCopyDialog: '' });\n this.onClone(this.state.showCopyDialog, this.state.newId);\n }\n }}\n onChange={e => this.setState({ newId: e.target.value })}\n />\n </DialogContent>\n <DialogActions>\n <Button\n disabled={!!this.props.objects[this.state.newId]}\n onClick={() => {\n this.setState({ showCopyDialog: '' });\n this.onClone(this.state.showCopyDialog, this.state.newId);\n }}\n color=\"primary\"\n startIcon={<IconCopy />}\n >\n {this.props.t('Clone')}\n </Button>\n <Button\n color=\"grey\"\n onClick={() => this.setState({ showCopyDialog: '' })}\n startIcon={<IconClose />}\n >\n {this.props.t('Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n renderPanelObject(withAlias: boolean): React.JSX.Element {\n return (\n <div\n style={{\n ...styles.divWithoutTitle,\n ...(withAlias ? styles.divWithoutTitleAndTab : undefined),\n ...(this.state.error ? styles.error : undefined),\n }}\n onKeyDown={e => {\n if (e.ctrlKey && e.key === 'Enter') {\n e.preventDefault();\n e.stopPropagation();\n this.onUpdate();\n }\n }}\n >\n <Editor\n value={this.state.text}\n onChange={newValue => this.onChange(newValue)}\n name=\"UNIQUE_ID_OF_DIV\"\n themeType={this.props.themeType}\n />\n {this.state.showCommonDeleteMessage ? (\n <div style={styles.commonDeleteTip}>{I18n.t('common_delete_tip')}</div>\n ) : null}\n </div>\n );\n }\n\n render(): JSX.Element {\n const obj = this.props.obj;\n\n const withAlias = obj._id.startsWith('alias.0') && obj.type === 'state';\n const fullWidth = obj.type !== 'state' || (obj.common.type !== 'number' && obj.common.type !== 'boolean');\n\n let dialogStyle = styles.dialog;\n if (window.innerWidth > 1920) {\n dialogStyle = { ...dialogStyle, maxWidth: 'calc(100% - 150px)' };\n }\n\n let parsedObj: ioBroker.Object;\n try {\n parsedObj = JSON.parse(this.state.text);\n } catch {\n // ignore\n }\n\n return (\n <Dialog\n sx={{ '& .MuiPaper-root': dialogStyle }}\n open={!0}\n maxWidth=\"xl\"\n fullWidth={fullWidth}\n fullScreen={false}\n onClose={() => this.props.onClose()}\n aria-labelledby=\"edit-value-dialog-title\"\n aria-describedby=\"edit-value-dialog-description\"\n >\n <DialogTitle\n id=\"edit-value-dialog-title\"\n style={{\n width: 'calc(100% - 32px)',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {this.props.t('Edit object:')}{' '}\n <Box\n component=\"span\"\n style={styles.id}\n sx={{ fontSize: { xs: 10 } }}\n >\n {this.props.obj._id}\n </Box>\n </DialogTitle>\n\n {this.renderTabs(parsedObj)}\n {this.renderCopyDialog()}\n\n <DialogContent\n sx={{\n p:\n this.props.width === 'xs' && this.state.tab === 'object'\n ? '6px'\n : this.state.tab === 'object' ||\n this.state.tab === 'common' ||\n this.state.tab === 'alias'\n ? '0 24px'\n : '0 6px',\n overflow:\n this.state.tab === 'object' || this.state.tab === 'common' || this.state.tab === 'alias'\n ? undefined\n : 'hidden',\n }}\n >\n {this.state.tab === 'object' ? this.renderPanelObject(withAlias) : null}\n {this.state.tab === 'alias' &&\n this.props.obj._id.startsWith('alias.0') &&\n this.props.obj.type === 'state'\n ? this.renderAliasEdit()\n : null}\n {this.state.tab === 'common' ? this.renderCommonEdit() : null}\n {this.renderCustomPanel()}\n {this.renderSelectDialog()}\n </DialogContent>\n <DialogActions sx={styles.wrapperButton}>\n <Button\n color=\"grey\"\n onClick={() => this.setState({ showCopyDialog: this.props.obj._id, newId: this.props.obj._id })}\n disabled={this.state.error || this.state.changed}\n title={this.props.t('Create a copy of this object')}\n >\n <IconCopy fontSize={this.props.width === 'xs' ? 'large' : undefined} />\n </Button>\n <div style={{ flexGrow: 1 }} />\n {this.state.tab === 'object' && (\n <Button\n color=\"grey\"\n onClick={e => this.onCopy(e)}\n disabled={this.state.error}\n title={this.props.width === 'xs' ? this.props.t('Copy into clipboard') : ''}\n startIcon={this.props.width === 'xs' ? undefined : <IconCopyClipboard />}\n >\n {this.props.width === 'xs' ? (\n <IconCopyClipboard fontSize={32} />\n ) : (\n this.props.t('Copy into clipboard')\n )}\n </Button>\n )}\n <Button\n variant=\"contained\"\n disabled={this.state.error || !this.state.changed || this.state.customError}\n onClick={() => this.onUpdate()}\n startIcon={this.props.width === 'xs' ? undefined : <IconCheck />}\n color=\"primary\"\n >\n {this.props.width === 'xs' ? <IconCheck fontSize=\"large\" /> : this.props.t('Write')}\n </Button>\n <Button\n color=\"grey\"\n variant=\"contained\"\n onClick={() => this.props.onClose()}\n startIcon={this.props.width === 'xs' ? undefined : <IconClose />}\n >\n {this.props.width === 'xs' ? <IconClose fontSize=\"large\" /> : this.props.t('Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default ObjectBrowserEditObject;\n","import React, { Component, type JSX } from 'react';\n\nimport { Dialog, DialogTitle, DialogContent, DialogActions, TextField, Button, Autocomplete } from '@mui/material';\n\nimport { Close as IconCancel, Check as IconCheck } from '@mui/icons-material';\nimport type { AdminConnection, Translate } from '@iobroker/adapter-react-v5';\n\ninterface ObjectBrowserEditRoleProps {\n roles: string[];\n id: string;\n socket: AdminConnection;\n onClose: (obj?: ioBroker.Object) => void;\n t: Translate;\n}\n\ninterface ObjectBrowserEditRoleState {\n role: string | null;\n initRole: string | null;\n roleInput: string | null;\n}\n\nclass ObjectBrowserEditRole extends Component<ObjectBrowserEditRoleProps, ObjectBrowserEditRoleState> {\n private object: ioBroker.Object | null = null;\n\n constructor(props: ObjectBrowserEditRoleProps) {\n super(props);\n\n this.state = {\n role: null,\n initRole: null,\n roleInput: null,\n };\n }\n\n componentDidMount(): void {\n void this.props.socket\n .getObject(this.props.id)\n .then((obj: ioBroker.Object) => {\n this.object = obj;\n const value = obj?.common?.role || null;\n this.setState({ role: value, initRole: value, roleInput: value });\n })\n .catch((e: string) => console.error(e));\n }\n\n onUpdate(): void {\n this.object.common = this.object.common || ({} as ioBroker.ObjectCommon);\n this.object.common.role = this.state.roleInput;\n void this.props.socket.setObject(this.object._id, this.object).then(() => this.props.onClose(this.object));\n }\n\n render(): JSX.Element {\n return (\n <Dialog\n key=\"objectBrowserEditRole\"\n open={!0}\n maxWidth=\"sm\"\n fullWidth\n onClose={() => this.props.onClose()}\n aria-labelledby=\"edit-role-dialog-title\"\n aria-describedby=\"edit-role-dialog-description\"\n >\n <DialogTitle id=\"edit-role-dialog-title\">\n {this.object ? this.props.t('Update role for %s', this.object._id) : null}\n </DialogTitle>\n <DialogContent>\n <Autocomplete\n freeSolo\n options={this.props.roles}\n style={{ width: '100%' }}\n value={this.state.role}\n onChange={(event, role) => this.setState({ role, roleInput: role })}\n onInputChange={(event, role) => this.setState({ roleInput: role })}\n renderInput={params => (\n <TextField\n variant=\"standard\"\n {...params}\n label={this.props.t('Role')}\n />\n )}\n />\n </DialogContent>\n <DialogActions>\n <Button\n disabled={this.state.initRole === this.state.roleInput}\n variant=\"contained\"\n onClick={() => this.onUpdate()}\n color=\"primary\"\n startIcon={<IconCheck />}\n >\n {this.props.t('Apply')}\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => this.props.onClose()}\n color=\"grey\"\n startIcon={<IconCancel />}\n >\n {this.props.t('Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default ObjectBrowserEditRole;\n","import React, { useState, type JSX } from 'react';\n\nimport {\n Button,\n FormControl,\n InputLabel,\n MenuItem,\n Select,\n TextField,\n Dialog,\n DialogTitle,\n DialogActions,\n DialogContent,\n InputAdornment,\n IconButton,\n} from '@mui/material';\n\nimport { Check as CheckIcon, Close as CloseIcon, AddBox as AddIcon } from '@mui/icons-material';\n\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\nimport type { ioBrokerObject } from '@/types';\n\nconst stateTypeArray = ['array', 'boolean', 'file', 'json', 'mixed', 'number', 'object', 'string'];\n\nconst stateDefValues = {\n boolean: false,\n string: '',\n number: 0,\n};\n\nconst TYPES = {\n state: { name: 'State', value: 'state' },\n channel: { name: 'Channel', value: 'channel' },\n device: { name: 'Device', value: 'device' },\n folder: { name: 'Folder', value: 'folder' },\n};\n\ninterface ObjectAddNewObjectProps {\n onClose: () => void;\n onApply: () => void;\n selected: string;\n setObject: (id: string, obj: ioBrokerObject) => Promise<void>;\n objects: Record<string, ioBrokerObject>;\n expertMode: boolean;\n initialType?: ioBrokerObject['type'] | '';\n initialStateType?: string;\n}\n\nconst ObjectAddNewObject: React.FC<ObjectAddNewObjectProps> = ({\n onClose,\n onApply,\n selected,\n setObject,\n objects,\n expertMode,\n initialType,\n initialStateType,\n}): JSX.Element => {\n const names: Record<string, string> = {\n state: I18n.t('New state'),\n channel: I18n.t('New channel'),\n device: I18n.t('New device'),\n folder: I18n.t('New folder'),\n };\n\n const types = [];\n\n // analyse possible types\n const parentType = objects[selected]?.type;\n if (objects[selected]) {\n if (parentType === 'channel') {\n types.push(TYPES.state);\n initialType = initialType || 'state';\n } else if (parentType === 'device') {\n initialType = initialType || 'channel';\n types.push(TYPES.state);\n types.push(TYPES.channel);\n } else if (parentType === 'state') {\n initialType = initialType || '';\n } else {\n types.push(TYPES.state);\n types.push(TYPES.channel);\n types.push(TYPES.device);\n\n if (\n selected.startsWith('0_userdata.') ||\n selected.startsWith('alias.0.') ||\n selected === '0_userdata' ||\n selected === 'alias.0'\n ) {\n types.push(TYPES.folder);\n initialType = initialType || 'folder';\n } else {\n initialType = initialType || 'state';\n }\n }\n } else {\n types.push(TYPES.folder);\n initialType = initialType || 'folder';\n\n if (expertMode && (selected.startsWith('mqtt.') || selected.startsWith('javascript.'))) {\n types.push(TYPES.state);\n types.push(TYPES.channel);\n types.push(TYPES.device);\n }\n }\n\n const storedType = (((window as any)._localStorage as Storage) || window.localStorage).getItem(\n 'App.lastObjectType',\n ) as ioBrokerObject['type'];\n if (storedType && types.find(item => item.value === storedType)) {\n initialType = storedType;\n }\n\n function buildId(_name: string): string {\n return `${selected}.${_name.toString().replace(Utils.FORBIDDEN_CHARS, '_').replace(/\\s/g, '_').replace(/\\./g, '_')}`;\n }\n\n const [type, setType] = useState<ioBrokerObject['type'] | ''>(initialType);\n const [name, setName] = useState<string>(names[initialType]);\n const [stateType, setStateType] = useState<keyof typeof stateDefValues>(\n (initialStateType ||\n (((window as any)._localStorage as Storage) || window.localStorage).getItem('App.lastStateType') ||\n 'string') as keyof typeof stateDefValues,\n );\n const [unique, setUnique] = useState<boolean>(!objects[buildId(names.state)]);\n\n const onLocalApply = (): void => {\n const newObj: ioBrokerObject = {\n common: {\n name,\n desc: I18n.t('Manually created'),\n },\n type,\n } as ioBrokerObject;\n\n if (type === 'state') {\n newObj.common = {\n ...newObj.common,\n role: 'state',\n type: stateType,\n read: true,\n write: true,\n def: stateDefValues[stateType],\n };\n newObj.native = {};\n } else if (type !== 'folder') {\n newObj.common = {\n ...newObj.common,\n role: '',\n icon: '',\n };\n } else {\n delete newObj.common.desc;\n }\n\n void setObject(`${selected}.${name.split(' ').join('_')}`, newObj).then(() => onApply());\n };\n\n const lang = I18n.getLanguage();\n\n return (\n <Dialog\n open={!0}\n fullWidth\n maxWidth=\"md\"\n disableEscapeKeyDown={false}\n // titleButtonApply=\"add\"\n onClose={onClose}\n // onApply={() => onLocalApply()}\n >\n <DialogTitle>\n <div\n style={{\n margin: 10,\n fontSize: 20,\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n }}\n >\n <AddIcon />\n {I18n.t('Add new object:')}\n <span style={{ fontStyle: 'italic' }}>\n {selected}.{name}\n </span>\n </div>\n </DialogTitle>\n <DialogContent>\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <TextField\n variant=\"standard\"\n label={I18n.t('Parent')}\n style={{ margin: '5px 0' }}\n disabled\n value={selected}\n />\n <FormControl\n variant=\"standard\"\n style={{ marginTop: 10, marginBottom: 16 }}\n >\n <InputLabel>{I18n.t('Type')}</InputLabel>\n <Select\n variant=\"standard\"\n value={type}\n onChange={el => {\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n 'App.lastObjectType',\n el.target.value,\n );\n\n if (name === names[type]) {\n setName(names[el.target.value]);\n setUnique(!!objects[buildId(names[el.target.value])]);\n }\n\n setType(el.target.value as ioBrokerObject['type']);\n }}\n >\n {types.map(el => (\n <MenuItem\n key={el.value}\n value={el.value}\n >\n {I18n.t(el.name)}\n {lang !== 'en' && (\n <span style={{ fontSize: 'smaller', opacity: 0.6, marginLeft: 4 }}>\n ({el.value})\n </span>\n )}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n {type === 'state' && (\n <FormControl style={{ marginTop: 10, marginBottom: 16 }}>\n <InputLabel style={{ left: -14 }}>{I18n.t('State type')}</InputLabel>\n <Select\n style={{ marginTop: 6 }}\n variant=\"standard\"\n value={stateType}\n onChange={el => {\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n 'App.lastStateType',\n el.target.value,\n );\n setStateType(el.target.value as keyof typeof stateDefValues);\n }}\n >\n {stateTypeArray.map(el => (\n <MenuItem\n key={el}\n value={el}\n >\n {I18n.t(el)}\n {lang !== 'en' && I18n.t(el) !== el && (\n <span style={{ fontSize: 'smaller', opacity: 0.6, marginLeft: 4 }}>\n ({el})\n </span>\n )}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n )}\n <TextField\n variant=\"standard\"\n label={I18n.t('Name')}\n style={{ margin: '5px 0' }}\n autoFocus\n value={name}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n e.preventDefault();\n if (name) {\n onLocalApply();\n }\n }\n }}\n slotProps={{\n input: {\n endAdornment: name ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => setName('')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n onChange={el => {\n setUnique(!objects[buildId(el.target.value)]);\n setName(el.target.value);\n }}\n />\n </div>\n </DialogContent>\n <DialogActions>\n <Button\n id=\"add-new-object-dialog-add\"\n startIcon={<CheckIcon />}\n disabled={!name || !type || !unique || (type === 'state' && !stateType)}\n onClick={() => onLocalApply()}\n variant=\"contained\"\n color=\"primary\"\n >\n {I18n.t('add')}\n </Button>\n <Button\n id=\"add-new-object-dialog-cancel\"\n color=\"grey\"\n onClick={onClose}\n variant=\"contained\"\n startIcon={<CloseIcon />}\n >\n {I18n.t('ra_Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default ObjectAddNewObject;\n","import React, { useEffect, useState, type JSX } from 'react';\nimport { Checkbox, FormControl, InputLabel, LinearProgress, MenuItem, Select, Switch } from '@mui/material';\n\nimport { I18n, Icon, type IobTheme, type ThemeType, type Translate, Utils } from '@iobroker/adapter-react-v5';\n\nimport CustomModal from '../components/CustomModal';\n\nconst readWriteArray: Record<string, { name: string; valueNum: number; title: string }[]>[] = [\n {\n Owner: [\n { name: 'read', valueNum: 0x400, title: 'read owner' },\n { name: 'write', valueNum: 0x200, title: 'write owner' },\n ],\n },\n {\n Group: [\n { name: 'read', valueNum: 0x40, title: 'read group' },\n { name: 'write', valueNum: 0x20, title: 'write group' },\n ],\n },\n {\n Everyone: [\n { name: 'read', valueNum: 0x4, title: 'read everyone' },\n { name: 'write', valueNum: 0x2, title: 'write everyone' },\n ],\n },\n];\n\ninterface AccessControlUser {\n name: string;\n value: string;\n icon?: string;\n color?: string;\n}\n\ninterface AccessControlGroup {\n name: string;\n value: string;\n icon?: string;\n color?: string;\n}\n\nexport type AccessControlObject = {\n acl: {\n object?: number;\n owner?: string;\n ownerGroup?: string;\n state?: number;\n };\n type: string;\n common: {\n defaultNewAcl: {\n object: number;\n owner: string;\n ownerGroup: string;\n state: number;\n };\n };\n} & ioBroker.PartialObject;\n\nfunction newValueAccessControl(value: number, newValue: number, mask: number): number {\n value |= newValue & mask;\n value &= newValue | (~mask & 0xffff);\n return value;\n}\n\ninterface ObjectRightsProps {\n value: number;\n setValue: (value: number) => void;\n t: Translate;\n differentValues: number[];\n applyToChildren: boolean;\n mask: number;\n setMask: (mask: number) => void;\n disabled: boolean;\n}\n\nconst ObjectRights: React.FC<ObjectRightsProps> = ({\n value,\n setValue,\n t,\n differentValues,\n applyToChildren,\n mask,\n setMask,\n disabled,\n}): JSX.Element => {\n useEffect((): void => {\n if (applyToChildren) {\n let _checkDifferent = 0;\n for (let e = 0; e < differentValues.length; e++) {\n _checkDifferent |= value ^ differentValues[e];\n }\n setMask(_checkDifferent);\n } else {\n setMask(0);\n }\n }, [differentValues, applyToChildren, setMask, value]);\n\n let newSelected = value;\n\n return (\n <div\n style={{\n display: 'flex',\n width: 'fit-content',\n margin: 20,\n border: '1px solid',\n borderLeft: 0,\n }}\n >\n {readWriteArray.map(el => {\n const name = Object.keys(el)[0];\n return (\n <div\n style={{\n width: 150,\n height: 150,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n borderLeft: '1px solid',\n }}\n key={name}\n >\n <div\n style={{\n height: 50,\n display: 'flex',\n alignItems: 'center',\n fontSize: 18,\n borderBottom: '1px solid silver',\n width: '100%',\n justifyContent: 'center',\n }}\n >\n {t(name)}\n </div>\n <div\n style={{\n display: 'flex',\n width: '100%',\n }}\n >\n {el[name].map((obj, idx) => {\n let bool = false;\n if (newSelected - obj.valueNum >= 0) {\n newSelected -= obj.valueNum;\n bool = true;\n }\n const masked = mask & obj.valueNum;\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n alignItems: 'center',\n borderRight: idx === 0 ? '1px solid' : 0,\n }}\n key={obj.valueNum}\n >\n <div\n style={{\n height: 50,\n borderBottom: '1px solid',\n width: '100%',\n justifyContent: 'center',\n display: 'flex',\n alignItems: 'center',\n color: 'silver',\n }}\n >\n {t(obj.name)}\n </div>\n <div style={{ height: 50, display: 'flex' }}>\n <Checkbox\n disabled={disabled}\n checked={bool}\n color={masked ? 'primary' : 'secondary'}\n indeterminate={!!masked}\n style={masked ? { opacity: 0.5 } : undefined}\n onChange={e => {\n if (masked) {\n mask &= ~obj.valueNum & 0xffff;\n setMask(mask);\n }\n let newValue = value;\n if (!e.target.checked) {\n newValue &= ~obj.valueNum & 0xffff;\n } else {\n newValue |= obj.valueNum;\n }\n setValue(newValue);\n }}\n />\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n })}\n </div>\n );\n};\n\ninterface ObjectEditOfAccessControlProps {\n onClose: () => void;\n onApply: () => void;\n selected: string;\n extendObject: (id: string, obj: Partial<ioBroker.Object>) => void;\n objects: Record<string, ioBroker.Object>;\n t: Translate;\n modalEmptyId: string;\n themeType: ThemeType;\n theme: IobTheme;\n}\n\nconst ObjectEditOfAccessControl: React.FC<ObjectEditOfAccessControlProps> = ({\n onClose,\n onApply,\n selected,\n extendObject,\n objects,\n t,\n modalEmptyId,\n themeType,\n theme,\n}) => {\n const [stateOwnerUser, setStateOwnerUser] = useState<AccessControlUser>(null);\n const [stateOwnerGroup, setStateOwnerGroup] = useState<AccessControlGroup>(null);\n const [ownerUsers, setOwnerUsers] = useState<AccessControlUser[]>([]);\n const [ownerGroups, setOwnerGroups] = useState<AccessControlGroup[]>([]);\n const [applyToChildren, setApplyToChildren] = useState(false);\n const [checkState, setCheckState] = useState(false);\n const [childrenCount, setChildrenCount] = useState(0);\n const [valueObjectAccessControl, setValueObjectAccessControl] = useState<number>(null);\n const [valueStateAccessControl, setValueStateAccessControl] = useState<number>(null);\n const [differentOwner, setDifferentOwner] = useState(false);\n const [differentGroup, setDifferentGroup] = useState(false);\n const [differentState, setDifferentState] = useState([]);\n const [differentObject, setDifferentObject] = useState([]);\n const [maskState, setMaskState] = useState(0);\n const [maskObject, setMaskObject] = useState(0);\n const [ids, setIds] = useState<string[]>([]);\n const [progress, setProgress] = useState(false);\n\n const [disabledButton, setDisabledButton] = useState(true);\n\n const different = t('different');\n\n useEffect(() => {\n let count = 0;\n const _differentState: number[] = [];\n const _differentObject: number[] = [];\n\n const id = selected || modalEmptyId;\n const idWithDot = `${id}.`;\n const keys = Object.keys(objects).sort();\n let _checkState = false;\n const groups: AccessControlGroup[] = [];\n const users: AccessControlUser[] = [];\n const lang = I18n.getLanguage();\n\n let _differentOwner = false;\n let _differentGroup = false;\n let _stateOwnerUser: string = null;\n let _stateOwnerGroup: string = null;\n let _valueObjectAccessControl: number = null;\n let _valueStateAccessControl: number = null;\n const _ids: string[] = [];\n\n for (let k = 0; k < keys.length; k++) {\n const key = keys[k];\n const obj = objects[key];\n if (obj && (key === id || key.startsWith(idWithDot))) {\n count++;\n _ids.push(key);\n if (!obj.acl) {\n continue;\n }\n\n if (_valueObjectAccessControl === null && obj.acl.object !== undefined) {\n _valueObjectAccessControl = obj.acl.object;\n }\n if (_valueStateAccessControl === null && (obj as ioBroker.StateObject).acl.state !== undefined) {\n _valueStateAccessControl = (obj as ioBroker.StateObject).acl.state;\n }\n if (_stateOwnerUser === null && obj.acl.owner !== undefined) {\n _stateOwnerUser = obj.acl.owner;\n }\n if (_stateOwnerGroup === null && obj.acl.ownerGroup !== undefined) {\n _stateOwnerGroup = obj.acl.ownerGroup;\n }\n\n if (!differentOwner && _stateOwnerUser !== obj.acl.owner && obj.acl.owner !== undefined) {\n _differentOwner = true;\n }\n if (!differentGroup && _stateOwnerGroup !== obj.acl.ownerGroup && obj.acl.ownerGroup !== undefined) {\n _differentGroup = true;\n }\n if (\n (obj as ioBroker.StateObject).acl.state !== undefined &&\n _valueStateAccessControl !== (obj as ioBroker.StateObject).acl.state &&\n !_differentState.includes((obj as ioBroker.StateObject).acl.state)\n ) {\n _differentState.push((obj as ioBroker.StateObject).acl.state);\n }\n if (\n obj.acl.object !== undefined &&\n _valueObjectAccessControl !== obj.acl.object &&\n !_differentObject.includes(obj.acl.object)\n ) {\n _differentObject.push(obj.acl.object);\n }\n if (obj.type === 'state') {\n _checkState = true;\n }\n }\n\n if (key.startsWith('system.group.') && obj?.type === 'group') {\n groups.push({\n name: Utils.getObjectNameFromObj(obj, lang).replace('system.group.', ''),\n value: key,\n icon: obj.common?.icon,\n color: obj.common?.color,\n });\n } else if (key.startsWith('system.user.') && obj?.type === 'user') {\n users.push({\n name: Utils.getObjectNameFromObj(obj, lang).replace('system.user.', ''),\n value: key,\n icon: obj.common?.icon,\n color: obj.common?.color,\n });\n }\n }\n\n _stateOwnerUser = _stateOwnerUser || objects['system.config'].common.defaultNewAcl.owner;\n _stateOwnerGroup = _stateOwnerGroup || objects['system.config'].common.defaultNewAcl.ownerGroup;\n _valueObjectAccessControl = _valueObjectAccessControl || objects['system.config'].common.defaultNewAcl.object;\n setValueObjectAccessControl(\n Number.isNaN(_valueObjectAccessControl)\n ? objects['system.config'].common.defaultNewAcl.object\n : _valueObjectAccessControl,\n );\n\n if (_checkState) {\n _valueStateAccessControl = _valueStateAccessControl || objects['system.config'].common.defaultNewAcl.state;\n setValueStateAccessControl(\n Number.isNaN(_valueStateAccessControl)\n ? objects['system.config'].common.defaultNewAcl.state\n : _valueStateAccessControl,\n );\n }\n\n const userItem = users.find(item => item.value === _stateOwnerUser);\n const groupItem = groups.find(item => item.value === _stateOwnerGroup);\n\n setStateOwnerUser(userItem);\n setStateOwnerGroup(groupItem);\n\n setDifferentOwner(_differentOwner);\n setDifferentGroup(_differentGroup);\n\n setOwnerUsers(users);\n setOwnerGroups(groups);\n\n if (_checkState) {\n setCheckState(true);\n }\n if (modalEmptyId) {\n setApplyToChildren(true);\n }\n setChildrenCount(count);\n\n setDifferentState(_differentState);\n setDifferentObject(_differentObject);\n\n setIds(_ids);\n }, [objects, selected, differentGroup, differentOwner, modalEmptyId]);\n\n useEffect(() => {\n if (applyToChildren) {\n if (differentGroup) {\n if (stateOwnerGroup.value !== 'different') {\n setStateOwnerGroup({ name: different, value: 'different' });\n }\n if (!ownerGroups.find(item => item.value === 'different')) {\n setOwnerGroups(el => [\n {\n name: different,\n value: 'different',\n },\n ...el,\n ]);\n }\n }\n\n if (differentOwner) {\n if (!stateOwnerUser || stateOwnerUser.value !== 'different') {\n setStateOwnerUser({ name: different, value: 'different' });\n }\n if (!ownerUsers.find(item => item.value === 'different')) {\n setOwnerUsers(el => [\n {\n name: different,\n value: 'different',\n },\n ...el,\n ]);\n }\n }\n } else {\n if (stateOwnerUser && stateOwnerUser.value === 'different') {\n setStateOwnerUser(objects[selected].acl.owner as unknown as AccessControlUser);\n }\n if (stateOwnerGroup && stateOwnerGroup.value === 'different') {\n setStateOwnerGroup(objects[selected].acl.ownerGroup as unknown as AccessControlGroup);\n }\n // remove different from a list\n setOwnerGroups(el => el.filter(({ value }) => value !== 'different'));\n setOwnerUsers(el => el.filter(({ value }) => value !== 'different'));\n }\n }, [\n ownerUsers,\n applyToChildren,\n differentOwner,\n differentGroup,\n objects,\n selected,\n stateOwnerGroup,\n stateOwnerUser,\n different,\n ownerGroups,\n ]);\n\n if (!ids.length) {\n return <LinearProgress />;\n }\n return (\n <CustomModal\n theme={theme}\n titleButtonApply=\"apply\"\n overflowHidden\n disableApply={disabledButton}\n progress={progress}\n onClose={onClose}\n onApply={() => {\n setProgress(true);\n setTimeout((): void => {\n if (!applyToChildren) {\n const newAcl: AccessControlObject['acl'] = Utils.clone(objects[selected].acl || {});\n newAcl.object = valueObjectAccessControl;\n newAcl.owner = stateOwnerUser ? stateOwnerUser.value : 'system.user.admin';\n newAcl.ownerGroup = stateOwnerGroup ? stateOwnerGroup.value : 'system.group.administrator';\n\n if (objects[selected].type === 'state') {\n newAcl.state = valueStateAccessControl;\n }\n extendObject(selected, { acl: newAcl } as Partial<ioBroker.Object>);\n } else {\n // let maskState = Object.keys(differentHexState).reduce((sum, key) => sum | (differentHexState[key] ? parseInt(key, 16) : 0), 0);\n const _maskState = ~maskState & 0xffff;\n\n // let maskObject = Object.keys(differentHexObject).reduce((sum, key) => sum | (differentHexObject[key] ? parseInt(key, 16) : 0), 0);\n const _maskObject = ~maskObject & 0xffff;\n\n for (let i = 0; i < ids.length; i++) {\n const key = ids[i];\n const obj = objects[key];\n const newAcl: AccessControlObject['acl'] = Utils.clone(obj.acl || {});\n newAcl.object = newValueAccessControl(obj.acl.object, valueObjectAccessControl, _maskState);\n if (stateOwnerUser && stateOwnerUser.value !== 'different') {\n newAcl.owner = stateOwnerUser.value;\n }\n if (stateOwnerGroup && stateOwnerGroup.value !== 'different') {\n newAcl.ownerGroup = stateOwnerGroup.value;\n }\n if (obj.type === 'state') {\n newAcl.state = newValueAccessControl(\n obj.acl.state,\n valueStateAccessControl,\n _maskObject,\n );\n }\n extendObject(key, { acl: newAcl } as Partial<ioBroker.Object>);\n }\n }\n\n setProgress(false);\n onApply();\n }, 200);\n }}\n >\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <div\n style={{\n margin: 10,\n fontSize: 20,\n }}\n >\n {t('Access control list: %s', selected || modalEmptyId)}\n </div>\n <div style={{ display: 'flex' }}>\n <FormControl\n variant=\"standard\"\n fullWidth\n style={{ marginRight: 10 }}\n >\n <InputLabel>{t('Owner user')}</InputLabel>\n <Select\n variant=\"standard\"\n disabled={progress}\n value={stateOwnerUser ? stateOwnerUser.value : ''}\n renderValue={() => (\n <span>\n {stateOwnerUser?.icon ? (\n <Icon\n src={stateOwnerUser.icon}\n style={{ width: 16, height: 16, marginRight: 8 }}\n />\n ) : null}\n {stateOwnerUser ? stateOwnerUser.name : ''}\n </span>\n )}\n style={\n stateOwnerUser?.value === 'different'\n ? { opacity: 0.5 }\n : {\n color: stateOwnerUser?.color || undefined,\n backgroundColor: Utils.getInvertedColor(stateOwnerUser?.color, themeType),\n }\n }\n onChange={el => {\n const userItem = ownerUsers.find(item => item.value === el.target.value);\n setStateOwnerUser(userItem);\n setDisabledButton(false);\n }}\n >\n {ownerUsers.map(el => (\n <MenuItem\n style={\n el.value === 'different'\n ? { opacity: 0.5 }\n : {\n color: el.color || undefined,\n backgroundColor: Utils.getInvertedColor(el.color, themeType),\n }\n }\n key={el.value}\n value={el.value}\n >\n {el.icon ? (\n <Icon\n src={el.icon}\n style={{ width: 16, height: 16, marginRight: 8 }}\n />\n ) : null}\n {el.name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <FormControl\n variant=\"standard\"\n fullWidth\n >\n <InputLabel>{t('Owner group')}</InputLabel>\n <Select\n variant=\"standard\"\n disabled={progress}\n value={stateOwnerGroup ? stateOwnerGroup.value : ''}\n renderValue={() => (\n <span>\n {stateOwnerGroup?.icon ? (\n <Icon\n src={stateOwnerGroup.icon}\n style={{ width: 16, height: 16, marginRight: 8 }}\n />\n ) : null}\n {stateOwnerGroup ? stateOwnerGroup.name : ''}\n </span>\n )}\n style={\n stateOwnerGroup?.value === 'different'\n ? { opacity: 0.5 }\n : {\n color: stateOwnerGroup?.color || undefined,\n backgroundColor: Utils.getInvertedColor(stateOwnerGroup?.color, themeType),\n }\n }\n onChange={el => {\n const groupItem = ownerGroups.find(item => item.value === el.target.value);\n setStateOwnerGroup(groupItem);\n setDisabledButton(false);\n }}\n >\n {ownerGroups.map(el => (\n <MenuItem\n key={el.value}\n value={el.value}\n style={\n el.value === 'different'\n ? { opacity: 0.5 }\n : {\n color: el.color || undefined,\n backgroundColor: Utils.getInvertedColor(el.color, themeType),\n }\n }\n >\n {el.icon ? (\n <Icon\n src={el.icon}\n style={{ width: 16, height: 16, marginRight: 8 }}\n />\n ) : null}\n {el.name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </div>\n\n <div\n style={{\n display: 'flex',\n margin: 10,\n alignItems: 'center',\n fontSize: 10,\n marginLeft: 0,\n color: 'silver',\n }}\n >\n <div style={!applyToChildren ? { color: 'green' } : null}>{t('to apply one item')}</div>\n <Switch\n disabled={progress || !!modalEmptyId || childrenCount === 1}\n checked={!!modalEmptyId || applyToChildren}\n onChange={e => {\n setApplyToChildren(e.target.checked);\n setDisabledButton(false);\n }}\n color=\"primary\"\n />\n <div style={applyToChildren ? { color: 'green' } : null}>\n {t('to apply with children')}{' '}\n {modalEmptyId || childrenCount > 1 ? `(${childrenCount} ${t('object(s)')})` : ''}\n </div>\n </div>\n\n {progress && <LinearProgress />}\n\n <div style={{ overflowY: 'auto' }}>\n <div>\n <h2>{t('Object rights')}</h2>\n <ObjectRights\n mask={maskObject}\n disabled={progress}\n setMask={setMaskObject}\n applyToChildren={applyToChildren}\n differentValues={differentObject}\n t={t}\n setValue={e => {\n setValueObjectAccessControl(e);\n setDisabledButton(false);\n }}\n value={valueObjectAccessControl}\n />\n </div>\n {checkState && (\n <div>\n <h2>{t('States rights')}</h2>\n <ObjectRights\n mask={maskState}\n disabled={progress}\n setMask={setMaskState}\n applyToChildren={applyToChildren}\n differentValues={applyToChildren ? differentState : []}\n t={t}\n setValue={e => {\n setValueStateAccessControl(e);\n setDisabledButton(false);\n }}\n value={valueStateAccessControl}\n />\n </div>\n )}\n </div>\n </div>\n </CustomModal>\n );\n};\n\nexport default ObjectEditOfAccessControl;\n","import React, { Component, type JSX } from 'react';\n\nimport { Box, Button, Dialog, DialogActions, DialogContent, DialogTitle, Fab } from '@mui/material';\n\n// Icons\nimport { Close as CloseIcon, PlayArrow as PlayIcon, GetApp as DownloadIcon } from '@mui/icons-material';\n\nimport { withWidth, type IobTheme, type Translate, type AdminConnection, Utils } from '@iobroker/adapter-react-v5';\n\nimport type { ioBrokerObject } from '@/types';\n\nconst styles: Record<string, any> = {\n dialog: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n },\n content: {\n textAlign: 'center',\n },\n error: (theme: IobTheme) => ({\n color: theme.palette.mode === 'dark' ? '#ff7777' : '#c20000',\n }),\n image: {\n height: '100%',\n width: 'auto',\n },\n text: {\n fontFamily: 'Lucida Console, Courier, monospace',\n width: '100%',\n },\n download: {\n textDecoration: 'none',\n textTransform: 'uppercase',\n fontSize: 14,\n color: 'white',\n border: '1px solid white',\n borderRadius: 5,\n padding: '8px 16px',\n marginRight: 8,\n },\n};\n\ninterface ObjectViewFileDialogProps {\n t: Translate;\n socket: AdminConnection;\n obj: ioBrokerObject;\n onClose: () => void;\n}\n\ninterface ObjectViewFileDialogState {\n error: string;\n image: boolean;\n text: string | null;\n binary: string | null;\n fileName: string;\n mime?: string;\n audio?: boolean;\n}\n\nclass ObjectViewFileDialog extends Component<ObjectViewFileDialogProps, ObjectViewFileDialogState> {\n audioRef: React.RefObject<HTMLAudioElement>;\n\n constructor(props: ObjectViewFileDialogProps) {\n super(props);\n\n const parts = this.props.obj._id.split('.');\n\n this.state = {\n error: '',\n image: null,\n text: null,\n binary: null,\n fileName: `${parts[parts.length - 2]}.${parts[parts.length - 1]}`,\n };\n\n this.audioRef = React.createRef();\n }\n\n componentDidMount(): void {\n this.props.socket\n .getBinaryState(this.props.obj._id)\n .then((data: string) => {\n let ext = this.props.obj._id.toLowerCase().split('.').pop();\n\n const detectedMimeType = Utils.detectMimeType(data);\n if (detectedMimeType) {\n ext = detectedMimeType;\n }\n\n if (ext === 'jpg') {\n this.setState({ image: true, binary: data, mime: 'image/jpeg' });\n } else if (ext === 'svg') {\n this.setState({ image: true, binary: data, mime: 'image/svg+xml' });\n } else if (ext === 'png' || ext === 'bmp') {\n this.setState({ image: true, binary: data, mime: `image/${ext}` });\n } else if (ext === 'mp3') {\n this.setState({ audio: true, binary: data, mime: 'audio/mpeg' });\n } else if (ext === 'ogg') {\n this.setState({ audio: true, binary: data, mime: 'audio/ogg' });\n } else if (ext === 'txt' || ext === 'log') {\n try {\n const text = btoa(data);\n this.setState({ text, binary: data, mime: 'text/plain' });\n } catch {\n // ignore\n }\n }\n })\n .catch(error => this.setState({ error }));\n }\n\n render(): JSX.Element {\n return (\n <Dialog\n style={styles.dialog}\n open={!0}\n maxWidth={this.state.audio ? 'sm' : 'md'}\n onClose={() => this.props.onClose()}\n fullWidth\n aria-labelledby=\"object-view-dialog-title\"\n >\n <DialogTitle id=\"object-view-dialog-title\">\n {this.props.t('View file in state: %s', this.props.obj._id)}\n </DialogTitle>\n <DialogContent style={styles.content}>\n {this.state.error ? (\n <Box\n component=\"div\"\n sx={styles.error}\n >\n {this.state.error === 'State is not binary'\n ? this.props.t('No file stored yet')\n : this.props.t(this.state.error)}\n </Box>\n ) : null}\n {this.state.audio ? (\n <audio\n ref={this.audioRef}\n src={`data:${this.state.mime};base64,${this.state.binary}`}\n />\n ) : null}\n {this.state.audio ? (\n <Fab\n color=\"primary\"\n onClick={() => this.audioRef.current && this.audioRef.current.play()}\n >\n <PlayIcon />\n </Fab>\n ) : null}\n {this.state.image ? (\n <img\n src={`data:${this.state.mime};base64,${this.state.binary}`}\n alt={this.props.obj._id}\n style={styles.image}\n />\n ) : null}\n {this.state.text !== null ? <pre style={styles.text}>{this.state.text}</pre> : null}\n </DialogContent>\n <DialogActions>\n <a\n style={styles.download}\n download={this.state.fileName}\n href={`data:${this.state.mime};base64,${this.state.binary}`}\n >\n <DownloadIcon style={{ paddingRight: 8, height: 12 }} />\n <span>{this.props.t('Download')}</span>\n </a>\n <Button\n variant=\"contained\"\n onClick={() => this.props.onClose()}\n startIcon={<CloseIcon />}\n color=\"grey\"\n >\n {this.props.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default withWidth()(ObjectViewFileDialog);\n","import React, { Component, type JSX } from 'react';\n\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n MenuItem,\n MenuList,\n ListItemIcon,\n ListItemText,\n TextField,\n Checkbox,\n FormControlLabel,\n InputAdornment,\n IconButton,\n InputLabel,\n Select,\n FormControl,\n} from '@mui/material';\n\n// Icons\nimport { Close, Link as IconLink, AddLink, Close as IconClose } from '@mui/icons-material';\n\nimport { withWidth } from '@iobroker/adapter-react-v5';\n\nimport { I18n, IconFx, type IobTheme, type AdminConnection, type Translate } from '@iobroker/adapter-react-v5';\n\nimport type { ioBrokerObject } from '@/types';\n\nconst styles: Record<string, any> = {\n funcIcon: {\n width: 16,\n height: 16,\n },\n formControlLabel: {\n marginBottom: 16,\n },\n color: {\n // display: 'block',\n width: 70,\n },\n typeNameEng: {\n marginLeft: 8,\n opacity: 0.7,\n fontStyle: 'italic',\n fontSize: 'smaller',\n },\n usedInAlias: {\n // backgroundColor: theme.palette.secondary.main,\n },\n addNewAlias: (theme: IobTheme) => ({\n backgroundColor: theme.palette.primary.main,\n }),\n};\nconst stateTypeArray = ['array', 'boolean', 'file', 'json', 'mixed', 'number', 'object', 'string'];\n\n// todo: icon, enum function, enum room, write from other object\n\ninterface ObjectAliasEditorProps {\n t: Translate;\n socket: AdminConnection;\n objects: Record<string, ioBrokerObject>;\n onRedirect: (id: string, timeout?: number) => void;\n obj: ioBrokerObject;\n onClose: () => void;\n}\n\ninterface ObjectAliasEditorState {\n usedInAliases: string[];\n showAddNewAlias: boolean;\n newAliasId: string;\n newAliasName: string;\n newAliasRead: boolean;\n newAliasWrite: boolean;\n newAliasUnit: string;\n newAliasDesc: string;\n newAliasType: string;\n newAliasUseFormula: boolean;\n newAliasReadFormula: string;\n newAliasWriteFormula: string;\n newAliasColor: string;\n newAliasIcon: string;\n}\n\nclass ObjectAliasEditor extends Component<ObjectAliasEditorProps, ObjectAliasEditorState> {\n aliasIDs: string[];\n\n constructor(props: ObjectAliasEditorProps) {\n super(props);\n\n const usedInAliases: string[] = [];\n const id = this.props.obj._id;\n\n this.aliasIDs = Object.keys(this.props.objects).filter(_id => _id.startsWith('alias.0'));\n // Try to find if this state used somewhere in alias\n for (let i = 0; i < this.aliasIDs.length; i++) {\n const alias = this.props.objects[this.aliasIDs[i]].common?.alias;\n if (\n alias?.id === id ||\n (typeof alias?.id === 'object' && (alias.id.read === id || alias.id.write === id))\n ) {\n usedInAliases.push(this.aliasIDs[i]);\n }\n }\n\n this.state = {\n usedInAliases,\n showAddNewAlias: !usedInAliases.length,\n newAliasId: this.props.obj._id,\n newAliasName: ObjectAliasEditor.getText(this.props.obj.common.name || this.props.obj._id),\n newAliasRead: this.props.obj.common.read,\n newAliasWrite: this.props.obj.common.write,\n newAliasUnit: this.props.obj.common.unit,\n newAliasDesc: ObjectAliasEditor.getText(this.props.obj.common.desc),\n newAliasType: this.props.obj.common.type,\n newAliasUseFormula: false,\n newAliasReadFormula: 'val',\n newAliasWriteFormula: 'val',\n newAliasColor: this.props.obj.common.color,\n newAliasIcon: this.props.obj.common.icon,\n };\n }\n\n static getText(text: ioBroker.StringOrTranslated): string {\n if (!text) {\n return '';\n }\n if (typeof text === 'object') {\n return text[I18n.getLanguage()] || text.en || '';\n }\n return text.toString();\n }\n\n renderAddNewAlias(): JSX.Element | null {\n if (!this.state.showAddNewAlias) {\n return null;\n }\n return (\n <Dialog\n open={!0}\n onClose={() => this.setState({ showAddNewAlias: false })}\n >\n <DialogTitle>{I18n.t('Create new alias: %s', `alias.0.${this.state.newAliasId}`)}</DialogTitle>\n <DialogContent>\n <TextField\n style={styles.formControlLabel}\n variant=\"standard\"\n value={this.state.newAliasId}\n slotProps={{\n input: {\n endAdornment: this.state.newAliasId ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ newAliasId: '' })}\n >\n <IconClose />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n onChange={e => this.setState({ newAliasId: e.target.value })}\n label={I18n.t('Alias ID')}\n helperText={`alias.0.${this.state.newAliasId}`}\n fullWidth\n />\n <TextField\n style={styles.formControlLabel}\n variant=\"standard\"\n value={this.state.newAliasName}\n slotProps={{\n input: {\n endAdornment: this.state.newAliasName ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ newAliasName: '' })}\n >\n <IconClose />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n onChange={e => this.setState({ newAliasName: e.target.value })}\n label={I18n.t('Alias name')}\n fullWidth\n />\n <TextField\n style={styles.formControlLabel}\n variant=\"standard\"\n value={this.state.newAliasDesc}\n slotProps={{\n input: {\n endAdornment: this.state.newAliasDesc ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ newAliasDesc: '' })}\n >\n <IconClose />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n onChange={e => this.setState({ newAliasDesc: e.target.value })}\n label={I18n.t('Alias description')}\n fullWidth\n />\n <FormControl\n style={styles.formControlLabel}\n fullWidth\n >\n <InputLabel>{I18n.t('State type')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.newAliasType}\n onChange={e => this.setState({ newAliasType: e.target.value })}\n >\n {stateTypeArray.map(el => (\n <MenuItem\n key={el}\n value={el}\n >\n {I18n.t(el)}\n <span style={styles.typeNameEng}>({el})</span>\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <TextField\n style={styles.formControlLabel}\n variant=\"standard\"\n value={this.state.newAliasUnit}\n slotProps={{\n input: {\n endAdornment: this.state.newAliasUnit ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ newAliasUnit: '' })}\n >\n <IconClose />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n onChange={e => this.setState({ newAliasUnit: e.target.value })}\n label={I18n.t('Alias units')}\n fullWidth\n />\n <TextField\n variant=\"standard\"\n style={{ ...styles.formControlLabel, ...styles.color }}\n label={I18n.t('Color')}\n type=\"color\"\n value={this.state.newAliasColor}\n onChange={e => this.setState({ newAliasColor: e.target.value })}\n />\n <FormControlLabel\n style={{ ...styles.formControlLabel, marginLeft: 16 }}\n control={\n <Checkbox\n indeterminate={\n this.state.newAliasRead === undefined || this.state.newAliasRead === null\n }\n checked={this.state.newAliasRead}\n onChange={e => {\n const newState: Partial<ObjectAliasEditorState> = {\n newAliasRead: e.target.checked,\n };\n // state cannot be not readable and not writeable\n if (newState.newAliasRead === false && this.state.newAliasWrite === false) {\n newState.newAliasWrite = true;\n }\n this.setState(newState as ObjectAliasEditorState);\n }}\n />\n }\n label={I18n.t('Alias read')}\n />\n <FormControlLabel\n style={styles.formControlLabel}\n control={\n <Checkbox\n indeterminate={\n this.state.newAliasWrite === undefined || this.state.newAliasWrite === null\n }\n checked={this.state.newAliasWrite}\n onChange={e => {\n const newState: Partial<ObjectAliasEditorState> = {\n newAliasWrite: e.target.checked,\n };\n // state cannot be not readable and not writeable\n if (newState.newAliasRead === false && this.state.newAliasWrite === false) {\n newState.newAliasRead = true;\n }\n this.setState(newState as ObjectAliasEditorState);\n }}\n />\n }\n label={I18n.t('Alias write')}\n />\n <FormControlLabel\n style={styles.formControlLabel}\n control={\n <Checkbox\n checked={this.state.newAliasUseFormula}\n onChange={e => this.setState({ newAliasUseFormula: e.target.checked })}\n />\n }\n label={I18n.t('Use convert functions')}\n />\n {this.state.newAliasUseFormula && this.state.newAliasRead ? (\n <TextField\n style={styles.formControlLabel}\n variant=\"standard\"\n value={this.state.newAliasReadFormula}\n onChange={e => this.setState({ newAliasReadFormula: e.target.value })}\n label={I18n.t('Read formula')}\n helperText={`${I18n.t('JS function like')} \"val / 5 + 21\"`}\n slotProps={{\n input: {\n endAdornment:\n this.state.newAliasReadFormula && this.state.newAliasReadFormula !== 'val' ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ newAliasReadFormula: 'val' })}\n >\n <IconClose />\n </IconButton>\n </InputAdornment>\n ) : null,\n startAdornment: (\n <InputAdornment position=\"start\">\n <IconFx style={styles.funcIcon} />\n </InputAdornment>\n ),\n },\n }}\n fullWidth\n />\n ) : null}\n {this.state.newAliasUseFormula && this.state.newAliasWrite ? (\n <TextField\n style={styles.formControlLabel}\n variant=\"standard\"\n value={this.state.newAliasWriteFormula}\n onChange={e => this.setState({ newAliasWriteFormula: e.target.value })}\n label={I18n.t('Write formula')}\n slotProps={{\n input: {\n endAdornment:\n this.state.newAliasWriteFormula && this.state.newAliasWriteFormula !== 'val' ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ newAliasWriteFormula: 'val' })}\n >\n <IconClose />\n </IconButton>\n </InputAdornment>\n ) : null,\n startAdornment: (\n <InputAdornment position=\"start\">\n <IconFx style={styles.funcIcon} />\n </InputAdornment>\n ),\n },\n }}\n helperText={`${I18n.t('JS function like')} \"val / 5 + 21\"`}\n fullWidth\n />\n ) : null}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n disabled={!this.state.newAliasId || !!this.props.objects[`alias.0.${this.state.newAliasId}`]}\n onClick={async () => {\n const obj: ioBrokerObject = {\n _id: `alias.0.${this.state.newAliasId}`,\n type: 'state',\n common: {\n name: this.state.newAliasName,\n type: this.props.obj.common.type,\n alias: {\n id: this.props.obj._id,\n },\n },\n native: {},\n } as ioBrokerObject;\n if (this.state.newAliasDesc) {\n obj.common.desc = this.state.newAliasDesc;\n }\n if (this.state.newAliasType) {\n obj.common.type = this.state.newAliasType;\n }\n if (this.state.newAliasUnit) {\n obj.common.unit = this.state.newAliasUnit;\n }\n if (this.state.newAliasRead !== undefined && this.state.newAliasRead !== null) {\n obj.common.read = this.state.newAliasRead;\n }\n if (this.state.newAliasWrite !== undefined && this.state.newAliasWrite !== null) {\n obj.common.write = this.state.newAliasWrite;\n }\n if (this.state.newAliasColor) {\n obj.common.color = this.state.newAliasColor;\n }\n if (this.state.newAliasIcon) {\n obj.common.icon = this.state.newAliasIcon;\n }\n if (this.state.newAliasUseFormula) {\n if (\n obj.common.read !== false &&\n this.state.newAliasReadFormula &&\n this.state.newAliasReadFormula !== 'val'\n ) {\n obj.common.alias.read = this.state.newAliasReadFormula;\n }\n if (\n obj.common.write !== false &&\n this.state.newAliasWriteFormula &&\n this.state.newAliasWriteFormula !== 'val'\n ) {\n obj.common.alias.write = this.state.newAliasWriteFormula;\n }\n }\n await this.props.socket.setObject(obj._id, obj);\n this.setState({ showAddNewAlias: false });\n this.props.onRedirect(obj._id, 2000);\n this.props.onClose();\n }}\n startIcon={<AddLink />}\n color=\"primary\"\n >\n {this.props.t('Create')}\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => this.setState({ showAddNewAlias: false })}\n startIcon={<Close />}\n color=\"grey\"\n >\n {this.props.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n render(): JSX.Element {\n return (\n <Dialog\n key=\"editAlias\"\n open={!0}\n maxWidth=\"sm\"\n onClose={() => this.props.onClose()}\n fullWidth\n aria-labelledby=\"object-alias-dialog-title\"\n >\n {this.renderAddNewAlias()}\n <DialogTitle id=\"object-alias-dialog-title\">\n {this.state.usedInAliases.length\n ? I18n.t('This object is used in aliases')\n : I18n.t('This object does not used in any aliases yet')}\n </DialogTitle>\n <DialogContent>\n <MenuList style={{ maxWidth: 400 }}>\n {this.state.usedInAliases.map(aliasID => (\n <MenuItem\n style={styles.usedInAlias}\n key={aliasID}\n onClick={() => this.props.onRedirect(aliasID)}\n >\n <ListItemIcon>\n <IconLink fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText>{aliasID}</ListItemText>\n </MenuItem>\n ))}\n <MenuItem\n onClick={() => this.setState({ showAddNewAlias: true })}\n sx={styles.addNewAlias}\n >\n <ListItemIcon>\n <AddLink fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText>{I18n.t('Create alias from this ID')}</ListItemText>\n </MenuItem>\n </MenuList>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n onClick={() => this.props.onClose()}\n startIcon={<Close />}\n color=\"grey\"\n >\n {this.props.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default withWidth()(ObjectAliasEditor);\n","import React, { Component, type JSX } from 'react';\n\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n DialogContentText,\n Button,\n IconButton,\n Snackbar,\n} from '@mui/material';\n\n// icons\nimport { Cancel as IconCancel, Delete as IconDeleteOne } from '@mui/icons-material';\n\nimport {\n type AdminConnection,\n type IobTheme,\n type ThemeName,\n type ThemeType,\n type Translate,\n withWidth,\n Router,\n ObjectBrowser,\n type ObjectBrowserClass,\n type ObjectBrowserFilter,\n type TreeItemData,\n} from '@iobroker/adapter-react-v5';\n\nimport type ObjectsWorker from '@/Workers/ObjectsWorker';\n\nimport ObjectCustomDialog from '../dialogs/ObjectCustomDialog';\nimport ObjectBrowserValue from '../components/Object/ObjectBrowserValue';\nimport ObjectBrowserEditObject from '../components/Object/ObjectBrowserEditObject';\nimport ObjectBrowserEditRole from '../components/Object/ObjectBrowserEditRole';\nimport ObjectAddNewObject from '../dialogs/ObjectAddNewObject';\nimport ObjectEditOfAccessControl from '../dialogs/ObjectEditOfAccessControl';\nimport ObjectViewFileDialog from '../dialogs/ObjectViewFileDialog';\nimport ObjectAliasEditor from '../dialogs/ObjectAliasEditor';\n\nconst IconDeleteAll = IconDeleteOne;\nconst styles: Record<string, React.CSSProperties> = {\n buttonIcon: {\n marginRight: 4,\n },\n buttonAll: {\n color: '#FF0000',\n },\n id: {\n fontStyle: 'italic',\n },\n buttonText: {\n whiteSpace: 'nowrap',\n },\n};\n\ninterface ObjectsProps {\n t: Translate;\n lang: ioBroker.Languages;\n socket: AdminConnection;\n themeName: ThemeName;\n themeType: ThemeType;\n theme: IobTheme;\n expertMode: boolean;\n isFloatComma: boolean;\n dateFormat: string;\n objectsWorker: ObjectsWorker;\n statesOnly: boolean;\n prefix: string;\n}\n\ninterface ObjectsState {\n selected: string;\n name: string;\n toast: string;\n deleteObjectShow: any;\n // suppressDeleteConfirm: boolean;\n}\n\nclass Objects extends Component<ObjectsProps, ObjectsState> {\n private readonly dialogName: string;\n\n private filters: Record<string, any>;\n\n private readonly t: Translate;\n\n private readonly wordCache: Record<string, string>;\n\n constructor(props: ObjectsProps) {\n super(props);\n\n this.dialogName = 'AdminObjects';\n\n const filtersStr: string =\n (((window as any)._localStorage as Storage) || window.localStorage).getItem(\n `${this.dialogName || 'App'}.filters`,\n ) || '{}';\n\n try {\n this.filters = JSON.parse(filtersStr);\n } catch {\n this.filters = {};\n }\n\n const selected =\n (((window as any)._localStorage as Storage) || window.localStorage).getItem(\n `${this.dialogName || 'App'}.selected`,\n ) || '';\n\n this.state = {\n selected,\n name: '',\n toast: '',\n deleteObjectShow: null,\n // suppressDeleteConfirm: false,\n };\n this.t = this.translate;\n this.wordCache = {};\n }\n\n translate = (word: string, arg1: any, arg2: any): string => {\n if (arg1 !== undefined) {\n return this.props.t(word, arg1, arg2);\n }\n\n if (!this.wordCache[word]) {\n this.wordCache[word] = this.props.t(word);\n }\n\n return this.wordCache[word];\n };\n\n onDelete(withChildren?: boolean): void {\n const id = this.state.deleteObjectShow.id;\n if (withChildren) {\n this.props.socket\n .delObjects(id, true)\n .then(() => this.setState({ toast: this.t('All deleted') }))\n .catch(e => window.alert(`Cannot delete object: ${e}`));\n\n this.setState({ deleteObjectShow: null });\n } else {\n this.props.socket.delObject(id, false).catch(e => window.alert(`Cannot delete object: ${e}`));\n this.setState({ deleteObjectShow: null });\n }\n }\n\n renderToast(): JSX.Element {\n return (\n <Snackbar\n key=\"toast\"\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right',\n }}\n open={!!this.state.toast}\n autoHideDuration={3000}\n onClose={() => this.setState({ toast: '' })}\n message={this.state.toast}\n action={\n <IconButton\n size=\"small\"\n aria-label=\"close\"\n color=\"inherit\"\n onClick={() => this.setState({ toast: '' })}\n >\n <IconCancel fontSize=\"small\" />\n </IconButton>\n }\n />\n );\n }\n\n renderDeleteDialog(): JSX.Element | null {\n if (!this.state.deleteObjectShow) {\n return null;\n }\n return (\n <Dialog\n key=\"delete\"\n maxWidth=\"md\"\n open={!0}\n onClose={() => this.setState({ deleteObjectShow: null })}\n aria-labelledby=\"delete-object-dialog-title\"\n aria-describedby=\"delete-object-dialog-description\"\n >\n <DialogTitle id=\"delete-object-dialog-title\">\n {this.state.deleteObjectShow.hasChildren ? this.t('Delete object(s)') : this.t('Delete object')}:{' '}\n <span style={styles.id}>{this.state.deleteObjectShow.id}</span>\n </DialogTitle>\n <DialogContent>\n <DialogContentText>\n {this.t('Are you sure?')}\n {/* <FormControlLabel\n control={<Checkbox\n checked={this.state.suppressDeleteConfirm}\n onChange={() => {\n this.setState({suppressDeleteConfirm: true});\n\n }}\n name=\"checkedA\" />\n }\n label=\"Secondary\"\n /> */}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n {this.state.deleteObjectShow.hasChildren ? (\n <Button\n variant=\"contained\"\n color=\"grey\"\n sx={{ '& .MuiButton-text': styles.buttonText }}\n onClick={() => this.onDelete(true)}\n startIcon={<IconDeleteAll style={styles.buttonAll} />}\n >\n {this.t('Delete with children', this.state.deleteObjectShow.childrenCount)}\n </Button>\n ) : null}\n {this.state.deleteObjectShow.exists ? (\n <Button\n variant=\"contained\"\n sx={{ '& .MuiButton-text': styles.buttonText }}\n onClick={() => this.onDelete(false)}\n color=\"primary\"\n startIcon={<IconDeleteOne />}\n autoFocus\n >\n {this.t('Delete one item')}\n </Button>\n ) : null}\n <Button\n variant=\"contained\"\n color=\"grey\"\n onClick={() => this.setState({ deleteObjectShow: null })}\n startIcon={<IconCancel />}\n >\n {this.t('ra_Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n render(): JSX.Element[] {\n return [\n this.renderToast(),\n <ObjectBrowser\n key=\"browser\"\n dialogName=\"admin\"\n objectsWorker={this.props.objectsWorker}\n prefix={this.props.prefix}\n defaultFilters={this.filters}\n statesOnly={this.props.statesOnly}\n style={{ width: '100%', height: '100%' }}\n socket={this.props.socket}\n selected={this.state.selected}\n name={this.state.name}\n expertMode={this.props.expertMode}\n isFloatComma={this.props.isFloatComma}\n dateFormat={this.props.dateFormat}\n t={this.t}\n lang={this.props.lang}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n theme={this.props.theme}\n objectCustomDialog={ObjectCustomDialog}\n objectBrowserValue={ObjectBrowserValue}\n objectBrowserEditObject={ObjectBrowserEditObject}\n objectBrowserEditRole={ObjectBrowserEditRole}\n objectBrowserViewFile={ObjectViewFileDialog}\n objectBrowserAliasEditor={ObjectAliasEditor}\n router={Router}\n enableStateValueEdit\n onObjectDelete={(id: string, hasChildren: boolean, objectExists: boolean, childrenCount: number) =>\n this.setState({\n deleteObjectShow: {\n id,\n hasChildren,\n exists: objectExists,\n childrenCount,\n },\n })\n }\n onFilterChanged={(filterConfig: ObjectBrowserFilter) => {\n this.filters = filterConfig;\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n `${this.dialogName || 'App'}.filters`,\n JSON.stringify(filterConfig),\n );\n }}\n onSelect={(selected: string | string[]) => {\n if (Array.isArray(selected)) {\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n `${this.dialogName || 'App'}.selected`,\n selected[0] || '',\n );\n } else {\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n `${this.dialogName || 'App'}.selected`,\n selected || '',\n );\n }\n }}\n objectEditBoolean\n objectAddBoolean\n objectStatesView\n objectImportExport\n objectEditOfAccessControl\n modalNewObject={(context: ObjectBrowserClass) => (\n <ObjectAddNewObject\n objects={context.objects}\n expertMode={this.props.expertMode}\n setObject={(id, data) =>\n this.props.socket.setObject(id, data).catch(error => window.alert(error))\n }\n selected={context.state.modalNewObj.id}\n initialType={context.state.modalNewObj.initialType}\n initialStateType={context.state.modalNewObj.initialStateType}\n onClose={() => context.setState({ modalNewObj: null })}\n onApply={() => context.setState({ modalNewObj: null })}\n />\n )}\n modalEditOfAccessControl={(context: ObjectBrowserClass, objData: TreeItemData) => (\n <ObjectEditOfAccessControl\n theme={this.props.theme}\n themeType={this.props.themeType}\n extendObject={(id: string, data: Partial<ioBroker.Object>): void => {\n this.props.socket.extendObject(id, data).catch(error => window.alert(error));\n\n objData.aclTooltip = null;\n }}\n selected={context.state.selected[0]}\n // If an object is virtual, it has no obj attribute\n modalEmptyId={objData.obj ? '' : objData.id}\n objects={context.objects}\n t={this.t}\n onClose={() => context.setState({ modalEditOfAccess: false, modalEditOfAccessObjData: null })}\n onApply={() => context.setState({ modalEditOfAccess: false, modalEditOfAccessObjData: null })}\n />\n )}\n />,\n this.renderDeleteDialog(),\n ];\n }\n}\n\nexport default withWidth()(Objects);\n"],"names":["styles","modalDialog","minWidth","maxWidth","overflowHidden","display","overflow","titleIcon","marginRight","content","fontSize","languageButton","position","right","top","languageButtonActive","theme","color","palette","primary","main","_ref","toggleTranslation","noTranslation","title","fullWidth","help","progress","icon","disableApplyIfNotChanged","applyButton","onClose","children","titleButtonApply","titleButtonClose","onApply","textInput","defaultValue","disableApply","value","setValue","useState","useEffect","Icon","Utils","getStyle","_jsxs","Dialog","open","disableEscapeKeyDown","sx","DialogTitle","_jsx","style","I18n","getLanguage","IconButton","size","undefined","onClick","t","LanguageIcon","DialogContent","paddingTop","TextField","autoComplete","autoFocus","variant","multiline","onChange","e","target","slotProps","input","endAdornment","InputAdornment","CloseIcon","DialogActions","Button","startIcon","CheckIcon","disabled","paper","height","maxHeight","headingIcon","width","titleEnabled","float","textTransform","fontWeight","paddingLeft","scrollDiv","enabledControl","verticalAlign","customControls","accordionOdd","accordionEven","backgroundColor","accordionHeaderOdd","accordionHeaderEven","accordionHeaderEnabledOdd","accordionHeaderEnabledEven","enabledVisible","enabledInvisible","ObjectCustomEditor","Component","constructor","props","expanded","super","changedIds","scrollDivRef","jsonConfigs","refTemplate","customObj","commonConfig","cb","cachedNewValues","onSave","this","objectIDs","length","state","confirmed","setState","showConfirmation","saveOneState","getCommonConfig","hasChanges","newValues","reportChangedIds","setTimeout","JSON","parse","window","_localStorage","localStorage","getItem","loaded","maxOids","systemConfig","createRef","customsInstances","map","id","common","custom","native","AdminUtils","deepClone","objects","loadAllCustoms","then","componentDidMount","socket","getCompactSystemConfig","registerSaveFunc","componentWillUnmount","promises","adapter","replace","push","getCustomTemplate","Promise","all","forEach","_this$props$objects","_this$props$objects2","instanceObjs","_id","stringify","type","instanceObjects","_ad$common","ad","fixAdminUI","adminUI","jsonText","fileExists","readFile","json","jsonSchema","file","JSON5","console","error","alert","JsonConfigComponent","loadI18n","i18n","e1","_executeCustom","func","data","instanceObj","items","attr","processed","includes","strFunc","alsoDependsOn","_attr","defaultFunc","result","f","Function","originalData","default","flattenItems","_result","arguments","Object","keys","getDefaultValues","instance","obj","defaultValues","enabled","split","attrs","filter","ids","commons","inst","_customObj$common","startsWith","Array","isArray","_default","sort","isChanged","find","combineNewAndOld","ignoreUnderscore","renderOneCustom","i","_this$jsonConfigs$ada","_this$jsonConfigs$ada2","_instance$split$pop","isIndeterminate","hidden","lang","en","Accordion","ref","pos","indexOf","splice","setItem","AccordionSummary","expandIcon","ExpandMoreIcon","src","alt","Typography","heading","className","AccordionDetails","FormControlLabel","formControl","control","Checkbox","indeterminate","checked","label","adapterName","parseInt","pop","themeName","themeType","multiEdit","schema","isFloatComma","dateFormat","onError","onValueChange","_this$commonConfig","log","ConfigGeneric","getValue","renderErrorMessage","DialogError","text","getObject","oldObjects","resolve","_objects","_oldObjects","onProgress","Math","round","shift","_obj$common","ins","instances","_obj$common2","_obj$common2$custom","isMultiEdit","setObject","async","renderConfirmationDialog","DialogConfirm","toString","ok","render","LinearProgress","index","Paper","values","jsonConfig","withWidth","localeMap","enLocale","fr","frLocale","ru","ruLocale","de","deLocale","es","esLocale","br","brLocale","nl","nlLocale","it","itLocale","pt","ptLocale","pl","plLocale","uk","ukLocale","cnLocale","tableDiv","mixins","toolbar","minHeight","container","table","whiteSpace","mode","row","userSelect","opacity","updatedRow","animation","rowInterpolated","selectHistoryControl","selectRelativeTime","marginLeft","notAliveInstance","customRange","rowSelected","secondary","contrastText","rowFocused","pointerEvents","bottom","left","m","border","action","active","grow","flexGrow","msInput","ml","mt","cellAckTrue","cellAckFalse","toolbarDate","padding","toolbarTime","toolbarTimeGrid","paddingRight","paddingBottom","borderRadius","toolbarTimeLabel","noLoadingProgress","colValue","colAck","colFrom","colLastChange","colTs","ObjectHistoryData","adminInstance","supportedFeaturesPromises","unit","timeTimer","readSupportedFeaturesTimeout","rangeValues","rangeRef","subscribes","ts","endsWith","substring","list","historyInstances","itemIndex","findIndex","alive","val","historyInstance","readHistoryRange","readHistory","relativeRange","start","end","selectedStr","lastSelected","lastSelectedColumn","selected","updateOpened","insertOpened","lcVisible","ackVisible","fromVisible","supportedFeatures","ampm","edit","location","search","slice","prepareData","setRelativeInterval","readSupportedFeatures","clearTimeout","sendTo","subscribeState","unsubscribeState","_config$common","getHistoryInstances","config","defaultHistory","historyInstanceItem","instObj","getHistory","listObj","getForeignStates","alives","item","_alives$id","_this$state$historyIn","loading","from","ack","q","addID","aggregate","returnNewestEntries","chart","range","Date","toISOString","lc","noDataForPeriod","noData","_this$state$historyIn2","now","oldest","getTime","limit","onToggleSelect","column","shiftKey","pps","ppls","ctrlKey","getTableRows","rows","r","TableRow","hover","TableCell","rowNoData","interpolated","selectedClass","formatTimestamp","Box","component","toLocaleDateString","toLocaleTimeString","padStart","shiftTime","delay","getSeconds","getMilliseconds","setMilliseconds","setSeconds","mins","setHours","setMinutes","day","getDay","setDate","getDate","setMonth","setFullYear","getFullYear","dontSave","removeItem","Number","renderTable","_this$state$historyIn3","marginTop","initialWidths","minWidths","TableContainer","TableResize","stickyHeader","dblTitle","TableHead","TableBody","renderDialogConfirm","areYouSure","DialogContentText","suppressMessage","onDelete","IconDelete","IconClose","tasks","onUpdate","parseFloat","stateVal","entries","onInsert","date","time","getHours","getMinutes","ms","updateEdit","name","renderEditDialog","noValidate","LocalizationProvider","dateAdapter","AdapterDateFns","adapterLocale","DatePicker","TimePicker","views","helperText","htmlInput","max","min","isUpdate","setStartDate","startDate","setEndDate","endDate","renderToolbar","_this$state$historyIn4","_this$state$values","Toolbar","FormControl","InputLabel","Select","MenuItem","exportData","ExportIcon","expertMode","InsertIcon","IconEdit","element","document","getElementById","createElement","setAttribute","body","appendChild","lines","join","encodeURIComponent","getObjectName","click","removeChild","echarts","TimelineComponent","ToolboxComponent","TitleComponent","TooltipComponent","GridComponent","LineChart","SVGRenderer","chartWithToolbar","chartWithoutToolbar","splitLineButtonIcon","buttonIcon","echartsButton","GRID_PADDING_LEFT","GRID_PADDING_RIGHT","ObjectChart","echartsReact","readTimeout","chartValues","divRef","timerResize","updateTimer","minY","maxY","maxYLenTimeout","mouseDown","onResize","componentDidUpdate","updateChart","chartHeight","chartWidth","splitLine","maxYLen","stepType","echartsJump","addEventListener","noToolbar","forceUpdate","getEchartsInstance","dispose","removeEventListener","_this$props$obj$commo","isAlive","getState","showJumpToEchart","getAdapterInstances","chartStep","_instObj$common","_values$","options","states","a","b","ceil","convertData","dp","exact","getOption","widthAxis","w","serie","xAxisIndex","step","showSymbol","hoverAnimation","lineStyle","areaStyle","yAxis","boundaryGap","show","splitNumber","axisLabel","formatter","showMaxLabel","showMinLabel","axisTick","alignWithLabel","interval","withSeconds","getObjectNameFromObj","grid","tooltip","trigger","params","param","toLocaleString","axisPointer","xAxis","withTime","getMonth","toolbox","feature","saveAsImage","series","getDerivedStateFromProps","_props","_state","withReadData","diff","_this$echartsReact2","_this$echartsReact","setOption","setNewRange","readData","_this$echartsReact3","installEventHandlers","zr","getZr","_iobInstalled","on","lastX","offsetX","oldDiff","wheelDelta","move","moved","preventDefault","touches","originalEvent","pageX","lastWidth","abs","fingerWidth","amount","renderChart","ReactEchartsCore","option","notMerge","lazyUpdate","opts","renderer","onEvents","rendered","current","offsetWidth","offsetHeight","minNumber","maxNumber","openEcharts","args","protocol","host","onStepChanged","showStepMenu","Menu","anchorEl","Fab","SplitLineIcon","dialog","textAlign","tabPanel","tabSelected","tabsIndicator","ObjectCustomDialog","MobileDialog","chartAvailable","saveFunc","currentTab","isChartAvailable","Router","getLocation","arg","confirmDialog","mobile","isMobile","progressRunning","showWarning","allVisibleObjects","_this$props$objects$i","_this$props$objects$i2","renderCharts","renderCustomEditor","update","cancel","isYes","renderWarningDialog","_this$props$objects$t","_this$props$objects$t2","varType","scroll","AppBar","Tabs","_event","newTab","doNavigate","indicatorColor","Tab","getButtonTitle","SaveIcon","quality","expire","readOnly","readOnlyText","wrapperButton","ackCheckbox","clientHeight","ObjectBrowserValue","propsValue","chartFrom","inputRef","React","chartEnabled","fullScreen","targetValue","valid","jsonError","_this$props$object","_this$props$object$co","_this$props$object$co2","object","_this$inputRef","el","origType","setSelectionRange","stopPropagation","isNumberValid","numVal","renderTimePicker","checkJsonError","renderJsonEditor","Editor","editValueMode","newValue","renderStates","key","Autocomplete","disablePortal","noOptionsText","freeSolo","getOptionLabel","onInputChange","onKeyUp","renderInput","_this$props$object$co3","_this$props$role","_this$props$object$co4","alignItems","defaultChecked","Tooltip","popper","InfoIcon","write","ChartIcon","FullscreenExitIcon","FullscreenIcon","onSubmit","dialogForm","Grid2","direction","spacing","xs","flex","Switch","inputProps","onKeyDown","role","gap","sm","md","IconCheck","IconCancel","divWithoutTitle","divWithoutTitleAndTab","fontStyle","aliasIdEdit","button","funcDivEdit","funcEditName","funcEdit","funcIcon","commonTabWrapper","flexFlow","commonWrapper","flexDrop","margin","marginBlock","buttonAdd","textField","mr","close","cursor","transition","transform","buttonRemoveWrapper","zIndex","tabsPadding","commonDeleteTip","typeNameEng","DEFAULT_ROLES","ObjectBrowserEditObject","originalObj","onObjectUpdated","changed","withAlias","tab","dialogName","aliasTab","aliasRead","alias","read","aliasWrite","customError","readError","checkFunction","writeError","showCopyDialog","showCommonDeleteMessage","selectId","selectRead","selectWrite","newId","_this$props$obj","_this$props$obj2","editSchemas","customEditTabs","schemas","iobUriRead","parsed","iobUriParse","warn","order","subscribeObject","unsubscribeObject","isWrite","_json","_json$common","_this$props$objects$j","_this$props$objects$j2","_json$common$alias","jsFunc","initialType","finalType","prepareObject","_obj$common3","_obj$common4","newState","_json$common2","_json$common2$alias","_json$common3","_json$common3$alias","_obj$common5","_obj$common6","_obj$common7","_obj$common8","getPartOfObject","path","getAttrInObject","setPartOfObject","setAttrInObject","renderCustomPanel","_this$state$customEdi","renderCustomTab","parsedObj","_tab$path","invertColor","iconPosition","renderTabs","_this$state$customEdi2","_e","_obj$common9","_obj$common10","_obj$common11","renderSelectDialog","_json$common$alias2","_json$common$alias3","_json$common4","_json$common4$alias","DialogSelectID","imagePrefix","onOk","idx","stateId","setAliasItem","commonAlias","setCommonItem","removeCommonItem","buttonAddKey","nameKey","IconAdd","buttonRemoveKey","renderCommonEdit","stateTypeArray","roleArray","checkState","checkRole","bigRoleArray","iconPath","parts","flexDirection","flexWrap","_","UploadImage","maxSize","removeIconFunc","base64","renderAliasEdit","_json$common5","_json$common5$alias","_json$common6","_json$common6$alias","_json$common7","_json$common7$alias","_json$common11","_json$common11$alias","_json$common12","_json$common12$alias","_json$common13","_json$common13$alias","_json$common14","_json$common14$alias","_json$common15","_json$common15$alias","_json$common15$alias$","_json$common16","_json$common16$alias","_json$common16$alias$","_json$common17","_json$common17$alias","_json$common18","_json$common18$alias","_json$common18$alias$","_json$common19","_json$common19$alias","_json$common19$alias$","_json$common20","_json$common20$alias","_json$common21","_json$common21$alias","_json$common22","_json$common22$alias","_json$common23","_json$common23$alias","_json$common24","_json$common24$alias","_json$common25","_json$common25$alias","funcVisible","_json$common8","_json$common8$alias","_json$common9","_json$common9$alias","_json$common9$alias$i","_json$common10","_json$common10$alias","startAdornment","IconFx","onCopy","copyToClipboard","onClone","oldId","newObj","user","onNewObject","renderCopyDialog","IconCopy","renderPanelObject","dialogStyle","innerWidth","textOverflow","p","IconCopyClipboard","ObjectBrowserEditRole","initRole","roleInput","catch","roles","event","stateDefValues","boolean","string","number","TYPES","_objects$selected","initialStateType","names","channel","device","folder","types","parentType","storedType","buildId","_name","FORBIDDEN_CHARS","setType","setName","stateType","setStateType","unique","setUnique","onLocalApply","desc","def","AddIcon","marginBottom","readWriteArray","Owner","valueNum","Group","Everyone","newValueAccessControl","mask","ObjectRights","differentValues","applyToChildren","setMask","_checkDifferent","newSelected","borderLeft","borderBottom","justifyContent","bool","masked","borderRight","_ref2","extendObject","modalEmptyId","stateOwnerUser","setStateOwnerUser","stateOwnerGroup","setStateOwnerGroup","ownerUsers","setOwnerUsers","ownerGroups","setOwnerGroups","setApplyToChildren","setCheckState","childrenCount","setChildrenCount","valueObjectAccessControl","setValueObjectAccessControl","valueStateAccessControl","setValueStateAccessControl","differentOwner","setDifferentOwner","differentGroup","setDifferentGroup","differentState","setDifferentState","differentObject","setDifferentObject","maskState","setMaskState","maskObject","setMaskObject","setIds","setProgress","disabledButton","setDisabledButton","different","count","_differentState","_differentObject","idWithDot","_checkState","groups","users","_differentOwner","_differentGroup","_stateOwnerUser","_stateOwnerGroup","_valueObjectAccessControl","_valueStateAccessControl","_ids","k","acl","owner","ownerGroup","defaultNewAcl","isNaN","userItem","groupItem","_ref3","_ref4","CustomModal","_maskState","_maskObject","newAcl","clone","renderValue","getInvertedColor","overflowY","image","fontFamily","download","textDecoration","ObjectViewFileDialog","audioRef","binary","fileName","getBinaryState","ext","toLowerCase","detectedMimeType","detectMimeType","mime","audio","btoa","play","PlayIcon","href","DownloadIcon","formControlLabel","usedInAlias","addNewAlias","ObjectAliasEditor","aliasIDs","usedInAliases","showAddNewAlias","newAliasId","newAliasName","getText","newAliasRead","newAliasWrite","newAliasUnit","newAliasDesc","newAliasType","newAliasUseFormula","newAliasReadFormula","newAliasWriteFormula","newAliasColor","newAliasIcon","renderAddNewAlias","onRedirect","AddLink","Close","MenuList","aliasID","ListItemIcon","IconLink","ListItemText","IconDeleteAll","IconDeleteOne","buttonAll","buttonText","Objects","filters","wordCache","translate","word","arg1","arg2","filtersStr","toast","deleteObjectShow","withChildren","delObjects","delObject","renderToast","Snackbar","anchorOrigin","vertical","horizontal","autoHideDuration","message","renderDeleteDialog","hasChildren","exists","ObjectBrowser","objectsWorker","prefix","defaultFilters","statesOnly","objectCustomDialog","objectBrowserValue","objectBrowserEditObject","objectBrowserEditRole","objectBrowserViewFile","objectBrowserAliasEditor","router","enableStateValueEdit","onObjectDelete","objectExists","onFilterChanged","filterConfig","onSelect","objectEditBoolean","objectAddBoolean","objectStatesView","objectImportExport","objectEditOfAccessControl","modalNewObject","context","ObjectAddNewObject","modalNewObj","modalEditOfAccessControl","objData","ObjectEditOfAccessControl","aclTooltip","modalEditOfAccess","modalEditOfAccessObjData"],"sourceRoot":""}