{"version":3,"file":"static/js/application.async.landing~86378a44.91217e41.chunk.js","mappings":"swCAAaA,EAAY,kmB,wBCEZC,EAAgB,WAAH,OACxBC,EAAAA,EAAAA,MAAA,OAAKC,MAAM,6BAA6BC,MAAM,KAAKC,OAAO,KAAKC,QAAQ,YAAYC,KAAK,OAAMC,SAAA,EAC5FC,EAAAA,EAAAA,KAAA,QAAMC,EAAE,4hFAA4hFH,KAAK,qCACziFE,EAAAA,EAAAA,KAAA,QAAAD,UACEN,EAAAA,EAAAA,MAAA,kBAAgBS,GAAG,4BAA4BC,GAAG,UAAUC,GAAG,UAAUC,GAAG,UAAUC,GAAG,UAAUC,cAAc,iBAAgBR,SAAA,EAC/HC,EAAAA,EAAAA,KAAA,QAAMQ,UAAU,aAChBR,EAAAA,EAAAA,KAAA,QAAMS,OAAO,WAAWD,UAAU,aAClCR,EAAAA,EAAAA,KAAA,QAAMS,OAAO,IAAID,UAAU,mBAG3B,ECVKE,EAAuB,WAAH,OAC/BV,EAAAA,EAAAA,KAAA,OAAKL,MAAM,KAAKC,OAAO,KAAKC,QAAQ,YAAYC,KAAK,eAAeJ,MAAM,6BAA4BK,UACpGC,EAAAA,EAAAA,KAAA,KAAGE,GAAG,UAASH,UACbC,EAAAA,EAAAA,KAAA,QAAME,GAAG,QAAQD,EAAE,uhHAEjB,ECLKU,EAAsB,WAAH,OAC9BX,EAAAA,EAAAA,KAAA,OAAKL,MAAM,KAAKC,OAAO,KAAKC,QAAQ,YAAYC,KAAK,OAAOJ,MAAM,6BAA4BK,UAC5FC,EAAAA,EAAAA,KAAA,KAAGE,GAAG,OAAMH,UACVC,EAAAA,EAAAA,KAAA,QAAME,GAAG,QAAQD,EAAE,mrFAAmrFH,KAAK,eAEzsF,ECLKc,EAAqB,WAAH,OAC7BnB,EAAAA,EAAAA,MAAA,OAAKC,MAAM,6BAA6BC,MAAM,KAAKC,OAAO,KAAKC,QAAQ,YAAYC,KAAK,OAAMC,SAAA,EAC5FC,EAAAA,EAAAA,KAAA,QAAMC,EAAE,43CAA43CH,KAAK,aACz4CE,EAAAA,EAAAA,KAAA,QAAMC,EAAE,svCAAsvCH,KAAK,aACnwCE,EAAAA,EAAAA,KAAA,QAAMC,EAAE,sdAAsdH,KAAK,aACneE,EAAAA,EAAAA,KAAA,QAAMC,EAAE,iOAAiOH,KAAK,aAC9OE,EAAAA,EAAAA,KAAA,QAAMC,EAAE,8KAA8KH,KAAK,cACvL,E,gDCNKe,EAAoB,SAAHC,GAAA,IAAMC,EAAID,EAAJC,KAAI,OAAQf,EAAAA,EAAAA,KAAA,OAC9CgB,IAAKC,EACLC,IAAKH,EAAKI,UAAUC,uBACpBzB,MAAM,KACNC,OAAO,MACP,E,8CCLWyB,EAAc,SAAHP,GAAA,IAAMC,EAAID,EAAJC,KAAI,OAAQf,EAAAA,EAAAA,KAAA,OACxCgB,IAAKM,EACLJ,IAAKH,EAAKI,UAAUC,WACpBG,UAAU,gBACV,ECSWC,EAAoB,CAC/BC,cAAAA,EACAC,cAAAA,EACAC,aAAAA,EACAC,cAAAA,EACAC,WAAAA,EACAC,eAAAA,EACAC,eAAAA,EACAC,4BAAAA,EACAC,oBAAAA,GAYWC,EAAgBC,EAChBC,EAAkBC,EAGlBC,EAAiB,CAC5BC,kBAAAA,EACAC,oBAAAA,EACAC,kBAAAA,E,wsBCrCWC,EAAa,CACxBC,IAAK,gBACLC,SAAU,gCACVC,eAAgB,kBAChBC,KAAM,mBAGKC,EAAe,CAC1BC,OAAQ,SACRC,SAAU,YAGCC,EAAa,CACxBC,UAAW,aACXC,cAAe,mBACfC,WAAY,cACZC,cAAe,kBACfC,YAAa,eACbC,eAAgB,mBAChBC,SAAU,YAEVC,WAAY,eACZC,YAAa,gBAEbC,SAAU,YACVC,UAAW,aACXC,eAAgB,mBAChBC,gBAAiB,oBACjBC,eAAgB,mBAChBC,gBAAiB,oBACjBC,sBAAuB,2BACvBC,uBAAwB,4BAExBC,OAAQ,UACRC,QAAS,WACTC,aAAc,iBACdC,cAAe,kBACfC,aAAc,iBACdC,cAAe,kBACfC,oBAAqB,yBACrBC,qBAAsB,0BAEtBC,cAAe,iBACfC,eAAgB,kBAChBC,oBAAqB,wBACrBC,qBAAsB,yBACtBC,oBAAqB,wBACrBC,qBAAsB,yBACtBC,2BAA4B,gCAC5BC,4BAA6B,iCAE7BC,SAAU,YACVC,UAAW,aACXC,eAAgB,mBAChBC,gBAAiB,oBACjBC,eAAgB,mBAChBC,gBAAiB,oBACjBC,sBAAuB,2BACvBC,uBAAwB,6BAGbC,EAAoB,CAC/BC,IAAK,EACLC,IAAK,IACLC,UAAW,KAGAC,EAAgB,CAC3BC,QAAS,UACTC,MAAO,QACPC,UAAW,cACXC,WAAY,eACZC,OAAQ,gBAGGC,EAAmB,CAC9BC,OAAQ,SACRC,SAAU,YAGCC,EAAkB,CAC7BC,aAAc,eACdC,YAAa,cACbC,QAAS,kBACTC,aAAc,eACdL,SAAU,mBACVD,OAAQ,iBACRO,0BAA2B,4BAC3BC,qBAAsB,wBAGXC,EAAyB,CACpCC,QAAS,UACTC,aAAc,gBAGHC,EAAgB,CAC3BC,MAAO,QACPC,QAAS,WAGEC,EAAoB,GAEpBC,EAAW,CACtB,IACA,KAGWC,EAAmB,CAC9B,IACA,KAGWC,EAAc,CACzBC,kBAAmB,oBACnBC,oCAAqC,sCACrCC,wBAAyB,0BACzBC,yBAA0B,2BAC1BC,sBAAuB,wBACvBC,aAAc,eACdC,kBAAmB,oBACnBC,iBAAkB,oBAQPC,GAAcC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACxBzF,EAAWC,IAAM,gBACjBD,EAAWE,SAAW,QACtBF,EAAWG,eAAiB,kBAGlBuF,EAAiB,OAEjBC,EAAkB,CAC7BC,MAAO,QACPC,MAAO,QACPC,IAAK,MACLC,OAAQ,UAGGC,GAAcP,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACxBE,EAAgBC,MAAQlH,UACxBiH,EAAgBE,MAAQnH,UAGduH,EAAiB,SAAAC,GAAc,OAAIA,IAAmBR,CAAe,EAErES,EAA2B,CAAC,OAAQ,OAAQ,QAAS,QAErDC,EAAkB,CAC7BL,OAAQ,gBACRM,MAAO,iBAGIC,EAAyB,EAYzBC,EAAc,CACzBC,WAAY,aACZC,MAAO,QACPC,OAAQ,SACRC,OAAQ,UAGGC,EAAoB,CAC/BC,YAAa,cACbC,SAAU,WACVC,sBAAuB,wBACvBC,oBAAqB,sBACrBC,kBAAmB,oBACnBC,qBAAsB,uBACtBC,sBAAuB,wBACvBC,oBAAqB,sBACrBC,oBAAqB,sBACrBC,cAAe,gBACfC,iBAAkB,mBAClBC,2BAA4B,6BAC5BC,qBAAsB,uBACtBC,qBAAsB,wBAiBXC,EAAoB,CAC/BC,MAAO,QACPC,SAAU,WACVC,aAAc,eACdC,mBAAoB,qBACpBC,WAAY,aACZC,gBAAiB,mBAGNC,EAA4B,CACvCC,IAAK,6BAGMC,EAAqB,CAChCD,IAAK,e,gGCpOME,EAAa,CACxBC,WAAY,aACZC,UAAW,YACXC,UAAW,YACXC,cAAe,gBACfC,UAAW,YACXC,aAAc,eACdC,YAAa,eAGTC,EAAmB,CACvBC,KAAMT,EAAWC,WACjBS,MAAOrK,8BAGHsK,EAAkB,CACtBF,KAAMT,EAAWE,UACjBQ,MAAOrK,cAGHuK,EAAkB,CACtBH,KAAMT,EAAWK,UACjBK,MAAOrK,cAGHwK,EAAkB,CACtBJ,KAAMT,EAAWG,UACjBO,MAAOrK,cAGHyK,EAAqB,CACzBL,KAAMT,EAAWM,aACjBI,MAAOrK,iBAGH0K,EAAoB,CACxBN,KAAMT,EAAWO,YACjBG,MAAOrK,UAIH2K,EAAsB,CAC1BP,KAAMT,EAAWI,cACjBM,MAAOrK,kBAII4K,GAAmB7D,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAC7B4C,EAAWC,WAAaO,GACxBR,EAAWE,UAAYS,GACvBX,EAAWK,UAAYO,GACvBZ,EAAWG,UAAYU,GACvBb,EAAWM,aAAeQ,GAC1Bd,EAAWO,YAAcQ,GACzBf,EAAWI,cAAgBY,E,yECrDjBE,EAAsB,SAAAlL,GAAI,MAAI,CACzC,CACEmL,IAAK7D,EAAAA,GAAgBG,IACrB2D,KAAMpL,EAAKI,UAAUC,OACrBqK,MAAO1K,EAAKI,UAAUC,QAExB,CACE8K,IAAK7D,EAAAA,GAAgBC,MACrB6D,KAAMpL,EAAKI,UAAUC,SACrBqK,MAAO1K,EAAKI,UAAUC,UAExB,CACE8K,IAAK7D,EAAAA,GAAgBE,MACrB4D,KAAMpL,EAAKI,UAAUC,SACrBqK,MAAO1K,EAAKI,UAAUC,UAExB,C,sgDChBIgL,EAAW,EAGV,SAASC,EAAmBC,EAAWvL,GAC5C,GAAIwL,IAAAA,OAASD,GAAY,CACvB,IAAME,EAAM,IAAIC,KAEVC,EAAYC,KAAKC,OAAOJ,EAAMF,GAAa,KACjD,GAAII,EAAY,EAEd,OAAO,KACF,GAAkB,IAAdA,EACT,OAAO3L,EAAKI,UAAUC,YACjB,GAAkB,IAAdsL,EACT,OAAO3L,EAAKI,UAAUC,gBACjB,GAAIsL,EAAY,GACrB,OAAO3L,EAAKI,UAAUC,0BAAiC,CAAEyL,QAASH,IAGpE,IAAMI,EAAYH,KAAKC,MAAMF,EAAY,IACzC,GAAkB,IAAdI,EACF,OAAO/L,EAAKI,UAAUC,gBACjB,GAAI0L,EAAY,GACrB,OAAO/L,EAAKI,UAAUC,0BAAiC,CAAE2L,QAASD,IAGpE,IAAME,EAAaL,KAAKC,MAAME,EAAY,IAC1C,GAAmB,IAAfE,EACF,OAAOjM,EAAKI,UAAUC,cACjB,GAAI4L,EAAa,GACtB,OAAOjM,EAAKI,UAAUC,sBAA6B,CAAE6L,MAAOD,IAG9D,IAAME,EAAYP,KAAKC,MAAMI,EAAa,IAC1C,GAAkB,IAAdE,EACF,OAAOnM,EAAKI,UAAUC,aACjB,GAAI8L,GAAad,EACtB,OAAOrL,EAAKI,UAAUC,oBAA2B,CAAE+L,KAAMD,GAE7D,CAGA,OAAO,IACT,CC7CO,I,EAAME,EAAsB,SAACC,GAClC,IAAMJ,EAAQN,KAAKW,MAAMD,EAAe,MAClCN,EAAUJ,KAAKW,MAAOD,EAAe,KAAW,KAChDR,EAAUF,KAAKW,MAAOD,EAAe,IAAS,KAC9CE,EAAU,GAMhB,OALIN,EAAQ,GACVM,EAAQC,KAAK,GAADC,OAAIR,EAAQ,GAAK,IAAM,IAAEQ,OAAGR,IAE1CM,EAAQC,KAAK,GAADC,OAAIV,EAAU,GAAK,IAAM,IAAEU,OAAGV,IAC1CQ,EAAQC,KAAK,GAADC,OAAIZ,EAAU,GAAK,IAAM,IAAEY,OAAGZ,IACnCU,EAAQG,KAAK,IACtB,E,WCPaC,EAA4B,SAAC5M,EAAM6M,GAE9C,IAAMC,EAAW9M,EAAK+M,SAAS,CAAEF,SAAAA,IAC3BG,EAAQ,IAAIC,EAAAA,UAAUH,EAASI,KAAMJ,EAASK,MAAOL,EAASM,KAC9DC,EAAWL,EAAMM,KAAK,CAAElB,MAAO,IAC/BmB,EAAYP,EAAMM,KAAK,CAAElB,MAAO,KACtC,MAAO,CACL,CAAEjB,IAAKlG,EAAAA,GAAcE,MAAOiG,KAAMpL,EAAKI,UAAUC,SAAgBmN,MAAO,CAAEC,MAAOT,EAAOU,IAAKV,IAC7F,CAAE7B,IAAKlG,EAAAA,GAAcG,UAAWgG,KAAMpL,EAAKI,UAAUC,eAAsBmN,MAAO,CAAEC,MAAOJ,EAAUK,IAAKV,IAC1G,CAAE7B,IAAKlG,EAAAA,GAAcI,WAAY+F,KAAMpL,EAAKI,UAAUC,gBAAuBmN,MAAO,CAAEC,MAAOF,EAAWG,IAAKV,IAC7G,CAAE7B,IAAKlG,EAAAA,GAAcK,OAAQ8F,KAAMpL,EAAKI,UAAUC,gBAAuBmN,MAAO,MAEpF,ECdaG,EAAyB,SAAA3N,GAAI,MAAI,CAC5C,CACEmL,IAAK5F,EAAAA,GAAiBC,OACtB4F,KAAMpL,EAAKI,UAAUC,cACrBqK,MAAO1K,EAAKI,UAAUC,6BAExB,CACE8K,IAAK5F,EAAAA,GAAiBE,SACtB2F,KAAMpL,EAAKI,UAAUC,YACrBqK,MAAO1K,EAAKI,UAAUC,2BAExB,E,YCXWuN,EAAoB,SAAA5N,GAAI,MAAI,CACvC,CAAEmL,IAAKhJ,EAAAA,GAAWG,WAAY8I,KAAMpL,EAAKI,UAAUC,gBACnD,CAAE8K,IAAKhJ,EAAAA,GAAWC,UAAWgJ,KAAMpL,EAAKI,UAAUC,gBAAuBwN,KAAM7L,EAAAA,GAAaC,QAC5F,CAAEkJ,IAAKhJ,EAAAA,GAAWE,cAAe+I,KAAMpL,EAAKI,UAAUC,gBAAuBwN,KAAM7L,EAAAA,GAAaE,UAChG,CAAEiJ,IAAKhJ,EAAAA,GAAWK,YAAa4I,KAAMpL,EAAKI,UAAUC,iBACpD,ECLWyN,GDOwBC,EAAA,IAAA3G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA2G,EAClC5L,EAAAA,GAAWI,cAAgB,CAAEyL,OAAQ,eAAgBC,cAAe,QACpE9L,EAAAA,GAAWG,WAAa,CAAE0L,OAAQ,eAAgBC,cAAe,SAEjE9L,EAAAA,GAAWC,UAAY,CAAE4L,OAAQ,OAAQC,cAAe,QACxD9L,EAAAA,GAAWE,cAAgB,CAAE2L,OAAQ,OAAQC,cAAe,SAC5D9L,EAAAA,GAAWK,YAAc,CAAEwL,OAAQ,cAAeC,cAAe,SACjE9L,EAAAA,GAAWM,eAAiB,CAAEuL,OAAQ,cAAeC,cAAe,QAEpE9L,EAAAA,GAAWQ,WAAa,CAAEqL,OAAQ,UAAWC,cAAe,QAC5D9L,EAAAA,GAAWS,YAAc,CAAEoL,OAAQ,UAAWC,cAAe,SAE7D9L,EAAAA,GAAWU,SAAW,CAAEmL,OAAQ,4BAA6BC,cAAe,QAC5E9L,EAAAA,GAAWW,UAAY,CAAEkL,OAAQ,4BAA6BC,cAAe,UAAQ7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA2G,EACrF5L,EAAAA,GAAWY,eAAiB,CAAEiL,OAAQ,+BAAgCC,cAAe,QACrF9L,EAAAA,GAAWa,gBAAkB,CAAEgL,OAAQ,+BAAgCC,cAAe,SACtF9L,EAAAA,GAAWc,eAAiB,CAAE+K,OAAQ,qCAAsCC,cAAe,QAC3F9L,EAAAA,GAAWe,gBAAkB,CAAE8K,OAAQ,qCAAsCC,cAAe,SAC5F9L,EAAAA,GAAWgB,sBAAwB,CAAE6K,OAAQ,+CAAgDC,cAAe,QAC5G9L,EAAAA,GAAWiB,uBAAyB,CAAE4K,OAAQ,+CAAgDC,cAAe,SAE7G9L,EAAAA,GAAWkB,OAAS,CAAE2K,OAAQ,yBAA0BC,cAAe,QACvE9L,EAAAA,GAAWmB,QAAU,CAAE0K,OAAQ,yBAA0BC,cAAe,SACxE9L,EAAAA,GAAWoB,aAAe,CAAEyK,OAAQ,4BAA6BC,cAAe,QAChF9L,EAAAA,GAAWqB,cAAgB,CAAEwK,OAAQ,4BAA6BC,cAAe,UAAQ7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA2G,EACzF5L,EAAAA,GAAWsB,aAAe,CAAEuK,OAAQ,kCAAmCC,cAAe,QACtF9L,EAAAA,GAAWuB,cAAgB,CAAEsK,OAAQ,kCAAmCC,cAAe,SACvF9L,EAAAA,GAAWwB,oBAAsB,CAAEqK,OAAQ,4CAA6CC,cAAe,QACvG9L,EAAAA,GAAWyB,qBAAuB,CAAEoK,OAAQ,4CAA6CC,cAAe,SAExG9L,EAAAA,GAAW0B,cAAgB,CAAEmK,OAAQ,iCAAkCC,cAAe,QACtF9L,EAAAA,GAAW2B,eAAiB,CAAEkK,OAAQ,iCAAkCC,cAAe,SACvF9L,EAAAA,GAAW4B,oBAAsB,CAAEiK,OAAQ,oCAAqCC,cAAe,QAC/F9L,EAAAA,GAAW6B,qBAAuB,CAAEgK,OAAQ,oCAAqCC,cAAe,SAChG9L,EAAAA,GAAW8B,oBAAsB,CAAE+J,OAAQ,0CAA2CC,cAAe,QACrG9L,EAAAA,GAAW+B,qBAAuB,CAAE8J,OAAQ,0CAA2CC,cAAe,UAAQ7G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA2G,EAC9G5L,EAAAA,GAAWgC,2BAA6B,CAAE6J,OAAQ,oDAAqDC,cAAe,QACtH9L,EAAAA,GAAWiC,4BAA8B,CAAE4J,OAAQ,oDAAqDC,cAAe,SAEvH9L,EAAAA,GAAWkC,SAAW,CAAE2J,OAAQ,2BAA4BC,cAAe,QAC3E9L,EAAAA,GAAWmC,UAAY,CAAE0J,OAAQ,2BAA4BC,cAAe,SAC5E9L,EAAAA,GAAWoC,eAAiB,CAAEyJ,OAAQ,8BAA+BC,cAAe,QACpF9L,EAAAA,GAAWqC,gBAAkB,CAAEwJ,OAAQ,8BAA+BC,cAAe,SACrF9L,EAAAA,GAAWsC,eAAiB,CAAEuJ,OAAQ,oCAAqCC,cAAe,QAC1F9L,EAAAA,GAAWuC,gBAAkB,CAAEsJ,OAAQ,oCAAqCC,cAAe,SAC3F9L,EAAAA,GAAWwC,sBAAwB,CAAEqJ,OAAQ,8CAA+CC,cAAe,QAC3G9L,EAAAA,GAAWyC,uBAAyB,CAAEoJ,OAAQ,8CAA+CC,cAAe,S,UCrD1E,SAAAjO,GAAI,MAAI,CAC3C,CACEmL,IAAKzF,EAAAA,GAAgBE,YACrBwF,KAAMpL,EAAKI,UAAUC,WACrBqK,MAAO1K,EAAKI,UAAUC,uCAExB,CACE8K,IAAKzF,EAAAA,GAAgBC,aACrByF,KAAMpL,EAAKI,UAAUC,UACrBqK,MAAO1K,EAAKI,UAAUC,2BAExB,CACE8K,IAAKzF,EAAAA,GAAgBG,QACrBuF,KAAMpL,EAAKI,UAAUC,WACrBqK,MAAO1K,EAAKI,UAAUC,uBAExB,CACE8K,IAAKzF,EAAAA,GAAgBI,aACrBsF,KAAMpL,EAAKI,UAAUC,gBACrBqK,MAAO1K,EAAKI,UAAUC,iBAExB,CACE8K,IAAKzF,EAAAA,GAAgBF,OACrB4F,KAAMpL,EAAKI,UAAUC,YACrBqK,MAAO1K,EAAKI,UAAUC,6BAExB,CACE8K,IAAKzF,EAAAA,GAAgBD,SACrB2F,KAAMpL,EAAKI,UAAUC,YACrBqK,MAAO1K,EAAKI,UAAUC,2BAExB,G,6CCtBI6N,EAAqBC,EAAAA,GAAED,mBAEhBE,EAAqB,WAAH,IAAArO,EAAA,OAAAA,EAAA,IAAAqH,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAArH,EAE5BsO,EAAAA,GAAGzM,IAAI0M,eAAiB,CACvBC,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,oBAEpBgO,EAAAA,GAAGzM,IAAI8M,UAAY,CAClBH,YAAY,EACZC,oBAAqB,QACrBC,kBAAmBpO,eAEpBgO,EAAAA,GAAGzM,IAAI+M,YAAc,CACpBJ,YAAY,EACZC,oBAAqB,QACrBC,kBAAmBpO,iBAEpBgO,EAAAA,GAAGzM,IAAIgN,cAAgB,CACtBL,YAAY,EACZC,oBAAqB,QACrBC,kBAAmBpO,mBAIpBgO,EAAAA,GAAGQ,KAAKH,UAAY,CACnBH,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,aAEpBgO,EAAAA,GAAGQ,KAAKF,YAAc,CACrBJ,YAAY,EACZC,oBAAqB,QACrBC,kBAAmBpO,qBAEpBgO,EAAAA,GAAGQ,KAAKC,qBAAuB,CAC9BP,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,mCAEpBgO,EAAAA,GAAGQ,KAAKE,aAAe,CACtBR,YAAY,EACZC,oBAAqB,UACrBC,kBAAmBpO,sBAEpBgO,EAAAA,GAAGQ,KAAKG,iBAAmB,CAC1BT,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,uBAIpBgO,EAAAA,GAAGtM,KAAKkN,oBAAsB,CAC7BV,YAAY,EACZC,oBAAqB,QACrBC,kBAAmBpO,sBACpB+G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAArH,EACAsO,EAAAA,GAAGtM,KAAKmN,kBAAoB,CAC3BX,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,aAEpBgO,EAAAA,GAAGtM,KAAKoN,kBAAoB,CAC3BZ,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,kCAEpBgO,EAAAA,GAAGtM,KAAKqN,iBAAmB,CAC1Bb,YAAY,EACZC,oBAAqB,QACrBC,kBAAmBpO,mBAEpBgO,EAAAA,GAAGtM,KAAKsN,aAAe,CACtBd,YAAY,EACZC,oBAAqB,QACrBC,kBAAmBpO,eAEpBgO,EAAAA,GAAGtM,KAAKgN,aAAe,CACtBR,YAAY,EACZC,oBAAqB,UACrBC,kBAAmBpO,sBAEpBgO,EAAAA,GAAGtM,KAAKiN,iBAAmB,CAC1BT,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,uBAEpBgO,EAAAA,GAAGtM,KAAK+M,qBAAuB,CAC9BP,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,mCAEpBgO,EAAAA,GAAGtM,KAAKuN,oBAAsB,CAC7Bf,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,4BAEpBgO,EAAAA,GAAGtM,KAAKwN,uBAAyB,CAChChB,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,iBAEpBgO,EAAAA,GAAGtM,KAAKyN,iBAAmB,CAC1BjB,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,kBACpB+G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAArH,EACAsO,EAAAA,GAAGtM,KAAK0N,sBAAwB,CAC/BlB,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,uBAEpBgO,EAAAA,GAAGtM,KAAK2N,cAAgB,CACvBnB,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,aAEpBgO,EAAAA,GAAGtM,KAAK4N,aAAe,CACtBpB,YAAY,EACZC,oBAAqB,QACrBC,kBAAmBpO,0BAIpBgO,EAAAA,GAAGuB,OAAOC,eAAiB,CAC1BtB,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,4BAEpBgO,EAAAA,GAAGuB,OAAOE,WAAa,CACtBvB,YAAY,EACZC,oBAAqB,QACrBC,kBAAmBpO,eAEpBgO,EAAAA,GAAGuB,OAAOG,UAAY,CACrBxB,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,aAEpBgO,EAAAA,GAAGuB,OAAOI,YAAc,CACvBzB,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,iBAEpBgO,EAAAA,GAAGuB,OAAOK,iBAAmB,CAC5B1B,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,uBAEpBgO,EAAAA,GAAGuB,OAAOM,YAAc,CACvB3B,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,iBAEpBgO,EAAAA,GAAGuB,OAAOO,cAAgB,CACzB5B,YAAY,EACZC,oBAAqB,UACrBC,kBAAmBpO,yBACpB+G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAArH,EACAsO,EAAAA,GAAGuB,OAAOD,aAAe,CACxBpB,YAAY,EACZC,oBAAqB,QACrBC,kBAAmBpO,0BAIpBgO,EAAAA,GAAG+B,SAAS1B,UAAY,CACvBH,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,aAEpBgO,EAAAA,GAAG+B,SAAStB,qBAAuB,CAClCP,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,mCAEpBgO,EAAAA,GAAG+B,SAASC,uBAAyB,CACpC9B,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,wCAEpBgO,EAAAA,GAAG+B,SAASE,qBAAuB,CAClC/B,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,mCAEpBgO,EAAAA,GAAG+B,SAASG,kBAAoB,CAC/BhC,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,iBAEpBgO,EAAAA,GAAG+B,SAASI,kBAAoB,CAC/BjC,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,wBAEpBgO,EAAAA,GAAG+B,SAASrB,aAAe,CAC1BR,YAAY,EACZC,oBAAqB,UACrBC,kBAAmBpO,sBAEpBgO,EAAAA,GAAG+B,SAASpB,iBAAmB,CAC9BT,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,uBAEpBgO,EAAAA,GAAG+B,SAASK,sBAAwB,CACnClC,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,wCACpB+G,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAArH,EACAsO,EAAAA,GAAG+B,SAASM,qBAAuB,CAClCnC,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,sCAEpBgO,EAAAA,GAAG+B,SAASzB,YAAc,CACzBJ,YAAY,EACZC,oBAAqB,QACrBC,kBAAmBpO,qBAEpBgO,EAAAA,GAAG+B,SAASO,kBAAoB,CAC/BpC,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,wBAEpBgO,EAAAA,GAAG+B,SAASV,cAAgB,CAC3BnB,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,aAEpBgO,EAAAA,GAAG+B,SAASb,uBAAyB,CACpChB,YAAY,EACZC,oBAAqB,WACrBC,kBAAmBpO,iBAEpBgO,EAAAA,GAAG+B,SAAST,aAAe,CAC1BpB,YAAY,EACZC,oBAAqB,QACrBC,kBAAmBpO,yBACpB,EAmIUuQ,EAAuB,SAACC,EAAQC,EAAgBC,GAC3D,IAAMC,EAAe7C,EAAAA,GAAE8C,gBAAgB,CACrCC,eAAgBL,IAAWlP,EAAAA,GAAWC,IACtCuP,4BAA6BxP,EAAAA,GAAWE,WAAagP,EACrDO,iCAAkCzP,EAAAA,GAAWI,OAAS8O,EACtDC,eAAgBnP,EAAAA,GAAWE,WAAagP,GAAUC,EAClDC,4BAA6BpP,EAAAA,GAAWI,OAAS8O,GAAUE,IAGvDM,EAzI4C,CAClDC,aAAc,CACZC,YAAa,KACbC,mBAAoB,WACpBC,kBAAmB,UACnBhH,KAAM,eACN8D,YAAY,GAEdmD,SAAU,CACRH,YAAa,EACbC,mBAAoB,QACpBC,kBAAmB,UACnBhH,KAAM,WACN8D,YAAY,GAEdoD,SAAU,CACRJ,YAAa,EACbC,mBAAoB,QACpBC,kBAAmB,UACnBhH,KAAM,WACN8D,WAqH6CsC,IAAWlP,EAAAA,GAAWC,KAnHrEgQ,SAAU,CACRL,YAAa,GACbC,mBAAoB,QACpBC,kBAAmB,SACnBhH,KAAM,WACN8D,YAAY,GAEdsD,aAAc,CACZN,YAAa,KACbC,mBAAoB,WACpBC,kBAAmB,UACnBhH,KAAM,eACN8D,YAAY,EACZuD,eAAgB,CACdC,gBAAiB,CACftD,kBAAmBP,EAAmB6D,gBAAgBtD,qBAI5DuD,aAAc,CACZT,YAAa,KACb9G,KAAM,eACN+G,mBAAoB,WACpBC,kBAAmB,UACnBlD,YAAY,GAEd0D,aAAc,CACZV,YAAa,KACb9G,KAAM,eACN+G,mBAAoB,WACpBC,kBAAmB,UACnBlD,YAAY,GAEd2D,aAAc,CACZX,YAAa,IACbC,mBAAoB,UACpBC,kBAAmB,UACnBhH,KAAM,eACN8D,YAAY,GAEd4D,aAAc,CACZZ,YAAa,KACb9G,KAAM,eACN+G,mBAAoB,WACpBC,kBAAmB,UACnBlD,YAAY,GAEd6D,aAAc,CACZb,YAAa,KACbC,mBAAoB,WACpBC,kBAAmB,UACnBhH,KAAM,eACN8D,YAAY,EACZuD,eAAgB,CACdO,iBAAkB,CAChB5D,kBAAmBP,EAAmBmE,iBAAiB5D,mBAEzD6D,iBAAkB,CAChB7D,kBAAmBP,EAAmBoE,iBAAiB7D,qBAI7D8D,YAAa,CACXhB,YAAa,IACbC,mBAAoB,WACpBC,kBAAmB,SACnBhH,KAAM,cACN8D,YAAY,GAEdiE,aAAc,CACZjB,YAAa,KACbC,mBAAoB,WACpBC,kBAAmB,UACnBhH,KAAM,eACN8D,YAAY,GAEdkE,aAAc,CACZlB,YAAa,EACbC,mBAAoB,QACpBC,kBAAmB,UACnBhH,KAAM,eACN8D,YAAY,GAEdmE,aAAc,CACZnB,YAAa,KACbC,mBAAoB,WACpBC,kBAAmB,UACnBhH,KAAM,eACN8D,YAAY,GAEdoE,aAAc,CACZpB,YAAa,KACbC,mBAAoB,WACpBC,kBAAmB,UACnBhH,KAAM,eACN8D,YAAY,GAEdqE,aAAc,CACZrB,YAAa,IACbC,mBAAoB,UACpBC,kBAAmB,UACnBhH,KAAM,eACN8D,YAAY,IAeRsE,EAA6BrH,IAAAA,KAAOwF,EAAc,iBASxD,OAP6BxF,IAAAA,UAAYqH,GAA4B,SAAAC,GAAI,OAAAC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACpE1B,EAAqByB,EAAKrI,OAAK,IAClCuI,QAASF,EAAKE,QACdvE,kBAAmBqE,EAAKrE,kBACxBwE,cAAc,GAADvG,OAAKvF,EAAAA,GAAe0J,IAAOnE,OAAG2E,EAAqByB,EAAKrI,MAAMgH,oBAAmB,GAIlG,EAEayB,EAAiB,SAACC,EAAkBnT,GAC/C,OAAImT,EACK,CACLC,cAAepT,EAAKI,UAAUC,gBAC9BgT,aAAcrT,EAAKI,UAAUC,8CAC7BiT,YAAatT,EAAKI,UAAUC,wBAC5BkT,aAAcvT,EAAKI,UAAUC,iBAC7BmT,IAAK,sBACLC,SAAU,uBAIP,CACLL,cAAepT,EAAKI,UAAUC,kBAC9BgT,aAAcrT,EAAKI,UAAUC,iBAC7BiT,YAAatT,EAAKI,UAAUC,WAC5BkT,aAAcvT,EAAKI,UAAUC,iBAC7BmT,IAAK,sBACLC,SAAU,sBACVC,aAAc1T,EAAKI,UAAUC,YAEjC,EAEasT,EAAoB,SAACX,EAASY,GACzC,GAAIA,GAAgBZ,EAAS,CAC3B,IAAQa,EAA8BD,EAA9BC,YAAaC,EAAiBF,EAAjBE,aACrB,GAAID,EAAcb,EAAQ,IAAMc,EAAed,EAAQ,GACrD,OAAO,CAEX,CAEA,OAAO,CACT,EAEae,EAAwB,SACnClD,EACA+C,GAII,IAHJI,EAAYC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GAIRG,EAAYxD,EAAqBC,EAHvBoD,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GACaA,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,IAa3B,OATID,IACFI,EAAY5I,IAAAA,OAAS4I,GAAW,SAAAC,GAAM,OAAIA,EAAO9F,UAAU,KAGpC/C,IAAAA,OAAS4I,GAAW,SAACtB,GAC5C,IAAQE,EAAYF,EAAZE,QACR,OAAQW,EAAkBX,EAASY,EACrC,GAGF,EAEaU,EAA2B,SAACV,GAAqG,IAAvFI,EAAYC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GAAUnD,EAAcmD,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GAAUlD,EAA2BkD,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GACxHM,EAAkBR,EAAsBpS,EAAAA,GAAWC,IAAKgS,EAAcI,EAAclD,EAAgBC,GACpGyD,EAAuBT,EAAsBpS,EAAAA,GAAWE,SAAU+R,EAAcI,EAAclD,EAAgBC,GAC9G0D,EAAwBV,EAAsBpS,EAAAA,GAAWG,eAAgB8R,EAAcI,EAAclD,EAAgBC,GACrH2D,EAAmBX,EAAsBpS,EAAAA,GAAWgT,KAAMf,EAAcI,EAAclD,EAAgBC,GAE5G,OAAOvF,IAAAA,KAAO,GAADkB,QAAAkI,EAAAA,EAAAA,GACPJ,IAAoBI,EAAAA,EAAAA,GAAKH,IAAqBG,EAAAA,EAAAA,GAAKL,IAAeK,EAAAA,EAAAA,GAAKF,KAC3E,SAAA5B,GAAI,OAAIA,EAAKrI,IAAI,GAErB,EAEaoK,EAAwB,SAAChE,GACpC,IAAMG,EAAe7C,EAAAA,GAAE8C,gBAAgB,CACrCC,eAAgBL,IAAWlP,EAAAA,GAAWC,IACtCuP,4BAA6BxP,EAAAA,GAAWE,WAAagP,EACrDC,eAAgBD,IAAWlP,EAAAA,GAAWE,SACtCuP,iCAAkCP,IAAWlP,EAAAA,GAAWI,OAQ1D,OAL2ByJ,IAAAA,MAAQwF,GAChC8D,QAAO,SAAAC,GAAC,OAAIpT,EAAAA,GAAWE,WAAagP,GAAqB,kBAAXkE,EAAEtK,IAAwB,IACxEuK,KAAI,SAAAC,GAAuB,MAAQ,CAAE1D,YAAnB0D,EAAX1D,YAA2C2D,UAAvBD,EAAPjC,QAAiD,GAAI,IACzEmC,OAGL,E,YC/XaC,EAnFG,CACd,CACEC,WAAYhV,wDACZiV,S,4CAEF,CACED,WAAYhV,iDACZiV,S,4CAEF,CACED,WAAYhV,mEACZiV,S,4CAEF,CACED,WAAYhV,iEACZiV,S,4CAEF,CACED,WAAYhV,4DACZiV,S,4CAEF,CACED,WAAYhV,iDACZiV,S,4CAEF,CACED,WAAYhV,gDACZiV,S,4CAEF,CACED,WAAYhV,kDACZiV,S,4CAEF,CACED,WAAYhV,mEACZiV,S,4CAEF,CACED,WAAYhV,0CACZiV,S,4CAEF,CACED,WAAYhV,8EACZiV,S,6CAEF,CACED,WAAYhV,wCACZiV,S,6CAEF,CACED,WAAYhV,oDACZiV,S,6CAEF,CACED,WAAYhV,sDACZiV,S,6CAEF,CACED,WAAYhV,kDACZiV,S,6CAEF,CACED,WAAYhV,6CACZiV,S,6CAEF,CACED,WAAYhV,6CACZiV,S,6CAEF,CACED,WAAYhV,8HACZiV,S,6CAEF,CACED,WAAYhV,6CACZiV,S,6CAEF,CACED,WAAYhV,8FACZiV,S,8CClGSC,EAAmB,SAAHxV,GAGtB,IAFLyV,EAAMzV,EAANyV,OAAMC,EAAA1V,EACN2V,QAEAT,QAFO,IAAAQ,EAAG,CAAC,EAACA,IAKG,CAAC,EAFdE,EAAkBV,EAAlBU,mBACAC,EAAYX,EAAZW,aAGF,GAAIJ,KACAhK,IAAAA,QAAUmK,KAAwBnK,IAAAA,QAAUoK,IAC9C,CACA,IAAIC,EAAgBL,EA8BpB,OA5BKhK,IAAAA,QAAUmK,KACbE,EAAgBA,EAAcb,KAAI,SAACc,GACjC,IAAMC,EAAaJ,EAAmBG,EAAM3W,IAC5C,OAAI4W,GACFhD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACK+C,GAAK,IACRE,UAAWD,EAAWE,aAInBH,CACT,KAGGtK,IAAAA,QAAUoK,KACbC,EAAgBA,EAAcb,KAAI,SAACc,GACjC,IAAMI,EAAaN,EAAaE,EAAM3W,IACtC,OAAI+W,GAAcA,EAAWC,SAAWL,EAAMK,QAC5CpD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACK+C,GACAI,GAIAJ,CACT,KAGKD,CACT,CAEA,OAAOL,CACT,E,oCC3CaY,EAAiB,SAACC,GAC7B,IAAAC,GAAoDC,EAAAA,EAAAA,WAAS,GAAMC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAA5DI,EAAkBF,EAAA,GAAEG,EAAqBH,EAAA,IAEhDI,EAAAA,EAAAA,YAAU,WACR,IAAKF,EAAoB,CACvB,IAAMG,GAAYC,EAAAA,EAAAA,QAAOT,GAAY,SAACU,EAASC,GAAU,OAAAjE,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACpDgE,GAAO,IAAA3P,EAAAA,EAAAA,GAAA,GACT4P,GAAa,GAAI,GAChB,CAAC,IAELC,EAAAA,EAAAA,eAAcJ,GACdF,GAAsB,EACxB,CACF,GAAG,CAACD,EAAoBC,EAAuBN,GACjD,C,2aCbMa,EACa,EAGNC,EACX,SAAAC,GAAK,OAAIA,EAAMjB,SAAWjO,EAAAA,GAAYG,QAAU+O,EAAMjB,SAAWjO,EAAAA,GAAYI,MAAO,EAEhF+O,EAAyB,SAACC,EAAKnY,GACnC,IAAMgW,EAAQoC,aAAaC,QAAQ,mBAAD9K,OAAoB4K,IACtD,IAAKnC,EACH,OAAO,KAGT,IAAIsC,EAAS,KAEb,IACEA,EAASC,KAAKC,MAAMxC,EACtB,CAAE,MAAOyC,GACP,OAAO,IACT,CAEA,IAAMC,EAAYrM,IAAAA,KAAOiM,EAAOK,MAAM,SAAAA,GAAI,OAAIA,EAAK3Y,KAAOA,CAAE,IAE5D,OAAO0Y,GAAaA,EAAUE,GAChC,EAEaC,EAAsB,SAACC,GAClC,GAAIA,GAAWA,EAAQC,oBAAsBD,EAAQC,mBAAmBhE,OAAS,EAAG,CAElF,IAAMiE,EAAoB3M,IAAAA,KAAOyM,EAAQC,oBAAoB,SAAApF,GAAI,OAAIA,EAAKsF,OAASlB,CAAkC,IACrH,YAA6B/C,IAAtBgE,GAA4D,OAAzBA,EAAkBE,SAAwClE,IAAzBgE,EAAkBE,EAC/F,CAEA,OAAO,CACT,EAEaC,EAAmB,SAAHvY,GAWtB,IAVLC,EAAID,EAAJC,KAAIuY,EAAAxY,EACJyY,SAAAA,OAAQ,IAAAD,EAAG,GAAEA,EAAAE,EAAA1Y,EACb2Y,cAAAA,OAAa,IAAAD,EAAGjN,IAAAA,KAAMiN,EAAAE,EAAA5Y,EACtB6Y,cAAAA,OAAa,IAAAD,EAAGnN,IAAAA,KAAMmN,EAAAE,EAAA9Y,EACtB+Y,aAAAA,OAAY,IAAAD,EAAGrN,IAAAA,KAAMqN,EAAAE,EAAAhZ,EACrBiZ,cAAAA,OAAa,IAAAD,EAAGvN,IAAAA,KAAMuN,EAAAE,EAAAlZ,EACtBmZ,eAAAA,OAAc,IAAAD,EAAGzN,IAAAA,KAAMyN,EAAAE,EAAApZ,EACvBqZ,YAAAA,OAAW,IAAAD,GAAQA,EAAAE,EAAAtZ,EACnBuZ,YAAAA,OAAW,IAAAD,GAAQA,EAAAE,EAAAxZ,EACnByZ,0BAAAA,OAAyB,IAAAD,GAAQA,EAE7BE,EAAoBzZ,EAAKI,UAAUC,oCACnCqZ,EAAqB1Z,EAAKI,UAAUC,gDACpCsZ,EAAe3Z,EAAKI,UAAUC,oBAC9BuZ,EAAoB5Z,EAAKI,UAAUC,8BACnCwZ,EAAc7Z,EAAKI,UAAUC,UAC7ByZ,EAAoB9Z,EAAKI,UAAUC,iBACnC+Y,GACFQ,EAAoB5Z,EAAKI,UAAUC,8BACnCoZ,EAAoBzZ,EAAKI,UAAUC,oCACnCqZ,EAAqB1Z,EAAKI,UAAUC,gDACpCyZ,EAAoB9Z,EAAKI,UAAUC,6BAC1BiZ,IACTO,EAAc7Z,EAAKI,UAAUC,UAC7BuZ,EAAoB5Z,EAAKI,UAAUC,mCACnCoZ,EAAoBzZ,EAAKI,UAAUC,oCACnCqZ,EAAqB1Z,EAAKI,UAAUC,0BACpCsZ,EAAe3Z,EAAKI,UAAUC,gBAC9ByZ,EAAoB9Z,EAAKI,UAAUC,6BAGrC,IAAI0Z,EAAW,CACb,CACErP,MAAOmP,EACPvG,YAAasG,EACbI,MAAOvZ,EAAAA,GAAkBC,cACzBuZ,QAASvB,EACTvN,IAAK,UAEP,CACET,MAAO1K,EAAKI,UAAUC,UACtBiT,YAAamG,EACbO,MAAOvZ,EAAAA,GAAkBE,cACzBsZ,QAASrB,EACTzN,IAAK,UAEP,CACET,MAAO1K,EAAKI,UAAUC,oBACtBiT,YAAatT,EAAKI,UAAUC,kCAC5B2Z,MAAOvZ,EAAAA,GAAkBG,aACzBqZ,QAASnB,EACT3N,IAAK,SAEP,CACET,MAAOiP,EACPrG,YAAaoG,EACbM,MAAOvZ,EAAAA,GAAkBM,eACzBkZ,QAASf,EACT/N,IAAK,YAkBT,OAdIqO,IACFO,EAAQ,GAAArN,QAAAkI,EAAAA,EAAAA,GACHmF,GAAQ,CACX,CACErP,MAAO1K,EAAKI,UAAUC,6BACtBiT,YAAawG,EACbE,MAAOvZ,EAAAA,GAAkBI,cACzBoZ,QAASjB,EACT7N,IAAK,aAMNqN,EAAStE,OAGP6F,EAASG,QAAO,SAAAC,GAAI,OAAI3B,EAAS4B,SAASD,EAAKhP,IAAI,IAFjD4O,CAGX,EAEaM,EAAsB,SAAHpF,GAQzB,IAPLjV,EAAIiV,EAAJjV,KAAIsa,EAAArF,EACJuD,SAAAA,OAAQ,IAAA8B,EAAG,GAAEA,EAAAC,EAAAtF,EACb2D,cAAAA,OAAa,IAAA2B,EAAG/O,IAAAA,KAAM+O,EAAAC,EAAAvF,EACtB6D,aAAAA,OAAY,IAAA0B,EAAGhP,IAAAA,KAAMgP,EAAAC,EAAAxF,EACrBiE,eAAAA,OAAc,IAAAuB,EAAGjP,IAAAA,KAAMiP,EAAAC,EAAAzF,EACvB+D,cAAAA,OAAa,IAAA0B,EAAGlP,IAAAA,KAAMkP,EAAAC,EAAA1F,EACtBuE,0BAAAA,OAAyB,IAAAmB,GAAQA,EAE7BZ,EAAW,CACb,CACErP,MAAO1K,EAAKI,UAAUC,UACtBiT,YAAatT,EAAKI,UAAUC,oCAC5B2Z,MAAOvZ,EAAAA,GAAkBE,cACzBsZ,QAASrB,EACTzN,IAAK,UAEP,CACET,MAAO1K,EAAKI,UAAUC,oBACtBiT,YAAatT,EAAKI,UAAUC,qDAC5B2Z,MAAOvZ,EAAAA,GAAkBM,eACzBkZ,QAASf,EACT/N,IAAK,WAEP,CACET,MAAO1K,EAAKI,UAAUC,oBACtBiT,YAAatT,EAAKI,UAAUC,kCAC5B2Z,MAAOvZ,EAAAA,GAAkBG,aACzBqZ,QAASnB,EACT3N,IAAK,UAiBT,OAbIqO,IACFO,EAAQ,GAAArN,QAAAkI,EAAAA,EAAAA,GACHmF,GAAQ,CACX,CACErP,MAAO1K,EAAKI,UAAUC,6BACtBiT,YAAatT,EAAKI,UAAUC,4BAC5B2Z,MAAOvZ,EAAAA,GAAkBI,cACzBoZ,QAASjB,EACT7N,IAAK,aAKNqN,EAAStE,OAGP6F,EAASG,QAAO,SAAAC,GAAI,OAAI3B,EAAS4B,SAASD,EAAKhP,IAAI,IAFjD4O,CAGX,EAEaa,EAA+B,SAACtD,EAAKuD,GAChD,IAAMC,EAAazD,EAAuBC,EAAK,IAE/C,OAAIwD,IAIJD,EAAOE,SAAS,mCAAoC,CAAEzD,IAAAA,IAC/C,IACT,EAEa0D,EAA4B,SAAC1D,EAAKuD,GAC7C,IAAMI,EAAe5D,EAAuBC,EAAK,IAEjD,OAAI2D,IAGJJ,EAAOE,SAAS,+BAAgC,CAAEzD,IAAAA,IAC3C,IACT,EAEa4D,EAA+B,SAAC5D,EAAKuD,GAChD,IAAMC,EAAazD,EAAuBC,EAAK,IAE/C,OAAIwD,IAIJD,EAAOE,SAAS,mCAAoC,CAAEzD,IAAAA,IAC/C,IACT,EAEa6D,EAAW,SAAChG,GAEvB,OADY,yBACAiG,KAAKjG,EACnB,EAEakG,EAAiB,SAAHC,GAAqE,IAADC,EAAAD,EAA9DE,OAAAA,OAAM,IAAAD,EAAG,GAAEA,EAAAE,EAAAH,EAAEI,kBAAAA,OAAiB,IAAAD,EAAG,CAAC,EAACA,EAAAE,EAAAL,EAAEM,cAAAA,OAAa,IAAAD,EAAG,GAAEA,EAClFE,EAAQC,EAAAA,MAAkBN,GAM9B,OALAK,EAAQrQ,IAAAA,KAAOqQ,GAAO,SAAC1G,EAAOhK,GAAG,OAAKK,IAAAA,SAAWA,IAAAA,OAASlC,EAAAA,IAAoB6B,IAAQK,IAAAA,SAAWoQ,EAAezQ,EAAI,IACpH0Q,GAAK9I,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACA8I,GACAH,GAEC,IAANhP,OAAWoP,EAAAA,UAAsBD,GACnC,EAEaE,EAAc,SAACC,EAA2BC,EAAwBC,EAAiBlc,EAAMmc,GAChGH,IAA8BC,EAChCE,IACSF,EACTC,EAAgBE,YAAYpc,EAAKI,UAAUC,iDAE3C6b,EAAgBE,YAAYpc,EAAKI,UAAUC,2DAE/C,EAEMgc,EAAuB,SAACC,EAAYC,GACxC,GAAID,GAAcC,EAAY,CAC5B,IAAMC,EAAe,iBAAA9P,OAAoB6P,GACnCE,EAAsB,oBAAA/P,OAAuB6P,GAInD,MAAO,CACLG,aAJmBJ,EAAWE,GAK9BG,oBAJ0BL,EAAWG,GAMzC,CAEA,MAAO,CAAC,CACV,EAEaG,EAAqB,SAACN,EAAYC,GAC7C,IAAAM,EAA8CR,EAAqBC,EAAYC,GAAvEG,EAAYG,EAAZH,aAAcC,EAAmBE,EAAnBF,sBAIlBD,GAAgB,CAAC,GADnBI,UAGeH,GACfA,GAEJ,EAEaI,EAA+B,SAACT,EAAYU,EAAaC,GACpE,IAEAC,EAFyBb,EAAqBC,EAAYW,GAAlDP,cAEwC,CAAC,EAAzCI,EAAQI,EAARJ,SAAUvR,EAAS2R,EAAT3R,UAEduR,MACkB,IAAIpR,MAAOyR,UACA5R,GAAa,IAAO,GAAK,GAAK,GAC/C,GAAK6R,OAAOC,QAAUD,OAAOC,OAAOC,gBAChDF,OAAOC,OAAOL,IAAe,EAC7BI,OAAOC,OAAOC,cAAcC,QAAQ,CAClCC,qBAAqB,KAI7B,EAEaC,EAAkC,SAACT,GAC1CI,OAAOC,SACTD,OAAOC,OAAOL,IAAe,EAEjC,C,wyICzRMU,GAAiB3K,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACrB4K,QAAS,QACNC,EAAAA,GAAWC,QAAQ,SAAO,IAC7BC,eAAgB,SAChBC,WAAY,UACTH,EAAAA,GAAWI,IAAI,QACfJ,EAAAA,GAAWK,aAAa,QAAM,IACjCC,gBAAiB,OACjBC,UAAW,kEACRP,EAAAA,GAAWQ,OAAO,SAClBR,EAAAA,GAAWS,QAAQ,SAAO,IAC7BC,UAAW,SACRV,EAAAA,GAAWW,SAAS,WAAS,IAChCC,SAAU,UAGNC,GAAe1L,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACnB2L,WAAY,WACZC,UAAW,SACXC,UAAW,QACRhB,EAAAA,GAAWiB,KAAK,EAAG,EAAG,QAAM,IAC/BjgB,MAAO,QACJgf,EAAAA,GAAWW,SAAS,WAAS,IAChCO,aAAc,WACdC,WAAY,WAGRC,GAAejM,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACnB4K,QAAS,QACNC,EAAAA,GAAWqB,OAAO,QAAM,IAC3BnB,eAAgB,SAChBC,WAAY,SACZnf,MAAO,OACPC,OAAQ,SAGGqgB,GAA0BC,EAAAA,EAAAA,GAAW,CAChDC,WAASrM,EAAAA,EAAAA,GAAA,GACJ6K,EAAAA,GAAWiB,KAAK,EAAG,EAAG,QAE3BQ,iBAAetM,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACV2K,GAAiB,IACpB,YAAU3K,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACL0L,GAAe,IAClBa,MAAO,UACPC,SAAU,OACVC,WAAY,OACZC,WAAY,MAEd,kBAAgB1M,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACX0L,GAAe,IAClBa,MAAO,UACPC,SAAU,OACVC,WAAY,OACZC,WAAY,QAEd,WAAS1M,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACJ6K,EAAAA,GAAWiB,KAAK,IAAE,IACrBL,SAAU,QACV5f,MAAO,SAET,aAAc,CACZA,MAAO,OACPC,OAAQ,OACR,QAAS,CACPD,MAAO,OACPC,OAAQ,OACR6gB,UAAW,YAGf,WAAS3M,EAAAA,EAAAA,GAAA,GACJiM,O,YCnEHW,EAAkB,SAAH5f,GAEd,IADLZ,EAAEY,EAAFZ,GAAIuL,EAAK3K,EAAL2K,MAAO4I,EAAWvT,EAAXuT,YAAagC,EAAQvV,EAARuV,SAAU2E,EAAOla,EAAPka,QAAS2F,EAAW7f,EAAX6f,YAAaC,EAAa9f,EAAb8f,cAElDC,EAAUZ,IAEhB,OACExgB,EAAAA,EAAAA,MAACqhB,EAAAA,EAAM,CACL5gB,GAAIA,EAAE,GAAAuN,OAAMvN,EAAE,yBAAqBgV,EACnC8F,QAASA,EACTzZ,WAAWwf,EAAAA,EAAAA,GAAa,aAAcF,EAAQT,gBAAiBO,GAAeE,EAAQV,UAAWS,GAAe7gB,SAAA,EAEhHC,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,UAASxB,UACtBC,EAAAA,EAAAA,KAAA,OAAKgB,IAAKqV,EAAUnV,IAAKuK,OAE3BhM,EAAAA,EAAAA,MAAA,OAAK8B,UAAU,OAAMxB,SAAA,EACnBC,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,QAAOxB,SACnB0L,KAEHzL,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,cAAckK,MAAO4I,EAAYtU,SAC7CsU,QAGLrU,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,OAAMxB,UACnBC,EAAAA,EAAAA,KAACghB,EAAAA,IAAY,QAIrB,EAWAN,EAAgBO,aAAe,CAC7B/gB,QAAIgV,EACJyL,aAAa,EACbC,cAAe,IAGV,IAAMM,EAAoBR,E,yGCjC3BS,GAAYjB,EAAAA,EAAAA,GAAW,CAC3BkB,cAAe,CACbxhB,OAAO,gBAAD6N,OAJgB,GAImB,OACzC4T,IAAK,OACLC,OAAQ,OAEVC,aAAc,CACZ,qBAAsB,OACtBC,eAAgB,QAElBC,QAAS,CACPC,OAAQ,KAEVC,MAAO,CACLD,OAAQ,UAICE,GAA0BC,EAAAA,EAAAA,aAAW,SAACC,EAAOC,GACxD,IACEC,EAOEF,EAPFE,sBACAC,EAMEH,EANFG,OACAC,EAKEJ,EALFI,QACAC,EAIEL,EAJFK,WACApiB,EAGE+hB,EAHF/hB,SACAqiB,EAEEN,EAFFM,KACA7gB,EACEugB,EADFvgB,UAGI8gB,GAAiBC,EAAAA,EAAAA,QAAO,MACxBC,EAASpB,IAEf,OACE1hB,EAAAA,EAAAA,MAAA+iB,EAAAA,SAAA,CAAAziB,SAAA,EACEN,EAAAA,EAAAA,MAACgjB,EAAAA,EAAa,CACZV,IAAKA,EACLW,KAAMT,EACNU,UAAU,YACVC,SAAS,MACTR,KAAMA,EACNS,SAAU,EACVthB,WAAWwf,EAAAA,EAAAA,GAAawB,EAAOnB,cAAe,4CAA6C7f,GAAWxB,SAAA,EAEtGC,EAAAA,EAAAA,KAAC8iB,EAAAA,EAAY,CAAA/iB,UACXC,EAAAA,EAAAA,KAAC+iB,EAAAA,EAAiB,CAChBC,QACEhjB,EAAAA,EAAAA,KAAC8gB,EAAAA,EAAM,CACLvf,UAAU,qBACV0hB,WAAW,SACX,aAAW,QACXrU,MAAM5O,EAAAA,EAAAA,KAACkjB,EAAAA,IAAgB,IACvBlI,QAASkH,IAEZniB,SAEAoiB,OAGLniB,EAAAA,EAAAA,KAACmjB,EAAAA,EAAU,CAACpB,IAAKM,EAAgB9gB,WAAWwf,EAAAA,EAAAA,GAAawB,EAAOnB,cAAe,kDAAkDrhB,SAC9HqjB,EAAAA,SAASrN,IAAIhW,GAAU,SAAAsjB,GAAK,OAC3BA,IAASC,EAAAA,EAAAA,cAAaD,EAAO,CAC3BhB,eAAAA,GACA,OAENriB,EAAAA,EAAAA,KAACujB,EAAAA,EAAY,CAAAxjB,SACViiB,OAIHC,IACEjiB,EAAAA,EAAAA,KAACwjB,EAAAA,MAAK,CAACjiB,WAAWwf,EAAAA,EAAAA,GAAa,cAAewB,EAAOZ,OAAO5hB,UAC1DC,EAAAA,EAAAA,KAACyjB,EAAAA,QAAO,CAACC,cAAY,EAACniB,UAAWghB,EAAOd,cAMpD,IAYAG,EAAwBX,aAAe,CACrCe,sBAAuBzV,IAAAA,KACvB0V,QAAQ,EACRC,QAAS3V,IAAAA,KACT4V,WAAY,GACZpiB,SAAU,KACVqiB,KAAM,QACN7gB,UAAW,I,4BC5GAoiB,EAAmB,SAAH7iB,GAItB,IAHL8iB,EAAa9iB,EAAb8iB,cACAriB,EAAST,EAATS,UACAsiB,EAAW/iB,EAAX+iB,YAEMC,GAAgBC,EAAAA,EAAAA,UAAQ,iBAAO,CACnCC,OAAQJ,EAAgB,CAAEjkB,MAAO,GAAIC,OAAQ,IAAO,KACpDqkB,KAAMJ,GAAe,CACnBlkB,MAAO,OACPC,OAAQ,OACRogB,OAAQ,QAEX,GAAG,CAAC6D,EAAaD,IAElB,OACE5jB,EAAAA,EAAAA,KAACkkB,EAAAA,EAAO,CACN9B,KAAM+B,EAAAA,EAAYC,MAClB7B,OAAQuB,EACRviB,UAAWA,GAGjB,EASAoiB,EAAiB1C,aAAe,CAC9B2C,eAAe,EACfriB,UAAW,GACXsiB,YAAa,M,yBCpCFQ,GAAwBnE,EAAAA,EAAAA,GAAW,CAC9CoE,cAAYxQ,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACVwM,SAAU,OACVZ,UAAW,SACXc,WAAY,IACZvB,gBAAiB,wBACdN,EAAAA,GAAWK,aAAa,UACxBL,EAAAA,GAAWQ,OAAO,SAClBR,EAAAA,GAAWqB,OAAO,UCHnBuE,EAAe,SAAHzjB,GAEX,IADLqL,EAAIrL,EAAJqL,KAAYqY,EAAI1jB,EAAV8N,KAAYoM,EAAOla,EAAPka,QAASyJ,EAAO3jB,EAAP2jB,QAASljB,EAAST,EAATS,UAE9Bsf,EAAUwD,IACVpB,EAAawB,EAAU,UAAY,YACzC,OACEzkB,EAAAA,EAAAA,KAAC8gB,EAAAA,EAAM,CACLlS,MAAM5O,EAAAA,EAAAA,KAACwkB,EAAI,IACXxJ,QAASA,EACTzZ,UAAWmjB,IAAW,cAAe7D,EAAQyD,aAAc/iB,GAC3D0hB,WAAYA,EAAWljB,SAEtBoM,GAGP,EAWAoY,EAAatD,aAAe,CAC1BwD,SAAS,GAGJ,IAAME,EAA4BJ,E,iCCnCnCK,EAAuBC,EAAAA,cAAoB,CAAC,GAKrCC,EAAyB,SAAHhkB,GAA8C,IAAxCikB,EAAKjkB,EAALikB,MAAOC,EAAelkB,EAAfkkB,gBAAiBjlB,EAAQe,EAARf,SAIzDklB,GAAqBC,EAAAA,EAAAA,cAAY,SAACC,GACtC,IAAQC,GAAeL,GAAS,CAAC,GAAzBK,WACR,OAAIJ,GAAmBA,EAAgBG,GAC9BH,EAAgBG,GAErBC,GAAcA,EAAWD,GACpBC,EAAWD,QADpB,CAIF,GAAG,CAACH,EAAiBD,IAEfM,GAAetB,EAAAA,EAAAA,UAAQ,iBAAO,CAClCgB,MAAAA,EACAE,mBAAAA,EACD,GAAG,CAACA,EAAoBF,IAEzB,OACE/kB,EAAAA,EAAAA,KAAC4kB,EAAqBU,SAAQ,CAACpP,MAAOmP,EAAatlB,SAChDA,GAGP,ECzBMwlB,EAAsB,CAAER,MAAO,CAAC,EAAGE,mBAAoB,WAAQ,GAGrE,SAASO,EAAe1kB,GAAwD,IAArDqkB,EAAarkB,EAAbqkB,cAAeM,EAAe3kB,EAAf2kB,gBAAiBC,EAAgB5kB,EAAhB4kB,iBAEzD1P,EDsBqC6O,EAAAA,WAAiBD,ICtBOW,EAArDR,EAAK/O,EAAL+O,MAAOE,EAAkBjP,EAAlBiP,mBAGTU,GAAe5B,EAAAA,EAAAA,UAAQ,WAE3B,IAAI6B,EAAkB,CAAC,EACvB,GAAIX,EAAoB,CAEtB,IAAMY,EAAqBZ,EAAmBE,GAC9CS,EAAkBrZ,IAAAA,WAAasZ,GAAsBA,EAAmBd,GAAS,CAAC,GAAKc,CACzF,CAGA,IAAMC,EAAgBJ,GAAoBA,EAAiBX,GAAS,CAAC,GAGrE,OAAAjR,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAYgS,GAAkBF,EAChC,GAAG,CAACT,EAAeF,EAAoBS,EAAkBX,IAOnDlE,GAJYkD,EAAAA,EAAAA,UAChB,kBAAMgC,EAAAA,EAAAA,iBAAgBJ,EAAc,CAAEK,KAAMP,GAAmB,MAAO,GACtE,CAACA,EAAiBE,GAEJxE,IAAe,CAAC,EAGhC,OADe4C,EAAAA,EAAAA,UAAQ,iBAAO,CAAElD,QAAAA,EAAS8E,aAAAA,EAAc,GAAG,CAAC9E,EAAS8E,GAEtE,CAOO,SAASM,EAAoBC,EAAkBR,EAAkBS,GACtE,IAxCqBC,EAwCrB/J,EAII8J,GAAW,CAAC,EAHdV,EAAepJ,EAAfoJ,gBACAY,EAAYhK,EAAZgK,aAIIC,EAHSjK,EAAb8I,iBA3CmBiB,EA8CsCF,GA9CfK,aAAeH,EAAUJ,MAAQ,aAgDvEQ,EAAM,SAAC1E,GACX,IAAA2E,EAAkCjB,EAAgB,CAAEL,cAAemB,EAAoBb,gBAAAA,EAAiBC,iBAAAA,IAAhG7E,EAAO4F,EAAP5F,QAAS8E,EAAYc,EAAZd,aACjB,OACE3lB,EAAAA,EAAAA,KAACkmB,GAAgBpS,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKgO,GAAK,IAAEjB,QAASA,EAAS8E,aAAcU,EAAeV,OAAezQ,IAE/F,EAMA,OAJAsR,EAAID,YAAW,uBAAA9Y,OAA0B6Y,EAAkB,KAE3DI,IAAqBF,EAAKN,GAEnBM,CACT,CCpEA,IAAMG,EAAe,CACnB/D,SAAU,WACVgE,KAAM,EACNvF,IAAK,EACLwF,MAAO,EACPvF,OAAQ,GCGJwF,EAAc,SAAHhmB,GAAA,IAAMf,EAAQe,EAARf,SAAU8gB,EAAO/f,EAAP+f,QAAO,OACtC7gB,EAAAA,EAAAA,KAAA,OAAKuB,UAAWmjB,IAAW,eAAgB7D,EAAQkG,sBAAsBhnB,SACtEA,GACG,EAUR+mB,EAAY7F,aAAe,CACzBlhB,SAAU,MAGL,IAAMinB,EAAuBf,EAAoBa,GDjBrB,WAAH,MAAU,CACxCC,sBAAoBjT,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACf6S,GAAY,IACfjI,QAAS,OACTG,eAAgB,SAChBC,WAAY,SACZmI,WAAY,gGACZC,QAAS,EACTC,WAAY,wBACZnI,aAAc,IAEjB,IElBKoI,EAAyB,SAAAC,GAAO,MAAK,CACzCzE,SAAU,WACV0E,WAAY,EACZC,SAAU,EACVvI,aAAc,EACdC,gBAAiBoI,EAAQG,aACzBvM,OAAQ,mGACT,ECGKwM,EAAsB,SAAH3mB,GASlB,IARLf,EAAQe,EAARf,SACA2nB,EAAgB5mB,EAAhB4mB,iBACAC,EAAa7mB,EAAb6mB,cACAC,EAAoB9mB,EAApB8mB,qBACAC,EAA0B/mB,EAA1B+mB,2BACA7M,EAAOla,EAAPka,QACA8M,EAAmBhnB,EAAnBgnB,oBACAjH,EAAO/f,EAAP+f,QAEMkH,EAAc,SAACC,GACfhN,GACFA,IAEEgN,GAASA,EAAMC,iBAAmBD,EAAMC,kBACxCD,GAASA,EAAME,gBAAkBF,EAAME,gBAC7C,EAQA,OAEEzoB,EAAAA,EAAAA,MAAA,OACE8B,UAAWmjB,IACT,eACA7D,EAAQsH,gBAAkBtH,EAAQuH,kBAClCN,GAAuBjH,EAAQwH,0BAC/BxH,EAAQyH,6BACRX,GAAiB9G,EAAQ0H,SAE3BvN,QAAS+M,EACTS,UAjBc,SAACR,GACK,KAAlBA,EAAMS,SACRV,GAEJ,EAayBhoB,SAAA,CAEpBA,EACA2nB,IACCjoB,EAAAA,EAAAA,MAACunB,EAAoB,CAAAjnB,SAAA,EACnBC,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,uBAAsBxB,SAClC6nB,EAAuBA,IAAyB,OAEjDC,GACA7nB,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,4BAA2BxB,SACvC8nB,MAEH,UAKZ,EAmBAJ,EAAoBxG,aAAe,CACjCyG,kBAAkB,EAClBC,eAAe,EACfC,qBAAsB,KACtBC,2BAA4B,KAC5BC,yBAAqB5S,EACrB8F,aAAS9F,GAGX,IAAMwT,EAAW,SAAH1S,GAAA,IAAMjW,EAAQiW,EAARjW,SAAU8gB,EAAO7K,EAAP6K,QAASiH,EAAmB9R,EAAnB8R,oBAAmB,OACxD9nB,EAAAA,EAAAA,KAAA,OAAKuB,UAAWmjB,IAAW,eAAgB7D,EAAQsH,gBAAkBtH,EAAQuH,kBAAmBN,GAAqB/nB,SAClHA,GACG,EAYR2oB,EAASzH,aAAe,CACtB6G,yBAAqB5S,GAGhB,IAAMyT,EAAoB1C,EAAoByC,GDpGrB,WAAH,IAAA5nB,EAAAkU,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAkD,CAAC,EAAnC4T,GAAA9nB,EAAVskB,WAAUtkB,EAAE+nB,MAA2BC,QAAvB,IAAAF,EAAqB,CAAC,EAACA,GAAnBvB,QAAAA,OAAO,IAAAyB,EAAG,CAAC,EAACA,EAAA,MAAoB,CACrFV,mBAAiBtU,EAAAA,EAAAA,GAAA,GACZsT,EAAuBC,IAE7B,ICiGY0B,EAA+B9C,EAAoBwB,GD/FrB,WAAuD,IAADzR,EAAAhB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAP,CAAC,EAAnCgU,GAAAhT,EAAVoP,WAAUpP,EAAE6S,MAA2BI,QAAvB,IAAAD,EAAqB,CAAC,EAACA,GAAnB3B,QAC1D6B,EAAc,CAClB,kBAAmB,CACjBhC,QAAS,EAET,0BAA2B,CACzBA,QAAS,EACTiC,UAAW,0BAGf,qCAAsC,CACpC,0BAA2B,CACzBjC,QAAS,EACTiC,UAAW,0BAIjB,MAAO,CACLf,kBAAmBhB,OAlBkD,IAAA6B,EAAG,CAAC,EAACA,GAoB1EZ,0BAA2B,CACzB/I,SAAU,UAGZgJ,6BAA8B,CAC5B,0BAA2B,CACzB5J,QAAS,OACTkB,KAAM,EACNwJ,cAAe,MACfvK,eAAgB,SAChBC,WAAY,SACZlf,OAAQ,OACRgjB,SAAU,WACVsE,QAAS,GACT7F,IAAK,GACL8F,WAAY,0CAGd,+BAAgC,CAC9BvE,SAAU,WACVvB,IAAK,EACLuF,KAAM,EACNC,MAAO,EACPwC,OAAQ,GAGV,0BAA2BH,GAE7BX,QAASW,EAEb,I,YE3DMI,GAAqB,SAAHxoB,GAAA,IACtByoB,EAAQzoB,EAARyoB,SACA1I,EAAO/f,EAAP+f,QACA9f,EAAID,EAAJC,KAAI,OAEJf,EAAAA,EAAAA,KAAA,OAAKuB,UAAWsf,EAAQ2I,gBAAgBzpB,UACtCN,EAAAA,EAAAA,MAAA,OAAK8B,UAAWsf,EAAQ4I,gBAAgB1pB,SAAA,EACtCC,EAAAA,EAAAA,KAACwkB,EAAAA,EAAI,CAACjjB,UAAWsf,EAAQ6I,YAAaH,SAAUA,KAChDvpB,EAAAA,EAAAA,KAAA,QAAMuB,UAAWsf,EAAQ8I,UAAU5pB,SAAEgB,EAAKI,UAAUC,eAElD,EAgBRkoB,GAAmBrI,aAAe,CAChCJ,QAAS,CAAC,GAIRoF,EAAoBqD,ICrCkB,WAAH,IAAAxoB,EAAAkU,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAkD,CAAC,EAAnC4T,GAAA9nB,EAAVskB,WAAUtkB,EAAE+nB,MAA2BC,QAAvB,IAAAF,EAAqB,CAAC,EAACA,GAAnBvB,QAAAA,OAAO,IAAAyB,EAAG,CAAC,EAACA,EAAA,MAAoB,CAC/FU,gBAAiB,CACf5G,SAAU,WACVvB,IAAK,MACLuF,KAAM,MACNuC,UAAW,yBAEbM,gBAAiB,CACf9pB,MAAO,GACPC,OAAQ,GACRqf,gBAAiB,qBACjBD,aAAc,EACdE,UAAW,gCACXR,QAAS,OACTI,WAAY,SACZD,eAAgB,UAElB6K,YAAa,CACXpJ,SAAU,GACVD,MAAOgH,EAAQuC,OAEjBD,UAAW,CACTrJ,SAAU,GACVD,MAAOgH,EAAQuC,MACfC,WAAY,GAEf,IDUM,I,aEnCMC,IAA8B5J,EAAAA,EAAAA,GAAW,CACpD6J,6BAA8B,CAC5B1J,MAAO2J,GAAAA,EAAOC,+BACdzJ,WAAY,IACZF,SAAU,OACVC,WAAY,OAEZ,0BAAwBzM,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACtB4K,QAAS,QACNC,EAAAA,GAAWK,aAAa,QACxBL,EAAAA,GAAWC,QAAQ,MAAO,MAAO,MAAO,QAAM,IACjDsL,YAAa,MAEbjL,gBAAiB+K,GAAAA,EAAOG,6BACxB,gBAAiB,CACfD,YAAa,MACb5J,SAAU,UAId,2BAAyBxM,EAAAA,EAAAA,GAAA,CACvB8O,SAAU,WACVgE,KAAM,QACNM,QAAS,GACNvI,EAAAA,GAAWwI,WAAW,UAAW,OAAQ,OAAQ,YAAa,OAAQ,SAG3E,8BAA4BrT,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAC1BnU,MAAO,OACPC,OAAQ,OACRqf,gBAAiB,sBACdN,EAAAA,GAAWK,aAAa,QAAM,IACjCF,WAAY,SACZD,eAAgB,SAChBH,QAAS,OACTwL,YAAa,MACbtH,SAAU,WACViE,MAAO,OACP,qBAAsB,CACpBlnB,MAAO,UAIX,2BAA4B,CAC1BijB,SAAU,WACViE,MAAO,MACP,+BAA6B/S,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAC3BmL,gBAAiB+K,GAAAA,EAAOG,6BACxBC,MAAO,SACJzL,EAAAA,GAAWC,QAAQ,QACnBD,EAAAA,GAAWK,aAAa,UAKjCqL,iBAAkB,CAChB3L,QAAS,OACTI,WAAY,YCpDVwL,GAAsB,SAAHxpB,GAOlB,IANLqL,EAAIrL,EAAJqL,KACMqY,EAAI1jB,EAAV8N,KACA2b,EAAazpB,EAAbypB,cACAC,EAAiB1pB,EAAjB0pB,kBACAC,EAAc3pB,EAAd2pB,eACAC,EAAW5pB,EAAX4pB,YAEM7J,EAAUiJ,KAEhB,OACErqB,EAAAA,EAAAA,MAAA,OAAK8B,UAAWmjB,IAAW,kCAAmC7D,EAAQkJ,6BAA8BW,EAAYC,WAAa9J,EAAQwJ,kBAAkBtqB,SAAA,EAElJoM,GAAQqY,KACP/kB,EAAAA,EAAAA,MAAA,OAAK8B,UAAWmjB,IAAW,sBAAuBgG,EAAYE,iBAAiB7qB,SAAA,CAC5EykB,IAAQxkB,EAAAA,EAAAA,KAACwkB,EAAI,CAACjjB,UAAU,eACxB4K,IAAQnM,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,aAAYxB,SAAEoM,OAI3Coe,IAAiBvqB,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,uBAAsBxB,SAAEwqB,IAEvDC,IACExqB,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,0BAAyBxB,UACtCC,EAAAA,EAAAA,KAAA,OAAKgB,IAAKzB,EAAAA,GAAWgC,UAAU,kBAAkBL,IAAI,OAKzDupB,IACEzqB,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,wBAAuBxB,UACpCC,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,2BAA2B,aAAYkpB,EAAgBI,KAAK,eAAc9qB,SAAE0qB,QAMvG,EAcAH,GAAoBrJ,aAAe,CACjC9U,KAAM,KACNyC,KAAM,KACN2b,cAAe,GACfE,eAAgB,KAChBD,kBAAmB,KACnBE,YAAa,CAAC,GAGT,IAAMI,GAA+BR,G,aC1DtCS,GAAY,CAAExB,SAAU,SAExByB,GAA8B,SAAHlqB,GAE1B,IADL+S,EAAI/S,EAAJ+S,KAAMoX,EAAQnqB,EAARmqB,SAAUlrB,EAAQe,EAARf,SAAU8gB,EAAO/f,EAAP+f,QAU1B,OACEphB,EAAAA,EAAAA,MAAA+iB,EAAAA,SAAA,CAAAziB,SAAA,CACGA,GACDC,EAAAA,EAAAA,KAAA,OAAKuB,UAAWmjB,IAAW,sCAAuC7D,EAAQqK,6BAA6BnrB,UACrGC,EAAAA,EAAAA,KAACmrB,GAAAA,EAAU,CACTJ,UAAWA,GACX/P,QAdQ,SAACgN,GACXiD,GACFA,EAASpX,GAEPmU,EAAMC,iBAAmBD,EAAMC,kBAC/BD,EAAME,gBAAkBF,EAAME,gBACpC,EASQkD,UAAU,eACVC,UAAU,EACV9pB,UAAWmjB,IAAW,gBAAiB7D,EAAQyK,oBAKzD,EAYAN,GAA4B/J,aAAe,CACzCgK,cAAU/V,GAGL,IAAMqW,GAAuCtF,EAClD+E,ICpDiD,WAAH,IAAAlqB,EAAAkU,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAkD,CAAC,EAAnC4T,GAAA9nB,EAAVskB,WAAUtkB,EAAE+nB,MAA2BC,QAAvB,IAAAF,EAAqB,CAAC,EAACA,GAAnBvB,QAAY,MAAoB,CACxG6D,4BAA6B,CAC3BtI,SAAU,WACVtB,OAAQ,EACRuF,MAAO,IAETyE,aAAc,CACZrM,sBAP6E,IAAA6J,EAAG,CAAC,EAACA,GAOzD0C,aACzBtE,QAAS,GACTxF,OAAQ,EACR9C,QAAS,EACThf,OAAQ,GACRD,MAAO,GACP,UAAW,CACTunB,QAAS,IAEX,WAAY,CACVA,QAAS,GAEX,oBAAqB,CACnBlH,OAAQ,IAGb,I,oDCxBK2G,GAAe,CACnB/D,SAAU,WACVgE,KAAM,EACNvF,IAAK,EACLwF,MAAO,EACPvF,OAAQ,GCWJmK,GAAY,SAAH3qB,GAaR,IAZLE,EAAGF,EAAHE,IACAE,EAAGJ,EAAHI,IACAwqB,EAAW5qB,EAAX4qB,YACAC,EAAQ7qB,EAAR6qB,SACAC,EAAO9qB,EAAP8qB,QACA7qB,EAAID,EAAJC,KACAia,EAAOla,EAAPka,QACA6Q,EAAW/qB,EAAX+qB,YACAhL,EAAO/f,EAAP+f,QACAiL,EAAahrB,EAAbgrB,cACAC,EAAmBjrB,EAAnBirB,oBACAC,EAAQlrB,EAARkrB,SAGA3U,GAA4CC,EAAAA,EAAAA,UAAS2U,GAAAA,GAAeC,WAAU3U,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAAvE8U,EAAc5U,EAAA,GAAE6U,EAAiB7U,EAAA,GAElC8U,GAAuBnH,EAAAA,EAAAA,cAAY,SAACoH,EAAGC,GAC3C,GAAID,IAAML,GAAAA,GAAeO,OACvBb,GAAS,QACJ,GAAIW,IAAML,GAAAA,GAAeQ,MAG9B,YAFAF,IAIFH,EAAkBE,EACpB,GAAG,CAACX,IAGEe,GAAcxH,EAAAA,EAAAA,cAAY,SAACqH,GAC/B,IAAMI,EAAM,IAAIrkB,MAChBqkB,EAAIC,QAAU,WACZP,EAAqBJ,GAAAA,GAAeQ,MAAOF,EAC7C,EACAI,EAAIE,OAAS,WACXR,EAAqBJ,GAAAA,GAAeO,OACtC,EACAH,EAAqBJ,GAAAA,GAAeC,WACpCS,EAAI3rB,IAAMA,CACZ,GAAG,CAACqrB,EAAsBrrB,IAEpB8rB,GAAmB5H,EAAAA,EAAAA,cAAY,WAA+B,IAA9B6H,EAAU/X,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GA5C9B,EA6CZ6W,GAAekB,EAAa,EAC9BC,YAAW,kBAAMN,GAAY,kBAAMI,EAAiBC,EAAa,EAAE,GAAC,GA7CtD,MA+CdX,EAAkBH,GAAAA,GAAeQ,OAC7Bb,GACFA,IAGN,GAAG,CAACC,EAAaD,EAASc,IAEpBO,GAAgB/H,EAAAA,EAAAA,cAAY,SAAC8C,GAC7BmE,IAAmBF,GAAAA,GAAeQ,OACpCC,EAAYI,GAEV9E,EAAMC,iBAAmBD,EAAMC,kBAC/BD,EAAME,gBAAkBF,EAAME,gBACpC,GAAG,CAACiE,EAAgBW,EAAkBJ,IAEhCQ,GAA4BhI,EAAAA,EAAAA,cAAY,SAACoH,GAC7CD,EAAqBC,EAAGQ,EAC1B,GAAG,CAACA,EAAkBT,IAGtB,OACE5sB,EAAAA,EAAAA,MAAA,OAAK8B,UAAWmjB,IAAW,mBAAoB7D,EAAQsM,4BAA6BrB,EAAc3D,gBAAgBpoB,SAAA,EAChHC,EAAAA,EAAAA,KAAA,OAAKuB,UAAWmjB,IAAW,mBAAoB7D,EAAQuM,wBAAwBrtB,UAC7EN,EAAAA,EAAAA,MAAA,OAAK8B,UAAWsf,EAAQwM,YAAYttB,SAAA,CACjCosB,IAAmBF,GAAAA,GAAeC,WAAaR,IAAgBK,EAC9DA,KAAyB/rB,EAAAA,EAAAA,KAAC2jB,EAAgB,KAE1CwI,IAAmBF,GAAAA,GAAeQ,QAClCzsB,EAAAA,EAAAA,KAACukB,EAAY,CACXpY,KAAMpL,EAAKI,UAAUC,UACrBwN,KAAM0e,GAAAA,IACNtS,QAASiS,EACTxI,SAAS,EACTljB,UAAWmjB,IAAW,gBAAiB7D,EAAQ0M,mBAKvDvtB,EAAAA,EAAAA,KAACwtB,GAAAA,EAAW,CACVjsB,UAAWmjB,IAAW,kBAAmBoH,EAAc2B,YACvDzB,SAAUA,EACVhrB,IAAKA,EACLE,IAAKA,EACLwsB,eAAa,EACbrB,qBAAsBa,EACtBlS,QAASA,MAIjB,EA2BAyQ,GAAUxK,aAAe,CACvByK,aAAa,EACbC,SAAUgC,EAAAA,KACV/B,QAAS+B,EAAAA,KACT3S,QAAS2S,EAAAA,KACT9B,aAAa,EACbC,cAAe,CAAC,EAChBC,yBAAqB7W,EACrB8W,SAAU4B,GAAAA,GAASC,OAGd,IAAMC,GAAqB7H,EAAoBwF,ID5IX,WAAH,MAAU,CAChD0B,4BAA6B,CAC3B,uBAAqBrZ,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAChB6S,IAAY,IACfjI,QAAS,OACTG,eAAgB,SAChBC,WAAY,YAGhBsO,uBAAwB,CACtBxK,SAAU,WACVjjB,MAAO,OACPC,OAAQ,OACRyhB,IAAK,EACLuF,KAAM,GAERyG,YAAa,CACX3O,QAAS,OACTI,WAAY,SACZD,eAAgB,SAChBlf,MAAO,OACPC,OAAQ,QAEV2tB,UAAW,CACT7L,OAAQ,GAEX,I,0BEhCYqM,IAA+BC,EAAAA,GAAAA,GAAgB,CAC1DruB,MAAO,OACPC,OAAQ,OACR,oCAAkCkU,EAAAA,EAAAA,GAAA,CAChCnU,MAAO,OACPC,OAAQ,QACL+e,EAAAA,GAAWW,SAAS,WAEzB,uBAAwB,CACtBsD,SAAU,WACVvB,IAAK,MACLwF,MAAO,OAET,oBAAkB/S,EAAAA,EAAAA,GAAA,CAChBma,aAAc,QACdC,aAAc,MACdC,aAAcnE,GAAAA,EAAOoE,sBAClBzP,EAAAA,GAAWK,aAAa,QAE7B,eAAalL,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACXmL,gBAAiB+K,GAAAA,EAAOC,+BACxBvI,OAAQ,EACR/hB,MAAO,OACPC,OAAQ,QACL+e,EAAAA,GAAWK,aAAagL,GAAAA,EAAOqE,oBAAkB,IACpD,8BAA4Bva,EAAAA,EAAAA,GAAA,CAC1BnU,MAAO,OACPC,OAAQ,QACL+e,EAAAA,GAAWqB,OAAO,QCtBdsO,GAAkC,SAAHxtB,GAErC,IADL+S,EAAI/S,EAAJ+S,KAAM0a,EAAQztB,EAARytB,SAAUvT,EAAOla,EAAPka,QAASjb,EAAQe,EAARf,SAAUqrB,EAAStqB,EAATsqB,UAAWoD,EAAS1tB,EAAT0tB,UAAW3N,EAAO/f,EAAP+f,QAEnDkH,EAAc,SAACC,GACfhN,GACFA,EAAQ,CAAEnH,KAAAA,EAAM0a,SAAAA,IAEdvG,EAAMC,iBAAmBD,EAAMC,kBAC/BD,EAAME,gBAAkBF,EAAME,gBACpC,EAQMuG,EAAgCV,KAEtC,OACEtuB,EAAAA,EAAAA,MAAA,OAAK8B,WAAWwf,EAAAA,EAAAA,GACdF,EAAQ4N,8BACRA,EACA,wCACAF,GAAY1N,EAAQ6N,qBACpBH,EAAW,uBAAyB,IACpCxuB,SAAA,EAEAC,EAAAA,EAAAA,KAAA,OACEuB,WAAWwf,EAAAA,EAAAA,GAAaF,EAAQ8N,uBAAwB,gCAAiCJ,GAAY1N,EAAQ+N,cAAeL,EAAW,gBAAkB,IACzJvT,QAAS+M,EACT8C,KAAK,SACLhI,SAAU,EACV2F,UAtBY,SAACR,GACK,KAAlBA,EAAMS,SACRV,EAAYC,EAEhB,EAkB2BjoB,SAEpBA,KAEHC,EAAAA,EAAAA,KAAA,OACEuB,WAAWwf,EAAAA,EAAAA,GAAa,oBAAqByN,GAAa,oBAC1DxT,QAAS+M,EAAYhoB,UAErBC,EAAAA,EAAAA,KAAC6uB,GAAAA,EAAQ,CACPC,QAASP,EACTnD,UAAWA,EACX7pB,UAAU,iBAKpB,EAiBA+sB,GAAgCrN,aAAe,CAC7CjG,aAAS9F,EACTkW,UAAW,GACXoD,WAAW,EACX3N,QAAS,CAAC,GC3EL,IAAMkO,GAAuB,SAAHjuB,GAE1B,IADLkuB,EAASluB,EAATkuB,UAAW7G,EAAcrnB,EAAdqnB,eAAgBpoB,EAAQe,EAARf,SAErBkvB,GAAkB3M,EAAAA,EAAAA,QAAO,MAC/BjL,GAAgDC,EAAAA,EAAAA,WAAS,GAAMC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAAxD6X,EAAgB3X,EAAA,GAAE4X,EAAmB5X,EAAA,GACtC6X,GAAkB9M,EAAAA,EAAAA,SAAO,GAEzB+M,GAAWtL,EAAAA,EAAAA,UAAQ,WAEvB,OADAqL,EAAgBE,SAAU,EACtBnR,OAAOoR,sBAAwBP,EAC1B,IAAIO,sBAAqB,SAACC,GAC/B,IAAAxZ,EAAgBwZ,GAAW,GAApBC,GAAsBjY,EAAAA,GAAAA,GAAAxB,EAAA,GAAjB,GAERyZ,GAASA,EAAMC,gBAAkBV,IAAcI,EAAgBE,UACjEN,IACAI,EAAgBE,SAAU,EAEtBG,GAASA,EAAME,QACjBN,EAASO,UAAUH,EAAME,QAG/B,GAAG,CACD1L,KAAM,KACN4L,WAAY,MACZC,UAAW,IAGR,IACT,GAAG,CAACd,IASJ,OAPArX,EAAAA,EAAAA,YAAU,WACJ0X,GAAYJ,EAAgBK,UAAYJ,IAC1CG,EAASU,QAAQd,EAAgBK,SACjCH,GAAoB,GAExB,GAAG,CAACE,EAAUJ,EAAiBC,KAG7BlvB,EAAAA,EAAAA,KAAA,OAAK+hB,IAAKkN,EAAiB1tB,UAAW4mB,EAAepoB,SAClDA,GAGP,EAQAgvB,GAAqB9N,aAAe,CAClC+N,UAAW,KACXjvB,SAAU,KACVooB,oBAAgBjT,G,8BCtDZ8a,IAAYlc,EAAAA,EAAAA,GAAA,CAChBoL,UAAW,2KACRP,EAAAA,GAAWK,aAAa,QAGhBiR,IAAqB/P,EAAAA,EAAAA,GAAW,CAC3CgQ,oBAAqB,CACnBtN,SAAU,WACVhjB,OAAQ,OACRD,MAAO,OAEP,iBAAemU,EAAAA,EAAAA,GAAA,CACbnU,MAAO,MACPC,OAAQ,UACLowB,IAGL,qBAAmBlc,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACjBnU,MAAO,OACPC,OAAQ,UACLowB,IAAY,IAEfpN,SAAU,WACVgE,KAAM,EACNtF,OAAQ,GACL3C,EAAAA,GAAWW,SAAS,YAG3B6Q,UAAW,CACTlR,gBAAiB,WAEnBmR,eAAgB,CACdnR,gBAAiB,WAEnBoR,cAAe,CACbpR,gBAAiB,WAEnBqR,mBAAoB,CAClBrR,gBAAiB,aClCfsR,GAAqB,SAAHzvB,GAEjB,IADL0vB,EAAiB1vB,EAAjB0vB,kBAAmBC,EAAa3vB,EAAb2vB,cAAeC,EAAuB5vB,EAAvB4vB,wBAE5B7P,EAAUoP,KAChB,OACExwB,EAAAA,EAAAA,MAAA,OAAK8B,WAAWwf,EAAAA,EAAAA,GAAaF,EAAQqP,oBAAqBQ,GAAyB3wB,SAAA,EACjFC,EAAAA,EAAAA,KAAA,OAAKuB,WAAWwf,EAAAA,EAAAA,GAAa,aAAc0P,EAAgB5P,EAAQuP,eAAiBvP,EAAQsP,cAC5FnwB,EAAAA,EAAAA,KAAA,OAAKuB,WAAWwf,EAAAA,EAAAA,GAAa,iBAAkB0P,EAAgB5P,EAAQyP,mBAAqBzP,EAAQwP,eAAetwB,SAC/GywB,IAAqBxwB,EAAAA,EAAAA,KAACsI,GAAAA,EAAK,CAC3BqoB,IAAI,QACJ3vB,IAAKwvB,EACLtvB,IAAI,oBAKd,EAQAqvB,GAAmBtP,aAAe,CAChCuP,uBAAmBtb,EACnBwb,wBAAyB,GACzBD,eAAe,GAGV,IAAMG,GAAaL,GClCbxC,IAA+B7N,EAAAA,EAAAA,GAAW,CACrD2Q,YAAa,CACXlxB,MAAO,QACPC,OAAQ,QACR8e,QAAS,QACTkE,SAAU,YAEZkO,iBAAkB,CAChBnxB,MAAO,OACPC,OAAQ,OACR6gB,UAAW,QACXyG,QAAS,IAEX6J,yBAA0B,CACxBpxB,MAAO,OACPC,OAAQ,OACR8e,QAAS,OACTG,eAAgB,SAChBC,WAAY,UAEdkS,kBAAmB,CACjBrxB,MAAO,QACPC,OAAQ,QAEVqxB,iBAAkB,CAChBrO,SAAU,WACVvB,IAAK,EACLuF,KAAM,EACNjH,UAAW,SACXuR,cAAe,SACfvxB,MAAO,QACPC,OAAQ,QACR2gB,WAAY,QACZtB,gBAAiB,kBACjBoB,MAAO,QACPC,SAAU,UC7BD6Q,GAA6B,SAAHrwB,GAQhC,IAPLswB,EAAStwB,EAATswB,UACArxB,EAAQe,EAARf,SACA8T,EAAI/S,EAAJ+S,KACAwd,EAAevwB,EAAfuwB,gBACAC,EAAMxwB,EAANwwB,OACAvwB,EAAID,EAAJC,KACAwtB,EAAQztB,EAARytB,SAEM1N,EAAUkN,KAEVwD,GAAyBxN,EAAAA,EAAAA,UAAQ,WACrC,IAAIyN,EAAuBH,EAI3B,OAHK9C,IACHiD,GAAwB,GAEtBA,EAAuB,EAClBzwB,EAAKI,UAAUC,4BAAmC,CAAEiwB,gBAAiBG,IAEvEzwB,EAAKI,UAAUC,SACxB,GAAG,CAACiwB,EAAiBtwB,EAAMwtB,IAErBkD,GAAoBvM,EAAAA,EAAAA,cAAY,kBACpCzlB,EAAAA,EAAAA,MAAA,OAAK8B,UAAWsf,EAAQgQ,YAAY9wB,SAAA,CAE9B8T,EAAKU,KAAOV,EAAK6d,cACf1xB,EAAAA,EAAAA,KAAA,OACEgB,IAAK6S,EAAK6d,cAAgB7d,EAAKU,IAC/BhT,UAAWsf,EAAQiQ,iBACnB5vB,IAAI,kBAGNlB,EAAAA,EAAAA,KAAA,OAAKuB,UAAWsf,EAAQkQ,yBAAyBhxB,UAC/CC,EAAAA,EAAAA,KAAC4wB,GAAU,CACTF,wBAAyB7P,EAAQmQ,kBACjCP,eAAe,OAKzBzwB,EAAAA,EAAAA,KAAA,OAAKuB,UAAWsf,EAAQoQ,iBAAiBlxB,SAAEwxB,MACvC,GACL,CAAC1Q,EAAS0Q,EAAwB1d,EAAK6d,aAAc7d,EAAKU,MAEvDod,GAAczM,EAAAA,EAAAA,cAAY,SAAC8C,GAC/BsJ,EAAO,CAAEzd,KAAAA,IACT,IAAM+d,EAAYC,SAASC,cAAc,OACnCC,EAAcN,EACpBO,GAAAA,QAAgBhyB,EAAAA,EAAAA,KAAC+xB,EAAW,IAAKH,GACjC,IAAMK,EAAaL,EAAUM,WAC7BL,SAASM,KAAKC,YAAYH,GAEtBjK,GAASA,EAAMqK,cAAgBrK,EAAMqK,aAAaC,cACpDtK,EAAMqK,aAAaC,aAAaL,EAAY,EAAG,EAEnD,GAAG,CAACpe,EAAMyd,EAAQG,IAElB,OACEL,GACEpxB,EAAAA,EAAAA,KAAA,OACEuB,UAAWmjB,IAAW,iCACtBiN,YAAaA,EACbP,WAAS,EAAArxB,SAERA,IACMA,CAEf,EAcAoxB,GAA2BlQ,aAAe,CACxCmQ,WAAW,EACXvd,KAAM,CAAC,EACPyd,OAAQ,WAAF,OAAQ,IAAI,EAClBD,gBAAiB,EACjB9C,UAAU,GC5FL,IAAMgE,IAA6BvE,EAAAA,GAAAA,GAAgB,CACxDwE,cAAe,MACfvE,aAAc,SACdC,aAAc,MACdC,aAAcnE,GAAAA,EAAOoE,uBCAVqE,GAA6B,SAAH3xB,GAKhC,IAJLf,EAAQe,EAARf,SACA2yB,EAAS5xB,EAAT4xB,UACAC,EAAM7xB,EAAN6xB,OACAC,EAAe9xB,EAAf8xB,gBAEAvb,GAA4BC,EAAAA,EAAAA,WAAS,GAAMC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAApCwb,EAAMtb,EAAA,GAAEub,EAASvb,EAAA,GAElBwb,EAAwBR,KAExBS,GAAa9N,EAAAA,EAAAA,cAAY,SAAC8C,GAC9BA,EAAME,iBACN4K,GAAU,EACZ,GAAG,IAEGG,GAAc/N,EAAAA,EAAAA,cAAY,WAC9B4N,GAAU,EACZ,GAAG,IAEGI,GAAgBhO,EAAAA,EAAAA,cAAY,SAAC8C,GACjCA,EAAME,iBACN4K,GAAU,GACVH,GACF,GAAG,CAACA,IAEJ,OACED,GACE1yB,EAAAA,EAAAA,KAAA,OACEgzB,WAAYA,EACZC,YAAaA,EACbN,OAAQO,EACR3xB,UAAW4xB,IAAW,WAAYN,EAAUD,GAAmBG,EAAyB,IAAIhzB,SAE3FA,IAEDA,CAER,EASA0yB,GAA2BxR,aAAe,CACxCyR,WAAW,EACXC,OAAQ,WAAF,OAAQ,IAAI,EAClBC,gBAAiB,I,8BChDNQ,GAAiB,CAG5B9gB,YAL2B,GAM3B+gB,eARuB,IASvBC,eARuB,IASvBC,UAXiB,IAYjBC,sBAAuBlsB,GAAAA,ICHnBmsB,GAAoB,SAAH3yB,GAKhB,IAJL4yB,EAAK5yB,EAAL4yB,MACAC,EAAY7yB,EAAZ6yB,aACAve,EAAMtU,EAANsU,OACAyL,EAAO/f,EAAP+f,QAEM+S,GAAmB1O,EAAAA,EAAAA,cAAY,SAAC2O,GACpC,IAAQhgB,EAASggB,EAAThgB,KACAigB,EAAWjgB,EAAXigB,OACR,OACE9zB,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,kBAAiBxB,SAC7B4zB,EAAa,CAAE9f,KAAAA,EAAMkgB,MAAOD,KAGnC,GAAG,CAACH,IAEJ,OACE3zB,EAAAA,EAAAA,KAAA,OAAKuB,UAAW4xB,IAAW,uBAAwBtS,EAAQmT,oBAAoBj0B,UAC7EC,EAAAA,EAAAA,KAACi0B,GAAAA,GAAI,CACHP,MAAOA,EACPQ,WAAYN,EACZO,YAAa/e,EAAOzV,YAASuV,EAC7Bqe,UAAWne,EAAOxV,aAAUsV,EAC5Bkf,SAAUhf,EAAOgf,eAAYlf,EAC7Bmf,cAAejf,EAAOif,oBAAiBnf,EACvCof,WAAYlf,EAAOkf,iBAAcpf,EACjCqf,gBAAiBnf,EAAOmf,gBACxBC,WAAYpf,EAAOof,WACnBC,cAAerf,EAAOqf,iBAI9B,EAmBAhB,GAAkBxS,aAAe,CAC/ByS,MAAO,GACPte,OAAQge,IAGH,IAAMsB,GAAYzO,EAAoBwN,ICnEZ,WAAH,MAAU,CACtCO,mBAAoB,CAElB,gBAAiB,CACf1U,SAAU,SACVsD,SAAU,WACV,kBAAmB,CACjB+R,UAAW,WAIf,0BAA2B,CACzBvK,MAAO,QAIT,qBAAsB,CACpBxH,SAAU,WACVgS,UAAW,aACXj1B,MAAO,OACPC,OAAQ,SAGb,I,mGCjBD,SAASi1B,GAASnB,EAAOoB,EAAYC,GACnC,OAAOxoB,IAAAA,KAAOmnB,GAAO,SAAA7f,GAAI,OAAIA,EAAKkhB,KAAaD,EAAWC,EAAQ,GACpE,CAEA,SAASC,GAAQtB,EAAOuB,EAAWF,GACjC,OAAKF,GAASnB,EAAOuB,EAAWF,GAGzB,CAACrB,GAAO,GAFN,CAAC,GAADjmB,QAAAkI,EAAAA,GAAAA,GAAK+d,GAAK,CAAEuB,KAAY,EAGnC,CAEA,SAASC,GAAWxB,EAAOyB,EAAcJ,GACvC,OAAIF,GAASnB,EAAOyB,EAAcJ,GACzB,CAACxoB,IAAAA,OAASmnB,GAAO,SAAA7f,GAAI,OAAIA,EAAKkhB,KAAaI,EAAaJ,EAAQ,KAAG,GAErE,CAACrB,GAAO,EACjB,CAEO,IAAM0B,GAAqB,SAAHt0B,GAOxB,IANLi0B,EAAOj0B,EAAPi0B,QACAM,EAAiBv0B,EAAjBu0B,kBACA1B,EAAY7yB,EAAZ6yB,aACAD,EAAK5yB,EAAL4yB,MACe4B,EAAiBx0B,EAAhCy0B,cACGC,GAAIC,EAAAA,GAAAA,GAAA30B,EAAA40B,IAEDH,GAAgBxR,EAAAA,EAAAA,UAAQ,kBAAMuR,GAAqB,EAAE,GAAE,CAACA,IAIxDK,GAAW5R,EAAAA,EAAAA,UAAQ,kBAAApO,EAAAA,GAAAA,GAAW+d,GAAS,GAAE,GAAI,CAACA,EAAO6B,IAErDK,GAAa1Q,EAAAA,EAAAA,cAAY,SAACrR,EAAM0a,GACpC,IACAsH,GADetH,EAAWyG,GAAUE,IACOK,EAAe1hB,EAAMkhB,GAAQe,GAAAte,EAAAA,GAAAA,GAAAqe,EAAA,GAAjEE,EAAgBD,EAAA,GAASA,EAAA,IAE1BT,GACFA,EAAkB,CAAExhB,KAAAA,EAAM0a,SAAAA,EAAUgH,cAAeQ,GAGzD,GAAG,CAAChB,EAASM,EAAmBE,IAE1B3B,GAAmB1O,EAAAA,EAAAA,cAAY,SAAAlP,GAAsB,IAAnBnC,EAAImC,EAAJnC,KAAMkgB,EAAK/d,EAAL+d,MACtCxF,IAAasG,GAASU,EAAe1hB,EAAMkhB,GAC3CiB,EAAezpB,IAAAA,QAAUqpB,EAAY/hB,GAC3C,OAAO8f,EAAa,CAClB9f,KAAAA,EAAMkgB,MAAAA,EAAOxF,SAAAA,EAAUqH,WAAYI,GAEvC,GAAG,CAACjB,EAASpB,EAAciC,EAAYL,IAEvC,OAAOv1B,EAAAA,EAAAA,KAAC00B,GAAS,CAACf,aAAcC,EAAkBF,MAAOiC,EAAUvgB,OAAQogB,EAAKpgB,QAClF,EAUAggB,GAAmBnU,aAAe,CAChC8T,QAAS,KACTrB,MAAO,GACP6B,cAAe,GACfF,uBAAmBngB,GCvEd,I,oNCYD+gB,GAA2B,SAAHn1B,GAEvB,IADLo1B,EAAWp1B,EAAXo1B,YAAavC,EAAY7yB,EAAZ6yB,aAAcwC,EAAYr1B,EAAZq1B,aAAcC,EAAqBt1B,EAArBs1B,sBAAuBf,EAAiBv0B,EAAjBu0B,kBAAmBgB,EAAmBv1B,EAAnBu1B,oBAAqBxV,EAAO/f,EAAP+f,QAAYyV,GAAUb,EAAAA,GAAAA,GAAA30B,EAAA40B,IAExHa,GAAqBxS,EAAAA,EAAAA,UAAQ,kBAAMmS,EAAYngB,KAAI,SAAAygB,GAAO,OAAA1iB,EAAAA,EAAAA,GAAA,CAC9D6f,aAAc,SAAC8C,GACb,IAAQC,GAAgBF,GAAW,CAAC,GAA5BE,YACR,OAAO/C,GAAY7f,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EAAI2iB,GAAM,IAAEC,YAAAA,IACnC,EAEArB,kBAAmBA,EACjB,SAACoB,GACC,IAAQC,GAAgBF,GAAW,CAAC,GAA5BE,YACRrB,GAAiBvhB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EAAI2iB,GAAM,IAAEC,YAAAA,IACjC,OAAIxhB,EACNmhB,oBAAqB,WACnB,IAAAM,EAAkCH,GAAW,CAAC,EAAtC9C,EAAKiD,EAALjD,MAAOkD,EAAcD,EAAdC,eACf,OAAIP,EACKA,EAAoB,CAAE3C,MAAAA,EAAOkD,eAAAA,IAElClD,EAAMze,OAAS,GAAKye,EAAMze,OAAS2hB,GAC9B52B,EAAAA,EAAAA,KAAC+uB,GAAoB,CAACC,UAAWmH,EAAap2B,UAAqBC,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,kBAAiBxB,UAACC,EAAAA,EAAAA,KAAC2jB,EAAgB,CAACC,eAAa,OAA/E8P,EAAMze,QAE5D,IACT,GACGuhB,EAAO,GACT,GAAE,CAACL,EAAcxC,EAAc0C,EAAqBhB,EAAmBa,IAGpEW,EACJtqB,IAAAA,OAAS2pB,GAAa,SAAAY,GAAG,OAAIA,EAAIF,eAAiB,CAAC,IAAE3hB,OAEjD8hB,EAAgBX,EAAwBhB,GAAqBV,GAEnE,OACE10B,EAAAA,EAAAA,KAAA,OAAKuB,UAAWmjB,IAAW7D,EAAQmW,0BAA2BnW,EAAQoW,mBAAmBl3B,SACtFw2B,EAAmBxgB,KAAI,SAAAkI,GAAA,IACtByY,EAAWzY,EAAXyY,YACAQ,EAAYjZ,EAAZiZ,aACAC,EAAgBlZ,EAAhBkZ,iBACAzD,EAAKzV,EAALyV,MACAte,EAAM6I,EAAN7I,OAEGogB,GADWvX,EAAd2Y,gBACOnB,EAAAA,GAAAA,GAAAxX,EAAAmZ,KAAA,OAEN1D,GAASA,EAAMze,QAAU,GACxBxV,EAAAA,EAAAA,MAAA,OAEE8B,UAAWmjB,IAAWyS,EAAkB,sBAAsBp3B,SAAA,CAE7D82B,EAA0B,GAAKnD,EAAMze,OAAS,GAAIjV,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,gBAAgBspB,KAAK,UAAU,aAAW,IAAG9qB,SAAEm3B,IAAsB,KAErIxD,EAAMze,OAAS,IACfjV,EAAAA,EAAAA,KAAC+2B,GAAajjB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACZ4f,MAAOA,GACH8B,GACAc,GAAU,IACdlhB,OAAQA,KAIVogB,EAAKa,wBAdFK,GAiBR,IAAI,KAIb,EA+BAT,GAAyBhV,aAAe,CACtCmV,uBAAuB,EACvBf,uBAAmBngB,EACnBihB,aAAc5pB,IAAAA,KACd8pB,yBAAqBnhB,GAGhB,IAAMmiB,GAAmBpR,EAAoBgQ,IDrHZ,WAAH,MAAU,CAC7Ce,0BAA2B,CACzB,mBAAoB,CAClB1W,SAAU,GACVE,WAAY,IACZD,WAAY,OACZF,MAAO,UACPiX,aAAc,EACdC,UAAW,EACX,gBAAiB,CACfA,UAAW,IAGf,qBAAsB,CACpBvX,OAAQ,SAGb,I,uCEfYwX,IAAWtX,EAAAA,EAAAA,GAAW,CACjCZ,UAAQxL,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACN4K,QAAS,SACNC,EAAAA,GAAWW,SAAS,WAAS,IAChCO,aAAc,WACdC,WAAY,aCkCH2X,GAAuB,SAAH32B,GAE1B,IADC42B,EAAG52B,EAATqL,KAAWwrB,EAAe72B,EAAf62B,gBAAiBC,EAAoB92B,EAApB82B,qBAAsBC,EAAa/2B,EAAb+2B,cAE5CC,EApCmB,SAAC3rB,EAAM4rB,GAEhC,IAAK5rB,IAAS4rB,GAAUxrB,IAAAA,QAAUwrB,GAChC,MAAO,CAAC,CAAEC,SAAS,EAAO7rB,KAAAA,EAAM8rB,IAAK,IAUvC,IANA,IAAMC,EAAY/rB,EAAKgsB,cACjBC,EAAcL,EAAOI,cAEvBE,EAAa,EACXC,EAAY,GAEXD,EAAalsB,EAAK8I,QAAQ,CAC/B,IAAM8e,EAAQmE,EAAUK,QAAQH,EAAaC,GAC7C,IAAe,IAAXtE,EAAc,CAChBuE,EAAU9qB,KAAK,CAAEwqB,SAAS,EAAO7rB,KAAMA,EAAKqsB,UAAUH,KACtD,KACF,CAAWtE,EAAQsE,GACjBC,EAAU9qB,KAAK,CAAEwqB,SAAS,EAAO7rB,KAAMA,EAAKqsB,UAAUH,EAAYtE,KAClEuE,EAAU9qB,KAAK,CAAEwqB,SAAS,EAAM7rB,KAAMA,EAAKqsB,UAAUzE,EAAOA,EAAQgE,EAAO9iB,UAC3EojB,EAAatE,EAAQgE,EAAO9iB,SAE5BqjB,EAAU9qB,KAAK,CAAEwqB,SAAS,EAAM7rB,KAAMA,EAAKqsB,UAAUzE,EAAOA,EAAQgE,EAAO9iB,UAC3EojB,EAAatE,EAAQgE,EAAO9iB,OAEhC,CAIA,OAD2BqjB,EAAUviB,KAAI,SAAC0iB,EAAGR,GAAG,OAAAnkB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAW2kB,GAAC,IAAER,IAAAA,GAAG,GAEnE,CAKwBS,CAAYhB,EAAKC,GAEjCgB,GACJ34B,EAAAA,EAAAA,KAAA,QAAMuB,UAAU,yBAAwBxB,SAEpC+3B,EAAc/hB,KAAI,SAAAC,GAAA,IAAGgiB,EAAOhiB,EAAPgiB,QAAS7rB,EAAI6J,EAAJ7J,KAAM8rB,EAAGjiB,EAAHiiB,IAAG,OACrCj4B,EAAAA,EAAAA,KAAA,QAAsBuB,UAAWy2B,GAAUjX,EAAAA,EAAAA,GAAa,mBAAoB6W,GAAwB,cAAc73B,SAAEoM,GAAI,IAAAsB,OAAzGwqB,GAAiH,MAKlIpX,EAAU2W,KAEhB,OAAOK,GACL73B,EAAAA,EAAAA,KAAC44B,GAAAA,EAAO,CACND,SAAS34B,EAAAA,EAAAA,KAAA,QAAMuB,UAAU,4BAA2BxB,SAAE23B,IACtDmB,aAAa,eACbC,WAAS,EACTC,YAAY,cAAah5B,UAEzBC,EAAAA,EAAAA,KAAA,OAAKuB,UAAWsf,EAAQvB,SAASvf,SAC9B44B,MAGHA,CACN,EASAlB,GAAqBxW,aAAe,CAClC9U,KAAM,GACNwrB,qBAAiBziB,EACjB0iB,qBAAsB,mBACtBC,eAAe,GAGV,IAAMmB,GAAoBvB,GC3EpBwB,GAA+B,WAAH,MAAU,CACjDva,QAAS,OACT0K,cAAe,SACf8P,SAAU,SACVtE,UAAW,aAGX,uBAAqB9gB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACnB4K,QAAS,OACT4I,WAAY,EACZC,SAAU,EACV1I,eAAgB,gBAChB2B,WAAY,IACZF,SAAU,QACP3B,EAAAA,GAAWqB,OAAO,OAAQ,QAAM,IAEnC,4BAA0BlM,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACxBwT,WAAY,EACZC,SAAU,GACP5I,EAAAA,GAAWW,SAAS,WAAS,IAChC4K,YAAa,SAGf,yBAA0B,CACxB5C,WAAY,EACZC,SAAU,GAGZ,sBAAuB,CACrBtI,gBAAiB+K,GAAAA,EAAOmP,iCAG7B,EAEYC,GAAoC,WAAH,MAAU,CAEtDC,wCAAyC,CACvC,uBAAqBvlB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAChB6K,EAAAA,GAAWW,SAAS,WACpBX,EAAAA,GAAWK,aAAa,QAG7B,uBAAwB,CACtBsa,WAAY,UAGd,UAAW,CACT,uBAAwB,CACtBA,WAAY,UAIZ,2BAA4B,CAC1BjZ,MAAO2J,GAAAA,EAAOC,kCAKpB,sBAAuB,CACrBqP,WAAY,UAIZ,2BAA4B,CAC1BjZ,MAAO2J,GAAAA,EAAOC,kCAKpBsP,wBAAyB,CACvB,uBAAqBzlB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAChB6K,EAAAA,GAAWW,SAAS,WACpBX,EAAAA,GAAWK,aAAa,QAG7B,uBAAwB,CACtBsa,WAAY,UAIZ,2BAA4B,CAC1BjZ,MAAO2J,GAAAA,EAAOC,kCAIrB,EC3FYuP,GAAa,CACxBvV,KAAM,CACJrB,SAAU,WACVvB,IAAK,MACLwI,WAAY,OACZK,YAAa,QAcJuP,KAVkB3lB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAC1B0lB,IAAU,IACbvV,MAAInQ,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACC0lB,GAAWvV,MAAI,IAClB5C,IAAK,MACL1hB,MAAO,OACPunB,QAAS,QAIyB8G,EAAAA,GAAAA,GAAgB,CACpDtP,QAAS,OACTwa,SAAU,SACVtE,UAAW,aACXh1B,OAAQ,OAER,+BAA6BkU,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAC3B4K,QAAS,OACT0K,cAAe,MACf7B,SAAU,EACVD,WAAY,EAEZzI,eAAgB,aAChBC,WAAY,SACZG,gBAAiB,QACdN,EAAAA,GAAWC,QAAQ,SAAO,IAC7B8a,OAAQ,WAEL/a,EAAAA,GAAWK,aAAa,QDvCH,CAC1B4D,SAAU,WACVgE,KAAM,EACNvF,IAAK,EACLwF,MAAO,EACPvF,OAAQ,ICmCS,IAEf,sBAAuB,CACrB5C,QAAS,OACT6I,SAAU,EACVD,WAAY,EACZ4C,YAAa,QAGf,kBAAgBpW,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACd4K,QAAS,OACT0K,cAAe,SACf7B,SAAU,EACVD,WAAY,EACZzI,eAAgB,gBAChBjf,OAAQ,OACR+5B,WAAY,OAEThb,EAAAA,GAAWW,SAAS,WAAS,IAChCQ,WAAY,SAEZ,iBAAkB,CAChBJ,UAAW,SACXc,WAAY,IACZF,SAAU,OACVC,WAAY,OAEZ,sBAAuB,CACrBtB,gBAAiB+K,GAAAA,EAAOmP,gCAI5B,+BAA6BrlB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAC3B4K,QAAS,OACT0K,cAAe,OACZzK,EAAAA,GAAWC,QAAQ,QAAM,IAE5B,oBAAkB9K,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAChB4K,QAAS,SACNC,EAAAA,GAAWW,SAAS,WAAS,IAChCQ,WAAY,SACZD,aAAc,WAEdH,UAAW,SACXc,WAAY,IACZF,SAAU,OACVC,WAAY,OACZZ,UAAW,QAEXiD,SAAU,WACVvB,IAAK,MAEL,gBAAiB,CACfwI,WAAY,OACZK,YAAa,MACb5J,SAAU,OACV,gBAAiB,CACfuJ,WAAY,QAIhB,SAAU,CACRqH,cAAe,SAInB,gBAAiB,CACf5Q,SAAU,cAMlB,8BAA+B,CAC7BsZ,aAAc,QAGhB,2BAA4B,CAC1BhX,SAAU,WACVvB,IAAK,EACLC,OAAQ,EACRuF,MAAO,EACPlnB,MAAO,OACP+e,QAAS,OACTI,WAAY,SACZD,eAAgB,UAGlB,sCAAuC,CACrCjf,OAAQ,QAGV,0BAA2B,CACzBqf,gBAAiB,YCjHrB,SAAS4a,GAAmB/4B,GAGxB,IAFFg5B,EAAQh5B,EAARg5B,SACA/4B,EAAID,EAAJC,KAEIg5B,EAAsB,GACtBC,EAAkB,GAClBC,EAAkB,GAiBtB,OAhBiC,IAA7BH,EAASI,gBACXH,EAAsBh5B,EAAKI,UAAUC,mBAA0B,CAAE+4B,MAAOL,EAASI,kBACvE3tB,IAAAA,YAAcutB,EAASI,mBACjCH,EAAsBh5B,EAAKI,UAAUC,oBAA2B,CAAE+4B,MAAOL,EAASI,mBAElD,IAA9BJ,EAASM,iBACXJ,EAAkBj5B,EAAKI,UAAUC,kBAAyB,CAAE+4B,MAAOL,EAASM,mBAClE7tB,IAAAA,YAAcutB,EAASM,oBACjCJ,EAAkBj5B,EAAKI,UAAUC,mBAA0B,CAAE+4B,MAAOL,EAASM,oBAE7C,IAA9BN,EAASO,iBACXJ,EAAkBl5B,EAAKI,UAAUC,kBAAyB,CAAE+4B,MAAOL,EAASO,mBAClE9tB,IAAAA,YAAcutB,EAASO,oBACjCJ,EAAkBl5B,EAAKI,UAAUC,mBAA0B,CAAE+4B,MAAOL,EAASO,oBAEnE,CAACN,EAAqBC,EAAiBC,GAAiBhf,QAAO,SAAApH,GAAI,MAAa,KAATA,CAAW,IAAEnG,KAAK,KAEvG,CAEA,IAiBM4sB,GAAkB,SAAHje,GAAA,IAAMyd,EAAQzd,EAARyd,SAAUv4B,EAAS8a,EAAT9a,UAAWR,EAAIsb,EAAJtb,KAAM0vB,EAAapU,EAAboU,cAAa,OACjEzwB,EAAAA,EAAAA,KAAC44B,GAAAA,EAAO,CACND,QAASkB,GAAoB,CAAEC,SAAAA,EAAU/4B,KAAAA,IACzC83B,aAAa,QACbE,YAAY,cACZD,WAAS,EAAA/4B,SAEN0wB,GAsBCzwB,EAAAA,EAAAA,KAAA,QAAMuB,UAAU,aAAYxB,SAAEgB,EAAKI,UAAUC,cArB/C3B,EAAAA,EAAAA,MAAA,OAAK8B,UAAWmjB,IAAW,sBAAuBnjB,GAAWxB,SAAA,EACzDwM,IAAAA,YAAcutB,EAASI,mBACvBz6B,EAAAA,EAAAA,MAAColB,EAAAA,SAAc,CAAA9kB,SAAA,EACbC,EAAAA,EAAAA,KAACu6B,GAAAA,IAAa,CAACh5B,UAAU,gBACzBvB,EAAAA,EAAAA,KAAA,QAAMuB,UAAU,uBAAsBxB,SAAE+5B,EAASI,sBAGnD3tB,IAAAA,YAAcutB,EAASM,oBACvB36B,EAAAA,EAAAA,MAAColB,EAAAA,SAAc,CAAA9kB,SAAA,EACbC,EAAAA,EAAAA,KAACw6B,GAAAA,IAAY,CAACj5B,UAAU,gBACxBvB,EAAAA,EAAAA,KAAA,QAAMuB,UAAU,mBAAkBxB,SAAE+5B,EAASM,uBAG/C7tB,IAAAA,YAAcutB,EAASO,oBACvB56B,EAAAA,EAAAA,MAAColB,EAAAA,SAAc,CAAA9kB,SAAA,EACbC,EAAAA,EAAAA,KAACy6B,GAAAA,IAAY,CAACl5B,UAAU,gBACxBvB,EAAAA,EAAAA,KAAA,QAAMuB,UAAU,mBAAkBxB,SAAE+5B,EAASO,0BAO7C,EAcNK,GAAkB,SAAHzc,GAiBd,IAhBLpK,EAAIoK,EAAJpK,KACA8jB,EAAe1Z,EAAf0Z,gBACAgD,EAAa1c,EAAb0c,cACA55B,EAAIkd,EAAJld,KACA65B,EAAU3c,EAAV2c,WACArM,EAAQtQ,EAARsQ,SACAsM,EAAQ5c,EAAR4c,SACAC,EAAgB7c,EAAhB6c,iBAEAC,EAAe9c,EAAf8c,gBAEA3J,EAASnT,EAATmT,UACAE,EAAMrT,EAANqT,OACA0J,EAAiB/c,EAAjB+c,kBACAtI,EAASzU,EAATyU,UACAC,EAAM1U,EAAN0U,OAEMsI,EAA0BxB,KAChCyB,EAEIrnB,GAAQ,CAAC,EADXsnB,EAAUD,EAAVC,WAAYC,EAASF,EAATE,UAAW7kB,EAAM2kB,EAAN3kB,OAGnBujB,GAAW/V,EAAAA,EAAAA,UAAQ,kBArFH,SAAH/N,GAAyC,IAAnC8kB,EAAgB9kB,EAAhB8kB,iBAAkBO,EAASrlB,EAATqlB,UACrCC,EAAS,CACbpB,gBAAiBmB,EAAUE,iBAW7B,OATIT,IAAqBzyB,GAAAA,GAAgBC,MACvCgzB,EAAOlB,iBAAmBiB,EAAUG,iBAC3BV,IAAqBzyB,GAAAA,GAAgBE,MAC9C+yB,EAAOjB,iBAAmBgB,EAAUI,iBAC1BX,IACVQ,EAAOlB,iBAAmBiB,EAAUG,iBACpCF,EAAOjB,iBAAmBgB,EAAUI,kBAG/BH,CACT,CAuEiCI,CAAgB,CAAEZ,iBAAAA,EAAkBO,UAAWD,GAAY,GAAE,CAACN,EAAkBM,IACzG3K,GAAiBlkB,IAAAA,YAAc6uB,EAAUO,aAAwC,IAAzBP,EAAUO,WAElEjK,GAAe3N,EAAAA,EAAAA,UAAQ,kBArCJ,SAAH4S,GAAoB,IAAdpgB,EAAMogB,EAANpgB,OACtBqlB,EAAarvB,IAAAA,MAAQgK,IAAW,CAAC,EAGvC,OAAIqlB,EAAWC,kBAAoBxzB,GAAAA,GAAgBE,MACpB,WAAtBqzB,EAAW1kB,OAAsB0kB,EAAWlK,aAAe,GAG7DkK,EAAWrnB,GACpB,CA4BqCunB,CAAmB,CAAEvlB,OAAAA,GAAS,GAAE,CAACA,IAE9DyE,GAAUkK,EAAAA,EAAAA,cAAY,WAC1ByV,EAAc9mB,EAChB,GAAG,CAACA,EAAM8mB,IAEJoB,GAAmB7W,EAAAA,EAAAA,cAAY,SAAC8C,EAAO8G,GACvC+L,GACFA,EAAS/L,EAEb,GAAG,CAAC+L,IAEEmB,EAAejB,GAAmBH,EAExC,OACE56B,EAAAA,EAAAA,KAACmxB,GAA0B,CACzBC,UAAWA,EACXvd,KAAMA,EACNwd,gBAAiB2J,EACjB1J,OAAQA,EACRvwB,KAAMA,EACNwtB,SAAUA,EAASxuB,UAEnBC,EAAAA,EAAAA,KAACyyB,GAA0B,CAACC,UAAWA,EAAWC,OAAQA,EAAO5yB,UAC/DC,EAAAA,EAAAA,KAAA,OAAKuB,UAAWmjB,IAAW,0BAA2BuW,GAAyBl7B,UAC7EN,EAAAA,EAAAA,MAACkpB,EAAiB,CAACb,oBAAqB8S,EAAa,uBAAyB,GAAG76B,SAAA,EAE/EN,EAAAA,EAAAA,MAAA,OACE8B,UAAWmjB,IAAW,2BAA4BsX,GAAgB,4BAClEhhB,QAASA,EACT,uBAAiBjb,SAAA,EAEjBC,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,mBAAkBxB,UAC/BC,EAAAA,EAAAA,KAAC4wB,GAAU,CAACJ,kBAAmBkB,EAAcjB,cAAeA,OAE9DhxB,EAAAA,EAAAA,MAAA,OAAK8B,UAAU,cAAaxB,SAAA,EAC1BC,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,cAAaxB,UAC1BC,EAAAA,EAAAA,KAACg5B,GAAiB,CAAC7sB,KAAMgvB,GAAc,GAAIxD,gBAAiBA,EAAiBE,eAAa,OAE5F73B,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,2BAA0BxB,UACvCC,EAAAA,EAAAA,KAACs6B,GAAe,CACdR,SAAUA,EACVv4B,UAAU,gBACVR,KAAMA,EACN0vB,cAAeA,YAKtBuL,GACCv8B,EAAAA,EAAAA,MAAA,OAAK8B,UAAU,wBAAuBxB,SAAA,CACnC66B,IACD56B,EAAAA,EAAAA,KAAC6uB,GAAAA,EAAQ,CAACoN,SAAUF,EAAkBjN,QAASP,EAAUnD,UAAW+P,GAAcp6B,EAAKI,UAAUC,YAE/F25B,IAAoBH,GAAeG,OAEvC,aAMd,EAoBAL,GAAgBzZ,aAAe,CAC7B0W,qBAAiBziB,EACjB0lB,YAAY,EACZrM,UAAU,EACVsM,cAAU3lB,EACV4lB,iBAAkB,KAElBC,qBAAiB7lB,GAGZ,IAAMgnB,GAA2BxB,G,aC9N3ByB,IAA8Bjc,EAAAA,EAAAA,IAAUpM,EAAAA,EAAAA,GAAC,CACpDsoB,8BAA4BtoB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACvBmlB,MAA8B,IAGjC,kCAAmC,CACjCva,QAAS,OACTO,gBAAiB+K,GAAAA,EAAOG,6BAExB,gBAAiB,CACfkS,cAAe,CAAC,CACdC,KAAM,CAAEnT,UAAW,gBACnBoT,GAAI,CAAEpT,UAAW,oBAEnBqT,kBAAmB,OACnBC,wBAAyB,WACzBC,wBAAyB,aAK/BC,wBAAyB,CACvBje,QAAS,OACT0K,cAAe,MACfxG,SAAU,WACVgE,KAAM,OACNtF,OAAQ,MACRI,OAAQ,EAER,gDAA8C5N,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAC5C4K,QAAS,QACNC,EAAAA,GAAWC,QAAQ,IACnBD,EAAAA,GAAWqB,OAAO,IAAE,IACvBkK,YAAa,MACbtqB,OAAQ,OACRqf,gBAAiB,YAEjB,iBAAenL,EAAAA,EAAAA,GAAA,GACV6K,EAAAA,GAAWqB,OAAO,MAIzB,6CAA2ClM,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACtC6K,EAAAA,GAAWC,QAAQ,MAAO,QAAM,IACnCK,gBAAiB,cAKlBma,OCnCQwD,GAA+B,SAAH97B,GAiBlC,IAhBL+S,EAAI/S,EAAJ+S,KACA8jB,EAAe72B,EAAf62B,gBACAjQ,EAAgB5mB,EAAhB4mB,iBACAC,EAAa7mB,EAAb6mB,cACAkV,EAAiB/7B,EAAjB+7B,kBACAjV,EAAoB9mB,EAApB8mB,qBACA7mB,EAAID,EAAJC,KACA65B,EAAU95B,EAAV85B,WACArM,EAAQztB,EAARytB,SACAuO,EAAgBh8B,EAAhBg8B,iBACA9hB,EAAOla,EAAPka,QACA+hB,EAASj8B,EAATi8B,UACA9R,EAAQnqB,EAARmqB,SACAmG,EAAStwB,EAATswB,UACAE,EAAMxwB,EAANwwB,OACA0J,EAAiBl6B,EAAjBk6B,kBAEA3jB,GAAwCC,EAAAA,EAAAA,WAAS,GAAMC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAAhD2lB,EAAazlB,EAAA,GAAE0lB,EAAc1lB,EAAA,GAC9BsJ,EAAUsb,KAEhBnmB,EAOInC,GAAQ,CAAC,EANXmS,EAAIhQ,EAAJgQ,KACAzR,EAAGyB,EAAHzB,IACArU,EAAE8V,EAAF9V,GACA6W,EAAQf,EAARe,SACAmmB,EAAUlnB,EAAVknB,WACAC,EAA0BnnB,EAA1BmnB,2BAGIC,GAAcrZ,EAAAA,EAAAA,UAAQ,WAC1B,IAAMsZ,GACJ59B,EAAAA,EAAAA,MAAC69B,EAAAA,SAAQ,CAAAv9B,SAAA,EACPC,EAAAA,EAAAA,KAACyrB,GAAS,CACRzqB,IAAKuT,EACLrT,IAAK8kB,GAAQ9lB,GAAM,GACnBwrB,aAAa,EACbC,SAAUsR,EACVl8B,KAAMA,KAERtB,EAAAA,EAAAA,MAAA,OAAK8B,UAAWsf,EAAQ8b,wBAAwB58B,SAAA,CAC7Co9B,IAA+Bn2B,GAAAA,GAAuBC,UACrDjH,EAAAA,EAAAA,KAACu9B,GAAS,CACRpxB,KAAMpL,EAAKI,UAAUC,WACrBspB,YAAa,CAAEE,gBAAiB,wBAGnCuS,IAA+Bn2B,GAAAA,GAAuBE,eACrDlH,EAAAA,EAAAA,KAACu9B,GAAS,CACRpxB,KAAMpL,EAAKI,UAAUC,SACrBspB,YAAa,CAAEE,gBAAiB,yBAGlCsS,IAAez2B,GAAAA,GAAgBE,aAAeu2B,IAAez2B,GAAAA,GAAgBK,2BAA6Bo2B,IAAez2B,GAAAA,GAAgBM,wBACzI/G,EAAAA,EAAAA,KAACu9B,GAAS,CACR3uB,KAAMhO,EAAAA,GACN8pB,YAAa,CAAEE,gBAAiB,2BAGnC7T,IACC/W,EAAAA,EAAAA,KAACu9B,GAAS,CACRpxB,KAAMpL,EAAKI,UAAUC,YACrBwN,KAAM4uB,GAAAA,IACN9S,YAAa,CAAEE,gBAAiB,wCAM1C,OAAIiS,EACKA,EAAkBQ,GAEpBA,CACT,GAAG,CAACxc,EAAQ8b,wBAAyB57B,EAAMb,EAAIi9B,EAA4BnX,EAAM6W,EAAmBK,EAAYnmB,EAAUxC,IAEpHkpB,GAA2BvY,EAAAA,EAAAA,cAAY,WAC3C,OAAI0C,EACKA,IAEF,IACT,GAAG,CAACA,IAEE8V,GAAcxY,EAAAA,EAAAA,cAAY,WAC1B0V,GACF5f,EAAQ,CAAEnH,KAAAA,EAAM0a,SAAAA,GAEpB,GAAG,CAAC1a,EAAMmH,EAAS4f,EAAYrM,IAEzBoP,GAAyBzY,EAAAA,EAAAA,cAAY,SAAA0Y,GAAgB,OACzDhD,GACE56B,EAAAA,EAAAA,KAACsuB,GAA+B,CAACza,KAAMA,EAAM0a,SAAUA,EAAUvT,QAASA,EAASoQ,UAAWpF,GAAQjlB,EAAKI,UAAUC,SAAgBotB,UAAW7G,EAAc5nB,SAC3J69B,IAEDA,CAAgB,GACnB,CAAC78B,EAAM4mB,EAAe9T,EAAMmS,EAAMhL,EAAS4f,EAAYrM,IAEpDsP,GAA4B3Y,EAAAA,EAAAA,cAAY,SAAA0Y,GAAgB,OAC5Db,GACE/8B,EAAAA,EAAAA,KAACurB,GAAoC,CAAC1X,KAAMA,EAAMoX,SAAUA,EAASlrB,SAClE69B,IAEDA,CAAgB,GACnB,CAACb,EAAWlpB,EAAMoX,IAErB,OACExrB,EAAAA,EAAAA,MAAA,OAAK8B,UAAWmjB,IAAW,0BAA2B7D,EAAQub,8BAA8Br8B,SAAA,EAC1FC,EAAAA,EAAAA,KAACmxB,GAA0B,CACzBC,UAAWA,EACXvd,KAAMA,EACNwd,gBAAiB2J,EACjB1J,OAAQA,EACRvwB,KAAMA,EACNwtB,SAAUA,EAASxuB,UAEnBC,EAAAA,EAAAA,KAAC+oB,EAA4B,CAC3BpB,cAAeA,EACfD,iBAAkBA,GAAoBsV,EACtCpV,qBAAsB6V,EACtB3V,qBAAsBJ,GAAqB6G,GAAauO,EAAsEjc,EAAQ0Y,wBAA1D1Y,EAAQwY,wCACpFre,QAAS0iB,EAAY39B,SAEpBwM,IAAAA,QAAUsxB,EAA2BF,EAArCpxB,CAA6D6wB,QAGlE39B,EAAAA,EAAAA,MAAA,OAAK8B,UAAU,mBAAkBxB,SAAA,EAC/BC,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,wBAAuBxB,UACpCC,EAAAA,EAAAA,KAACg5B,GAAiB,CAAC7sB,KAAM6Z,GAAQ,GAAI2R,gBAAiBA,EAAiBE,eAAa,MAErF33B,IACCT,EAAAA,EAAAA,MAAA,OAAK8B,UAAU,sBAAqBxB,SAAA,IAAA0N,OAC9B1M,EAAKI,UAAUC,MAAW,MAC9BpB,EAAAA,EAAAA,KAACg5B,GAAiB,CAAC7sB,KAAMjM,EAAIy3B,gBAAiBA,YAM1D,EA8BAiF,GAA6B3b,aAAe,CAC1C0W,qBAAiBziB,EACjBwS,kBAAkB,EAClBC,eAAe,EACfkV,kBAAmB,KACnBjV,qBAAsB,KACtBgT,YAAY,EACZrM,UAAU,EACVvT,aAAS9F,EACT4nB,kBAAkB,EAClBC,WAAW,EACX9R,cAAU/V,EACVkc,WAAW,EACXE,OAAQ/kB,IAAAA,KACRyuB,kBAAmB,G,8BCjMR8C,GAAkB,SAAChc,GAI9B,QAHiBA,EAATjO,MAC4B,CAAC,GAA7BgoB,iBAGN,KAAKxzB,GAAAA,GAAgBC,MACnB,OAAOtI,EAAAA,EAAAA,KAAC+9B,IAAoBjqB,EAAAA,EAAAA,GAAA,GAAKgO,IACnC,KAAKzZ,GAAAA,GAAgBE,MACnB,OAAOvI,EAAAA,EAAAA,KAACg+B,IAAoBlqB,EAAAA,EAAAA,GAAA,GAAKgO,IACnC,QACE,OAAO,KAEb,EAQAgc,GAAgB7c,aAAe,CAC7BpN,KAAM,MC3BD,IAAMsN,IAAYjB,EAAAA,EAAAA,GAAW,CAClC0R,UAAW,CACT,0BAA2B,CACzBlQ,OAAQ,EACR5C,WAAY,MACZD,eAAgB,QAGpByF,cAAYxQ,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACP6K,EAAAA,GAAWqB,OAAO,QAAM,IAC3B6J,WAAY,MAEZ,WAAS/V,EAAAA,EAAAA,GAAA,GACJ6K,EAAAA,GAAWQ,OAAO,MAAO,QAAS,YAGvC,UAAW,CACTF,gBAAiB,e,yBCbVgf,GAAiB,SAACC,EAAIC,GACjC,OAAKD,IAAOC,MAGPD,IAAOC,IAGwB,KAA7BC,EAAAA,GAAAA,kBAAiBF,EAAIC,EAC9B,EAEaE,GAAsB,SAACC,EAAIC,GACtC,OAAMD,IAAOC,GAAQD,IAAOC,MAGvBD,IAAOC,KAGLN,GAAeK,EAAG9vB,MAAO+vB,EAAG/vB,QAAUyvB,GAAeK,EAAG7vB,IAAK8vB,EAAG9vB,KACzE,EAEa+vB,GAAyB,SAACC,GACrC,IAAKA,EAAI,MAAO,GAChB,IAAA39B,EAA6B29B,GAAM,CAAC,EAA5BxwB,EAAInN,EAAJmN,KAAMC,EAAKpN,EAALoN,MAAOC,EAAGrN,EAAHqN,IACrB,MAAM,GAANV,OAAUQ,GAAQ,GAAE,KAAAR,OAAIS,GAAS,GAAE,KAAAT,OAAIU,GAAO,GAChD,EAEauwB,GAA8B,SAACC,GAC1C,OAAKA,EAGC,SAANlxB,OAAgB+wB,GAAuBG,EAAGnwB,OAAM,SAAAf,OAAQ+wB,GAAuBG,EAAGlwB,MAFzE,EAGX,EAQamwB,GAA4B,SAAC79B,EAAM89B,EAAYjxB,EAAUkxB,GACpE,IAAMjxB,EAAW9M,EAAK+M,SAAS,CAAEF,SAAAA,IAC3BG,EAAQ,IAAIC,GAAAA,UAAUH,EAASI,KAAMJ,EAASK,MAAOL,EAASM,KAC9D4wB,EAAYhxB,EAAMM,KAAK,CAAElB,MAAO,IAChCmB,EAAYP,EAAMM,KAAK,CAAElB,MAAO,KACtC,MAAO,CACL6xB,eAAgBj+B,EAAKk+B,gBAAgB3wB,EAAW,CAAE4wB,IAAKL,EAAYjxB,SAAAA,IACnEuxB,aAAcp+B,EAAKk+B,gBAAgBF,EAAW,CAAEG,IAAKL,EAAYjxB,SAAAA,IACjEwxB,UAAWN,EACXO,QAAS,EAEb,ECjDMC,GAA0B,SAACC,EAAWC,GAK1C,QAJcjzB,IAAAA,KAAOgzB,GAAW,SAACE,GAE/B,OADqBlzB,IAAAA,IAAMkzB,EAAK,CAAC,OAAQ,QAAS,EAAG,QAAS,KAAOA,KAC7CD,CAC1B,GAMF,EAsBaE,GAA6B,SAAHrjB,GAAoC,IAA9BkjB,EAASljB,EAATkjB,UAAWlnB,EAAGgE,EAAHhE,IAAKuD,EAAMS,EAANT,OAC3D,OAAI2jB,EAAUtqB,OAAS,GAAKqqB,GAAwBC,EAAW,gCAGtD,CAAEI,OAFK1jB,EAAAA,GAAAA,IAA6B5D,EAAKuD,IAK3C,IACT,E,kDC3CagkB,GAAkB,SAAAC,GAAM,OAAI,IAAIC,GAAAA,SAAQ,SAACC,EAASlqB,GAC7D,IAAMkF,EAAQ,IAAIzS,MAClByS,EAAM8R,OAAS,WACbkT,EAAQhlB,EACV,EACAA,EAAM6R,QAAU,WACd/W,EAAO,IAAImqB,MAAM,wBACnB,EACAjlB,EAAMklB,YAAc,GACpBllB,EAAM/Z,IAAM6+B,CACd,GAAG,EAEUK,GAAyB,SAACvgC,EAAOC,GAC5C,IAAMugC,EAAStO,SAASC,cAAc,UACtCqO,EAAOxgC,MAAQA,EACfwgC,EAAOvgC,OAASA,EAChB,IAAMwgC,EAAUD,EAAOE,WAAW,MAClC,MAAO,CACLF,OAAAA,EACAC,QAAAA,EAEJ,EAEaE,GAAiB,SAACvlB,EAAOwlB,EAAYC,GAChD,IAAAC,EAGIP,GAAuBK,EAAYC,GAFrCL,EAAMM,EAANN,OACAC,EAAOK,EAAPL,QAMF,OAHAA,EAAQM,UAAU3lB,EAAO,EAAG,GACVqlB,EAAQO,aAAa,EAAG,EAAGR,EAAOxgC,MAAOwgC,EAAOvgC,QACzCiZ,IAE3B,EAEa+nB,GAAyB,SAAH9/B,GAAA,IACjCw6B,EAAMx6B,EAANw6B,OACAuF,EAAQ//B,EAAR+/B,SACAN,EAAUz/B,EAAVy/B,WACAC,EAAW1/B,EAAX0/B,YAAW,OACP,IAAIV,GAAAA,SAAQ,SAACC,EAASlqB,GAC1B,IAAQirB,EAA4BxF,EAA5BwF,wBACFC,GAAqBC,EAAAA,GAAAA,WAAUF,GACjCv0B,IAAAA,YAAcw0B,IAChBlrB,EAAO,IAAImqB,MAAM,2BAEnB,IAAAiB,EAGIF,EAFFG,MAAAA,OAAK,IAAAD,EAAG,GAAEA,EACJE,EACJJ,EADFloB,KAIIuoB,EAAc,SAACC,EAAOC,EAAGC,EAAGC,GAGhC,IAFA,IAAMC,EAAM,GACR1N,EAAQ,EACH2N,EAAI,EAAGA,EAAIJ,EAAGI,GAAK,EAAG,CAE7B,IADA,IAAMC,EAAS,GACNC,EAAI,EAAGA,EAAIL,EAAGK,GAAK,EAAG,CAE7B,IADA,IAAMC,EAAS,GACNC,EAAI,EAAGA,EAAIN,EAAGM,GAAK,EAC1BD,EAAOr0B,KAAK6zB,EAAMtN,IAClBA,GAAS,EAEX4N,EAAOn0B,KAAKq0B,EACd,CACAJ,EAAIj0B,KAAKm0B,EACX,CACA,OAAOF,CACT,EA8BA,SAAAM,IAFC,OAEDA,GAAAC,EAAAA,GAAAA,IAAAC,EAAAA,GAAAA,KAAAC,MA5BA,SAAAC,EAAyCC,EAAcd,EAAGC,EAAGC,GAAC,IAAAa,EAAAC,EAAAZ,EAAAa,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,OAAAZ,EAAAA,GAAAA,KAAAa,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OAI5D,IAFMZ,EAAea,KAAKd,GACpBE,EAAY,IAAIa,WAAWd,EAAaptB,QACrCysB,EAAI,EAAGA,EAAIW,EAAaptB,OAAQysB,GAAK,EAC5CY,EAAUZ,GAAKW,EAAae,WAAW1B,GAWoB,OAPvDa,EAAc,IAAIc,KAAK,CAACf,IAAYgB,SAGpCd,EAAsB,IAAIe,oBAAoB,QAC9Cd,EAAqBF,EAAYiB,YAAYhB,GAG7CE,EAAuB,IAAIe,SAAShB,GAAmBM,EAAAE,KAAA,EAC5BP,EAAqBgB,cAAc,KAAD,EAMR,OANrDf,EAAkBI,EAAAY,KAGlBf,EAAoB,IAAIO,WAAWR,GAGnCE,EAAazB,EAAYwB,EAAmBtB,EAAGC,EAAGC,GAAEuB,EAAAa,OAAA,SAEnDf,GAAU,yBAAAE,EAAAc,OAAA,GAAA1B,EAAA,MAClB2B,MAAA,KAAA9uB,UAAA,EA5BC,SAEsC+uB,EAAAC,EAAAC,EAAAC,GAAA,OAAAnC,EAAA+B,MAAC,KAAD9uB,UAAA,EA6BxCmvB,CAA0BhD,EAAgBD,EAAM,GAAIA,EAAM,GAAIA,EAAM,IACjEkD,MAAK,SAACC,GACL,IAAMC,EAAgBD,EAAgBtuB,KAAI,SAAAwuB,GAAG,OAAIA,EAAIxuB,KAAI,SAAAyuB,GAAC,OAAIA,EAAE,EAAE,GAAC,IAAEC,OAC/DC,EAAaL,EAAgBtuB,KAAI,SAAAwuB,GAAG,OAAIA,EAAIxuB,KAAI,SAAAyuB,GAAC,OAAIA,EAAE,EAAE,GAAC,IAAEC,OAC5DE,EAAqBp4B,IAAAA,OAASA,IAAAA,KAAO+3B,IAAgB,SAAAM,GAAS,OAAIA,EAAY,CAAC,IACrFhF,GAAgBiB,GAAUuD,MAAK,SAACrpB,GAC9B,IAAA8pB,EAGI3E,GAAuBK,EAAYC,GAFrCL,EAAM0E,EAAN1E,OACAC,EAAOyE,EAAPzE,QAMF,OAHAA,EAAQM,UAAU3lB,EAAO,EAAG,GACVqlB,EAAQO,aAAa,EAAG,EAAGR,EAAOxgC,MAAOwgC,EAAOvgC,QACzCiZ,IAE3B,IAAGurB,MAAK,SAACU,GACP,GAAIA,GAAuBR,EAAe,CASxC,IANA,IAAAS,EAGI7E,GAAuBK,EAAYC,GAFrCL,EAAM4E,EAAN5E,OAGI6E,EAFGD,EAAP3E,QAEwBO,aAAa,EAAG,EAAGR,EAAOxgC,MAAOwgC,EAAOvgC,QAC5DqlC,EAASD,EAAUnsB,KAChB6oB,EAAI,EAAGA,EAAIuD,EAAOhwB,OAAQysB,GAAK,EAClC4C,EAAc5C,EAAI,GAAK,IACzBuD,EAAOvD,GAAKoD,EAAoBpD,GAChCuD,EAAOvD,EAAI,GAAKoD,EAAoBpD,EAAI,GACxCuD,EAAOvD,EAAI,GAAKoD,EAAoBpD,EAAI,GACxCuD,EAAOvD,EAAI,GAAKgD,EAAWhD,EAAI,IAInC,IAAAwD,EAAyDhF,GAAuBK,EAAYC,GAA3E2E,EAAaD,EAAtB9E,QAAgCgF,EAAYF,EAApB/E,OAChCgF,EAAcE,aAAaL,EAAW,EAAG,GACzCjF,EAAQ,CACNe,wBAAAA,EACAwD,cAAAA,EACAI,WAAAA,EACAC,mBAAAA,EACAW,0BAA2BF,EAAaG,aAE5C,MACE1vB,EAAO,IAAImqB,MAAM,0BAErB,GACF,IACCwF,OAAM,WACL3vB,EAAO,IAAImqB,MAAM,0BACnB,GACJ,GAAG,EAWI,SAASyF,GAAwBnE,EAAGC,EAAGhB,EAAYmF,GACxD,GAAIpE,EAAI,GAAKC,EAAI,EACf,OAAO,KAGT,IAAM5hC,EAAQ4gC,EAKd,OAAOmF,EAFQC,SAASpE,EAAG,IAAM5hC,EAASgmC,SAASrE,EAAG,IAGxD,CAEO,SAASsE,GAAsB7qB,EAAOwlB,EAAYC,EAAangB,EAAOqlB,EAAmBG,EAAenB,GAG7G,IAAAoB,EAzBK,SAAkBC,GACvB,IAAMzK,EAAS,4CAA4C0K,KAAKD,GAChE,OAAOzK,EAAS,CACd2K,EAAGN,SAASrK,EAAO,GAAI,IACvB4K,EAAGP,SAASrK,EAAO,GAAI,IACvB6K,EAAGR,SAASrK,EAAO,GAAI,KACrB,IACN,CAkBsB8K,CAAS/lB,GAArB4lB,EAACH,EAADG,EAAGC,EAACJ,EAADI,EAAGC,EAACL,EAADK,EACdE,EAGInG,GAAuBK,EAAYC,GAFrCL,EAAMkG,EAANlG,OACAC,EAAOiG,EAAPjG,QAGFA,EAAQM,UAAU3lB,EAAO,EAAG,GAG5B,IAFA,IAAMiqB,EAAY5E,EAAQO,aAAa,EAAG,EAAGR,EAAOxgC,MAAOwgC,EAAOvgC,QAC5DqlC,EAASD,EAAUnsB,KAChB6oB,EAAI,EAAGA,EAAIuD,EAAOhwB,OAAQysB,GAAK,EACtC,GAAKmE,EAAc1qB,SAASuqB,EAAkBhE,EAAI,IAK3C,CACL,IAAM4E,EAAQ5B,EAAWhD,EAAI,GAAK,IAC5B6E,GAAS,EAAID,GAASL,EAAOK,EAASrB,EAAOvD,GAC7C8E,GAAS,EAAIF,GAASJ,EAAOI,EAASrB,EAAOvD,EAAI,GACjD+E,GAAS,EAAIH,GAASH,EAAOG,EAASrB,EAAOvD,EAAI,GACvDuD,EAAOvD,GAAK6E,EACZtB,EAAOvD,EAAI,GAAK8E,EAChBvB,EAAOvD,EAAI,GAAK+E,EAChBxB,EAAOvD,EAAI,GAAK,GAClB,MAbEuD,EAAOvD,GAAKuE,EACZhB,EAAOvD,EAAI,GAAKwE,EAChBjB,EAAOvD,EAAI,GAAKyE,EAChBlB,EAAOvD,EAAI,GAAK,IAapB,IAAAgF,EAAyDxG,GAAuBK,EAAYC,GAA3E2E,EAAauB,EAAtBtG,QAAgCgF,EAAYsB,EAApBvG,OAEhC,OADAgF,EAAcE,aAAaL,EAAW,EAAG,GAClCI,EAAaG,WACtB,CAEO,SAASoB,GAAuB5rB,EAAOwlB,EAAYC,EAAasE,EAAqBY,EAAmBkB,EAAOC,EAAOC,GAG3H,IAAAC,EAGI7G,GAAuBK,EAAYC,GAFrCL,EAAM4G,EAAN5G,OACAC,EAAO2G,EAAP3G,QAGE0G,GACF1G,EAAQM,UAAU3lB,EAAO,EAAG,GAM9B,IAHA,IAAMiqB,EAAY5E,EAAQO,aAAa,EAAG,EAAGR,EAAOxgC,MAAOwgC,EAAOvgC,QAC5DqlC,EAASD,EAAUnsB,KAEhB6oB,EAAI,EAAGA,EAAIuD,EAAOhwB,OAAQysB,GAAK,EAClCkF,EAAMzrB,SAASuqB,EAAkBhE,EAAI,MACnCmF,GACF5B,EAAOvD,GAAKoD,EAAoBpD,GAChCuD,EAAOvD,EAAI,GAAKoD,EAAoBpD,EAAI,GACxCuD,EAAOvD,EAAI,GAAKoD,EAAoBpD,EAAI,GACxCuD,EAAOvD,EAAI,GAAKoD,EAAoBpD,EAAI,KAExCuD,EAAOvD,GAAK,EACZuD,EAAOvD,EAAI,GAAK,EAChBuD,EAAOvD,EAAI,GAAK,EAChBuD,EAAOvD,EAAI,GAAK,IAKtB,IAAAsF,EAAyD9G,GAAuBK,EAAYC,GAA3E2E,EAAa6B,EAAtB5G,QAAgCgF,EAAY4B,EAApB7G,OAChCgF,EAAcE,aAAaL,EAAW,EAAG,GAEzC,IAAMiC,EAAO,EAAE,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAGjE7G,EAAQ8G,UAAU,EAAG,EAAG/G,EAAOxgC,MAAOwgC,EAAOvgC,QAE7C,IAAK,IAAI8hC,EAAI,EAAGA,EAAIuF,EAAKhyB,OAAQysB,GAAK,EACpCtB,EAAQM,UAAU0E,EALV,EAKwB6B,EAAKvF,GAL7B,EAKqCuF,EAAKvF,EAAI,IAQxD,OAJAtB,EAAQ+G,yBAA2B,YACnC/G,EAAQgH,UAAY,UACpBhH,EAAQiH,SAAS,EAAG,EAAGlH,EAAOxgC,MAAOwgC,EAAOvgC,QAEpC,CACN0nC,eAAgBnH,EAAOoF,YACvBgC,iBAAkBnC,EAAaG,YAEnC,CAEO,SAASiC,GAAuBjH,EAAYC,EAAasE,EAAqBY,EAAmB+B,EAAcC,GACpH,IAAAC,EAGIzH,GAAuBK,EAAYC,GAFrCL,EAAMwH,EAANxH,OACAC,EAAOuH,EAAPvH,QAGI4E,EAAY5E,EAAQO,aAAa,EAAG,EAAGR,EAAOxgC,MAAOwgC,EAAOvgC,QAC5DqlC,EAASD,EAAUnsB,KAEzB,GAAIisB,EACF,IAAK,IAAIpD,EAAI,EAAGA,EAAIuD,EAAOhwB,OAAQysB,GAAK,EAClCgE,EAAkBhE,EAAI,KAAOgG,IAC3BD,EAAatsB,SAASusB,IACxBzC,EAAOvD,IAAMoD,EAAoBpD,GAAK,MAAQ,EAC9CuD,EAAOvD,EAAI,IAAMoD,EAAoBpD,EAAI,GAAK,MAAQ,EACtDuD,EAAOvD,EAAI,IAAMoD,EAAoBpD,EAAI,GAAK,MAAQ,EACtDuD,EAAOvD,EAAI,GAAKoD,EAAoBpD,EAAI,IAC/BgG,EAAY,IACrBzC,EAAOvD,GAAKoD,EAAoBpD,GAChCuD,EAAOvD,EAAI,GAAKoD,EAAoBpD,EAAI,GACxCuD,EAAOvD,EAAI,GAAKoD,EAAoBpD,EAAI,GACxCuD,EAAOvD,EAAI,GAAK,MAQxB,OAFAtB,EAAQiF,aAAaL,EAAW,EAAG,GAE5B7E,EAAOoF,WAChB,C,iBCzSaqC,GACF,EADEA,GAEY,EAFZA,GAGO,EAHPA,GAIG,EAJHA,GAKA,EALAA,GAMK,EANLA,GAOL,EAPKA,GAQL,EAOKC,IAAsB1/B,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAA,GAChCy/B,GAA6BxmC,aAC7BwmC,GAA+BxmC,QAC/BwmC,GAA0BxmC,QAC1BwmC,GAA0BxmC,QAC1BwmC,GAAsCxmC,aACtCwmC,GAA2CxmC,aAC3CwmC,GAAkCxmC,aAClCwmC,GAAoCxmC,QAG1B0mC,GAAiB,SAAAC,GAAQ,OAAIp7B,KAAKC,MAAMm7B,EAAW,IAAS,EAE5DC,GAAwB,SAACroC,EAAOC,GAe3C,IAdA,IAAMqoC,EAAatoC,EAAQC,EAUvBsoC,EAAe,KACfC,EAAcx7B,KAAKy7B,IAAIH,EAAaC,GAGxCG,EAAA,EAAAC,EAA6BC,OAAO/Y,QAbrB,CACb,OAAS,GAAK,EACd,OAAS,EAAI,GACb,MAAQ,EAAI,EACZ,MAAQ,EACR,OAAS,EAAI,GACb,OAAS,GAAK,EACd,MAAQ,EAAI,IAMqC6Y,EAAAC,EAAArzB,OAAAozB,IAAE,CAAhD,IAAAG,GAAAhxB,EAAAA,GAAAA,GAAA8wB,EAAAD,GAAA,GAAOI,EAAKD,EAAA,GAAEE,EAAKF,EAAA,GAChBG,EAAOh8B,KAAKy7B,IAAIH,EAAaS,GAC/BC,EAAOR,IACTA,EAAcQ,EACdT,EAAeO,EAEnB,CAGA,OAAOP,CACT,EAEaU,GAAuB,SAACC,GACnC,GAAIC,MAAMC,QAAQF,GAChB,OAAOA,EAAI9yB,IAAI6yB,IACV,GAAY,OAARC,GAA+B,kBAARA,EAAkB,CAClD,IAAMG,EAAe,CAAC,EAYtB,OAXAT,OAAOU,KAAKJ,GAAKK,SAAQ,SAACh9B,GACZ,OAARA,EACF88B,EAAa5vB,GAAKusB,SAASkD,EAAI38B,GAAM,IACpB,YAARA,EACT88B,EAAaG,QAAU,OACD,OAAbN,EAAI38B,GACb88B,EAAa98B,GAAO,GACH,SAARA,IACT88B,EAAa98B,GAAO08B,GAAqBC,EAAI38B,IAEjD,IACO88B,CACT,CACA,OAAOH,CACT,EAEaO,GAAkB,CAC7BziC,YAAa,eC3ET0iC,GAAsB,SAAC5J,GAC3B,IAAQzZ,EAAyByZ,EAAzBzZ,KAAMsjB,EAAmB7J,EAAnB6J,QAASC,EAAU9J,EAAV8J,MACvB,OAAID,GAAWC,EACP,UAAN97B,OAAiBuY,EAAI,eAAAvY,OAAc67B,EAAO,aAAA77B,OAAY87B,GAEjD9wB,KAAK+wB,UAAU/J,IAAQ,oBAChC,EAEagK,GAAiB,SAAChK,GAC7B,IAAKA,EACH,MAAO,GAGT,GAAIlzB,IAAAA,SAAWkzB,GACb,OAAOA,EAGT,GAAIlzB,IAAAA,SAAWkzB,GAAM,CACnB,IAAIiK,EAAML,GAAoB5J,GAI9B,OAHIA,EAAIkK,cACND,GAAG,eAAAj8B,OAAmB47B,GAAoB5J,EAAIkK,eAEzCD,CACT,CAEA,OAAOjxB,KAAK+wB,UAAU/J,EACxB,ECzBamK,GAA4B,WACvC,IAD+E,IAAD9oC,EAAAkU,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAP,CAAC,EAA9B60B,EAAU/oC,EAAV+oC,WAAUC,EAAAhpC,EAAEqlB,QAAAA,OAAO,IAAA2jB,EAAG,CAAC,EAACA,EACzDpI,EAAI,EAAGA,EAAIn1B,IAAAA,KAAOs9B,GAAanI,GAAK,EAAG,CAC9C,IAAMpG,EAASuO,EAAWnI,GAAGvb,GAE7B,GAAImV,EACF,OAAOA,CAEX,CAEA,MAAO,EACT,ECLMyO,GAA6B,CACjCC,gBAAiB5oC,0GACjB6oC,sBAAuB7oC,wGACvB8oC,uBAAwB9oC,yGACxB+oC,qBAAsB/oC,8EAGlBgpC,GAA0B,SAAHtpC,GAEtB,IADLupC,EAAKvpC,EAALupC,MAAOhyB,EAAGvX,EAAHuX,IAAKuD,EAAM9a,EAAN8a,OAAQ7a,EAAID,EAAJC,KAEdupC,ELWkC,SAAHt0B,GAAoC,IAA9BupB,EAASvpB,EAATupB,UAAWlnB,EAAGrC,EAAHqC,IAAKuD,EAAM5F,EAAN4F,OAC3D,OAAI2jB,EAAUtqB,OAAS,GAAKqqB,GAAwBC,EAAW,iCAGtD,CAAEI,OAFKhkB,EAAAA,GAAAA,IAA6BtD,EAAKuD,IAK3C,IACT,CKnB+B2uB,CAA2B,CAAEhL,UAAW8K,EAAOhyB,IAAAA,EAAKuD,OAAAA,IAEjF,GAAI0uB,EAAsB,CACxB,IAAeE,EAAoBF,EAA3B3K,MAER,OAAO5+B,EAAKI,UACVC,6IACA,CAAE8U,MAAOs0B,GAEb,CAEA,IAAMC,EAAuB/K,GAA2B,CAAEH,UAAW8K,EAAOhyB,IAAAA,EAAKuD,OAAAA,IACjF,GAAI6uB,EAAsB,CACxB,IAAeC,EAAoBD,EAA3B9K,MAER,OAAO5+B,EAAKI,UACVC,6IACA,CAAE8U,MAAOw0B,GAEb,CAEA,MAAO,EACT,EAEMC,GAAqB,SAAH30B,GAAA,IAAMq0B,EAAKr0B,EAALq0B,MAAqB,OAAAr0B,EAAd40B,eAAoCzpC,UAAU,yBAADsM,OAA0B48B,EAAM,IAAM,EAElHQ,GAA+B,SAAHxuB,GAAyB,IAAnBguB,EAAKhuB,EAALguB,MAAOtpC,EAAIsb,EAAJtb,KACvC+pC,EAAYf,GAA2BM,EAAM,IAEnD,OAAOS,EAAY/pC,EAAKI,UAAU2pC,GAAa,EACjD,EAEaC,GAAsB,WAOvB,IAADpU,EAAA3hB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAP,CAAC,EANHg2B,EAAkBrU,EAAlBqU,mBACAjqC,EAAI41B,EAAJ51B,KACA6pC,EAAcjU,EAAdiU,eACAvyB,EAAGse,EAAHte,IACAuD,EAAM+a,EAAN/a,OAAMqvB,EAAAtU,EACNuU,sBAAAA,OAAqB,IAAAD,GAAQA,EAE7B,GAAI1+B,IAAAA,KAAOy+B,GAAsB,EAAG,CAClC,IAAMG,EAAevB,GAA0B,CAC7CC,WAAY,CACVO,GACAO,GACAE,IAEF1kB,QAAS,CACPkkB,MAAOW,EACPJ,eAAAA,EACA7pC,KAAAA,EACAsX,IAAAA,EACAuD,OAAAA,KAIJ,OAAIsvB,GAAyBC,EACpBA,GAIP1rC,EAAAA,EAAAA,MAAA,QAAAM,SAAA,CAEIgB,EAAKI,UAAUC,0DAEjBpB,EAAAA,EAAAA,KAAA,KAAGorC,MAAO,CAAEvhB,WAAY,GAAKtoB,UAAU,YAAY8pC,KAAK,IAAIzuB,MAAM,gBAAgBiO,KAAK,SAAQ9qB,SAAEgB,EAAKI,UAAUC,kEAKtH,CAEA,MAAO,EACT,E,0BCnFakqC,IAAqB,KA2CrBC,GAA0B,SAAHzqC,GAAwC,IAAlC0qC,EAAK1qC,EAAL0qC,MAAOC,EAAmB3qC,EAAnB2qC,oBACzCC,EAAgB,GAStB,OAPAn/B,IAAAA,KAAOi/B,GAAO,SAACG,GACb,IAAQC,GAAQC,EAAAA,GAAAA,IAAcF,EAAK3lB,MAA3B4lB,IACJA,GAAOr/B,IAAAA,SAAWk/B,EAAqBG,IACzCF,EAAcl+B,KAAKm+B,EAEvB,IAEOD,CACT,EAOaI,GAA2B,SAACN,GACvC,IAAMO,EAAkB,CAAC,EAczB,OAZAx/B,IAAAA,KAAOi/B,GAAO,SAAAx1B,GAA6B,IACnCg2B,EA5CiC,SAACC,GAC1C,IAAMC,EAAU3/B,IAAAA,IAAM0/B,EAAaE,MAAM,MAAM,SAAAnmB,GAAI,OAAIA,EAAKomB,MAAM,IAIlE,OAFAF,EAAQG,MAEDH,CACT,CAsCoBI,CADiBt2B,EAAlBu2B,oBAEXC,EAAgBT,EAEpBx/B,IAAAA,KAAOy/B,GAAS,SAACS,GACVD,EAAcC,KACjBD,EAAcC,GAAU,CAAC,GAE3BD,EAAgBA,EAAcC,EAChC,GACF,IAEOV,CACT,EAEMW,GAAgC,SAAHrwB,GAQ5B,IAPLswB,EAAoBtwB,EAApBswB,qBACAC,EAAiBvwB,EAAjBuwB,kBACAzR,EAAU9e,EAAV8e,WACA0R,EAAcxwB,EAAdwwB,eACAC,EAAezwB,EAAfywB,gBACAC,EAAkB1wB,EAAlB0wB,mBAAkBC,EAAA3wB,EAClB4wB,iBAAAA,OAAgB,IAAAD,EAAG,EAACA,EAEpB,OAAOJ,EAAkB,CACvBzR,WAAAA,EACA0R,eAAAA,IAECrH,OAAM,SAAC7sB,GAEN,GAAIk0B,IAAmBC,GAGH,oBAFAvgC,IAAAA,IAAMoM,EAAG,CAAC,OAAQ,QAAS,EAAG,QAAS,MAGvD,OAAO+zB,GAA8B,CACnCC,qBAAAA,EACAC,kBAAAA,EACAzR,WAAW,GAAD1tB,OAAKs/B,EAAkB,KAAAt/B,OAAIw/B,GACrCJ,eAAAA,EACAC,gBAAAA,EACAC,mBAAAA,EACAE,iBAAkBA,EAAmB,IAM3C,OADAN,EAAqBn/B,KAAKmL,GACnB2yB,EACT,GACJ,EAEM4B,GAAmC,SAAHvW,GAO/B,IANLwW,EAASxW,EAATwW,UACAP,EAAiBjW,EAAjBiW,kBACAQ,EAAgBzW,EAAhByW,iBACAC,EAAgB1W,EAAhB0W,iBACAV,EAAoBhW,EAApBgW,qBACAG,EAAenW,EAAfmW,gBAEMQ,EAAc/gC,IAAAA,KAAO4gC,GACvBG,EAAYr4B,OAAS,GACvB1I,IAAAA,KAAO+gC,GAAa,SAACnS,GACnB,IAAMoS,EAAgBJ,EAAUhS,GAC1BqS,EAAgBH,EAAmBD,EAAiBC,GAAoBvN,KAAAA,QAAgBgN,GAG9FM,EAAiBjS,GAAcqS,EAAcpJ,MAAK,SAACyI,GAEjD,OAAIA,IAAmBvB,GACdA,GAGFoB,GAA8B,CACnCC,qBAAAA,EACAC,kBAAAA,EACAzR,WAAAA,EACA0R,eAAAA,EACAC,gBAAAA,EACAC,mBAAoB5R,GAExB,IAEA+R,GAAiC,CAC/BC,UAAWI,EACXX,kBAAAA,EACAQ,iBAAAA,EACAC,iBAAkBlS,EAClBwR,qBAAAA,GAEJ,GAEJ,EAQac,GAA2B,SAAHxvB,GAK9B,IAJLkvB,EAASlvB,EAATkvB,UACAP,EAAiB3uB,EAAjB2uB,kBAAiBc,EAAAzvB,EACjB0uB,qBAAAA,OAAoB,IAAAe,EAAG,GAAEA,EACzBZ,EAAe7uB,EAAf6uB,gBAEMM,EAAmB,CAAC,EAW1B,OATAF,GAAiC,CAC/BC,UAAAA,EACAP,kBAAAA,EACAQ,iBAAAA,EACAT,qBAAAA,EACAU,iBAAkB,KAClBP,gBAAAA,IAGKhN,KAAAA,IAAYvzB,IAAAA,OAAS6gC,IACzBhJ,MAAK,kBAAMgJ,CAAgB,GAChC,EAKaO,GAAuC,SAAHzS,GAS1C,IAAD0S,EAAA1S,EARJ2S,uBAAAA,OAAsB,IAAAD,EAAG,GAAEA,EAC3BE,EAAc5S,EAAd4S,eACAC,EAAgB7S,EAAhB6S,iBAAgBC,EAAA9S,EAChB+S,mBAAAA,OAAkB,IAAAD,EAAG,kBAAMlO,KAAAA,SAAgB,EAAK,EAAAkO,EAChDE,EAAgBhT,EAAhBgT,iBAAgBC,EAAAjT,EAChBkT,oBAAAA,OAAmB,IAAAD,EAAG,GAAEA,EAAAE,EAAAnT,EACxBoT,kBAAAA,OAAiB,IAAAD,EAAG,GAAEA,EACtBE,EAAcrT,EAAdqT,eAEMC,EAA0B,GAC1BC,EAAkB,GA2CxB,OAzCAliC,IAAAA,KAAOuhC,GAAgB,SAACj3B,EAAOkd,GAC7B,IAAMoH,EAzKuB,SAACwQ,GAChC,IAAQY,EAAuBZ,EAAvBY,mBACFL,EAAU3/B,IAAAA,IAAMggC,EAAmBJ,MAAM,MAAM,SAAAnmB,GAAI,OAAIA,EAAKomB,MAAM,IAIxE,OAFAF,EAAQG,MAEDH,EAAQG,KACjB,CAkKuBqC,CAAkB73B,GAC/B83B,EAAed,EAAuB9Z,IAAU,CAAC,EAEjD6a,EAAyBb,EAAiB5S,GAAYiJ,MAAK,SAACyK,GAChE,OAAIA,IAAavD,IACf8C,EAAoB5gC,KAAKqJ,GAClBipB,KAAAA,WAGFyO,EAAe13B,EAAO83B,GAC1BvK,MAAK,SAAC0K,GAoBLL,EAAgBjhC,MAnBO,WACrB,OAAOygC,GAAkBn6B,EAAAA,EAAAA,GAAC,CACxBg7B,QAAAA,GACGH,IAEFvK,MAAK,SAAC2K,GACL,IAAMC,EAAkBziC,IAAAA,IAAMwiC,EAAiB,mBAAmB,GAC1DE,GAAmBpD,EAAAA,GAAAA,IAAch1B,EAAMmP,MAAvCipB,eAER,OAAOf,GAAgBp6B,EAAAA,EAAAA,GAAC,CACtBg7B,QAAAA,EACAI,WAAYr4B,EACZo4B,eAAAA,EACAJ,SAAAA,EACAG,gBAAAA,GACGL,GAEP,GACJ,GAEF,IACCnJ,OAAM,SAAC7sB,GACN21B,EAAkB9gC,KAAKmL,EACzB,GACJ,IAEA61B,EAAwBhhC,KAAKohC,EAC/B,IAEO9O,KAAAA,IAAY0O,GAAyBpK,MAAK,WAC/C,OAAO+K,EAAAA,GAAAA,gCAA+B,CACpCC,gBAAiBX,EACjBY,kBAlP6B,EAmP7BC,eAAgB,SAAA32B,GAAC,OAAI21B,EAAkB9gC,KAAKmL,EAAE,GAElD,GACF,EC5PM42B,GAA+B,SAAHzuC,GAE3B,IADL6rC,EAAoB7rC,EAApB6rC,qBAAsBt0B,EAAGvX,EAAHuX,IAAKuD,EAAM9a,EAAN8a,OAAQ7a,EAAID,EAAJC,KAE7ByuC,EPYmC,SAAH1uC,GAAoC,IAA9By+B,EAASz+B,EAATy+B,UAAWlnB,EAAGvX,EAAHuX,IAAKuD,EAAM9a,EAAN8a,OAC5D,OAAI2jB,EAAUtqB,OAAS,GAAKqqB,GAAwBC,EAAW,iCAGtD,CAAEI,OAFK5jB,EAAAA,GAAAA,IAA0B1D,EAAKuD,IAKxC,IACT,COpB4B6zB,CAA4B,CAAElQ,UAAWoN,EAAsBt0B,IAAAA,EAAKuD,OAAAA,IAC9F,GAAI4zB,EAAmB,CACrB,IAAeE,EAAgBF,EAAvB7P,MAGR,OAAO5+B,EAAKI,UAFQC,0IAEe,CAAE8U,MAAOw5B,GAC9C,CAEA,MAAO,EACT,EAEMC,GAAqB,SAAH35B,GAAA,IACtBs4B,EAAiBt4B,EAAjBs4B,kBAAmBvtC,EAAIiV,EAAJjV,KAAM6pC,EAAc50B,EAAd40B,eAAgBvyB,EAAGrC,EAAHqC,IAAKuD,EAAM5F,EAAN4F,OAAM,OAChDmvB,GAAoB,CACxBC,mBAAoBsD,EACpBvtC,KAAAA,EACA6pC,eAAAA,EACAvyB,IAAAA,EACAuD,OAAAA,EACAsvB,uBAAuB,GACtB,EAEU0E,GAAuB,SAAHvzB,GAO1B,IAoBDwzB,EA1BJlD,EAAoBtwB,EAApBswB,qBACA2B,EAAiBjyB,EAAjBiyB,kBACAvtC,EAAIsb,EAAJtb,KACA6pC,EAAcvuB,EAAduuB,eACAvyB,EAAGgE,EAAHhE,IACAuD,EAAMS,EAANT,OAEM0f,EAASsO,GAA0B,CACvCC,WAAY,CACV0F,GACAI,IAEFxpB,QAAS,CACPwmB,qBAAAA,EACA2B,kBAAAA,EACAvtC,KAAAA,EACA6pC,eAAAA,EACAvyB,IAAAA,EACAuD,OAAAA,KAIJ,OAAI0f,IAOAuU,EAFAlD,EAAqB13B,OAAS,EAC5Bq5B,EAAkBr5B,OAAS,EACP7T,iEAEAA,wCAGFA,2DAGjBL,EAAKI,UAAU0uC,GACxB,E,aClEaC,GAAgB,SAAHhvC,GAGnB,IACDivC,EAHJC,EAAIlvC,EAAJkvC,KAAIC,EAAAnvC,EACJovC,SAAAA,OAAQ,IAAAD,EAAG,IAAKA,EAGZE,GAAc,EACdC,EAAU,EACVC,EAAc,KAmDlB,MAAO,CAAE7hC,MAjDK,WACZ,OAAI6hC,IAIJA,EAAc,IAAIvQ,KAAJ,EAAY,SAACC,EAASlqB,GAElCu6B,EAAU,EACVJ,IAAO5L,MAAK,SAAC9I,IACYA,GAAU,CAAC,GAA1BtkB,YACYm5B,EAwBlBpQ,EAAQqQ,GAvBRL,EAAUO,aAAY,WACfH,GAcCJ,IACFQ,cAAcR,GACdA,OAAU76B,GAEZ6qB,EAAQqQ,KAjBRA,GAAW,EACXJ,IAAO5L,MAAK,SAAA/nB,GAAqBA,EAAlBrF,aAEXu5B,cAAcR,GACdA,OAAU76B,EACV6qB,EAAQqQ,GAEZ,IAAG5K,OAAM,SAAC/F,GACR8Q,cAAcR,GACdA,OAAU76B,EACVW,EAAO4pB,EACT,IAQJ,GAAGyQ,EAIP,IAAG1K,OAAM,SAAC/F,GACR5pB,EAAO4pB,EACT,GACF,IAGF,EAOgBoE,KALH,WAEX,OADAsM,GAAc,EACPE,CACT,EAGF,E,oCC1DMG,GAAW,SAACC,EAAKC,EAAQ3b,GAC7B,IAAMkU,EAAO18B,IAAAA,MAAQkkC,EAAK1b,GACpB4b,EAAUpkC,IAAAA,MAAQmkC,EAAQ3b,GAEhC,OAAOxoB,IAAAA,aAAe08B,EAAM0H,GAAS17B,OAAS,CAChD,EAEM27B,GAA8B,IAI9BC,GAA+B,CACnC7E,QAAS,KACTz1B,OAAQ,KACRu6B,mBAAoB,MAiGhBC,GAAyB,SAACC,EAAOhuB,GACrC,IAAciuB,EAA8BjuB,EAApCxX,KAAqB0lC,GAAUzb,EAAAA,GAAAA,GAAKzS,EAAM0S,IAClD,OAAQub,GACN,KAAKL,GAEH,IAAAO,EAEID,EADFE,WAAAA,OAAU,IAAAD,EAAG,GAAEA,EAAAE,EACbH,EADeI,UAAAA,OAAS,IAAAD,EAAG,GAAEA,EAAAE,EAC7BL,EAD+BM,kBAAAA,OAAiB,IAAAD,EAAG,GAAEA,EAAEE,EACvDP,EADuDO,YAAa71B,EACpEs1B,EADoEt1B,OAAQ81B,EAC5ER,EAD4EQ,SAGhF,GAAID,EACF,OAAA39B,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACKk9B,GAAK,IAAEhF,QAASoF,EAAY76B,OAAQ+6B,EAAWR,mBAAoBU,EAAmBE,SAAAA,IAK7F,IAAMC,EAAiBnB,GAASQ,EAAMhF,QAASoF,EAAY,YACrDQ,EAAgBpB,GAASQ,EAAMz6B,OAAQ+6B,EAAW,MAOxD,OANIK,GACF/1B,EAAOi2B,SAAS,gEAEdD,GACFh2B,EAAOi2B,SAAS,+DAEdF,GAAkBC,EAEbZ,GAITl9B,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACKk9B,GAAK,IACRhF,QAAQ,GAADv+B,QAAAkI,EAAAA,GAAAA,GAAOq7B,EAAMhF,SAAW,KAAEr2B,EAAAA,GAAAA,GAAMy7B,IACvC76B,OAAO,GAAD9I,QAAAkI,EAAAA,GAAAA,GAAOq7B,EAAMz6B,QAAU,KAAEZ,EAAAA,GAAAA,GAAM27B,MAGzC,KA3IqC,IA6InC,IAAQE,EAAsBN,EAAtBM,kBACR,OAAA19B,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAYk9B,GAAK,IAAEF,mBAAoBU,IAEzC,KA/I2B,IAiJzB,OAAOX,GAET,QACE,OAAOG,EAEb,E,2HChKac,GAAkB,SAAAC,GAC7B,SAAAD,EAAAhxC,GAMI,IAADkxC,EALD1I,EAAOxoC,EAAPwoC,QACAK,EAAW7oC,EAAX6oC,YACAsI,EAASnxC,EAATmxC,UACAC,EAAcpxC,EAAdoxC,eACG1c,GAAIC,EAAAA,GAAAA,GAAA30B,EAAA40B,IAKP,IALOyc,EAAAA,GAAAA,GAAA,KAAAL,IAEPE,GAAAI,EAAAA,GAAAA,GAAA,KAAAN,EAAA,CAAMxI,KACDK,YAAcA,EACnBqI,EAAKC,UAAYA,GAActI,GAAeA,EAAYsI,WAAc,UACpEC,EAAgB,CAClB,IAAMzb,GAAM3iB,EAAAA,EAAAA,GAAA,CAAKw1B,QAAAA,EAAS2I,UAAAA,GAAczc,GAClC6c,EAAOH,EAAeF,EAAKC,UAAWxb,GAC5ClqB,IAAAA,UAAWylC,EAAOK,EACpB,CAAC,OAAAL,CACH,CAAC,OAAAM,EAAAA,GAAAA,GAAAR,EAAAC,IAAAQ,EAAAA,GAAAA,GAAAT,EAAA,CAhB4B,EAgB5BU,EAAAA,GAAAA,GAhBqCxS,QCO3ByS,GAAgC,SAACR,GAC5C,IAAMS,EAAO,CACXC,gBAAiB,CACfC,UAAWxxC,yGACXyxC,YAAY,GAEdC,oBAAqB,CACnBF,UAAWxxC,6DACXyxC,YAAY,GAEdE,kBAAmB,CACjBH,UAAWxxC,kGACXyxC,YAAY,GAEdG,aAAc,CACZJ,UAAWxxC,0EACXyxC,YAAY,IAOhB,OAAOH,EAAKT,IAAcS,EAAKM,YACjC,EAEaC,GAAgC,SAAChB,GAC5C,IAAMS,EAAO,CACXC,gBAAiB,CACfC,UAAWxxC,yGACX8xC,WAAW,EACXC,SAAU/xC,SAGZgyC,gBAAiB,CACfR,UAAWxxC,+GACX+xC,SAAU/xC,qBACV8xC,WAAW,GAGbF,aAAc,CACZJ,UAAWxxC,0EACX+xC,SAAU/xC,UASd,OANAsxC,EAAKW,UAAYX,EAAKC,gBACtBD,EAAKY,oBAAsBZ,EAAKU,gBAKzBV,EAAKT,IAAcS,EAAKM,YACjC,EAEaO,GAA4B,SAACtB,EAASnxC,GAAmC,IAA/B0yC,EAAW1yC,EAAX0yC,YAAaC,EAAU3yC,EAAV2yC,WAC5Df,EAAO,CAEXC,gBAAiB,CACfe,aAAc,SAAA3yC,GAAI,OAAIA,EAAKI,UACzBC,2KACA,CAAEoyC,YAAAA,EAAaC,WAAAA,GAChB,EACDZ,YAAY,GAGdG,aAAc,CACZU,aAAc,SAAA3yC,GAAI,OAAIA,EAAKI,UACzBC,6GACA,CAAEoyC,YAAAA,EAAaC,WAAAA,GAChB,IAOL,OAAOf,EAAKT,IAAcS,EAAKM,YACjC,EAGaW,GAAgC,SAAC1B,GAC5C,IAAMS,EAAO,CACXC,gBAAiB,CACfC,UAAWxxC,yGACX+xC,SAAU/xC,uBACVwyC,iBAAkB,CAAC,GAErBC,eAAgB,CACdjB,UAAWxxC,wGACX+xC,SAAU/xC,sBACVwyC,iBAAkB,CAAC,GAErBE,2BAA4B,CAC1BlB,UAAWxxC,sKACX+xC,SAAU/xC,kBACVwyC,iBAAkB,CAAC,GAErBG,eAAgB,CACdnB,UAAWxxC,sKACX+xC,SAAU/xC,kBACVwyC,iBAAkB,CAAC,GAErBd,oBAAqB,CACnBF,UAAWxxC,4GACX+xC,SAAU/xC,2BACVwyC,iBAAkB,CAAC,GAErBI,yBAA0B,CACxBpB,UAAWxxC,iHACX+xC,SAAU/xC,sBACVwyC,iBAAkB,CAAC,GAGrBZ,aAAc,CACZJ,UAAWxxC,wEACX+xC,SAAU/xC,QACVwyC,iBAAkB,CAAC,IAOvB,OAAOlB,EAAKT,IAAcS,EAAKM,YACjC,EA0BaiB,GAAgC,SAAChC,GAC5C,IAAMS,EAAO,CACXwB,gBAAiB,CACfR,aAAc,SAAA3yC,GAAI,OAAIA,EAAKI,UAAUC,6DAAmE,EACxGyxC,YAAY,GAEdE,kBAAmB,CACjBW,aAAc,SAAA3yC,GAAI,OAAIA,EAAKI,UAAUC,kGAAwG,EAC7IyxC,YAAY,GAEdsB,8BAA+B,CAC7BT,aAAc,SAAC3yC,EAAMqzC,GAAc,OAAMrzC,EAAKI,UAAUC,0IAAiJgzC,IAAiB,EAE1NvB,YAAY,GAEdG,aAAc,CACZU,aAAc,SAAA3yC,GAAI,OAAIA,EAAKI,UAAUC,6CAAmD,EACxFyxC,YAAY,IAGhB,OAAOH,EAAKT,IAAcS,EAAKM,YACjC,EASaqB,GAAwC,SAACpC,EAAS51B,GAAqB,IAC5Eq2B,EAAO,CAGX4B,8BAA+B,CAC7B1B,UAAWxxC,wGACX+xC,SAAU/xC,sBACVwyC,iBAAkB,CAAC,GAarBW,iCAAkC,CAChC3B,UArBsEv2B,EAATm4B,YAqBpCnsC,GAAAA,GAAgBE,MACrCnH,6IACAA,6IACJ+xC,SAAU/xC,6BACVwyC,iBAAkB,CAChBa,SAAS,IAcbzB,aAAc,CACZJ,UAAWxxC,0EACX+xC,SAAU/xC,QACVwyC,iBAAkB,CAAC,IAGvB,OAAOlB,EAAKT,IAAcS,EAAKM,YACjC,EAEa0B,GAAoC,SAACzC,GAChD,IAAMS,EAAO,CACXM,aAAc,CACZJ,UAAWxxC,0EACX+xC,SAAU/xC,QACVwyC,iBAAkB,CAAC,IAGvB,OAAOlB,EAAKT,IAAcS,EAAKM,YACjC,EAEa2B,GAAwC,SAAC1C,EAAWxb,GAC/D,IAAMme,EAAcxzC,qIAEdsxC,EAAO,CACXmC,kCAAmC,CACjCjC,UAAWxxC,mFAEb0zC,kDAAmD,CACjDlC,UAAWgC,GAEbG,wCAAyC,CACvCnC,UAAWgC,GAEbI,mCAAoC,CAClCpC,UAAWxxC,uFAMb6zC,4CAA6C,CAC3CC,mBAAmB,EACnBC,WAAa1e,GAAUA,EAAO0U,cAAiB,IAGjD6H,aAAc,CACZJ,UAAWxxC,8DAGf,OAAOsxC,EAAKT,IAAcS,EAAKM,YACjC,EAEaoC,GAAuC,SAACnD,GACnD,IAAMS,EAAO,CACX2C,qBAAsB,CACpBC,aAAa,EACb1C,UAAWxxC,mJAEb4xC,aAAc,CACZsC,aAAa,EACb1C,UAAWxxC,8DAGf,OAAOsxC,EAAKT,IAAcS,EAAKM,YACjC,EAIauC,GAA4C,SAACtD,GACxD,IAAMS,EAAO,CACXsC,mCAAoC,CAClCpC,UAAWxxC,uFAEbo0C,2BAA4B,CAC1BF,aAAa,EACb1C,UAAWxxC,mJAEbq0C,mCAAoC,CAClC7C,UAAWxxC,iHAEbs0C,sCAAuC,CACrC9C,UAAWxxC,sIACXwyC,iBAAkB,CAChB+B,uBAAuB,IAG3BC,mCAAoC,CAClChD,UAAWxxC,uIACXwyC,iBAAkB,CAChB+B,uBAAuB,IAG3BE,uCAAwC,CACtCjD,UAAWxxC,kHACXwyC,iBAAkB,CAChB+B,uBAAuB,IAG3B3C,aAAc,CACZsC,aAAa,EACb1C,UAAWxxC,4FAGf,OAAOsxC,EAAKT,IAAcS,EAAKM,YACjC,E,kDC1TM8C,GAAiB,MAEjBC,GAAgB,SAACh1C,EAAMi1C,GAE3B,IAAIC,EAAaD,EAAWE,MAAM,GAAGngC,KAAI,SAAAogC,GAAE,OAAIA,EAAGhb,UAAU,IAAEztB,KAAKooC,KAAmB,GAKtF,OAJIG,IACFA,EAAU,GAAAxoC,OAAMqoC,IAAcroC,OAAGwoC,IAEnCA,EAAU,GAAAxoC,OAAM1M,EAAKI,UAAUC,YAAgBqM,OAAGwoC,EAEpD,EAEaG,GAAsB,SAAHt1C,GAA8C,IAAxCu1C,EAAcv1C,EAAdu1C,eAAgBC,EAAgBx1C,EAAhBw1C,iBAGpD,OAF4BD,GAAkB,CAAC,GAAvCE,iBAEkBD,CAC5B,EAEaE,GAAa,SAAHn6B,GAOhB,IANLo6B,EAAmBp6B,EAAnBo6B,oBACAC,EAA0Br6B,EAA1Bq6B,2BACAC,EAAUt6B,EAAVs6B,WACA/6B,EAAMS,EAANT,OACW06B,EAAgBj6B,EAA3Bm4B,UACAzzC,EAAIsb,EAAJtb,KAEM61C,EAAc,CAClB/H,SAAUzmC,GAAAA,GACV+yB,WAAYp6B,EAAKI,UAAUuH,GAAAA,GAAe4tC,IAAqBl1C,YAGjEy1C,EHkHmC,SAACj7B,GAAsD,IAA9Ck7B,EAAS9hC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG67B,GACxDkG,GAA+BC,EAAAA,EAAAA,YAAWjG,GAAwB+F,GAAUG,GAAAz/B,EAAAA,GAAAA,GAAAu/B,EAAA,GAArEG,EAAUD,EAAA,GAAEE,EAAQF,EAAA,GAErBG,GAAgBlyB,EAAAA,EAAAA,cAAY,SAAApkB,EAE/B4wC,GAAc,IADfJ,EAASxwC,EAATwwC,UAAWF,EAAUtwC,EAAVswC,WAAYI,EAAiB1wC,EAAjB0wC,kBAEvB2F,EAAS,CACP3rC,KAAMolC,GACNU,UAAAA,EACAF,WAAAA,EACAI,kBAAAA,EACAE,SAAAA,EACAD,aAAa,EACb71B,OAAAA,GAEJ,GAAG,CAACA,IAGEy7B,GAAgBnyB,EAAAA,EAAAA,cAAY,SAACosB,GACjC6F,EAAS,CACP3rC,KAAMolC,GACNU,UAAAA,EACAF,WAAY8F,EAAWlL,QACvBwF,kBAAmB0F,EAAWpG,mBAC9BY,SAAUwF,EAAWxF,SACrBD,aAAa,EACb71B,OAAAA,GAEJ,GAAG,CAACs7B,EAAWxF,SAAUwF,EAAWlL,QAASkL,EAAWpG,mBAAoBl1B,IAEtE07B,GAAmBpyB,EAAAA,EAAAA,cAAY,SAAAlP,GAAgC,IAA7Bs7B,EAASt7B,EAATs7B,UAAWF,EAAUp7B,EAAVo7B,WACjD+F,EAAS,CACP3rC,KAAMolC,GACNU,UAAAA,EACAF,WAAAA,EACAK,aAAa,EACb71B,OAAAA,GAEJ,GAAG,CAACA,IAEE27B,GAAwBryB,EAAAA,EAAAA,cAAY,SAAA7I,GAA4B,IAAzBm1B,EAAiBn1B,EAAjBm1B,kBAC3C2F,EAAS,CACP3rC,KAnMmC,IAoMnCgmC,kBAAAA,EACA51B,OAAAA,GAEJ,GAAG,CAACA,IAEE47B,GAAkBtyB,EAAAA,EAAAA,cAAY,WAClCiyB,EAAS,CAAE3rC,KAzMgB,KA0M7B,GAAG,IAEH,MAAO,CACL0rC,WAAAA,EACAE,cAAAA,EACAC,cAAAA,EACAC,iBAAAA,EACAC,sBAAAA,EACAC,gBAAAA,EAEJ,CG5KMC,CAAsB77B,GADxBs7B,EAAUL,EAAVK,WAAYE,EAAaP,EAAbO,cAA8BM,EAASb,EAAxBQ,cAA0BC,EAAgBT,EAAhBS,iBAAkBC,EAAqBV,EAArBU,sBAAuBC,EAAeX,EAAfW,gBAGhGngC,GAAsCC,EAAAA,EAAAA,UAAS,IAAGC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAA3CsgC,EAAWpgC,EAAA,GAAEqgC,EAAcrgC,EAAA,GAC5Bqf,GAAiBtU,EAAAA,EAAAA,QAAO,CAAC,GAM/Bu1B,GAAoCvgC,EAAAA,EAAAA,UAAS,CAACs/B,IAAakB,GAAAtgC,EAAAA,GAAAA,GAAAqgC,EAAA,GAApD7B,EAAU8B,EAAA,GAAEC,EAAaD,EAAA,GAC1BE,GAAgBj0B,EAAAA,EAAAA,UAAQ,kBAAMiyB,EAAWA,EAAW/gC,OAAS,EAAE,GAAE,CAAC+gC,IAClElJ,GAAkB/oB,EAAAA,EAAAA,UAAQ,kBAAMi0B,EAAcnJ,QAAQ,GAAE,CAACmJ,IAEzDC,GAAyB31B,EAAAA,EAAAA,QAAO,GAiBhC41B,GAAoB51B,EAAAA,EAAAA,QAAO,MAE3B61B,GAAY71B,EAAAA,EAAAA,QAAOpf,GAAAA,GAAWG,YAC9B+0C,GAAmC91B,EAAAA,EAAAA,QAAO,GAC1C+1B,GAA2B/1B,EAAAA,EAAAA,QAAOg0B,GAClCgC,GAA4Bh2B,EAAAA,EAAAA,SAAO,GACnCi2B,GAAuBj2B,EAAAA,EAAAA,SAAO,GAC9Bk2B,GAAcl2B,EAAAA,EAAAA,aAAOpN,GACrBujC,GAAgBn2B,EAAAA,EAAAA,aAAOpN,GAEvBwjC,GAAsCp2B,EAAAA,EAAAA,QAAO,IAE7Cq2B,GAAYzzB,EAAAA,EAAAA,cAAY,WAC5BsyB,IACAU,EAAkB5oB,QAAU,KAC5B6oB,EAAU7oB,QAAUpsB,GAAAA,GAAWG,WAC/B+0C,EAAiC9oB,QAAU,EAC3C+oB,EAAyB/oB,QAAUgnB,EACnCgC,EAA0BhpB,SAAU,EACpCipB,EAAqBjpB,SAAU,EAC/BkpB,EAAYlpB,aAAUpa,EACtBujC,EAAcnpB,aAAUpa,CAC1B,GAAG,CAACohC,EAAkBkB,IAEhB3F,GAAW3sB,EAAAA,EAAAA,cAAY,SAACokB,GAAsB,IAAD,IAAAsP,EAAA5jC,UAAAC,OAATugB,EAAI,IAAAsT,MAAA8P,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAJrjB,EAAIqjB,EAAA,GAAA7jC,UAAA6jC,GAC5Cj9B,EAAOi2B,SAAQ/N,MAAfloB,EAAM,iBAAAnO,OAA0B67B,IAAO77B,OAAO+nB,GAChD,GAAG,CAAC5Z,IAEEk9B,GAAiB5zB,EAAAA,EAAAA,cAAY,SAAAyR,GAM5B,IALL0f,EAAc1f,EAAd0f,eACAtnC,EAAM4nB,EAAN5nB,OACAgqC,EAAyBpiB,EAAzBoiB,0BACAC,EAAsBriB,EAAtBqiB,uBACA7e,EAAKxD,EAALwD,MAEM8e,EAAyB7C,GAAoB,CACjDC,eAAAA,EACAC,iBAAAA,IAGF,OAAOK,EAAWuC,eAAaplC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAC9B2iC,oBAAAA,GACGJ,GAAc,IACjBtnC,OAAAA,EACAoqC,KAAM,EACNhf,MAAOA,GAAS7yB,GAAAA,GAChBunC,SAAU/B,EACV0H,UAAWyE,EACXG,eAAe,EACfC,mBAAmB,EACnBL,uBAAAA,EACAD,0BAAAA,EACAO,sBAA4C,OAArBhD,IAE3B,GAAG,CAACA,EAAkBK,EAAYF,EAAqB3J,IAEjDyM,GAAyBr0B,EAAAA,EAAAA,cAAY,SAAAjH,GAYpC,IAXLu7B,EAAYv7B,EAAZu7B,aACAnD,EAAcp4B,EAAdo4B,eACAtnC,EAAMkP,EAANlP,OACA8/B,EAAQ5wB,EAAR4wB,SACAkK,EAAyB96B,EAAzB86B,0BACAC,EAAsB/6B,EAAtB+6B,uBACA7e,EAAKlc,EAALkc,MAAKsf,EAAAx7B,EACLo7B,kBAAAA,OAAiB,IAAAI,GAAOA,EACxB/H,EAAQzzB,EAARyzB,SACAgI,EAAUz7B,EAAVy7B,WAAUC,EAAA17B,EACV27B,WAAAA,OAAU,IAAAD,GAAQA,EAEZE,EAAmBptC,KAAKD,MACxBysC,EAAyB7C,GAAoB,CACjDC,eAAAA,EACAC,iBAAAA,IAEIwD,EAAqB,WACzB3B,EAAU7oB,QAAUvgB,EACpBmpC,EAAkB5oB,QAAU+mB,EAC5BgC,EAAyB/oB,QAAU2pB,EACnCb,EAAiC9oB,QAAUypB,EAC3CT,EAA0BhpB,QAAU0pB,EACpCT,EAAqBjpB,QAAU+pB,EAC/Bb,EAAYlpB,QAAUoiB,EACtB+G,EAAcnpB,QAAUoqB,CAC1B,EACA,OAAO/C,EAAWoD,eAAajmC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAC9B2iC,oBAAqB+C,EAAe/C,EAAsBC,GACvDL,GAAc,IACjBtnC,OAAAA,EACAoqC,KAAM,EACNhf,MAAOA,GAAS7yB,GAAAA,GAChBunC,SAAAA,EACA2F,UAAWyE,EACXG,eAAe,EACfC,kBAAAA,EACAL,uBAAAA,EACAD,0BAAAA,EACAO,sBAA4C,OAArBhD,EACvBsD,WAAAA,EACAF,WAAAA,KACCtV,MAAK,SAAC3C,GACP,GAAIoY,GAAoB5B,EAAuB3oB,QAAS,CACtD,IAAQmd,EAAWhL,EAAXgL,OACF2E,EAAa3E,EAAOuN,YAAc,GAClC1I,EAAY7E,EAAOl2B,QAAU,GAC7Bu6B,EAAqBrE,EAAOqE,oBAAsB,GAExDla,EAAetH,QAAUmd,EAAOrR,UAChC0e,IAEA1C,EAAc,CAAE9F,UAAAA,EAAWF,WAAAA,EAAYI,kBAAmBV,GAAsBY,GAEhFuG,EAAuB3oB,QAAUuqB,EAEjC,IAAA3e,EAEImb,GAAkB,CAAC,EADT4D,EAAU/e,EAAtBgf,WAAwBC,EAAcjf,EAAdif,eAAgBC,EAAYlf,EAAZkf,aAAiBC,GAAY5kB,EAAAA,GAAAA,GAAAyF,EAAAxF,IAEvEmc,EAAS,6CAA2C/9B,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAC/CumC,GAAY,IACfJ,WAAAA,EACAK,mBAAuC,MAAlBH,GAA0C,MAAhBC,EAAwB1b,GAA4B,CAAElwB,MAAO2rC,EAAgB1rC,IAAK2rC,SAAkBllC,EACnJnG,OAAQopC,EAAU7oB,QAClB6pB,KAAM,EACNhf,MAAO7yB,GAAAA,GACPktC,UAAW6D,EAAyB/oB,QACpCkqB,aAAAA,IAEJ,MACE3H,EAAS,sFAGX,OAAOpQ,CACT,IAAG8Y,UAAS,WACNV,EAAmB5B,EAAuB3oB,UAC5CwqB,IACA7B,EAAuB3oB,QAAUuqB,EAErC,GACF,GAAG,CAACvD,EAAkBK,EAAYF,EAAqBC,EAA4BU,EAAevF,IAE5F2I,GAAiBt1B,EAAAA,EAAAA,cAAY,SAAAu1B,GAS5B,IARLpE,EAAcoE,EAAdpE,eACAtnC,EAAM0rC,EAAN1rC,OACAgqC,EAAyB0B,EAAzB1B,0BACAC,EAAsByB,EAAtBzB,uBACA7e,EAAKsgB,EAALtgB,MAAKugB,EAAAD,EACLpB,kBAAAA,OAAiB,IAAAqB,GAAOA,EACxBhJ,EAAQ+I,EAAR/I,SACAgI,EAAUe,EAAVf,WAEA,OAAOH,EAAuB,CAC5BC,cAAc,EACdnD,eAAAA,EACAtnC,OAAAA,EACA8/B,SAAU/B,EACViM,0BAAAA,EACAC,uBAAAA,EACA7e,MAAAA,EACAkf,kBAAAA,EACA3H,SAAAA,EACAgI,WAAAA,GAEJ,GAAG,CAACH,EAAwBzM,IAEtB6N,GAA4Bz1B,EAAAA,EAAAA,cAAY,SAAA01B,GAAA,IAC5CvE,EAAcuE,EAAdvE,eACAtnC,EAAM6rC,EAAN7rC,OACAgqC,EAAyB6B,EAAzB7B,0BACAC,EAAsB4B,EAAtB5B,uBACA7e,EAAKygB,EAALzgB,MAAK0gB,EAAAD,EACLvB,kBAAAA,OAAiB,IAAAwB,GAAOA,EACxBnJ,EAAQkJ,EAARlJ,SACAgI,EAAUkB,EAAVlB,WAAU,OACNH,EAAuB,CAC3BC,cAAc,EACdnD,eAAAA,EACAtnC,OAAAA,EACA8/B,SAAU/B,EACViM,0BAAAA,EACAC,uBAAAA,EACA7e,MAAAA,EACAkf,kBAAAA,EACA3H,SAAAA,EACAgI,WAAAA,EACAE,YAAY,GACZ,GAAE,CAACL,EAAwBzM,IAEvBgO,GAAyB51B,EAAAA,EAAAA,cAAY,SAAA61B,GAA+C,IAA5CC,EAAoBD,EAApBC,qBAAsB3E,EAAc0E,EAAd1E,eAYlE,OAXYM,EAAWsE,uBAAqBnnC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAC3C2iC,oBAAAA,EACAuE,qBAAAA,GACI3E,GAAkB,CAAC,GAAG,CAAF,GACxBxH,SAAU/B,IAAoB1kC,GAAAA,IAAkB,EAAI0kC,KACnD1I,MAAK,SAAC3C,GACP,IAAQqP,GAAuBrP,GAAO,CAAC,GAA/BqP,mBAGR,OAFAyG,EAAsB,CAAE/F,kBAAmBV,IAC3Ce,EAAS,yDACFf,CACT,GAEF,GAAG,CAAChE,EAAiB+E,EAAU4E,EAAqBE,EAAYY,IAE1D2D,GAAyBh2B,EAAAA,EAAAA,cAAY,SAAAi2B,GAAsE,IAAnE3B,EAAY2B,EAAZ3B,aAAY4B,EAAAD,EAAEhhB,MAAAA,OAAK,IAAAihB,EAAG9zC,GAAAA,GAAiB8zC,EAAAC,EAAAF,EAAEvB,WAAAA,OAAU,IAAAyB,GAAQA,EACjGxB,EAAmBptC,KAAKD,MAEtBw/B,EAAoBkL,EAApBlL,QAASz1B,EAAW2gC,EAAX3gC,OAEX4iC,GAAQnN,EAAUA,EAAQ/2B,OAAS,IAAMsB,EAASA,EAAOtB,OAAS,GAIxE,OAAI2hB,EAAetH,SAAW6pB,GAAQviB,EAAetH,QAAQqM,YAC3DkW,EAAS,qDAAsD,CAC7DsH,KAAAA,EAAM93B,IAAK8Y,EAAOvD,eAAgBA,EAAetH,QAAQqM,WAAY6d,aAAAA,IAEhE1Z,KAAAA,QAAgB,CAAC,IAEtB3F,GAASgf,EAAOhf,GAClB0X,EAAS,gCAAiC,CACxCsH,KAAAA,EAAM93B,IAAK8Y,EAAOvD,eAAgBA,EAAetH,QAAQqM,WAAY6d,aAAAA,IAEhE1Z,KAAAA,QAAgB,CAAC,IAGnB6W,EAAWoD,eAAajmC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAC9B2iC,oBAAqB+C,EAAe/C,EAAsBC,GACvDwB,EAAkB5oB,SAAO,IAC5BvgB,OAAQopC,EAAU7oB,QAClB6pB,KAAAA,EACAtK,SAAU/B,EACV3S,MAAOA,GAAS7yB,GAAAA,GAChBktC,UAAW6D,EAAyB/oB,QACpC8pB,eAAe,EACfC,kBAAmBd,EAAqBjpB,QACxC0pB,uBAAwBV,EAA0BhpB,QAClDypB,0BAA2BX,EAAiC9oB,QAC5DgqB,sBAA4C,OAArBhD,EACvBsD,WAAAA,EACAF,WAAYjB,EAAcnpB,WACzB8U,MAAK,SAAC3C,GACP,GAAIoY,GAAoB5B,EAAuB3oB,QAAS,CACtD,IAAQmd,EAAWhL,EAAXgL,OACF2E,EAAa3E,EAAOuN,YAAc,GAClC1I,EAAY7E,EAAOl2B,QAAU,GAEnC0hC,EAAuB3oB,QAAUuqB,EAEjChI,EAAS,qEAAsE,CAC7E9iC,OAAQopC,EAAU7oB,QAClB6pB,KAAAA,EACAhf,MAAAA,EACAkc,eAAgB6B,EAAkB5oB,QAClCklB,UAAW6D,EAAyB/oB,QACpCkqB,aAAAA,IAGFlC,EAAiB,CAAElG,WAAAA,EAAYE,UAAAA,GACjC,MACEO,EAAS,sDAGX,OAAOpQ,CACT,IAAG8Y,UAAS,WACV3+B,EAAOE,SAAS,2BAClB,GACF,GAAG,CAACo7B,EAAYP,EAAYF,EAAqBC,EAA4B5J,EAAiBwJ,EAAkBzE,EAAUyF,EAAkB17B,IAEtI0/B,GAAqBp2B,EAAAA,EAAAA,cAAY,SAAAq2B,GAAA,IAAAC,EAAAD,EAAGphB,MAAAA,OAAK,IAAAqhB,EAAGl0C,GAAAA,GAAiBk0C,EAAA,OAAON,EAAuB,CAAE1B,cAAc,EAAOrf,MAAAA,GAAQ,GAAE,CAAC+gB,IAC7HO,GAAgCv2B,EAAAA,EAAAA,cAAY,SAAAw2B,GAAA,IAAAC,EAAAD,EAAGvhB,MAAAA,OAAK,IAAAwhB,EAAGr0C,GAAAA,GAAiBq0C,EAAA,OAAOT,EAAuB,CAAE1B,cAAc,EAAMrf,MAAAA,EAAOyf,YAAY,GAAO,GAAE,CAACsB,IAEzJU,GAAgB12B,EAAAA,EAAAA,cAAY,eAAGiV,GAAHnlB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAa,CAAC,GAAXmlB,MAAK,OAAYof,EAAuB,CAC3EC,cAAc,EACdnD,eAAgB6B,EAAkB5oB,QAClCuf,SAAU/B,EACV/9B,OAAQopC,EAAU7oB,QAClBypB,0BAA2BX,EAAiC9oB,QAC5D0pB,uBAAwBV,EAA0BhpB,QAClD+pB,kBAAmBd,EAAqBjpB,QACxC6K,MAAAA,EACAuX,SAAU8G,EAAYlpB,QACtBoqB,WAAYjB,EAAcnpB,SAC1B,GAAE,CAACiqB,EAAwBzM,IAEvB+O,GAA2B32B,EAAAA,EAAAA,cAAY,eAAGiV,GAAHnlB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAa,CAAC,GAAXmlB,MAAK,OAAYof,EAAuB,CACtFC,cAAc,EACdnD,eAAgB6B,EAAkB5oB,QAClCuf,SAAU/B,EACV/9B,OAAQopC,EAAU7oB,QAClBypB,0BAA2BX,EAAiC9oB,QAC5D0pB,uBAAwBV,EAA0BhpB,QAClD+pB,kBAAmBd,EAAqBjpB,QACxC6K,MAAAA,EACAuX,SAAU8G,EAAYlpB,QACtBoqB,WAAYjB,EAAcnpB,SAC1B,GAAE,CAACiqB,EAAwBzM,IAIvBgP,GAAqB52B,EAAAA,EAAAA,cAAY,SAAA62B,GAA+C,IAChFC,EAD+EC,EAAAF,EAA3C77C,GAAAA,OAAE,IAAA+7C,EAAG,GAAEA,EAAAC,EAAAH,EAAEI,oBAAAA,OAAmB,IAAAD,GAAQA,EAGpElQ,EAAYkL,EAAZlL,QAEJmQ,IAAwBj8C,GAAMy3C,EAChCqE,EAAmBzvC,IAAAA,KAAOy/B,GAAS,SAAAoQ,GAAW,OAAAA,EAARvN,WAA4B8I,CAAW,IACpEz3C,IACT87C,EAAmBzvC,IAAAA,KAAOy/B,GAAS,SAAAqQ,GAAW,OAAAA,EAARxN,WAA4B3uC,CAAE,KAGtE,IAAQo8C,EAAoBN,EAApBM,gBACJA,GAAmBA,EAAgBrnC,OAAS,EAC9C8iC,EAAc,CAACnB,GAAWnpC,QAAAkI,EAAAA,GAAAA,GAAK2mC,KAE/BvE,GAAc,SAAAwE,GAAa,SAAA9uC,QAAAkI,EAAAA,GAAAA,GACtB4mC,GAAa,CAChBP,GAAgB,IAGpBpE,EAAe,GACjB,GAAG,CAAChB,EAAaM,EAAYS,IAIvB6E,GAAyBt3B,EAAAA,EAAAA,cAAY,SAAAu3B,GAAa,IAAVv8C,EAAEu8C,EAAFv8C,GAC5C63C,GAAc,SAACwE,GACb,IAAMG,EAAsBnwC,IAAAA,UAAYgwC,GAAe,SAAAI,GAAW,OAAAA,EAAR9N,WAA4B3uC,CAAE,IACxF,OAAOq8C,EAAcrG,MAAM,EAAGwG,EAAsB,EACtD,IACA9E,EAAe,GACjB,GAAG,CAACG,IAIE6E,GAAyB13B,EAAAA,EAAAA,cAAY,SAAA23B,GAAiB,IAC1DC,EADkDD,EAANpQ,OACpC6P,gBAAAA,OAAe,IAAAQ,EAAG,GAAEA,EAC5B/E,EAAc,CAACnB,GAAWnpC,QAAAkI,EAAAA,GAAAA,GAAK2mC,IACjC,GAAG,CAAC1F,IAEEmG,IAAyB73B,EAAAA,EAAAA,cAAY,WACzC6yB,EAAc,CAACnB,GACjB,GAAG,CAACA,IAEEoG,IAAe93B,EAAAA,EAAAA,cAAY,SAAA+3B,GAAqB,IAAlB9hB,EAAU8hB,EAAV9hB,WAClC,OAAOwb,EAAWqG,aAAa,CAAE7hB,WAAAA,EAAY0R,eAAgBC,GAC/D,GAAG,CAAC6J,EAAY7J,IAEVoQ,IAAmBh4B,EAAAA,EAAAA,cAAY,SAAAi4B,GAAqC,IAAlChiB,EAAUgiB,EAAVhiB,WAAY0R,EAAcsQ,EAAdtQ,eAClD,OAAO8J,EAAWqG,aAAa,CAAE7hB,WAAAA,EAAY0R,eAAAA,GAC/C,GAAG,CAAC8J,IAEEyG,IAAoBl4B,EAAAA,EAAAA,cAAY,SAAAm4B,GAA+B,IAA5BxO,EAAQwO,EAARxO,SAAU1T,EAAUkiB,EAAVliB,WACjD,OAAOwb,EAAW2G,aAAa,CAAEzO,SAAAA,EAAU1T,WAAAA,GAC7C,GAAG,CAACwb,IAEE4G,IAAer4B,EAAAA,EAAAA,cAAY,SAAAs4B,GAAkC,IAA/B3O,EAAQ2O,EAAR3O,SAAU4O,EAAaD,EAAbC,cAC5C,OAAO9G,EAAW4G,aAAa,CAAE1O,SAAAA,EAAU4O,cAAAA,GAC7C,GAAG,CAAC9G,IAEE+G,IAA2Bx4B,EAAAA,EAAAA,cAAY,SAAAy4B,GAItC,IAHL9c,EAAQ8c,EAAR9c,SACAgO,EAAQ8O,EAAR9O,SACA3R,EAAUygB,EAAVzgB,WAEA,OAAOyZ,EAAWiH,oBAAoB,CACpCvnC,SAAUwqB,EACVgO,SAAUA,GAAY/B,EACtB5P,WAAAA,GAEJ,GAAG,CAACyZ,EAAY7J,IAEV+Q,IAA6B34B,EAAAA,EAAAA,cAAY,SAAA44B,GAMxC,IALLjP,EAAQiP,EAARjP,SACAx4B,EAAQynC,EAARznC,SACA0nC,EAAQD,EAARC,SACAC,EAAMF,EAANE,OACA9gB,EAAU4gB,EAAV5gB,WAEA,OAAOyZ,EAAWkH,2BAA2B,CAC3ChP,SAAUA,GAAY/B,EACtBz2B,SAAAA,EACA0nC,SAAAA,EACAC,OAAAA,EACA9gB,WAAAA,GAEJ,GAAG,CAAC4P,EAAiB6J,IAEfsH,IAAyB/4B,EAAAA,EAAAA,cAAY,SAAAg5B,GAGpC,IAFLhP,EAAUgP,EAAVhP,WACAiP,EAAUD,EAAVC,WAqBA,OAnBgB,IAAIre,KAAJ,EAAY,SAACC,EAASlqB,GACpC8gC,EAAWyH,uCAAuC,CAChDlP,WAAAA,EACAiP,WAAAA,IACC/Z,MAAK,SAAAia,GAA0B,IAAvBC,EAAKD,EAALC,MAAOC,EAAQF,EAARE,SAChB7F,EAAoCppB,QAAQ9hB,KAAK8wC,GAEjDA,EAAME,GAAG,CACPC,UAAW,WAAF,OAAQ1e,EAAQ,CAAEue,MAAAA,EAAOC,SAAAA,GAAW,EAC7C3yB,QAAS/V,EACT6oC,SAAU,WACR7M,EAAS,mDAETh8B,GACF,GAEJ,GACF,GAGF,GAAG,CAACg8B,EAAU8E,IAERgI,IAAsBz5B,EAAAA,EAAAA,cAAY,SAAA05B,GAMjC,IALL1P,EAAU0P,EAAV1P,WACA2P,EAAqBD,EAArBC,sBACA74B,EAAI44B,EAAJ54B,KACA6oB,EAAQ+P,EAAR/P,SACA6K,EAAUkF,EAAVlF,WAEIoF,EAAwB,KACxBpF,IACFoF,EAAwBpF,EAAWqF,YAAY,sBACzBC,WAIxB,IACMC,EAAwBJ,EAAwB,SAACK,GACrD,OAAOL,EAAsB,CAC3BryB,OAHU,GAGF0yB,EACRC,MAAO,GAEX,OAAIjqC,EACEkqC,EAA4BP,EAAwB,SAACQ,GACzD,IAAQ7yB,EAAkB6yB,EAAlB7yB,OAAQ2yB,EAAUE,EAAVF,MAEhB,OAAON,EAAsB,CAC3BryB,OAXU,GAWD2yB,EAAkB3yB,GAAU,EAX3B,IAYV2yB,MAAAA,GAEJ,OAAIjqC,EAEJ,OAAO+oC,GAAuB,CAC5B/O,WAAAA,EACAiP,WAAYc,IACX7a,MAAK,SAAAkb,GAA0B,IAAvBhB,EAAKgB,EAALhB,MAAOC,EAAQe,EAARf,SAGhB,OAFA7F,EAAoCppB,QAAU/iB,IAAAA,QAAUmsC,EAAoCppB,QAASgvB,GAE9F3H,EAAW4I,qBAAqB,CACrC1Q,SAAUA,GAAY/B,EACtBj2B,MAAO,CAAE0nC,SAAAA,EAAUv4B,KAAAA,GACnB6V,gBAAiBxzB,GAAAA,GAAgBE,MACjCi3C,WAAYJ,IACXK,SAAQ,WACLX,GACFA,EAAsBY,MAE1B,GACF,GACF,GAAG,CAAC5S,EAAiB6J,EAAYsH,KAE3B0B,GAA2B,WAC/BpzC,IAAAA,KAAOmsC,EAAoCppB,SAAS,SAACgvB,GACnDA,EAAMsB,QACR,GACF,EAEMC,IAAiB36B,EAAAA,EAAAA,cAAY,SAAA46B,GAI5B,IAHLC,EAAQD,EAARC,SACA/5B,EAAI85B,EAAJ95B,KACA6oB,EAAQiR,EAARjR,SAEA,OAAO8H,EAAWkJ,eAAe,CAC/BhR,SAAUA,GAAY/B,EACtBiT,SAAAA,EACA/5B,KAAAA,GAEJ,GAAG,CAAC8mB,EAAiB6J,IAEfqJ,IAAsB96B,EAAAA,EAAAA,cAAY,SAAA+6B,GAMjC,IALLjb,EAASib,EAATjb,UACA6Z,EAAqBoB,EAArBpB,sBACAqB,EAASD,EAATC,UACArR,EAAQoR,EAARpR,SACAsR,EAAcF,EAAdE,eAEA,OAAOxJ,EAAW4I,qBAAqB,CACrC1Q,SAAUA,GAAY/B,EACtBj2B,MAAO,CAAEgC,KAAMmsB,EAAWhf,KAAMk6B,GAChCrkB,gBAAiBxzB,GAAAA,GAAgBC,MACjCk3C,WAAYX,EACZsB,eAAAA,GAEJ,GAAG,CAACrT,EAAiB6J,IAEfyJ,IAA2Bl7B,EAAAA,EAAAA,cAAY,SAAAm7B,GAGtC,IAFLC,EAAYD,EAAZC,aACAzR,EAAQwR,EAARxR,SAEA,OAAO8H,EAAW4J,sBAAsB,CACtC1R,SAAUA,GAAY/B,EACtBwT,aAAAA,GAEJ,GAAG,CAAC3J,EAAY7J,IAEV0T,IAA4Bt7B,EAAAA,EAAAA,cAAY,SAAAu7B,GAIvC,IAHLC,EAAaD,EAAbC,cACArqC,EAAQoqC,EAARpqC,SACAw4B,EAAQ4R,EAAR5R,SAEA,OAAO8H,EAAWgK,uBAAuB,CACvC9R,SAAUA,GAAY/B,EACtB4T,cAAAA,EACArqC,SAAAA,GAEJ,GAAG,CAACsgC,EAAY7J,IAEV8T,IAA4B17B,EAAAA,EAAAA,cAAY,SAAA27B,GAKvC,IAJLC,EAAaD,EAAbC,cACAC,EAAQF,EAARE,SACA1sC,EAAWwsC,EAAXxsC,YACAw6B,EAAQgS,EAARhS,SAEA,OAAO8H,EAAWqK,uBAAuB,CACvCnS,SAAUA,GAAY/B,EACtBgU,cAAAA,EACAC,SAAAA,EACA1sC,YAAAA,GAEJ,GAAG,CAACsiC,EAAY7J,IAEVmU,IAAc/7B,EAAAA,EAAAA,cAAY,SAAAg8B,GAIzB,IAHLC,EAAOD,EAAPC,QACAtlB,EAAeqlB,EAAfrlB,gBACA7V,EAAIk7B,EAAJl7B,KAEA,OAAO2wB,EAAWsK,YAAY,CAC5BE,QAAAA,EACAtlB,gBAAAA,EACA7V,KAAAA,IACCoe,MAAK,WACNyN,EAAS,gCAAiC,CAAEsP,QAAAA,EAAStlB,gBAAAA,EAAiBulB,QAASp7B,IAG/E,IAAQzP,EAAW2gC,EAAX3gC,OACF0hB,EAAM1rB,IAAAA,UAAYgK,GAAQ,SAAAM,GAAK,OAAIA,EAAM3W,KAAOihD,CAAO,IAC7D,GAAIlpB,GAAO,GAAK1hB,EAAO0hB,GAAKjS,OAASA,EAAM,CACzC,IAAMq7B,GAAQvtC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAQyC,EAAO0hB,IAAI,IAAEjS,KAAAA,IAC7BsrB,GAAS37B,EAAAA,GAAAA,GAAOY,GACtB+6B,EAAUgQ,OAAOrpB,EAAK,EAAGopB,GACzB3J,EAAUpG,EACZ,CACF,GACF,GAAG,CAAC4F,EAAYrF,EAAU8E,EAAYe,IAEhC6J,IAAcr8B,EAAAA,EAAAA,cAAY,SAAAs8B,GAGzB,IAFLL,EAAOK,EAAPL,QACAtlB,EAAe2lB,EAAf3lB,gBAEA,OAAO8a,EAAW4K,YAAY,CAAEJ,QAAAA,EAAStlB,gBAAAA,IACtC4lB,KAAI,WACH5P,EAAS,gCAAiC,CAAEsP,QAAAA,EAAStlB,gBAAAA,GACvD,GACJ,GAAG,CAAC8a,EAAY9E,IAGV6P,IAA0Bx8B,EAAAA,EAAAA,cAAY,SAAAy8B,GAA4C,IAAzCprC,EAAMorC,EAANprC,OAAQqrC,EAAUD,EAAVC,WAAYC,EAAaF,EAAbE,cACjE,OAAOlL,EAAWmL,iBAAiBvrC,GAAQ6tB,MAAK,SAAA2d,GAAwB,IAArBC,EAAaD,EAAbC,cAWjD,OAVYz1C,IAAAA,IAAMy1C,GAAe,SAAAC,GAE1B,IADLxiB,EAAGwiB,EAAHxiB,IAAS0hB,EAAOc,EAAX/hD,GAAmBgiD,EAASD,EAAfj8B,KAAiB6V,EAAeomB,EAAfpmB,gBAAiBtnB,EAAG0tC,EAAH1tC,IAAKmd,EAAYuwB,EAAZvwB,aAKzD,OAHAmwB,EAAc,CACZpiB,IAAAA,EAAK0hB,QAAAA,EAASe,UAAAA,EAAWC,KAAMP,EAAYpN,UAAW3Y,EAAiBnK,aAAcA,GAAgBnd,EAAK6tC,IAAK,qBAAsBnQ,UAAWxS,GAAOA,EAAIwS,YAEtJ,CACLxS,IAAAA,EAAK0hB,QAAAA,EAASe,UAAAA,EAAWN,WAAAA,EAAY/lB,gBAAAA,EAEzC,GAEF,IAAG2J,OAAM,SAAC/F,GAWR,OAVYlzB,IAAAA,IAAMgK,GAAQ,SAAA8rC,GAEnB,IADDlB,EAAOkB,EAAXniD,GAAmBgiD,EAASG,EAAfr8B,KAAiB6V,EAAewmB,EAAfxmB,gBAAiBtnB,EAAG8tC,EAAH9tC,IAAKmd,EAAY2wB,EAAZ3wB,aAKpD,OAHAmwB,EAAc,CACZpiB,IAAAA,EAAK0hB,QAAAA,EAASe,UAAAA,EAAWC,KAAMP,EAAYpN,UAAW3Y,EAAiBnK,aAAcA,GAAgBnd,EAAK6tC,IAAK,qBAAsBnQ,UAAWxS,GAAOA,EAAIwS,YAEtJ,CACLxS,IAAAA,EAAK0hB,QAAAA,EAASe,UAAAA,EAAWN,WAAAA,EAAY/lB,gBAAAA,EAEzC,GAEF,GACF,GAAG,CAAC8a,IAGE2L,IAA0Bp9B,EAAAA,EAAAA,cAAY,SAAAq9B,GAErC,IADL1T,EAAQ0T,EAAR1T,SAAU1T,EAAUonB,EAAVpnB,WAAYymB,EAAUW,EAAVX,WAAUY,EAAAD,EAAEV,cAAAA,OAAa,IAAAW,EAAGj2C,IAAAA,KAAMi2C,EAExD,OAAOpF,GAAkB,CAAEvO,SAAAA,EAAU1T,WAAAA,IAAciJ,MAAK,WAItD,OAHAyd,EAAc,CACZhT,SAAAA,EAAU1T,WAAAA,EAAYgnB,KAAMP,EAAYQ,IAAK,oBAExC,CACLvT,SAAAA,EAAU1T,WAAAA,EAAYymB,WAAAA,EAE1B,IAAGpc,OAAM,SAAC/F,GAIR,OAHAoiB,EAAc,CACZpiB,IAAAA,EAAKoP,SAAAA,EAAU1T,WAAAA,EAAYgnB,KAAMP,EAAYQ,IAAK,kBAAmBnQ,UAAWxS,GAAOA,EAAIwS,YAEtF,CACLxS,IAAAA,EAAKoP,SAAAA,EAAU1T,WAAAA,EAAYymB,WAAAA,EAE/B,GACF,GAAG,CAACxE,KAKEqF,IAAev9B,EAAAA,EAAAA,cAAY,SAAAw9B,GAE1B,IAADC,EAAAD,EADJ1W,QAAAA,OAAO,IAAA2W,EAAG,GAAEA,EAAAC,EAAAF,EAAEnsC,OAAAA,OAAM,IAAAqsC,EAAG,GAAEA,EAAET,EAAIO,EAAJP,KAAMN,EAAaa,EAAbb,cAAegB,EAAaH,EAAbG,cAE1CjB,EAAaO,GAAQpM,GAAch1C,EAAMi1C,GAG/C,OAAOlW,KAAAA,IACLkM,GACA,SAAA8W,GAAA,IAAGjU,EAAQiU,EAARjU,SAAU1T,EAAU2nB,EAAV3nB,WAAuB4nB,EAAED,EAAb1nB,UAAS,OAAWynB,EAAc,CACzDhU,SAAAA,EAAU1T,WAAAA,EAAYgnB,KAAMP,EAAYhrB,eAAgBmsB,EAAGpnB,WAAYkmB,cAAAA,GACvE,GACF,CAAEmB,YAPqB,IAQvB5e,MAAK,SAAC6e,GACN,OAAOvB,GAAwB,CAAEnrC,OAAAA,EAAQqrC,WAAAA,EAAYC,cAAAA,IAAiBzd,MAAK,SAAC8e,GAC1E,MAAO,CAAElX,QAASiX,EAAe1sC,OAAQ2sC,EAC3C,GACF,GACF,GAAG,CAACxB,GAAyB1L,EAAYj1C,IAEnCu8C,IAAep4B,EAAAA,EAAAA,cAAY,SAAAi+B,GAO1B,IANLtU,EAAQsU,EAARtU,SACA1T,EAAUgoB,EAAVhoB,WACgBioB,EAAWD,EAA3BvsB,eACAurB,EAAIgB,EAAJhB,KACAN,EAAasB,EAAbtB,cAAawB,EAAAF,EACbhK,KAAAA,OAAI,IAAAkK,EAAG,EAACA,EAEFzB,EAAaO,GAAQpM,GAAch1C,EAAMi1C,GA8C/C,OAAIoN,GAAe,EACVd,GAAwB,CAC7BzT,SAAAA,EAAU1T,WAAAA,EAAYymB,WAAYO,EAAMN,cAAAA,IA5C9BlL,EAAWoD,cAAc,CACnClL,SAAAA,EAAU9/B,OAAQopC,EAAU7oB,QAAS6pB,KAAAA,EAAMhf,MAAO7yB,GAAAA,GAAmB8xC,eAAe,EAAMC,mBAAmB,IAC5GjV,MAAK,SAAC3C,GACP,IACA6hB,EADmB7hB,EAAXgL,QACwE,CAAC,EAAzEuN,EAAUsJ,EAAVtJ,WAAYzjC,EAAM+sC,EAAN/sC,OAAiCgtC,EAAUD,EAAnCloB,UAAaO,WAKzC,OAHAkW,EAAS,wCAAyC,CAAEhD,SAAAA,EAAU1T,WAAAA,EAAYvE,eAAgB2sB,IAGtFA,GAAc,EACT,CAAEC,aAAa,GAIjBf,GAAa,CAClBzW,QAASgO,EAAYzjC,OAAAA,EAAQ4rC,KAAK,GAAD10C,OAAKm0C,GAAUn0C,OAAGqoC,IAAcroC,OAAG0tB,GAAc0mB,cAAAA,EAAegB,cAAevF,KAC/GlZ,MAAK,SAACqf,GAEP,IAAIC,EAAUvK,EAQd,OAPqB5sC,IAAAA,OAAS,GAADkB,QAAAkI,EAAAA,GAAAA,GAAK8tC,EAAQzX,UAAOr2B,EAAAA,GAAAA,GAAK8tC,EAAQltC,UAAS,SAAAotC,GAAM,OAAAA,EAAHlkB,GAAc,IAAExqB,QACtE,IAElByuC,EAAUvK,EAAO7xC,GAAAA,IAIZ,CAAEk8C,YAAaD,EAAapK,EAAO7xC,GAAAA,GAAmBo8C,QAAAA,EAC/D,GACF,IAAGle,OAAM,SAAC7sB,GAER,IAAM8mB,EAAM,IAAIqS,GAAmB,CAAExI,QAAS,gCAAiCK,YAAahxB,EAAGu5B,eAAgBe,KAM/G,OALA4O,EAAc,CACZlpC,EAAGk2B,SAAAA,EAAU1T,WAAAA,EAAYgnB,KAAMP,EAAYQ,IAAK,mBAAoBnQ,UAAWxS,GAAOA,EAAIwS,YAIrF,CAAEuR,iBAAatuC,EAAW0uC,cAAenkB,EAClD,IAYiC2E,MAAK,SAAAyf,GAA8C,IAA3CL,EAAWK,EAAXL,YAAaE,EAAOG,EAAPH,QAASE,EAAaC,EAAbD,cAE/D,OAAoB,IAAhBJ,EACKlG,GAAa,CAClBzO,SAAAA,EAAU1T,WAAAA,EAAYvE,eAAgBwsB,EAAaxB,WAAAA,EAAYC,cAAAA,EAAe1I,KAAMuK,KAE7D,IAAhBF,EAEFlB,GAAwB,CAC7BzT,SAAAA,EAAU1T,WAAAA,EAAYymB,WAAAA,EAAYC,cAAAA,EAAe1I,KAAMuK,IAKpD,CACL7U,SAAAA,EAAU1T,WAAAA,EAAYymB,WAAAA,EAAYniB,IAAKmkB,EAI3C,GACF,GAAG,CAACnB,GAAcH,GAAyBtM,EAAYj1C,EAAM8wC,EAAU8E,IAEjEmN,IAAc5+B,EAAAA,EAAAA,cAAY,SAAA6+B,GAAA,IAAAC,EAAAD,EAC9B/X,QAAAA,OAAO,IAAAgY,EAAG,GAAEA,EAAAC,EAAAF,EAAExtC,OAAAA,OAAM,IAAA0tC,EAAG,GAAEA,EAAE9B,EAAI4B,EAAJ5B,KAAI+B,EAAAH,EAAElC,cAAAA,OAAa,IAAAqC,EAAG33C,IAAAA,KAAM23C,EAAA,OACnDzB,GAAa,CACjBzW,QAAAA,EAASz1B,OAAAA,EAAQ4rC,KAAAA,EAAMN,cAAAA,EAAegB,cAAevF,IACrD,GAAE,CAACmF,GAAcnF,KAEb6G,IAAYj/B,EAAAA,EAAAA,cAAY,SAAAk/B,GAAkD,IAA/CC,EAAYD,EAAZC,aAAYC,EAAAF,EAAEpY,QAAAA,OAAO,IAAAsY,EAAG,GAAEA,EAAAC,EAAAH,EAAE7tC,OAAAA,OAAM,IAAAguC,EAAG,GAAEA,EACtE,OAAO5N,EAAWwN,UAAU,CAAEE,aAAAA,EAAcrY,QAAAA,EAASz1B,OAAAA,GACvD,GAAG,CAACogC,IA4CJ,OA1CsB5yB,EAAAA,EAAAA,UAAQ,iBAAO,CACnCioB,QAASkL,EAAWlL,QACpBgK,WAAAA,EACAwE,eAAAA,EACAc,mBAAAA,EACAX,0BAAAA,EACA7B,eAAAA,EACA2C,8BAAAA,EACA3K,mBAAoBoG,EAAWpG,mBAC/BgK,uBAAAA,EACAgB,mBAAAA,EACAU,uBAAAA,EACAI,uBAAAA,EACAG,uBAAAA,GACAC,aAAAA,GACAM,aAAAA,GACAC,aAAAA,GACAL,iBAAAA,GACAlF,cAAAA,EACA0F,yBAAAA,GACA5Q,gBAAAA,EACA6R,oBAAAA,GACAgB,yBAAAA,GACAE,eAAAA,GACAG,oBAAAA,GACAI,yBAAAA,GACAI,0BAAAA,GACAI,0BAAAA,GACAhF,cAAAA,EACAC,yBAAAA,EACAjlB,eAAAA,EACArgB,OAAQ2gC,EAAW3gC,OACnBmhC,UAAAA,EACAuJ,YAAAA,GACAM,YAAAA,GACAuC,YAAAA,GACAK,UAAAA,GACAtG,2BAAAA,GACArG,gBAAiBmB,EACjB6L,kBAAmBtN,EAAWxF,SAC/B,GAAG,CAACwF,EAAWlL,QAASkL,EAAWpG,mBAAoBoG,EAAW3gC,OAAQ2gC,EAAWxF,SAAUsE,EAAYwE,EAAgBc,EAAoBX,EAA2B7B,EAAgB2C,EAA+BX,EAAwBgB,EAAoBU,EAAwBO,GAAwBH,EAAwBI,GAAcM,GAAcC,GAAcL,GAAkBlF,EAAe0F,GAA0B5Q,EAAiB6R,GAAqBkB,GAAgBG,GAAqBI,GAA0BI,GAA2BI,GAA2BhF,EAAeC,EAA0BnE,EAAWuJ,GAAaM,GAAauC,GAAaK,GAAWxL,EAAWkF,IAGjsB,EAEArH,GAAWiO,UAAY,CACrB9N,WAAY+N,KAAAA,MAAgB,CAC1BC,WAAYD,KAAAA,KAAep1C,WAC3Bs1C,UAAWF,KAAAA,KAAep1C,WAC1B0tC,aAAc0H,KAAAA,KAAep1C,aAC5BA,WACHsM,OAAQ8oC,KAAAA,MAAgB,CACtB7S,SAAU6S,KAAAA,KAAep1C,aACxBA,YC51BE,IAAMu1C,GAA4B,SAAH/jD,GAK/B,IAJLgkD,EAAehkD,EAAfgkD,gBACAlpC,EAAM9a,EAAN8a,OACAmpC,EAAYjkD,EAAZikD,aACAC,EAAelkD,EAAfkkD,gBAEMC,GAAqB3iC,EAAAA,EAAAA,QAAO,GAClCjL,GAAoDC,EAAAA,EAAAA,UAAS,CAAC,GAAEC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAAzDX,EAAkBa,EAAA,GAAE2tC,EAAqB3tC,EAAA,GAEhDsgC,GAAsDvgC,EAAAA,EAAAA,UAAS,MAAKwgC,GAAAtgC,EAAAA,GAAAA,GAAAqgC,EAAA,GAA7DsN,EAAmBrN,EAAA,GAAEsN,EAAsBtN,EAAA,GAE5CuN,GAAengC,EAAAA,EAAAA,cAAY,SAAAlP,GAAmC,IAAhCsvC,EAAOtvC,EAAPsvC,QAAOC,EAAAvvC,EAAEwvC,SAC3C,QADmD,IAAAD,GAAOA,EAC5C,CACZ,IAAMxqC,EAAQxO,IAAAA,KAAOw4C,GAAc,SAAAp4B,GAAG,OAAIA,EAAIzsB,KAAOolD,CAAO,IAC5D,GAAIvqC,EACF,OAAO+kB,KAAAA,QAAgB/kB,EAE3B,CAEA,OAAO+pC,EAAgBW,SAASH,EAClC,GAAG,CAACP,EAAcD,IAEZY,GAA6BxgC,EAAAA,EAAAA,cAAY,SAACogC,GAC9C,IAAMzL,EAAmBptC,KAAKD,MAC9B,OAAOs4C,EAAgBY,2BAA2BJ,GAASlhB,MAAK,SAAA/nB,GAAiC,IAA9BspC,EAAKtpC,EAALspC,MA6BjE,OA3BI9L,EAAmBoL,EAAmB31B,UAExC41B,GAAsB,SAACU,GACrB,IAAIC,GAAQ,EACNC,GAAWH,GAAS,IAAI9tC,QAAO,SAACmrB,GAAoB,IAAd+iB,EAAG/wC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EAC3CgxC,EAASJ,GAAYA,EAASG,EAAI7lD,IAClC+lD,EAAS15C,IAAAA,KAAOw5C,EAAK,CAAC,KAAM,QAAS,WAAY,iBAAkB,gBAAkB,CAAC,EAC5F,OAAIE,EAAOjvC,YACT6uC,EAAQA,KAAWG,EAEZhjB,IAEJgjB,GAAWz5C,IAAAA,QAAUy5C,EAAQC,KAChCJ,GAAQ,IAEV/xC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAYkvB,GAAI,IAAA76B,EAAAA,GAAAA,GAAA,GAAG89C,EAAO/lD,GAAK+lD,IACjC,GAAG,CAAC,GAEJ,OADAJ,EAAQA,IAAUt5C,IAAAA,QAAUA,IAAAA,WAAaA,IAAAA,KAAOq5C,GAAWr5C,IAAAA,KAAOu5C,MAEzDA,EAEFF,CACT,IAEAX,EAAmB31B,QAAUuqB,GAGxB,CAAE0J,WADSh3C,IAAAA,OAASo5C,GAAS,IAAI,SAAAO,GAAC,OAAIA,IAAMA,EAAElvC,UAAU,IAAE/B,OAEnE,IAAGuwB,OAAM,SAAC2gB,GAERvqC,EAAOE,SAAS,6CAADrO,OAA8CgL,KAAK+wB,UAAU2c,IAC9E,GACF,GAAG,CAACvqC,EAAQkpC,EAAiBG,IAEvBmB,GAAclhC,EAAAA,EAAAA,cAAY,SAAAyR,GAAiC,IAArB2uB,EAAO3uB,EAAhBwqB,QAAkBn7B,EAAI2Q,EAAJ3Q,KAWnD,OAAO8+B,EAAgBsB,YAAY,CAAEd,QAAAA,EAASt/B,KAAAA,IAC3Coe,MAAK,WACJxoB,EAAOi2B,SAAS,gCAAiC,CAAEyT,QAAAA,EAASlE,QAASp7B,IAZhD,SAACqgC,EAAQC,GAChC,IAAMruB,EAAM1rB,IAAAA,UAAY85C,GAAQ,SAAA15B,GAAG,OAAIA,EAAIzsB,KAAOolD,CAAO,IACzD,GAAIrtB,GAAO,GAAKouB,EAAOpuB,GAAKjS,OAASA,EAAM,CACzC,IAAMugC,GAAQzyC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAQuyC,EAAOpuB,IAAI,IAAEjS,KAAAA,IAC7BwgC,GAAS7wC,EAAAA,GAAAA,GAAO0wC,GACtBG,EAAUlF,OAAOrpB,EAAK,EAAGsuB,GACzBD,EAAUE,EACZ,CACF,CAKIC,CAAiB1B,EAAcC,EACjC,IACCzK,UAAS,WACR,GAEN,GAAG,CAACuK,EAAiBlpC,EAAQmpC,EAAcC,IAErC0B,GAAcxhC,EAAAA,EAAAA,cAAY,SAAAjH,GAA2B,IAAfqnC,EAAOrnC,EAAhBkjC,QAQjC,OAPgB2D,EAAgB4B,YAAYpB,GACzC7D,KAAI,WACH7lC,EAAOi2B,SAAS,gCAAiC,CAAEyT,QAAAA,GACrD,IACC/K,UAAS,WACR,GAGN,GAAG,CAAC3+B,EAAQkpC,IAEN6B,GAAYzhC,EAAAA,EAAAA,cAAY,SAAAgW,GAAmD,IAAhDoqB,EAAOpqB,EAAPoqB,QAAS3wC,EAAYumB,EAAZvmB,aAAciyC,EAAiB1rB,EAAjB0rB,kBAMtD,OALY9B,EAAgB6B,UAAU,CAAErB,QAAAA,EAAS3wC,aAAAA,EAAciyC,kBAAAA,IAAqBxiB,MAAK,WAEvFghB,EAAuB,CAAEE,QAAAA,IACzB1pC,EAAOi2B,SAAS,iCAAkC,CAAEyT,QAAAA,GACtD,GAEF,GAAG,CAAC1pC,EAAQkpC,IAEN+B,GAAc3hC,EAAAA,EAAAA,cAAY,SAAAu1B,GAA+B,IAA5BqM,EAAYrM,EAAZqM,aAAc9I,EAAMvD,EAANuD,OAE/C,OADY8G,EAAgB+B,YAAY,CAAEC,aAAAA,EAAc9I,OAAAA,GAE1D,GAAG,CAAC8G,IAsBJ,OApBkB/gC,EAAAA,EAAAA,UAAQ,iBAAO,CAC/BrN,mBAAAA,EACAyuC,oBAAAA,EACAE,aAAAA,EACAK,2BAAAA,EACAU,YAAAA,EACAM,YAAAA,EACAC,UAAAA,EACAE,YAAAA,EACD,GAAG,CACFnwC,EACAyuC,EACAE,EACAK,EACAU,EACAM,EACAC,EACAE,GAIJ,EC7HME,GAAqC,CACzC,eACA,MACA,QACA,SACA,eACA,U,kBCRF,SAASC,GAAWvnB,GAClB,IAAQwS,GAAcxS,GAAO,CAAC,GAAtBwS,UACR,MAAO,CAAC,qCAAsC,wBAAwB92B,SAAS82B,EACjF,CAGA,SAASgV,GAAaC,EAAYn6B,EAAYve,EAAOoN,EAAM5F,GAAiD,IAADmxC,EAAAnxC,EAA5CoxC,QAAAA,OAAO,IAAAD,EAAG,IAAIA,EAAAE,EAAArxC,EAAEs/B,YAAAA,OAAW,IAAA+R,EAAG,kBAAM,CAAI,EAAAA,EACrG,OAAOH,IAAa1hB,OAAM,SAAC/F,GACzB,IAAMjzB,EAAMC,KAAKD,MAGjB,OAAIugB,GAAc,GAFFvgB,EAAMgC,EAEW44C,GAAW9R,EAAY7V,GAC/CwnB,GAAaC,EAAYn6B,EAAa,EAAGve,EAAOoN,EAAQ,CAAEwrC,QAAAA,EAAS9R,YAAAA,KAG5E15B,EAAOE,SAAS,+CACTgkB,KAAAA,OAAeL,GACxB,GACF,CAEO,IAAM6nB,GAAuB,SAAHjrC,GAK1B,IAJLs6B,EAAUt6B,EAAVs6B,WACA/6B,EAAMS,EAANT,OAAM2rC,EAAAlrC,EACNmrC,aAAAA,OAAY,IAAAD,EAAG,IAAIA,EAAAE,EAAAprC,EACnBqrC,cAAAA,OAAa,IAAAD,EAAG,EAACA,EAyEjB,MAAO,CACLE,oBAxEyBziC,EAAAA,EAAAA,cAAY,SAAAyR,GAEhC,IADLixB,EAAMjxB,EAANixB,OAAQzJ,EAAUxnB,EAAVwnB,WAAY0J,EAAclxB,EAAdkxB,eAAgBC,EAAkBnxB,EAAlBmxB,mBAEpC,IAAKnR,EACH,OAAO7W,KAAAA,OAAe,IAAIE,OAG5B,IAwDM+nB,EAAMd,IAxDsB,WAAH,OAAS,IAAInnB,KAAJ,EAAY,SAACC,EAASlqB,GAE5D8gC,EAAWqR,0BAA0BJ,EAAQE,GAAoB1jB,MAAK,SAAC3C,GACrE,IAAQwmB,GAAWxmB,GAAO,CAAC,GAAnBwmB,OAER,GAAKA,IAAUxmB,EAAIyT,kBAAnB,CAQA,IAAInoB,EAAa,EAiCXm7B,EAAapY,GAAc,CAAEE,KAhChB,WAAH,OAAS2G,EAAWwR,8BAA8BF,GAAQ7jB,MAAK,SAACttB,GAE9E,IAAAokB,EAAgCpkB,GAAc,CAAC,EAAvCsxC,EAAUltB,EAAVktB,WAAe5yB,GAAIC,EAAAA,GAAAA,GAAAyF,EAAAxF,IAe3B,OAZA3I,EAAa,EAGToxB,GACFA,GAAUrqC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EAAI0hB,GAAI,IAAE4yB,WAAAA,KAGpBA,GACFroB,GAAOjsB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EAAI0hB,GAAI,IAAEoyB,OAAAA,KAId,CAAE5wC,WAAYoxC,EACvB,IAAG5iB,OAAM,SAAC/F,GAER,OADA1S,GAAc,GACU,IAApB0S,EAAI6V,aAAyBvoB,GAAc26B,GAC7C7xC,EAAO4pB,GAEA,CAAEzoB,YAAY,KAIvB4E,EAAOE,SAAS,wDAADrO,OAAyDsf,EAAU,cAAAtf,OAAaw6C,EAAM,cAAAx6C,OAAam6C,EAAM,aAAAn6C,OAAYgyB,EAAImT,YACjI,CAAE57B,YAAY,GACvB,GAAG,EAGkDk5B,SAAUsX,IAC/DU,EAAW15C,QACPq5C,GACFA,EAAeK,EAvCjB,MAJEnoB,EAAQ,CACNmV,mBAAmB,EAAMC,WAAY1T,EAAI0T,WAAYyS,OAAAA,EAAQvB,OAAQ,IA4C3E,IAAG7gB,OAAM,SAAC/F,GACR5pB,EAAO4pB,EACT,GACF,GAAG,GAEiD,EAAGhzB,KAAKD,MAAOoP,EAAQ,CAAE05B,YAAa0R,GAAYI,QAAS,MAE/G,OAAIxrC,EAAOysC,eACFzsC,EAAOysC,eAAe,CAAEC,QAASP,EAAKre,IAAI,+BAADj8B,OAAiCm6C,GAAUxF,IAAK,uBAE3F2F,CACT,GAAG,CAACnsC,EAAQ8rC,EAAeF,EAAc7Q,IAK3C,EC5FM4R,GAAqC1jC,EAAAA,cAAoB,CAAC,GAEnD2jC,GAAsC,SAAH1nD,GAEzC,IADLf,EAAQe,EAARf,SAAU+kD,EAAehkD,EAAfgkD,gBAAiB2D,EAAc3nD,EAAd2nD,eAAgBC,EAAgB5nD,EAAhB4nD,iBAAkBC,EAAe7nD,EAAf6nD,gBAAiB/sC,EAAM9a,EAAN8a,OAAQkf,EAAgBh6B,EAAhBg6B,iBAAkB/5B,EAAID,EAAJC,KAAM01C,EAAmB31C,EAAnB21C,oBAAqBC,EAA0B51C,EAA1B41C,2BAEnIkS,EAyCIpS,GAAW,CACbG,WAAY+R,EACZ9sC,OAAAA,EACA44B,UAAW1Z,EACX/5B,KAAAA,EACA01C,oBAAAA,EACAC,2BAAAA,IA9CA1K,EAAO4c,EAAP5c,QACAgK,EAAU4S,EAAV5S,WACAwE,EAAcoO,EAAdpO,eACAc,EAAkBsN,EAAlBtN,mBACAX,EAAyBiO,EAAzBjO,0BACA7B,EAAc8P,EAAd9P,eACA2C,EAA6BmN,EAA7BnN,8BACA3K,EAAkB8X,EAAlB9X,mBACAgK,EAAsB8N,EAAtB9N,uBACAgB,EAAkB8M,EAAlB9M,mBACAU,EAAsBoM,EAAtBpM,uBACAI,EAAsBgM,EAAtBhM,uBACAG,EAAsB6L,EAAtB7L,uBACAC,EAAY4L,EAAZ5L,aACAE,EAAgB0L,EAAhB1L,iBACAI,EAAYsL,EAAZtL,aACAC,EAAYqL,EAAZrL,aACAvF,EAAa4Q,EAAb5Q,cACAlL,EAAe8b,EAAf9b,gBACA6R,EAAmBiK,EAAnBjK,oBACAgB,EAAwBiJ,EAAxBjJ,yBACAE,EAAc+I,EAAd/I,eACAnC,EAAwBkL,EAAxBlL,yBACAsC,EAAmB4I,EAAnB5I,oBACAI,EAAwBwI,EAAxBxI,yBACAI,EAAyBoI,EAAzBpI,0BACAI,EAAyBgI,EAAzBhI,0BACAhF,EAAagN,EAAbhN,cACAC,EAAwB+M,EAAxB/M,yBACAjlB,EAAcgyB,EAAdhyB,eACAiyB,EAAqBD,EAArBC,sBACAtyC,EAAMqyC,EAANryC,OACAmhC,EAASkR,EAATlR,UACAuJ,EAAW2H,EAAX3H,YACAM,EAAWqH,EAAXrH,YACAuC,EAAW8E,EAAX9E,YACAK,EAASyE,EAATzE,UACA3M,EAAeoR,EAAfpR,gBACAgN,GAAiBoE,EAAjBpE,kBACA3G,GAA0B+K,EAA1B/K,2BAUFiL,GAOIjE,GAA0B,CAC5BC,gBAAAA,EACAlpC,OAAAA,EACAmpC,aAAcxuC,EACdyuC,gBAAiBtN,IAVjBhhC,GAAkBoyC,GAAlBpyC,mBACAyuC,GAAmB2D,GAAnB3D,oBACAE,GAAYyD,GAAZzD,aACAK,GAA0BoD,GAA1BpD,2BACAiB,GAASmC,GAATnC,UACAE,GAAWiC,GAAXjC,YASAc,GACEL,GAAqB,CAAE3Q,WAAY8R,EAAgB7sC,OAAAA,IADrD+rC,mBAGFoB,GFtEuC,SAAHjoD,GAI/B,IAHL61C,EAAU71C,EAAV61C,WACAgS,EAAe7nD,EAAf6nD,gBACA/sC,EAAM9a,EAAN8a,OAEMqpC,GAAqB3iC,EAAAA,EAAAA,QAAO,GAClCjL,GAAwCC,EAAAA,EAAAA,UAAS,CAAC,GAAEC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAA7CV,EAAYY,EAAA,GAAEyxC,EAAezxC,EAAA,GAC9B0xC,GAAqB/jC,EAAAA,EAAAA,cAAY,SAACgkC,GACtC,IAAMrP,EAAmBptC,KAAKD,MACxB28C,EAAgB58C,IAAAA,KAAO28C,GAE7B,OAAOvS,EAAWyS,uBAAuBD,GAAe/kB,MAAK,SAACilB,GAE5D,IAAIC,EAAsB,CAAC,EACvBC,EAAkB,CAAC,EACvB,GAAI1P,EAAmBoL,EAAmB31B,QAAS,CACjD,IAAMk6B,EAAe,GAErBH,EAASngB,SAAQ,SAACr1B,GAChB21C,EAAah8C,KAAKqG,EAAK3T,IACvBqpD,GAAez1C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACVy1C,GAAe,IAAAphD,EAAAA,GAAAA,GAAA,GACjB0L,EAAK3T,GAAKqM,IAAAA,KAAOsH,EAAMkzC,MAGtBlzC,IAAQqE,EAAAA,GAAAA,GAA8BrE,KACxCy1C,GAAmBx1C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAQw1C,GAAmB,IAAAnhD,EAAAA,GAAAA,GAAA,GAAG0L,EAAK3T,GAAK2T,EAAKqD,SAEpE,IAGA+tC,EAAmB31B,QAAUuqB,CAC/B,CAMA,OAJAmP,EAAgBO,GAIT,CAAEhG,WAFShb,OAAOU,KAAKqgB,GAAqBr0C,OAGrD,IAAGuwB,OAAM,WAEP5pB,EAAOE,SAAS,oCAClB,GACF,GAAG,CAACF,EAAQ+6B,IAEN8S,GAAmBvkC,EAAAA,EAAAA,cAAY,SAAAlP,GAAwB,IAArB0zC,EAAa1zC,EAAb0zC,cAEtC,OADgBf,EAAgBc,iBAAiB,CAAEC,cAAAA,GAErD,GAAG,CAACf,IAEEgB,GAAWzkC,EAAAA,EAAAA,cAAY,SAAA7I,GAA4B,IAAzBnc,EAAEmc,EAAFnc,GAAI0pD,EAAavtC,EAAbutC,cAElC,OADgBjB,EAAgBgB,SAAS,CAAEzpD,GAAAA,EAAI0pD,cAAAA,GAEjD,GAAG,CAACjB,IASJ,OAPkB5kC,EAAAA,EAAAA,UAAQ,iBAAO,CAC/BklC,mBAAAA,EACAtyC,aAAAA,EACA8yC,iBAAAA,EACAE,SAAAA,EACD,GAAG,CAACF,EAAkBE,EAAUV,EAAoBtyC,GAGvD,CESMkzC,CAA0B,CAC5BlT,WAAY+R,EACZC,gBAAAA,EACA/sC,OAAAA,EACA7a,KAAAA,IALAkoD,GAAkBF,GAAlBE,mBAAoBtyC,GAAYoyC,GAAZpyC,aAAc8yC,GAAgBV,GAAhBU,iBAAkBE,GAAQZ,GAARY,SAQtDG,GC9E+B,SAAHhpD,GAAoD,IAA9C61C,EAAU71C,EAAV61C,WAAYD,EAA0B51C,EAA1B41C,2BAC9Cr/B,GAA4CC,EAAAA,EAAAA,UAAS,IAAGC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAAjD0yC,EAAcxyC,EAAA,GAAEyyC,EAAiBzyC,EAAA,GAElC0yC,GAAuB/kC,EAAAA,EAAAA,cAAY,SAACglC,EAAuBC,EAAaC,GAA8D,IAA/CC,EAAoBr1C,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GAAIs1C,EAAMt1C,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GACtHu1C,EAAkB,SAAA72B,GAAK,OAAIA,EAAM3d,KAAI,SAAClC,GAC1C,GAAIs2C,EAAYhvC,SAAStH,EAAKg7B,UAAW,CACvC,IAAM9a,EAAQo2B,EAAY5xB,QAAQ1kB,EAAKg7B,UACvC,GAAIyb,EACF,OAAAx2C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACKD,GAAI,IACP22C,WAAYJ,EAAcr2B,GAC1B02B,gBAAiBJ,EAAqBt2B,KAG1C,IAAM22B,EAAa,GAAAj9C,QAAAkI,EAAAA,GAAAA,GAAO9B,EAAK22C,aAAU70C,EAAAA,GAAAA,GAAKy0C,EAAcr2B,KAC5D,OAAAjgB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACKD,GAAI,IACP22C,WAAYE,GAEhB,CACA,OAAA52C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACKD,GAAI,IACP22C,WAAY32C,EAAK22C,WAAWv1C,OAAS,EAAIs1C,EAAgB12C,EAAK22C,YAAc32C,EAAK22C,YAErF,GAAG,EAEH,OAAOD,EAAgBL,EACzB,GAAG,IAEGS,GAA4BzlC,EAAAA,EAAAA,cAAY,SAAAlP,GAIvC,IAHL64B,EAAQ74B,EAAR64B,SACAsK,EAAInjC,EAAJmjC,KAGA,OAAOxC,EAAWoD,cAAc,CAC9BtD,oBAAqBC,EACrB3nC,OAAQ7L,GAAAA,GAAWC,UACnBg2C,KAAMA,GAAQ,EACdhf,MAAO7yB,GAAAA,GACPunC,SAAAA,EACAuK,eAAe,EACfC,mBAAmB,EACnBL,wBAAwB,EACxBD,2BAA2B,EAC3BO,uBAAuB,EACvBM,YAAY,IACXxV,MAAK,SAAC3C,GACP,IAAQgL,EAAWhL,EAAXgL,OASR,MAAO,CACL+d,YATkB/d,EAAOuN,YAAc,IAAIjkC,KAAI,SAAA60C,GAAS,MAAK,CAC7D/b,SAAU+b,EAAU/b,SACpB1T,WAAYyvB,EAAUzvB,WACtBqvB,WAAY,GACZC,gBAAiBG,EAAUxvB,UAAUG,gBACrC+gB,gBAAiBsO,EAAUtO,gBAC5B,IAIC+N,qBAH2B5d,EAAOrR,UAAUG,iBAAmB,EAKnE,GACF,GAAG,CAACmb,EAA4BC,IAE1BkU,GAA2B3lC,EAAAA,EAAAA,cAAY,kBAAMylC,EAA0B,CAC3E9b,SAAUzmC,GAAAA,KACTg8B,MAAK,SAAA/nB,GAGD,IAFLmuC,EAAUnuC,EAAVmuC,WACAH,EAAoBhuC,EAApBguC,qBAEAL,EAAkB,CAAC,CACjBnb,SAAUzmC,GAAAA,GACVoiD,WAAAA,EACAC,gBAAiBJ,EACjBlvB,WAAY,OACZmhB,gBAAiB,KAErB,GAAE,GAAE,CAACqO,IAgCL,MAAO,CACLZ,eAAAA,EACAe,wBAhC6B5lC,EAAAA,EAAAA,cAAY,SAAA2pB,GAAQ,OAAI8b,EAA0B,CAC/E9b,SAAAA,IACCzK,MAAK,SAAAzN,GAED,IADL6zB,EAAU7zB,EAAV6zB,WAEAR,GAAkB,SAAAE,GAAqB,OAAID,EAAqBC,EAAuB,CAACrb,GAAW,CAAC2b,GAAY,GAClH,GAAE,GAAE,CAACG,EAA2BV,IA2B9Bc,4BAzBiC7lC,EAAAA,EAAAA,cAAY,SAAC2pB,EAAUmc,GAAkB,OAAKL,EAA0B,CACzG9b,SAAAA,EACAsK,KAAM6R,IACL5mB,MAAK,SAAAnmB,GAED,IADLusC,EAAUvsC,EAAVusC,WAEAR,GAAkB,SAAAE,GAAqB,OAAID,EAAqBC,EAAuB,CAACrb,GAAW,CAAC2b,GAAY,GAClH,GAAE,GAAE,CAACG,EAA2BV,IAmB9BY,yBAAAA,EACAI,0BAlB+B/lC,EAAAA,EAAAA,cAAY,SAAAilC,GAAW,OAAIrqB,GAAAA,QAAQorB,IAAIf,EAAYp0C,KAAI,SAAA84B,GAAQ,OAAI8b,EAA0B,CAC5H9b,SAAAA,IACCzK,MAAK,SAAAlJ,GAEc,MACf,CACLsvB,WAHUtvB,EAAVsvB,WAGYH,qBAFQnvB,EAApBmvB,qBAGD,GAAE,KAAGjmB,MAAK,SAAC9I,GACV,IAAM8uB,EAAgB9uB,EAAOvlB,KAAI,SAAA0kC,GAAa,OAAAA,EAAV+P,UAA2B,IACzDW,EAA0B7vB,EAAOvlB,KAAI,SAAA6kC,GAAuB,OAAAA,EAApByP,oBAA+C,IAC7FL,GAAkB,SAAAE,GAAqB,OAAID,EAAqBC,EAAuBC,EAAaC,EAAee,GAAyB,EAAK,GACnJ,GAAE,GAAE,CAACR,EAA2BV,IASlC,CD/BMmB,CAAkB,CAAEzU,WAAY+R,EAAkBhS,2BAAAA,IALpDqT,GAAcD,GAAdC,eACAe,GAAsBhB,GAAtBgB,uBACAC,GAA0BjB,GAA1BiB,2BACAF,GAAwBf,GAAxBe,yBACAI,GAAwBnB,GAAxBmB,yBAGII,GACJz0B,EAAetH,QAAQkM,iBAAmB5E,EAAetH,QAAQmM,iBAC7D4uB,GAAuBzzB,EAAetH,QAAQiM,gBAE9C+vB,IAAepmC,EAAAA,EAAAA,cAAY,WAgBrB,IAADlP,EAAAhB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAP,CAAC,EAfHilC,EAAUjkC,EAAVikC,WACAsR,EAAav1C,EAAbu1C,cACAC,EAAcx1C,EAAdw1C,eACAlR,EAAkBtkC,EAAlBskC,mBACAvrC,EAAMiH,EAANjH,OACA08C,EAAYz1C,EAAZy1C,aACAC,EAAY11C,EAAZ01C,aAAYC,EAAA31C,EACZ+iC,0BAAAA,OAAyB,IAAA4S,EAAG,EAACA,EAC7BpV,EAAevgC,EAAfugC,gBACAqV,EAAgB51C,EAAhB41C,iBACAC,EAAgB71C,EAAhB61C,iBAAgBC,EAAA91C,EAChB+1C,eAAAA,OAAc,IAAAD,GAAQA,EAAAE,EAAAh2C,EACtBgjC,uBAAAA,OAAsB,IAAAgT,GAAQA,EAC9B7xB,EAAKnkB,EAALmkB,MACA8xB,EAAQj2C,EAARi2C,SAEA,OAAOnT,EAAe,CACpBzC,eAAgB,CACd6D,WAAYD,EACZ16B,SAAUgsC,EACVt1C,UAAWu1C,EACXrR,eAAgBG,GAAsBA,EAAmB9rC,MACzD4rC,aAAcE,GAAsBA,EAAmB7rC,IACvDg9C,aAAAA,EACAC,aAAAA,EACAnV,gBAAAA,EACAqV,iBAAAA,EACAC,iBAAAA,EACAE,eAAAA,EACAE,SAAAA,GAEFl9C,OAAAA,EACAgqC,0BAAAA,EACAC,uBAAAA,EACA7e,MAAAA,GAEJ,GAAG,CAAC2e,IAEEoT,IAAehnC,EAAAA,EAAAA,cAAY,WAqBrB,IAAD7I,EAAArH,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAP,CAAC,EApBHm3C,EAAY9vC,EAAZ8vC,aACAlS,EAAU59B,EAAV49B,WACAsR,EAAalvC,EAAbkvC,cACAC,EAAcnvC,EAAdmvC,eACAlR,EAAkBj+B,EAAlBi+B,mBACAvrC,EAAMsN,EAANtN,OACA08C,EAAYpvC,EAAZovC,aACAC,EAAYrvC,EAAZqvC,aAAYU,EAAA/vC,EACZ08B,0BAAAA,OAAyB,IAAAqT,EAAG,EAACA,EAC7B7V,EAAel6B,EAAfk6B,gBACAqV,EAAgBvvC,EAAhBuvC,iBACAC,EAAgBxvC,EAAhBwvC,iBAAgBQ,EAAAhwC,EAChB0vC,eAAAA,OAAc,IAAAM,GAAQA,EAAAC,EAAAjwC,EACtB28B,uBAAAA,OAAsB,IAAAsT,GAAQA,EAAAC,EAAAlwC,EAC9BmwC,YAAAA,OAAW,IAAAD,GAAQA,EAAAE,EAAApwC,EACnBg9B,kBAAAA,OAAiB,IAAAoT,GAAOA,EACxBtyB,EAAK9d,EAAL8d,MACA8xB,EAAQ5vC,EAAR4vC,SACAva,EAAQr1B,EAARq1B,SACAgI,EAAUr9B,EAAVq9B,WAGA,OAD2ByS,EAAexR,EAA4BH,GAC5C,CACxBnE,eAAgB,CACd6D,WAAYD,EACZ16B,SAAUgsC,EACVt1C,UAAWu1C,EACXrR,eAAgBG,GAAsBA,EAAmB9rC,MACzD4rC,aAAcE,GAAsBA,EAAmB7rC,IACvDg9C,aAAAA,EACAC,aAAAA,EACAnV,gBAAAA,EACAqV,iBAAAA,EACAC,iBAAAA,EACAE,eAAAA,EACAS,YAAAA,EACAP,SAAAA,GAEFvS,WAAAA,EACA3qC,OAAAA,EACAgqC,0BAAAA,EACAC,uBAAAA,EACA7e,MAAAA,EACAkf,kBAAAA,EACA3H,SAAAA,GAEJ,GAAG,CAAC8I,EAAgBG,IAEd+R,IAAWxnC,EAAAA,EAAAA,cAAY,SAAAynC,GAAI,OAAIT,IAAYp4C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EAAI64C,GAAI,IAAER,cAAc,IAAQ,GAAE,CAACD,KAChFU,IAAsB1nC,EAAAA,EAAAA,cAAY,SAAAynC,GAAI,OAAIT,IAAYp4C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EAAI64C,GAAI,IAAER,cAAc,IAAO,GAAE,CAACD,KAE1FW,IAA6B3nC,EAAAA,EAAAA,cAAY,SAC7C81B,GAeI,IAADrkB,EAAA3hB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GADC,CAAC,EAZHilC,EAAUtjB,EAAVsjB,WACAsR,EAAa50B,EAAb40B,cACAC,EAAc70B,EAAd60B,eACAlR,EAAkB3jB,EAAlB2jB,mBACAmR,EAAY90B,EAAZ80B,aACAC,EAAY/0B,EAAZ+0B,aAEAE,EAAgBj1B,EAAhBi1B,iBACAC,EAAgBl1B,EAAhBk1B,iBAAgBiB,EAAAn2B,EAChBo1B,eAAAA,OAAc,IAAAe,GAAQA,EAAAC,EAAAp2B,EACtB61B,YAAAA,OAAW,IAAAO,GAAQA,EACnBd,EAAQt1B,EAARs1B,SAGF,OAAOnR,EAAuB,CAC5BE,qBAAAA,EACA3E,eAAgB,CACd6D,WAAYD,EACZ16B,SAAUgsC,EACVt1C,UAAWu1C,EACXrR,eAAgBG,GAAsBA,EAAmB9rC,MACzD4rC,aAAcE,GAAsBA,EAAmB7rC,IACvDg9C,aAAAA,EACAC,aAAAA,EAEAE,iBAAAA,EACAC,iBAAAA,EACAE,eAAAA,EACAS,YAAAA,EACAP,SAAAA,IAGN,GAAG,CAACnR,IAEEkS,IAAmB9nC,EAAAA,EAAAA,cAAY,SAAAjH,GAAyC,IAAtC4iB,EAAQ5iB,EAAR4iB,SAAUgO,EAAQ5wB,EAAR4wB,SAAU3R,EAAUjf,EAAVif,WAC1D,OAAOwgB,EAAyB,CAAE7c,SAAAA,EAAUgO,SAAAA,EAAU3R,WAAAA,IAAcukB,KAAI,WACtE7lC,EAAOi2B,SAAS,kDAAmD,CAAE3U,WAAAA,EAAY2D,SAAAA,EAAUgO,SAAAA,GAC7F,GACF,GAAG,CAACjzB,EAAQ8hC,IAENuP,IAAc/nC,EAAAA,EAAAA,cAAY,SAAAgW,GAMzB,IALL8J,EAAS9J,EAAT8J,UAASkoB,EAAAhyB,EACT2jB,sBAAAA,OAAqB,IAAAqO,EAAG,KAAIA,EAAAC,EAAAjyB,EAC5BlV,KAAAA,OAAI,IAAAmnC,EAAG,GAAEA,EAAAC,EAAAlyB,EACT2T,SAAAA,OAAQ,IAAAue,EAAG,KAAIA,EACfjN,EAAcjlB,EAAdilB,eAEA,OAAOH,EAAoB,CACzBhb,UAAAA,EACA6Z,sBAAAA,EACAqB,UAAWl6B,EACX6oB,SAAAA,EACAsR,eAAAA,IACCsB,KAAI,WACL7lC,EAAOi2B,SAAS,2CAClB,GACF,GAAG,CAACj2B,EAAQokC,IAENqN,IAAcnoC,EAAAA,EAAAA,cAAY,SAAAu1B,GAMzB,IALLvL,EAAUuL,EAAVvL,WAAUoe,EAAA7S,EACVoE,sBAAAA,OAAqB,IAAAyO,EAAG,KAAIA,EAAAC,EAAA9S,EAC5Bz0B,KAAAA,OAAI,IAAAunC,EAAG,GAAEA,EAAAC,EAAA/S,EACT5L,SAAAA,OAAQ,IAAA2e,EAAG,KAAIA,EAAAC,EAAAhT,EACff,WAEA,OAAOiF,EAAoB,CACzBzP,WAAAA,EACA2P,sBAAAA,EACA74B,KAAAA,EACA6oB,SAAAA,EACA6K,gBAPQ,IAAA+T,EAAG,KAAIA,IAQdhM,KAAI,WACL7lC,EAAOi2B,SAAS,2CAClB,GACF,GAAG,CAACj2B,EAAQ+iC,IAEN+O,IAAmBxoC,EAAAA,EAAAA,cAAY,SAAA01B,GAI9B,IAHLmF,EAAQnF,EAARmF,SAAQ4N,EAAA/S,EACR50B,KAAAA,OAAI,IAAA2nC,EAAG,GAAEA,EAAAC,EAAAhT,EACT/L,SAEA,OAAOgR,EAAe,CACpBE,SAAAA,EACA/5B,KAAAA,EACA6oB,cALM,IAAA+e,EAAG,KAAIA,IAMZnM,KAAI,WACL7lC,EAAOi2B,SAAS,kDAClB,GACF,GAAG,CAACj2B,EAAQikC,IAENgO,IAAmB3oC,EAAAA,EAAAA,cAAY,SAAA61B,GAAiC,IAA9BuF,EAAYvF,EAAZuF,aAAczR,EAAQkM,EAARlM,SACpD,OAAOuR,EAAyB,CAAEE,aAAAA,EAAczR,SAAAA,IAAY4S,KAAI,WAC9D7lC,EAAOi2B,SAAS,iDAClB,GACF,GAAG,CAACj2B,EAAQwkC,IAEN0N,IAAoB5oC,EAAAA,EAAAA,cAAY,SAAA6oC,GAA4C,IAAzCrN,EAAaqN,EAAbrN,cAAerqC,EAAQ03C,EAAR13C,SAAUw4B,EAAQkf,EAARlf,SAChE,OAAO2R,EAA0B,CAAEE,cAAAA,EAAerqC,SAAAA,EAAUw4B,SAAAA,IAAY4S,KAAI,WAC1E7lC,EAAOi2B,SAAS,kDAClB,GACF,GAAG,CAACj2B,EAAQ4kC,IAENwN,IAAoB9oC,EAAAA,EAAAA,cAAY,SAAAi2B,GAE/B,IADL2F,EAAa3F,EAAb2F,cAAeC,EAAQ5F,EAAR4F,SAAU1sC,EAAW8mC,EAAX9mC,YAAaw6B,EAAQsM,EAARtM,SAEtC,OAAO+R,EAA0B,CAC/BE,cAAAA,EAAeC,SAAAA,EAAU1sC,YAAAA,EAAaw6B,SAAAA,IACrC4S,KAAI,WACL7lC,EAAOi2B,SAAS,kDAClB,GACF,GAAG,CAACj2B,EAAQglC,IAENqN,IAAalqC,EAAAA,EAAAA,UACjB,iBAAO,CACLxN,OAAAA,EACA80C,gBAAAA,GACAhB,qBAAAA,GAEAqC,SAAAA,GACApB,aAAAA,GACAsB,oBAAAA,GAEAsB,WAAYtS,EACZuS,sBAAuBtS,EAEvBuS,aAAc9S,EACd+S,wBAAyB5S,EACzB4J,aAAAA,GACAvU,mBAAAA,EACAgK,uBAAwB+R,GAGxBn2C,mBAAAA,GACAgvC,2BAAAA,GACAP,oBAAAA,GAGA8D,mBAAAA,GACAtyC,aAAAA,GACA8yC,iBAAAA,GACAE,SAAAA,GAEA1I,YAAAA,EACAM,YAAAA,EACAoF,UAAAA,GACA0G,YAAAA,GACA1N,yBAAAA,EACA+N,iBAAAA,GACAT,YAAAA,GACAD,iBAAAA,GACAnG,YAAAA,GACA7a,QAAAA,EACAgK,WAAAA,EACA8F,mBAAAA,EACAU,uBAAAA,EACAI,uBAAAA,EACAG,uBAAAA,EACAC,aAAAA,EACAE,iBAAAA,EACAI,aAAAA,EACAC,aAAAA,EACAvF,cAAAA,EACAlL,gBAAAA,EACA+b,sBAAAA,EACAgF,iBAAAA,GACAC,kBAAAA,GACAE,kBAAAA,GACApS,cAAAA,EACAkI,YAAAA,EACAK,UAAAA,EACA3M,gBAAAA,EACAgN,kBAAAA,GACAmD,mBAAAA,GACA9J,2BAAAA,GAEAkM,eAAAA,GACAe,uBAAAA,GACAC,2BAAAA,GACAF,yBAAAA,GACAI,yBAAAA,GACD,GACD,CAAC10C,EAAQ80C,GAAiBhB,GAAsBqC,GAAUpB,GAAcsB,GAAqBhR,EAAeC,EAA0BP,EAAoBG,EAA+B4J,GAAcvU,EAAoB+b,GAA4Bn2C,GAAoBgvC,GAA4BP,GAAqB8D,GAAoBtyC,GAAc8yC,GAAkBE,GAAU1I,EAAaM,EAAaoF,GAAW0G,GAAa1N,EAA0B+N,GAAkBT,GAAaD,GAAkBnG,GAAa7a,EAASgK,EAAY8F,EAAoBU,EAAwBI,EAAwBG,EAAwBC,EAAcE,EAAkBI,EAAcC,EAAcvF,EAAelL,EAAiB+b,EAAuBgF,GAAkBC,GAAmBE,GAAmBlK,EAAaK,EAAW3M,EAAiBgN,GAAmBmD,GAAoBoC,GAAgBe,GAAwBC,GAA4BF,GAA0BI,GAA0BpN,KAG1+B,OACE79C,EAAAA,EAAAA,KAACuoD,GAAmCjjC,SAAQ,CAACpP,MAAO+3C,GAAWluD,SAC5DA,GAGP,EAwBAyoD,GAAoCvnC,aAAe,CACjDwnC,eAAgB,KAChB3tB,iBAAkB,KAClB2b,oBAAqB,KACrBC,2BAA4B,MAGvB,IEzZM4X,GFyZkC,WAAH,OAASC,EAAAA,EAAAA,YAAWhG,GAAoC,EEvZvFiG,GAAgC,SAACC,EAAMC,GAClD,IAAMC,EAAkB,SAAC7sC,GACvB,IAAM8sC,EAAcN,KAEhBO,EAAc/sC,EAIlB,OAHI4sC,IACFG,EAActiD,IAAAA,KAAOuV,EAAO4sC,KAEtB1uD,EAAAA,EAAAA,KAACyuD,GAAI36C,EAAAA,EAAAA,GAAA,CAAC86C,YAAaA,GAAiBC,GAC9C,EAIA,OAFAnoC,IAAqBioC,EAAiBF,GAE/BE,CACT,ECdaG,GACF,UADEA,GAEH,SAFGA,GAGJ,QCXHC,IAAiB,EAEjBC,IAAS,EAETC,GAAiB,WAGVC,GAAmB,WAG7B,OAAA3c,EAAAA,GAAAA,IAFD,SAAA2c,EAAYC,IAAYhd,EAAAA,GAAAA,GAAA,KAAA+c,GACtBE,KAAKD,WAAaA,CACpB,GAAC,EAAAjjD,IAAA,eAAAgK,MAED,WACEk5C,KAAKC,aAAe,GACpBD,KAAK/D,gBAAkB2D,GACvBI,KAAKE,aAAeN,EACtB,GAAC,CAAA9iD,IAAA,oBAAAgK,MAED,SAAkBm1C,GACZ+D,KAAK/D,kBAAoB2D,KAG7BI,KAAK/D,gBAAkBA,GAAmB,EAAIA,EAAkB0D,GAChEK,KAAKE,aAAejE,GAAmB,GAAK+D,KAAKD,WAAa,EAAIxiD,KAAK4iD,KAAKlE,EAAkB+D,KAAKD,YAAcJ,GACnH,GAEA,CAAA7iD,IAAA,YAAAsjD,IACA,WAEE,OADYjjD,IAAAA,KAAO6iD,KAAKC,cAAc,SAAAI,GAAC,OAAIA,IAAMX,EAAoB,GAEvE,GAEA,CAAA5iD,IAAA,cAAAsjD,IACA,WAEE,GAAIJ,KAAK/D,kBAAoB2D,GAC3B,OAAO,EAIT,GAAII,KAAK/D,kBAAoB0D,IAAiBK,KAAKE,eAAiBP,GAClE,OAAO,EAIT,IAAK,IAAIrtB,EAAI,EAAGA,EAAI0tB,KAAKE,aAAc5tB,GAAK,EAC1C,IAAK0tB,KAAKC,aAAa3tB,IAAM0tB,KAAKC,aAAa3tB,KAAOotB,GACpD,OAAO,EAIX,OAAO,CACT,GAAC,CAAA5iD,IAAA,qBAAAgK,MAED,WACE,OAAIk5C,KAAK/D,kBAAoB2D,IAASI,KAAK/D,kBAAoB0D,GACtDE,GAEFG,KAAK/D,iBAAmB,CACjC,GAGA,CAAAn/C,IAAA,wBAAAgK,MACA,WAEE,GAAIk5C,KAAK/D,kBAAoB2D,GAE3B,OADAI,KAAKC,aAAe,CAACP,IACd,CAAEY,YAAa,EAAGP,WAAYC,KAAKD,YAM5C,IAFA,IAAIO,GAAe,EACbz6C,EAASm6C,KAAKE,cAAgB,EAAIF,KAAKE,aAAeF,KAAKC,aAAap6C,OACrEysB,EAAI,EAAGA,EAAIzsB,EAAQysB,GAAK,EAE/B,IAAK0tB,KAAKC,aAAa3tB,IAAM0tB,KAAKC,aAAa3tB,KAAOotB,GAAoB,CACxEM,KAAKC,aAAa3tB,GAAKotB,GACvBY,EAAchuB,EACd,KACF,CAGF,OAAqB,IAAjBguB,EACK,CAAEA,YAAAA,EAAaP,WAAYC,KAAKD,YAIrCC,KAAK/D,kBAAoB0D,IAE3BK,KAAKC,aAAa7hD,KAAKshD,IAChB,CAAEY,YAAaN,KAAKC,aAAap6C,OAAS,EAAGk6C,WAAYC,KAAKD,aAIhE,CAAEO,aAAc,EAAGP,WAAYC,KAAKD,WAC7C,GAEA,CAAAjjD,IAAA,kBAAAgK,MACA,SAAepV,EAAkBoW,GAAS,IAAxBw4C,EAAW5uD,EAAX4uD,YAChBN,KAAKC,aAAaK,GAAex4C,CACnC,IAAC,CA7F6B,GAiGnBy4C,GAA2B,WAUrC,OAAApd,EAAAA,GAAAA,IARD,SAAAod,EAAYR,EAAYS,IAAazd,EAAAA,GAAAA,GAAA,KAAAwd,GACnCP,KAAKD,WAAaA,EAClBC,KAAKQ,YAAcA,EACnBR,KAAKS,WAAatjD,IAAAA,IAAMqjD,GAAa,SAACE,GACpC,IAAMC,EAAM,IAAIb,GAAoBC,GAEpC,OADAY,EAAID,WAAaA,EACVC,CACT,GACF,GAAC,EAAA7jD,IAAA,eAAAgK,MAED,WACE3J,IAAAA,KAAO6iD,KAAKS,YAAY,SAACE,GACvBA,EAAIC,cACN,GACF,GAAC,CAAA9jD,IAAA,oBAAAgK,MAED,SAAkBm1C,EAAiB4E,GACjC,IAAQH,EAAeG,EAAfH,WACFC,EAAMxjD,IAAAA,KAAO6iD,KAAKS,WAAY,CAAEC,WAAAA,IAClCC,GACFA,EAAIG,kBAAkB7E,EAE1B,GAAC,CAAAn/C,IAAA,YAAAsjD,IAED,WAEE,OADYjjD,IAAAA,KAAO6iD,KAAKS,YAAY,SAAAE,GAAG,OAAIA,EAAII,SAAS,GAE1D,GAAC,CAAAjkD,IAAA,cAAAsjD,IAED,WAEE,OADYjjD,IAAAA,MAAQ6iD,KAAKS,YAAY,SAAAE,GAAG,OAAIA,EAAIK,WAAW,GAE7D,GAAC,CAAAlkD,IAAA,qBAAAgK,MAED,WAEE,IADA,IAAIikB,EAAQ,EACHuH,EAAI,EAAGA,EAAI0tB,KAAKS,WAAW56C,OAAQysB,GAAK,EAAG,CAClD,IAAM2uB,EAAMjB,KAAKS,WAAWnuB,GAAG2pB,gBAC/B,GAAIgF,IAAQtB,IAAiBsB,IAAQrB,GACnC,OAAOC,GAET90B,GAASk2B,GAAO,CAClB,CACA,OAAOl2B,CACT,GAAC,CAAAjuB,IAAA,wBAAAgK,MAED,WAEE,IAAMo6C,EAAS/jD,IAAAA,KAAO6iD,KAAKS,YAAY,SAAAE,GAAG,OAAKA,EAAIK,WAAW,IAC9D,GAAIE,EAAQ,CAIV,IAHA,IAAQZ,EAAgBY,EAAOC,wBAAvBb,YAEJc,EAAc,EACT9uB,EAAI,EAAGA,EAAI0tB,KAAKS,WAAW56C,QAC9Bm6C,KAAKS,WAAWnuB,KAAO4uB,EADe5uB,GAAK,EAI/C8uB,GAAepB,KAAKS,WAAWnuB,GAAG2pB,gBAGpC,MAAO,CACLqE,YAAAA,EACAP,WAAYC,KAAKD,WACjBW,WAAYQ,EAAOR,WACnBU,YAAAA,EAEJ,CACA,MAAO,CAAEd,aAAc,EAAGP,WAAYC,KAAKD,WAC7C,GAAC,CAAAjjD,IAAA,kBAAAgK,MAED,SAAgB+5C,EAAQ/4C,GACtB,IAAQ44C,EAAeG,EAAfH,WACFC,EAAMxjD,IAAAA,KAAO6iD,KAAKS,WAAY,CAAEC,WAAAA,IAClCC,GACFA,EAAIU,gBAAgBR,EAAQ/4C,EAEhC,GAAC,CAAAhL,IAAA,wBAAAgK,MAED,WACE,IAAM6xC,EAAM,CAAC,EAIb,OAHAx7C,IAAAA,KAAO6iD,KAAKS,YAAY,SAACE,GACvBhI,EAAIgI,EAAID,YAAcC,EAAI1E,eAC5B,IACOtD,CACT,IAAC,CAtFqC,G,iMC3G3B2I,GACI,8BADJA,GAEI,8BAFJA,GAGM,gCAHNA,GAIM,gCAGNC,GACI,SAAF7vD,GAAA,IACXyV,EAAMzV,EAANyV,OAAWif,GAAIC,EAAAA,GAAAA,GAAA30B,EAAA40B,IAAA,OAAA5hB,EAAAA,EAAAA,GAAA,CAEfm9B,WAAYyf,GACZn6C,OAAAA,GACGif,EAAI,EANEm7B,GASI,SAAF36C,GAAA,IACXO,EAAMP,EAANO,OAAQm5C,EAAW15C,EAAX05C,YAAaP,EAAUn5C,EAAVm5C,WAAe35B,GAAIC,EAAAA,GAAAA,GAAAzf,EAAAohB,IAAA,OAAAtjB,EAAAA,EAAAA,GAAA,CAExCm9B,WAAYyf,GACZn6C,OAAAA,EACAq6C,UAAWlB,EACXmB,SAAU1B,GACP35B,EAAI,EAhBEm7B,GAmBK,WAAF,MAAS,CACrB1f,WAAYyf,GACb,EArBUC,GAuBM,SAAFt0C,GAAA,IACb8kC,EAAO9kC,EAAP8kC,QAASn7B,EAAI3J,EAAJ2J,KAAI,MACR,CACLirB,WAAYyf,GACZvP,QAAAA,EACAn7B,KAAAA,EACD,EAGU8qC,GAAsB,CACjCv6C,OAAQ,IAGGw6C,GAAiB,SAAC/f,EAAOhuB,GACpC,IAAA2T,EAAsC3T,GAAU,CAAC,EAAzCiuB,EAAUta,EAAVsa,WAAeC,GAAUzb,EAAAA,GAAAA,GAAAkB,EAAAq6B,IACjC,OAAQ/f,GACN,KAAKyf,GAEH,IAAQn6C,EAAoB26B,EAApB36B,OAAWif,GAAIC,EAAAA,GAAAA,GAAKyb,EAAU+f,IAChC3f,GAAS37B,EAAAA,GAAAA,GAAOY,GACtB,OAAAzC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAYk9B,GAAUxb,GAAI,IAAEjf,OAAQ+6B,IAGtC,KAAKof,GAEH,IACEn6C,EACE26B,EADF36B,OAAQq6C,EACN1f,EADM0f,UAAWC,EACjB3f,EADiB2f,SAAar7B,GAAIC,EAAAA,GAAAA,GAClCyb,EAAUggB,IACR5f,GAAS37B,EAAAA,GAAAA,GAAOq7B,EAAMz6B,QACtB46C,EAAWP,EAAYC,EAI7B,OAHAtkD,IAAAA,QAAUgK,GAAQ,SAACM,EAAOohB,GACxBqZ,EAAU6f,EAAWl5B,GAAOphB,CAC9B,KACA/C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAYk9B,GAAUxb,GAAI,IAAEjf,OAAQ+6B,IAGtC,KAAKof,GACH,OAAOI,GAET,KAAKJ,GAEH,IAAQvP,EAAkBjQ,EAAlBiQ,QAASn7B,EAASkrB,EAATlrB,KACXiS,EAAM1rB,IAAAA,UAAYykC,EAAMz6B,QAAQ,SAAAM,GAAK,OAAIA,EAAM3W,KAAOihD,CAAO,IACnE,GAAIlpB,GAAO,GAAK+Y,EAAMz6B,OAAO0hB,GAAKjS,OAASA,EAAM,CAC/C,IAAMq7B,GAAQvtC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAQk9B,EAAMz6B,OAAO0hB,IAAI,IAAEjS,KAAAA,IACnCsrB,GAAS37B,EAAAA,GAAAA,GAAOq7B,EAAMz6B,QAE5B,OADA+6B,EAAUgQ,OAAOrpB,EAAK,EAAGopB,IACzBvtC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAYk9B,GAAK,IAAEz6B,OAAQ+6B,GAC7B,CACA,OAAON,EAGT,QACE,OAAOA,EAEb,EAGaogB,GAAwB,SAACpgB,EAAOhuB,GAC3C,IAAA/E,EAAsC+E,GAAU,CAAC,EAAzCiuB,EAAUhzB,EAAVgzB,WAAeC,GAAUzb,EAAAA,GAAAA,GAAAxX,EAAAozC,IACjC,GAAQpgB,IACDyf,GAAL,CAEE,IACEn6C,EACE26B,EADF36B,OAAQq6C,EACN1f,EADM0f,UAAWC,EACjB3f,EADiB2f,SAAQS,EACzBpgB,EAD2Bsf,YAAAA,OAAW,IAAAc,EAAG,EAACA,EAAK97B,GAAIC,EAAAA,GAAAA,GACnDyb,EAAUqgB,IACRjgB,GAAS37B,EAAAA,GAAAA,GAAOq7B,EAAMz6B,QACtB46C,EAAWX,EAAeI,EAAYC,EAI5C,OAHAtkD,IAAAA,QAAUgK,GAAQ,SAACM,EAAOohB,GACxBqZ,EAAU6f,EAAWl5B,GAAOphB,CAC9B,KACA/C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAYk9B,GAAUxb,GAAI,IAAEjf,OAAQ+6B,GACtC,CAGE,OAAOyf,GAAe/f,EAAOhuB,EAEnC,E,8DCvFawuC,GAAuB,SAAH1wD,GAM1B,IALL2wD,EAAO3wD,EAAP2wD,QACAC,EAAiB5wD,EAAjB4wD,kBACA/a,EAAU71C,EAAV61C,WACAka,EAAQ/vD,EAAR+vD,SACAc,EAAkB7wD,EAAlB6wD,mBAEMC,GAAatvC,EAAAA,EAAAA,QAAO,MACpBuvC,GAA0BvvC,EAAAA,EAAAA,QAAOqvC,GAAsB,IAAIzC,GAAoB2B,IAErF9Z,GAA+BC,EAAAA,EAAAA,YAAWya,EAASC,GAAqB,MAAKza,GAAAz/B,EAAAA,GAAAA,GAAAu/B,EAAA,GAAtE+a,EAAU7a,EAAA,GAAEE,EAAQF,EAAA,GAErBgW,GAAc/nC,EAAAA,EAAAA,cAAY,SAAAlP,GAAA,IAC9BgvB,EAAShvB,EAATgvB,UAAS+sB,EAAA/7C,EACT6oC,sBAAAA,OAAqB,IAAAkT,EAAG,KAAIA,EAAAC,EAAAh8C,EAC5BgQ,KAAAA,OAAI,IAAAgsC,EAAG,GAAEA,EAAAC,EAAAj8C,EACT64B,SAAAA,OAAQ,IAAAojB,EAAG,KAAIA,EACf9R,EAAcnqC,EAAdmqC,eAAc,OACVxJ,EAAWqJ,oBAAoB,CACnChb,UAAAA,EACA6Z,sBAAAA,EACAqB,UAAWl6B,EACX6oB,SAAAA,EACAsR,eAAAA,GACA,GAAE,CAACxJ,IAQCub,GAAahtC,EAAAA,EAAAA,cAAY,SAACitC,GAE9BN,EAAwBviC,QAAQ0gC,eAChC,IAAMC,EAAS4B,EAAwBviC,QAAQihC,wBAG/CqB,EAAWtiC,QAAU6iC,EAAQ,QAAAvZ,EAAA5jC,UAAAC,OANawhB,EAAM,IAAAqS,MAAA8P,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAANpiB,EAAMoiB,EAAA,GAAA7jC,UAAA6jC,GAwBhD,OAhBYlC,EAAWub,YAAUp+C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EAC9Bq+C,GACA17B,GACAw5B,IACF7rB,MAAK,SAAA/nB,GAA0C,IAAvC9F,EAAM8F,EAAN9F,OAAQqgB,EAAcva,EAAdua,eAAmBpB,GAAIC,EAAAA,GAAAA,GAAApZ,EAAAqZ,IAExCm8B,EAAwBviC,QAAQ4gC,kBAAkBt5B,EAAgBq5B,GAClE4B,EAAwBviC,QAAQmhC,gBAAgBR,EAAQnB,IAExD3X,EAASwZ,IAAkC78C,EAAAA,EAAAA,GAAC,CAAEyC,OAAAA,GAAWif,IAC3D,IAAGgQ,OAAM,SAAC/Y,GAGR,MADAolC,EAAwBviC,QAAQmhC,gBAAgBR,EAAQnB,IAClDriC,CACR,GAGF,GAAG,CAACkqB,IAOEyb,GAAiBltC,EAAAA,EAAAA,cAAY,SAACuR,GAClC,IAAMw5B,EAAS4B,EAAwBviC,QAAQihC,wBAG/C,OAAIN,EAAOP,YAAc,EAChB5vB,KAAAA,QAAgB,CAAEuyB,YAAY,IAG3B1b,EAAWub,YAAUp+C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EAC9B89C,EAAWtiC,SACXmH,GACAw5B,IACF7rB,MAAK,SAAAzN,GAA0C,IAAvCpgB,EAAMogB,EAANpgB,OAAQqgB,EAAcD,EAAdC,eAAmBpB,GAAIC,EAAAA,GAAAA,GAAAkB,EAAAS,IACxCy6B,EAAwBviC,QAAQ4gC,kBAAkBt5B,EAAgBq5B,GAClE4B,EAAwBviC,QAAQmhC,gBAAgBR,EAAQnB,IAExD3X,EAASwZ,IAAkC78C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAC1CyC,OAAAA,GAAW05C,GAAWz6B,IAE1B,IAAGgQ,OAAM,SAAC/Y,GAGR,MADAolC,EAAwBviC,QAAQmhC,gBAAgBR,EAAQnB,IAClDriC,CACR,GAGF,GAAG,CAACkqB,IAOE2b,GAAeptC,EAAAA,EAAAA,cAAY,SAACuR,GAEhC,OADYy7B,EAAWN,EAAWtiC,QAASmH,EAE7C,GAAG,CAACy7B,IAKEK,GAAkBrtC,EAAAA,EAAAA,cAAY,WAClCiyB,EAASwZ,KACX,GAAG,IAKG1P,GAAc/7B,EAAAA,EAAAA,cAAY,SAAAjH,GAIzB,IAHLkjC,EAAOljC,EAAPkjC,QACAtlB,EAAe5d,EAAf4d,gBACA7V,EAAI/H,EAAJ+H,KAYA,OAVY2wB,EAAWsK,YAAY,CACjCE,QAAAA,EACAtlB,gBAAAA,EACA7V,KAAAA,IACCoe,MAAK,WACN+S,EAASwZ,GAAqC,CAC5CxP,QAAAA,EACAn7B,KAAAA,IAEJ,GAEF,GAAG,CAAC2wB,IAEJ,OAAA7iC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACKg+C,GAAU,IACb7E,YAAAA,EACAiF,WAAAA,EACAE,eAAAA,EACAE,aAAAA,EACAC,gBAAAA,EACAtR,YAAAA,EAEAoK,gBAAiBwG,EAAwBviC,QAAQkjC,qBACjDrC,UAAW0B,EAAwBviC,QAAQ6gC,UAC3CC,YAAayB,EAAwBviC,QAAQ8gC,aAMjD,ECjKaqC,GAAwB,SAAH3xD,GAAsD,IAAhD61C,EAAU71C,EAAV61C,WAAU+b,EAAA5xD,EAAE+vD,SAAAA,OAAQ,IAAA6B,EAAGprD,GAAAA,GAAiBorD,EAQ9E,OAPgBlB,GAAqB,CACnCC,QAASV,GACTW,kBAAmBZ,GACnBna,WAAAA,EACAka,SAAAA,GAIJ,EAEa8B,GAA8B,SAAH38C,GAAuE,IAAjE2gC,EAAU3gC,EAAV2gC,WAAUic,EAAA58C,EAAE66C,SAAAA,OAAQ,IAAA+B,EAAGtrD,GAAAA,GAAiBsrD,EAAEC,EAAe78C,EAAf68C,gBAChFC,GAAwBxwC,EAAAA,EAAAA,QAAO,IAAIqtC,GAA4BkB,EAAUgC,IACzEE,EAAUvB,GAAqB,CACnCC,QAASL,GACTM,kBAAmBZ,GACnBna,WAAAA,EACAka,SAAAA,EACAc,mBAAoBmB,EAAsBxjC,UAG5C,OAAAxb,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACKi/C,GAAO,IACVC,sBAAuB,WAAF,OAAQF,EAAsBxjC,QAAQ0jC,uBAAuB,GAEtF,E,kBC1BaC,GAAsB,SAAHnyD,GAKzB,IAJL61C,EAAU71C,EAAV61C,WACA/6B,EAAM9a,EAAN8a,OAAMs3C,EAAApyD,EACN0mD,aAAAA,OAAY,IAAA0L,EAAG,IAAIA,EAAAC,EAAAryD,EACnB4mD,cAAAA,OAAa,IAAAyL,EAAG,EAACA,EAEjB97C,GAAgDC,EAAAA,EAAAA,UAAS,IAAGC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAArD+7C,EAAgB77C,EAAA,GAAE87C,EAAmB97C,EAAA,GAC5CsgC,GAA8DvgC,EAAAA,EAAAA,UAAS,IAAGwgC,GAAAtgC,EAAAA,GAAAA,GAAAqgC,EAAA,GAAnEyb,EAAuBxb,EAAA,GAAEyb,EAA0Bzb,EAAA,GAEpD0b,GAAsBtuC,EAAAA,EAAAA,cAAY,SAAC2b,GACvC,OAAO8V,EAAW8c,6BAA6B,CAC7C5yB,SAAAA,EACA6yB,aAAc,CAAC,CACbC,gBAAiB,eACjBC,mBAAoB,CAAC,MAEtBxvB,MAAK,WAAe,IACfyvB,GADI7+C,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,IACSe,KAAI,SAAAkF,GAAM,MAAK,CACnCA,OAAQA,EAAO64C,OACfv/C,IAAK0G,EAAO84C,SACb,IAOD,OANAF,EAAUG,QAAQ,CAChBz/C,IAAKssB,EACL5lB,OAAQ,SAEVo4C,EAAoBQ,GACpBj4C,EAAOi2B,SAAS,uDACTgiB,CACT,IAAGruB,OAAM,SAAC/F,GAER,OADA7jB,EAAOE,SAAS,gDAAiD2jB,GAC1D,EACT,GACF,GAAG,CAAC7jB,EAAQ+6B,IAENsd,GAAgC/uC,EAAAA,EAAAA,cAAY,SAAC2b,EAAUqzB,GAC3D,OAAOvd,EAAW8c,6BAA6B,CAC7C5yB,SAAAA,EACA6yB,aAAc,CAAC,CACbC,gBAAiB,UACjBC,mBAAoBM,EAAY,CAC9BC,kBAAmBD,GACjB,CAAC,GAEP,CACEP,gBAAiB,eACjBC,mBAAoB,CAAC,MAGtBxvB,MAAK,WACN,OADapvB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,EAElB,GACF,GAAG,CAAC2hC,IAEEyd,GAA2BlvC,EAAAA,EAAAA,cAAY,SAAC2b,EAAUqzB,GACtD,OAAOvd,EAAW8c,6BAA6B,CAC7C5yB,SAAAA,EACA6yB,aAAc,CAAC,CACbC,gBAAiB,UACjBC,mBAAoBM,EAAY,CAC9BC,kBAAmBD,GACjB,CAAC,MAEN9vB,MAAK,WACN,OADapvB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,EAElB,GACF,GAAG,CAAC2hC,IAEE0d,GAA6BnvC,EAAAA,EAAAA,cAAY,SAAC2b,EAAUqzB,GACxD,OAAOp0B,GAAAA,QAAQorB,IAAI,CAACkJ,EAAyBvzB,EAAUqzB,GAAYD,EAA8BpzB,EAAUqzB,KAAa9vB,MAAK,SAAApuB,GAA6D,IAADqG,GAAA7E,EAAAA,GAAAA,GAAAxB,EAAA,GAA1Ds+C,EAAwBj4C,EAAA,GAAEk4C,EAA0Bl4C,EAAA,GAE3Km4C,EADG,GAAA/mD,QAAAkI,EAAAA,GAAAA,GAAO2+C,IAAwB3+C,EAAAA,GAAAA,GAAK4+C,IACJx+C,KAAI,SAACc,GAC5C,IAAMoE,GAASu0C,EAAAA,EAAAA,KAAI34C,EAAO,SAAU,IAC9BtC,GAAMi7C,EAAAA,EAAAA,KAAI34C,EAAO,WAAY,IACnC,MAAO,CACLoE,OAAAA,EACAw5C,KAAMP,EACN3/C,IAAAA,EAEJ,IAGA,OAFAg/C,EAA2BiB,GAC3B54C,EAAOi2B,SAAS,gEACT2iB,CACT,GACF,GAAG,CAACP,EAA+BG,EAA0Bx4C,IAEvD84C,GAAwBxvC,EAAAA,EAAAA,cAAY,SAAC2b,GACzC,OAAO8V,EAAW+d,sBAAsB7zB,EAC1C,GAAG,CAAC8V,IAEEge,GAA0BzvC,EAAAA,EAAAA,cAAY,SAAAyR,GAOrC,IANLixB,EAAMjxB,EAANixB,OACA/mB,EAAQlK,EAARkK,SACAM,EAAcxK,EAAdwK,eACA0E,EAAalP,EAAbkP,cACA+uB,EAAgBj+B,EAAhBi+B,iBACAC,EAAiBl+B,EAAjBk+B,kBAEA,OAAOle,EAAWge,wBAAwB,CACxC/M,OAAAA,EACA/mB,SAAAA,EACAM,eAAAA,EACA0E,cAAAA,EACA+uB,iBAAAA,EACAC,kBAAAA,IACCzwB,MAAK,SAAC3C,GACP,IAAkBqzB,GAAgBrzB,GAAO,CAAC,GAAlCZ,SAER,OADAjlB,EAAOi2B,SAAS,8DAA+D,CAAEkjB,aAAcD,EAAalN,OAAAA,IACrGnmB,CACT,GACF,GAAG,CAAC7lB,EAAQ+6B,IAENqe,GAAmC9vC,EAAAA,EAAAA,cAAY,SAAAgW,GAO9C,IANL0sB,EAAM1sB,EAAN0sB,OACA/mB,EAAQ3F,EAAR2F,SACAM,EAAcjG,EAAdiG,eACA0E,EAAa3K,EAAb2K,cACA+uB,EAAgB15B,EAAhB05B,iBACAC,EAAiB35B,EAAjB25B,kBAEA,IAAKle,EACH,OAAO7W,GAAAA,QAAQjqB,OAAO,IAAImqB,OAG5B,IAkDM+nB,EAlD4C,IAAIjoB,GAAAA,SAAQ,SAACC,EAASlqB,GAEtE8gC,EAAWqe,iCAAiC,CAC1CpN,OAAAA,EAAQ/mB,SAAAA,EAAUM,eAAAA,EAAgB0E,cAAAA,EAAe+uB,iBAAAA,EAAkBC,kBAAAA,IAClEzwB,MAAK,SAAC3C,GACP,IAAQwmB,GAAWxmB,GAAO,CAAC,GAAnBwmB,OAER,GAAKA,EAAL,CAQA,IAAIl7B,EAAa,EA4BE+iB,GAAc,CAAEE,KA3BhB,WAAH,OAAS2G,EAAWse,8CAA8ChN,GAAQ7jB,MAAK,SAACttB,GAE9F,IAAA8jC,EAAgC9jC,GAAc,CAAC,EAAvCsxC,EAAUxN,EAAVwN,WAAe5yB,GAAIC,EAAAA,GAAAA,GAAAmlB,EAAAllB,IAU3B,OAPA3I,EAAa,EAETq7B,GACFroB,GAAOjsB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EAAI0hB,GAAI,IAAEoyB,OAAAA,KAId,CAAE5wC,WAAYoxC,EACvB,IAAG5iB,OAAM,SAAC/F,GAER,OADA1S,GAAc,GACU,IAApB0S,EAAI6V,aAAyBvoB,GAAc26B,GAC7C7xC,EAAO4pB,GAEA,CAAEzoB,YAAY,KAIvB4E,EAAOE,SAAS,gEAADrO,OAAiEsf,EAAU,cAAAtf,OAAaw6C,EAAM,cAAAx6C,OAAam6C,EAAM,aAAAn6C,OAAYgyB,EAAImT,YACzI,CAAE57B,YAAY,GACvB,GAAG,EAGkDk5B,SAAUsX,IACpDh5C,OAhCX,MAJEuxB,EAAQ,CACN6nB,OAAAA,EAAQvB,OAAQ,IAoCtB,IAAG7gB,OAAM,SAAC/F,GACR5pB,EAAO4pB,EACT,GACF,IAIA,OAAI7jB,EAAOysC,eACFzsC,EAAOysC,eAAe,CAAEC,QAASP,EAAKre,IAAI,6CAADj8B,OAA+Cm6C,GAAUxF,IAAK,qCAEzG2F,CACT,GAAG,CAACnsC,EAAQ8rC,EAAeF,EAAc7Q,IAEnCue,GAAwBhwC,EAAAA,EAAAA,cAAY,SAAC2b,GACzC,OAAO8V,EAAWue,sBAAsBr0B,GAAUuD,MAAK,SAAC3C,GAEtD,OADA7lB,EAAOi2B,SAAS,4DAA6D,CAAEsjB,YAAat0B,IACrFY,CACT,GACF,GAAG,CAAC7lB,EAAQ+6B,IAGNye,GAAgBlwC,EAAAA,EAAAA,cAAY,SAAA61B,GAG3B,IAFLhgC,EAAKggC,EAALhgC,MAAKs6C,EAAAta,EACLlM,SAAAA,OAAQ,IAAAwmB,EAAG,KAAIA,EAETx0B,EAAW9lB,EAAMxG,IACvB,OAAOoiC,EAAWye,cAAc,CAC9Bv0B,SAAAA,EACAgO,SAAAA,EACA3R,WAAYz2B,GAAAA,GAAgBK,4BAC3Bs9B,MAAK,SAAC3C,GAEP,OADA7lB,EAAOi2B,SAAS,8CAA+C,CAAEhR,SAAAA,EAAUgO,SAAAA,IACpEpN,CACT,GACF,GAAG,CAAC7lB,EAAQ+6B,IAuFZ,MAAO,CACL6c,oBAAAA,EACAa,2BAAAA,EACAjB,iBAAAA,EACAE,wBAAAA,EACAoB,sBAAAA,EACAC,wBAAAA,EACAK,iCAAAA,EACAE,sBAAAA,EACAI,WA9FgBpwC,EAAAA,EAAAA,cAAY,SAAA6oC,GAIvB,IAHL7tD,EAAE6tD,EAAF7tD,GACAsL,EAAIuiD,EAAJviD,KACA+I,EAAGw5C,EAAHx5C,IAEA,OAAOoiC,EAAW2e,UAAU,CAC1Bz0B,SAAUtsB,EACV+wC,QAASplD,EACTsL,KAAAA,IACC44B,MAAK,SAAC3C,GAEP,OADA7lB,EAAOi2B,SAAS,+CAAgD,CAAEt9B,IAAAA,EAAKrU,GAAAA,IAChEuhC,CACT,GACF,GAAG,CAAC7lB,EAAQ+6B,IAkFVye,cAAAA,EACAzO,WAjFgBzhC,EAAAA,EAAAA,cAAY,SAAAi2B,GAAmD,IAAhDmK,EAAOnK,EAAPmK,QAAS3wC,EAAYwmC,EAAZxmC,aAAciyC,EAAiBzL,EAAjByL,kBACtD,OAAOjQ,EAAWgQ,UAAU,CAAErB,QAAAA,EAAS3wC,aAAAA,EAAciyC,kBAAAA,IAAqBxiB,MAAK,WAC7ExoB,EAAOi2B,SAAS,yCAA0C,CAAEyT,QAAAA,GAC9D,GACF,GAAG,CAAC1pC,EAAQ+6B,IA8EV0O,cA5EmBngC,EAAAA,EAAAA,cAAY,SAAAq2B,GAAyC,IAAtC+J,EAAO/J,EAAP+J,QAASiQ,EAAqBha,EAArBga,sBAC3C,OAAO5e,EAAW0O,aAAa,CAAEC,QAAAA,EAASiQ,sBAAAA,IAAyBnxB,MAAK,SAAC3C,GAEvE,OADA7lB,EAAOi2B,SAAS,uCAAwC,CAAEyT,QAAAA,IACnD7jB,CACT,GACF,GAAG,CAAC7lB,EAAQ+6B,IAwEVqJ,qBAtE0B96B,EAAAA,EAAAA,cAAY,SAAAw2B,GAGjC,IAFL1W,EAAS0W,EAAT1W,UAASwwB,EAAA9Z,EACT7M,SAAAA,OAAQ,IAAA2mB,EAAG,KAAIA,EAEf,OAAO7e,EAAWqJ,oBAAoB,CACpChb,UAAAA,EACA6J,SAAAA,GAEJ,GAAG,CAAC8H,IA+DF8e,qBA7D0BvwC,EAAAA,EAAAA,cAAY,SAAAwwC,GAIjC,IAHL36C,EAAK26C,EAAL36C,MACAijC,EAAM0X,EAAN1X,OAAM2X,EAAAD,EACN7mB,SAAAA,OAAQ,IAAA8mB,EAAG,KAAIA,EAEf,OAAOhf,EAAW8e,oBAAoB,CAAE16C,MAAAA,EAAOijC,OAAAA,EAAQnP,SAAAA,GACzD,GAAG,CAAC8H,IAwDFkX,kBAtDuB3oC,EAAAA,EAAAA,cAAY,SAAA0wC,GAAiC,IAA9BtV,EAAYsV,EAAZtV,aAAczR,EAAQ+mB,EAAR/mB,SACpD,OAAO8H,EAAWyJ,yBAAyB,CAAEE,aAAAA,EAAczR,SAAAA,IAAY4S,KAAI,WACzE7lC,EAAOi2B,SAAS,yDAA0D,CAAEyO,aAAAA,EAAczR,SAAAA,GAC5F,GACF,GAAG,CAACjzB,EAAQ+6B,IAmDVkf,mBAjDwB3wC,EAAAA,EAAAA,cAAY,SAAA62B,GAG/B,IAFLhhC,EAAKghC,EAALhhC,MACAspC,EAAYtI,EAAZsI,aAEA,OAAO1N,EAAWkf,kBAAkB,CAClC96C,MAAAA,EACAspC,aAAAA,GAEJ,GAAG,CAAC1N,IA0CF3qB,UAxCe9G,EAAAA,EAAAA,cAAY,SAAAk3B,GAItB,IAHLvb,EAAQub,EAARvb,SACAi1B,EAAU1Z,EAAV0Z,WACAC,EAAe3Z,EAAf2Z,gBAEA,OAAOpf,EAAW3qB,SAAS,CACzB6U,SAAAA,EACAi1B,WAAAA,EACAC,gBAAAA,GAEJ,GAAG,CAACpf,IA+BFkH,4BA7BiC34B,EAAAA,EAAAA,cAAY,SAAAm3B,GAExC,IADLhmC,EAAQgmC,EAARhmC,SAAU2nC,EAAM3B,EAAN2B,OAAQnP,EAAQwN,EAARxN,SAAUkP,EAAQ1B,EAAR0B,SAE5B,OAAOpH,EAAWkH,2BAA2B,CAC3CxnC,SAAAA,EACA2nC,OAAAA,EACAnP,SAAAA,EACAkP,SAAAA,GAEJ,GAAG,CAACpH,IAsBN,ECpTMoQ,GAAqC,CACzC,eACA,MACA,QACA,SACA,eACA,UAGWiP,GAAqB,SAAHl1D,GAKxB,IAJL61C,EAAU71C,EAAV61C,WACA/6B,EAAM9a,EAAN8a,OACArF,EAAMzV,EAANyV,OACA25B,EAAQpvC,EAARovC,SAEM+U,GAAqB3iC,EAAAA,EAAAA,QAAO,GAClCjL,GAAwCC,EAAAA,EAAAA,UAAS,CAAC,GAAEC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAA7CV,EAAYY,EAAA,GAAEyxC,EAAezxC,EAAA,GAC9B0xC,GAAqB/jC,EAAAA,EAAAA,cAAY,SAACgkC,GACtC,IAAMrP,EAAmBptC,KAAKD,MACxB28C,EAAgB58C,IAAAA,KAAO28C,GAE7B,OAAOvS,EAAWyS,uBAAuBD,GAAe/kB,MAAK,SAACilB,GAE5D,IAAIC,EAAsB,CAAC,EACvBC,EAAkB,CAAC,EACvB,GAAI1P,EAAmBoL,EAAmB31B,QAAS,CACjD,IAAMk6B,EAAe,GAErBH,EAASngB,SAAQ,SAACr1B,GAChB21C,EAAah8C,KAAKqG,EAAK3T,IACvBqpD,GAAez1C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACVy1C,GAAe,IAAAphD,EAAAA,GAAAA,GAAA,GACjB0L,EAAK3T,GAAKqM,IAAAA,KAAOsH,EAAMkzC,MAGtBlzC,IAAQqE,EAAAA,GAAAA,GAA8BrE,KACxCy1C,GAAmBx1C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAQw1C,GAAmB,IAAAnhD,EAAAA,GAAAA,GAAA,GAAG0L,EAAK3T,GAAK2T,EAAKqD,SAEpE,IAGA+tC,EAAmB31B,QAAUuqB,CAC/B,CAMA,OAJAmP,EAAgBO,GAIT,CAAEhG,WAFShb,OAAOU,KAAKqgB,GAAqBr0C,OAGrD,IAAGuwB,OAAM,WAEP5pB,EAAOE,SAAS,oCAClB,GACF,GAAG,CAACF,EAAQ+6B,IAENsf,GAAgB3zC,EAAAA,EAAAA,QAAO,CAAC,GACxB4zC,GAAkB5zC,EAAAA,EAAAA,SAAO,GAEzB6zC,GAAoB7zC,EAAAA,EAAAA,QAAO,MAE3B8zC,GAA6BlxC,EAAAA,EAAAA,cAAY,WAC7C,IAAMgjC,EAAapY,GAAc,CAC/BE,KAAM,WAOJ,OANAkmB,EAAgB5mC,SAAU,GAEL/iB,IAAAA,QAAU0pD,EAAc3mC,SACzCwQ,KAAAA,QAAgB,CAAEyjB,WAAY,IAC9B0F,EAAmBgN,EAAc3mC,UAEjB8U,MAAK,SAAC3C,GACxB,IAEMzqB,EAA4B,KAFXyqB,GAAO,CAAC,GAAvB8hB,WAQR,OAJIvsC,IACFk/C,EAAgB5mC,SAAU,GAGrB,CAAEtY,WAAAA,EACX,GACF,EACAk5B,SAAAA,IAEFgY,EAAW15C,QAKX,MAAO,CAAE6nD,WAJU,WACjBnO,EAAWrkB,OACXqyB,EAAgB5mC,SAAU,CAC5B,EAEF,GAAG,CAAC25B,EAAoB/Y,IA4BxB,OA1BAv4B,EAAAA,EAAAA,YAAU,WASR,GARAs+C,EAAc3mC,QAAU/Y,EAASA,EAAOsB,QAAO,SAACmrB,EAAMnsB,GACpD,OAAIA,EAAMglB,kBAAoBxzB,GAAAA,GAAgBE,QAAS2P,EAAAA,GAAAA,GAA8BrB,IACnF/C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAYkvB,GAAI,IAAA76B,EAAAA,GAAAA,GAAA,GAAG0O,EAAM3W,GAAK2W,EAAMK,SAE/B8rB,CACT,GAAG,CAAC,GAAK,CAAC,GAGLkzB,EAAgB5mC,UAAY/iB,IAAAA,QAAU0pD,EAAc3mC,SAAU,CACjE,IAAQ+mC,EAAeD,IAAfC,WACRF,EAAkB7mC,QAAU+mC,CAC9B,CAGA,OAAO,WACDF,EAAkB7mC,SAAW4mC,EAAgB5mC,SAC/C6mC,EAAkB7mC,SAEtB,CACF,GAAG,CAAC/Y,EAAQ6/C,KAEMryC,EAAAA,EAAAA,UAAQ,iBAAO,CAC/BpN,aAAAA,EACD,GAAG,CAACA,GAGP,ECtHM2/C,GAAM,wBAENC,GAA8B,SAACC,GACnC,IAAMC,GAAKC,EAAAA,GAAAA,qBACPD,EAAGE,oBACDH,EAAsB,EACxBC,EAAGG,IAAIN,GAAK,CAAEE,oBAAAA,IAEdC,EAAGI,WAAWP,IAGpB,EAIaQ,GAAgC,SAAHh2D,GAAsB,IAAhBovC,EAAQpvC,EAARovC,SAE9C6mB,EAA4DzI,KAApD5I,EAA0BqR,EAA1BrR,2BAA4BP,EAAmB4R,EAAnB5R,oBAE9B6R,GAAqC9xC,EAAAA,EAAAA,cAAY,WACrD,IAAMgjC,EAAapY,GAAc,CAC/BE,KAAM,WAAF,OAAQ0V,IAA6BthB,MAAK,SAAC3C,GAC7C,IAAQ8hB,GAAe9hB,GAAO,CAAC,GAAvB8hB,WAER,OADAgT,GAA4BhT,GAAc,GACnC,CAAEvsC,WAA2B,IAAfusC,EACvB,GAAE,EACFrT,SAAAA,IAEFgY,EAAW15C,QAKX,MAAO,CAAE6nD,WAJU,WACjBnO,EAAWrkB,OAjBuB0yB,GAA4B,EAmBhE,EAEF,GAAG,CAAC7Q,EAA4BxV,IAShC,OANAv4B,EAAAA,EAAAA,YAAU,WACR,IAAQ0+C,EAAeW,IAAfX,WACR,OAAO,kBAAMA,GAAa,CAE5B,GAAG,CAAClR,IAEG,IACT,ECvCMmR,GAAM,wBAaCW,GAAwB,SAAHn2D,GAAsB,IAAhBovC,EAAQpvC,EAARovC,SACtC6mB,EAGIzI,KAFFrF,EAAkB8N,EAAlB9N,mBACA1yC,EAAMwgD,EAANxgD,OAGI0/C,GAAgB3zC,EAAAA,EAAAA,QAAO,CAAC,GACxB4zC,GAAkB5zC,EAAAA,EAAAA,SAAO,GAEzB6zC,GAAoB7zC,EAAAA,EAAAA,QAAO,MAE3B8zC,GAA6BlxC,EAAAA,EAAAA,cAAY,WAC7C,IAAMgjC,EAAapY,GAAc,CAC/BE,KAAM,WAOJ,OANAkmB,EAAgB5mC,SAAU,GAEL/iB,IAAAA,QAAU0pD,EAAc3mC,SACzCwQ,KAAAA,QAAgB,CAAEyjB,WAAY,IAC9B0F,EAAmBgN,EAAc3mC,UAEjB8U,MAAK,SAAC3C,GACxB,IAAQ8hB,GAAe9hB,GAAO,CAAC,GAAvB8hB,YAhCkB,SAACiT,GACnC,IAAMC,GAAKC,EAAAA,GAAAA,qBACPD,EAAGE,oBACDH,EAAsB,EACxBC,EAAGG,IAAIN,GAAK,CAAEE,oBAAAA,IAEdC,EAAGI,WAAWP,IAGpB,CAyBUC,CAA4BhT,GAAc,GAE1C,IAAMvsC,EAA4B,IAAfusC,EAMnB,OAJIvsC,IACFk/C,EAAgB5mC,SAAU,GAGrB,CAAEtY,WAAAA,EACX,GACF,EACAk5B,SAAAA,IAEFgY,EAAW15C,QAKX,MAAO,CAAE6nD,WAJU,WACjBnO,EAAWrkB,OACXqyB,EAAgB5mC,SAAU,CAC5B,EAEF,GAAG,CAAC25B,EAAoB/Y,IAwBxB,OAtBAv4B,EAAAA,EAAAA,YAAU,WASR,GARAs+C,EAAc3mC,QAAU/Y,EAASA,EAAOsB,QAAO,SAACmrB,EAAMnsB,GACpD,OAAIA,EAAMglB,kBAAoBxzB,GAAAA,GAAgBE,QAAS2P,EAAAA,GAAAA,GAA8BrB,IACnF/C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAYkvB,GAAI,IAAA76B,EAAAA,GAAAA,GAAA,GAAG0O,EAAM3W,GAAK2W,EAAMK,SAE/B8rB,CACT,GAAG,CAAC,GAAK,CAAC,GAGLkzB,EAAgB5mC,UAAY/iB,IAAAA,QAAU0pD,EAAc3mC,SAAU,CACjE,IAAQ+mC,EAAeD,IAAfC,WACRF,EAAkB7mC,QAAU+mC,CAC9B,CAGA,OAAO,WACDF,EAAkB7mC,SAAW4mC,EAAgB5mC,SAC/C6mC,EAAkB7mC,SAEtB,CACF,GAAG,CAAC/Y,EAAQ6/C,IAEL,IACT,EAEAa,GAAsBxS,UAAY,CAChCvU,SAAUwU,KAAAA,OAAiBp1C,YC1FtB,IAAM4nD,GAA4B,SAAC9wC,GACxC,IAAM+wC,EAAU,SAAAr1C,GAAK,OACnBriB,EAAAA,EAAAA,MAAA+iB,EAAAA,SAAA,CAAAziB,SAAA,EACEC,EAAAA,EAAAA,KAAComB,GAAStS,EAAAA,EAAAA,GAAA,GAAKgO,KACf9hB,EAAAA,EAAAA,KAAC82D,GAA6B,CAAC5mB,SAAU,OACzClwC,EAAAA,EAAAA,KAACi3D,GAAqB,CAAC/mB,SAAU,QAChC,EAML,OAHAinB,EAAQ5wC,YAAW,6BAAA9Y,OAAgC2Y,EAAUG,aAAeH,EAAUJ,KAAI,KAC1FU,IAAqBywC,EAAS/wC,GAEvB+wC,CACT,ECNaC,GAAyB,SAAHt2D,GAiB5B,IAhBL+S,EAAI/S,EAAJ+S,KACA8jB,EAAe72B,EAAf62B,gBACA0/B,EAAcv2D,EAAdu2D,eACAC,EAAWx2D,EAAXw2D,YACA18B,EAAU95B,EAAV85B,WACArM,EAAQztB,EAARytB,SACAsM,EAAQ/5B,EAAR+5B,SACAiC,EAAgBh8B,EAAhBg8B,iBACA/7B,EAAID,EAAJC,KACA6a,EAAM9a,EAAN8a,OACAmY,EAAKjzB,EAALizB,MACA3C,EAAStwB,EAATswB,UACAE,EAAMxwB,EAANwwB,OACA0J,EAAiBl6B,EAAjBk6B,kBACAu8B,EAAWz2D,EAAXy2D,YACAC,EAAsB12D,EAAtB02D,uBAEM32C,EAAUM,KAEhB9J,GAAoCC,EAAAA,EAAAA,WAAU,GAAEC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAAzCogD,EAAUlgD,EAAA,GAAEmgD,EAAangD,EAAA,GAC1BogD,GAAkBr1C,EAAAA,EAAAA,UAElBkG,GAAYtD,EAAAA,EAAAA,cAAY,SAAC8C,EAAO0Z,GACpC,IAAMk2B,EAAkB/lC,SAASgmC,iBAAiB,8BAC5CC,EAAcjmC,SAASkmC,cAAc,2BAC3C,OAAQ/vC,EAAMgwC,MACZ,IAAK,UACL,IAAK,YACCt2B,EAAI,GAAKk2B,EAAgBl2B,EAAI,KAC/Bk2B,EAAgBl2B,EAAI,GAAGu2B,QACvBP,GAAe,IAEjB,MACF,IAAK,YACL,IAAK,aACCh2B,EAAIk2B,EAAgB3iD,OAAS,GAAK2iD,EAAgBl2B,EAAI,KACxDk2B,EAAgBl2B,EAAI,GAAGu2B,QACvBP,GAAe,IAEjB,MACF,IAAK,QACHA,EAAch2B,GACd,MACF,IAAK,MACH,GAAI+1B,EAAa,GAAKK,EACpBA,EAAYG,aACP,GAAIL,EAAgBl2B,GAAI,CAC7B,IAAMw2B,EAAeN,EAAgBl2B,GAAGq2B,cAAc,kBAChDI,EAAaP,EAAgBl2B,GAAGq2B,cAAc,gBACpB,SAA5BJ,EAAgBroC,QACd4oC,IACFA,EAAaD,QACbN,EAAgBroC,QAAU,UAEnB6oC,EACLA,IACFA,EAAWF,QACXN,EAAgBroC,QAAU,QAEnB4oC,IACTA,EAAaD,QACbN,EAAgBroC,QAAU,SAE9B,CACA,MACF,IAAK,QAC6B,WAA5BqoC,EAAgBroC,QAClB+nC,EAAexjD,GACsB,SAA5B8jD,EAAgBroC,QACzBgoC,EAAYzjD,GAEZgnB,IAEF68B,GAAe,GAMnB1vC,EAAMC,kBACND,EAAME,gBACR,GAAG,CAACuvC,EAAY5jD,EAAMwjD,EAAgBC,EAAaz8B,IAE7CjT,GAAuB1C,EAAAA,EAAAA,cAAY,WACvC,IAAMkzC,EAAe,SAAC/Y,GACpBgY,EAAexjD,GACXwrC,IACFA,EAAIp3B,kBACJo3B,EAAIn3B,iBAER,EAMMmwC,EAAY,SAAChZ,GACjBiY,EAAYzjD,GACRwrC,IACFA,EAAIp3B,kBACJo3B,EAAIn3B,iBAER,EAMAlS,EAAwDnC,GAAQ,CAAC,EAAzDgoB,EAAe7lB,EAAf6lB,gBAAiBsB,EAA0BnnB,EAA1BmnB,2BACnBm7B,EAAcz8B,IAAoBxzB,GAAAA,GAAgBE,MAClDgwD,EAAmBp7B,IAA+Bn2B,GAAAA,GAAuBE,aACzEsxD,EAAyBjB,GAAeA,EAAYkB,SAAWlB,EAAYkB,QAAQC,gBAGnFC,EAFgB9kD,GAAQA,EAAKqpB,YAAcrpB,EAAKqpB,aAAekM,GAAgBziC,aAE7C6xD,GAA0BF,GAAezkD,GAAQA,EAAK3T,IAAM2T,EAAKkqC,WAAcua,EAEvH,OACE74D,EAAAA,EAAAA,MAAColB,EAAAA,SAAc,CAAA9kB,SAAA,CACX44D,IACA34D,EAAAA,EAAAA,KAAC8gB,EAAAA,EAAM,CACLlS,MAAM5O,EAAAA,EAAAA,KAAC44D,GAAAA,IAAW,IAClB59C,QAASq9C,EACT7vC,UAnBc,SAAC62B,GACJ,UAAbA,EAAI2Y,MAAiC,UAAb3Y,EAAI2Y,MAC9BK,EAAUhZ,EAEd,EAgBQ99C,UAAWmjB,IAAW,cAAe7D,EAAQyD,cAC7C7Y,MAAO1K,EAAKI,UAAUC,QACtB,aAAYL,EAAKI,UAAUC,iBAG5Bm3D,IACDv4D,EAAAA,EAAAA,KAAC8gB,EAAAA,EAAM,CACLlS,MAAM5O,EAAAA,EAAAA,KAAC64D,GAAAA,IAAW,IAClB79C,QAASo9C,EACT5vC,UAzCiB,SAAC62B,GACP,UAAbA,EAAI2Y,MAAiC,UAAb3Y,EAAI2Y,MAC9BI,EAAa/Y,EAEjB,EAsCQ99C,UAAWmjB,IAAW,gBAAiB7D,EAAQyD,cAC/C7Y,MAAO1K,EAAKI,UAAUC,WACtB,aAAYL,EAAKI,UAAUC,mCAKrC,GAAG,CAACyf,EAAQyD,aAAcvjB,EAAM8S,EAAMwjD,EAAgBC,IAStD,OAPA3/C,EAAAA,EAAAA,YAAU,WACJiE,GAAUA,EAAOi2B,UACnBj2B,EAAOi2B,SAAS,4BAADpkC,QAA6BqrD,EAAAA,GAAAA,eAAcjlD,IAG9D,GAAG,KAIDpU,EAAAA,EAAAA,MAAA,OACE8B,UAAWmjB,IAAW,4BAA6B7D,EAAQ+Q,WAC3DpJ,UAAW,SAACR,GAAYQ,EAAUR,EAAO+L,EAAQ,EACjDqX,MAAO,CAAEzrC,MAAO,OAAQC,OAAQ,QAChC,uBAAiBG,SAAA,EAEjBC,EAAAA,EAAAA,KAAC89B,GAAe,CACdjqB,KAAMA,EACN8jB,gBAAiBA,EACjB52B,KAAMA,EACN2mB,kBAAgB,EAChBC,cAAe8vC,IAAe1jC,EAC9BnM,qBAAsBA,EACtBgT,WAAYA,EACZrM,SAAUA,EACVvT,QAAS6f,EACTiC,iBAAkBA,EAClBi8B,aAAc1B,EACdjmC,UAAWA,EACXE,OAAQA,EACR0J,kBAAmBA,IAEpBw8B,IACDx3D,EAAAA,EAAAA,KAAA,OAAAD,UACEC,EAAAA,EAAAA,KAAA,KAAGqrC,KAAMx3B,EAAKU,IAAKob,OAAO,SAASqpC,IAAI,sBAAsBh+C,QAAS,SAAArC,GAAC,OAAIA,EAAEsP,iBAAiB,EAACloB,SAC5FgB,EAAKI,UAAUC,4BAM1B,EAgCAg2D,GAAuBn2C,aAAe,CACpC0W,qBAAiBziB,EACjB6e,OAAQ,EACR6G,YAAY,EACZrM,UAAU,EACVsM,SAAUtuB,IAAAA,KACV+qD,YAAa/qD,IAAAA,KACbuwB,kBAAkB,EAClBlhB,YAAQ1G,EACRkc,WAAW,EACXE,OAAQ/kB,IAAAA,KACRyuB,kBAAmB,EACnBw8B,wBAAwB,G,iBC9ObyB,IAAmB/4C,EAAAA,EAAAA,GAAW,CACzC+D,MAAInQ,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACF8O,SAAU,WACVjjB,MAAO,QACJgf,EAAAA,GAAWW,SAAS,WAAS,IAChC+B,IAAK,OACLpC,gBAAiB,mBAEjB,mBAAoB,CAClBtf,MAAO,QAET,sBAAoBmU,EAAAA,EAAAA,GAAA,GACf6K,EAAAA,GAAWQ,OAAO,mBAEvB,qBAAsB,CACpBF,gBAAiB,iBAGrBi6C,eAAgB,CACdC,cAAe,QAEjBC,gBAAiB,CACfz5D,MAAO,QAET05D,aAAc,CACZ15D,MAAO,OACP0f,UAAW,QAEbuS,UAAW,CACTlT,QAAS,OACTI,WAAY,SAEZ,MAAO,CACLnf,MAAO,OACP+5B,OAAQ,cAKR4/B,GAAqB,CACzB56C,QAAS,OACTI,WAAY,SACZD,eAAgB,SAChBuK,cAAe,SACfxpB,OAAQ,QAGJ25D,GAAmB,CACvBj5C,SAAU,OACVC,WAAY,OACZF,MAAO,WAGIm5C,IAAsBt5C,EAAAA,EAAAA,GAAW,CAC5Cu5C,UAAQ3lD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACHwlD,IAAkB,IACrB,uBAAqBxlD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAChBylD,IAAgB,IACnBl9B,cAAe,CACb,CACEE,GAAI,CACFpT,UAAW,oBAIjBqT,kBAAmB,OACnBE,wBAAyB,SACzBD,wBAAyB,aAE3B,iCAAkC,CAChClF,UAAW,UAGfmiC,YAAU5lD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACLwlD,IAAkB,IACrB,8BAA4BxlD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACvB6K,EAAAA,GAAWW,SAAS,WACpBX,EAAAA,GAAWg7C,aAAa,sBAE7B,uBAAqB7lD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAChBylD,IAAgB,IACnBl9B,cAAe,CACb,CACEC,KAAM,CACJnT,UAAW,qBAEboT,GAAI,CACFpT,UAAW,sBAIjBqT,kBAAmB,OACnBE,wBAAyB,OACzBD,wBAAyB,eAG7Bm9B,QAAM9lD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACDwlD,IAAkB,IACrB,uBAAqBxlD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAChBylD,IAAgB,IACnBl5C,MAAO,gBChGA9X,GAAQ,SAACuZ,GACpB,IAAMjB,EAAUo4C,KAEhB,OAAOj5D,EAAAA,EAAAA,KAAC65D,GAAAA,GAAkB/lD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKgO,GAAK,IAAEjB,QAASA,IACjD,E,aCJai5C,GAA+B,SAACh4C,GAC3C,IAAMjB,EAAU24C,KAChB,OAAOx5D,EAAAA,EAAAA,KAAC+5D,GAAAA,IAAmBjmD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKgO,GAAK,IAAEjB,QAASA,IAClD,EAEam5C,GAA6B,SAACl4C,GACzC,IAAMjB,EAAU24C,KAChB,OAAOx5D,EAAAA,EAAAA,KAACi6D,GAAAA,IAAiBnmD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKgO,GAAK,IAAEjB,QAASA,IAChD,EAEaq5C,GAAiC,SAACp4C,GAC7C,IAAMjB,EAAU24C,KAChB,OAAOx5D,EAAAA,EAAAA,KAACm6D,GAAAA,IAAqBrmD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAKgO,GAAK,IAAEjB,QAASA,IACpD,ECbau5C,IAA8Bl6C,EAAAA,EAAAA,IAAUpM,EAAAA,EAAAA,GAAC,CACpDumD,8BAA4BvmD,EAAAA,EAAAA,GAAA,GACvBmlB,MAGLqhC,wBAAyB,CACvB57C,QAAS,OACTkE,SAAU,WACVgE,KAAM,OACNtF,OAAQ,MACRI,OAAQ,GAGV64C,WAASzmD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAEPoT,QAAS,EACTtE,SAAU,WACVvB,IAAK,MACLuF,KAAM,OAEHjI,EAAAA,GAAWK,aAAa,QAAM,IACjC,0BAA2B,CACzBC,gBAAiB,cACjBkK,UAAW,oBACX,UAAW,CACTqxC,YAAa,MACb5gC,aAAc,OACdvZ,MAAO,OACPC,SAAU,OACVC,WAAY,OACZT,WAAY,UAEd,2DAA4D,CAC1DoK,YAAa,MACb,aAAc,CACZ3J,WAAY,OACZD,SAAU,OACV1gB,OAAQ,UAId,eAAgB,CAEdsnB,QAAS,KAIbuzC,gBAAiB,CACf96D,MAAO,OACPC,OAAQ,UAIPw5B,OCnCQshC,GAA+B,SAAH55D,GAgBlC,IAfL+S,EAAI/S,EAAJ+S,KACA8jB,EAAe72B,EAAf62B,gBACAjQ,EAAgB5mB,EAAhB4mB,iBACAC,EAAa7mB,EAAb6mB,cACAkV,EAAiB/7B,EAAjB+7B,kBACAjV,EAAoB9mB,EAApB8mB,qBACAgT,EAAU95B,EAAV85B,WACArM,EAAQztB,EAARytB,SACAuO,EAAgBh8B,EAAhBg8B,iBACA9hB,EAAOla,EAAPka,QACAja,EAAID,EAAJC,KACAg4D,EAAYj4D,EAAZi4D,aACA3nC,EAAStwB,EAATswB,UACAE,EAAMxwB,EAANwwB,OACA0J,EAAiBl6B,EAAjBk6B,kBAEMna,EAAUu5C,KAChB/iD,GAAwCC,EAAAA,EAAAA,WAAS,GAAMC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAAhDsjD,EAAapjD,EAAA,GAAEqjD,EAAcrjD,EAAA,GACpCsgC,GAAkCvgC,EAAAA,EAAAA,WAAS,GAAMwgC,GAAAtgC,EAAAA,GAAAA,GAAAqgC,EAAA,GAA1CgjB,EAAS/iB,EAAA,GAAEgjB,EAAYhjB,EAAA,GAC9BijB,GAAkCzjD,EAAAA,EAAAA,WAAS,GAAM0jD,GAAAxjD,EAAAA,GAAAA,GAAAujD,EAAA,GAA1CE,EAASD,EAAA,GAAEE,EAAYF,EAAA,GAC9BG,GAAqD7jD,EAAAA,EAAAA,WAAS,GAAM8jD,GAAA5jD,EAAAA,GAAAA,GAAA2jD,EAAA,GAA7DE,EAAkBD,EAAA,GAAEE,EAAsBF,EAAA,GAEjDplD,EAA8DnC,GAAQ,CAAC,EAA/DmS,EAAIhQ,EAAJgQ,KAAM0L,EAAY1b,EAAZ0b,aAAcxxB,EAAE8V,EAAF9V,GAAIq7D,EAAYvlD,EAAZulD,aAAcrkD,EAAMlB,EAANkB,OAAQ3C,EAAGyB,EAAHzB,IAChDinD,GAAez3C,EAAAA,EAAAA,UAAQ,kBAAM3W,EAAAA,GAAAA,IAAoBmuD,EAAa,GAAE,CAACA,IAEvEE,GAA8BnkD,EAAAA,EAAAA,UAAS,MAAKokD,GAAAlkD,EAAAA,GAAAA,GAAAikD,EAAA,GAArCE,EAAOD,EAAA,GAAEE,EAAUF,EAAA,GACpBG,GAAWv5C,EAAAA,EAAAA,QAAO,OAExB3K,EAAAA,EAAAA,YAAU,WACJgjD,GAAiBgB,IAAY7+B,IAC/B6+B,EAAQG,iBAAiB,aAAa,WACpChB,GAAa,GACbe,EAASvsC,QAAUtC,YAAW,WAC5B8tC,GAAa,GACbQ,GAAuB,GACvBJ,GAAa,EACf,GAAG,IACL,IACAS,EAAQG,iBAAiB,YAAY,WACnChB,GAAa,GACbiB,aAAaF,EAASvsC,SACtBgsC,GAAuB,EACzB,IAEJ,GAAG,CAACK,EAAS7+B,EAAkB69B,KAE/BhjD,EAAAA,EAAAA,YAAU,kBAAM,WACVkkD,EAASvsC,SACXysC,aAAaF,EAASvsC,QAE1B,CAAC,GAAE,KAEH3X,EAAAA,EAAAA,YAAU,WACJ4W,IACFusC,GAAa,GACbQ,GAAuB,GAE3B,GAAG,CAAC/sC,IAEJ,IAAMytC,GAAmB92C,EAAAA,EAAAA,cAAY,WACnC62C,aAAaF,EAASvsC,SACtBypC,GACF,GAAG,CAACA,IAEEkD,GAAkBl4C,EAAAA,EAAAA,UAAQ,iBAAO,CAAEm4C,KAAMrB,EAAW,GAAG,CAACA,IAExDsB,EAAeR,EAAUA,EAAQS,YAAc,EAE/Ch/B,GAAcrZ,EAAAA,EAAAA,UAAQ,WAC1B,IAAIsZ,EAAiB,KAkCrB,MAhCe,WAAXnmB,EACFmmB,GACE59B,EAAAA,EAAAA,MAAA,OAAK8B,UAAU,4BAA2BxB,SAAA,EACxCC,EAAAA,EAAAA,KAACyrB,GAAS,CACRzqB,IAAK0wB,EACLxwB,IAAK8kB,GAAQ9lB,GAAM,GACnBwrB,aAAa,EACbC,SAAUivC,EACV75D,KAAMA,KAERf,EAAAA,EAAAA,KAAA,OAAKuB,UAAWsf,EAAQy5C,wBAAwBv6D,SAC7C46D,GAAiBa,IAAiBX,IACjC76D,EAAAA,EAAAA,KAACu9B,GAAS,CACRpxB,KAAMqvD,EACN5sD,KAAMytD,GAAAA,YAOhBzB,GAAe,GAEA,eAAX1jD,EACFmmB,GAAiBr9B,EAAAA,EAAAA,KAAA,OAAKuB,UAAWmjB,IAAW,gCAAiC7D,EAAQ45C,iBAAiB16D,UAACC,EAAAA,EAAAA,KAACk6D,GAA8B,CAACoC,mBAAoBv7D,EAAKI,UAAUC,sBACtJ,UAAX8V,EACTmmB,GAAiBr9B,EAAAA,EAAAA,KAAA,OAAKuB,UAAWmjB,IAAW,2BAA4B7D,EAAQ45C,iBAAiB16D,UAACC,EAAAA,EAAAA,KAAC85D,GAA4B,CAACwC,mBAAoBv7D,EAAKI,UAAUC,qBAC/I,WAAX8V,IACTmmB,GAAiBr9B,EAAAA,EAAAA,KAAA,OAAKuB,UAAWmjB,IAAW,4BAA6B7D,EAAQ45C,iBAAiB16D,UAACC,EAAAA,EAAAA,KAACg6D,GAA0B,CAACsC,mBAAoBv7D,EAAKI,UAAUC,uBAIlKy7B,EACKA,EAAkBQ,GAEpBA,CACT,GAAG,CAACnmB,EAAQ2lB,EAAmBnL,EAAc1L,EAAM9lB,EAAIa,EAAM8f,EAAQy5C,wBAAyBz5C,EAAQ45C,gBAAiBE,EAAeE,EAAWW,IAE3I/9B,IAA2BvY,EAAAA,EAAAA,cAAY,WAC3C,OAAI0C,EACKA,IAEF,IACT,GAAG,CAACA,IAEE8V,IAAcxY,EAAAA,EAAAA,cAAY,WAC1B0V,GAAcygC,EAChBrgD,EAAQ,CAAEnH,KAAAA,EAAM0a,SAAAA,IACPssC,GACTmB,GAEJ,GAAG,CAACnoD,EAAMmH,EAASghD,EAAkBphC,EAAYrM,EAAUssC,EAAWQ,IAQtE,OANA1jD,EAAAA,EAAAA,YAAU,WACJmlB,GACFw+B,GAAuB,EAE3B,GAAG,CAACx+B,KAGFr9B,EAAAA,EAAAA,MAAA,OAAK8B,UAAWmjB,IAAW,0BAA2B7D,EAAQw5C,8BAA8Bt6D,SAAA,EAC1FN,EAAAA,EAAAA,MAAC0xB,GAA0B,CACzBC,UAAWA,EACXvd,KAAMA,EACNwd,gBAAiB2J,EACjB1J,OAAQA,EACRvwB,KAAMA,EACNwtB,SAAUA,EAASxuB,SAAA,EAEnBC,EAAAA,EAAAA,KAAC+oB,EAA4B,CAC3BpB,cAAeA,EACfD,iBAAkBA,GAAoBizC,GAAiBU,EACvDzzC,qBAAsB6V,GACtB3V,qBAAsBJ,GAAqB6G,GAAauO,EAAsEjc,EAAQ0Y,wBAA1D1Y,EAAQwY,wCACpFre,QAAS0iB,GAAY39B,SAEpB66B,GAAcygC,GACbr7D,EAAAA,EAAAA,KAACsuB,GAA+B,CAACza,KAAMA,EAAM0a,SAAUA,EAAUvT,QAASA,EAASoQ,UAAWpF,GAAQjlB,EAAKI,UAAUC,SAAgBotB,UAAW7G,EAAc5nB,SAC3Jq9B,IAECA,KAGL69B,IAAcn+B,GAA+B,WAAX5lB,IACnClX,EAAAA,EAAAA,KAAA,OAAcuB,UAAWmjB,IAAW,gBAAiB7D,EAAQ07C,cAAex6C,IAAK,SAAAuf,GAAC,OAAIs6B,EAAWt6B,EAAE,EAACvhC,UAClGC,EAAAA,EAAAA,KAACuI,GAAK,CACJvH,IAAKuT,EACLioD,UAAU,EACVC,eAAa,EACb17D,KAAMA,EACNqqB,UAAWrqB,EAAKI,UAAUC,SAC1Bs7D,SAAUP,EACVQ,UAAQ,EACRp7D,UAAWmjB,IAAW7D,EAAQ05C,UAAWI,GAAiBE,GAAa,cACvE+B,UAAU,EACVC,iBAAkBZ,KAXZ/7D,OAgBdT,EAAAA,EAAAA,MAAA,OAAK8B,UAAU,mBAAkBxB,SAAA,EAC/BC,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,wBAAuBxB,UACpCC,EAAAA,EAAAA,KAACg5B,GAAiB,CAAC7sB,KAAM6Z,GAAQ,GAAI2R,gBAAiBA,EAAiBE,eAAa,MAErF33B,IACCT,EAAAA,EAAAA,MAAA,OAAK8B,UAAU,sBAAqBxB,SAAA,IAAA0N,OAC9B1M,EAAKI,UAAUC,MAAW,MAC9BpB,EAAAA,EAAAA,KAACg5B,GAAiB,CAAC7sB,KAAMjM,EAAIy3B,gBAAiBA,YAM1D,EAwBA+iC,GAA6Bz5C,aAAe,CAC1C0W,qBAAiBziB,EACjBwS,kBAAkB,EAClBC,eAAe,EACfkV,kBAAmB,KACnBjV,qBAAsB,KACtBgT,YAAY,EACZrM,UAAU,EACVvT,aAAS9F,EACT4nB,kBAAkB,GCzOb,IAAM3b,IAAYjB,EAAAA,EAAAA,GAAW,CAClC48C,cAAYhpD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACV8O,SAAU,YACPjE,EAAAA,GAAWK,aAAagL,GAAAA,EAAO+yC,qBAC/Bp+C,EAAAA,GAAWS,QAAQ,MAAO,QAAS,YAExC+I,gBAAcrU,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACT6K,EAAAA,GAAWK,aAAagL,GAAAA,EAAO+yC,qBAAmB,IACrD79C,UAAW,mEAEbuO,YAAU3Z,EAAAA,EAAAA,GAAA,GACL6K,EAAAA,GAAWK,aAAagL,GAAAA,EAAO+yC,qBAEpCC,aAAWlpD,EAAAA,EAAAA,GAAA,CACTuN,IAAK,MACLwF,MAAO,OACPjE,SAAU,WACVvC,MAAO,UACPC,SAAU,OACVrB,gBAAiB,WACdN,EAAAA,GAAWK,aAAagL,GAAAA,EAAOizC,yBAIzBC,GAAqB,SAACp7C,GACjC,IACEjO,EACEiO,EADFjO,KAAM9S,EACJ+gB,EADI/gB,KAAMo8D,EACVr7C,EADUq7C,cAAeC,EACzBt7C,EADyBs7C,WAAYC,EACrCv7C,EADqCu7C,WAEzCv8D,EAAoB+S,GAAQ,CAAC,EAArBU,EAAGzT,EAAHyT,IAAKrU,EAAEY,EAAFZ,GACP2gB,EAAUM,KAEVm8C,GAAcp4C,EAAAA,EAAAA,cAAY,WAC9Bi4C,EAAcj9D,EAChB,GAAG,CAACA,EAAIi9D,IAER,OACE19D,EAAAA,EAAAA,MAAA,OAAK8B,UAAW67D,GAAar8C,EAAAA,EAAAA,GAAa,yBAA0BF,EAAQi8C,cAAgB,GAAG/8D,SAAA,EAC7FC,EAAAA,EAAAA,KAACyrB,GAAS,CACRzqB,IAAKuT,EACLrT,IAAKhB,GAAM,GACXwrB,aAAa,EACb3qB,KAAMA,EACNia,QAASsiD,EACTxxC,cAAe,CAAE3D,eAAgBgL,IAAW,mBAAoBtS,EAAQsH,gBAAiBsF,YAAY1M,EAAAA,EAAAA,GAAa,aAAcF,EAAQ4M,eAEzI2vC,GAAcC,IAAcr9D,EAAAA,EAAAA,KAACu9D,GAAAA,IAAqB,CAACh8D,UAAW4xB,IAAW,eAAgBtS,EAAQm8C,iBAGxG,EAeAE,GAAmBj8C,aAAe,CAChCo8C,YAAY,G,iBC3DRl8C,IAAYjB,EAAAA,EAAAA,GAAW,CAC3Bs9C,mBAAoB,CAClB7jC,WAAY,QAEdtlB,YAAa,CACXijB,aAAc,MACdhX,SAAU,OACVC,WAAY,OACZC,WAAY,SAIHi9C,GAAiB,SAAH38D,GAWpB,IAVLC,EAAID,EAAJC,KACA6tD,EAAW9tD,EAAX8tD,YACA8O,EAAkB58D,EAAlB48D,mBACAP,EAAar8D,EAAbq8D,cACA96C,EAAcvhB,EAAduhB,eACAke,EAAUz/B,EAAVy/B,WACAlM,EAAavzB,EAAbuzB,cACAspC,EAAiB78D,EAAjB68D,kBAAiBC,EAAA98D,EACjBu8D,WAAAA,OAAU,IAAAO,GAAOA,EACjBC,EAAa/8D,EAAb+8D,cAGEtnD,EAGEq4C,EAHFr4C,OACA80C,EAEEuD,EAFFvD,gBACA+C,EACEQ,EADFR,aAEIvtC,EAAUM,KAChB9J,GAA8CC,EAAAA,EAAAA,UAAS,IAAGC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAAnDymD,EAAevmD,EAAA,GAAEwmD,EAAkBxmD,EAAA,GAEpCymD,GAAmB94C,EAAAA,EAAAA,cAAY,SAAC+4C,GACpC,GAAIH,EAAgB3iD,SAAS8iD,GAAiB,CAC5C,IAAMloC,EAAmB+nC,EAAgB7iD,QAAO,SAAAijD,GAAM,OAAIA,IAAWD,CAAc,IACnFF,EAAmBhoC,EACrB,MACEgoC,EAAmBV,EAAU,GAAA5vD,QAAAkI,EAAAA,GAAAA,GAAOmoD,GAAe,CAAEG,IAAkB,CAACA,IAE1Ed,EAAcc,EAChB,GAAG,CAACZ,EAAYF,EAAeW,IAEzBK,GAAmBp6C,EAAAA,EAAAA,UAAQ,kBAAMxX,IAAAA,IAAMgK,GAAQ,SAACwE,GACpD,IACE7a,EACE6a,EADF7a,GAGF,OAAA4T,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACKiH,GAAK,IACRqjD,SAAU,SAACp2C,GACT,IAAMgwC,EAAOzrD,IAAAA,IAAMyb,EAAO,CAAC,SAAU,gBAAiB,SACzC,UAATgwC,GAA6B,UAATA,IACtBgG,EAAiB99D,GACjB8nB,EAAME,iBAEV,GAEJ,GAAE,GAAE,CAAC3R,EAAQynD,IAEPK,GAAoBt6C,EAAAA,EAAAA,UAAQ,iBAAO,CACvC2S,YAAa5tB,GAAAA,EAAgBC,MAC7BouB,iBAAkB,2BAClBpC,QAAS,KACTrB,MAAOyqC,EACPvnC,eAAgBy0B,EAChBj2C,OAAQ,CACNzV,MAAO4gC,GArEe,IAsEtBlM,cAAeA,GArEU,GAsEzBE,gBAAiBlS,GAAkB,mDAEtC,GAAG,CAAC87C,EAAkB9S,EAAiB9qB,EAAYlM,EAAehS,IAE7Di8C,GAAkBv6C,EAAAA,EAAAA,UACtB,iBAAO,CAACs6C,EAAkB,GAC1B,CAACA,IAGG1qC,GAAezO,EAAAA,EAAAA,cAAY,SAAAlP,GAAe,IAAZnC,EAAImC,EAAJnC,KAC1BigB,EAAejgB,EAAfigB,OAAQ5zB,EAAO2T,EAAP3T,GAEhB,OACEF,EAAAA,EAAAA,KAACk9D,GAAkB,CACjBrpD,KAAMA,EACNkgB,MAAOD,EACP/yB,KAAMA,EACNs8D,WAAYA,EACZF,cAAea,EACfZ,WAAYU,EAAgB3iD,SAASjb,IAG3C,GAAG,CAACa,EAAMi9D,EAAkBF,EAAiBT,IAEvClnC,GAAejR,EAAAA,EAAAA,cAAY,WAC/B,KAAI3O,GAAUA,EAAOtB,QAAUo2C,GAA/B,CAGA,IAAMkT,EAAQnQ,EAAa,CAAEj0B,MAAO7yB,GAAAA,KAChCi3D,GACFA,EAAM/4B,OAAM,SAAC/F,GACPi+B,GACFA,EAAmBj+B,EAEvB,GAPF,CASF,GAAG,CAAClpB,EAAQ63C,EAAcsP,EAAoBrS,IAExCh1B,GAAsBnR,EAAAA,EAAAA,cAAY,SAAA7I,GAAgC,IAA7BqX,EAAKrX,EAALqX,MAAOkD,EAAcva,EAAdua,eAChD,OAAKlD,EAAMze,OAAS2hB,GAAoBlD,EAAMze,OAAS,GAEnDjV,EAAAA,EAAAA,KAAC+uB,GAAoB,CAACC,UAAWmH,EAAap2B,SAC3C89D,IACC79D,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,kBAAiBxB,UAC9BC,EAAAA,EAAAA,KAAC2jB,EAAgB,CAACC,eAAa,OAHe8P,EAAMze,QASvD,IACT,GAAG,CAAC4oD,EAAe1nC,IAEnB,OACE12B,EAAAA,EAAAA,MAAA,OAAK8B,UAAW4xB,IAAW,aAActS,EAAQ28C,oBAAoBz9D,SAAA,EACjE49D,IAAqB39D,EAAAA,EAAAA,KAAA,OAAKuB,UAAWsf,EAAQxM,YAAYtU,SAAEgB,EAAKI,UAAUC,uCAC5EpB,EAAAA,EAAAA,KAACq3B,GAAgB,CACfnB,YAAaooC,EACb3qC,aAAcA,EACd0C,oBAAqBA,EACrBF,aAAcA,MAItB,EAgBAsnC,GAAex8C,aAAe,CAC5B2tC,YAAa,CAAC,EACd8O,mBAAoBnxD,IAAAA,KACpB8V,eAAgB,KAChBg7C,YAAY,GCpKP,IAAMmB,IAAsCt+C,EAAAA,EAAAA,GAAW,CAC5Du+C,0BAA2B,CACzB77C,SAAU,WACV3M,UAAW,OACXyI,QAAS,OACTI,WAAY,SACZG,gBAAiB,UAEjB,0BAAwBnL,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACtB4K,QAAS,QACNC,EAAAA,GAAWiB,KAAK,IAAE,IACrBsZ,SAAU,OACVpa,WAAY,aACZ07C,YAAa,OAEb,yBAA0B,CACxB5gC,aAAc,UAIlB,6BAA8B,CAC5B/P,WAAY,OACZnL,QAAS,QAGX,yCAA0C,CACxC2B,MAAO,WAET,8BAA4BvM,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACvB6K,EAAAA,GAAWQ,OAAO,SAAO,IAC5BF,gBAAiB,eACdN,EAAAA,GAAWC,QAAQ,MAAO,QAAM,IACnChf,OAAQ,OACR,YAAa,CACXygB,MAAO,WAET,UAAW,CACTpB,gBAAiB,WAEnB,UAAW,CACTA,gBAAiB,UACjB,UAAW,CACTA,gBAAiB,cAIvB,yBAAuBnL,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAClB6K,EAAAA,GAAW+/C,WAAW,MAAO,QAAS,YACtC//C,EAAAA,GAAWqB,OAAO,MAAO,QAE9B,qCAAmClM,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAC9B6K,EAAAA,GAAWC,QAAQ,MAAO,SAAO,IACpCW,SAAU,OACV,mBAAoB,CAClBc,MAAO,gBAMFs+C,IAAuCz+C,EAAAA,EAAAA,GAAW,CAC7D0+C,2BAA4B,CAC1BlgD,QAAS,OACTI,WAAY,SAEZ,mBAAiBhL,EAAAA,EAAAA,GAAA,CACf+V,WAAY,MACZxJ,MAAO,WACJ1B,EAAAA,GAAWkgD,eAAe,cAG/B,kBAAgB/qD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACdlU,OAAQ,OACR46D,YAAa,OACb97C,QAAS,QACTI,WAAY,SACZe,aAAc,WACdQ,MAAO,WACJ1B,EAAAA,GAAWW,SAAS,WAAS,IAChCQ,WAAY,SAEZL,WAAY,WACZa,SAAU,OACVC,WAAY,OACZoZ,WAAY,OAEZ,0BAA2B,CACzBtY,IAAK,SAGT,8BAA+B,CAC7BxB,aAAc,YAGlBi/C,iBAAehrD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACV6K,EAAAA,GAAWiB,KAAK,EAAG,EAAG,SACtBjB,EAAAA,GAAWQ,OAAO,SAAO,IAC5Bvf,OAAQ,OACR0gB,SAAU,OACVuJ,WAAY,MACZ2wC,YAAa,MACb5gC,aAAc,MACd3a,gBAAiB,UACjBuB,WAAY,UAIHu+C,IAA+B7+C,EAAAA,EAAAA,GAAW,CACrD8+C,eAAalrD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACR6K,EAAAA,GAAWQ,OAAO,SAAO,IAC5BkB,MAAO,+BACPG,WAAY,MACZ7gB,MAAO,OACP4f,SAAU,kBACPZ,EAAAA,GAAWC,QAAQ,iBAAkB,mBAAiB,IACzDK,gBAAiB,yBACjBsB,WAAY,kBACZ,WAASzM,EAAAA,EAAAA,GAAA,GACJ6K,EAAAA,GAAWkgD,eAAe,gBAGjCI,iBAAkB,CAChBzE,YAAa,MACbh6C,WAAY,MACZF,SAAU,QAEZ4+C,mBAAiBprD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACf4K,QAAS,SACNC,EAAAA,GAAWQ,OAAO,SAAO,IAC5BkB,MAAO,+BACPG,WAAY,MACZ7gB,MAAO,OACP4f,SAAU,kBACPZ,EAAAA,GAAWC,QAAQ,iBAAkB,mBAAiB,IACzDhf,OAAQ,OACRqf,gBAAiB,yBACjB,WAASnL,EAAAA,EAAAA,GAAA,GACJ6K,EAAAA,GAAWkgD,eAAe,kBClI7BM,GAAmB,SAAHr+D,GAQf,IAPLqxD,EAAOrxD,EAAPqxD,QACAiN,EAAat+D,EAAbs+D,cACAC,EAA4Bv+D,EAA5Bu+D,6BACAC,EAAcx+D,EAAdw+D,eACAC,EAAYz+D,EAAZy+D,aACAC,EAAY1+D,EAAZ0+D,aACAz+D,EAAID,EAAJC,KAEM8f,EAAU29C,KAGViB,EAAa,SAAC1rC,GAClB,OAAIA,IAAUo+B,EAAQl9C,OAAS,EACtB,MAEDjV,EAAAA,EAAAA,KAAA,QAAMuB,UAAU,uBAC1B,EAEA,OACE9B,EAAAA,EAAAA,MAAA,OAAK8B,UAAW4xB,IAAW,4BAA6BtS,EAAQ49C,2BAA2B1+D,SAAA,EACzFN,EAAAA,EAAAA,MAAA,OAAK8B,UAAU,sBAAqBxB,SAAA,CACjCoyD,EAAQp8C,KAAI,SAACkF,EAAQ8Y,GAAK,OACzBt0B,EAAAA,EAAAA,MAAC69B,EAAAA,SAAQ,CAAAv9B,SAAA,CACNu/D,EAAe,CACdrkD,OAAAA,EACAsN,QAAS62C,GAAiBA,EAAcl/D,KAAO+a,EAAO/a,GACtD6zB,MAAAA,EACA2rC,OAAQ3rC,IAAUo+B,EAAQl9C,OAAS,EACnC0qD,QAAmB,IAAV5rC,IAEV0rC,EAAW1rC,KAAM,UAAAtmB,OARKwN,EAAO/a,IASrB,IAEZm/D,QAEH5/D,EAAAA,EAAAA,MAAA,OAAK8B,UAAU,0BAAyBxB,SAAA,EACtCC,EAAAA,EAAAA,KAAC8gB,EAAAA,EAAM,CACL9F,QAASwkD,EACTj+D,UAAU,iCACV,aAAYR,EAAKI,UAAUC,iCAC3BwN,MAAM5O,EAAAA,EAAAA,KAACstB,GAAAA,IAAqB,IAAIvtB,SAE/BgB,EAAKI,UAAUC,YAElBpB,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,wBACfvB,EAAAA,EAAAA,KAAC8gB,EAAAA,EAAM,CACL9F,QAASukD,EACTh+D,UAAU,6CACV,aAAYR,EAAKI,UAAUC,sBAC3BwN,MAAM5O,EAAAA,EAAAA,KAAC4/D,GAAAA,IAAc,WAK/B,EAgBAT,GAAiBl+C,aAAe,CAC9BkxC,QAAS,GACTiN,cAAe,KACfC,6BAA8B,WAAF,OAAQ,IAAI,EACxCE,aAAchzD,IAAAA,KACdizD,aAAcjzD,IAAAA,MAGT,IAAMszD,GACTh7C,EAAAA,KAAWs6C,I,iEClFFW,GAAwB,SAAHh/D,GAE3B,IADLqxD,EAAOrxD,EAAPqxD,QAAS4N,EAAaj/D,EAAbi/D,cAAeh/D,EAAID,EAAJC,KAElB8f,EAAUk+C,KAEhB,OACEt/D,EAAAA,EAAAA,MAAA,OAAK8B,UAAU,uBAAsBxB,SAAA,EACnCC,EAAAA,EAAAA,KAAA,OAAKuB,UAAWsf,EAAQo+C,iBAAiBl/D,SAAEgB,EAAKI,UAAU,aACzDoL,IAAAA,IAAM4lD,GAAS,SAAAl3C,GAAM,OAEpBjb,EAAAA,EAAAA,KAAC8gB,EAAAA,EAAM,CAELvf,UAAW4xB,IAAW,cAAetS,EAAQq+C,mBAC7ClkD,QAAS,WAAF,OAAQ+kD,EAAc9kD,EAAO,EAAClb,UAErCC,EAAAA,EAAAA,KAAA,QAAAD,SAAA,GAAA0N,OAAU1M,EAAKI,UAAU8Z,EAAOxP,OAAM,MAAAgC,OAAKwN,EAAO+kD,mBAAwB,UAAAvyD,OAJ3DwN,EAAO/a,IAKf,MAIjB,EAaM+/D,GAA2B,SAAHjqD,GAEvB,IADLm8C,EAAOn8C,EAAPm8C,QAAS4N,EAAa/pD,EAAb+pD,cAAeh/D,EAAIiV,EAAJjV,KAElB8f,EAAUk+C,KAEVmB,EAAkB3zD,IAAAA,OAAS4lD,GAAS,SAAA91C,GAAwB,OAAAA,EAArB8jD,qBAAkD,IAC/F,OAAQ5zD,IAAAA,QAAU2zD,GAAmB,MACnCzgE,EAAAA,EAAAA,MAAC2gE,GAAAA,EAAO,CAACtnC,WAAS,EAACC,YAAa,CAAEnW,SAAU,QAASy9C,MAAO,SAAUtgE,SAAA,EACpEC,EAAAA,EAAAA,KAACsgE,GAAAA,EAAc,CAAAvgE,UACbC,EAAAA,EAAAA,KAAC8gB,EAAAA,EAAM,CAACy/C,GAAG,IAAIh/D,WAAWwf,EAAAA,EAAAA,GAAa,kBAAmBF,EAAQm+C,eAAej/D,SAAEgB,EAAKI,UAAUC,iBAGpGpB,EAAAA,EAAAA,KAACwgE,GAAAA,EAAc,CAAAzgE,UACbC,EAAAA,EAAAA,KAAC8/D,GAAqB,CAAC/+D,KAAMA,EAAMg/D,cAAeA,EAAe5N,QAAS+N,QAIlF,EAYaO,GAAuB57C,EAAAA,KAAWo7C,ICzDzCS,GAAoB,SAAH5/D,GAMhB,IALLqxD,EAAOrxD,EAAPqxD,QACAmN,EAAcx+D,EAAdw+D,eACAS,EAAaj/D,EAAbi/D,cACAY,EAAsB7/D,EAAtB6/D,uBACA5/D,EAAID,EAAJC,KAEM8f,EAAU89C,KAOViC,GAAgBt+C,EAAAA,EAAAA,UAQtB,OACE7iB,EAAAA,EAAAA,MAAA,OAAK8B,UAAW4xB,IAAW,6BAA8BtS,EAAQ+9C,4BAA4B7+D,SAAA,EAC3FC,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,cAAcwgB,IAAK6+C,EAAeC,OAThC,WAEfD,EAActxC,SAChBsxC,EAActxC,QAAQwxC,SAAS,EAAG,EAEtC,EAI0E/gE,SACnEoyD,EAAQp8C,KAAI,SAACkF,EAAQ8Y,GAAK,OACzB9Y,EAAOzP,OAAST,GAAAA,EAAWC,WACzBs0D,EAAe,CACXrkD,OAAAA,EACA8Y,MAAAA,EACA2rC,OAAQ3rC,IAAUo+B,EAAQl9C,OAAS,EACnC0qD,QAAmB,IAAV5rC,KAEb/zB,EAAAA,EAAAA,KAACs9B,EAAAA,SAAQ,CAAAv9B,UACPC,EAAAA,EAAAA,KAAA,QACEgb,QAAS,WAAF,OAAQ+kD,EAAc9kD,EAAQ8Y,EAAM,EAC3ClR,SAAS,IACTgI,KAAK,SACLrC,UAAW,SAAAR,GAAK,OA9BX,SAACA,EAAO/M,EAAQ8Y,GAC7B/L,EAAM+4C,QAAUt4C,GAAAA,QAAQu4C,OAASh5C,EAAM+4C,QAAUt4C,GAAAA,QAAQw4C,OAC3DlB,EAAc9kD,EAAQ8Y,EAE1B,CA0BkCmtC,CAAWl5C,EAAO/M,EAAQ8Y,EAAM,EAACh0B,SAEpDu/D,EAAe,CACdrkD,OAAAA,EACA8Y,MAAAA,EACA2rC,OAAQ3rC,IAAUo+B,EAAQl9C,OAAS,EACnC0qD,QAAmB,IAAV5rC,OAEN,UAAAtmB,OAbgBwN,EAAO/a,IAcrB,OAGjBF,EAAAA,EAAAA,KAACygE,GAAoB,CAACtO,QAASA,EAAS4N,cAAeA,EAAeh/D,KAAMA,KAC5Ef,EAAAA,EAAAA,KAAC8gB,EAAAA,EAAM,CAACvf,UAAW4xB,IAAW,oBAAqBtS,EAAQi+C,iBAAkBlwD,MAAM5O,EAAAA,EAAAA,KAACmhE,GAAAA,IAAU,IAAKn7C,KAAK,aAAahL,QAAS2lD,EAAuB5gE,SAAEgB,EAAKI,UAAU,kBAG5K,EAYAu/D,GAAkBz/C,aAAe,CAC/BkxC,QAAS,GACT4N,cAAexzD,IAAAA,KACfo0D,uBAAwBp0D,IAAAA,MAGnB,IAAM60D,GACTv8C,EAAAA,KAAW67C,IC9ETv/C,IAAYjB,EAAAA,EAAAA,GAAW,CAC3BmhD,qBAAsB,CACpBzhE,OAAQ,OAER,UAAW,CACT88D,SAAU,OACVr9C,UAAW,OACXuD,SAAU,WACVvB,IAAK,MACL8H,UAAW,qBAGfm4C,iBAAkB,CAChB,iBAAextD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACV6K,EAAAA,GAAWS,QAAQ,MAAO,QAAS,SAAO,IAC7CoT,cAAe,SAGnB+uC,qBAAsB,CACpB,oDAAqD,CACnD/uC,cAAe,QAEjB,qDAAsD,CACpDA,cAAe,QAEjB,sDAAuD,CACrDA,cAAe,QAEjB,iDAAkD,CAChDA,cAAe,QAEjB,oDAAqD,CACnDA,cAAe,QAEjB,0DAA2D,CACzDA,cAAe,QAEjB,wCAAyC,CACvCgvC,gBAAiB,yEACjBvmD,OAAQ,gBACRiE,UAAW,sBAMJuiD,GAAoB,SAAC3/C,GAChC,IACEliB,EAQEkiB,EARFliB,OACAD,EAOEmiB,EAPFniB,MACAqB,EAME8gB,EANF9gB,IACA0wB,EAKE5P,EALF4P,aACAgwC,EAIE5/C,EAJF4/C,aACAC,EAGE7/C,EAHF6/C,iBACAC,EAEE9/C,EAFF8/C,cACAC,EACE//C,EADF+/C,cAGIhhD,EAAUM,KACV2gD,IAAwBniE,EAAQ,GAAKC,EAAS,GAE9CgsB,GAAU1G,EAAAA,EAAAA,cAAY,SAAC68C,GAC3B,IAAM9vB,EAAY8vB,GAAMA,EAAGpyC,QAAUoyC,EAAGpyC,OAAOlD,MAAMurC,KACrD4J,EAAc3vB,EAChB,GAAG,CAAC2vB,IAEJ,OACE5hE,EAAAA,EAAAA,KAAA,OAAKuB,UAAWmjB,IAAWo9C,GAAuBjhD,EAAQwgD,qBAAsBQ,GAAiBhhD,EAAQygD,iBAAkBzgD,EAAQ0gD,qBAAsB,uBAAuBxhE,UAC9KC,EAAAA,EAAAA,KAAA,SACEL,MAAOA,EACPC,OAAQA,EACRoiE,OAAQtwC,EACRuwC,UAAWP,EACXC,iBAAkBA,EAClB/1C,QAASA,EACT5qB,IAAKA,EACLkhE,aAAa,0BACbC,yBAAuB,KAG/B,EAaAV,GAAkBxgD,aAAe,CAC/B4gD,eAAe,EACfnwC,aAAc,KACdgwC,cAAc,EACd/hE,WAAOuV,EACPtV,YAAQsV,EACR0sD,cAAer1D,IAAAA,KACfo1D,iBAAkBp1D,IAAAA,M,gBCtGd4U,IAAYjB,EAAAA,EAAAA,GAAW,CAC3B0R,UAAW,CACTlT,QAAS,OACT0K,cAAe,SACfvK,eAAgB,UAElBujD,kBAAmB,CACjBziE,MAAO,OACPsf,gBAAiB,kBACjBP,QAAS,OACTI,WAAY,SACZD,eAAgB,SAChB0I,SAAU,GAEZ86C,yBAA0B,CACxBziE,OAAQ,OACRD,MAAO,OACPsf,gBAAiB,qBACjBH,WAAY,SACZJ,QAAS,OACTG,eAAgB,UAElByjD,2BAA4B,CAC1Bz4C,WAAY,OAEd04C,YAAa,CACX5iE,MAAO,QAGT6iE,iBAAe1uD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACbmL,gBAAiB,UACjBP,QAAS,OACT9e,OAAQ,QACL+e,EAAAA,GAAWC,QAAQ,SAAO,IAC7BE,WAAY,SACZyB,WAAY,OACZT,WAAY,UACTnB,EAAAA,GAAWW,SAAS,WAAS,IAChCO,aAAc,aAEhB4iD,cAAe,CACbxjD,gBAAiB,WAEnByjD,cAAe,CAEbhkD,QAAS,OACTmL,WAAY,MACZ/K,WAAY,UAEd6jD,UAAQ7uD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACNuM,MAAO,WACJ1B,EAAAA,GAAWkgD,eAAe,cAAY,IACzCr+C,WAAY,SACZvB,gBAAiB,eACdN,EAAAA,GAAWK,aAAa,MAAO,MAAO,MAAO,QAC7CL,EAAAA,GAAWQ,OAAO,WAIZyjD,GAAmC,CAC9CvwB,KAAM,OACNwwB,QAAS,WAGEC,GAAyB,SAAHhiE,GAK5B,IAJLS,EAAST,EAATS,UACAwhE,EAAYjiE,EAAZiiE,aACAC,EAAiBliE,EAAjBkiE,kBACAC,EAAWniE,EAAXmiE,YAEAjtD,EAMIitD,GAAe,CAAC,EALlBz3D,EAAIwK,EAAJxK,KACA03D,EAAOltD,EAAPktD,QACAC,EAAGntD,EAAHmtD,IACAC,EAAiBptD,EAAjBotD,kBACAC,EAAkBrtD,EAAlBqtD,mBAGIxiD,EAAUM,KAEVmiD,GAAep+C,EAAAA,EAAAA,cAAY,WAC/B,IAAIyT,EAkCJ,OAhCIsqC,IACFtqC,GACEl5B,EAAAA,EAAAA,MAAA,OAAK8B,UAAWmjB,IACZ7D,EAAQ2hD,gBACRh3D,IAASo3D,GAAiCC,SAAWhiD,EAAQ4hD,eAC7D1iE,SAAA,EAEFC,EAAAA,EAAAA,KAACkkB,GAAAA,EAAO,CAAC9B,KAAK,WACd3iB,EAAAA,EAAAA,MAAA,OAAK8B,UAAWsf,EAAQ6hD,cAAc3iE,SAAA,CAElCmjE,IACAljE,EAAAA,EAAAA,KAAA,QAAMuB,UAAWsf,EAAQ0iD,kBAAkBxjE,UAACC,EAAAA,EAAAA,KAAA,KAAGuB,UAAU,UAASxB,SAAEmjE,MAGpEC,IACA1jE,EAAAA,EAAAA,MAAColB,EAAAA,SAAc,CAAA9kB,SAAA,EACbC,EAAAA,EAAAA,KAAA,QAAAD,SAAM,UACNC,EAAAA,EAAAA,KAAA,QAAMuB,UAAU,MAAKxB,SAAEojE,OAIzBC,GAAqBC,IACrB5jE,EAAAA,EAAAA,MAAColB,EAAAA,SAAc,CAAA9kB,SAAA,EACbC,EAAAA,EAAAA,KAAA,QAAAD,SAAM,UACNC,EAAAA,EAAAA,KAAA,UAAQuB,UAAWmjB,IAAW,aAADjX,OAAcoT,EAAQ8hD,WAAa/lD,MAAK,QAAAnP,OAAU41D,GAAqBtjE,SAAEqjE,cAQ3GzqC,CACT,GAAG,CAAC9X,EAAQ0iD,kBAAmB1iD,EAAQ2hD,gBAAiB3hD,EAAQ6hD,cAAe7hD,EAAQ4hD,cAAe5hD,EAAQ8hD,SAAUM,EAAaG,EAAmBC,EAAoBH,EAASC,EAAK33D,IAE1L,OACE/L,EAAAA,EAAAA,MAAA,OAAK8B,UAAWmjB,IAAW7D,EAAQ+Q,UAAWrwB,GAAWxB,SAAA,EACvDC,EAAAA,EAAAA,KAAA,OAAKuB,UAAWsf,EAAQuhD,kBAAkBriE,UACxCN,EAAAA,EAAAA,MAAA,OAAK8B,UAAWsf,EAAQwhD,yBAAyBtiE,SAAA,EAC/CC,EAAAA,EAAAA,KAAA,OAAKgB,IAAK+hE,EAAcxhE,UAAWsf,EAAQ0hD,YAAarhE,IAAI,MAC5DlB,EAAAA,EAAAA,KAAA,QAAMuB,UAAWsf,EAAQyhD,2BAA2BviE,SAAEijE,SAGzDM,MAGP,EAgBAR,GAAuB7hD,aAAe,CACpC1f,UAAW,GACX0hE,YAAa,CAAC,GCrJT,IAAMO,GAAiC,CAC5CC,cAAY3vD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACP4vD,GAAAA,GAA0BD,cAAY,IACzC7jE,OAAQ,OACR8e,QAAS,OACT0K,cAAe,MACfvK,eAAgB,gBAChBC,WAAY,WAEdohC,UAAW,CACTxhC,QAAS,QAEXilD,kBAAgB7vD,EAAAA,EAAAA,GAAA,CACd4K,QAAS,OACT0K,cAAe,MACf7B,SAAU,IACVD,WAAY,IACZzI,eAAgB,gBAChBC,WAAY,SACZ+K,WAAY,MACZK,YAAa,OACb5J,SAAU,QACP3B,EAAAA,GAAWW,SAAS,WAEzB6b,YAAUrnB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACR0M,WAAY,MACZ+G,SAAU,IACVD,WAAY,KACT3I,EAAAA,GAAWW,SAAS,WAAS,IAChCO,aAAc,aAEhB+jD,WAAY,CACVr8C,SAAU,IACVD,WAAY,IACZ9G,WAAY,OAEdqjD,eAAgB,CACdnlD,QAAS,eACT9e,OAAQ,UACRD,MAAO,OACPkqB,WAAY,OACZtC,SAAU,IACVD,WAAY,MCvCVkQ,IAAWtX,EAAAA,EAAAA,GAAWsjD,IAEfM,GAA+B,SAAHhjE,GAAA,IAAMC,EAAID,EAAJC,KAAI,OAAO,SAAAiV,GAKnD,IAJLzB,EAAGyB,EAAHzB,IACArT,EAAG8U,EAAH9U,IACA8kB,EAAIhQ,EAAJgQ,KACA+9C,EAAc/tD,EAAd+tD,eAEMljD,EAAU2W,KAChB,OACE/3B,EAAAA,EAAAA,MAAA,OAAK8B,WAAWwf,EAAAA,EAAAA,GAAa,8BAA+BF,EAAQ4iD,cAAeviE,IAAKA,EAAInB,SAAA,EAC1FC,EAAAA,EAAAA,KAAC4wB,GAAU,CAACJ,kBAAmBjc,EAAKmc,wBAAyB7P,EAAQgjD,kBACrEpkE,EAAAA,EAAAA,MAAA,OAAK8B,UAAWsf,EAAQ8iD,iBAAiB5jE,SAAA,EACvCC,EAAAA,EAAAA,KAAA,OAAKuB,WAAWwf,EAAAA,EAAAA,GAAa,cAAeF,EAAQsa,YAAYp7B,SAC7DimB,KAEHhmB,EAAAA,EAAAA,KAAA,OAAKuB,UAAWsf,EAAQ+iD,WAAW7jE,SAChCgB,EAAKI,UAAUC,4BAAmC,CAAE2iE,eAAgBA,GAAkB,WAKjG,CAAE,ECxBWC,GAAuB,SAAHljE,GAK1B,IAJLS,EAAST,EAATS,UACAgT,EAAGzT,EAAHyT,IACA0vD,EAAOnjE,EAAPmjE,QACA/iE,EAAGJ,EAAHI,IAEA,OAAI+iE,GAEKjkE,EAAAA,EAAAA,KAAA,SAAOuB,UAAWA,EAAWP,IAAKuT,KAGpCvU,EAAAA,EAAAA,KAACkkE,GAAAA,GAAkB,CAAC3iE,UAAWA,EAAWgT,IAAKA,EAAKrT,IAAKA,GAClE,EASA8iE,GAAqB/iD,aAAe,CAClC1f,UAAW,GACX0iE,SAAS,EACT/iE,IAAK,I,sDCjBDijE,GACO,YADPA,GAEI,SAFJA,GAGG,QAGHhjD,IAAYjB,EAAAA,EAAAA,GAAW,CAC3B0R,UAAW,CACT2F,UAAW,QAEb6sC,gBAAiB,CACfxkE,OAAQ,QACR88D,SAAU,QACV/8D,MAAO,QAET0kE,OAAQ,CACN/qC,WAAY,UAEdgrC,MAAO,CACLhrC,WAAY,aAIVirC,GACE,CACJrB,QAAS9hE,mCACT+hE,IAAK/hE,qFAIIojE,GAAmB,SAAH1jE,GAKtB,IAJLC,EAAID,EAAJC,KACAwT,EAAGzT,EAAHyT,IACAotD,EAAgB7gE,EAAhB6gE,iBACA8C,EAAc3jE,EAAd2jE,eAEM5jD,EAAUM,KAChB9J,GAA4CC,EAAAA,EAAAA,UAAS6sD,IAAyB5sD,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAAvEqtD,EAAcntD,EAAA,GAAEotD,EAAiBptD,EAAA,GACxCsgC,GAAkCvgC,EAAAA,EAAAA,UAAS/C,GAAIujC,GAAAtgC,EAAAA,GAAAA,GAAAqgC,EAAA,GAAxC+sB,EAAS9sB,EAAA,GAAE+sB,EAAY/sB,EAAA,IAE9BngC,EAAAA,EAAAA,YAAU,WACJpD,IAAQqwD,IACVC,EAAatwD,GACbowD,EAAkBR,IAEtB,GAAG,CAACS,EAAWrwD,IAEf,IAAM0uD,GAAcl/C,EAAAA,EAAAA,UAAQ,WAC1B,IAAM+gD,EAAsBv4D,IAAAA,UAC1Bg4D,IACA,SAAAp4D,GAAI,OAAIpL,EAAKI,UAAUgL,EAAK,IAG9B,OAAA2H,EAAAA,EAAAA,GAAA,GACKgxD,EAEP,GAAG,CAAC/jE,IAEEgkE,GAA2B7/C,EAAAA,EAAAA,cAAY,WAC3Cy/C,EAAkBR,IAClBxC,GACF,GAAG,CAACA,IAEEqD,GAAyB9/C,EAAAA,EAAAA,cAAY,SAACuH,GAC1Ck4C,EAAkBR,IAClBM,EAAeh4C,EACjB,GAAG,CAACg4C,IAEJ,OACEhlE,EAAAA,EAAAA,MAAA,OAAK8B,UAAWmjB,IAAW7D,EAAQ+Q,UAAW,sBAAsB7xB,SAAA,CAEhE2kE,IAAmBP,KACnBnkE,EAAAA,EAAAA,KAAC8iE,GAAsB,CACrBvhE,UAAWsf,EAAQujD,gBACnBrB,aA5EQ,kmBA6ERC,kBAAmBjiE,EAAKI,UAAUC,SAClC6hE,YAAaA,KAGjBjjE,EAAAA,EAAAA,KAAA,OAAKuB,UAAWmjB,IAAW7D,EAAQwjD,OAAQK,IAAmBP,IAAyBtjD,EAAQyjD,OAAOvkE,UACpGC,EAAAA,EAAAA,KAACyhE,GAAiB,CAChBE,iBAAkBoD,EAClBnD,cAAeoD,EACfhkE,IAAKuT,EACL3U,OAAQ,IACRiiE,eAAa,QAKvB,EAWA2C,GAAiBvjD,aAAe,CAC9B0gD,iBAAkBp1D,IAAAA,KAClBk4D,eAAgBl4D,IAAAA,MCxGlB,IAGM4U,IAAYjB,EAAAA,EAAAA,GAAW,CAC3ByiD,UAAQ7uD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACNuM,MAAO,WACJ1B,EAAAA,GAAWkgD,eAAe,cAAY,IACzCr+C,WAAY,SACZvB,gBAAiB,eACdN,EAAAA,GAAWK,aAAa,MAAO,MAAO,MAAO,QAC7CL,EAAAA,GAAWQ,OAAO,SAEvByS,UAAW,CACT2F,UAAW,OACXhX,WAAY,QAEd0kD,YAAa,CACX1tC,UAAW,OACX53B,MAAO,SAETulE,iBAAkB,CAChBtiD,SAAU,WACViE,MAAO,QACPxF,IAAK,SAEP8jD,sBAAuB,CACrB5tC,UAAW,MACXlX,MAAO,WAET+kD,kBAAmB,CACjB7tC,UAAW,QAEb8tC,iBAAkB,CAChB/jD,OAAQ,OACRsB,SAAU,WACVgE,KAAM,SAQG0+C,GAAuB,SAACxjD,GACnC,IAAQ/gB,EAAmB+gB,EAAnB/gB,KAAMk7B,EAAana,EAAbma,SACRpb,EAAUM,KAChB9J,GAAsCC,EAAAA,EAAAA,WAAS,GAAMC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAA9CkuD,EAAWhuD,EAAA,GAAEqjD,EAAcrjD,EAAA,GAClCsgC,GAAwCvgC,EAAAA,EAAAA,UAAS,IAAGwgC,GAAAtgC,EAAAA,GAAAA,GAAAqgC,EAAA,GAA7C2tB,EAAY1tB,EAAA,GAAE2tB,EAAe3tB,EAAA,GACpCijB,GAA4CzjD,EAAAA,EAAAA,UAAS,IAAG0jD,GAAAxjD,EAAAA,GAAAA,GAAAujD,EAAA,GAAjD2K,EAAc1K,EAAA,GAAE2K,EAAiB3K,EAAA,GACxCG,GAAkC7jD,EAAAA,EAAAA,UAAS,IAAG8jD,GAAA5jD,EAAAA,GAAAA,GAAA2jD,EAAA,GAAvCyJ,EAASxJ,EAAA,GAAEyJ,EAAYzJ,EAAA,GAC9BK,GAA4CnkD,EAAAA,EAAAA,UAAS,IAAGokD,GAAAlkD,EAAAA,GAAAA,GAAAikD,EAAA,GAAjDmK,EAAclK,EAAA,GAAEmK,EAAiBnK,EAAA,GACxCoK,GAAgDxuD,EAAAA,EAAAA,WAAS,GAAMyuD,GAAAvuD,EAAAA,GAAAA,GAAAsuD,EAAA,GAAxDE,EAAgBD,EAAA,GAAEE,EAAmBF,EAAA,GAEtCG,GAAchhD,EAAAA,EAAAA,cAAY,WAC1B0/C,IAAcY,IAChBC,EAAgBb,GAChBe,EAAkB,KAEdQ,EAAAA,EAAAA,SAAQP,IACV3pC,EAAS,CAAC,CAAE1nB,IAAKqwD,KACjBqB,GAAoB,IAEpBA,GAAoB,GAG1B,GAAG,CAACrB,EAAW3oC,EAAUupC,EAAcI,IAEjCQ,GAAmBlhD,EAAAA,EAAAA,cAAY,SAAC8C,EAAOnP,GAC3C,IAAQ3C,GAAU2C,GAAQ,CAAC,GAAnB3C,MACR2uD,EAAa3uD,GAEb,IAAMmwD,EAAS,IAEVC,EAAAA,GAAAA,YAAWpwD,IACdmwD,EAAO74D,KAAKzM,EAAKI,UAAUC,8BAGzBmL,IAAAA,KAAO2J,GA7EQ,MA8EjBmwD,EAAO74D,KAAKzM,EAAKI,UACfC,sGACA,CAAE0E,IAhFa,QAoFnB+/D,EAAkBQ,EACpB,GAAG,CAACtlE,IAEEynB,GAAYtD,EAAAA,EAAAA,cAAY,SAAC68C,GAtFZ,KAuFbA,EAAGt5C,SACLy9C,GAEJ,GAAG,CAACA,IAEErF,GAAS37C,EAAAA,EAAAA,cAAY,WACzBghD,GACF,GAAG,CAACA,IAEEzB,GAAiBv/C,EAAAA,EAAAA,cAAY,WACjCygD,EAAkB5kE,EAAKI,UAAUC,yJACnC,GAAG,CAACL,IAEE4gE,GAAmBz8C,EAAAA,EAAAA,cAAY,WACnC01C,GAAe,EACjB,GAAG,IAEH,OACEn7D,EAAAA,EAAAA,MAAA,OAAK8B,UAAWmjB,IAAW,kBAADjX,OAAmBoT,EAAQ+Q,YAAa7xB,SAAA,EAChEC,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,MAAKxB,SAChBwlE,GACE9lE,EAAAA,EAAAA,MAAA,OAAAM,SAAA,CAAK,IAAEgB,EAAKI,UAAUC,qCAA2C,QAEjE3B,EAAAA,EAAAA,MAAA,OAAAM,SAAA,CACGgB,EAAKI,UAAUC,mCAChBpB,EAAAA,EAAAA,KAAA,UAAQuB,UAAWmjB,IAAW,aAADjX,OAAcoT,EAAQ8hD,WAAa/lD,MAAM,gBAAe7c,SAAEgB,EAAKI,UAAUC,uDAK9GpB,EAAAA,EAAAA,KAACumE,GAAAA,EAAK,CACJhlE,UAAWmjB,IAAW,UAAW7D,EAAQokD,aAEzC/uD,MAAO0uD,EACP3oC,SAAUmqC,EACV59C,UAAWA,EACXq4C,OAAQA,EACR2F,YAAazlE,EAAKI,UAAUC,mBAC5BqlE,eAAezmE,EAAAA,EAAAA,KAAC0mE,GAAAA,IAAY,OAE9B1mE,EAAAA,EAAAA,KAAA,OAAK,YAAU,SAAQD,UACnBwM,IAAAA,QAAUq5D,KACV5lE,EAAAA,EAAAA,KAAA,OAAKuB,UAAWmjB,IAAW,YAAa7D,EAAQskD,uBAAuBplE,SACpE6lE,EAAe7vD,KAAI,SAAA0pB,GAAG,OAAIz/B,EAAAA,EAAAA,KAAA,OAAAD,SAAgB0/B,GAANA,EAAgB,QAKzDumC,GACEhmE,EAAAA,EAAAA,KAACwkE,GAAgB,CACfzjE,KAAMA,EACNwT,IAAKixD,EACL7D,iBAAkBA,EAClB8C,eAAgBA,KAElBzkE,EAAAA,EAAAA,KAAA,OAAKuB,UAAWsf,EAAQqkD,iBAAkBlkE,IAvGlD,koOAuGyEE,IAAI,KAGvEwkE,IACA1lE,EAAAA,EAAAA,KAAC2mE,GAAAA,EAAU,CAACC,OAAO,UAAUrlE,UAAWsf,EAAQwkD,iBAAiBtlE,SAC9D2lE,MAKX,E,aCrJMvkD,IAAYjB,EAAAA,EAAAA,GAAW,CAC3B2mD,eAAgB,CACdltC,WAAY,OAEdmtC,WAAY,CACVxvC,aAAc,OACd5Y,QAAS,OACTwa,SAAU,QAEZ6tC,MAAO,CACLpnE,MAAO,QACPuqB,YAAa,MACboN,aAAc,OAEhB0vC,WAAY,CACV1vC,aAAc,MACdrY,gBAAiB,WAEnBgoD,SAAU,CACR3vC,aAAc,MACdpN,YAAa,MACb3K,SAAU,QAEZ2nD,QAAS,CACP3nD,SAAU,QAEZojD,UAAQ7uD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACNuM,MAAO,WACJ1B,EAAAA,GAAWkgD,eAAe,cAAY,IACzCr+C,WAAY,SACZvB,gBAAiB,eACdN,EAAAA,GAAWK,aAAa,MAAO,MAAO,MAAO,QAC7CL,EAAAA,GAAWQ,OAAO,WAIZgoD,GAAyB,SAACrlD,GACrC,IACE/gB,EACE+gB,EADF/gB,KAAMsX,EACJyJ,EADIzJ,IAAK+uD,EACTtlD,EADSslD,IAAKC,EACdvlD,EADculD,YAAaC,EAC3BxlD,EAD2BwlD,kBAAmBjlD,EAC9CP,EAD8CO,eAE5CxB,EAAUM,KAChB9J,GAA0CC,EAAAA,EAAAA,WAAS,GAAMC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAAlDwmD,EAAatmD,EAAA,GAAEgwD,EAAgBhwD,EAAA,GACtCsgC,GAAoDvgC,EAAAA,EAAAA,WAAS,GAAMwgC,GAAAtgC,EAAAA,GAAAA,GAAAqgC,EAAA,GAA5D2vB,EAAkB1vB,EAAA,GAAE2vB,EAAqB3vB,EAAA,GAChDijB,GAA4BzjD,EAAAA,EAAAA,UAAS,IAAG0jD,GAAAxjD,EAAAA,GAAAA,GAAAujD,EAAA,GAAjC1U,EAAM2U,EAAA,GAAE1U,EAAS0U,EAAA,GACxBG,GAAoC7jD,EAAAA,EAAAA,UAAS,GAAE8jD,GAAA5jD,EAAAA,GAAAA,GAAA2jD,EAAA,GAAxC5X,EAAU6X,EAAA,GAAEsM,EAAatM,EAAA,GAC1BuM,GAAiBrlD,EAAAA,EAAAA,QAAO,IACxBslD,GAActlD,EAAAA,EAAAA,QAAO,IACrB62B,GAAO72B,EAAAA,EAAAA,QAAO,GACdulD,GAAUvlD,EAAAA,EAAAA,SAAO,GACjBwlD,GAAkBxlD,EAAAA,EAAAA,QAAO,MAEzBylD,GAAgB7iD,EAAAA,EAAAA,cAAY,SAAC68C,EAAIlpD,GACrC,IAAiCmvD,GAAVnvD,GAAQ,CAAC,GAAxB3C,MAAAA,OAAK,IAAA8xD,EAAG,GAAEA,EAClBJ,EAAYt4C,QAAUpZ,CACxB,GAAG,IACG+xD,GAAoBlkD,EAAAA,EAAAA,UAAQ,kBAAM,IAAImkD,GAAAA,EAAsB,CAChEd,IAAAA,EAAK/uD,IAAAA,EAAKgvD,YAAAA,EAAac,WAAY,eACnC,GAAE,CAACd,EAAahvD,EAAK+uD,IAEjBgB,GAAiBljD,EAAAA,EAAAA,cAAY,SAAAiB,GAAO,OAAI8hD,EAAkBG,eAAejiD,EAAQ,GAAE,CAAC8hD,IAGpFI,GAAanjD,EAAAA,EAAAA,cAAY,SAAAlP,GAAkH,IAADsyD,EAAAtyD,EAA9GuyD,QAAAA,OAAO,IAAAD,EAAGV,EAAYt4C,QAAOg5C,EAAAE,EAAAxyD,EAAEyyD,MAAAA,OAAK,IAAAD,EAAGrvB,EAAK7pB,QAAOk5C,EAAAE,EAAA1yD,EAAE2yD,OAAAA,OAAM,IAAAD,EAAGjwD,KAAKC,MAAMovD,EAAgBx4C,UAAY,CAAC,EAACo5C,EACnIH,IACY,IAAVE,GACFd,EAAer4C,QAAU,GACzBg4C,EAAkBK,EAAer4C,SACjCm4C,GAAsB,IAEtBF,GAAiB,GAGnBa,EAAe,CACbQ,eAAeC,EAAAA,EAAAA,QAAO,CACpBC,QAAS,aACTP,QAAAA,EACAE,MAAAA,EACAM,KA/EQ,GAgFRC,SAAU,KACVC,iBAAiB,GAChBN,KACFvkC,MAAK,SAACvrB,GACPgvD,EAAQv4C,QAAUzW,EAAK,gBAAkBA,EAAK3C,MAAMjB,OAASwzD,EAC7Df,EAAc7uD,EAAK,iBAAmB,GAEtCytC,GAAU,SAAA4iB,GAAU,SAAAz7D,QAAAkI,EAAAA,GAAAA,GACd8yD,EAAQ,EAAIS,EAAa,KAAEvzD,EAAAA,GAAAA,IAC5BI,EAAAA,EAAAA,KAAI8C,EAAK3C,OAAO,SAACrC,GAMlB,MALc,CACZU,IAAKV,EAAKs1D,QAAQC,IAClBlpE,GAAI2T,EAAKuF,GAIb,KAAE,IAGU,IAAVqvD,EACFhB,GAAsB,GAEtBF,GAAiB,EAErB,IAEJ,GAAG,CAACa,EAAgBd,IAGdnxC,GAAejR,EAAAA,EAAAA,cAAY,WAC/B,GAAI2iD,EAAQv4C,QAAS,CACnB,IAAMo0B,EAAUvK,EAAK7pB,QA/GT,GAgHZ6pB,EAAK7pB,QAAUo0B,EACf2kB,EAAW,CAAEI,MAAO/kB,GACtB,CACF,GAAG,CAAC2kB,IAEEzZ,GAAc7qC,EAAAA,EAAAA,UAAQ,iBAAO,CACjCxN,OAAQ8vC,EACRgF,gBAAiB9H,EACjB6K,aAAcj4B,EACf,GAAG,CAACkwB,EAAQlwB,EAAcotB,IAErB/6B,GAAYtD,EAAAA,EAAAA,cAAY,SAAC68C,GACd,UAAXA,EAAG71D,MACLitC,EAAK7pB,QAAU,EACf+4C,EAAW,CACTI,MAAO,IAGb,GAAG,CAACJ,IAGElL,GAAgBj4C,EAAAA,EAAAA,cAAY,SAACogC,GACjC,IAAM+jB,EAAuB1B,EAAer4C,QAAQra,OAC9Cq0D,EAAkB3B,EAAer4C,QAAQrU,QAAO,SAAAoB,GAAK,OAAAA,EAAFnc,KAAgBolD,CAAO,IAChF,GAAIgkB,EAAgBr0D,SAAWo0D,EAAsB,CACnD,IAAME,EAAeljB,EAAOmjB,MAAK,SAAA7yC,GAAK,OAAAA,EAAFz2B,KAAgBolD,CAAO,IAC3DqiB,EAAer4C,QAAQ9hB,KAAK+7D,EAC9B,MACE5B,EAAer4C,QAAUg6C,EAE3BhC,GAAiB3xD,EAAAA,GAAAA,GAAKgyD,EAAer4C,SACvC,GAAG,CAAC+2B,EAAQihB,IAEZ,OACE7nE,EAAAA,EAAAA,MAAA,OAAK8B,UAAW4xB,IAAW,0BAA2BtS,EAAQgmD,gBAAgB9mE,SAAA,EAC5EC,EAAAA,EAAAA,KAAA,OAAKuB,UAAWsf,EAAQimD,WAAW/mE,UACjCC,EAAAA,EAAAA,KAACumE,GAAAA,EAAK,CACJhlE,UAAW4xB,IAAW,qBAAsBtS,EAAQkmD,OACpD9qC,SAAU8rC,EACVvB,YAAazlE,EAAKI,UAAUC,qBAC5BqlE,eAAezmE,EAAAA,EAAAA,KAAC0mE,GAAAA,IAAY,IAC5Bl+C,UAAWA,OAGfxoB,EAAAA,EAAAA,KAAC2mE,GAAAA,EAAU,CAACplE,UAAW4xB,IAAW,sBAAuBtS,EAAQmmD,YAAYjnE,SAC1EgB,EAAKI,UAAUC,iGAElBpB,EAAAA,EAAAA,KAAC2mE,GAAAA,EAAU,CAACplE,UAAW4xB,IAAW,eAAgBtS,EAAQmmD,YAAYjnE,UACpEN,EAAAA,EAAAA,MAAA,QAAAM,SAAA,CACGgB,EAAKI,UAAUC,iHAChBpB,EAAAA,EAAAA,KAAA,UAAQuB,UAAW4xB,IAAW,aAAD1lB,OAAcoT,EAAQ8hD,WAAa/lD,MAAM,gBAAe7c,SAAEgB,EAAKI,UAAUC,qBAGxGomE,IAAuBnhB,EAAOpxC,SAAUjV,EAAAA,EAAAA,KAAC2jB,EAAgB,CAACC,eAAa,EAACC,YAAa,CAAE0T,UAAW,YACjG8uB,EAAOpxC,SACRjV,EAAAA,EAAAA,KAACy9D,GAAc,CACb18D,KAAMA,EACN88D,cAAeA,EACfV,cAAeA,EACfvO,YAAaA,EACbvsC,eAAgBA,MAK1B,EAEA8kD,GAAuBsC,UAAY,CACjCpxD,IAAKqsC,KAAAA,OAAiBp1C,WACtB83D,IAAK1iB,KAAAA,OAAiBp1C,WACtB+3D,YAAa3iB,KAAAA,MAAgB,CAAC,GAAGp1C,WACjCvO,KAAM2jD,KAAAA,MAAgB,CACpBvjD,UAAWujD,KAAAA,OACVp1C,WACHg4D,kBAAmB5iB,KAAAA,KAAep1C,Y,iBCzL9B6R,IAAYjB,EAAAA,EAAAA,GAAW,CAC3B2mD,eAAgB,CACdltC,WAAY,OAEdmtC,WAAY,CACVxvC,aAAc,OACd5Y,QAAS,OACTwa,SAAU,QAEZ6tC,MAAO,CACLpnE,MAAO,QACPuqB,YAAa,MACboN,aAAc,OAEhB0vC,WAAY,CACV1vC,aAAc,MACdrY,gBAAiB,WAEnBgoD,SAAU,CACR3vC,aAAc,MACdpN,YAAa,MACb3K,SAAU,QAEZ2nD,QAAS,CACP3nD,SAAU,QAEZojD,UAAQ7uD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACNuM,MAAO,WACJ1B,EAAAA,GAAWkgD,eAAe,cAAY,IACzCr+C,WAAY,SACZvB,gBAAiB,eACdN,EAAAA,GAAWK,aAAa,MAAO,MAAO,MAAO,QAC7CL,EAAAA,GAAWQ,OAAO,WAMZuqD,GAA0B,SAAC5nD,GACtC,IACE/gB,EACE+gB,EADF/gB,KAAMsX,EACJyJ,EADIzJ,IAAK+uD,EACTtlD,EADSslD,IAAKE,EACdxlD,EADcwlD,kBAAmBjlD,EACjCP,EADiCO,eAE/BxB,EAAUM,KAChB9J,GAA0CC,EAAAA,EAAAA,WAAS,GAAMC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAAlDwmD,EAAatmD,EAAA,GAAEgwD,EAAgBhwD,EAAA,GACtCsgC,GAAoDvgC,EAAAA,EAAAA,WAAS,GAAMwgC,GAAAtgC,EAAAA,GAAAA,GAAAqgC,EAAA,GAA5D2vB,EAAkB1vB,EAAA,GAAE2vB,EAAqB3vB,EAAA,GAChDijB,GAA4BzjD,EAAAA,EAAAA,UAAS,IAAG0jD,GAAAxjD,EAAAA,GAAAA,GAAAujD,EAAA,GAAjC1U,EAAM2U,EAAA,GAAE1U,EAAS0U,EAAA,GACxBG,GAAoC7jD,EAAAA,EAAAA,UAAS,GAAE8jD,GAAA5jD,EAAAA,GAAAA,GAAA2jD,EAAA,GAAxC5X,EAAU6X,EAAA,GAAEsM,EAAatM,EAAA,GAC1BuM,GAAiBrlD,EAAAA,EAAAA,QAAO,IACxBslD,GAActlD,EAAAA,EAAAA,QAAO,IACrB62B,GAAO72B,EAAAA,EAAAA,QAAO,GACdulD,GAAUvlD,EAAAA,EAAAA,SAAO,GAEjBylD,GAAgB7iD,EAAAA,EAAAA,cAAY,SAAC68C,EAAIlpD,GACrC,IAAiCmvD,GAAVnvD,GAAQ,CAAC,GAAxB3C,MAAAA,OAAK,IAAA8xD,EAAG,GAAEA,EAClBJ,EAAYt4C,QAAUpZ,CACxB,GAAG,IACGyzD,GAAqB5lD,EAAAA,EAAAA,UAAQ,kBAAM,IAAI6lD,GAAAA,EAAuB,CAAExC,IAAAA,EAAK/uD,IAAAA,GAAM,GAAE,CAACA,EAAK+uD,IAEnFyC,GAAkB3kD,EAAAA,EAAAA,cAAY,SAAAiB,GAAO,OAAIwjD,EAAmBG,gBAAgB3jD,EAAQ,GAAE,CAACwjD,IAGvFtB,GAAanjD,EAAAA,EAAAA,cAAY,SAAAlP,GAA8E,IAAD+zD,EAAA/zD,EAA1Eg0D,WAAAA,OAAU,IAAAD,EAAGnC,EAAYt4C,QAAOy6C,EAAAvB,EAAAxyD,EAAEyyD,MAAAA,OAAK,IAAAD,EAAGrvB,EAAK7pB,QAAOk5C,EAAAE,EAAA1yD,EAAE2yD,OAAAA,OAAM,IAAAD,EAAG,CAAC,EAACA,EACnG,GAAIsB,EAAY,CACA,IAAVvB,GACFd,EAAer4C,QAAU,GACzBg4C,EAAkBK,EAAer4C,SACjCm4C,GAAsB,IAEtBF,GAAiB,GAGnB,IAAM0C,EAAc,CAClBnB,QAAS,aACToB,YArCkB,EAsClBzB,MAAAA,EACAM,KA7EU,IA+ERiB,IACFC,EAAYD,WAAaA,GAE3BH,EAAgB,CACdjB,eAAeC,EAAAA,EAAAA,QAAOoB,EAAatB,KAClCvkC,MAAK,SAACvrB,GACPgvD,EAAQv4C,QAAUzW,EAAK,gBAAkBA,EAAK3C,MAAMjB,OAASwzD,EAC7Df,EAAc7uD,EAAK,iBAAmB,GAEtCytC,GAAU,SAAA4iB,GAAU,SAAAz7D,QAAAkI,EAAAA,GAAAA,GACd8yD,EAAQ,EAAIS,EAAa,KAAEvzD,EAAAA,GAAAA,IAC5BI,EAAAA,EAAAA,KAAI8C,EAAK3C,OAAO,SAACrC,GAMlB,MALc,CACZU,IAAKV,EAAKu1D,IACVlpE,GAAI2T,EAAKs2D,aAIb,KAAE,IAGU,IAAV1B,EACFhB,GAAsB,GAEtBF,GAAiB,EAErB,GACF,CACF,GAAG,CAACsC,EAAiBvC,IAGfnxC,GAAejR,EAAAA,EAAAA,cAAY,WAC/B,GAAI2iD,EAAQv4C,QAAS,CACnB,IAAMo0B,EAAUvK,EAAK7pB,QAhHT,GAiHZ6pB,EAAK7pB,QAAUo0B,EACf2kB,EAAW,CAAEI,MAAO/kB,GACtB,CACF,GAAG,CAAC2kB,IAEEzZ,GAAc7qC,EAAAA,EAAAA,UAAQ,iBAAO,CACjCxN,OAAQ8vC,EACRgF,gBAAiB9H,EACjB6K,aAAcj4B,EACf,GAAG,CAACkwB,EAAQlwB,EAAcotB,IAErB/6B,GAAYtD,EAAAA,EAAAA,cAAY,SAAC68C,GACd,UAAXA,EAAG71D,MACLitC,EAAK7pB,QAAU,EACf+4C,EAAW,CACTI,MAAO,IAGb,GAAG,CAACJ,IAGElL,GAAgBj4C,EAAAA,EAAAA,cAAY,SAACogC,GACjC,IAAM+jB,EAAuB1B,EAAer4C,QAAQra,OAC9Cq0D,EAAkB3B,EAAer4C,QAAQrU,QAAO,SAAAoB,GAAK,OAAAA,EAAFnc,KAAgBolD,CAAO,IAChF,GAAIgkB,EAAgBr0D,SAAWo0D,EAAsB,CACnD,IAAME,EAAeljB,EAAOmjB,MAAK,SAAA7yC,GAAK,OAAAA,EAAFz2B,KAAgBolD,CAAO,IAC3DqiB,EAAer4C,QAAQ9hB,KAAK+7D,EAC9B,MACE5B,EAAer4C,QAAUg6C,EAE3BhC,GAAiB3xD,EAAAA,GAAAA,GAAKgyD,EAAer4C,SACvC,GAAG,CAAC+2B,EAAQihB,IAEZ,OACE7nE,EAAAA,EAAAA,MAAA,OAAK8B,UAAW4xB,IAAW,2BAA4BtS,EAAQgmD,gBAAgB9mE,SAAA,EAC7EC,EAAAA,EAAAA,KAAA,OAAKuB,UAAWsf,EAAQimD,WAAW/mE,UACjCC,EAAAA,EAAAA,KAACumE,GAAAA,EAAK,CACJhlE,UAAW4xB,IAAW,sBAAuBtS,EAAQkmD,OACrD9qC,SAAU8rC,EACVvB,YAAazlE,EAAKI,UAAUC,gCAC5BqlE,eAAezmE,EAAAA,EAAAA,KAAC0mE,GAAAA,IAAY,IAC5Bl+C,UAAWA,MAGbg/C,IAAuBnhB,EAAOpxC,SAAUjV,EAAAA,EAAAA,KAAC2jB,EAAgB,CAACC,eAAa,EAACC,YAAa,CAAE0T,UAAW,YACjG8uB,EAAOpxC,SACRjV,EAAAA,EAAAA,KAACy9D,GAAc,CACb18D,KAAMA,EACN88D,cAAeA,EACfV,cAAeA,EACfvO,YAAaA,EACbvsC,eAAgBA,MAK1B,EAEAqnD,GAAwBD,UAAY,CAClCpxD,IAAKqsC,KAAAA,OAAiBp1C,WACtB83D,IAAK1iB,KAAAA,OAAiBp1C,WACtB+3D,YAAa3iB,KAAAA,MAAgB,CAAC,GAAGp1C,WACjCvO,KAAM2jD,KAAAA,MAAgB,CACpBvjD,UAAWujD,KAAAA,OACVp1C,WACHg4D,kBAAmB5iB,KAAAA,KAAep1C,YCjLpC,IAEM6R,IAAYjB,EAAAA,EAAAA,GAAW,CAC3B2mD,eAAgB,CACdltC,WAAY,OAEdmtC,WAAY,CACVxvC,aAAc,OACd5Y,QAAS,OACTwa,SAAU,QAEZ6tC,MAAO,CACLpnE,MAAO,QACPuqB,YAAa,MACboN,aAAc,OAEhB4vC,QAAS,CACP3nD,SAAU,QAEZojD,UAAQ7uD,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACNuM,MAAO,WACJ1B,EAAAA,GAAWkgD,eAAe,cAAY,IACzCr+C,WAAY,SACZvB,gBAAiB,eACdN,EAAAA,GAAWK,aAAa,MAAO,MAAO,MAAO,QAC7CL,EAAAA,GAAWQ,OAAO,SAEvBirD,iBAAkB,CAChB1rD,QAAS,OACTG,eAAgB,SAChBlf,MAAO,OACP43B,UAAW,EACXD,aAAc,GAEhB+yC,UAAW,CACTznD,SAAU,WACVgE,KAAM,EACNtF,OAAQ,EACR3hB,MAAO,OACPmgB,WAAY,SACZD,aAAc,cAIZyqD,GAAmB,CACvB1rD,QAAS,MACToB,OAAQ,MACRiH,WAAY,OACZ5G,MAAO,QACPqZ,OAAQ,UACR6wC,YAAa,QACbC,YAAa,QACbC,YAAa,QAKFC,GAA0B,SAAC5oD,GACtC,IACE/gB,EACE+gB,EADF/gB,KAAMsX,EACJyJ,EADIzJ,IAAK+uD,EACTtlD,EADSslD,IAAKuD,EACd7oD,EADc6oD,kBAEZ9pD,EAAUM,KAChB9J,GAA0CC,EAAAA,EAAAA,WAAS,GAAMC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAAlDwmD,EAAatmD,EAAA,GAAEgwD,EAAgBhwD,EAAA,GACtCsgC,GAAoDvgC,EAAAA,EAAAA,WAAS,GAAMwgC,GAAAtgC,EAAAA,GAAAA,GAAAqgC,EAAA,GAA5D2vB,EAAkB1vB,EAAA,GAAE2vB,EAAqB3vB,EAAA,GAChDijB,GAA4BzjD,EAAAA,EAAAA,UAAS,IAAG0jD,GAAAxjD,EAAAA,GAAAA,GAAAujD,EAAA,GAAjC6P,EAAM5P,EAAA,GAAE6P,EAAS7P,EAAA,GACxBG,GAAoC7jD,EAAAA,EAAAA,UAAS,GAAE8jD,GAAA5jD,EAAAA,GAAAA,GAAA2jD,EAAA,GAAxC5X,EAAU6X,EAAA,GAAEsM,EAAatM,EAAA,GAC1B0P,GAAiBxoD,EAAAA,EAAAA,QAAO,IACxBslD,GAActlD,EAAAA,EAAAA,QAAO,IACrB62B,GAAO72B,EAAAA,EAAAA,QAAO,GACdulD,GAAUvlD,EAAAA,EAAAA,SAAO,GAEjBylD,GAAgB7iD,EAAAA,EAAAA,cAAY,SAAC68C,EAAIlpD,GACrC,IAAiCmvD,GAAVnvD,GAAQ,CAAC,GAAxB3C,MAAAA,OAAK,IAAA8xD,EAAG,GAAEA,EAClBJ,EAAYt4C,QAAUpZ,CACxB,GAAG,IACGyzD,GAAqB5lD,EAAAA,EAAAA,UAAQ,kBAAM,IAAI6lD,GAAAA,EAAuB,CAAExC,IAAAA,EAAK/uD,IAAAA,GAAM,GAAE,CAACA,EAAK+uD,IAEnF2D,GAAkB7lD,EAAAA,EAAAA,cAAY,SAAAiB,GAAO,OAAIwjD,EAAmBG,gBAAgB3jD,EAAQ,GAAE,CAACwjD,IAGvFqB,GAAa9lD,EAAAA,EAAAA,cAAY,SAAAlP,GAA8E,IAAD+zD,EAAA/zD,EAA1Eg0D,WAAAA,OAAU,IAAAD,EAAGnC,EAAYt4C,QAAOy6C,EAAAvB,EAAAxyD,EAAEyyD,MAAAA,OAAK,IAAAD,EAAGrvB,EAAK7pB,QAAOk5C,EAAAE,EAAA1yD,EAAE2yD,OAAAA,OAAM,IAAAD,EAAG,CAAC,EAACA,EACnG,GAAIsB,EAAY,CACA,IAAVvB,GACFqC,EAAex7C,QAAU,GACzBq7C,EAAkBG,EAAex7C,SACjCm4C,GAAsB,IAEtBF,GAAiB,GAGnB,IAAM0C,EAAc,CAClBnB,QAAS,aACToB,YArCkB,EAsClBzB,MAAAA,EACAM,KA9FU,IAgGRiB,IACFC,EAAYD,WAAaA,GAE3Be,EAAgB,CACdnC,eAAeC,EAAAA,EAAAA,QAAOoB,EAAatB,KAClCvkC,MAAK,SAACvrB,GACPgvD,EAAQv4C,QAAUzW,EAAK,gBAAkBA,EAAK3C,MAAMjB,OAASwzD,EAC7Df,EAAc7uD,EAAK,iBAAmB,GACtCgyD,GAAU,SAAAI,GAAU,SAAAx9D,QAAAkI,EAAAA,GAAAA,GACd8yD,EAAQ,EAAIwC,EAAa,KAAEt1D,EAAAA,GAAAA,IAC5BI,EAAAA,EAAAA,KAAI8C,EAAK3C,OAAO,SAACrC,GAOlB,MANc,CACZU,IAAKV,EAAKu1D,IACVlpE,GAAI2T,EAAKs2D,aACTnkD,KAAMnS,EAAKq3D,YACX72D,YAAaR,EAAKq3D,YAGtB,KAAE,IAGU,IAAVzC,EACFhB,GAAsB,GAEtBF,GAAiB,EAErB,GACF,CACF,GAAG,CAACwD,EAAiBJ,IAGfx0C,GAAejR,EAAAA,EAAAA,cAAY,WAC/B,GAAI2iD,EAAQv4C,QAAS,CACnB,IAAMo0B,EAAUvK,EAAK7pB,QAjIT,GAkIZ6pB,EAAK7pB,QAAUo0B,EACfsnB,EAAW,CAAEvC,MAAO/kB,GACtB,CACF,GAAG,CAACsnB,IAEExiD,GAAYtD,EAAAA,EAAAA,cAAY,SAAC68C,GACd,UAAXA,EAAG71D,MACLitC,EAAK7pB,QAAU,EACf07C,EAAW,CACTvC,MAAO,IAGb,GAAG,CAACuC,IAGEG,GAAgBjmD,EAAAA,EAAAA,cAAY,SAACkmD,GACjC,IAAM/B,EAAuByB,EAAex7C,QAAQra,OAC9Cq0D,EAAkBwB,EAAex7C,QAAQrU,QAAO,SAAAoB,GAAK,OAAAA,EAAFnc,KAAgBkrE,CAAO,IAChF,GAAI9B,EAAgBr0D,SAAWo0D,EAAsB,CACnD,IAAME,EAAeqB,EAAOpB,MAAK,SAAA7yC,GAAK,OAAAA,EAAFz2B,KAAgBkrE,CAAO,IAC3DN,EAAex7C,QAAQ9hB,KAAK+7D,EAC9B,MACEuB,EAAex7C,QAAUg6C,EAE3BqB,GAAiBh1D,EAAAA,GAAAA,GAAKm1D,EAAex7C,SACvC,GAAG,CAACs7C,EAAQD,IAENU,GAAoBtnD,EAAAA,EAAAA,UAAQ,iBAAO,CACvC2S,YAAa5tB,GAAAA,EAAgBC,MAC7BouB,iBAAkB,kCAClBpC,QAAS,KACTrB,MAAOk3C,EACPh0C,eAAgB2sB,EAChBnuC,OAAQ,CACNmf,gBAAiB,gBACjBE,cAAe,IAElB,GAAG,CAACm2C,EAAQrnB,IAEP+a,GAAkBv6C,EAAAA,EAAAA,UACtB,iBAAO,CAACsnD,EAAkB,GAC1B,CAACA,IAGGh1C,GAAsBnR,EAAAA,EAAAA,cAAY,SAAAjH,GAAgC,IAA7ByV,EAAKzV,EAALyV,MAAOkD,EAAc3Y,EAAd2Y,eAChD,OAAKlD,EAAMze,OAAS2hB,GAAoBlD,EAAMze,OAAS,GAEnDjV,EAAAA,EAAAA,KAAC+uB,GAAoB,CAACC,UAAWmH,EAAap2B,SAC3C89D,IACD79D,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,kBAAiBxB,UAC9BC,EAAAA,EAAAA,KAAC2jB,EAAgB,CAACC,eAAa,OAHiB8P,EAAMze,QASvD,IACT,GAAG,CAAC4oD,EAAe1nC,IAEbxC,GAAezO,EAAAA,EAAAA,cAAY,SAAAgW,GAAe,IAAZrnB,EAAIqnB,EAAJrnB,KAC1B3T,EAAa2T,EAAb3T,GAAI8lB,EAASnS,EAATmS,KAEZ,OACEvmB,EAAAA,EAAAA,MAAA,OAAAM,SAAA,EACEC,EAAAA,EAAAA,KAAA,UACEgb,QAAS,WAAF,OAAQmwD,EAAcjrE,EAAG,EAChCA,GAAI2T,EAAK3T,GACTkrC,MAAOk/B,GAAiBvqE,UAExBC,EAAAA,EAAAA,KAAA,SAAOw8D,UAAU,EAAO8O,MAAI,EAAClgC,MAAO,CAAEzrC,MAAO,OAAQC,OAAQ,QAASG,UACpEC,EAAAA,EAAAA,KAAA,UAAQgB,IAAK6S,EAAKU,WAGtBvU,EAAAA,EAAAA,KAAA,OAAKuB,UAAWsf,EAAQupD,iBAAiBrqE,UACvCC,EAAAA,EAAAA,KAAA,QAAMuB,UAAWsf,EAAQwpD,UAAW5+D,MAAOua,EAAKjmB,SAC7CimB,QAKX,GAAG,CAACnF,EAAQwpD,UAAWxpD,EAAQupD,iBAAkBe,IAEjD,OACE1rE,EAAAA,EAAAA,MAAA,OAAK8B,UAAW4xB,IAAW,iCAAkCtS,EAAQgmD,gBAAgB9mE,SAAA,EACnFC,EAAAA,EAAAA,KAAA,OAAKuB,UAAWsf,EAAQimD,WAAW/mE,UACjCC,EAAAA,EAAAA,KAACumE,GAAAA,EAAK,CACJhlE,UAAW4xB,IAAW,4BAA6BtS,EAAQkmD,OAC3D9qC,SAAU8rC,EACVvB,YAAazlE,EAAKI,UAAUC,gCAC5BqlE,eAAezmE,EAAAA,EAAAA,KAAC0mE,GAAAA,IAAY,IAC5Bl+C,UAAWA,MAGbg/C,IAAuBoD,EAAO31D,SAAUjV,EAAAA,EAAAA,KAAC2jB,EAAgB,CAACC,eAAa,EAACC,YAAa,CAAE0T,UAAW,YACjGqzC,EAAO31D,SACRjV,EAAAA,EAAAA,KAACq3B,GAAgB,CACfnB,YAAaooC,EACb3qC,aAAcA,EACd0C,oBAAqBA,EACrBF,aAAcA,MAKxB,EAEAu0C,GAAwBjB,UAAY,CAClCpxD,IAAKqsC,KAAAA,OAAiBp1C,WACtB83D,IAAK1iB,KAAAA,OAAiBp1C,WACtB+3D,YAAa3iB,KAAAA,MAAgB,CAAC,GAAGp1C,WACjCvO,KAAM2jD,KAAAA,MAAgB,CACpBvjD,UAAWujD,KAAAA,OACVp1C,WACHq7D,kBAAmBjmB,KAAAA,KAAep1C,WAClCsM,OAAQ8oC,KAAAA,MAAgB,CACtB7S,SAAU6S,KAAAA,OACTp1C,Y,8BCtPCi8D,GAAmB,CACvB,CAAEr/D,IAAK,WAAYC,KAAM,YACzB,CAAED,IAAK,UAAWC,KAAM,YAGpBgV,IAAYjB,EAAAA,EAAAA,GAAW,CAC3BsrD,mBAAoB,CAClB9sD,QAAS,OACTI,WAAY,SACZ2sD,UAAW,OAEbC,aAAc,CACZ/rE,MAAO,QACP4f,SAAU,QAEZosD,aAAW73D,EAAAA,EAAAA,GAAA,GACN6K,EAAAA,GAAWiB,KAAK,IAErBgsD,uBAAwB,CACtBr0C,UAAW,OACXlX,MAAO,SAIEwrD,GAAkB,SAAC/pD,GAC9B,IACE/gB,EAME+gB,EANF/gB,KACAoqC,EAKErpB,EALFqpB,aACA2gC,EAIEhqD,EAJFgqD,eACAC,EAGEjqD,EAHFiqD,gBACAC,EAEElqD,EAFFkqD,sBACAC,EACEnqD,EADFmqD,4BAEF50D,GAAkCC,EAAAA,EAAAA,UAAS,YAAWC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAA/C60D,EAAS30D,EAAA,GAAE40D,EAAY50D,EAAA,GACxBsJ,EAAUM,KACVirD,GAAWC,EAAAA,GAAAA,MAEXC,GAAiBpnD,EAAAA,EAAAA,cAAY,SAACm6B,EAAKxmC,GACvC,IAAQ3C,EAAU2C,EAAV3C,MACRi2D,EAAaj2D,EACf,GAAG,IAEGq2D,GAAYrnD,EAAAA,EAAAA,cAChB,SAAC68C,GACC,IAAMyK,EAASzK,GAAMA,EAAGpyC,QAAUoyC,EAAGpyC,OAAOzZ,MACtCu2D,EAASlB,GAAiB/B,MAAK,SAAA1oE,GAAM,OAAAA,EAAHoL,MAAkBggE,CAAS,IAAE//D,KAC/DugE,EAAS,GAAAj/D,OAAMg/D,GAAMh/D,OAAG++D,GAC9BV,EAAeY,EACjB,GACA,CAACZ,EAAgBI,IAGb1jD,GAAYtD,EAAAA,EAAAA,cAChB,SAAC68C,GACgB,UAAXA,EAAG71D,KACLqgE,EAAUxK,EAEd,GACA,CAACwK,IAEH,OACE9sE,EAAAA,EAAAA,MAAA+iB,EAAAA,SAAA,CAAAziB,SAAA,EACEN,EAAAA,EAAAA,MAAA,OACE8B,WAAWwf,EAAAA,EAAAA,GACTF,EAAQ2qD,mBACRS,GACAlsE,SAAA,EAEFC,EAAAA,EAAAA,KAAC2sE,GAAAA,EAAM,CACLzsE,GAAIksE,EACJ,aAAYrrE,EAAKI,UAAUC,UAC3BG,WAAWwf,EAAAA,EAAAA,GAAa,gBAAiBF,EAAQ6qD,cACjDzvC,SAAUqwC,EAAevsE,SAExBwrE,GAAiBx1D,KAAI,SAAA62D,GAAM,OAC1B5sE,EAAAA,EAAAA,KAAA,UAAAD,SAA0B6sE,EAAOzgE,MAApBygE,EAAO1gE,IAA2B,OAGnDlM,EAAAA,EAAAA,KAACumE,GAAAA,EAAK,CACJhlE,WAAWwf,EAAAA,EAAAA,GAAa,eAAgBF,EAAQ8qD,aAChDnF,YAAazlE,EAAKI,UAAUC,0BAC5BqlE,eAAezmE,EAAAA,EAAAA,KAAC0mE,GAAAA,IAAY,IAC5B7F,OAAQ0L,EACR/jD,UAAWA,QAGfxoB,EAAAA,EAAAA,KAAA,OAAK,YAAU,SAAQD,SACpBgsE,IACC/rE,EAAAA,EAAAA,KAAA,OACEuB,WAAWwf,EAAAA,EAAAA,GACT,gBACAF,EAAQ+qD,uBACRI,GACAjsE,SAEDorC,GACCpqC,EAAKI,UAAUC,yEAM7B,EAWAyqE,GAAgB5qD,aAAe,CAC7BkqB,aAAc,GACd6gC,sBAAuB,GACvBC,4BAA6B,ICzH/B,IAAM9qD,IAAYjB,EAAAA,EAAAA,GAAW,CAC3B2sD,iBAAkB,CAChBnuD,QAAS,OACTI,WAAY,UAEdioD,MAAO,CACLpnE,MAAO,SAETmtE,QAAS,CACPjjD,WAAY,OACZK,YAAa,OACb5J,SAAU,UAIDysD,GAAqB,SAACjrD,GACjC,IACE/gB,EACE+gB,EADF/gB,KAAMovD,EACJruC,EADIquC,UAAW6c,EACflrD,EADekrD,iBAAkBC,EACjCnrD,EADiCmrD,kBAAmBC,EACpDprD,EADoDorD,qBAElDrsD,EAAUM,KAEVgsD,GAAejoD,EAAAA,EAAAA,cAAY,SAAC68C,GAChC,IAAMqL,EAAoBrL,GAAMA,EAAGpyC,QAAUoyC,EAAGpyC,OAAOzZ,MACnDm3D,GAAeC,EAAAA,GAAAA,yBAAwBF,IAEtCG,EAAAA,GAAAA,aAAYF,KACfA,EAAY,WAAA5/D,OAAc4/D,IAE5BJ,EAAkBI,EACpB,GAAG,CAACJ,IAEEO,GAAkBtoD,EAAAA,EAAAA,cAAY,SAAC68C,GACpB,UAAXA,EAAG71D,KACLihE,EAAapL,EAEjB,GAAG,CAACoL,IAEEM,GAAkBvoD,EAAAA,EAAAA,cAAY,SAAC68C,GACnC,IAAM2L,EAAkB3L,GAAMA,EAAGpyC,QAAUoyC,EAAGpyC,OAAOzZ,MACrDg3D,EAAqBQ,EACvB,GAAG,CAACR,IAEES,GAAqBzoD,EAAAA,EAAAA,cAAY,SAAC68C,GACvB,UAAXA,EAAG71D,KACLuhE,EAAgB1L,EAEpB,GAAG,CAAC0L,IAEJ,OACEhuE,EAAAA,EAAAA,MAAA,OAAK8B,UAAWsf,EAAQgsD,iBAAiB9sE,SAAA,EACvCC,EAAAA,EAAAA,KAACumE,GAAAA,EAAK,CAAChlE,UAAW4xB,IAAW,YAAatS,EAAQkmD,OAAQ6G,aAAcZ,EAAkBxG,YAAazlE,EAAKI,UAAUC,0BAAiCqlE,eAAezmE,EAAAA,EAAAA,KAAC0mE,GAAAA,IAAY,IAAKr7C,SAAU8kC,EAAW0Q,OAAQsM,EAAc3kD,UAAWglD,KAC9OxtE,EAAAA,EAAAA,KAAA,OAAKuB,UAAWsf,EAAQisD,QAAQ/sE,SAAC,OAGjCC,EAAAA,EAAAA,KAACumE,GAAAA,EAAK,CAAChlE,UAAW4xB,IAAW,kBAAmBtS,EAAQkmD,OAAQP,YAAazlE,EAAKI,UAAUC,wBAA+BiqB,SAAU8kC,EAAW0Q,OAAQ4M,EAAiBjlD,UAAWmlD,MAG1L,E,aCpDME,GAAoB,kEAEpB1sD,IAAYjB,EAAAA,EAAAA,GAAW,CAC3B2mD,eAAgB,CACdltC,WAAY,SAYHm0C,GAA2B,SAAChsD,GACvC,IACEzJ,EACEyJ,EADFzJ,IAAK+uD,EACHtlD,EADGslD,IAAKC,EACRvlD,EADQulD,YAAatmE,EACrB+gB,EADqB/gB,KAAMumE,EAC3BxlD,EAD2BwlD,kBAAmBjlD,EAC9CP,EAD8CO,eAElDhL,GAAkCC,EAAAA,EAAAA,UAAS,IAAGC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAAvC02D,EAASx2D,EAAA,GAAEy2D,EAAYz2D,EAAA,GAC9BsgC,GAAkCvgC,EAAAA,EAAAA,UAAS,IAAGwgC,GAAAtgC,EAAAA,GAAAA,GAAAqgC,EAAA,GAAvCo2B,EAASn2B,EAAA,GAAEo2B,EAAYp2B,EAAA,GAC9BijB,GAA8CzjD,EAAAA,EAAAA,WAAS,GAAM0jD,GAAAxjD,EAAAA,GAAAA,GAAAujD,EAAA,GAAtDgR,EAAe/Q,EAAA,GAAEmT,EAAkBnT,EAAA,GACpCn6C,EAAUM,KAEhBitD,EChC8B,SAAHttE,GAEtB,IADLsmE,EAAGtmE,EAAHsmE,IAAK/uD,EAAGvX,EAAHuX,IAAKgvD,EAAWvmE,EAAXumE,YAAaC,EAAiBxmE,EAAjBwmE,kBAEvBjwD,GAA4BC,EAAAA,EAAAA,UAAS,IAAGC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAAjCgvC,EAAM9uC,EAAA,GAAE+uC,EAAS/uC,EAAA,GACxBsgC,GAAoCvgC,EAAAA,EAAAA,UAAS,GAAEwgC,GAAAtgC,EAAAA,GAAAA,GAAAqgC,EAAA,GAAxC0L,EAAUzL,EAAA,GAAE4vB,EAAa5vB,EAAA,GAChCijB,GAAmDzjD,EAAAA,EAAAA,WAAS,GAAM0jD,GAAAxjD,EAAAA,GAAAA,GAAAujD,EAAA,GAA3DsT,EAAiBrT,EAAA,GAAEyM,EAAqBzM,EAAA,GAC/CG,GAAkC7jD,EAAAA,EAAAA,WAAS,GAAM8jD,GAAA5jD,EAAAA,GAAAA,GAAA2jD,EAAA,GAA1ChL,EAASiL,EAAA,GAAEkT,EAAYlT,EAAA,GACxBmT,GAAajsD,EAAAA,EAAAA,QAAO,GACpBqlD,GAAiBrlD,EAAAA,EAAAA,QAAO,IAExBksD,GAAmBzqD,EAAAA,EAAAA,UAAQ,kBAAM,IAAI0qD,GAAAA,GAAiB,CAC1DrH,IAAAA,EACA/uD,IAAAA,EACAgvD,YAAAA,EACAzrD,OAAQ,CACN8yD,MAAOniE,IAAAA,KACPoiE,YAAapiE,IAAAA,KACbqiE,WAAYriE,IAAAA,MAEdsiE,oBAAqBtiE,IAAAA,MACrB,GAAE,CAAC66D,EAAK/uD,EAAKgvD,IAETyH,GAAgB5pD,EAAAA,EAAAA,cAAY,SAAC6pD,GACjCR,EAAWj/C,QAAUy/C,CACvB,GAAG,IAEGC,GAA4B9pD,EAAAA,EAAAA,cAAY,SAAAlP,GAIvC,IAHLi5D,EAAcj5D,EAAdi5D,eACAC,EAAWl5D,EAAXk5D,YACAC,EAAOn5D,EAAPm5D,QAEMC,EAAoB,CACxBzvE,MAAO4H,GAAAA,GAAS,GAChB3H,OAAQ2H,GAAAA,GAAS,IAEnB,OAAgB,IAAZ4nE,EAEK,IAAIrvC,SAAQ,SAACC,GAClByuC,EAAiBa,uBAAuBtvC,GACxCyuC,EAAiBQ,0BAA0B,CACzCC,eAAAA,EACAK,6BAA8BJ,EAC9BE,kBAAAA,EACAb,WAAYY,GAEhB,IAEKX,EAAiBe,8BAA8B,CACpDN,eAAAA,EACAV,WAAYY,EACZG,6BAA8BJ,EAC9BE,kBAAAA,GAEJ,GAAG,CAACZ,IAEEnG,GACJnjD,EAAAA,EAAAA,cAAY,SAAA7I,GAAiC,IAADmzD,EAAAnzD,EAA7B9H,IAAAA,OAAG,IAAAi7D,EAAG,GAAEA,EAAAC,EAAApzD,EAAEqzD,QAAAA,OAAO,IAAAD,EAAG,GAAEA,EAC/Bl7D,IACyB,IAAvBg6D,EAAWj/C,UACbq4C,EAAer4C,QAAU,GACzBg4C,EAAkBK,EAAer4C,SACjCm4C,GAAsB,IAExB6G,GAAa,GACbU,EAA0B,CACxBC,eAAgB16D,EAChB26D,cAAeQ,EACfP,QAASZ,EAAWj/C,UACnB8U,MAAK,SAACvrB,GACP,IAAQ8iB,EAAe9iB,EAAK82D,YAApBh0C,WACR+rC,EAAc/rC,GACd2qB,GAAU,SAAA4iB,GAAU,SAAAz7D,QAAAkI,EAAAA,GAAAA,GACd44D,EAAWj/C,QAAU,EAAI45C,EAAa,KAAEvzD,EAAAA,GAAAA,GACzCpJ,IAAAA,IAAMsM,EAAK+2D,QAAQ,SAAC/7D,GAMrB,MALc,CACZU,IAAKV,EAAKg8D,cAAgBh8D,EAAKi8D,SAC/B5vE,GAAI2T,EAAKi8D,SAIb,KAAE,IAGuB,IAAvBvB,EAAWj/C,SACbm4C,GAAsB,GAGxB6G,GAAa,EACf,IAAG9oC,OAAM,WACoB,IAAvB+oC,EAAWj/C,SACbm4C,GAAsB,GAGxB6G,GAAa,EACf,IAEJ,GAAG,CAACU,EAA2B1H,IAE3BnxC,GAAejR,EAAAA,EAAAA,cAAY,SAACpD,GAChCysD,EAAWj/C,SAAW,EACtB+4C,EAAWvmD,EACb,GAAG,CAACumD,IAEElL,GAAgBj4C,EAAAA,EAAAA,cAAY,SAACogC,GACjC,IAAM+jB,EAAuB1B,EAAer4C,QAAQra,OAC9Cq0D,EAAkB3B,EAAer4C,QAAQrU,QAAO,SAAA0b,GAAK,OAAAA,EAAFz2B,KAAgBolD,CAAO,IAEhF,GAAIgkB,EAAgBr0D,SAAWo0D,EAAsB,CACnD,IAAME,EAAeljB,EAAOmjB,MAAK,SAAAvrD,GAAK,OAAAA,EAAF/d,KAAgBolD,CAAO,IAC3DqiB,EAAer4C,QAAQ9hB,KAAK+7D,EAC9B,MACE5B,EAAer4C,QAAUg6C,EAE3BhC,GAAiB3xD,EAAAA,GAAAA,GAAKgyD,EAAer4C,SACvC,GAAG,CAAC+2B,EAAQihB,IAEZ,MAAO,CACLjhB,OAAAA,EACA9C,WAAAA,EACA8qB,kBAAAA,EACAle,UAAAA,EACA7J,UAAAA,EACAnwB,aAAAA,EACAkyC,WAAAA,EACAyG,cAAAA,EACA3R,cAAAA,EAEJ,CDrFM4S,CAAiB,CACnB13D,IAAAA,EAAK+uD,IAAAA,EAAKC,YAAAA,EAAaC,kBAAAA,IAVvBwH,EAAaV,EAAbU,cACA34C,EAAYi4C,EAAZj4C,aACAkyC,EAAU+F,EAAV/F,WACAhiB,EAAM+nB,EAAN/nB,OACA9C,EAAU6qB,EAAV7qB,WACA8qB,EAAiBD,EAAjBC,kBACAle,EAASie,EAATje,UACA7J,EAAS8nB,EAAT9nB,UACA6W,EAAaiR,EAAbjR,cAKI3oD,GAAWuP,EAAAA,EAAAA,UAAQ,oBAAAtW,OAASsgE,EAAS,KAAAtgE,OAAIwgE,EAAS,GAAI,CAACF,EAAWE,IAClE+B,GAAajsD,EAAAA,EAAAA,UAAQ,kBAAOvP,KAAa8xD,EAAAA,GAAAA,YAAW9xD,EAAS,GAAE,CAACA,IAEhEy7D,GAAiBlsD,EAAAA,EAAAA,UAAQ,WAC7B,OAAIvP,GACK84D,EAAAA,GAAAA,yBAAwB94D,GAE1B,EACT,GAAG,CAACA,IAEEs3D,GAAiB5mD,EAAAA,EAAAA,cAAY,SAACmoD,GAClCW,EAAaX,IACT/G,EAAAA,GAAAA,YAAW+G,IACbc,GAAmB,GACnBW,EAAc,GACdxoB,EAAU,IACV+hB,EAAW,CAAE9zD,IAAI,GAAD9G,OAAK4/D,EAAY,KAAA5/D,OAAIwgE,GAAayB,QAASzB,KAE3DE,GAAmB,EAEvB,GAAG,CAAC9F,EAAY/hB,EAAWwoB,EAAeb,IAEpCiC,GAAoBhrD,EAAAA,EAAAA,cAAY,SAACwoD,GACrC,IAAKnhE,IAAAA,OAASmhE,KAAqBnhE,IAAAA,YAAcmhE,GAAkB,CACjE,IAAMyC,EAvDS,SAAC57D,GACpB,IAAM67D,EAAc77D,EAAI63B,OAAOD,MAAM0hC,IACrC,OAAIuC,GAAeA,EAAYn7D,OAAS,EAC/Bm7D,EAAY,GAEd77D,CACT,CAiDuB87D,CAAa3C,GACxB4C,EAAY,GAAA7iE,OAAMwiE,EAAc,KAAAxiE,OAAI0iE,GACtCG,IAAiB97D,IACnB05D,EAAaiC,GACbrB,EAAc,GACdxoB,EAAU,IACV+hB,EAAW,CAAE9zD,IAAK+7D,EAAcZ,QAASS,IAE7C,CACF,GAAG,CAAC37D,EAAUy7D,EAAgB5H,EAAY/hB,EAAWwoB,IAE/C1gB,GAAelpC,EAAAA,EAAAA,cAAY,WAC/BiR,EAAa,CAAE5hB,IAAKC,EAAUk7D,QAASzB,GACzC,GAAG,CAACz5D,EAAU2hB,EAAc83C,IAS5B,OAPAt2D,EAAAA,EAAAA,YAAU,WACJq4D,IACFhC,EAAa,IACbE,EAAa,IAEjB,GAAG,CAAC8B,KAGFvwE,EAAAA,EAAAA,MAAA,OAAK8B,UAAW4xB,IAAW,4BAA6BtS,EAAQgmD,gBAAgB9mE,SAAA,CAE5EiwE,GACEhwE,EAAAA,EAAAA,KAAC6rE,GAAe,CAACE,gBAAiBA,EAAiBhrE,KAAMA,EAAM+qE,eAAgBA,KAC/E9rE,EAAAA,EAAAA,KAAC+sE,GAAkB,CAACC,iBAAkBe,EAAWhtE,KAAMA,EAAMovD,UAAWA,EAAW8c,kBAAmBnB,EAAgBoB,qBAAsBgD,KAG7IF,IAAe7f,GAA+B,IAAlB9J,EAAOpxC,SACpCxV,EAAAA,EAAAA,MAAA,OAAK8B,UAAU,mBAAmB6pC,MAAO,CAAE7T,UAAW,QAASx3B,SAAA,EAC7DC,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,iBACfvB,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,oBAAmBxB,SAC/BgB,EAAKI,UAAUC,6CAKnB4uE,IACCvwE,EAAAA,EAAAA,MAAA+iB,EAAAA,SAAA,CAAAziB,SAAA,CACIsuE,IAAsBhoB,EAAOpxC,SAAUjV,EAAAA,EAAAA,KAAC2jB,EAAgB,CAACC,eAAa,EAACC,YAAa,CAAE0T,UAAW,YAChG8uB,EAAOpxC,SACRjV,EAAAA,EAAAA,KAACy9D,GAAc,CACb18D,KAAMA,EACNo8D,cAAeA,EACf96C,eAAgBA,EAChBw7C,cAAe1N,EACfvB,YAAa,CACXr4C,OAAQ8vC,EACRgF,gBAAiB9H,EACjB6K,aAAAA,UASlB,EAEA0f,GAAyBrE,UAAY,CACnCpxD,IAAKqsC,KAAAA,OAAiBp1C,WACtB83D,IAAK1iB,KAAAA,OAAiBp1C,WACtB+3D,YAAa3iB,KAAAA,MAAgB,CAAC,GAAGp1C,WACjCvO,KAAM2jD,KAAAA,MAAgB,CACpBvjD,UAAWujD,KAAAA,OACVp1C,WACHg4D,kBAAmB5iB,KAAAA,KAAep1C,Y,+JErH9BihE,GAAoB,SAAHzvE,GAGhB,IAFL0vE,EAAa1vE,EAAb0vE,cACAC,EAAW3vE,EAAX2vE,YAEAC,GAA8CC,EAAAA,GAAAA,KAAtC5uD,EAAG2uD,EAAH3uD,IAAK6uD,EAAaF,EAAbE,cAAeC,EAAaH,EAAbG,cAGtBC,GAAqB/sD,EAAAA,EAAAA,UAAQ,kBAChCysD,EAAgBA,EAAcv7D,OAAS47D,EAAgBA,CAAa,GAClE,CAACL,EAAeK,IAErB,OAAKD,GAAiBJ,GAA0C,IAAzBA,EAAcv7D,OAC5C,MAIPxV,EAAAA,EAAAA,MAACsxE,GAAAA,EAAI,CAAAhxE,SAAA,EACHC,EAAAA,EAAAA,KAACgxE,GAAAA,EAAW,CAACC,0BAAwB,EAAAlxE,UACnCC,EAAAA,EAAAA,KAAC8gB,EAAAA,EAAM,CACL5gB,GAAG,OACH+iB,WAAW,SACXlB,IAAKA,EACLnT,MAAM5O,EAAAA,EAAAA,KAACkxE,GAAAA,IAAqB,IAC5B,gBAAAzjE,OAAeqjE,EAAkB,eACjCjmD,KAAK,cAGT7qB,EAAAA,EAAAA,KAACmxE,GAAAA,EAAW,CAAApxE,UACVC,EAAAA,EAAAA,KAACoxE,GAAAA,EAAQ,CAAArxE,SAELywE,GAAiBA,EAAcz6D,KAAI,SAAAlC,GAAI,OACrC7T,EAAAA,EAAAA,KAACqxE,GAAAA,EAAQ,CAAgBr2D,QAAS,WAAF,OAAQy1D,EAAY58D,EAAK,EAAC9T,SAAE8T,EAAK1H,MAAlD0H,EAAK3H,IAA6D,UAO/F,EAEaolE,GAAsB,SAAHt7D,GAMzB,IALL0d,EAAK1d,EAAL0d,MACA+8C,EAAWz6D,EAAXy6D,YACAc,EAAiBv7D,EAAjBu7D,kBACAC,EAAex7D,EAAfw7D,gBACAC,EAAez7D,EAAfy7D,gBAEAC,GAIIC,EAAAA,GAAAA,GAAyB,CAC3Bj+C,MAAAA,EACA69C,kBAAAA,IALAK,EAAmBF,EAAnBE,oBACApB,EAAakB,EAAblB,cACAqB,EAAiBH,EAAjBG,kBAMIC,GAAY/tD,EAAAA,EAAAA,UAAQ,kBAAM2P,EAAMze,OAAS,CAAC,GAAE,CAACye,IAE7CQ,GAAahP,EAAAA,EAAAA,cAAY,SAACuK,EAAOsiD,EAAY/2D,GAAO,OACxDvb,EAAAA,EAAAA,MAAColB,EAAAA,SAAc,CAAA9kB,SAAA,EACZiyE,EAAAA,GAAAA,IAA+BviD,EAAMtjB,KAAMqlE,IAC1CxxE,EAAAA,EAAAA,KAACiyE,GAAAA,EAAc,CAAAlyE,UACbC,EAAAA,EAAAA,KAAC44B,GAAAA,EAAO,CAACE,WAAS,EAACH,QAASlJ,EAAMtjB,KAAM0sB,aAAa,QAAO94B,UAC1DC,EAAAA,EAAAA,KAACkyE,GAAAA,EAAgB,CACf5iD,QAASyiD,EACT/2D,QAAS,WAAF,OAAQA,EAAQyU,EAAM,EAC7BluB,WAAWwf,EAAAA,EAAAA,GAAa0wD,EAAgBU,iBAAkBJ,GAAcN,EAAgBW,yBAAyBryE,UAEhHsyE,EAAAA,GAAAA,IAA2B5iD,EAAMtjB,KAAMqlE,UAK5CxxE,EAAAA,EAAAA,KAACiyE,GAAAA,EAAc,CAAAlyE,UACbC,EAAAA,EAAAA,KAACkyE,GAAAA,EAAgB,CACf5iD,QAASyiD,EACT/2D,QAAS,WAAF,OAAQA,EAAQyU,EAAM,EAC7BluB,WAAWwf,EAAAA,EAAAA,GAAa0wD,EAAgBU,iBAAkBJ,GAAcN,EAAgBW,yBAAyBryE,SACjH0vB,EAAMtjB,UAKZ4lE,IAAc/xE,EAAAA,EAAAA,KAACsyE,GAAAA,EAAiB,MAAG,QAAA7kE,OAxBVgiB,EAAMvjB,KAyBlB,GAChB,CAACulE,EAAiBD,IAErB,OACE/xE,EAAAA,EAAAA,MAAC8yE,GAAAA,EAAU,CAAAxyE,SAAA,CAEP6xE,GAAuBA,EAAoB77D,KAAI,SAAClC,EAAMkgB,GAAK,OAAKG,EAAWrgB,EAAMkgB,IAAU+9C,EAAWrB,EAAY,IAGlHD,IACExwE,EAAAA,EAAAA,KAACuwE,GAAiB,CAChBC,cAAeA,EACfC,YAAaA,IAIjBoB,GAAqBA,EAAkB97D,KAAI,SAAClC,EAAMkgB,GAChD,IAAMg+C,EAAah+C,GAASL,EAAMze,OAAS48D,EAAkB58D,UAAY68D,EACzE,OAAO59C,EAAWrgB,EAAMk+D,EAAYtB,EACtC,MAIR,EAgBAa,GAAoBrwD,aAAe,CACjCswD,kBA/H+B,EAgI/BC,gBA/H6B,GAgI7BC,gBAAiB,CAAC,G,0CCtJPe,IAA2BtyD,EAAAA,EAAAA,GAAW,CACjDuyD,eAAa3+D,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACX4K,QAAS,OACT0K,cAAe,MACf8P,SAAU,OACVra,eAAgB,SAChBC,WAAY,UACTH,EAAAA,GAAWI,IAAI,QACfJ,EAAAA,GAAWC,QAAQ,MAAO,IAAK,IAAK,MAAI,IAC3Cjf,MAAO,QAEP,YAAa,CACXA,MAAO,WAGX+yE,WAAS5+D,EAAAA,EAAAA,GAAA,CACP4K,QAAS,OACT0K,cAAe,SACftK,WAAY,UACTH,EAAAA,GAAWI,IAAI,QAEpB4zD,UAAW,CACThzE,MAAO,QACPC,OAAQ,SAEVgzE,UAAQ9+D,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACN2L,WAAY,WACZC,UAAW,SACXC,UAAW,UACRhB,EAAAA,GAAWW,SAAS,WAAS,IAChCO,aAAc,WACdC,WAAY,SACZO,MAAO2J,GAAAA,EAAO6oD,sBACdtyD,WAAY,OACZC,WAAY,QC5BHsyD,GAAmB,SAAHhyE,GAWtB,IAVLC,EAAID,EAAJC,KACAgyE,EAAajyE,EAAbiyE,cACAC,EAAclyE,EAAdkyE,eACAn5D,EAAY/Y,EAAZ+Y,aACAJ,EAAa3Y,EAAb2Y,cACAE,EAAa7Y,EAAb6Y,cACAM,EAAcnZ,EAAdmZ,eACAF,EAAajZ,EAAbiZ,cACAk5D,EAAiBnyE,EAAjBmyE,kBACA14D,EAAyBzZ,EAAzByZ,0BAEMO,GAAWzB,EAAAA,GAAAA,IAAiB,CAChCtY,KAAAA,EACA0Y,cAAAA,EACAE,cAAAA,EACAE,aAAAA,EACAI,eAAAA,EACAF,cAAAA,EACAQ,0BAAAA,IAGIsG,EAAU2xD,KAEZU,EAAMnyE,EAAKI,UAAUC,kFAOzB,OANI4xE,EACFE,EAAMnyE,EAAKI,UAAUC,kDACZ2xE,IACTG,EAAMnyE,EAAKI,UAAUC,iGAIrB3B,EAAAA,EAAAA,MAAA,OAAK8B,WAAWwf,EAAAA,EAAAA,GAAa,iBAAkBF,EAAQ6xD,WAAW3yE,SAAA,EAChEC,EAAAA,EAAAA,KAAA,OAAKuB,WAAWwf,EAAAA,EAAAA,GAAa,aAAcF,EAAQ8xD,WAAW5yE,UAC5DC,EAAAA,EAAAA,KAAA,OAAKgB,IAAKsB,EAAAA,GAAeE,oBAAqBtB,IAAI,kBAEpDlB,EAAAA,EAAAA,KAAA,OAAKuB,WAAWwf,EAAAA,EAAAA,GAAa,YAAaF,EAAQ+xD,UAAU7yE,SACzDmzE,KAGAD,IACDjzE,EAAAA,EAAAA,KAAA,OAAKuB,WAAWwf,EAAAA,EAAAA,GAAa,iBAAkBF,EAAQ4xD,eAAe1yE,SACnE+a,EAAS/E,KAAI,SAAAmF,GAAI,OAChBlb,EAAAA,EAAAA,KAACkhB,EAAiB,CAEhBhhB,GAAIgb,EAAKhP,IACTmI,YAAa6G,EAAK7G,YAClB5I,MAAOyP,EAAKzP,MACZ4K,SAAU6E,EAAKH,MACfC,QAASE,EAAKF,SALTE,EAAKhP,IAMV,QAMd,EAiBA4mE,GAAiB7xD,aAAe,CAC9B8xD,eAAe,EACfC,gBAAgB,EAChBC,mBAAmB,EACnB14D,2BAA2B,G,+FCpEvB44D,GAA8B,SAACrxD,GACnC,IACE/gB,EAGE+gB,EAHF/gB,KACAqyE,EAEEtxD,EAFFsxD,cACAC,EACEvxD,EADFuxD,cAGF,OACE5zE,EAAAA,EAAAA,MAACsxE,GAAAA,EAAI,CAAAhxE,SAAA,EACHC,EAAAA,EAAAA,KAACgxE,GAAAA,EAAW,CAACC,0BAAwB,EAAAlxE,UACnCC,EAAAA,EAAAA,KAACqxE,GAAAA,EAAQ,CAAC9vE,UAAU,mBAAmBqN,MAAM5O,EAAAA,EAAAA,KAACszE,GAAAA,IAAsB,IAAIvzE,SACrEgB,EAAKI,UAAUC,gCAIpBpB,EAAAA,EAAAA,KAACmxE,GAAAA,EAAW,CAAApxE,UACVN,EAAAA,EAAAA,MAAC2xE,GAAAA,EAAQ,CAAC7vE,UAAU,sBAAqBxB,SAAA,EACvCC,EAAAA,EAAAA,KAACqxE,GAAAA,EAAQ,CAAC9vE,UAAU,mBAAmByZ,QAASo4D,EAAcrzE,SAC3DgB,EAAKI,UAAUC,gBAElBpB,EAAAA,EAAAA,KAACqxE,GAAAA,EAAQ,CAAC9vE,UAAU,mBAAmByZ,QAASq4D,EAActzE,SAC3DgB,EAAKI,UAAUC,sBAM5B,EAEMmyE,GAA4B,SAACzxD,GACjC,IACE/gB,EAGE+gB,EAHF/gB,KACAyyE,EAEE1xD,EAFF0xD,kBACAC,EACE3xD,EADF2xD,oBAGF,OACEh0E,EAAAA,EAAAA,MAACsxE,GAAAA,EAAI,CAAAhxE,SAAA,EACHC,EAAAA,EAAAA,KAACgxE,GAAAA,EAAW,CAACC,0BAAwB,EAAAlxE,UACnCC,EAAAA,EAAAA,KAACqxE,GAAAA,EAAQ,CAAC9vE,UAAU,gBAAgBqN,MAAM5O,EAAAA,EAAAA,KAAC0zE,GAAAA,IAAoB,IAAI3zE,SAChEgB,EAAKI,UAAUC,6BAIpBpB,EAAAA,EAAAA,KAACmxE,GAAAA,EAAW,CAAApxE,UACVN,EAAAA,EAAAA,MAAC2xE,GAAAA,EAAQ,CAAC7vE,UAAU,mBAAkBxB,SAAA,EACpCC,EAAAA,EAAAA,KAACqxE,GAAAA,EAAQ,CAAC9vE,UAAU,qBAAqByZ,QAASw4D,EAAkBzzE,SACjEgB,EAAKI,UAAUC,kBAElBpB,EAAAA,EAAAA,KAACqxE,GAAAA,EAAQ,CAAC9vE,UAAU,uBAAuByZ,QAASy4D,EAAoB1zE,SACrEgB,EAAKI,UAAUC,0BAM5B,EAEauyE,GAAc,SAAC7xD,GAC1B,IACE/gB,EAUE+gB,EAVF/gB,KACAQ,EASEugB,EATFvgB,UACAqa,EAQEkG,EARFlG,OACAg4D,EAOE9xD,EAPF8xD,uBACAC,EAME/xD,EANF+xD,yBACAC,EAKEhyD,EALFgyD,mBACAC,EAIEjyD,EAJFiyD,mBACAC,EAGElyD,EAHFkyD,kBACAC,EAEEnyD,EAFFmyD,oBACAC,EACEpyD,EADFoyD,YAGIV,GAAoBtuD,EAAAA,EAAAA,cAAY,WACpCtJ,EAAOi2B,SAAS,uCAChB+hC,IACIM,GACFA,GAEJ,GAAG,CAACA,EAAat4D,EAAQg4D,IAEnBH,GAAsBvuD,EAAAA,EAAAA,cAAY,WACtCtJ,EAAOi2B,SAAS,yCAChBgiC,IACIK,GACFA,GAEJ,GAAG,CAACA,EAAat4D,EAAQi4D,IAEnBT,GAAgBluD,EAAAA,EAAAA,cAAY,WAChCtJ,EAAOi2B,SAAS,wCAChBiiC,IACII,GACFA,GAEJ,GAAG,CAACA,EAAat4D,EAAQk4D,IAEnBT,GAAgBnuD,EAAAA,EAAAA,cAAY,WAChCtJ,EAAOi2B,SAAS,wCAChBkiC,IACIG,GACFA,GAEJ,GAAG,CAACA,EAAat4D,EAAQm4D,IAEnBI,GAAejvD,EAAAA,EAAAA,cAAY,WAC/BtJ,EAAOi2B,SAAS,0CAChBmiC,IACIE,GACFA,GAEJ,GAAG,CAACA,EAAat4D,EAAQo4D,IAEnBI,GAAiBlvD,EAAAA,EAAAA,cAAY,WACjCtJ,EAAOi2B,SAAS,4BAChBoiC,IACIC,GACFA,GAEJ,GAAG,CAACA,EAAat4D,EAAQq4D,IAEzB,OACEj0E,EAAAA,EAAAA,KAAA,OAAKuB,UAAWA,EAAUxB,UACxBN,EAAAA,EAAAA,MAACsxE,GAAAA,EAAI,CAAAhxE,SAAA,EACHC,EAAAA,EAAAA,KAACgxE,GAAAA,EAAW,CAACC,0BAAwB,EAAAlxE,UACnCC,EAAAA,EAAAA,KAACq0E,GAAAA,EAAU,CAAC9yE,UAAU,kBAAkB0hB,WAAW,UAAUrU,MAAM5O,EAAAA,EAAAA,KAACghB,EAAAA,IAAY,IAAIjhB,SACjFgB,EAAKI,UAAUC,YAIpBpB,EAAAA,EAAAA,KAACmxE,GAAAA,EAAW,CAAApxE,UACVN,EAAAA,EAAAA,MAAC2xE,GAAAA,EAAQ,CAAC7vE,UAAU,gBAAexB,SAAA,EACjCC,EAAAA,EAAAA,KAACqxE,GAAAA,EAAQ,CAAC9vE,UAAU,yBAAyBqN,MAAM5O,EAAAA,EAAAA,KAACR,EAAAA,GAAa,IAAKwb,QAASm5D,EAAap0E,SACzFgB,EAAKI,UAAUC,sBAElBpB,EAAAA,EAAAA,KAACs0E,GAAAA,EAAW,KACZt0E,EAAAA,EAAAA,KAACuzE,GAAyB,CACxBxyE,KAAMA,EACNyyE,kBAAmBA,EACnBC,oBAAqBA,KAEvBzzE,EAAAA,EAAAA,KAACmzE,GAA2B,CAC1BpyE,KAAMA,EACNqyE,cAAeA,EACfC,cAAeA,KAEjBrzE,EAAAA,EAAAA,KAACqxE,GAAAA,EAAQ,CAAC9vE,UAAU,uBAAuBqN,MAAM5O,EAAAA,EAAAA,KAACu0E,GAAAA,IAAkB,IAAKv5D,QAASo5D,EAAer0E,SAC9FgB,EAAKI,UAAUC,4BAO9B,ECrJM+f,IAAYjB,EAAAA,EAAAA,GAAW,CAC3Bs0D,aAAW1gE,EAAAA,EAAAA,GAAA,CACTyL,SAAU,SACPZ,EAAAA,GAAWC,QAAQ,QAExB61D,WAAY,CAGVx1D,gBAAiB,cACjB,0BAA2B,CACzBA,gBAAiB,YAGrBy1D,qBAAsB,CACpB,2BAA4B,CAC1Bl0D,WAAY,UAGhBm0D,mBAAoB,CAClBvqD,MAAO,QACP/J,MAAO2J,GAAAA,EAAO4qD,mCAEhBC,oBAAqB,CACnBzqD,MAAO,QACP/J,MAAO2J,GAAAA,EAAO8qD,kCAIZC,IAAsB70D,EAAAA,EAAAA,GAAW,CACrCX,SAAU,CACRb,QAAS,OACT0K,cAAe,SACfS,WAAY,OACZK,YAAa,OACbwyC,SAAU,SAEZzmD,UAAW,CACTyI,QAAS,OACT0K,cAAe,SACfS,WAAY,OACZK,YAAa,OACboN,aAAc,MACdolC,SAAU,SAEZqK,MAAO,CACLntC,aAAc,MACdh6B,OAAQ,OACR2gB,WAAY,OACZoU,UAAW,SACXqgD,UAAW,UAEbC,aAAc,CACZh2D,gBAAiB+K,GAAAA,EAAOkrD,wBACxBt7C,aAAc,MACd4gC,YAAa,OAEf2a,aAAc,CACZ79C,aAAc,MACdC,UAAW,SAIF3rB,GAAkB,SAACkW,GAC9B,IACE/gB,EAOE+gB,EAPF/gB,KACAq0E,EAMEtzD,EANFszD,gBACAC,EAKEvzD,EALFuzD,iBACAp5C,EAIEna,EAJFma,SACAq5C,EAGExzD,EAHFwzD,WACAC,EAEEzzD,EAFFyzD,UAASC,EAEP1zD,EADF2zD,YAAAA,OAAW,IAAAD,GAAQA,EAGfE,GAAarJ,EAAAA,GAAAA,IAAM,YACnBsJ,GAAkBtJ,EAAAA,GAAAA,IAAM,mBACxBuJ,GAAcvJ,EAAAA,GAAAA,IAAM,aACpBwJ,GAAmBxJ,EAAAA,GAAAA,IAAM,oBACzBvgD,EAAgBipD,KAEhBl0D,EAAUM,KAChB9J,GAA4BC,EAAAA,EAAAA,UAASm+D,GAAYl+D,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAA1C4K,EAAM1K,EAAA,GAAEu+D,EAASv+D,EAAA,GACxBsgC,GAAkCvgC,EAAAA,EAAAA,UAASm+D,GAAY39B,GAAAtgC,EAAAA,GAAAA,GAAAqgC,EAAA,GAAhDk+B,EAASj+B,EAAA,GAAEk+B,EAAYl+B,EAAA,GAC9BijB,GAAgCzjD,EAAAA,EAAAA,UAAS,MAAK0jD,GAAAxjD,EAAAA,GAAAA,GAAAujD,EAAA,GAAvCkb,EAAQjb,EAAA,GAAEkb,EAAWlb,EAAA,GAGtBmb,GAAc7zD,EAAAA,EAAAA,QAAO,MACrB8zD,GAAe9zD,EAAAA,EAAAA,QAAO,MAE5B64C,GAAgC7jD,EAAAA,EAAAA,UAAS89D,GAAgBha,GAAA5jD,EAAAA,GAAAA,GAAA2jD,EAAA,GAAlD57C,EAAQ67C,EAAA,GAAEib,EAAWjb,EAAA,GAC5BK,GAAkCnkD,EAAAA,EAAAA,UAAS+9D,GAAiB3Z,GAAAlkD,EAAAA,GAAAA,GAAAikD,EAAA,GAArDxlD,EAASylD,EAAA,GAAE4a,EAAY5a,EAAA,GAExB6a,GAAsBrxD,EAAAA,EAAAA,cAAY,SAAAsxD,GAAM,OAAI,SAACxuD,EAAOmoD,GACxD,IAAMr3D,EAAM6sB,SAASwqC,EAAU,IAC3B5jE,IAAAA,QAAU4jE,IAAa5jE,IAAAA,MAAQuM,GACjC09D,EAAO,OAGJjqE,IAAAA,MAAQuM,IAAQA,GAAO,GAAKA,GAAO,KACtC09D,EAAO19D,EAEX,CAAC,GAAE,IAEG29D,GAAmB1yD,EAAAA,EAAAA,UACvB,kBAAMwyD,EAAoBF,EAAY,GACtC,CAACE,IAGGG,GAAoB3yD,EAAAA,EAAAA,UACxB,kBAAMwyD,EAAoBD,EAAa,GACvC,CAACC,IAGGI,GAAUzxD,EAAAA,EAAAA,cAAY,WAC1BmxD,EAAY,MACZC,EAAa,OACRjB,GAAoBD,IAEvBn5C,EAAS,CAAE26C,aAAc,KAAMC,YAAa,OAE1CtB,GACFA,GAEJ,GAAG,CAACF,EAAkBD,EAAiBn5C,EAAUs5C,IAE3C9pE,GAAQsY,EAAAA,EAAAA,UAAQ,WACpB,OAAIxE,GAAYtJ,EACR,KAANxI,OAAY8R,EAAQ,SAAA9R,OAAQwI,EAAS,MAEnCsJ,EACI,GAAN9R,OAAU1M,EAAKI,UAAUC,SAAc,OAAAqM,OAAM8R,EAAQ,MAEnDtJ,EACI,GAANxI,OAAU1M,EAAKI,UAAUC,UAAe,OAAAqM,OAAMwI,EAAS,MAElD,EACT,GAAG,CAAClV,EAAMkV,EAAWsJ,IAEfu3D,GAAiB5xD,EAAAA,EAAAA,cAAY,SAAA6xD,GAAY,OAAI,SAAC/uD,GAChC,QAAdA,EAAM9b,MACJ6qE,EAAaznD,SACfynD,EAAaznD,QAAQ2oC,QAEnBjwC,EAAMC,iBAAmBD,EAAMC,kBAC/BD,EAAME,gBAAkBF,EAAME,iBAEtC,CAAC,GAAE,IAEG8uD,GAAkBjzD,EAAAA,EAAAA,UAAQ,kBAAM+yD,EAAeV,EAAa,GAAE,CAACU,IAC/DG,GAAmBlzD,EAAAA,EAAAA,UAAQ,kBAAM+yD,EAAeX,EAAY,GAAE,CAACW,IAE/DI,GAAoBhyD,EAAAA,EAAAA,cAAY,WAChCmwD,IAAqBp/D,GAAam/D,IAAoB71D,GACxD0c,EAAS,CAAE46C,YAAat3D,EAAUq3D,aAAc3gE,GAAaxK,EAEjE,GAAG,CAAC4pE,EAAkBD,EAAiBn/D,EAAWsJ,EAAU0c,EAAUxwB,IAEhE0rE,EAAQ,WACZrB,GAAU,GACVa,GACF,EAEMvZ,GAAar5C,EAAAA,EAAAA,UAAQ,kBAAMxE,GAAYtJ,CAAS,GAAE,CAACA,EAAWsJ,IAyCpE,OAnCA5H,EAAAA,EAAAA,YAAU,WACJ29D,GACF6B,GAGJ,GAAG,CAAC7B,KAEJ39D,EAAAA,EAAAA,YAAU,WACHsK,GACHi1D,GAEJ,GAAG,CAACj1D,EAAQi1D,KAEZv/D,EAAAA,EAAAA,YAAU,WACR,IAAIy/D,EASJ,OARIn1D,IACFm1D,EAAYpqD,YAAW,WACjBmpD,EAAY7mD,SACd6mD,EAAY7mD,QAAQ2oC,OAExB,GAAG,MAEL+d,EAAa/zD,GACN,WACL85C,aAAaqb,EACf,CACF,GAAG,CAACn1D,KAEJtK,EAAAA,EAAAA,YAAU,WACJs+D,GAEFA,EAASoB,gBAAgB,OAE7B,GAAG,CAACpB,KAGFx2E,EAAAA,EAAAA,MAAC2gE,GAAAA,EAAO,CAACkX,WAAS,EAAC50D,KAAMT,EAAQs1D,aAxCd,SAAC5+D,EAAGE,GACvBi9D,EAAUj9D,EAAK6J,KACjB,EAsC+DqW,YAAY,cAAah5B,SAAA,EACpFC,EAAAA,EAAAA,KAACsgE,GAAAA,EAAc,CAAC2Q,0BAAwB,EAAAlxE,UACtCC,EAAAA,EAAAA,KAACq0E,GAAAA,EAAU,CAACpxD,WAAW,SAAS1hB,UAAW67D,GAAar8C,EAAAA,EAAAA,GAAaF,EAAQ4zD,WAAY,sBAAuB1zD,EAAAA,EAAAA,GAAaF,EAAQ4zD,WAAY5zD,EAAQ6zD,qBAAsB,qBAAqB30E,SACjMq9D,EAAa3xD,EAAQ1K,EAAKI,UAAUC,oBAIzC3B,EAAAA,EAAAA,MAAC+gE,GAAAA,EAAc,CAACj/D,WAAWwf,EAAAA,EAAAA,GAAaF,EAAQ2zD,YAAa,mBAAmBz0E,SAAA,EAC9EN,EAAAA,EAAAA,MAAC2xE,GAAAA,EAAQ,CAACrvD,IAAKm0D,EAAYn2E,SAAA,EACzBN,EAAAA,EAAAA,MAAA,OAAK8B,UAAU,eAAcxB,SAAA,EAC3BN,EAAAA,EAAAA,MAAA,OAAK8B,WAAWwf,EAAAA,EAAAA,GAAa+K,EAAcvM,SAAU,aAAaxf,SAAA,EAChEC,EAAAA,EAAAA,KAACw3E,GAAAA,EAAK,CAACj2E,UAAWuqB,EAAcqpD,aAAcsC,QAAS/B,EAAW31E,SAAEgB,EAAKI,UAAUC,gBAIjF20E,IACA/1E,EAAAA,EAAAA,KAACumE,GAAAA,EAAK,CACJhlE,UAAWuqB,EAAci7C,MACzBhlD,IAAKo0D,EACLjgE,MAAOqJ,EAAWA,EAASm4D,WAAa,GACxCz7C,SAAU,SAAC8lC,EAAIlpD,GAAI,OAAK49D,EAAiB1U,EAAIlpD,EAAK3C,MAAM,EACxD++D,cACEj1E,EAAAA,EAAAA,KAAA,OAAKuB,UAAWuqB,EAAcmpD,aAAc/0E,GAAIy1E,EAAgB51E,SAC7DgB,EAAKI,UAAUC,QAGpB,qBAAAqM,OAAoBioE,EAAU,KAAAjoE,OAAIkoE,GAClCz1E,GAAIw1E,EACJltD,UAAWwuD,QAIjBv3E,EAAAA,EAAAA,MAAA,OAAK8B,WAAWwf,EAAAA,EAAAA,GAAa+K,EAAc7V,UAAW,cAAclW,SAAA,EAClEC,EAAAA,EAAAA,KAACw3E,GAAAA,EAAK,CAACj2E,UAAWuqB,EAAcqpD,aAAcsC,QAAS7B,EAAY71E,SAAEgB,EAAKI,UAAUC,iBAElF20E,IACA/1E,EAAAA,EAAAA,KAACumE,GAAAA,EAAK,CACJhlE,UAAWuqB,EAAci7C,MACzBhlD,IAAKq0D,EACLlgE,MAAOD,EAAYA,EAAUyhE,WAAa,GAC1Cz7C,SAAU,SAAC8lC,EAAIlpD,GAAI,OAAK69D,EAAkB3U,EAAIlpD,EAAK3C,MAAM,EACzD++D,cACEj1E,EAAAA,EAAAA,KAAA,OAAKuB,UAAWuqB,EAAcmpD,aAAc/0E,GAAI21E,EAAiB91E,SAC9DgB,EAAKI,UAAUC,QAGpBonB,UAAWyuD,EACX,qBAAAxpE,OAAoBmoE,EAAW,KAAAnoE,OAAIooE,GACnC31E,GAAI01E,WAKZ51E,EAAAA,EAAAA,KAACs0E,GAAAA,EAAW,QAEdt0E,EAAAA,EAAAA,KAAA,OAAAD,UACEC,EAAAA,EAAAA,KAAC8gB,EAAAA,EAAM,CACLvf,UAAW67D,GAAar8C,EAAAA,EAAAA,GAAa,eAAgBF,EAAQ8zD,oBAAsB9zD,EAAQg0D,oBAC3FxpD,UAAW+xC,EACXn6C,WAAW,cACXrU,MAAM5O,EAAAA,EAAAA,KAAC23E,EAAAA,IAAgB,IACvB38D,QAAS,WAAF,OAAQm8D,GAAO,EAACp3E,SAEtBgB,EAAKI,UAAUC,kBAM5B,E,gEC1RMw2E,GAAgC,SAAH92E,GAQ5B,IAPL+2E,EAAwB/2E,EAAxB+2E,yBAGAC,EAA2Bh3E,EAA3Bg3E,4BACAC,EAAiBj3E,EAAjBi3E,kBACAnqE,EAAQ9M,EAAR8M,SACA7M,EAAID,EAAJC,KAGMi3E,GAAuB11D,EAAAA,EAAAA,QAAOw1D,GAEpCzgE,GACIC,EAAAA,EAAAA,UAASugE,GAAyBtgE,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAD/B4gE,EAAiB1gE,EAAA,GAAE2gE,EAAoB3gE,EAAA,GAK9CsgC,GAAmDvgC,EAAAA,EAAAA,UAAS,IAAItJ,GAAAA,UAC9D6pE,EAAyBppE,IAAIR,KAC7B4pE,EAAyBppE,IAAIP,MAAQ,EACrC,KACA4pC,GAAAtgC,EAAAA,GAAAA,GAAAqgC,EAAA,GAJKsgC,EAAiBrgC,EAAA,GAAEsgC,EAAqBtgC,EAAA,GAOzCugC,GAAqBt0D,EAAAA,EAAAA,UACzB,kBAAM,IAAI/V,GAAAA,UAAUmqE,EAAkBlqE,KAAMkqE,EAAkBjqE,MAAQ,EAAG,GAAG,GAC5E,CAACiqE,IAGGpqE,GAAQgW,EAAAA,EAAAA,UAAQ,WACpB,IAAMlW,EAAW9M,EAAK+M,SAAS,CAAEF,SAAAA,IACjC,OAAO,IAAII,GAAAA,UAAUH,EAASI,KAAMJ,EAASK,MAAOL,EAASM,IAC/D,GAAG,CAACpN,EAAM6M,IAGJ0qE,GAAUv0D,EAAAA,EAAAA,UAAQ,kBAAMhW,EAAMM,KAAK,CAAEkqE,OAAQ,GAAI,GAAE,CAACxqE,IACpDyqE,EAAUzqE,EAGV0qE,GAAiB10D,EAAAA,EAAAA,UAAQ,iBAAM,CAACk0D,EAAkB,GAAE,CAACA,IAGrDS,GAA2BxzD,EAAAA,EAAAA,cAAY,SAACyzD,GAC5CP,EAAsBO,EACxB,GAAG,IAGGC,GAAyB1zD,EAAAA,EAAAA,cAAY,SAACyzD,GAC1CP,EAAsBO,EAAKtqE,KAAK,CAAEwqE,QAAS,IAC7C,GAAG,IAEGC,GAAe5zD,EAAAA,EAAAA,cAAY,SAAC6zD,GAChC,IAAA/iE,EAAqBiiE,GAAqB,CAAC,EAArCzpE,EAAKwH,EAALxH,MAAOC,EAAGuH,EAAHvH,IACTupE,EAAqB1oD,SACvB9gB,EAAQuqE,EACRtqE,EAAMA,EAAMsqE,EAAUtqE,EAAMsqE,GAE5BtqE,EAAMsqE,EAGNb,EADE1pE,EAAQC,EACW,CAAED,MAAOC,EAAKA,IAAKD,GAEnB,CAAEA,MAAAA,EAAOC,IAAAA,IAEhCupE,EAAqB1oD,SAAW0oD,EAAqB1oD,OACvD,GAAG,CAAC2oD,IAQJ,OANAtgE,EAAAA,EAAAA,YAAU,YACH0mB,GAAoB45C,EAAmBJ,IAA6BE,GACvEA,EAAkBE,EAEtB,GAAG,CAACF,EAAmBE,EAAmBJ,KAGxC73E,EAAAA,EAAAA,KAAA,OAAKuB,UAAWmjB,IAAW,4BAA4B3kB,UACrDC,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,oCAAmCxB,UAChDN,EAAAA,EAAAA,MAAA,OAAK8B,UAAU,wBAAuBxB,SAAA,EACpCC,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,gBAAexB,UAC5BC,EAAAA,EAAAA,KAACg5E,GAAAA,oBAAmB,CAClBV,QAASA,EACTE,QAASA,EACTzqE,MAAOA,EACP+qE,aAAcA,EACdL,eAAgBA,EAChBQ,cAAed,EACfe,eAAgBR,EAChBS,wBAAwB,EACxBp4E,KAAMA,OAGVf,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,aACfvB,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,iBAAgBxB,UAC7BC,EAAAA,EAAAA,KAACg5E,GAAAA,oBAAmB,CAClBV,QAASA,EACTE,QAASA,EACTzqE,MAAOA,EACP+qE,aAAcA,EACdL,eAAgBA,EAChBQ,cAAeZ,EACfa,eAAgBN,EAChBQ,uBAAuB,EACvBr4E,KAAMA,YAOpB,EAgBA62E,GAA8B32D,aAAe,CAC3C62D,6BAA6B,EAC7BC,uBAAmB7iE,GAGd,IAAMmkE,GAAwBzB,GCtG/B0B,IAAmBC,EAAAA,GAAAA,GAAWC,GAAAA,IAAsBC,GAAAA,KAEpDt4D,IAAYjB,EAAAA,EAAAA,GAAW,CAC3Bs0D,aAAW1gE,EAAAA,EAAAA,GAAA,CACTyL,SAAU,SACPZ,EAAAA,GAAWC,QAAQ,QAExB61D,WAAY,CAGVx1D,gBAAiB,cACjB,0BAA2B,CACzBA,gBAAiB,YAGrBy1D,qBAAsB,CACpB,2BAA4B,CAC1Bl0D,WAAY,UAGhBm0D,mBAAoB,CAClBvqD,MAAO,QACP/J,MAAO2J,GAAAA,EAAO4qD,mCAEhBC,oBAAqB,CACnBzqD,MAAO,QACP/J,MAAO2J,GAAAA,EAAO8qD,kCAIZC,IAAsB70D,EAAAA,EAAAA,GAAW,CACrCs0D,YAAa,CACX9X,SAAU,QACV,wCAAsC5oD,EAAAA,EAAAA,GAAA,CACpCuN,IAAK,kBACLuF,KAAM,kBACNC,MAAO,kBACPlnB,MAAO,kBACPC,OAAQ,kBACR46D,YAAa,OACb5gC,aAAc,OACdD,WAAY,OACZ/W,SAAU,WACV1D,UAAW,QACRP,EAAAA,GAAWQ,OAAO,MAAO,UAGhCtL,KAAM,CACJ,2BAA4B,CAC1B6K,QAAS,OACTkb,aAAc,QAGlBztB,KAAM,CACJob,SAAU,KAEZ3Y,KAAM,CACN,EACA8qE,UAAW,CACTh7D,QAAS,OACT0K,cAAe,SACfS,WAAY,OACZK,YAAa,OACbwyC,SAAU,SAEZid,QAAS,CACPj7D,QAAS,OACT0K,cAAe,SACfS,WAAY,OACZK,YAAa,OACboN,aAAc,MACdolC,SAAU,SAEZqK,MAAO,CACLntC,aAAc,MACdh6B,OAAQ,OACR2gB,WAAY,OACZoU,UAAW,SACXqgD,UAAW,UAEbC,aAAc,CACZr7C,aAAc,MACd4gC,YAAa,MACb,QAAS,CACP97C,QAAS,UAGby2D,aAAc,CACZ79C,aAAc,MACdC,UAAW,SAITqiD,GAAa,SAAC93D,GAClB,IACE/gB,EASE+gB,EATF/gB,KACA84E,EAQE/3D,EARF+3D,iBACAjsE,EAOEkU,EAPFlU,SACAksE,EAMEh4D,EANFg4D,gBACAC,EAKEj4D,EALFi4D,mBACAC,EAIEl4D,EAJFk4D,oBACAC,EAGEn4D,EAHFm4D,kBACAj0D,EAEElE,EAFFkE,KACAk0D,EACEp4D,EADFo4D,aAGIr5D,EAAUk0D,KACVoF,GAAc73D,EAAAA,EAAAA,QAAO,MACrB83D,GAAc/N,EAAAA,GAAAA,IAAM,aACpBgO,GAAmBhO,EAAAA,GAAAA,IAAM,oBACzBiO,GAAeh4D,EAAAA,EAAAA,QAAO,MACtBi4D,GAAYlO,EAAAA,GAAAA,IAAM,WAClBmO,GAAiBnO,EAAAA,GAAAA,IAAM,kBAC7Bh1D,GAAgDC,EAAAA,EAAAA,WAAS,GAAMC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAAxDojE,EAAgBljE,EAAA,GAAEmjE,EAAmBnjE,EAAA,GACtC0K,GAAS8B,EAAAA,EAAAA,UAAQ,kBAAM02D,GAAoBZ,CAAgB,GAAE,CAACY,EAAkBZ,IAOhF7B,GAAuB11D,EAAAA,EAAAA,SAAO,GAE9Bq4D,GAA4Bz1D,EAAAA,EAAAA,cAAY,SAAC01D,GAC7Cb,EAAmBa,EACrB,GAAG,CAACb,IAEEc,GAAyB31D,EAAAA,EAAAA,cAAY,WACzCw1D,GAAoB,GACpB1C,EAAqB1oD,SAAU,CACjC,GAAG,IAEGwrD,GAAuB51D,EAAAA,EAAAA,cAAY,WACvCw1D,GAAoB,GACpB1C,EAAqB1oD,SAAU,CACjC,GAAG,IAEGyrD,GAAiB71D,EAAAA,EAAAA,cAAY,SAAC8C,GACf,UAAfA,EAAMgwC,MACR6iB,IACA7yD,EAAME,kBACkB,YAAfF,EAAMgwC,MACXmiB,EAAY7qD,UACd6qD,EAAY7qD,QAAQ2oC,QACpBjwC,EAAME,iBAGZ,GAAG,CAAC2yD,IAEEG,GAAe91D,EAAAA,EAAAA,cAAY,SAAC8C,GACb,UAAfA,EAAMgwC,MACR8iB,IACA9yD,EAAME,kBACkB,YAAfF,EAAMgwC,MACXsiB,EAAahrD,UACfgrD,EAAahrD,QAAQ2oC,QACrBjwC,EAAME,iBAGZ,GAAG,CAAC4yD,IAEJ,OACEr7E,EAAAA,EAAAA,MAAA+iB,EAAAA,SAAA,CAAAziB,SAAA,EACEN,EAAAA,EAAAA,MAACsxE,GAAAA,EAAI,CAACruD,KAAMT,EAAQs1D,aAhDH,SAAC5+D,EAAGE,GACvB6hE,EAAoB7hE,EAAK6J,KAC3B,EA8CmD3iB,SAAA,EAC7CC,EAAAA,EAAAA,KAACgxE,GAAAA,EAAW,CAACC,0BAAwB,EAAAlxE,UACnCN,EAAAA,EAAAA,MAACw7E,GAAAA,EAAa,CAACl5D,IAAKo4D,EAAan0D,KAAMA,EAAM9P,MAAOgkE,EAAahuE,IAAKgvE,YAAU,EAAC35E,UAAWsf,EAAQhN,KAAK9T,SAAA,EACvGC,EAAAA,EAAAA,KAAA,QAAMuB,UAAWsf,EAAQ1U,KAAKpM,SAC3Bm6E,EAAa/tE,QAEhBnM,EAAAA,EAAAA,KAAA,QAAMuB,UAAWsf,EAAQjS,KAAK7O,UAC5BC,EAAAA,EAAAA,KAACs5E,GAAgB,YAKvBt5E,EAAAA,EAAAA,KAACmxE,GAAAA,EAAW,CAAC5vE,UAAWsf,EAAQ2zD,YAAYz0E,UAC1CC,EAAAA,EAAAA,KAACoxE,GAAAA,EAAQ,CAAArxE,UACPC,EAAAA,EAAAA,KAACq5E,GAAqB,CACpBt4E,KAAMA,EACN82E,yBAA0BiC,EAC1BhC,4BAA6BE,EAAqB1oD,QAClDyoD,kBAAmB4C,EACnB/sE,SAAUA,WAKjBisE,IACCp6E,EAAAA,EAAAA,MAAA,OAAK8B,UAAU,oBAAmBxB,SAAA,EAChCN,EAAAA,EAAAA,MAAA,OAAK8B,UAAWsf,EAAQ64D,UAAU35E,SAAA,EAChCC,EAAAA,EAAAA,KAACw3E,GAAAA,EAAK,CAACj2E,UAAWsf,EAAQs0D,aAAcsC,QAAS2C,EAAYr6E,SAAEgB,EAAKI,UAAUC,iBAC9EpB,EAAAA,EAAAA,KAACumE,GAAAA,EAAK,CACJhlE,WAAWwf,EAAAA,EAAAA,GAAaF,EAAQkmD,MAAO,oBACvChlD,IAAKu4D,EACLt/D,QAAS,WAAF,OAAQ6/D,GAAwB,EACvCryD,UAAWuyD,EACXI,UAAQ,EACRlG,cACEj1E,EAAAA,EAAAA,KAAA,OAAKuB,UAAWsf,EAAQo0D,aAAc/0E,GAAIm6E,EAAiBt6E,UACzDC,EAAAA,EAAAA,KAACo7E,GAAAA,IAAoB,MAGzBllE,MAAO8jE,EACP,qBAAAvsE,OAAoB2sE,EAAW,KAAA3sE,OAAI4sE,GACnCn6E,GAAIk6E,QAGR36E,EAAAA,EAAAA,MAAA,OAAK8B,UAAWsf,EAAQ84D,QAAQ55E,SAAA,EAC9BC,EAAAA,EAAAA,KAACw3E,GAAAA,EAAK,CAACj2E,UAAWsf,EAAQs0D,aAAcsC,QAAS8C,EAAUx6E,SAAEgB,EAAKI,UAAUC,eAC5EpB,EAAAA,EAAAA,KAACumE,GAAAA,EAAK,CACJhlE,WAAWwf,EAAAA,EAAAA,GAAaF,EAAQkmD,MAAO,kBACvC/rD,QAAS,WAAF,OAAQ8/D,GAAsB,EACrCtyD,UAAWwyD,EACXG,UAAQ,EACRlG,cACEj1E,EAAAA,EAAAA,KAAA,OAAKuB,UAAWsf,EAAQo0D,aAAc/0E,GAAIs6E,EAAez6E,UACvDC,EAAAA,EAAAA,KAACo7E,GAAAA,IAAoB,MAGzBllE,MAAO+jE,EACP,qBAAAxsE,OAAoB8sE,EAAS,KAAA9sE,OAAI+sE,GACjCt6E,GAAIq6E,YAOlB,EAEa5uE,GAAkB,SAACmW,GAC9B,IACE/gB,EAUE+gB,EAVF/gB,KACA89B,EASE/c,EATF+c,WACAjxB,EAQEkU,EARFlU,SACAytE,EAOEv5D,EAPFu5D,iBACAC,EAMEx5D,EANFw5D,uBACAn1D,EAKErE,EALFqE,QACA8V,EAIEna,EAJFma,SACAq5C,EAGExzD,EAHFwzD,WACAC,EAEEzzD,EAFFyzD,UAASC,EAEP1zD,EADF2zD,YAAAA,OAAW,IAAAD,GAAQA,EAGf30D,EAAUM,KACV6E,EAAO,OACb6xB,GAA0CvgC,EAAAA,EAAAA,WAAQnP,EAAAA,GAAAA,GAAC,CAAC,EACjD6d,EAAO,CAACq1D,KACTvjC,GAAAtgC,EAAAA,GAAAA,GAAAqgC,EAAA,GAFK0jC,EAAazjC,EAAA,GAAE0jC,EAAgB1jC,EAAA,GAGhC+hC,GAAmB91D,EAAAA,EAAAA,UAAQ,kBAAMw3D,EAAcv1D,GAAM7K,SAASnV,GAAAA,GAAcK,OAAO,GAAE,CAACk1E,IACtFrB,GAAen2D,EAAAA,EAAAA,UAAQ,kBAAMoC,EAAQqjD,MAAK,SAAAoD,GAAM,OAAIA,EAAO1gE,MAAQlG,GAAAA,GAAcK,MAAM,GAAC,GAAE,CAAC8f,IAC3Fs1D,GAAuB13D,EAAAA,EAAAA,UAAQ,kBAAMoC,EAAQlL,QAAO,SAAA2xD,GAAM,OAAIA,EAAO1gE,MAAQlG,GAAAA,GAAcK,MAAM,GAAC,GAAE,CAAC8f,IAE3G60C,GAA8C1jD,EAAAA,EAAAA,UAASgkE,GAAuBngB,GAAA3jD,EAAAA,GAAAA,GAAAwjD,EAAA,GAAvE8e,EAAe3e,EAAA,GAAE4e,EAAkB5e,EAAA,GAGpCugB,GAAax2D,EAAAA,EAAAA,cACjB,SAAAyzD,GAAI,OAAI53E,EAAKk+B,gBAAgB05C,EAAM,CAAEz5C,IAAKL,EAAYjxB,SAAAA,GAAW,GACjE,CAACixB,EAAY99B,EAAM6M,IAGfosE,GAAsBj2D,EAAAA,EAAAA,UAC1B,kBAAM23D,EAAW5B,EAAgBtrE,MAAM,GACvC,CAACktE,EAAY5B,EAAgBtrE,QAGzByrE,GAAoBl2D,EAAAA,EAAAA,UACxB,kBAAM23D,EAAW5B,EAAgBrrE,IAAI,GACrC,CAACitE,EAAY5B,EAAgBrrE,MAGzBktE,GAAiB53D,EAAAA,EAAAA,UACrB,kBAAMoC,EAAQqjD,MAAK,SAAAvjC,GAAC,OAAIA,EAAE/5B,MAAQqvE,EAAcv1D,GAAM,EAAE,GAAC,GACzD,CAACu1D,EAAep1D,IAIZy1D,GAAgB73D,EAAAA,EAAAA,UAAQ,WAC5B,OAAK43D,EAGDA,EAAezvE,MAAQlG,GAAAA,GAAcK,OACjC,GAANoH,OAAUusE,EAAmB,OAAAvsE,OAAMwsE,GAE9B0B,EAAexvE,KALb,IAMX,GAAG,CAAC8tE,EAAmBD,EAAqB2B,IAGtCE,GAAkB32D,EAAAA,EAAAA,cAAY,WAC9B+W,GAAYo/C,IAAqBr1E,GAAAA,GAAcC,SACjDg2B,EAAS,CAAE6/C,UAAW91E,GAAAA,GAAcC,QAAS6zE,gBAAAA,IAE3CvE,GACFA,GAEJ,GAAG,CAACuE,EAAiBuB,EAAkBp/C,EAAUs5C,IAG3C2B,GAAoBhyD,EAAAA,EAAAA,cAAY,WACpC,IAAM42D,EAAYP,EAAcv1D,GAAM,GAClC81D,GAAa7/C,IACXo/C,IAAqBS,GACnBz9C,GAAoBi9C,EAAwBxB,IAChD79C,EAAS,CAAE6/C,UAAAA,EAAWhC,gBAAAA,GAAmB8B,GAG/C,GAAG,CAACL,EAAezB,EAAiBwB,EAAwBD,EAAkBO,EAAe3/C,IAE7Fm/B,GAA4B9jD,EAAAA,EAAAA,UAASm+D,GAAYha,GAAAjkD,EAAAA,GAAAA,GAAA4jD,EAAA,GAA1Cn5C,EAAMw5C,EAAA,GAAEqa,EAASra,EAAA,GAClB0b,GAAQjyD,EAAAA,EAAAA,cAAY,WACxB4wD,GAAU,GACV0F,GAAiB,kBAAArzE,EAAAA,GAAAA,GAAC,CAAD,EACd6d,EAAO,GAAE,IAEZ61D,GACF,GAAG,CAACA,IAeEze,GAAar5C,EAAAA,EAAAA,UAAQ,kBAAMw3D,EAAcv1D,GAAM/Q,OAAS,GAAKsmE,EAAcv1D,GAAM,KAAOhgB,GAAAA,GAAcC,OAAO,GAAE,CAACs1E,IAmBtH,OAbA5jE,EAAAA,EAAAA,YAAU,WACJ29D,GACF6B,GAGJ,GAAG,CAAC7B,KAEJ39D,EAAAA,EAAAA,YAAU,WACHsK,GACHi1D,GAEJ,GAAG,CAACj1D,EAAQi1D,KAGVz3E,EAAAA,EAAAA,MAAC2gE,GAAAA,EAAO,CAACkX,WAAS,EAAC50D,KAAMT,EAAQs1D,aAlBd,SAAC5+D,EAAGE,GACvBi9D,EAAUj9D,EAAK6J,KACjB,EAgB+DqW,YAAY,cAAah5B,SAAA,EACpFC,EAAAA,EAAAA,KAACsgE,GAAAA,EAAc,CAAC2Q,0BAAwB,EAAAlxE,UACtCC,EAAAA,EAAAA,KAACq0E,GAAAA,EAAU,CAACpxD,WAAW,SAAS1hB,UAAW67D,GAAar8C,EAAAA,EAAAA,GAAaF,EAAQ4zD,WAAY,uBAAwB1zD,EAAAA,EAAAA,GAAaF,EAAQ4zD,WAAY5zD,EAAQ6zD,qBAAsB,sBAAsB30E,SACnMq9D,EAAawe,EAAgB76E,EAAKI,UAAUC,mBAIjD3B,EAAAA,EAAAA,MAAC+gE,GAAAA,EAAc,CAACj/D,WAAWwf,EAAAA,EAAAA,GAAaF,EAAQ2zD,YAAa,oBAAoBz0E,SAAA,EAC/EN,EAAAA,EAAAA,MAAC2xE,GAAAA,EAAQ,CAACmK,cAAeA,EAAeQ,qBAzCjB,SAACpjE,EAAGE,GAC/B,IACEmjE,EACEnjE,EADFmjE,aAEFR,GAAiB,SAAAlvD,GAAC,OAAAxY,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACbwY,GAAC,IAAAnkB,EAAAA,GAAAA,GAAA,GACH6d,EAAOg2D,GAAY,IAElBA,GAAgBA,EAAa/mE,OAAS,GAAK+mE,EAAa,KAAOh2E,GAAAA,GAAcK,QAC/EyvE,GAAU,EAEd,EA8B0FmG,eAAa,EAAAl8E,SAAA,CAC9F07E,EAAqB1lE,KAAI,SAAA62D,GAAM,OAC9B5sE,EAAAA,EAAAA,KAACi7E,GAAAA,EAAa,CAAkBj1D,KAAMA,EAAM9P,MAAO02D,EAAO1gE,IAAInM,SAC3D6sE,EAAOzgE,MADUygE,EAAO1gE,IAEX,IAEjBguE,IACCl6E,EAAAA,EAAAA,KAAC45E,GAAU,CACT74E,KAAMA,EACNw6E,cAAeA,EACf1B,iBAAkBA,EAClBC,gBAAiBA,EACjBlsE,SAAUA,EACVmsE,mBAAoBA,EACpBG,aAAcA,EACdF,oBAAqBA,EACrBC,kBAAmBA,EACnBj0D,KAAMA,KAEVhmB,EAAAA,EAAAA,KAACs0E,GAAAA,EAAW,QAEdt0E,EAAAA,EAAAA,KAAA,OAAAD,UACEC,EAAAA,EAAAA,KAAC8gB,EAAAA,EAAM,CACLvf,UAAW67D,EAAav8C,EAAQ8zD,mBAAqB9zD,EAAQg0D,oBAC7DxpD,UAAW+xC,EACXn6C,WAAW,cACXrU,MAAM5O,EAAAA,EAAAA,KAAC23E,EAAAA,IAAgB,IACvB38D,QAAS,WAAF,OAAQm8D,GAAO,EAACp3E,SAEtBgB,EAAKI,UAAUC,kBAM5B,E,aCzaM+f,IAAYjB,EAAAA,EAAAA,GAAW,CAC3Bg8D,UAAW,CACT38D,SAAU,QACV,yBAA0B,CACxBiiD,gBAAiB,OACjB2a,eAAgB,QAChB3hB,YAAa,OAEf,uCAAwC,CACtCn6C,MAAO,cAKA+7D,GAAkB,SAACt6D,GAC9B,IACE/gB,EAUE+gB,EAVF/gB,KACAQ,EASEugB,EATFvgB,UACA86E,EAQEv6D,EARFu6D,qBACAC,EAOEx6D,EAPFw6D,mBACAC,EAMEz6D,EANFy6D,iBACAC,EAKE16D,EALF06D,kBACAC,EAIE36D,EAJF26D,kBACAC,EAGE56D,EAHF46D,qBACAC,EAEE76D,EAFF66D,UACAvxD,EACEtJ,EADFsJ,UAGIvK,EAAUM,KAEhB,OACEnhB,EAAAA,EAAAA,KAAA,OAAKuB,UAAWA,EAAUxB,UACxBC,EAAAA,EAAAA,KAAC48E,GAAAA,EAAS,CACRD,UAAWA,EACXp7E,WAAWwf,EAAAA,EAAAA,GAAa,aAAcF,EAAQq7D,WAC9C,aAAY9wD,GAAa,GACzBo7C,YAAakW,GAAwB37E,EAAKI,UAAUC,yCACpDwsE,aAAc6O,EACdxgD,SAAU,SAACtjB,EAAGE,GACO,KAAfA,EAAK3C,OAA2B,UAAXyC,EAAEnN,KACzBgxE,EAAkB3jE,GAElBwjE,EAAqB1jE,EAAGE,EAAK3C,MAEjC,EACAsS,UAAW,SAAC7P,GACI,UAAVA,EAAEzM,KACJowE,EAAmB3jE,EAAEgX,OAAOzZ,MAEhC,EACA2qD,OAAQ,WACN0b,GACF,KAIR,ECvDMp7D,IAAYjB,EAAAA,EAAAA,GAAW,CAC3B28D,aAAc,CACZt9D,SAAU,QACViB,WAAY,SAEds8D,cAAe,CACbp+D,QAAS,OACT+sD,UAAW,OAEbsR,gBAAcjpE,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACZyL,SAAU,QACVN,gBAAiB,WACdN,EAAAA,GAAWQ,OAAO,MAAO,QAAS,YAAU,IAC/CkB,MAAO,cAIE28D,GAA+B,SAACl7D,GAC3C,IACEvgB,EAIEugB,EAJFvgB,UACA4kB,EAGErE,EAHFqE,QACA82D,EAEEn7D,EAFFm7D,aACAC,EACEp7D,EADFo7D,qBAGIr8D,EAAUM,KAEhB,OACEnhB,EAAAA,EAAAA,KAAA,OAAKuB,UAAWA,EAAUxB,UACxBC,EAAAA,EAAAA,KAAA,OAAKuB,WAAWwf,EAAAA,EAAAA,GAAa,oBAAqBF,EAAQi8D,eAAe/8E,UACvEC,EAAAA,EAAAA,KAACm9E,GAAAA,GAAa,CACZh3D,QAASA,EACTtF,QAASA,EACTo8D,aAAcA,EACdC,qBAAsBA,OAKhC,EC1BM/7D,IAAYjB,EAAAA,EAAAA,GAAW,CAC3Bs0D,YAAa,CACXj1D,SAAU,SAEZ1L,KAAM,CACJ,2BAA4B,CAC1B6K,QAAS,WAKF0+D,GAAe,SAACt7D,GAC3B,IACEvgB,EAIEugB,EAJFvgB,UACA4kB,EAGErE,EAHFqE,QACApX,EAEE+S,EAFF/S,OACAktB,EACEna,EADFma,SAGIpb,EAAUM,KACV6E,EAAO,SACb3O,GAA0CC,EAAAA,EAAAA,WAAQnP,EAAAA,GAAAA,GAAC,CAAC,EACjD6d,EAAO,CAACjX,GAAU7L,GAAAA,GAAWG,cAC9BkU,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAFKkkE,EAAahkE,EAAA,GAAEikE,EAAgBjkE,EAAA,GAGtCugC,GAA4BxgC,EAAAA,EAAAA,WAAS,GAAMyjD,GAAAvjD,EAAAA,GAAAA,GAAAsgC,EAAA,GAApC71B,EAAM84C,EAAA,GAAE+a,EAAS/a,EAAA,GAmBlBsiB,GAAqBt5D,EAAAA,EAAAA,UAAQ,WACjC,IAAMu5D,EAAiBn3D,EAAQqjD,MAAK,SAAAoD,GAAM,OAAIA,EAAO1gE,MAAQqvE,EAAcv1D,GAAM,EAAE,IACnF,OAAOs3D,GACL79E,EAAAA,EAAAA,MAAA+iB,EAAAA,SAAA,CAAAziB,SAAA,CACGu9E,EAAenxE,KACfmxE,EAAe1uE,MAAQ0uE,EAAe1uE,OAAS7L,GAAAA,GAAaC,SAAUhD,EAAAA,EAAAA,KAACu9E,GAAAA,IAAoB,IAC3FD,EAAe1uE,MAAQ0uE,EAAe1uE,OAAS7L,GAAAA,GAAaE,WAAYjD,EAAAA,EAAAA,KAACw9E,GAAAA,IAAsB,OAC5F,EACV,GAAG,CAACjC,EAAep1D,IAenB,OAZAxO,EAAAA,EAAAA,YAAU,WACJ5I,IAAWwsE,EAAcv1D,GAAM,IAGrB,MAAVjX,GAGJysE,GAAgBrzE,EAAAA,GAAAA,GAAC,CAAC,EACf6d,EAAO,CAACjX,IAEb,GAAG,CAACwsE,EAAexsE,KAGjB/O,EAAAA,EAAAA,KAAA,OAAKuB,WAAWwf,EAAAA,EAAAA,GAAaxf,EAAW,kBAAkBxB,UACxDN,EAAAA,EAAAA,MAACsxE,GAAAA,EAAI,CAACruD,KAAMT,EAAQs5D,cAAeA,EAAeQ,qBA1CzB,SAACpjE,EAAGE,GAC/B,IACEmjE,EACEnjE,EADFmjE,aAEFR,GAAiB,SAAAlvD,GAAC,OAAAxY,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACbwY,GAAC,IAAAnkB,EAAAA,GAAAA,GAAA,GACH6d,EAAOg2D,GAAY,IAEtB//C,EAAStjB,EAAG,CACVzM,IAAK8vE,EAAa,IAEtB,EA+BkGC,eAAa,EAAC1E,aA7B3F,SAAC5+D,EAAGE,GACvBi9D,EAAUj9D,EAAK6J,KACjB,EA2B2I3iB,SAAA,EACrIC,EAAAA,EAAAA,KAACgxE,GAAAA,EAAW,CAACC,0BAAwB,EAAAlxE,UACnCC,EAAAA,EAAAA,KAACq0E,GAAAA,EAAU,CAACzlE,MAAM5O,EAAAA,EAAAA,KAACy9E,GAAAA,IAAkB,IAAI19E,SACtCs9E,OAILr9E,EAAAA,EAAAA,KAACmxE,GAAAA,EAAW,CAAC5vE,WAAWwf,EAAAA,EAAAA,GAAa,mBAAoBF,EAAQ2zD,aAAaz0E,UAC5EC,EAAAA,EAAAA,KAACoxE,GAAAA,EAAQ,CAAArxE,SAELomB,EAAQpQ,KAAI,SAAC62D,EAAQ74C,GAAK,OACxBt0B,EAAAA,EAAAA,MAACw7E,GAAAA,EAAa,CAAkBj1D,KAAMA,EAAM9P,MAAO02D,EAAO1gE,IAAK3K,UAAWqrE,EAAOh+D,MAAOmS,EAAAA,EAAAA,GAAaF,EAAQhN,KAAK,SAADpG,OAAWsmB,IAAQ,SAAAtmB,OAAYsmB,GAAQh0B,SAAA,CACrJ6sE,EAAOzgE,KACPygE,EAAOh+D,MAAQg+D,EAAOh+D,OAAS7L,GAAAA,GAAaC,SAAUhD,EAAAA,EAAAA,KAACu9E,GAAAA,IAAoB,IAC3E3Q,EAAOh+D,MAAQg+D,EAAOh+D,OAAS7L,GAAAA,GAAaE,WAAYjD,EAAAA,EAAAA,KAACw9E,GAAAA,IAAsB,MAH9D5Q,EAAO1gE,IAIX,YAQhC,EC7FMiV,IAAYjB,EAAAA,EAAAA,GAAW,CAC3Bs0D,YAAa,CACXj1D,SAAU,SAEZm1D,qBAAsB,CACpB,2BAA4B,CAC1Bl0D,WAAY,UAGhBm0D,mBAAoB,CAClBvqD,MAAO,QACP/J,MAAO2J,GAAAA,EAAO4qD,mCAEhBC,oBAAqB,CACnBzqD,MAAO,QACP/J,MAAO2J,GAAAA,EAAO8qD,gCAEhB4I,SAAU,CACR,UAAW,CACTljB,YAAa,MACbh6C,WAAY,YAKL1U,GAAoB,SAACgW,GAChC,IACE/gB,EAOE+gB,EAPF/gB,KACA48E,EAME77D,EANF67D,4BACAx3D,EAKErE,EALFqE,QACA8V,EAIEna,EAJFma,SACAq5C,EAGExzD,EAHFwzD,WACAC,EAEEzzD,EAFFyzD,UAASC,EAEP1zD,EADF2zD,YAAAA,OAAW,IAAAD,GAAQA,EAGf30D,EAAUM,KAChB9J,GAAwDC,EAAAA,EAAAA,UAASqmE,GAA4BpmE,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAAtFumE,EAAoBrmE,EAAA,GAAEsmE,EAAuBtmE,EAAA,GACpDsgC,GAA4BvgC,EAAAA,EAAAA,UAASm+D,GAAY39B,GAAAtgC,EAAAA,GAAAA,GAAAqgC,EAAA,GAA1C51B,EAAM61B,EAAA,GAAEg+B,EAASh+B,EAAA,GAElBgmC,GAAkB/5D,EAAAA,EAAAA,UACtB,kBAAMxX,IAAAA,OAAS4Z,GAAS,SAAArlB,GAAA,IAAGoL,EAAGpL,EAAHoL,IAAG,OAAOK,IAAAA,SAAWqxE,EAAsB1xE,EAAI,KAAK,EAAE,GACjF,CAAC0xE,EAAsBz3D,IAGnB43D,GAAmB74D,EAAAA,EAAAA,cAAY,SAAChZ,EAAK4iB,GACzC,IAAMkvD,EAAkBlvD,EAAUviB,IAAAA,OAAS,GAADkB,QAAAkI,EAAAA,GAAAA,GAAKioE,GAAoB,CAAE1xE,KAAQK,IAAAA,QAAUqxE,EAAsB1xE,GAC7G2xE,EAAwBG,GAAmB,GAC7C,GAAG,CAACJ,IAGEhC,GAAgB73D,EAAAA,EAAAA,UAAQ,WAC5B,OAAIxX,IAAAA,QAAUuxE,GAAyB,KACzBvxE,IAAAA,KAAOuxE,EAAgB/nE,KAAI,SAAAC,GAAO,OAAAA,EAAJ7J,IAAe,KAAGuB,KAAK,KAErE,GAAG,CAACowE,IAEE1gB,GAAar5C,EAAAA,EAAAA,UAAQ,kBAAOxX,IAAAA,QAAUqxE,EAAqB,GAAE,CAACA,IAG9D/B,GAAkB32D,EAAAA,EAAAA,cAAY,WAClC24D,EAAwB,IACpB5hD,IAAa1vB,IAAAA,QAAUoxE,IACzB1hD,EAAS,IAEPs5C,GACFA,GAEJ,GAAG,CAACoI,EAA6B1hD,EAAUs5C,IAGrC2B,GAAoBhyD,EAAAA,EAAAA,cAAY,WAChC+W,IAAa1vB,IAAAA,QAAUoxE,EAA6BC,IACtD3hD,EAAS2hD,EAAsBhC,EAEnC,GAAG,CAAC+B,EAA6B/B,EAAegC,EAAsB3hD,IAEhEk7C,EAAQ,WACZrB,GAAU,GACV+F,GACF,EAmBA,OAbAlkE,EAAAA,EAAAA,YAAU,WACJ29D,GACF6B,GAGJ,GAAG,CAAC7B,KAEJ39D,EAAAA,EAAAA,YAAU,WACHsK,GACHi1D,GAEJ,GAAG,CAACj1D,EAAQi1D,KAGVz3E,EAAAA,EAAAA,MAACsxE,GAAAA,EAAI,CAACruD,KAAMT,EAAQg6D,eAAa,EAAC1E,aAlBf,SAAC5+D,EAAGE,GACvBi9D,EAAUj9D,EAAK6J,KACjB,EAgB+D3iB,SAAA,EAC3DC,EAAAA,EAAAA,KAACgxE,GAAAA,EAAW,CAACC,0BAAwB,EAAAlxE,UACnCC,EAAAA,EAAAA,KAACq0E,GAAAA,EAAU,CAACpxD,WAAW,SAAS1hB,UAAW67D,EAAa,uBAAwBr8C,EAAAA,EAAAA,GAAaF,EAAQ6zD,qBAAsB,uBAAuB30E,SAC/I67E,GAAiB76E,EAAKI,UAAUC,eAIrCpB,EAAAA,EAAAA,KAACmxE,GAAAA,EAAW,CAAC5vE,WAAWwf,EAAAA,EAAAA,GAAaF,EAAQ2zD,YAAa,qBAAqBz0E,UAC7EN,EAAAA,EAAAA,MAAC2xE,GAAAA,EAAQ,CAAArxE,SAAA,EACPC,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,gBAAexB,SAC3BomB,EAAQpQ,KAAI,SAAA62D,GAAM,OACjB5sE,EAAAA,EAAAA,KAAA,OAAAD,UACEC,EAAAA,EAAAA,KAAC6uB,GAAAA,EAAQ,CACP4Z,MAAOmkC,EAAOnhE,MACdlK,WAAWwf,EAAAA,EAAAA,GAAa6rD,EAAO1gE,IAAK2U,EAAQ68D,UAC5C5uD,QAASviB,IAAAA,SAAWqxE,EAAsBhR,EAAO1gE,KACjD+vB,SAAU,SAACojB,EAAKxmC,GAAI,OAAKklE,EAAiBnR,EAAO1gE,IAAK2M,EAAKiW,QAAQ,KAL7D89C,EAAO1gE,IAOX,OAGVlM,EAAAA,EAAAA,KAACs0E,GAAAA,EAAW,KACZt0E,EAAAA,EAAAA,KAAA,OAAAD,UACEC,EAAAA,EAAAA,KAAC8gB,EAAAA,EAAM,CACLvf,UAAW67D,EAAav8C,EAAQ8zD,mBAAqB9zD,EAAQg0D,oBAC7DxpD,UAAW+xC,EACXn6C,WAAW,cACXrU,MAAM5O,EAAAA,EAAAA,KAAC23E,EAAAA,IAAgB,IACvB38D,QAAS,WAAF,OAAQm8D,GAAO,EAACp3E,SAEtBgB,EAAKI,UAAUC,oBAO9B,ECtIM+f,IAAYjB,EAAAA,EAAAA,GAAW,CAC3Bs0D,aAAW1gE,EAAAA,EAAAA,GAAA,CACTyL,SAAU,SACPZ,EAAAA,GAAWC,QAAQ,QAExB61D,WAAY,CAGVx1D,gBAAiB,cACjB,0BAA2B,CACzBA,gBAAiB,YAGrBy1D,qBAAsB,CACpB,2BAA4B,CAC1Bl0D,WAAY,UAGhBm0D,mBAAoB,CAClBvqD,MAAO,QACP/J,MAAO2J,GAAAA,EAAO4qD,mCAEhBC,oBAAqB,CACnBzqD,MAAO,QACP/J,MAAO2J,GAAAA,EAAO8qD,kCAIZC,IAAsB70D,EAAAA,EAAAA,GAAW,CACrC+9D,YAAa,CACXv/D,QAAS,OACT0K,cAAe,SACfS,WAAY,OACZK,YAAa,OACbwyC,SAAU,SAEZwhB,eAAgB,CACd,mBAAiBpqE,EAAAA,EAAAA,GAAA,CACf,iBAAkB,CAChB,WAASA,EAAAA,EAAAA,GAAA,GACJ6K,EAAAA,GAAWg7C,aAAa,MAAO,QAAS,uBAG5Ch7C,EAAAA,GAAWg7C,aAAa,MAAO,QAAS,sBAG/CwkB,YAAa,CACXz/D,QAAS,OACT0K,cAAe,SACfS,WAAY,OACZK,YAAa,OACboN,aAAc,MACdolC,SAAU,SAEZqK,MAAO,CACLntC,aAAc,MACdh6B,OAAQ,OACR2gB,WAAY,OACZoU,UAAW,SACXqgD,UAAW,UAEbC,aAAc,CACZh2D,gBAAiB+K,GAAAA,EAAOkrD,wBACxBt7C,aAAc,MACd4gC,YAAa,OAEf2a,aAAc,CACZ79C,aAAc,MACdC,UAAW,SAIFxrB,GAAsB,SAAC+V,GAClC,IACE/gB,EAKE+gB,EALF/gB,KACAq9E,EAIEt8D,EAJFs8D,mBACAC,EAGEv8D,EAHFu8D,mBACApiD,EAEEna,EAFFma,SACAq5C,EACExzD,EADFwzD,WAGIgJ,GAAgBjS,EAAAA,GAAAA,IAAM,eACtBkS,GAAqBlS,EAAAA,GAAAA,IAAM,sBAC3BmS,GAAgBnS,EAAAA,GAAAA,IAAM,eACtBoS,GAAqBpS,EAAAA,GAAAA,IAAM,sBAC3BvgD,EAAgBipD,KAChBl0D,EAAUM,KAGVu9D,GAAiBp8D,EAAAA,EAAAA,QAAO,MACxBq8D,GAAiBr8D,EAAAA,EAAAA,QAAO,MAE9BjL,GAAsCC,EAAAA,EAAAA,UAAS+mE,GAAmB9mE,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAA3D4mE,EAAW1mE,EAAA,GAAEqnE,EAAcrnE,EAAA,GAClCsgC,GAAsCvgC,EAAAA,EAAAA,UAAS8mE,GAAmBtmC,GAAAtgC,EAAAA,GAAAA,GAAAqgC,EAAA,GAA3DsmC,EAAWrmC,EAAA,GAAE+mC,EAAc/mC,EAAA,GAElCijB,GAAoDzjD,EAAAA,EAAAA,WAAS,GAAM0jD,GAAAxjD,EAAAA,GAAAA,GAAAujD,EAAA,GAA5D+jB,EAAkB9jB,EAAA,GAAE+jB,EAAqB/jB,EAAA,GAChDG,GAAoD7jD,EAAAA,EAAAA,WAAS,GAAM8jD,GAAA5jD,EAAAA,GAAAA,GAAA2jD,EAAA,GAA5D6jB,EAAkB5jB,EAAA,GAAE6jB,EAAqB7jB,EAAA,GAE1C2iB,GAAmB74D,EAAAA,EAAAA,cAAY,SAACsxD,EAAQrG,GAC5C,IAAMr3D,EAAM6sB,SAASwqC,EAAU,IAC3B5jE,IAAAA,QAAU4jE,IAAa5jE,IAAAA,MAAQuM,GACjC09D,EAAO,OAGJjqE,IAAAA,MAAQuM,IAAQA,GAAO,GAAKA,GAAO,KACtC09D,EAAO19D,EAEX,GAAG,IAEGomE,GAAsBh6D,EAAAA,EAAAA,cAAY,SAAC8C,EAAOmoD,GAC9C4N,EAAiBa,EAAgBzO,GAC7B5jE,IAAAA,QAAU4jE,IAAagO,EAAchO,GACvC4O,GAAsB,GACtBE,GAAsB,IAEtBF,KADUZ,GAAehO,GAAYgO,GAKzC,GAAG,CAACA,EAAaJ,IAEXoB,GAAsBj6D,EAAAA,EAAAA,cAAY,SAAC8C,EAAOmoD,GAC9C4N,EAAiBc,EAAgB1O,GAC7B5jE,IAAAA,QAAU4jE,IAAaA,EAAW8N,GACpCc,GAAsB,GACtBE,GAAsB,IAEtBA,EADS9O,GAAY8N,EAKzB,GAAG,CAACF,EAAkBE,IAEhBtH,GAAUzxD,EAAAA,EAAAA,cAAY,WAC1B05D,EAAe,MACfC,EAAe,MACTR,GAAsBD,GAE1BniD,EAAS,CAAEmjD,eAAgB,KAAMC,eAAgB,OAE/CX,EAAepvD,SACjBovD,EAAepvD,QAAQ2oC,OAE3B,GAAG,CAAComB,EAAoBD,EAAoBniD,IAEtCxwB,GAAQsY,EAAAA,EAAAA,UAAQ,WACpB,OAAIk6D,GAAeE,IAAgBW,IAAuBE,EAClD,GAANvxE,OAAUwwE,EAAW,QAAAxwE,OAAO1M,EAAKI,UAAUC,YAAiB,OAAAqM,OAAM0wE,EAAW,KAE3EF,IAAgBa,EACZ,GAANrxE,OAAU1M,EAAKI,UAAUC,YAAiB,OAAAqM,OAAMwwE,EAAW,KAEzDE,IAAgBa,EACZ,GAANvxE,OAAU1M,EAAKI,UAAUC,YAAiB,OAAAqM,OAAM0wE,EAAW,KAEtD,EACT,GAAG,CAACF,EAAaE,EAAaW,EAAoBE,EAAoBj+E,IAEhE+1E,GAAiB5xD,EAAAA,EAAAA,cAAY,SAAA6xD,GAAY,OAAI,SAAC/uD,GAChC,QAAdA,EAAM9b,MACJ6qE,EAAaznD,SACfynD,EAAaznD,QAAQ2oC,QAEnBjwC,EAAMC,iBAAmBD,EAAMC,kBAC/BD,EAAME,gBAAkBF,EAAME,iBAEtC,CAAC,GAAE,IAEGo3D,GAAqBv7D,EAAAA,EAAAA,UAAQ,kBAAM+yD,EAAe6H,EAAe,GAAE,CAAC7H,IACpEyI,GAAqBx7D,EAAAA,EAAAA,UAAQ,kBAAM+yD,EAAe4H,EAAe,GAAE,CAAC5H,IAEpEI,GAAoBhyD,EAAAA,EAAAA,cAAY,WAChCm5D,IAAuBJ,GAAeG,IAAuBD,GAC/DliD,EAAS,CAAEmjD,eAAgBN,EAAqB,KAAOb,EAAaoB,eAAgBL,EAAqB,KAAOb,GAEpH,GAAG,CAACE,EAAoBJ,EAAaG,EAAoBD,EAAaliD,EAAU6iD,EAAoBE,IAGpGvjB,GAA4BnkD,EAAAA,EAAAA,WAAS,GAAMokD,GAAAlkD,EAAAA,GAAAA,GAAAikD,EAAA,GAApCx5C,EAAMy5C,EAAA,GAAEoa,EAASpa,EAAA,GACxBoK,GAAgCxuD,EAAAA,EAAAA,UAAS,MAAKyuD,GAAAvuD,EAAAA,GAAAA,GAAAsuD,EAAA,GAAvCmQ,EAAQlQ,EAAA,GAAEmQ,EAAWnQ,EAAA,GAEtB3I,GAAar5C,EAAAA,EAAAA,UAAQ,kBAAMk6D,GAAeE,CAAW,GAAE,CAACF,EAAaE,IAMrEhH,GAAQ,WACZrB,GAAU,GACVa,GACF,EAsBA,OApBAh/D,EAAAA,EAAAA,YAAU,WACJ29D,GACF6B,IAGJ,GAAG,CAAC7B,KAEJ39D,EAAAA,EAAAA,YAAU,WACHsK,GACHi1D,GAEJ,GAAG,CAACj1D,EAAQi1D,KAEZv/D,EAAAA,EAAAA,YAAU,WACJs+D,GAEFA,EAASoB,gBAAgB,OAE7B,GAAG,CAACpB,KAGFx2E,EAAAA,EAAAA,MAAC2gE,GAAAA,EAAO,CAACkX,WAAS,EAAC50D,KAAMT,EAAQs1D,aA9Bd,SAAC5+D,EAAGE,GACvBi9D,EAAUj9D,EAAK6J,KACjB,EA4B+DqW,YAAY,cAAah5B,SAAA,EACpFC,EAAAA,EAAAA,KAACsgE,GAAAA,EAAc,CAAC2Q,0BAAwB,EAAAlxE,UACtCC,EAAAA,EAAAA,KAACq0E,GAAAA,EAAU,CAACpxD,WAAW,SAAS1hB,UAAW67D,GAAar8C,EAAAA,EAAAA,GAAaF,EAAQ4zD,WAAY,0BAA2B1zD,EAAAA,EAAAA,GAAaF,EAAQ4zD,WAAY5zD,EAAQ6zD,qBAAsB,yBAAyB30E,SACzMq9D,EAAa3xD,EAAQ1K,EAAKI,UAAUC,uBAIzC3B,EAAAA,EAAAA,MAAC+gE,GAAAA,EAAc,CAACj/D,WAAWwf,EAAAA,EAAAA,GAAaF,EAAQ2zD,YAAa,uBAAuBz0E,SAAA,EAClFN,EAAAA,EAAAA,MAAC2xE,GAAAA,EAAQ,CAACrvD,IAAKm0D,EAAYn2E,SAAA,EACzBN,EAAAA,EAAAA,MAAA,OAAK8B,WAAWwf,EAAAA,EAAAA,GAAa,kBAAmB+K,EAAcoyD,gBAAgBn+E,SAAA,EAC5EN,EAAAA,EAAAA,MAAA,OAAK8B,WAAWwf,EAAAA,EAAAA,GAAa+K,EAAcmyD,YAAa,gBAAgBl+E,SAAA,EACtEC,EAAAA,EAAAA,KAACw3E,GAAAA,EAAK,CAACj2E,UAAWuqB,EAAcqpD,aAAcsC,QAAS6G,EAAcv+E,SAAEgB,EAAKI,UAAUC,oBACtFpB,EAAAA,EAAAA,KAACumE,GAAAA,EAAK,CACJxkD,IAAK28D,EACLn9E,UAAWu9E,GAAqB/9D,EAAAA,EAAAA,GAAa+K,EAAci7C,MAAO,gBAAkBj7C,EAAci7C,MAClG7wD,MAAO+nE,EAAcA,EAAYvG,WAAa,GAC9Cz7C,SAAU,SAAC8lC,EAAIlpD,GAAI,OAAKqmE,EAAoBnd,EAAIlpD,EAAK3C,MAAM,EAC3D++D,cACEj1E,EAAAA,EAAAA,KAAA,OAAKuB,UAAWuqB,EAAcmpD,aAAc/0E,GAAIq+E,EAAmBx+E,SAChEgB,EAAKI,UAAUC,OAGpB,qBAAAqM,OAAoB6wE,EAAa,KAAA7wE,OAAI8wE,GACrCr+E,GAAIo+E,EACJ91D,UAAW82D,QAGf7/E,EAAAA,EAAAA,MAAA,OAAK8B,WAAWwf,EAAAA,EAAAA,GAAa+K,EAAcqyD,YAAa,gBAAgBp+E,SAAA,EACtEC,EAAAA,EAAAA,KAACw3E,GAAAA,EAAK,CAACj2E,UAAWuqB,EAAcqpD,aAAcsC,QAAS+G,EAAcz+E,SAAEgB,EAAKI,UAAUC,oBACtFpB,EAAAA,EAAAA,KAACumE,GAAAA,EAAK,CACJxkD,IAAK48D,EACLp9E,UAAWy9E,GAAqBj+D,EAAAA,EAAAA,GAAa+K,EAAci7C,MAAO,gBAAkBj7C,EAAci7C,MAClG7wD,MAAOioE,EAAcA,EAAYzG,WAAa,GAC9Cz7C,SAAU,SAAC8lC,EAAIlpD,GAAI,OAAKsmE,EAAoBpd,EAAIlpD,EAAK3C,MAAM,EAC3D++D,cACEj1E,EAAAA,EAAAA,KAAA,OAAKuB,UAAWuqB,EAAcmpD,aAAc/0E,GAAIu+E,EAAmB1+E,SAChEgB,EAAKI,UAAUC,OAGpB,qBAAAqM,OAAoB+wE,EAAa,KAAA/wE,OAAIgxE,GACrCv+E,GAAIs+E,EACJh2D,UAAW+2D,WAIjBv/E,EAAAA,EAAAA,KAACs0E,GAAAA,EAAW,QAEdt0E,EAAAA,EAAAA,KAAA,OAAAD,UACEC,EAAAA,EAAAA,KAAC8gB,EAAAA,EAAM,CACLvf,UAAW67D,GAAar8C,EAAAA,EAAAA,GAAa,eAAgBF,EAAQ8zD,oBAAsB9zD,EAAQg0D,oBAC3FxpD,UAAW+xC,EACXn6C,WAAW,cACXrU,MAAM5O,EAAAA,EAAAA,KAAC23E,EAAAA,IAAgB,IACvB38D,QAAS,WAAF,OAAQm8D,IAAO,EAACp3E,SAEtBgB,EAAKI,UAAUC,kBAM5B,ECtRM+f,IAAYjB,EAAAA,EAAAA,GAAW,CAC3Bs0D,YAAa,CACXj1D,SAAU,SAEZm1D,qBAAsB,CACpB,2BAA4B,CAC1Bl0D,WAAY,UAGhBm0D,mBAAoB,CAClBvqD,MAAO,QACP/J,MAAO2J,GAAAA,EAAO4qD,mCAEhBC,oBAAqB,CACnBzqD,MAAO,QACP/J,MAAO2J,GAAAA,EAAO8qD,kCAILjpE,GAAqB,SAACiW,GACjC,IACEvgB,EAQEugB,EARFvgB,UACA4kB,EAOErE,EAPFqE,QACAq5D,EAME19D,EANF09D,oBACAvjD,EAKEna,EALFma,SACAq5C,EAIExzD,EAJFwzD,WACAv0E,EAGE+gB,EAHF/gB,KACAw0E,EAEEzzD,EAFFyzD,UAASC,EAEP1zD,EADF2zD,YAAAA,OAAW,IAAAD,GAAQA,EAGf30D,EAAUM,KACV6E,EAAO,eACb3O,GAA0CC,EAAAA,EAAAA,WAAQnP,EAAAA,GAAAA,GAAC,CAAC,EACjD6d,EAAO,CAACw5D,KACTjoE,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAFKkkE,EAAahkE,EAAA,GAAEikE,EAAgBjkE,EAAA,GAGtCugC,GAA4BxgC,EAAAA,EAAAA,UAASm+D,GAAY1a,GAAAvjD,EAAAA,GAAAA,GAAAsgC,EAAA,GAA1C71B,EAAM84C,EAAA,GAAE+a,EAAS/a,EAAA,GAYlB4gB,GAAiB53D,EAAAA,EAAAA,UACrB,kBAAMoC,EAAQqjD,MAAK,SAAAvjC,GAAC,OAAIA,EAAE/5B,MAAQqvE,EAAcv1D,GAAM,EAAE,GAAC,GACzD,CAACu1D,EAAep1D,IAIZy1D,EAAgBD,EAAiBA,EAAelwE,MAAQ,KAGxDowE,GAAkB32D,EAAAA,EAAAA,cAAY,WAC9B+W,GAAoC,OAAxBujD,GACdvjD,EAAS,KAEb,GAAG,CAACujD,EAAqBvjD,IAGnBi7C,GAAoBhyD,EAAAA,EAAAA,cAAY,WACpC,IAAMumC,EAAe8vB,EAAcv1D,GAAM,GACrCylC,GAAgBxvB,GAAYujD,IAAwB/zB,GACtDxvB,EAASwvB,EAEb,GAAG,CAAC8vB,EAAeiE,EAAqBvjD,IAElCmhC,EAAuC,MAA1Bme,EAAcv1D,GAAM,GAMjCmxD,GAAQjyD,EAAAA,EAAAA,cAAY,WACxB4wD,GAAU,GACV0F,GAAiB,kBAAArzE,EAAAA,GAAAA,GAAC,CAAD,EACd6d,EAAO,GAAE,IAEZ61D,IACItG,GACFA,GAEJ,GAAG,CAACsG,EAAiBtG,IAerB,OAbA59D,EAAAA,EAAAA,YAAU,WACJ29D,GACF6B,GAGJ,GAAG,CAAC7B,KAEJ39D,EAAAA,EAAAA,YAAU,WACHsK,GACHi1D,GAEJ,GAAG,CAACj1D,EAAQi1D,KAGVl3E,EAAAA,EAAAA,KAAA,OAAKuB,UAAWA,EAAUxB,UACxBN,EAAAA,EAAAA,MAACsxE,GAAAA,EAAI,CAACruD,KAAMT,EAAQs5D,cAAeA,EAAeQ,qBAjEzB,SAACpjE,EAAGE,GAC/B,IACEmjE,EACEnjE,EADFmjE,aAEFR,GAAiB,SAAAlvD,GAAC,OAAAxY,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACbwY,GAAC,IAAAnkB,EAAAA,GAAAA,GAAA,GACH6d,EAAOg2D,GAAY,GAExB,EAyDkGC,eAAa,EAAC1E,aA9B3F,SAAC5+D,EAAGE,GACvBi9D,EAAUj9D,EAAK6J,KACjB,EA4B2I3iB,SAAA,EACrIC,EAAAA,EAAAA,KAACgxE,GAAAA,EAAW,CAACC,0BAAwB,EAAAlxE,UACnCC,EAAAA,EAAAA,KAACq0E,GAAAA,EAAU,CAACpxD,WAAW,SAAS1hB,UAAW67D,EAAa,wBAAyBr8C,EAAAA,EAAAA,GAAaF,EAAQ6zD,qBAAsB,wBAAwB30E,SACjJq9D,EAAawe,EAAgB76E,EAAKI,UAAUC,sBAIjDpB,EAAAA,EAAAA,KAACmxE,GAAAA,EAAW,CAAC5vE,WAAWwf,EAAAA,EAAAA,GAAaF,EAAQ2zD,YAAa,sBAAsBz0E,UAC9EN,EAAAA,EAAAA,MAAC2xE,GAAAA,EAAQ,CAAArxE,SAAA,CAELomB,EAAQpQ,KAAI,SAAA62D,GAAM,OAChB5sE,EAAAA,EAAAA,KAACi7E,GAAAA,EAAa,CAAkBj1D,KAAMA,EAAM9P,MAAO02D,EAAO1gE,IAAK3K,UAAWqrE,EAAOh+D,KAAOiS,EAAQhN,KAAO,GAAG9T,SACvG6sE,EAAOzgE,MADUygE,EAAO1gE,IAEX,KAGpBlM,EAAAA,EAAAA,KAACs0E,GAAAA,EAAW,KACZt0E,EAAAA,EAAAA,KAAA,OAAAD,UACEC,EAAAA,EAAAA,KAAC8gB,EAAAA,EAAM,CACLvf,UAAW67D,EAAav8C,EAAQ8zD,mBAAqB9zD,EAAQg0D,oBAC7DxpD,UAAW+xC,EACXn6C,WAAW,cACXrU,MAAM5O,EAAAA,EAAAA,KAAC23E,EAAAA,IAAgB,IACvB38D,QAAS,WAAF,OAAQm8D,GAAO,EAACp3E,SAEtBgB,EAAKI,UAAUC,sBAQhC,ECnJMq+E,GAAe,eACfC,GAAc,cACdC,GAAe,eACfC,GAAmB,mBACnBC,GAAgB,gBAQpBC,GALsB,wBAMtBC,GALsB,wBAQlB5+D,IAAYjB,EAAAA,EAAAA,GAAW,CAC3B8/D,cAAe,CACbp9D,SAAU,WACVlE,QAAS,cACTI,WAAY,SACZD,eAAgB,QAElBohE,wBAAsB93E,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAA,CACpBya,SAAU,WACVlE,QAAS,cACTwhE,YAAa,OACbphE,WAAY,SACZqhE,aAAc,SACd5gE,SAAU,QAEV6gE,iBAAiB,WAAD3yE,OAAagyE,GAAY,SACzCY,oBAAoB,uBAAD5yE,OAAyBgyE,GAAY,WACvDA,GAAe,QACfC,GAAc,OAAK,YACT,QAAM,cACJ,OAEfY,QAAMn4E,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAA,GACHw3E,GAAe31D,GAAAA,EAAOu2D,8BACtBX,GAAmB51D,GAAAA,EAAOw2D,8BAC1BX,GAAgB71D,GAAAA,EAAOw2D,8BACxB,UAAQr4E,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAA,GACL03E,GAAgB71D,GAAAA,EAAOy2D,mCACvBb,GAAmB51D,GAAAA,EAAOy2D,oCAE7B,WAASt4E,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAA,GACN03E,GAAgB71D,GAAAA,EAAO02D,qCACvBd,GAAmB51D,GAAAA,EAAO02D,sCAE7B,kCAAgCv4E,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAA,GAC7Bw3E,GAAe,cACfE,GAAgB,aAChBD,GAAmB,aACpB,UAAQz3E,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAA,GACL03E,GAAgB,aAChBD,GAAmB,eAI1Be,MAAI7sE,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACC6K,EAAAA,GAAWK,aAAagL,GAAAA,EAAO+yC,qBAAmB,IACrD6jB,aAAc,IACdC,WAAY,IACZC,gBAAiB,IACjBC,cAAe,IACfn+D,SAAU,WACVo+D,kBAAmB,OAEnBxf,gBAAgB,qCAAD/zD,OACPkyE,GAAY,qBAAAlyE,OACZkyE,GAAY,UAAAlyE,OAASqyE,GAAoB,kBAAAryE,OACzCmyE,GAAgB,UAAAnyE,OAASqyE,GAAoB,kBAAAryE,OAC7CmyE,GAAgB,UAAAnyE,OAASsyE,GAAoB,kBAAAtyE,OAC7CkyE,GAAY,UAAAlyE,OAASsyE,GAAoB,YAEjD7xD,aAAc,MACdD,aAAc,QACdE,aAAcnE,GAAAA,EAAOi3D,uBACrBthF,MAAO,OACPC,OAAO,OAAD6N,OAASiyE,GAAW,OAE5BwB,OAAKptE,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACH8sE,aAAc,IACdC,WAAY,IACZC,gBAAiB,IACjBC,cAAe,IACfn+D,SAAU,WACVjjB,MAAM,OAAD8N,OAASgyE,GAAY,KAC1B7/E,OAAO,OAAD6N,OAASgyE,GAAY,KAC3B/lD,OAAQ,UACRzL,aAAc,OACd+yD,kBAAmB,QAChBriE,EAAAA,GAAWK,aAAagL,GAAAA,EAAOizC,uBAAqB,IACvD/9C,UAAU,kBAADzR,OAAoBgyE,GAAY,YAAAhyE,OAAWuc,GAAAA,EAAOm3D,wBAAuB,UAClFliE,gBAAgB,OAADxR,OAASoyE,GAAa,KACrC,YAAU/rE,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACR8O,SAAU,WACVvB,IAAK,MACLuF,KAAM,MACNtF,OAAQ,MACRuF,MAAO,OACJlI,EAAAA,GAAWK,aAAagL,GAAAA,EAAOizC,uBAAqB,IACvDroC,UAAW,aACX+D,QAAS,MACNha,EAAAA,GAAWQ,OAAO,YAAD1R,OAAagyE,GAAY,YAAY,QAASz1D,GAAAA,EAAOo3D,sBAE3Ej4D,UAAW,qBAEbk4D,YAAUvtE,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACR8sE,aAAc,IACdC,WAAY,KACZC,gBAAiB,IACjBC,cAAe,KACfO,cAAe,OACfp6D,QAAS,KACNvI,EAAAA,GAAWqB,OAAO,IAClBrB,EAAAA,GAAWC,QAAQ,IAExB2iE,cAAe,CACb,wDAAsDztE,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACpD6kB,QAAS,KACT/V,SAAU,WACV0+D,cAAe,OACf5/D,OAAQ,GAEL/C,EAAAA,GAAWQ,OAAO,MAAO,QAAS6K,GAAAA,EAAOw3D,oBACzC7iE,EAAAA,GAAWK,aAAagL,GAAAA,EAAOy3D,qBAAmB,IAErDpgE,IAAK,OACLwF,MAAO,OACPvF,OAAQ,OACRsF,KAAM,UAGV86D,cAAe,CACb,wDAAsD5tE,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACpD6kB,QAAS,KACT/V,SAAU,WACV0+D,cAAe,OACf5/D,OAAQ,GAEL/C,EAAAA,GAAWQ,OAAO,MAAO,QAAS6K,GAAAA,EAAOw3D,oBACzC7iE,EAAAA,GAAWK,aAAagL,GAAAA,EAAOy3D,qBAAmB,IAErDpgE,IAAK,OACLwF,MAAO,OACPvF,OAAQ,OACRsF,KAAM,UAGV+6D,SAAU,CACR/6D,KAAK,OAADnZ,OAASqyE,GAAoB,MAEnC8B,SAAU,CACRh7D,KAAK,OAADnZ,OAASsyE,GAAoB,QAI/B8B,GAAa,SAAC3rE,EAAOrQ,EAAKC,GAAG,OAAMA,IAAQD,EAAM,GAAMqQ,EAAQrQ,IAAQC,EAAMD,GAAQ,GAAG,EAExFi8E,GAAS,SAAChgE,GACd,IACEigE,EAGEjgE,EAHFigE,SACAC,EAEElgE,EAFFkgE,gBACAzgF,EACEugB,EADFvgB,UAGF8V,GAAoCC,EAAAA,EAAAA,WAAS,GAAMC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAA5C4qE,EAAU1qE,EAAA,GAAE2qE,EAAa3qE,EAAA,GAoChC,OAvBAI,EAAAA,EAAAA,YAAU,WACR,GAAIsqE,EAAY,CACd,IAAME,EAAc,SAACxpE,GACnB,IAAMw3D,EAAW6R,EAAgBrpE,GACjCopE,EAAS5R,EACX,EACMiS,EAAY,SAACzpE,GACjBupE,GAAc,GACd,IAAM/R,EAAW6R,EAAgBrpE,GACjCopE,EAAS5R,GAAU,GACnBt+C,SAASwwD,oBAAoB,YAAaF,GAC1CtwD,SAASwwD,oBAAoB,UAAWD,EAC1C,EAGA,OAFAvwD,SAASiqC,iBAAiB,YAAaqmB,GACvCtwD,SAASiqC,iBAAiB,UAAWsmB,GAC9B,WACLvwD,SAASwwD,oBAAoB,YAAaF,GAC1CtwD,SAASwwD,oBAAoB,UAAWD,EAC1C,CACF,CACA,OAAO,WAAO,CAChB,GAAG,CAACJ,EAAiBC,EAAYF,KAG/B/hF,EAAAA,EAAAA,KAAA,OACE6qB,KAAK,eACLtpB,UAAWA,EACX+gF,YAAa,SAAC3pE,GACZ4pE,QAAQC,IAAI7pE,GAvCE,SAACA,GACnB,GAAiB,IAAbA,EAAE0Q,OAAN,CAGA64D,GAAc,GACd,IAAM/R,EAAW6R,EAAgBrpE,GACjCopE,EAAS5R,GACTx3D,EAAEsP,kBACFtP,EAAEuP,gBALF,CAMF,CA+BMo6D,CAAY3pE,EACd,GAGN,EAKa8pE,GAA+B,SAAC3gE,GAC3C,IAAM4gE,GAAarW,EAAAA,GAAAA,IAAM,aACnBsW,GAAatW,EAAAA,GAAAA,IAAM,aAEvBxmE,EAOEic,EAPFjc,IACAC,EAMEgc,EANFhc,IACAC,EAKE+b,EALF/b,UACAhF,EAIE+gB,EAJF/gB,KACA6hF,EAGE9gE,EAHF8gE,kBACAC,EAEE/gE,EAFF+gE,kBACA5mD,EACEna,EADFma,SAGF4b,GAAgCvgC,EAAAA,EAAAA,UAASsrE,GAAkB9qC,GAAAtgC,EAAAA,GAAAA,GAAAqgC,EAAA,GAApDirC,EAAQhrC,EAAA,GAAEirC,EAAWjrC,EAAA,GAC5BijB,GAAgCzjD,EAAAA,EAAAA,UAASurE,GAAkB7nB,GAAAxjD,EAAAA,GAAAA,GAAAujD,EAAA,GAApDioB,EAAQhoB,EAAA,GAAEioB,EAAWjoB,EAAA,GACtBn6C,EAAUM,KACV+hE,GAAe5gE,EAAAA,EAAAA,UAEf6gE,GAAch7E,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAA,GACjB23E,GAAoC,MAAZgD,EAAmB,KAAI,GAAAr1E,OAAMo0E,GAAWiB,EAAUj9E,EAAKE,GAAU,MACzFg6E,GAAoC,MAAZiD,EAAmB,OAAM,GAAAv1E,OAAMo0E,GAAWmB,EAAUn9E,EAAKE,GAAU,MAGxFq9E,EAAqB,SAACltE,EAAOmtE,GACjC,IAAMlT,EAAWxjE,KAAK9G,IAAI8G,KAAK9G,IAAIm9E,GAAYj9E,EAAWD,GAAM6G,KAAK7G,IAAID,EAAKqQ,IAC9E6sE,EAAY5S,GACRkT,GACFpnD,EAAS,CAAEmjD,eAAgBjP,EAAUkP,eAAgB2D,GAEzD,EAEMM,EAAqB,SAACptE,EAAOmtE,GACjC,IAAMlT,EAAWxjE,KAAK9G,IAAIE,EAAW4G,KAAK7G,IAAIg9E,GAAY,EAAG5sE,IAC7D+sE,EAAY9S,GACRkT,GACFpnD,EAAS,CAAEmjD,eAAgB0D,EAAUzD,eAAgBlP,GAEzD,EAEM6R,EAAkB,SAAHlhF,GAEd,IADLyiF,EAAOziF,EAAPyiF,QAEA,IAAKL,EAAa5zD,QAChB,OAAO,KAET,IAAMk0D,EAAeN,EAAa5zD,QAAQm0D,wBAExC78D,EAEE48D,EAFF58D,KACAjnB,EACE6jF,EADF7jF,MAGI2hC,EAAIiiD,EAAU38D,EACpB,OAAO+e,SAASh5B,KAAK9G,IAAIE,EAAW4G,KAAK7G,IAAID,EAAOy7B,EAAI3hC,GAAUoG,EAAYF,GAAQA,IAAO,GAC/F,EAkBA,OACEpG,EAAAA,EAAAA,MAAA,OAAK8B,WAAWwf,EAAAA,EAAAA,GAAa,iBAAkBF,EAAQm/D,eAAejgF,SAAA,EACpEN,EAAAA,EAAAA,MAAA,OAAKsiB,IAAKmhE,EAAc3hF,WAAWwf,EAAAA,EAAAA,GAAa,2BAA4BF,EAAQo/D,uBAAwBp/D,EAAQy/D,QAASl1C,MAAO+3C,EAAepjF,SAAA,EACjJC,EAAAA,EAAAA,KAAA,SACEwL,KAAK,QACL3F,IAAKA,EACLC,IAAKC,EACLmQ,MAAO4sE,EACP5iF,GAAIwiF,EACJnhF,WAAWwf,EAAAA,EAAAA,GAAaF,EAAQwgE,WAAYxgE,EAAQ0gE,cAAe,aACnEtlD,SAAU,SAACtjB,GACTyqE,EAAmBz9C,SAAShtB,EAAEgX,OAAOzZ,MAAO,KAAK,EACnD,EACA,aAAYnV,EAAKI,UAAUC,yBAAgC,CAAE8U,MAAO4sE,OAEtE9iF,EAAAA,EAAAA,KAAA,SACEwL,KAAK,QACL3F,IAAKA,EACLC,IAAKC,EACLmQ,MAAO8sE,EACP9iF,GAAIyiF,EACJphF,WAAWwf,EAAAA,EAAAA,GAAaF,EAAQwgE,WAAYxgE,EAAQ6gE,cAAe,aACnEzlD,SAAU,SAACtjB,GACT2qE,EAAmB39C,SAAShtB,EAAEgX,OAAOzZ,MAAO,KAAK,EACnD,EACA,aAAYnV,EAAKI,UAAUC,yBAAgC,CAAE8U,MAAO8sE,EAAWl9E,EAAM,YAAck9E,OAErGhjF,EAAAA,EAAAA,KAAA,OACE6qB,KAAK,eACLtpB,WAAWwf,EAAAA,EAAAA,GAAa,iCAAkCF,EAAQ8/D,MAClE3lE,QAAS,SAACrC,IA9CE,SAACA,GACnB,IAAMzC,EAAQ8rE,EAAgBrpE,GACjB,MAATzC,IAGkBvJ,KAAKy7B,KAAK06C,GAAY,GAAK5sE,GAC3BvJ,KAAKy7B,KAAK46C,GAAYj9E,GAAamQ,GAErDktE,EAAmBltE,GAAO,GAE1BotE,EAAmBptE,GAAO,GAGhC,CAkCUwtE,CAAY/qE,EACd,KAEF3Y,EAAAA,EAAAA,KAAC8hF,GAAM,CACL5rE,MAAO4sE,EACPf,SAAUqB,EACVpB,gBAAiBA,EACjBzgF,WAAWwf,EAAAA,EAAAA,GAAa,qCAAsCF,EAAQ8gE,SAAU9gE,EAAQqgE,UAE1FlhF,EAAAA,EAAAA,KAAC8hF,GAAM,CACL5rE,MAAO8sE,EACPjB,SAAUuB,EACVtB,gBAAiBA,EACjBzgF,WAAWwf,EAAAA,EAAAA,GAAa,qCAAsCF,EAAQ+gE,SAAU/gE,EAAQqgE,aAG5FlhF,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,aAAYxB,SACxBijF,EAAWl9E,GAAmB,MAAZk9E,EAAgB,SAAAv1E,OAAO1M,EAAKI,UAAUC,oBAA2B,CAClFyE,IAAKi9E,KACA/hF,EAAKI,UAAUC,8BAAqC,CACzDyE,IAAKi9E,EACLh9E,IAAKk9E,QAKf,EAUAP,GAA6BxhE,aAAe,CAC1Cpb,IAAK,EACLC,IAAK,IACLC,UAAW,K,iBCrWPob,IAAYjB,EAAAA,EAAAA,GAAW,CAC3B28D,aAAc,CACZt9D,SAAU,WAIDokE,GAAqB,SAAC7hE,GACjC,IACE/gB,EAIE+gB,EAJF/gB,KACAQ,EAGEugB,EAHFvgB,UACAyZ,EAEE8G,EAFF9G,QACA8T,EACEhN,EADFgN,QAGIjO,EAAUM,KACVhV,EAAOpL,EAAKI,UAAUC,UAE5B,OACEpB,EAAAA,EAAAA,KAAA,OAAKuB,UAAWA,EAAUxB,UACxBC,EAAAA,EAAAA,KAAC4jF,GAAAA,EAAY,CAEXriF,WAAWwf,EAAAA,EAAAA,GAAa,uBAAwBF,EAAQg8D,cACxD/tD,QAASA,EACTlgB,MAAM5O,EAAAA,EAAAA,KAAC6jF,GAAAA,IAAe,IACtB7oE,QAAS,WACPA,GACF,EAAEjb,SAEDoM,GARG,WAYZ,E,aC/BM4yB,IAAY+kD,EAAAA,GAAAA,qBAAoBz1E,KAAK,CAAElB,MAAO,IAC9C42E,GAAgB,CAAEv1E,MAAOuwB,GAAWtwB,IAAKswB,ICVlCilD,GAAgBn/D,EAAAA,cAAoB,CAAC,GCiBrCo/D,GAAoB,SAAHnjF,GAOvB,IANL8a,EAAM9a,EAAN8a,OACA7a,EAAID,EAAJC,KACAmjF,EAAcpjF,EAAdojF,eACAzH,EAAiB37E,EAAjB27E,kBACA0H,EAAuBrjF,EAAvBqjF,wBACAC,EAAuBtjF,EAAvBsjF,wBAGEC,GACE91B,EAAAA,EAAAA,YAAWy1B,IADbK,aAGFC,EC7ByC,SAAHxjF,GAAiC,IAA3B8a,EAAM9a,EAAN8a,OAAQs4D,EAAWpzE,EAAXozE,YACpD78D,GAA8DC,EAAAA,EAAAA,WAAS,GAAMC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAAtEktE,EAAuBhtE,EAAA,GAAEitE,EAA0BjtE,EAAA,GAS1D,MAAO,CACLktE,gBATsB,WACtB7oE,EAAOi2B,SAAS,wBAAyB,CAAE0yC,yBAA0BA,IACjErQ,GACFA,IAEFsQ,GAA4BD,EAC9B,EAIEA,wBAAAA,EAEJ,CDkBMG,CAA4B,CAAE9oE,OAAAA,IAFhC6oE,EAAeH,EAAfG,gBACAF,EAAuBD,EAAvBC,wBAGFI,EEhC+B,SAAH7jF,GAAuC,IAAjCC,EAAID,EAAJC,KAAM6a,EAAM9a,EAAN8a,OAAQs4D,EAAWpzE,EAAXozE,YAC1C0Q,GAAa34E,EAAAA,GAAAA,GAAoBlL,GAEvCsW,GAA8CC,EAAAA,EAAAA,WAAS,WACrD,IAAMutE,EAAe,CAAC,EAKtB,OAJAD,EAAW17C,SAAQ,SAAC0jC,GAClBiY,EAAajY,EAAO1gE,MAAO,CAC7B,IACA24E,EAAax8E,GAAAA,GAAgBG,MAAO,EAC7Bq8E,CACT,IAAEttE,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAPKytE,EAAevtE,EAAA,GAAEwtE,EAAkBxtE,EAAA,GA6BpCytE,EAAkBF,EAAgBz8E,GAAAA,GAAgBC,OAClD28E,EAAkBH,EAAgBz8E,GAAAA,GAAgBE,OAExD,MAAO,CACL28E,gBAxBsB,SAACh5E,GACvB,IAAMi5E,EAAqB,CAAC,EAC5BP,EAAW17C,SAAQ,SAAC0jC,GAClB,IAAawY,EAAcxY,EAAnB1gE,IAENi5E,EAAmBC,GADjBA,IAAcl5E,IACiB44E,EAAgBM,EAIrD,KACgC,IAA5BD,EAAmBj5E,KACrBi5E,EAAmB98E,GAAAA,GAAgBG,MAAO,GAE5CoT,EAAOi2B,SAAS,mCAAoC,CAAEizC,gBAAiBK,IACnEjR,GACFA,IAEF6Q,EAAmBI,EACrB,EAOEL,gBAAAA,EACAF,WAAAA,EACAI,gBAAAA,EACAC,gBAAAA,EAEJ,CFJMI,CAAkB,CAAEzpE,OAAAA,EAAQ7a,KAAAA,IAL9BmkF,EAAeP,EAAfO,gBACAJ,EAAeH,EAAfG,gBACAF,EAAUD,EAAVC,WACAI,EAAeL,EAAfK,gBACAC,EAAeN,EAAfM,gBAGFK,EGzC+B,SAAHxkF,GAAyD,IAAnD8a,EAAM9a,EAAN8a,OAAQs4D,EAAWpzE,EAAXozE,YAAWqR,EAAAzkF,EAAE27E,kBAAAA,OAAiB,IAAA8I,EAAG,GAAEA,EAC7EluE,GAAoCC,EAAAA,EAAAA,UAASmlE,GAAkBllE,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAAxD4iC,EAAU1iC,EAAA,GAAEiuE,EAAajuE,EAAA,GAC1BkuE,GAAqBnjE,EAAAA,EAAAA,QAAO,IAC5B+5D,GAAuBn3D,EAAAA,EAAAA,cAAY,SAACm6B,EAAK8wB,GAC7CsV,EAAmBn2D,QAAU6gD,GAAY,EAC3C,GAAG,IAEGoM,GAAmBr3D,EAAAA,EAAAA,cAAY,WACnCsgE,EAAcC,EAAmBn2D,QACnC,GAAG,IAEGgtD,GAAqBp3D,EAAAA,EAAAA,cAAY,SAACirD,GAClCA,IAAal2B,IACfr+B,EAAOi2B,SAAS,uBAAwB,CAAEoI,WAAYk2B,IACtDqV,EAAcrV,IAEZ+D,GACFA,GAEJ,GAAG,CAACt4D,EAAQq+B,EAAYi6B,IAElBsI,GAAoBt3D,EAAAA,EAAAA,cAAY,WAC/B3Y,IAAAA,QAAU0tC,KACbr+B,EAAOi2B,SAAS,uBAAwB,CAAEoI,WAAY,YACtDurC,EAAc,IACdC,EAAmBn2D,QAAU,GAEjC,GAAG,CAAC1T,EAAQq+B,IAEZ,MAAO,CACLA,WAAAA,EACAoiC,qBAAAA,EACAE,iBAAAA,EACAD,mBAAAA,EACAE,kBAAAA,EAEJ,CHWMkJ,CAAkB,CAAE9pE,OAAAA,EAAQ6gE,kBAAAA,IAL9BxiC,EAAUqrC,EAAVrrC,WACAoiC,EAAoBiJ,EAApBjJ,qBACAE,EAAgB+I,EAAhB/I,iBACAD,EAAkBgJ,EAAlBhJ,mBACAE,EAAiB8I,EAAjB9I,kBAGFmJ,EI9C4B,SAAH7kF,GAKpB,IAJL8a,EAAM9a,EAAN8a,OACA7a,EAAID,EAAJC,KACAmzE,EAAWpzE,EAAXozE,YACAgQ,EAAcpjF,EAAdojF,eAEA7sE,GAA4BC,EAAAA,EAAAA,WAAS,WACnC,OAAI4sE,GAAkBA,EAAen1E,OAC5Bm1E,EAAen1E,OAEjB7L,GAAAA,GAAWG,UACpB,IAAEkU,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GALKtI,EAAMwI,EAAA,GAAEquE,EAASruE,EAAA,IAOxBI,EAAAA,EAAAA,YAAU,WACJusE,GAAkBA,EAAen1E,QACnC62E,EAAU1B,EAAen1E,OAE7B,GAAG,CAAC62E,EAAW1B,IAEf,IAAM2B,GAAiB9hE,EAAAA,EAAAA,UACrB,kBAAMpV,EAAAA,GAAAA,IAAkB5N,EAAK,GAC7B,CAACA,IAGG+kF,GAAgB5gE,EAAAA,EAAAA,cAAY,SAAC6gE,GACjC,IAAMC,EAAmBz9C,OAAO09C,OAAO/iF,GAAAA,IACnCgjF,EAAehjF,GAAAA,GAAWG,WAK9B,OAJIkJ,IAAAA,SAAWy5E,EAAkBD,KAC/BG,EAAeH,GAEjBH,EAAUM,GACHA,CACT,GAAG,IAEGC,GAAiBjhE,EAAAA,EAAAA,cAAY,SAACkhE,EAAMvyE,GACxC,GAAIA,EAAM,CACR,IAAMkyE,EAASD,EAAcjyE,EAAK3H,KAClC0P,EAAOi2B,SAAS,iBAAkB,CAAEw0C,OAAQN,IACxC7B,GAEFA,EAAe0B,UAAUG,GAEvB7R,GACFA,GAEJ,MAEEt4D,EAAOE,SAAS,8BAEpB,GAAG,CAACgqE,EAAelqE,EAAQsoE,EAAgBhQ,IAE3C,MAAO,CACLnlE,OAAAA,EACA82E,eAAAA,EACAD,UAAWE,EACXK,eAAAA,EAEJ,CJNMG,CAAe,CAAE1qE,OAAAA,EAAQ7a,KAAAA,EAAMmjF,eAAAA,IAJjCn1E,EAAM42E,EAAN52E,OACA82E,EAAcF,EAAdE,eACAD,EAASD,EAATC,UACAO,EAAcR,EAAdQ,eAGFI,EF7C+B,SAAHzlF,GAKvB,IAJL8a,EAAM9a,EAAN8a,OACA7a,EAAID,EAAJC,KACAylF,EAAY1lF,EAAZ0lF,aACAtS,EAAWpzE,EAAXozE,YAEA78D,GAA8CC,EAAAA,EAAAA,UAAStR,GAAAA,GAAcC,SAAQsR,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAAtEovE,EAAelvE,EAAA,GAAEmvE,EAAkBnvE,EAAA,GAE1CsgC,GAA4EvgC,EAAAA,EAAAA,UAASysE,IAAcjsC,GAAAtgC,EAAAA,GAAAA,GAAAqgC,EAAA,GAA5F8uC,EAA8B7uC,EAAA,GAAE8uC,EAAiC9uC,EAAA,GAElE+uC,GAAyB9iE,EAAAA,EAAAA,UAC7B,kBAAMpW,EAAAA,GAAAA,IAA0B5M,EAAMylF,EAAa,GACnD,CAACzlF,EAAMylF,IAGHM,GAA0B5hE,EAAAA,EAAAA,cAAY,SAAAlP,GAA8C,IAAhC+wE,EAAE/wE,EAAb8lE,UAAgCkL,EAAGhxE,EAApB8jE,gBACxDiN,IAAON,IACT7qE,EAAOi2B,SAAS,0BAA2B,CAAE40C,gBAAiBM,IAC9DL,EAAmBK,GACf7S,GACFA,KAGC71C,GAAoB2oD,EAAKL,KAC5B/qE,EAAOi2B,SAAS,0BAA2B,CAAEioC,gBAAiBp7C,GAA4BsoD,KAC1FJ,EAAkCI,GAC9B9S,GACFA,IAGN,GAAG,CAACuS,EAAiBE,EAAgCzS,EAAat4D,IAElE,MAAO,CACLirE,uBAAAA,EACAJ,gBAAAA,EACAE,+BAAAA,EACAG,wBAAAA,EAEJ,CEYMG,CAAkB,CAAErrE,OAAAA,EAAQ7a,KAAAA,IAJ9B8lF,EAAsBN,EAAtBM,uBACAJ,EAAeF,EAAfE,gBACAE,EAA8BJ,EAA9BI,+BACAG,EAAuBP,EAAvBO,wBAGFI,EK5DkC,SAAHpmF,GAK1B,IAJL8a,EAAM9a,EAAN8a,OACA7a,EAAID,EAAJC,KACAmzE,EAAWpzE,EAAXozE,YAAWiT,EAAArmF,EACXsmF,qBAAAA,OAAoB,IAAAD,EAAG,GAAEA,EAEzB9vE,GAAwCC,EAAAA,EAAAA,UAAS,IAAGC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAA7Cq0C,EAAYn0C,EAAA,GAAE8vE,EAAe9vE,EAAA,GAE9B+vE,GAAqBvjE,EAAAA,EAAAA,UAAQ,WACjC,IAAMoC,GAAUtX,EAAAA,GAAAA,IAAsB9N,GACtC,OAAKwL,IAAAA,QAAU66E,GAIRjhE,EAHEA,EAAQlL,QAAO,SAAAjF,GAAA,IAAG9J,EAAG8J,EAAH9J,IAAG,OAAQk7E,EAAqBjsE,SAASjP,EAAI,GAI1E,GAAG,CAACk7E,EAAsBrmF,IAEpBwmF,GAA4BriE,EAAAA,EAAAA,cAAY,SAACsiE,GACxCj7E,IAAAA,QAAUm/C,EAAc87B,KAC3BH,EAAgBG,GAChB5rE,EAAOi2B,SAAS,4BAA6B,CAAE6Z,cAAeA,GAAgB,IAAIh+C,KAAK,OACnFwmE,GACFA,IAGN,GAAG,CAACxoB,EAAcwoB,EAAat4D,IAE/B,MAAO,CACL8vC,aAAAA,EACA47B,mBAAAA,EACAC,0BAAAA,EAEJ,CLgCME,CAAqB,CAAE7rE,OAAAA,EAAQ7a,KAAAA,IAHjC2qD,EAAYw7B,EAAZx7B,aACA47B,EAAkBJ,EAAlBI,mBACAC,EAAyBL,EAAzBK,0BAGFG,EMnEkC,SAAH5mF,GAI1B,IAHL8a,EAAM9a,EAAN8a,OACA7a,EAAID,EAAJC,KACAmzE,EAAWpzE,EAAXozE,YAEA78D,GAAwCC,EAAAA,EAAAA,UAAS,MAAKC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAA/Co0C,EAAYl0C,EAAA,GAAEowE,EAAepwE,EAAA,GAE9BqwE,GAAsB7jE,EAAAA,EAAAA,UAAQ,kBAAMrV,EAAAA,GAAAA,IAAuB3N,EAAK,GAAE,CAACA,IAEnE8mF,GAA6B3iE,EAAAA,EAAAA,cAAY,SAAC4iE,GAC1Cr8B,IAAiBq8B,IACnBH,EAAgBG,GAChBlsE,EAAOi2B,SAAS,6BAA8B,CAAE4Z,aAAcq8B,IAC1D5T,GACFA,IAGN,GAAG,CAACA,EAAazoB,EAAc7vC,IAE/B,MAAO,CACL6vC,aAAAA,EACAm8B,oBAAAA,EACAC,2BAAAA,EAEJ,CN+CME,CAAqB,CAAEnsE,OAAAA,EAAQ7a,KAAAA,IAHjC0qD,EAAYi8B,EAAZj8B,aACAm8B,EAAmBF,EAAnBE,oBACAC,EAA0BH,EAA1BG,2BAGFG,EO5E+B,SAAHlnF,GAEvB,IADL8a,EAAM9a,EAAN8a,OAAQs4D,EAAWpzE,EAAXozE,YAER78D,GAA4CC,EAAAA,EAAAA,UAAS,MAAKC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAAnD4wE,EAAc1wE,EAAA,GAAE2wE,EAAiB3wE,EAAA,GACxCsgC,GAA8CvgC,EAAAA,EAAAA,UAAS,MAAKwgC,GAAAtgC,EAAAA,GAAAA,GAAAqgC,EAAA,GAArDswC,EAAerwC,EAAA,GAAEswC,EAAkBtwC,EAAA,GAEpCuwC,GAA0BnjE,EAAAA,EAAAA,cAAY,SAAAlP,GAAoC,IAAjC6gE,EAAW7gE,EAAX6gE,YAAaD,EAAY5gE,EAAZ4gE,aACtDC,IAAgBoR,IAClBrsE,EAAOi2B,SAAS,0BAA2B,CAAEtyB,SAAUs3D,IACvDqR,EAAkBrR,GACd3C,GACFA,KAGA0C,IAAiBuR,IACnBvsE,EAAOi2B,SAAS,0BAA2B,CAAE57B,UAAW2gE,IACxDwR,EAAmBxR,GACf1C,GACFA,IAGN,GAAG,CAACA,EAAat4D,EAAQusE,EAAiBF,IAE1C,MAAO,CACLA,eAAAA,EACAE,gBAAAA,EACAE,wBAAAA,EAEJ,CPoDMC,CAAkB,CAAE1sE,OAAAA,EAAQ7a,KAAAA,IAH9BknF,EAAcD,EAAdC,eACAE,EAAeH,EAAfG,gBACAE,EAAuBL,EAAvBK,wBAGFE,EQlFmC,SAAHznF,GAK3B,IAJL8a,EAAM9a,EAAN8a,OACAs4D,EAAWpzE,EAAXozE,YAAWsU,EAAA1nF,EACXqjF,wBAAAA,OAAuB,IAAAqE,EAAG,KAAIA,EAAAC,EAAA3nF,EAC9BsjF,wBAAAA,OAAuB,IAAAqE,EAAG,KAAIA,EAE9BpxE,GAAkDC,EAAAA,EAAAA,UAAS6sE,GAAwB5sE,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAA5EurE,EAAiBrrE,EAAA,GAAEmxE,EAAoBnxE,EAAA,GAC9CsgC,GAAkDvgC,EAAAA,EAAAA,UAAS8sE,GAAwBtsC,GAAAtgC,EAAAA,GAAAA,GAAAqgC,EAAA,GAA5EgrC,EAAiB/qC,EAAA,GAAE6wC,EAAoB7wC,EAAA,GAExC8wC,GAA8B1jE,EAAAA,EAAAA,cAAY,SAAAlP,GAAyC,IAAtCopE,EAAcppE,EAAdopE,eAAgBC,EAAcrpE,EAAdqpE,eAC7DD,IAAmBwD,IACrBhnE,EAAOi2B,SAAS,8BAA+B,CAAEosC,YAAamB,IAC9DsJ,EAAqBtJ,GACjBlL,GACFA,KAGAmL,IAAmBwD,IACrBjnE,EAAOi2B,SAAS,8BAA+B,CAAEssC,YAAakB,IAC9DsJ,EAAqBtJ,GACjBnL,GACFA,IAGN,GAAG,CAACA,EAAat4D,EAAQinE,EAAmBD,IAE5C,MAAO,CACLA,kBAAAA,EACAC,kBAAAA,EACA+F,4BAAAA,EAEJ,CRuDMC,CAAsB,CACxBjtE,OAAAA,EACA7a,KAAAA,EACAojF,wBAAAA,EACAC,wBAAAA,IAPAxB,EAAiB2F,EAAjB3F,kBACAC,EAAiB0F,EAAjB1F,kBACA+F,EAA2BL,EAA3BK,4BAQIE,EAA0BrC,IAAoBzgF,GAAAA,GAAcC,QAC5D8iF,EAA8C,OAAjBt9B,EAC7Bu9B,EAA4Bt9B,EAAaz2C,OAAS,EAElDg0E,IAA2BllE,EAAAA,EAAAA,UAC/B,WACE,SAAIihE,IACEiD,IAAkBE,QAIpBlD,IACErC,IAAqBC,KAIpBiG,GAA2BC,GAA8BC,GAClE,GACA,CAACA,EACCF,EACA9D,EACA+D,EAA4B9D,EAAiBpC,EAAmBD,EAAmBuF,EAAiBF,IAyBxG,OAtBAtwE,EAAAA,EAAAA,YAAU,WACR0sE,EAAa,CACX6E,WAAY,WAAF,MACP,CACClE,gBAAAA,EACAC,gBAAAA,EACAH,gBAAAA,EACA7qC,WAAAA,EACAlrC,OAAAA,EACA03E,gBAAAA,EACAE,+BAAAA,EACAl7B,aAAAA,EACAC,aAAAA,EACAu8B,eAAAA,EACAE,gBAAAA,EACAvF,kBAAAA,EACAC,kBAAAA,EACD,GAEP,GAAG,CAACn3B,EAAco5B,EAAiB2B,EAAiBE,EAAgCl7B,EAClFu5B,EAAiBC,EAAiBpC,EAAmBD,EAAmBuF,EAAiBF,EAAgBhuC,EAAYoqC,EAAct1E,IAE9H,CACL01E,gBAAAA,EACAF,wBAAAA,EACA0E,yBAAAA,GACA/D,gBAAAA,EACAF,gBAAAA,EACAC,gBAAAA,EACAH,gBAAAA,EACAF,WAAAA,EAEA3qC,WAAAA,EACAoiC,qBAAAA,EACAE,iBAAAA,EACAD,mBAAAA,EACAE,kBAAAA,EAEAztE,OAAAA,EACA82E,eAAAA,EACAD,UAAAA,EACAO,eAAAA,EAEAU,uBAAAA,EACAJ,gBAAAA,EACAE,+BAAAA,EACAG,wBAAAA,EAEAr7B,aAAAA,EACAm8B,oBAAAA,EACAC,2BAAAA,EAEAn8B,aAAAA,EACA47B,mBAAAA,EACAC,0BAAAA,EAEAU,eAAAA,EACAE,gBAAAA,EACAE,wBAAAA,EAEAzF,kBAAAA,EACAC,kBAAAA,EACA+F,4BAAAA,EAEJ,ESlJMO,IAAqBjpE,EAAAA,EAAAA,GAAW,CACpCkpE,UAAW,CACT1qE,QAAS,OACT+sD,UAAW,MACX4d,OAAQ,MACRnwD,SAAU,OACV,WAAY,CACVpZ,WAAY,WAGhBwpE,UAAW,CACT/hE,SAAU,KAIRgiE,IAAmCv7D,EAAAA,GAAAA,IAAela,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CACvDyjB,UAAW,OACX7Y,QAAS,OACT+sD,UAAW,MACX4d,OAAQ,MACRnwD,SAAU,OACV,WAAY,CACVpZ,WAAY,SACZO,MAAO2J,GAAAA,EAAOw/D,0BAEb7qE,EAAAA,GAAWK,aAAa,QACxBL,EAAAA,GAAWQ,OAAO,MAAO,QAAS,YAClCR,EAAAA,GAAWC,QAAQ,MAAO,SAAO,IACpCM,UAAW,sCACXJ,WAAY,SACZ,uBAAwB,CACtB,UAAW,CACT0B,WAAYwJ,GAAAA,EAAOy/D,oBAErBppE,MAAO2J,GAAAA,EAAO4qD,kCACdp0D,WAAY,YAIVkpE,IAA+BxpE,EAAAA,EAAAA,GAAW,CAC9CypE,KAAM,CACJjrE,QAAS,QAEX4qE,UAAW,CACT/hE,SAAU,GAEZqiE,WAAY,CACVjqF,MAAO,UAILkqF,GAAsB,SAAC/nE,GAC3B,IACE/gB,EAyBE+gB,EAzBF/gB,KACAq8D,EAwBEt7C,EAxBFs7C,WACA4nB,EAuBEljE,EAvBFkjE,gBACAC,EAsBEnjE,EAtBFmjE,gBACArpE,EAqBEkG,EArBFlG,OACAhO,EAoBEkU,EApBFlU,SACAixB,EAmBE/c,EAnBF+c,WACAgoD,EAkBE/kE,EAlBF+kE,uBACAJ,EAiBE3kE,EAjBF2kE,gBACAE,EAgBE7kE,EAhBF6kE,+BACAG,EAeEhlE,EAfFglE,wBACAvC,EAcEziE,EAdFyiE,wBACAxnE,EAaE+E,EAbF/E,0BACA0uC,EAYE3pC,EAZF2pC,aACAm8B,EAWE9lE,EAXF8lE,oBACAC,EAUE/lE,EAVF+lE,2BACAn8B,EASE5pC,EATF4pC,aACA47B,EAQExlE,EARFwlE,mBACAC,EAOEzlE,EAPFylE,0BACAU,EAMEnmE,EANFmmE,eACAE,EAKErmE,EALFqmE,gBACAE,EAIEvmE,EAJFumE,wBACAzF,EAGE9gE,EAHF8gE,kBACAC,EAEE/gE,EAFF+gE,kBACA+F,EACE9mE,EADF8mE,4BAGIkB,EAAcP,KACd1oE,EAAU6oE,KACVK,GAAW1d,EAAAA,GAAAA,IAAM,UACvBh1D,GAAoCC,EAAAA,EAAAA,UAAS,GAAEC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAAxCi+D,EAAU/9D,EAAA,GAAEyyE,EAAazyE,EAAA,GAEhC,OACE9X,EAAAA,EAAAA,MAAA,OACE8B,UAAWgjF,GAA0BxjE,EAAAA,EAAAA,GAAa,wBAAyB+oE,IAAe/oE,EAAAA,EAAAA,GAAa,8BAA+B+oE,EAAajpE,EAAQ8oE,MAC3J9+D,KAAK,QACL,kBAAiBk/D,EAAShqF,SAAA,EAE1BC,EAAAA,EAAAA,KAACw3E,GAAAA,EAAK,CAACj2E,UAAWsf,EAAQ+oE,WAAY1pF,GAAI6pF,EAAShqF,SAAEgB,EAAKI,UAAUC,cACpEpB,EAAAA,EAAAA,KAAA,OAAKuB,UAAWyjF,EAAkB,oBAAsBnkE,EAAQ8oE,KAAK5pF,UACnEC,EAAAA,EAAAA,KAAC4L,GAAe,CACd7K,KAAMA,EACN6a,OAAQA,EACRw5D,gBAAiB6S,EACjB5S,iBAAkB8S,EAClBlsD,SAAUosD,EACV/S,WAAYA,OAGhBt1E,EAAAA,EAAAA,KAAA,OAAKuB,UAAW0jF,EAAkB,wBAA0BpkE,EAAQ8oE,KAAK5pF,UACvEC,EAAAA,EAAAA,KAAC+L,GAAmB,CAClBhL,KAAMA,EACN6a,OAAQA,EACRwiE,mBAAoByE,EACpBxE,mBAAoBuE,EACpB3mD,SAAU2sD,EACVtT,WAAYA,OAGhBt1E,EAAAA,EAAAA,KAAC2L,GAAe,CACd5K,KAAMA,EACN6a,OAAQA,EACRhO,SAAUA,EACVixB,WAAYA,EACZw8C,iBAAkBoL,EAClBnL,uBAAwBqL,EACxBxgE,QAAS0gE,EACT5qD,SAAU6qD,EACVxR,WAAYA,IAEbv4D,IACC/c,EAAAA,EAAAA,KAAC8L,GAAiB,CAChB/K,KAAMA,EACN6a,OAAQA,EACR+hE,4BAA6BjyB,EAC7BvlC,QAASmhE,EACTrrD,SAAUsrD,EACVjS,WAAYA,KAEdv4D,IACA/c,EAAAA,EAAAA,KAAC6L,GAAkB,CACjB9K,KAAMA,EACN6a,OAAQA,EACR05D,WAAYA,EACZ7pB,aAAcA,EACdtlC,QAASyhE,EACT3rD,SAAU4rD,IAEbzqB,IACDp9D,EAAAA,EAAAA,KAAC8gB,EAAAA,EAAM,CACLvf,UAAU,cACV0hB,WAAW,cACXrU,MAAM5O,EAAAA,EAAAA,KAAC23E,EAAAA,IAAgB,IACvB38D,QAAS,WACPgvE,EAAc1U,EAAa,EAC7B,EAAEv1E,SAEDgB,EAAKI,UAAUC,gBAElBpB,EAAAA,EAAAA,KAAA,OAAKuB,UAAWsf,EAAQyoE,cAG9B,EAEaW,GAAkB,SAACnoE,GAC9B,IACE/gB,EAOE+gB,EAPF/gB,KACA6a,EAMEkG,EANFlG,OACA6gE,EAKE36D,EALF26D,kBACAC,EAIE56D,EAJF46D,qBACAwH,EAGEpiE,EAHFoiE,eACAC,EAEEriE,EAFFqiE,wBACAC,EACEtiE,EADFsiE,wBAGIvjE,EAAUsoE,KAChBe,EAWIjG,GAAkB,CACpBroE,OAAAA,EACA7a,KAAAA,EACAmjF,eAAAA,EACAzH,kBAAAA,EACA0H,wBAAAA,EACAC,wBAAAA,IAhBA/H,EAAoB6N,EAApB7N,qBACAE,EAAgB2N,EAAhB3N,iBACAD,EAAkB4N,EAAlB5N,mBACAE,EAAiB0N,EAAjB1N,kBACAztE,EAAMm7E,EAANn7E,OACA82E,EAAcqE,EAAdrE,eACAM,EAAc+D,EAAd/D,eACAvD,EAAiBsH,EAAjBtH,kBACAC,EAAiBqH,EAAjBrH,kBACA+F,EAA2BsB,EAA3BtB,4BAUF,OACE5oF,EAAAA,EAAAA,KAACmqF,GAAAA,EAAc,CAACplE,MAAOqlE,GAAAA,EAAcrqF,UACnCN,EAAAA,EAAAA,MAAA,OAAK8B,UAAWsf,EAAQuoE,UAAUrpF,SAAA,EAChCC,EAAAA,EAAAA,KAACo8E,GAAe,CACdr7E,KAAMA,EACN6a,OAAQA,EACRygE,qBAAsBA,EACtBC,mBAAoBA,EACpBC,iBAAkBA,EAClBC,kBAAmBA,EACnBC,kBAAmBA,EACnBC,qBAAsBA,KAExB18E,EAAAA,EAAAA,KAACyiF,GAA4B,CAC3B1hF,KAAMA,EACN8E,IAAKD,GAAAA,GAAkBC,IACvBC,IAAKF,GAAAA,GAAkBE,IACvB88E,kBAAmBA,EACnBC,kBAAmBA,EACnB5mD,SAAU2sD,EACV7iF,UAAWH,GAAAA,GAAkBG,aAE/B/F,EAAAA,EAAAA,KAAA,OAAKuB,UAAWsf,EAAQyoE,aACxBtpF,EAAAA,EAAAA,KAACo9E,GAAY,CACXr8E,KAAMA,EACN6a,OAAQA,EACRuK,QAAS0/D,EACT5pD,SAAUkqD,EACVp3E,OAAQA,QAKlB,EAEas7E,GAAkB,SAACvoE,GAC9B,IACE/gB,EAKE+gB,EALF/gB,KACA6a,EAIEkG,EAJFlG,OACA6gE,EAGE36D,EAHF26D,kBACAyH,EAEEpiE,EAFFoiE,eACAxH,EACE56D,EADF46D,qBAGI77D,EAAUsoE,KAChBmB,EAQIrG,GAAkB,CACpBroE,OAAAA,EACA7a,KAAAA,EACAmjF,eAAAA,EACAzH,kBAAAA,IAXAJ,EAAoBiO,EAApBjO,qBACAE,EAAgB+N,EAAhB/N,iBACAD,EAAkBgO,EAAlBhO,mBACAE,EAAiB8N,EAAjB9N,kBACAztE,EAAMu7E,EAANv7E,OACA82E,EAAcyE,EAAdzE,eACAM,EAAcmE,EAAdnE,eAQF,OACEnmF,EAAAA,EAAAA,KAACmqF,GAAAA,EAAc,CAACplE,MAAOqlE,GAAAA,EAAcrqF,UACnCN,EAAAA,EAAAA,MAAA,OAAK8B,UAAWsf,EAAQuoE,UAAUrpF,SAAA,EAChCC,EAAAA,EAAAA,KAACo8E,GAAe,CACdr7E,KAAMA,EACN6a,OAAQA,EACRygE,qBAAsBA,EACtBC,mBAAoBA,EACpBC,iBAAkBA,EAClBC,kBAAmBA,EACnBC,kBAAmBA,EACnBC,qBAAsBA,KAExB18E,EAAAA,EAAAA,KAAA,OAAKuB,UAAWsf,EAAQyoE,aACxBtpF,EAAAA,EAAAA,KAACo9E,GAAY,CACXr8E,KAAMA,EACN6a,OAAQA,EACRuK,QAAS0/D,EACT5pD,SAAUkqD,EACVp3E,OAAQA,QAKlB,EAEaw7E,GAAmB,SAACzoE,GAC/B,IACE/gB,EAcE+gB,EAdF/gB,KACA6a,EAaEkG,EAbFlG,OACA4qE,EAYE1kE,EAZF0kE,aACA3nD,EAWE/c,EAXF+c,WACA49C,EAUE36D,EAVF26D,kBACAC,EASE56D,EATF46D,qBACA3/D,EAQE+E,EARF/E,0BACA62D,EAOE9xD,EAPF8xD,uBACAC,EAME/xD,EANF+xD,yBACAC,EAKEhyD,EALFgyD,mBACAC,EAIEjyD,EAJFiyD,mBACAC,EAGElyD,EAHFkyD,kBACAC,EAEEnyD,EAFFmyD,oBACAiQ,EACEpiE,EADFoiE,eAGIrjE,EAAUsoE,KAEhBqB,EAgCIvG,GAAkB,CACpBroE,OAAAA,EACA7a,KAAAA,EACAmjF,eAAAA,EACAzH,kBAAAA,IAnCAmI,EAAU4F,EAAV5F,WACAE,EAAe0F,EAAf1F,gBACAI,EAAesF,EAAftF,gBACAT,EAAe+F,EAAf/F,gBACAF,EAAuBiG,EAAvBjG,wBACA0E,EAAwBuB,EAAxBvB,yBACAjE,EAAewF,EAAfxF,gBACAC,EAAeuF,EAAfvF,gBACA5I,EAAoBmO,EAApBnO,qBACAE,EAAgBiO,EAAhBjO,iBACAD,EAAkBkO,EAAlBlO,mBACAE,EAAiBgO,EAAjBhO,kBACAztE,EAAMy7E,EAANz7E,OACA82E,EAAc2E,EAAd3E,eACAM,EAAcqE,EAAdrE,eACAU,EAAsB2D,EAAtB3D,uBACAJ,EAAe+D,EAAf/D,gBACAE,EAA8B6D,EAA9B7D,+BACAG,EAAuB0D,EAAvB1D,wBACAr7B,EAAY++B,EAAZ/+B,aACAm8B,EAAmB4C,EAAnB5C,oBACAC,EAA0B2C,EAA1B3C,2BACAn8B,EAAY8+B,EAAZ9+B,aACA47B,EAAkBkD,EAAlBlD,mBACAC,EAAyBiD,EAAzBjD,0BACAU,EAAcuC,EAAdvC,eACAE,EAAeqC,EAAfrC,gBACAE,EAAuBmC,EAAvBnC,wBACAzF,EAAiB4H,EAAjB5H,kBACAC,EAAiB2H,EAAjB3H,kBACA+F,EAA2B4B,EAA3B5B,4BAQF,OACEnpF,EAAAA,EAAAA,MAAC0qF,GAAAA,EAAc,CAACplE,MAAOqlE,GAAAA,EAAcrqF,SAAA,EACnCN,EAAAA,EAAAA,MAAA,OAAK8B,UAAWsf,EAAQuoE,UAAUrpF,SAAA,EAChCC,EAAAA,EAAAA,KAAC2zE,GAAW,CACVC,uBAAwBA,EACxBC,yBAA0BA,EAC1BC,mBAAoBA,EACpBC,mBAAoBA,EACpBC,kBAAmBA,EACnBC,oBAAqBA,EACrBlzE,KAAMA,EACN6a,OAAQA,KAEV5b,EAAAA,EAAAA,KAACg9E,GAA4B,CAC3Bj8E,KAAMA,EACNQ,UAAWsf,EAAQ4pE,uBACnBtkE,QAASy+D,EACT3H,aAAc6H,EACd5H,qBAAsBgI,EACtBtpE,OAAQA,KAEV5b,EAAAA,EAAAA,KAAA,OAAKuB,UAAWsf,EAAQyoE,aACxBtpF,EAAAA,EAAAA,KAACo8E,GAAe,CACdr7E,KAAMA,EACN6a,OAAQA,EACRygE,qBAAsBA,EACtBC,mBAAoBA,EACpBC,iBAAkBA,EAClBC,kBAAmBA,EACnBC,kBAAmBA,EACnBC,qBAAsBA,KAExB18E,EAAAA,EAAAA,KAAC2jF,GAAkB,CACjB5iF,KAAMA,EACNia,QAAS,WAAF,OAAQypE,GAAiB,EAChC31D,QAASy1D,EACT3oE,OAAQA,KAEV5b,EAAAA,EAAAA,KAACo9E,GAAY,CACXr8E,KAAMA,EACN6a,OAAQA,EACRuK,QAAS0/D,EACT5pD,SAAUkqD,EACVp3E,OAAQA,QAGZ/O,EAAAA,EAAAA,KAAC6pF,GAAmB,CAClB9oF,KAAMA,EACNwjF,wBAAyBA,EACzBnnB,WAAY6rB,EACZhM,aAAc6H,EACdE,gBAAiBA,EACjBC,gBAAiBA,EACjBr3E,SAAU44E,EACV3nD,WAAYA,EACZgoD,uBAAwBA,EACxBJ,gBAAiBA,EACjBE,+BAAgCA,EAChC5pE,0BAA2BA,EAC3B+pE,wBAAyBA,EACzBr7B,aAAcA,EACdm8B,oBAAqBA,EACrBC,2BAA4BA,EAC5Bn8B,aAAcA,EACd47B,mBAAoBA,EACpBC,0BAA2BA,EAC3BU,eAAgBA,EAChBE,gBAAiBA,EACjBE,wBAAyBA,EACzBzF,kBAAmBA,EACnBC,kBAAmBA,EACnB+F,4BAA6BA,EAC7BhtE,OAAQA,MAIhB,EAEa8uE,GAAwB,SAAC5oE,GACpC,IACE/gB,EAIE+gB,EAJF/gB,KACA6a,EAGEkG,EAHFlG,OACA6gE,EAEE36D,EAFF26D,kBACAC,EACE56D,EADF46D,qBAGI77D,EAAUsoE,KAChBwB,EAKI1G,GAAkB,CAAEroE,OAAAA,EAAQ7a,KAAAA,EAAM07E,kBAAAA,IAJpCJ,EAAoBsO,EAApBtO,qBACAE,EAAgBoO,EAAhBpO,iBACAD,EAAkBqO,EAAlBrO,mBACAE,EAAiBmO,EAAjBnO,kBAGF,OACEx8E,EAAAA,EAAAA,KAACmqF,GAAAA,EAAc,CAACplE,MAAOqlE,GAAAA,EAAcrqF,UACnCN,EAAAA,EAAAA,MAAA,OAAK8B,WAAWwf,EAAAA,EAAAA,GAAa,oBAAqBF,EAAQuoE,WAAWrpF,SAAA,EACnEC,EAAAA,EAAAA,KAACo8E,GAAe,CACdr7E,KAAMA,EACN6a,OAAQA,EACRygE,qBAAsBA,EACtBC,mBAAoBA,EACpBC,iBAAkBA,EAClBC,kBAAmBA,EACnBC,kBAAmBA,EACnBC,qBAAsBA,KAExB18E,EAAAA,EAAAA,KAAA,OAAKuB,UAAWsf,EAAQyoE,gBAIhC,EC/dasB,GAAwB,SAAC9oE,GACpC,IAAAzK,GAAkCC,EAAAA,EAAAA,UAAS,CACzC4xE,WAAY,WAAF,MAAS,CAAC,CAAC,IACrB3xE,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAFK+xE,EAAS7xE,EAAA,GAAE8sE,EAAY9sE,EAAA,GAI9B,OACEvX,EAAAA,EAAAA,KAACgkF,GAAc1+D,SAAQ,CACrBpP,MAAO,CACLkzE,UAAAA,EACA/E,aAAAA,GACAtkF,SAED+hB,EAAM/hB,UAGb,EAEa8qF,GAAoB,SAAAzkE,GAAS,OAAI,SAAAtE,GAAK,OAAK9hB,EAAAA,EAAAA,KAAC4qF,GAAqB,CAAA7qF,UAACC,EAAAA,EAAAA,KAAComB,GAAStS,EAAAA,EAAAA,GAAA,GAAKgO,KAAiC,CAAE,ECgCpHgpE,GAA8BjmE,EAAAA,MAAW,SAAA/jB,GAE/C,IADLma,EAAMna,EAANma,OAAQla,EAAID,EAAJC,KAAMgqF,EAAajqF,EAAbiqF,cAAe7T,EAAiBp2E,EAAjBo2E,kBAAmBzB,EAAW30E,EAAX20E,YAGxChqB,IADUxwC,GAAU,CAAC,GAArB/E,OAC0B,CAAC,GAA3Bu1C,aACFu/B,GAAkBjnE,EAAAA,EAAAA,UAAQ,kBAAMrV,EAAAA,GAAAA,IAAuB3N,EAAK,GAAE,CAACA,IAE/Dk7B,GAAW/W,EAAAA,EAAAA,cAAY,SAACirD,EAAU8a,GACtC,IAAMre,EAASrgE,IAAAA,KAAOy+E,EAAiB,CAAE9+E,IAAKikE,KAAe,CAAC,EAC1DA,IAAa1kB,GACfs/B,EAAc9vE,EAAQ,CAAEwwC,aAAc0kB,GAAYvD,EAAOzgE,MAAQ8+E,EAErE,GAAG,CAACD,EAAiB/vE,EAAQwwC,EAAcs/B,IAErCxV,GAAYrwD,EAAAA,EAAAA,cAAY,SAACirD,EAAU+a,GACvC,IAAMte,EAASrgE,IAAAA,KAAOy+E,EAAiB,CAAE9+E,IAAKikE,KAAe,CAAC,EAC9D+G,EAAkBj8D,EAAQ,CAAEwwC,aAAc0kB,GAAYvD,EAAOzgE,MAAQ++E,EACvE,GAAG,CAACF,EAAiB/vE,EAAQi8D,IAE7B,OACEl3E,EAAAA,EAAAA,KAAA,OAAKuB,UAAW4xB,IAAW,4BAA6B,mCAAmCpzB,UACzFC,EAAAA,EAAAA,KAAC6L,GAAkB,CACjB4pE,YAAaA,EACb+J,oBAAqB/zB,EACrBtlC,QAAS6kE,EACT/uD,SAAUA,EACVs5C,UAAWA,EACXx0E,KAAMA,KAId,IAEaoqF,GAA6BtmE,EAAAA,MAAW,SAAA8R,GAE9C,IADL1b,EAAM0b,EAAN1b,OAAQla,EAAI41B,EAAJ51B,KAAMgqF,EAAap0D,EAAbo0D,cAAe7T,EAAiBvgD,EAAjBugD,kBAAmBzB,EAAW9+C,EAAX8+C,YAGxC/pB,IADUzwC,GAAU,CAAC,GAArB/E,OAC0B,CAAC,GAA3Bw1C,aACF47B,GAAqBvjE,EAAAA,EAAAA,UAAQ,kBAAMlV,EAAAA,GAAAA,IAAsB9N,EAAK,GAAE,CAACA,IACjEk7B,GAAW/W,EAAAA,EAAAA,cAAY,SAACsiE,EAAiByD,GACxC1+E,IAAAA,QAAUm/C,EAAc87B,IAC3BuD,EAAc9vE,EAAQ,CAAEywC,aAAc87B,GAAmByD,EAE7D,GAAG,CAACv/B,EAAczwC,EAAQ8vE,IAEpBxV,GAAYrwD,EAAAA,EAAAA,cAAY,SAACirD,EAAU+a,GACvChU,EAAkBj8D,EAAQ,CAAEywC,aAAcykB,GAAY+a,EACxD,GAAG,CAACjwE,EAAQi8D,IAEZ,OACEl3E,EAAAA,EAAAA,KAAA,OAAKuB,UAAW4xB,IAAW,4BAA6B,kCAAkCpzB,UACxFC,EAAAA,EAAAA,KAAC8L,GAAiB,CAChB2pE,YAAaA,EACbkI,4BAA6BjyB,GAAgB,GAC7CvlC,QAASmhE,EACTrrD,SAAUA,EACVs5C,UAAWA,EACXx0E,KAAMA,KAId,IAEaqqF,GAA2BvmE,EAAAA,MAAW,SAAA41B,GAE5C,IADLx/B,EAAMw/B,EAANx/B,OAAQla,EAAI05C,EAAJ15C,KAAMgqF,EAAatwC,EAAbswC,cAAe7T,EAAiBz8B,EAAjBy8B,kBAAmBzB,EAAWh7B,EAAXg7B,YAGhD16B,GADkB9/B,GAAU,CAAC,GAArB/E,OAC2C,CAAC,EAA5Cq1C,EAAaxQ,EAAbwQ,cAAeC,EAAczQ,EAAdyQ,eAEjB6/B,GAAoBnmE,EAAAA,EAAAA,cAAY,SAACirD,EAAU8a,GAC/C,IAAAl9B,EAAsCoiB,GAAY,CAAC,EAA3C0G,EAAW9oB,EAAX8oB,YAAaD,EAAY7oB,EAAZ6oB,aACjBrrB,IAAkBsrB,GAAerrB,IAAmBorB,GACtDmU,EAAc9vE,EAAQ,CAAEswC,cAAesrB,EAAarrB,eAAgBorB,GAAgBqU,EAExF,GAAG,CAAChwE,EAAQuwC,EAAgBD,EAAew/B,IAErCxV,GAAYrwD,EAAAA,EAAAA,cAAY,SAACirD,EAAU+a,GACvC,IAAA/vC,EAAsCg1B,GAAY,CAAC,EAA3C0G,EAAW17B,EAAX07B,YAAaD,EAAYz7B,EAAZy7B,aACrBM,EAAkBj8D,EAAQ,CAAEswC,cAAesrB,EAAarrB,eAAgBorB,GAAgBsU,EAC1F,GAAG,CAACjwE,EAAQi8D,IAEZ,OACEl3E,EAAAA,EAAAA,KAAA,OAAKuB,UAAW4xB,IAAW,4BAA6B,gCAAgCpzB,UACtFC,EAAAA,EAAAA,KAAC4L,GAAe,CACd6pE,YAAaA,EACbL,gBAAiB7pB,EACjB8pB,iBAAkB7pB,EAClBvvB,SAAUovD,EACV9V,UAAWA,EACXx0E,KAAMA,KAId,IAmCauqF,GpF7IsB,WACjC,IAAMvsD,GAAY+kD,EAAAA,GAAAA,qBAAoBz1E,KAAK,CAAElB,MAAO,IAEpD,MADqB,CAAEqB,MAAOuwB,EAAWtwB,IAAKswB,EAEhD,CoFyIkDwsD,GACrCC,GAA2B3mE,EAAAA,MAAW,SAAA02B,GAE5C,IADLtgC,EAAMsgC,EAANtgC,OAAQla,EAAIw6C,EAAJx6C,KAAMgqF,EAAaxvC,EAAbwvC,cAAe7T,EAAiB37B,EAAjB27B,kBAAmBsP,EAAYjrC,EAAZirC,aAAc3nD,EAAU0c,EAAV1c,WAAY42C,EAAWl6B,EAAXk6B,YAG1E/f,GADkBz6C,GAAU,CAAC,GAArB/E,OACkG,CAAC,EAAnGuwE,EAAe/wB,EAAf+wB,gBAAegF,EAAA/1B,EAAEixB,+BAAAA,OAA8B,IAAA8E,EAAGH,GAAkCG,EACtF5E,GAAyB9iE,EAAAA,EAAAA,UAAQ,kBAAMpW,EAAAA,GAAAA,IAA0B5M,EAAMylF,EAAa,GAAE,CAACzlF,EAAMylF,IAE7FvqD,GAAW/W,EAAAA,EAAAA,cAAY,SAACirD,EAAU8a,GACtC,IAAAr1B,EAAgDua,GAAY,CAAC,EAA1C4W,EAAEnxB,EAAbkmB,UAAgCkL,EAAGpxB,EAApBkkB,gBACnBiN,IAAON,GAAoBpoD,GAAoB2oD,EAAKL,IACtDoE,EAAc9vE,EAAQ,CAAEwrE,gBAAiBM,EAAIJ,+BAAgCK,GAAOiE,EAExF,GAAG,CAACxE,EAAiBE,EAAgC1rE,EAAQ8vE,IAEvDxV,GAAYrwD,EAAAA,EAAAA,cAAY,SAACirD,EAAU+a,GACvC,IAAAnvC,EAAgDo0B,GAAY,CAAC,EAA1C4W,EAAEhrC,EAAb+/B,UAAgCkL,EAAGjrC,EAApB+9B,gBACvB5C,EAAkBj8D,EAAQ,CAAEwrE,gBAAiBM,EAAIJ,+BAAgCK,GAAOkE,EAC1F,GAAG,CAACjwE,EAAQi8D,IAEZ,OACEl3E,EAAAA,EAAAA,KAAA,OAAKuB,UAAW4xB,IAAW,4BAA6B,gCAAgCpzB,UACtFC,EAAAA,EAAAA,KAAC2L,GAAe,CACd8pE,YAAaA,EACb4F,iBAAkBoL,GAAmBzgF,GAAAA,GAAcC,QACnDq1E,uBAAwBqL,EACxBxgE,QAAS0gE,EACT5qD,SAAUA,EACVs5C,UAAWA,EACX3nE,SAAU44E,EACV3nD,WAAYA,EACZ99B,KAAMA,KAId,IAEa2qF,GAAuC7mE,EAAAA,MAAW,SAAAu3B,GAAsC,IAAnCr7C,EAAIq7C,EAAJr7C,KAAMka,EAAMmhC,EAANnhC,OAAQ8vE,EAAa3uC,EAAb2uC,cAC9E1uC,EAAyBphC,GAAU,CAAC,EAA5B/E,EAAKmmC,EAALnmC,MAAOzK,EAAK4wC,EAAL5wC,MACPwuC,GAAe/jC,GAAS,CAAC,GAAzB+jC,WAEFwrC,GAAqBnjE,EAAAA,EAAAA,QAAO,IAC5B+5D,GAAuBn3D,EAAAA,EAAAA,cAAY,SAACm6B,EAAK8wB,GAC7CsV,EAAmBn2D,QAAU6gD,GAAY,EAC3C,GAAG,IAEGmM,GAAqBp3D,EAAAA,EAAAA,cAAY,SAACirD,GAClCA,IAAal2B,GACf8wC,EAAc9vE,EAAQ,CAAEg/B,WAAYk2B,GAAYA,EAEpD,GAAG,CAACl1D,EAAQ8vE,EAAe9wC,IAErBsiC,GAAmBr3D,EAAAA,EAAAA,cAAY,WACnCo3D,EAAmBmJ,EAAmBn2D,QACxC,GAAG,CAACgtD,IAGEE,GAAoBt3D,EAAAA,EAAAA,cAAY,WACpCo3D,EAAmB,GACrB,GAAG,CAACA,IAEJ,OACEt8E,EAAAA,EAAAA,KAAA,OAAKuB,UAAW4xB,IAAW,wBAAwBpzB,UACjDC,EAAAA,EAAAA,KAACo8E,GAAe,CACdr7E,KAAMA,EACNqqB,UAAWrqB,EAAKI,UAAUC,uBAE1Bi7E,qBAAsBA,EACtBC,mBAAoBA,EACpBC,iBAAkBA,EAClBC,kBAAmBA,EACnBC,kBAAmBxiC,GAAc,GACjCyiC,qBAAsB37E,EAAKI,UAAUsK,MAa7C,IAEakgF,GAAiC,SAAHhvC,GAAuC,IAAjC5/B,EAAyB4/B,EAAzB5/B,0BAU/C,OATkB5U,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,IAAAA,EAAAA,GAAAA,GAAA,GAEf4C,GAAAA,GAAWM,aAAgB0R,OAA0D7H,EAA9B41E,IACvD//E,GAAAA,GAAWO,YAAcyR,EAA4BouE,QAA6Bj2E,GAClFnK,GAAAA,GAAWG,UAAYkgF,IAEvBrgF,GAAAA,GAAWK,UAAYogF,IACvBzgF,GAAAA,GAAWC,WAAa0gF,GAG7B,ECpRaE,IAAsB1rE,EAAAA,EAAAA,GAAW,CAC5CiyD,iBAAkB,CAChB,yBAA0B,CACxB9xD,MAAO,YAGX+xD,wBAAyB,CACvB,yBAA0B,CACxB/xD,MAAO,UACPG,WAAY,MAGhBqrE,oBAAqB,CACnBv0D,aAAc,UCRLw0D,GAAuB,SAAHhrF,GAI1B,IAHLk1C,EAAUl1C,EAAVk1C,WACAy6B,EAAW3vE,EAAX2vE,YACAsb,EAAoBjrF,EAApBirF,qBAEMr4D,GAAQ3P,EAAAA,EAAAA,UAAQ,kBAAMiyB,EAAWjgC,KAAI,SAAAlC,GAAI,MAAK,CAClD3H,IAAK2H,EAAKg7B,SACV1iC,KAAM0H,EAAKsnB,WACZ,GAAE,GAAE,CAAC6a,IAEAn1B,EAAU+qE,KAEhB,OACEl4D,EAAMze,OAAS,GAAK82E,GAClB/rF,EAAAA,EAAAA,KAAA,OAAKuB,UAAW4xB,IAAW,yBAA0BtS,EAAQgrE,qBAAqB9rF,UAChFC,EAAAA,EAAAA,KAACsxE,GAAmB,CAClB59C,MAAOA,EACP+8C,YAAaA,EACbgB,gBAAiB,CACfU,iBAAkBh/C,IAAW,qBAAsBtS,EAAQsxD,kBAC3DC,wBAAyBj/C,IAAW,sBAAuBtS,EAAQuxD,8BAIvE,IAER,EAWA0Z,GAAqB7qE,aAAe,CAClC+0B,WAAY,GACZ+1C,sBAAsB,GC5CjB,IAAMC,IAAsC9rE,EAAAA,EAAAA,GAAW,CAC5D0R,UAAW,CACT,gCAA8B9d,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAC5ByjB,UAAW,OACX3U,SAAU,YACPjE,EAAAA,GAAWW,SAAS,WAAS,IAEhCk7C,YAAa,OACb5gC,aAAc,SAEhB,yBAA0B,CACxBhX,SAAU,SACVu2C,cAAe,OACfx/B,WAAY,OACZ6gC,YAAa,OACb5gC,aAAc,OACd/P,WAAY,QACZK,YAAa,QACb7I,IAAK,EACLK,OAAQ,GACRzC,gBAAiB,QACjBrf,OAAQ,OACR,qCAAsC,CACpC05B,WAAY,WAEd,sBAAuB,CACrBK,WAAY,OACZ/5B,OAAQ,OACR,qCAAsC,CACpC05B,WAAY,YAIlB,iCAAkC,CAChC1W,SAAU,WACVvB,IAAK,OACLuF,KAAM,OACNC,MAAO,OACPnF,OAAQ,GACRzC,gBAAiB,YCvCVgtE,KCCkBn4E,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAQo4E,IAAmB,IAAE55E,iBAAa4C,EAAWqe,UAAW,MDD3D,SAAHzyB,GAE1B,IADLqrF,EAAUrrF,EAAVqrF,WAEA90E,GAAgCC,EAAAA,EAAAA,UAAS,IAAGC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAArC+0E,EAAQ70E,EAAA,GAAE80E,EAAW90E,EAAA,GAQ5B,OANAI,EAAAA,EAAAA,YAAU,WACJw0E,GAAcC,IAAaD,GAC7BE,EAAYF,EAEhB,GAAG,CAACC,EAAUD,KAGZnsF,EAAAA,EAAAA,KAAA,OACE,YAAU,SACV,cAAY,OACZorC,MAAO,CACLxoB,SAAU,WACVjjB,MAAO,EACPC,OAAQ,EACR0f,SAAU,SACVV,QAAS,EACToB,OAAQ,OACRssE,KAAM,gBACNntE,OAAQ,GACRpf,SAEDqsF,GAGP,G,0BEIMG,GAAuB,CAAEvsE,OAAQ,KAGjCwsE,IAAkB14E,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACnBo4E,IAAmB,IACtB55E,iBAAa4C,EACbqe,UAAW,MAIPk5D,GAAsC,SAAH3rF,GA+ClC,IA9CL8tD,EAAW9tD,EAAX8tD,YACA89B,EAAY5rF,EAAZ4rF,aACAC,EAAc7rF,EAAd6rF,eACAjvB,EAAkB58D,EAAlB48D,mBACA7+B,EAAU/9B,EAAV+9B,WACA2nD,EAAY1lF,EAAZ0lF,aAGAoG,EAAwB9rF,EAAxB8rF,yBACAtiC,EAAMxpD,EAANwpD,OACA1uC,EAAM9a,EAAN8a,OACA7a,EAAID,EAAJC,KACAsX,EAAGvX,EAAHuX,IACA+uD,EAAGtmE,EAAHsmE,IACAC,EAAWvmE,EAAXumE,YACAwlB,EAAU/rF,EAAV+rF,WACAnzC,EAAU54C,EAAV44C,WACAozC,EAAiBhsF,EAAjBgsF,kBACAC,EAAgBjsF,EAAhBisF,iBACAh0C,EAAyBj4C,EAAzBi4C,0BACAi0C,EAAalsF,EAAbksF,cACAC,EAAensF,EAAfmsF,gBAGA72D,EAAqBt1B,EAArBs1B,sBACAf,EAAiBv0B,EAAjBu0B,kBAEA63D,EAAoBpsF,EAApBosF,qBAMAC,EAA4BrsF,EAA5BqsF,6BACApwE,EAAyBjc,EAAzBic,0BACAC,EAAsBlc,EAAtBkc,uBACAC,EAAenc,EAAfmc,gBAGAmwE,EAAsBtsF,EAAtBssF,uBAEAnZ,EAAmBnzE,EAAnBmzE,oBACAoZ,EAAUvsF,EAAVusF,WAEAC,EAAmBxsF,EAAnBwsF,oBACA/1B,EAAWz2D,EAAXy2D,YAEMg2B,GAAoBxpE,EAAAA,EAAAA,UAAQ,kBAAMwzC,EAAYkB,QAAQ+0B,uBAAuB,GAAE,CAACj2B,IAExEv+C,GAAYy0E,EAAAA,GAAAA,YAAU,SAAAC,GAAM,OAAKH,EAAoBG,EAAOC,QAAQnkB,KAAKnxD,GAAOynB,QAAQC,SAAS,GAAG,CAAC1nB,EAAKk1E,IAAhH10E,KACF0B,GAA4BwJ,EAAAA,EAAAA,UAAQ,mBAAOwpE,IAAoBx0E,EAAAA,GAAAA,IAAoBC,EAAgB,GAAG,CAACA,EAASu0E,IAEhH1sE,EAAUmrE,KAChB30E,GAA0CC,EAAAA,EAAAA,UAAS,IAAGC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAA/Cu2E,EAAar2E,EAAA,GAAEs2E,EAAgBt2E,EAAA,GAE9B6xE,GAAc76B,EAAAA,EAAAA,YAAWy1B,IAAzBoF,UACR0E,GAaI/pE,EAAAA,EAAAA,UAAQ,kBAAMqlE,EAAUF,YAAY,GAAE,CAACE,IAZzCpE,EAAe8I,EAAf9I,gBACAC,EAAe6I,EAAf7I,gBACY8I,EAAaD,EAAzB7zC,WACAlrC,EAAM++E,EAAN/+E,OACA03E,GAAeqH,EAAfrH,gBACAE,GAA8BmH,EAA9BnH,+BACAl7B,GAAYqiC,EAAZriC,aACAC,GAAYoiC,EAAZpiC,aACAu8B,GAAc6F,EAAd7F,eACAE,GAAe2F,EAAf3F,gBACAvF,GAAiBkL,EAAjBlL,kBACAC,GAAiBiL,EAAjBjL,kBAGI7P,GAAiB+a,GAAiBtiC,IAAgBu5B,GAAmBC,GACpEgD,IAAkBE,IAAmBvF,IAAqBC,IACzD4D,IAAmBA,KAAoBzgF,GAAAA,GAAcC,UAAasG,IAAAA,QAAUm/C,IAEpF11C,GAaI44C,GAAe,CAAC,EAZlBr4C,GAAMP,GAANO,OACA80C,GAAer1C,GAAfq1C,gBACAhB,GAAoBr0C,GAApBq0C,qBACA3zC,GAAkBV,GAAlBU,mBACAg2C,GAAQ12C,GAAR02C,SACA0B,GAAYp4C,GAAZo4C,aACApY,GAAUhgC,GAAVggC,WACAwG,GAAsBxmC,GAAtBwmC,uBACAxQ,GAAOh2B,GAAPg2B,QACAc,GAAe92B,GAAf82B,gBACAn2B,GAAYX,GAAZW,aACA6tC,GAAiBxuC,GAAjBwuC,kBAGIwpC,IAAsB1rE,EAAAA,EAAAA,QAAO,MAE7BsxD,IAAyB1uD,EAAAA,EAAAA,cAAY,WACzC8oE,GAAoB1+D,QAAU,CAAC,EAC/B+9D,EAAWY,yBAAyB,CAClC51E,IAAAA,EAAK+uD,IAAAA,EAAKC,YAAAA,EAAatmE,KAAAA,EAAMmtF,iBAAkBF,GAAoB1+D,SAEvE,GAAG,CAACjX,EAAK+uD,EAAKrmE,EAAMssF,EAAYhmB,IAE1B8mB,IAAqBjpE,EAAAA,EAAAA,cAAY,SAACpD,GAClClG,GAAUA,EAAOi2B,UACnBj2B,EAAOi2B,SAAS,+BAElBw7C,EAAWe,wBAAwBtsE,EACrC,GAAG,CAAClG,EAAQyxE,IAENgB,IAAsBnpE,EAAAA,EAAAA,cAAY,SAACpD,GACnClG,GAAUA,EAAOi2B,UACnBj2B,EAAOi2B,SAAS,yBAElBw7C,EAAWiB,yBAAyBxsE,EACtC,GAAG,CAAClG,EAAQyxE,IAENkB,IAAuBrpE,EAAAA,EAAAA,cAAY,SAACpD,GACpClG,GAAUA,EAAOi2B,UACnBj2B,EAAOi2B,SAAS,0BAElBw7C,EAAWmB,0BAA0B1sE,EACvC,GAAG,CAAClG,EAAQyxE,IAENxZ,IAA2B3uD,EAAAA,EAAAA,cAAY,WAC3C8oE,GAAoB1+D,QAAU,CAAC,EAC/B+9D,EAAWoB,0BAA0B,CACnCp2E,IAAAA,EAAK+uD,IAAAA,EAAKC,YAAAA,EAAatmE,KAAAA,EAAMmtF,iBAAkBF,GAAoB1+D,SAEvE,GAAG,CAACjX,EAAK+uD,EAAKrmE,EAAMssF,EAAYhmB,IAE1B0M,IAAqB7uD,EAAAA,EAAAA,cAAY,WACjCtJ,GAAUA,EAAOi2B,UACnBj2B,EAAOi2B,SAAS,sBAGdt3B,EACF8yE,EAAWqB,wBAAwB,CACjCr2E,IAAAA,EAAK+uD,IAAAA,EAAKC,YAAAA,EAAatmE,KAAAA,IAGzBssF,EAAWsB,sBAAsB,CAC/Bt2E,IAAAA,EAAK+uD,IAAAA,EAAKC,YAAAA,EAAatmE,KAAAA,GAG7B,GAAG,CAACsX,EAAK+uD,EAAKrmE,EAAM6a,EAAQyxE,EAAYhmB,EAAa9sD,IAE/Cu5D,IAAqB5uD,EAAAA,EAAAA,cAAY,WACrCmoE,EAAWuB,wBAAwB,CACjCv2E,IAAAA,EAAK+uD,IAAAA,EAAKC,YAAAA,EAAatmE,KAAAA,GAE3B,GAAG,CAACsX,EAAK+uD,EAAKrmE,EAAMssF,EAAYhmB,IAG1BwnB,IAAkB9qE,EAAAA,EAAAA,UAAQ,kBAAMzN,EAAAA,GAAAA,IAAiB,CACrDC,OAAAA,GACAE,QAAS,CACPC,mBAAAA,GACAC,aAAAA,KAEF,GAAE,CAACJ,GAAQG,GAAoBC,KAE3Bgd,IAAezO,EAAAA,EAAAA,cAAY,SAAA7I,GAAuC,IAApCxI,EAAIwI,EAAJxI,KAAM6iB,EAAWra,EAAXqa,YAAgBo4D,GAAMr5D,EAAAA,GAAAA,GAAApZ,EAAAqZ,IAC9D,GAAIi3D,EAAgB,CAClB,IAAMoC,EAAOpC,GAAc74E,EAAAA,EAAAA,GAAC,CAC1BD,KAAAA,EAAMomC,WAAY8zC,EAAer3D,YAAAA,GAAgBo4D,IAEnD,GAAIC,EAAM,OAAOA,CACnB,CACA,OAAO,IACT,GAAG,CAACpC,EAAgBoB,IAEpBl2C,IAAsCvgC,EAAAA,EAAAA,WAAS,GAAMwgC,IAAAtgC,EAAAA,GAAAA,GAAAqgC,GAAA,GAA9Cm3C,GAAYl3C,GAAA,GAAEm3C,GAAan3C,GAAA,GAElCijB,IAAsCzjD,EAAAA,EAAAA,WAAS,GAAM0jD,IAAAxjD,EAAAA,GAAAA,GAAAujD,GAAA,GAA9Cm0B,GAAWl0B,GAAA,GAAEm0B,GAAcn0B,GAAA,GAE5Bo0B,IAAgBlqE,EAAAA,EAAAA,cAAY,WAEhC,IAAIo1B,EACJ,GAAImsC,KAAoBzgF,GAAAA,GAAcK,OACpCi0C,EAAqBqsC,OAChB,CACL,IAAME,GAAyBl5E,EAAAA,GAAAA,IAA0B5M,EAAMylF,GAE/DlsC,GADkB/tC,IAAAA,KAAOs6E,GAAwB,SAAAwI,GAAC,OAAIA,EAAEnjF,MAAQu6E,EAAe,KAAK,CAAC,GAA7El4E,KAEV,CAEA,IAKI+gF,EALEC,EAA4BnC,EAAuBn4E,OAAS,GAA6B,IAAxBy2C,GAAaz2C,OAChFshC,EAAkB,KAQtB,OAPIyuC,GAAmBC,KACrB1uC,EAAkByuC,EAAkB38E,GAAAA,GAAgBC,MAAQD,GAAAA,GAAgBE,OAG1EmxC,IACF41C,EAAgC51C,EAAWqF,YAAY,wBAElD2N,GAAS,CACdzS,WAAY8zC,EACZxiC,cAAe08B,GACfz8B,eAAgB28B,GAChBv8B,iBAAkBg3B,GAClB/2B,iBAAkBg3B,GAClBvoC,mBAAAA,EACAvrC,OAAAA,EACA08C,aAAAA,GACAC,aAAc6jC,EAA4BnC,EAAyB1hC,GACnE3S,0BAAAA,EACAxC,gBAAAA,EACAwV,gBAAgB,EAChB/S,wBAAwB,EACxBtH,SAAUpoC,GAAAA,GAAkBC,YAC5BmwC,WAAY41C,GAEhB,GAAG,CAAC5jC,GAAc3S,EAA2B0tC,GAAiBE,GAAgC5lF,EAAMylF,EAAc/6B,GAAcu5B,EAAiBC,EAAiBv4B,GAAUm2B,GAAmBD,GAAmBuF,GAAiBF,GAAgBmF,EAAwBW,EAAeh/E,IAEpRygF,IAAczrE,EAAAA,EAAAA,UAAQ,kBAAOipE,EAAgBA,IAAkB,IAAI,GAAG,CAACA,IAEvEyC,IAAsBvqE,EAAAA,EAAAA,cAAY,SAACrR,GACvC+H,EAAOi2B,SAAS,6BAA8B,CAAEhD,SAAUh7B,EAAK3H,MAC/DswC,GAAuB,CAAEt8C,GAAI2T,EAAK3H,KACpC,GAAG,CAACswC,GAAwB5gC,IAEtB8zE,IAAiBxqE,EAAAA,EAAAA,cAAY,kBAChCwnE,EAmCCA,KAlCAjtF,EAAAA,EAAAA,MAAA,OAAK8B,UAAWmjB,IAAW,sBAAuB8qE,IAAe,qBAAqBzvF,SAAA,EACpFN,EAAAA,EAAAA,MAAA,OAAK8B,UAAWmjB,IAAW,mCAAmC3kB,SAAA,CAE3D+sF,IACC9sF,EAAAA,EAAAA,KAAC8rF,GAAoB,CACnB91C,WAAYA,GACZy6B,YAAagf,MAGjBzvF,EAAAA,EAAAA,KAACuqF,GAAgB,CACfxpF,KAAMA,EACN6a,OAAQA,EACR4qE,aAAcA,EACd3nD,WAAYA,EACZ9hB,0BAA2BA,IAA8BC,EACzD42D,uBAAwBA,GACxBC,yBAA0BA,GAC1BC,mBAAoBA,GACpBC,mBAAoBA,GACpBC,kBAAmB,YACjBl3D,EAAAA,GAAAA,IAAYC,EAA2BC,EAAwBC,EAAiBlc,GAAM,WACpFssF,EAAWsC,0BAA0B,CAAE9gD,SAAU/B,IACnD,GACF,EACAmnC,oBAAqBA,EACrBiQ,eAAgB0I,QAGpB5sF,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,8BAA6BxB,SACzCyvF,OAMN,GACA,CAAC5C,EAA0B4C,GAAa1iD,GAAiBjO,EAAYiuD,EAAmB92C,GAAYj1C,EAAMylF,EAAcxpE,EAAwBD,EAA2BnB,EAAQyxE,EAAYpwE,EAAiBg3D,EAAqBwb,GAAqB3b,GAAoBF,GAAwBC,GAA0BE,GAAoB2Y,IAEjVkD,IAAqB7rE,EAAAA,EAAAA,UAAQ,iBAAO,CACxC2S,YAAa5tB,GAAAA,EAAgBL,OAC7ByuB,aAAcn2B,EAAKI,UAAUC,WAC7B+1B,iBAAkB,6BAClBpC,QAAS,WACTrB,MAAOsY,GACPpV,eAAgByzB,GAChBj1C,QAAMtB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACD04E,IAAkB,IACrBj4D,gBAAiB+4D,IAEnB/3D,cAAe23D,GAAwBA,EAAqBpkF,GAAAA,EAAgBL,QAC7E,GAAG,CAACujC,GAASshD,EAAqBvsF,EAAMmsF,EAAsB7iC,KAEzDwlC,IAAoB9rE,EAAAA,EAAAA,UAAQ,iBAAO,CACvC2S,YAAa5tB,GAAAA,EAAgBC,MAC7BmuB,aAAcn2B,EAAKI,UAAUC,UAC7B+1B,iBAAkB,4BAClBpC,QAAS,KACTrB,MAAOm7D,GACPj4D,eAAgBy0B,GAChB91B,cAAe23D,GAAwBA,EAAqBpkF,GAAAA,EAAgBC,OAC5EqM,OAAQ,CACNmf,gBAAiB+4D,EACjB74D,cAAe,IAElB,GAAG,CAAC64D,EAAqBvsF,EAAM8tF,GAAiB3B,EAAsB7hC,KAEjEiT,IAAkBv6C,EAAAA,EAAAA,UACtB,iBAAO,CAAC6rE,GAAoBC,GAAkB,GAC9C,CAACA,GAAmBD,MAItBj4E,EAAAA,EAAAA,YAAU,WACHq3E,IACHC,IAAc,EAElB,GAAG,CAACD,MAEJr3E,EAAAA,EAAAA,YAAU,WACJw1E,IACFn1E,EAAAA,GAAAA,eAAc,CAAE83E,oBAAqB,QAEzC,GAAG,CAAC3C,KAGJx1E,EAAAA,EAAAA,YAAU,WACHq3E,KAKD1kC,GACF1uC,EAAOi2B,SAAS,mBAEd6H,GACFA,EAAWq2C,gBAEbZ,IAAe,GACfC,KACG70C,UAAS,SAAC9a,GACTi+B,EAAmBj+B,EACrB,IAAGggB,SAAQ,WACT0vC,IAAe,GACXz1C,GACFA,EAAWs2C,aAEbnD,GAEF,IACJ,GAAG,CAACmC,GAAcI,GAAe1xB,EAAoBpT,EAAQ1uC,IAE7D,IDlXAsa,GCkXMC,IAAejR,EAAAA,EAAAA,cAAY,WAC/BkpC,GAAa,CAAEj0B,MAAO7yB,GAAAA,KAAqBk+B,OAAM,SAAC/F,GAChDi+B,EAAmBj+B,EACrB,GACF,GAAG,CAAC2uB,GAAcsP,IAEZuyB,IAAiBjB,IAClBE,KDzXLh5D,GCyX+CooC,GDzXhC/xD,IAAAA,MAAQ2pB,IAAa,SAAAp1B,GAAQ,OAAgB,MAAhBA,EAAL4yB,KAAyB,MCyXGq5D,EAE7DmD,GDvXN,SAACh6D,GAGC,OAFyB3pB,IAAAA,IAAM2pB,GAAa,SAAAlgB,GAAQ,QAAAA,EAAL0d,KAAmB,KAEvCnnB,IAAAA,MAAQ2pB,GAAa,SAAA7Z,GAAA,IAAGqX,EAAKrX,EAALqX,MAAK,OAAOnnB,IAAAA,QAAUmnB,EAAM,GACjF,CCmXkBy8D,CAAyB7xB,IAU3C,OARA3mD,EAAAA,EAAAA,YAAU,YACHs4E,IAAiBC,KAAc3jF,IAAAA,WAAa0gF,IAAoBja,GACnE6a,EAAiB9sF,EAAKI,UAAUC,mDAEhCysF,EAAiB,GAErB,GAAG,CAACqC,GAAWnvF,EAAMiyE,GAAgBid,GAAehD,KAGlDxtF,EAAAA,EAAAA,MAAA,OAAK8B,UAAWmjB,IAAW,kBAAmB7D,EAAQ+Q,UAAW/Q,EAAQuvE,0BAA0BrwF,SAAA,CAEhG2vF,MAGD1vF,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,4BAA2BxB,WACrCykD,IAAqBA,KAAsBl7C,GAAAA,GAAkBC,eAChEvJ,EAAAA,EAAAA,KAACq3B,GAAgB,CACfnB,YAAaooC,GACb3qC,aAAcA,GACdwC,aAAcA,GACdC,sBAAuBA,EACvBf,kBAAmBA,MAKtB46D,KACCjwF,EAAAA,EAAAA,KAACyjB,EAAAA,QAAO,CAAA1jB,UACNC,EAAAA,EAAAA,KAAC2jB,EAAgB,CAACpiB,UAAU,oBAAoBqiB,eAAa,EAACC,YAAa0oE,QAK5E0D,IAAiBC,KACpBlwF,EAAAA,EAAAA,KAAA,OAAKuB,UAAWmjB,IAAW,qBAAsB7D,EAAQwvE,oBAAoBtwF,SAEzEktF,EAAkBA,KAChBjtF,EAAAA,EAAAA,KAAC8yE,GAAgB,CACf/xE,KAAMA,EACNgyE,iBAAkB/8B,IAAcA,GAAW/gC,OAAS,GACpD+9D,eAAgBA,GAChBv5D,cAAe,YACbqD,EAAAA,GAAAA,IAAYC,EAA2BC,EAAwBC,EAAiBlc,GAAM,WACpFssF,EAAWsC,0BAA0B,CAAE9gD,SAAU/B,IACnD,GACF,EACAnzB,cAAei6D,GACf/5D,aAAcs0E,GACdl0E,eAAgBs0E,GAChBx0E,cAAes0E,GACf9zE,0BAA2BA,OAMnCva,EAAAA,EAAAA,KAACisF,GAAoB,CAACE,WAAYyB,MAGxC,EA0EAnB,GAAoCxrE,aAAe,CACjDqvE,4BAA6B,KAC7BC,+BAAgC,KAChCjmC,OAAQ,KACRoiC,aAAc,KACdC,eAAgB,KAChBK,cAAe,KACftvB,mBAAoB,WAAF,OAAQ,IAAI,EAC9BmvB,WAAY,WAAF,OAAQ,IAAI,EACtBC,mBAAmB,EACnBC,kBAAkB,EAElB32D,uBAAuB,EACvBf,uBAAmBngB,EAEnBg4E,0BAAsBh4E,EAEtB6jC,0BAA2B,EAM3Bo0C,8BAA8B,EAC9BpwE,2BAA2B,EAG3BqwE,uBAAwB,GAExBnZ,yBAAqB/+D,EACrBm4E,WAAY,CAAC,EACbC,oBAAqB,gBACrBtwE,wBAAwB,EACxBu6C,YAAa,CAAEkB,QAAS,CAAC,IAGpB,IAAM+3B,GAA8B/D,G,6EC9hBrCtrE,IAAYjB,EAAAA,EAAAA,GAAW,CAC3BuwE,OAAQ,CACN,sBAAuB,CACrB9wF,MAAO,UAGX8L,MAAO,CACLilF,UAAW,gBAIFC,GAAgB,SAAC7uE,GAC5B,IACE8uE,EASE9uE,EATF8uE,YACAnlF,EAQEqW,EARFrW,MACAolF,EAOE/uE,EAPF+uE,UACAC,EAMEhvE,EANFgvE,cACAC,EAKEjvE,EALFivE,aACAC,EAIElvE,EAJFkvE,eACAC,EAGEnvE,EAHFmvE,cACAC,EAEEpvE,EAFFovE,YACAC,EACErvE,EADFqvE,WAGItwE,EAAUM,KAEViwE,GAAcrtE,EAAAA,EAAAA,UAAQ,kBAAM/jB,EAAAA,EAAAA,KAAC23E,EAAAA,IAAgB,CAAC38D,QAASi2E,GAAiB,GAAE,CAACA,IAEjF,OACEjxF,EAAAA,EAAAA,KAACqxF,GAAAA,EAAM,CACL3uE,KAAMkuE,EAAY7wF,UAElBC,EAAAA,EAAAA,KAACsxF,GAAAA,EAAa,CAACpxF,GAAG,mCAAmCqB,WAAWwf,EAAAA,EAAAA,GAAa,sBAAuBF,EAAQ4vE,QAAQ1wF,UAClHN,EAAAA,EAAAA,MAAC8xF,GAAAA,EAAU,CAAAxxF,SAAA,EACTC,EAAAA,EAAAA,KAACwxF,GAAAA,EAAW,CAACjwF,UAAWsf,EAAQpV,MAAOuX,OAAQouE,EAAYrxF,SACxD0L,KAEHhM,EAAAA,EAAAA,MAACgyF,GAAAA,EAAa,CAAA1xF,SAAA,CAEVoxF,IACEnxF,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,mCAAmC6pC,MAAO,CAAE/qB,MAAO,gBAAiBtgB,SAChFoxF,IAILN,IACA7wF,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,kCAAkC6pC,MAAO,CAAE/qB,MAAO,gBAAiBtgB,SAC/E8wF,QAIPpxF,EAAAA,EAAAA,MAACiyF,GAAAA,EAAa,CAAC9uE,SAAS,QAAO7iB,SAAA,EAC7BC,EAAAA,EAAAA,KAAC8gB,EAAAA,EAAM,CACLuK,SAAUwlE,EAAU57E,OAAS,GAAKi8E,EAClC3vF,UAAU,wBACVyZ,QAASg2E,EACT/tE,WAAW,UAASljB,SAEnB+wF,KAEH9wF,EAAAA,EAAAA,KAAC8gB,EAAAA,EAAM,CACLuK,SAAU6lE,EACV3vF,UAAU,uBACVyZ,QAASi2E,EACThuE,WAAW,YAAWljB,SAErBgxF,aAOf,EAeAJ,GAAc1vE,aAAe,CAC3B4vE,UAAW,GACXM,WAAY,GACZD,aAAa,EACbrtE,YAAa,MCzGR,IAAM8tE,GAAuB9sE,EAAAA,cAAoB,CAAC,GCC5C+sE,GAA+B,SAAC9vE,GAC3C,IAAAzK,GAAwDC,EAAAA,EAAAA,UAAS,CAC/DswC,YAAQ1yC,EACR2rB,cAAU3rB,IACVqC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAHKw6E,EAAoBt6E,EAAA,GAAEu6E,EAAuBv6E,EAAA,GAKpD,OACEvX,EAAAA,EAAAA,KAAC2xF,GAAqBrsE,SAAQ,CAC5BpP,MAAO,CACL27E,qBAAAA,EACAC,wBAAAA,GACA/xF,SAED+hB,EAAM/hB,UAGb,EAEagyF,GAA2B,SAAA3rE,GAAS,OAAI,SAAAtE,GAAK,OACxD9hB,EAAAA,EAAAA,KAAC4xF,GAA4B,CAAA7xF,UAC3BC,EAAAA,EAAAA,KAAComB,GAAStS,EAAAA,EAAAA,GAAA,GAAKgO,KACc,CAC/B,EClBIkwE,IAAuBhkE,EAAAA,GAAAA,IAAela,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAC3CnU,MAAO,QACJgf,EAAAA,GAAWK,aAAa,QAAM,IACjCpf,OAAQ,MACRqnB,WAAY,6FACZk1D,eAAgB,MAChB8V,iBAAkB,YAClBC,UAAW,uCACXz1D,wBAAyB,WACzBC,wBAAyB,SACzBF,kBAAmB,KACnBH,cAAe,CAAC,CACdC,KAAM,CAAE61D,mBAAoB,QAC5B51D,GAAI,CAAE41D,mBAAoB,UAE5BlzE,gBAAiB,UACjB+hE,kBAAmB,UAGRoR,GAAmB,WAC9B,IAAMC,EAAoBL,KAC1B,OACEhyF,EAAAA,EAAAA,KAAA,OAAKuB,WAAWwf,EAAAA,EAAAA,GAAa,oBAAqBsxE,IAEtD,EC1BaC,GAAoB,CAC/B,CACEC,mB,6CACAn8E,WAAYhV,+JAEd,CACEmxF,mB,6CACAn8E,WAAYhV,yLAEd,CACEmxF,mB,6CACAn8E,WAAYhV,qHAEd,CACEmxF,mB,6CACAn8E,WAAYhV,+GCbHoxF,GAA+B,SAAH1xF,GAOlC,IANLq8D,EAAar8D,EAAbq8D,cACAt8C,EAAO/f,EAAP+f,QACA4xE,EAAqB3xF,EAArB2xF,sBACAC,EAAgB5xF,EAAhB4xF,iBACA3xF,EAAID,EAAJC,KACA4xF,EAAO7xF,EAAP6xF,QAEAt7E,GAA0CC,EAAAA,EAAAA,UAAS,IAAGC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAA/Cu2E,EAAar2E,EAAA,GAAEs2E,EAAgBt2E,EAAA,GAChCq7E,GAAa7uE,EAAAA,EAAAA,UAAQ,kBAAMuuE,GAAkBv8E,KAAI,SAAAurB,GAAC,OAAAxtB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACnDwtB,GAAC,IACJlrB,WAAYrV,EAAKI,UAAUmgC,EAAElrB,aAAW,GACvC,GAAE,CAACrV,IAEA8xF,GAAuB3tE,EAAAA,EAAAA,cAAY,SAAC9O,EAAY2d,GACpDopC,EAAc/mD,EAAY2d,GAC1B85D,EAAiB9sF,EAAKI,UAAUC,mCAA0C,CAAEgV,WAAAA,IAC9E,GAAG,CAAC+mD,EAAep8D,IAEnB,OACEtB,EAAAA,EAAAA,MAAA,OAAK8B,UAAW4xB,IAAW,qBAAsBtS,EAAQiyE,kBAAmB,kBAAiBH,EAAS9nE,KAAK,QAAO9qB,SAAA,CAC/GwM,IAAAA,IAAMqmF,GAAY,SAACG,EAAUh/D,GAAK,OACjC/zB,EAAAA,EAAAA,KAAC0yF,EAAgB,CAEfH,mBAAoBQ,EAASR,mBAC7Bn8E,WAAY28E,EAAS38E,WACrB2d,MAAOA,EACPopC,cAAe01B,EACfJ,sBAAuBA,GAAsB,QAAAhlF,OALhCsmB,GAMb,KAEJ/zB,EAAAA,EAAAA,KAACisF,GAAoB,CAACE,WAAYyB,MAExC,EAUA4E,GAA6BvxE,aAAe,CAC1CJ,QAAS,CAAC,EACV8xE,QAAS,IChDJ,IAAMK,GAA+B,SAAHlyF,GAOlC,IANLyxF,EAAkBzxF,EAAlByxF,mBACAn8E,EAAUtV,EAAVsV,WACA+mD,EAAar8D,EAAbq8D,cACAppC,EAAKjzB,EAALizB,MACAlT,EAAO/f,EAAP+f,QACA4xE,EAAqB3xF,EAArB2xF,sBAGMjqE,GAAYtD,EAAAA,EAAAA,cAAY,SAAC8C,GACX,UAAdA,EAAM9b,KACRixD,EAAc/mD,EAAY2d,EAE9B,GAAG,CAACA,EAAOopC,EAAe/mD,IAEpB4E,GAAUkK,EAAAA,EAAAA,cAAY,WAC1Bi4C,EAAc/mD,EAAY2d,EAC5B,GAAG,CAACA,EAAOopC,EAAe/mD,IAE1B,OACE3W,EAAAA,EAAAA,MAAA,OACE8B,UAAW4xB,IAAW,0BAA2BtS,EAAQoyE,kBACzDj4E,QAASA,EACT6P,KAAK,SACLhI,SAAU,EACV,aAAYzM,EACZoS,UAAWA,EAAUzoB,SAAA,EAErBC,EAAAA,EAAAA,KAAA,OAAKgB,IAAKuxF,EAAoBrxF,IAAG,WAAAuM,OAAasmB,MAC9Ct0B,EAAAA,EAAAA,MAAA,OAAK8B,UAAU,kCAAiCxB,SAAA,EAC9CC,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,sBACfvB,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,mBACfvB,EAAAA,EAAAA,KAACyyF,EAAqB,CACpBlxF,UAAU,0BACV4K,KAAMiK,SAKhB,EAYA48E,GAA6B/xE,aAAe,CAC1CJ,QAAS,CAAC,G,iBClDCqyE,GAAoB,IAEpBC,GAAiB,SAACrxE,GAC7B,IACE/gB,EAME+gB,EANF/gB,KACA6mD,EAKE9lC,EALF8lC,OACAwrC,EAIEtxE,EAJFsxE,UACAC,EAGEvxE,EAHFuxE,aACAC,EAEExxE,EAFFwxE,oBACA9sB,EACE1kD,EADF0kD,YAGI+sB,GAAalnB,EAAAA,GAAAA,IAAM,0BAEzB,OACE5sE,EAAAA,EAAAA,MAAA+iB,EAAAA,SAAA,CAAAziB,SAAA,EACEC,EAAAA,EAAAA,KAAA,OAAKuB,WAAWwf,EAAAA,EAAAA,GAAa,eAAgB,uBAAuBhhB,SAAEgB,EAAKI,UAAUC,6CACrF3B,EAAAA,EAAAA,MAAA,OAAK8B,WAAWwf,EAAAA,EAAAA,GAAa,gBAAiB,oBAAqB,gCAAgChhB,SAAA,EACjGC,EAAAA,EAAAA,KAACwzF,GAAAA,EAAQ,CACPt9E,MAAO0xC,GAAU,GACjB3rB,SAAU,SAACtjB,EAAGE,GAAI,OAAKu6E,EAAUv6E,EAAK3C,MAAM,EAC5CsS,UAAW8qE,EACX/xF,WAAWwf,EAAAA,EAAAA,GAAa,kBAAmBsyE,GAAgB,4BAC3D,aAAYtyF,EAAKI,UAAUC,iBAC3B,mBAAkBmyF,EAClB/sB,YAAaA,EACbn7C,SAAUgoE,KAEZrzF,EAAAA,EAAAA,KAAA,OAAKE,GAAIqzF,EAAYnoD,MAAO,CAAE1sB,QAAS,QAAS3e,SAAEgB,EAAKI,UAAUC,aAAoB,CAAEwmD,OAAAA,WAI/F,EAEa6rC,GAAe,SAAC3xE,GAC3B,IACE/gB,EAQE+gB,EARF/gB,KACA6mD,EAOE9lC,EAPF8lC,OACAwrC,EAMEtxE,EANFsxE,UACAC,EAKEvxE,EALFuxE,aACAK,EAIE5xE,EAJF4xE,eACAJ,EAGExxE,EAHFwxE,oBACAK,EAEE7xE,EAFF6xE,sBACAntB,EACE1kD,EADF0kD,YAGI+sB,GAAalnB,EAAAA,GAAAA,IAAM,0BAEzB,OACE5sE,EAAAA,EAAAA,MAAA+iB,EAAAA,SAAA,CAAAziB,SAAA,EACEC,EAAAA,EAAAA,KAAA,OAAKuB,WAAWwf,EAAAA,EAAAA,GAAa,eAAgB,uBAAuBhhB,SAAEgB,EAAKI,UAAUC,6CACrF3B,EAAAA,EAAAA,MAAA,OAAK8B,WAAWwf,EAAAA,EAAAA,GAAa,gBAAiB,gCAAgChhB,SAAA,EAC5EC,EAAAA,EAAAA,KAACwzF,GAAAA,EAAQ,CACPt9E,MAAO0xC,GAAU,GACjB3rB,SAAU,SAACtjB,EAAGE,GAAI,OAAKu6E,EAAUv6E,EAAK3C,MAAM,EAC5CsS,UAAW8qE,EACX/xF,UAAU,kBACV,aAAYR,EAAKI,UAAUC,iBAC3B,mBAAkBmyF,EAClB/sB,YAAaA,EACbn7C,SAAUgoE,KAEZrzF,EAAAA,EAAAA,KAAA,OAAKE,GAAIqzF,EAAYnoD,MAAO,CAAE1sB,QAAS,QAAS3e,SAAEgB,EAAKI,UAAUC,aAAoB,CAAEwmD,OAAAA,OACvF5nD,EAAAA,EAAAA,KAAA,OAAKuB,WAAWwf,EAAAA,EAAAA,GAAa,aAAc,mCAAmChhB,UAC5EC,EAAAA,EAAAA,KAAC8gB,EAAAA,EAAM,CACLlS,MAAM5O,EAAAA,EAAAA,KAAC4zF,GAAAA,IAAW,IAClB3wE,WAAW,cACXjI,QAAS24E,EACTtoE,SAAUqoE,EACVnyF,WAAWwf,EAAAA,EAAAA,GAAa,kBAAmB2yE,EAAiB,WAAa,WACzE,aAAY3yF,EAAKI,UAAUC,8BAMvC,EC/EayyF,GAA2B,SAAH/yF,GAc9B,IAbLC,EAAID,EAAJC,KACA+yF,EAAgBhzF,EAAhBgzF,iBACAC,EAAmBjzF,EAAnBizF,oBACAC,EAAkBlzF,EAAlBkzF,mBACAC,EAAmBnzF,EAAnBmzF,oBACAC,EAAsBpzF,EAAtBozF,uBACAC,EAAuBrzF,EAAvBqzF,wBACAC,EAAkBtzF,EAAlBszF,mBACA9sD,EAAcxmC,EAAdwmC,eACA+sD,EAAuBvzF,EAAvBuzF,wBACAC,EAAmBxzF,EAAnBwzF,oBACAC,EAAUzzF,EAAVyzF,WACA34E,EAAM9a,EAAN8a,OAIM44E,GAAiBlyE,EAAAA,EAAAA,QAAO,MAC9BjL,GAAkCC,EAAAA,EAAAA,eAASpC,GAAUqC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAA9Co9E,EAASl9E,EAAA,GAAEm9E,EAAYn9E,EAAA,GAExBo9E,GAAsBzvE,EAAAA,EAAAA,cAAY,SAACoc,EAAGC,GAC1C,GAAIizD,EAAellE,QAAS,CAC1B,IAAMslE,EAAWJ,EAAellE,QAAQm0D,wBAClCoR,EAAcD,EAASj1F,MACvBm1F,EAAeF,EAASh1F,OAExBm1F,EAAKF,EAAcb,EACnBgB,EAAKF,EAAef,EACpBrrD,EAAQ/7B,KAAK9G,IAAIkvF,EAAIC,GACrBr1F,EAAQq0F,EAAqBtrD,EAC7B9oC,EAASm0F,EAAsBrrD,EAC/BusD,GAAeJ,EAAcl1F,GAAS,EACtCu1F,GAAcJ,EAAel1F,GAAU,EACrCyhB,EAAcuzE,EAAdvzE,IAAKuF,EAASguE,EAAThuE,KACb,MAAO,CACL0a,EAAiC0yD,EAAqBr0F,GAAjD2hC,EAAI1a,EAAQquE,GACjB1zD,EAA+BwyD,EAAsBn0F,GAAhD2hC,EAAIlgB,EAAO6zE,GAEpB,CACA,MAAO,CAAE5zD,GAAI,EAAGC,GAAI,EACtB,GAAG,CAACwyD,EAAqBC,IAEnBmB,GAAmBjwE,EAAAA,EAAAA,cAAY,SAACvM,GACpC,IAAAy8E,EAAiBT,EAAoBh8E,EAAE4qE,QAAS5qE,EAAE08E,SAA1C/zD,EAAC8zD,EAAD9zD,EAAGC,EAAC6zD,EAAD7zD,EACLmG,EAAYusD,EAAoB3yD,EAAGC,EAAGyyD,GAC5CE,EAAuBxsD,EACzB,GAAG,CAACusD,EAAqBD,EAAoBE,EAAwBS,IAE/DW,GAAoBpwE,EAAAA,EAAAA,cAAY,WACpCgvE,OAAuBh/E,EACzB,GAAG,CAACg/E,IAEEqB,GAAmBrwE,EAAAA,EAAAA,cAAY,SAACvM,GACpC,IAAA68E,EAAiBb,EAAoBh8E,EAAE4qE,QAAS5qE,EAAE08E,SAA1C/zD,EAACk0D,EAADl0D,EAAGC,EAACi0D,EAADj0D,EACLmG,EAAYusD,EAAoB3yD,EAAGC,EAAGyyD,GACxCtsD,EAAY,IACd0sD,EAAmB1sD,GACnB9rB,EAAOi2B,SAAS,8EAEpB,GAAG,CAACoiD,EAAqBr4E,EAAQo4E,EAAoBI,EAAoBO,IAEnEc,GAAavwE,EAAAA,EAAAA,cAAY,SAACvM,GAC1B47E,GAAcA,EAAWt/E,OAAS,IACtB,QAAV0D,EAAEzM,KACe,IAAfyM,EAAE+8E,cACcxgF,IAAdu/E,GACFC,EAAaH,EAAWt/E,OAAS,GACjCi/E,EAAuBK,EAAWA,EAAWt/E,OAAS,IACtD0D,EAAEuP,kBACOusE,EAAY,GAAK,IAC1BC,EAAcD,EAAY,GAC1BP,EAAuBK,EAAYE,EAAY,IAC/C97E,EAAEuP,mBAEoB,IAAfvP,EAAE+8E,gBACOxgF,IAAdu/E,GACFC,EAAa,GACbR,EAAuBK,EAAW,IAClC57E,EAAEuP,kBACQusE,EAAY,EAAKF,EAAWt/E,OAAS,IAC/Cy/E,EAAcD,EAAY,GAC1BP,EAAuBK,EAAYE,EAAY,IAC/C97E,EAAEuP,mBAGa,UAAVvP,EAAEzM,UAAiCgJ,IAAdu/E,IAC9BL,EAAmBG,EAAWE,IAC9B74E,EAAOi2B,SAAS,8EAChBl5B,EAAEuP,kBAGR,GAAG,CAACtM,EAAQ64E,EAAWF,EAAYH,EAAoBF,IAEjDyB,GAAmBzwE,EAAAA,EAAAA,cAAY,WACnCwvE,OAAax/E,GACbg/E,OAAuBh/E,EACzB,GAAG,CAACg/E,IAwBJ,OAtBAv8E,EAAAA,EAAAA,YAAU,WACR,IAAMi9E,EAAWJ,EAAellE,QAShC,OARIslE,IACFA,EAAS94B,iBAAiB,YAAaq5B,GACvCP,EAAS94B,iBAAiB,aAAcw5B,GACxCV,EAAS94B,iBAAiB,YAAay5B,GACvCX,EAAS94B,iBAAiB,UAAW25B,GACrCb,EAAS94B,iBAAiB,OAAQ65B,GAClCf,EAAS94B,iBAAiB,QAAS65B,IAE9B,WACDf,IACFA,EAASvS,oBAAoB,YAAa8S,GAC1CP,EAASvS,oBAAoB,aAAciT,GAC3CV,EAASvS,oBAAoB,YAAakT,GAC1CX,EAASvS,oBAAoB,UAAWoT,GACxCb,EAASvS,oBAAoB,OAAQsT,GACrCf,EAAS94B,iBAAiB,QAAS65B,GAEvC,CACF,GAAG,CAAChB,EAAqBQ,EAAkBG,EAAmBC,EAAkBE,EAAYE,KAG1F31F,EAAAA,EAAAA,KAAA,OACEuB,UAAU,gBACVwgB,IAAKyyE,EAEL3xE,SAAU,EACV,aAAY9hB,EAAKI,UAAUC,4BAAkCrB,SAE5D+zF,IACCr0F,EAAAA,EAAAA,MAAA+iB,EAAAA,SAAA,CAAAziB,SAAA,EACEC,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,iBAAiBP,IAAK8yF,EAAkB5yF,IAAKH,EAAKI,UAAUC,2BAC3EpB,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,yBACd4yF,IAA4Bn0F,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,iCAC1C4yF,IACA10F,EAAAA,EAAAA,MAAA+iB,EAAAA,SAAA,CAAAziB,SAAA,CACIunC,IAAkBtnC,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,eAAeP,IAAKsmC,EAAgBpmC,IAAKH,EAAKI,UAAUC,wBACzFizF,IAA2Br0F,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,iBAAiBP,IAAKqzF,EAAyBnzF,IAAKH,EAAKI,UAAUC,0BAC7GkzF,IAAuBt0F,EAAAA,EAAAA,KAAA,OAAKuB,UAAU,oBAAoBP,IAAKszF,EAAqBpzF,IAAKH,EAAKI,UAAUC,oCAOxH,EAkBAyyF,GAAyB5yE,aAAe,CACtCszE,WAAY,ICpKP,IAAMqB,GAAiB,SAAH90F,GAAkE,IACvF+0F,EAD2BjnC,EAAW9tD,EAAX8tD,YAAalV,EAAU54C,EAAV44C,WAAYo8C,EAA2Bh1F,EAA3Bg1F,4BA8CxD,MAAO,CACLC,iBA5CsB7wE,EAAAA,EAAAA,cAAY,SAAAlP,GAQ7B,IAPL84B,EAAO94B,EAAP84B,QACAI,EAAUl5B,EAAVk5B,WACAD,EAAcj5B,EAAdi5B,eACA4P,EAAqB7oC,EAArB6oC,sBACAolB,EAAOjuD,EAAPiuD,QACAp1B,EAAQ74B,EAAR64B,SACAmnD,EAAchgF,EAAdggF,eAEIt8C,IACFm8C,EAAwBn8C,EAAWqF,YAAY,gBACzBC,WAGxB,IAAMi3C,EAAgB,CACpBp3C,sBAAAA,EACA74B,KAAMipB,EACNJ,SAAAA,GAGF,OAAIo1B,EACKrV,EAAYvB,aAAWv5C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EAC3BmiF,GAAa,IAChB/mD,WAAAA,EACAwK,WAAYm8C,KACXzxD,MAAK,SAAC3C,GACHu0D,GACFA,EAAev0D,EAEnB,IAGKmtB,EAAY3B,aAAWn5C,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EAC3BmiF,GAAa,IAChBjxD,UAAW8J,EACXqR,iBAAgB21C,QAAqC5gF,KACpDkvB,MAAK,SAAC3C,GACHu0D,GACFA,EAAev0D,EAEnB,GACF,GAAG,CAACmtB,EAAaknC,EAA6BD,IAKhD,E,aCxCaK,GAAe,WAC1B,IAAMC,GAAgBjxE,EAAAA,EAAAA,cAAY,SAACgqB,GACjC,OADkEl6B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAP,CAAC,GAAbivD,SAGtCmyB,EAAAA,GAAAA,IAAuBlnD,GAAYkY,QANpB,KAMiD5hB,OAAM,WAAO,KAG/E4wD,EAAAA,GAAAA,IAAuBlnD,EAChC,GAAG,IAEH,MAAO,CACLinD,cAAAA,EAEJ,EAEaE,GAAmB,WAC9B,IAAMC,GAAqBh0E,EAAAA,EAAAA,SAAO,GAE5Bi0E,GAAqBrxE,EAAAA,EAAAA,cACzB,SAAAlP,GAAA,IAAG84B,EAAO94B,EAAP84B,QAASgnD,EAA2B9/E,EAA3B8/E,4BAA2B,OAAOU,EAAAA,GAAAA,IAA2B,CACvEC,YAAa3nD,EACb4nD,cAAeZ,EAA8BtuF,GAAAA,GAAiB,GAAKD,GAAAA,GAAS,GAC5EovF,aAAcb,EAA8BtuF,GAAAA,GAAiB,GAAKD,GAAAA,GAAS,KAE1E68B,MAAK,kBAAMwyD,EAAAA,GAAAA,IAAoB9nD,EAAQ,IACvC1K,MAAK,SAACzX,GASL,OARImpE,GAA+BnpE,IAC/BA,EAAIkqE,cAAgBrvF,GAAAA,GAAiB,IAAMmlB,EAAIkqE,aAAetvF,GAAAA,GAAS,IACtEolB,EAAImqE,eAAiBtvF,GAAAA,GAAiB,IAAMmlB,EAAImqE,cAAgBvvF,GAAAA,GAAS,IAE5E+uF,EAAmBhnE,SAAU,EAE7BgnE,EAAmBhnE,SAAU,EAExB,CACL0f,gBAAiBsnD,EAAmBhnE,QAExC,GAAE,GACF,IAGEynE,GAAoB7xE,EAAAA,EAAAA,cAAY,SAAA7I,GAAwD,IAArDyyB,EAAOzyB,EAAPyyB,QAASm1B,EAAO5nD,EAAP4nD,QAAS6xB,EAA2Bz5E,EAA3By5E,4BACzD,OAAI7xB,GACK+yB,EAAAA,GAAAA,MAGFT,EAAmB,CAAEznD,QAAAA,EAASgnD,4BAAAA,GACvC,GAAG,CAACS,IAEJ,MAAO,CACLA,mBAAAA,EACAQ,kBAAAA,EAEJ,EC1DME,GAAiB,SAACC,EAAetrD,GACrC,GAAIA,IAAQr/B,IAAAA,QAAU2qF,GAAgB,CACpC,IAAMC,EAAavrD,EAAIzT,cAEvB,OAAO5rB,IAAAA,MAAQ2qF,GACZnhF,KAAI,SAAAlC,GAAI,OAAIA,EAAKskB,aAAa,IAC9Bi/D,SAASD,GACTjhF,OACL,CAEA,OAAO,CACT,EAEamhF,GAA8B,WACzC,IAAMC,GAA8BpyE,EAAAA,EAAAA,cAAY,eAAG0mB,GAAH52B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAW,CAAC,GAAT42B,IAAG,MAAa,CACjEq4B,QAASgzB,GAAeM,GAAAA,GAA0B3rD,GACnD,GAAG,IAEJ,MAAO,CACL0rD,4BAAAA,EAEJ,ECRMn2E,IAAYjB,EAAAA,EAAAA,GAAW,CAC3Bs3E,YAAU1jF,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACRuM,MAAO,UACPG,WAAY,SACZvB,gBAAiB,eACdN,EAAAA,GAAWK,aAAa,MAAO,MAAO,MAAO,QAC7CL,EAAAA,GAAWQ,OAAO,WAIZs4E,GAAiB,SAAH32F,GAEpB,IADL8a,EAAM9a,EAAN8a,OAAQgzC,EAAW9tD,EAAX8tD,YAAalV,EAAU54C,EAAV44C,WAAYz8B,EAAenc,EAAfmc,gBAAiBlc,EAAID,EAAJC,KAAM22F,EAAoB52F,EAApB42F,qBAAsBr/E,EAAGvX,EAAHuX,IAAKs/E,EAAS72F,EAAT62F,UAAW/sD,EAAc9pC,EAAd8pC,eAAgBorD,EAAcl1F,EAAdk1F,eAAgBF,EAA2Bh1F,EAA3Bg1F,4BAE9Hz+E,GAAoCC,EAAAA,EAAAA,UAAS,IAAGC,GAAAC,EAAAA,GAAAA,GAAAH,EAAA,GAAzCugF,EAAUrgF,EAAA,GAAEsgF,EAAatgF,EAAA,GACxB4+E,EAAkBD,KAAlBC,cACAY,EAAsBV,KAAtBU,kBACAhB,EAAoBH,GAAe,CAAEhnC,YAAAA,EAAalV,WAAAA,EAAYo8C,4BAAAA,IAA9DC,gBACAuB,EAAgCD,KAAhCC,4BACFz2E,EAAUM,KAkLhB,MAAO,CACL22E,YAjLiB5yE,EAAAA,EAAAA,cAAY,SAAC6yE,EAAeC,GAC7CL,EAAU,IAEV,IAAMM,EAAkBF,EAAc9iF,OAAS,EACzCijF,GAAoBniF,EAAAA,EAAAA,KAAIgiF,GAAe,SAACpsD,GAC5C,IAAAwsD,GAAgCtsD,EAAAA,GAAAA,IAAcF,EAAK3lB,MAA3CipB,EAAckpD,EAAdlpD,eAAgBrD,EAAGusD,EAAHvsD,IAElBwsD,EAAgBd,EAA4B,CAChDroD,eAAAA,EACArD,IAAAA,IAGF,OAAA93B,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACKskF,GAAa,IAChBnpD,eAAAA,GAEJ,IAKA,OAAOnP,KAAAA,IACLi4D,GACA,SAACM,EAAStkE,GAAK,OAAKoiE,EAAckC,EAASH,EAAkBnkE,GAAO,IACpEqQ,MAAK,SAACk0D,GACN,IAAMC,EAAwB,GAiD9B,OAhD4Bz4D,KAAAA,IAC1Bw4D,GACA,SAACE,EAAYzkE,GAAK,OAChBgjE,GAAiBjjF,EAAAA,EAAAA,GAAC,CAChBgiF,4BAAAA,EACAhnD,QAAS0pD,GACNN,EAAkBnkE,KACpBqQ,MAAK,SAAC2K,GACP,IAAMC,GAAkBwgB,EAAAA,EAAAA,KAAIzgB,EAAiB,mBAAmB,GACxDE,EAAmBipD,EAAkBnkE,GAArCkb,eACRspD,EAAsBxkE,GAAS,CAC7Bib,gBAAAA,EACA7iC,KAAM8iC,EAEV,IAAGzJ,OAAM,SAAC7sB,GAKR,MAJIA,GAAmB,wBAAdA,EAAE2wB,SAAqC1tB,GAAUA,EAAOi2B,WAC/Dj2B,EAAOi2B,SAAS,mDAADpkC,QAAoDqrD,EAAAA,GAAAA,eAAcngD,KACjFiD,EAAOi2B,SAAS,iEAADpkC,QAAkEqrD,EAAAA,GAAAA,eAAc0/B,MAE3F7/E,CACR,GAAE,IAIHyrB,MAAK,WAEJ,OAD0BnpB,EAAAA,EAAAA,QAAOs9E,GAAuB,SAAA1kF,GAAI,OAAIA,GAAQA,EAAKm7B,eAAe,IACtE/5B,OA1EN,EA4EP6qB,KAAAA,IAAYw4D,GAAa,SAACE,EAAYzkE,GAC3C,OAAqD,IAAjDwkE,EAAsBxkE,GAAOib,gBACxB+nD,GAAiBjjF,EAAAA,EAAAA,GAAC,CACvBgiF,6BAA6B,EAC7BhnD,QAAS0pD,GACNN,EAAkBnkE,KACpByR,OAAM,SAAC7sB,GAKR,MAJIA,GAAmB,wBAAdA,EAAE2wB,SAAqC1tB,GAAUA,EAAOi2B,WAC/Dj2B,EAAOi2B,SAAS,mDAADpkC,QAAoDqrD,EAAAA,GAAAA,eAAcngD,KACjFiD,EAAOi2B,SAAS,iEAADpkC,QAAkEqrD,EAAAA,GAAAA,eAAc0/B,MAE3F7/E,CACR,IAEKmnB,KAAAA,SACT,IAEKA,KAAAA,SACT,IAE+BsE,MAAK,WACpC,IAAMq0D,GAAoBC,EAAAA,GAAAA,IAAqB,CAC7CltD,MAAOusD,EACPO,YAAAA,EACAJ,kBAAAA,IAGFL,EAAcY,GAEd,IAAME,EAAc,SAAC5kE,EAAO6kE,GAC1Bf,GAAc,SAACgB,GAIb,OAFIC,EAAAA,GAAAA,IAAqC/kE,EAAO6kE,EAA5CE,CAAsD,CAAElB,WAAYiB,IAExDjB,UAClB,GACF,EAEMmB,EAAe,IAErBC,EAAAA,EAAAA,MAAKV,GAAa,SAACE,EAAYzkE,GAC7B,IAAQkb,EAAmBipD,EAAkBnkE,GAArCkb,eAER8pD,EAAavrF,MAAK,kBAAMuoF,GAAejiF,EAAAA,EAAAA,GAAC,CACtCg7B,QAAS0pD,EACTtpD,WAAY6oD,EAAchkE,GAC1B8qB,uBAAuBo6C,EAAAA,GAAAA,IAAe,CACpCN,YAAAA,EACA5kE,MAAAA,EACAmlE,uBAAwB,IAE1BlD,eAAAA,EACA/mD,eAAAA,GACGipD,EAAkBnkE,IACrB,GACJ,IAEA,IAAMiX,EAAqB,GAO3B,OAAOmE,EAAAA,GAAAA,gCAA+B,CACpCC,gBAAiB2pD,EACjB1pD,kBAAmBrmC,GAAAA,GACnBsmC,eATqB,SAAC7P,GACtB,IAAMwS,GAAYud,EAAAA,EAAAA,KAAI/vB,EAAK,CAAC,OAAQ,QAAS,EAAG,QAAS,IAGzDuL,EAAmBx9B,KAAKykC,EAC1B,IAMG7N,MAAK,SAAC+0D,GACL,IAAMC,EAAWruD,GAAoB,CACnCC,mBAAAA,EACAJ,eAAAA,EACAvyB,IAAAA,EACAuD,OAAAA,EACA7a,KAAAA,IAGF,GAAIq4F,EACF1B,IACAG,EAAc,IACd56E,EAAgBE,YAAYi8E,GAC5Bx9E,EAAOi2B,SAAS,8DAADpkC,OAA+D2rF,QACzE,CACL,IAAMC,EAAWF,GAAgBA,EAAazrF,KAAK,KACnDkO,EAAOi2B,SAAS,mDAAoD,CAAEwnD,SAAAA,IAEtE,IACMC,GADoBr+E,EAAAA,EAAAA,QAAOs9E,GAAuB,SAAA1kF,GAAI,OAAIA,GAAQA,EAAKm7B,eAAe,IAC3C/5B,OAE7CqkF,EAAyB,EAC3Br8E,EAAgBs8E,SAASx4F,EAAKI,UAAUC,kKAAyK,CAAEo4F,UAAWF,KAE9Nr8E,EAAgBs8E,UACd95F,EAAAA,EAAAA,MAAA,QAAAM,SAAA,CACGgB,EAAKI,UAAUC,4CAChBpB,EAAAA,EAAAA,KAAA,UAAQuB,UAAW4xB,IAAW,aAAD1lB,OAAcoT,EAAQ22E,aAAe56E,MAAM,gBAAe7c,SAAEgB,EAAKI,UAAUC,4CAI9Gs2F,IACAG,EAAc,GAChB,CACF,GACJ,GACF,IAAGryD,OAAM,SAAC7sB,GACR,IAAM8gF,EAAkB14F,EAAKI,UAAUC,kDACjCs4F,EAAY,EAChBC,EAAAA,GAAAA,IAA+BhhF,EAAGiyB,EAAgBqtD,EAAiBnC,IAAoD2D,GAEzH5B,EAAc,IACdF,EAAU+B,GAEV99E,EAAOi2B,SAAS,8DAADpkC,OAA+DisF,EAAU,KACpF/gF,GAAmB,wBAAdA,EAAE2wB,SAAqC1tB,GAAUA,EAAOi2B,UAC/Dj2B,EAAOi2B,SAAS,0CAADpkC,QAA2CqrD,EAAAA,GAAAA,eAAcngD,IAE5E,IAAG8mC,SAAQ,WACTu4C,GACF,GACF,GAAG,CAACL,EAAWL,EAA6BnB,EAAeY,EAAmBn7E,EAAQm6E,EAAiBC,EAAgBprD,EAAgBvyB,EAAKq/E,EAAsBz6E,EAAiBlc,EAAM8f,EAAQ22E,WAAY1B,IAI3M8B,WAAAA,EAEJ,EAEagC,GAAuB,SAAH5jF,GAA6B,IACxD6jF,EADiCjuD,EAAG51B,EAAH41B,IAAKkuD,EAAU9jF,EAAV8jF,WAS1C,OANI1C,EAAAA,EAAAA,UAASvuF,GAAAA,GAA0B+iC,GACrCiuD,EAAUE,GAAAA,IACD3C,EAAAA,EAAAA,UAASG,GAAAA,GAA0B3rD,KAC5CiuD,EAAUG,GAAAA,IAGLH,EAAU,GAAKC,EAAaD,CACrC,EAEaI,GAAoC,SAAH59E,GAAU,OAAAA,EAAJtb,KAC7CI,UACHC,wLACA,CACE84F,qBAAsBH,GAAAA,GACtBI,qBAAsBH,GAAAA,IAExB,E,0BC7OEI,GAAW,CACfC,aAAc,MCEHC,GAA8B,SAACp0E,GAC1C,IAAMM,EAAM,SAAC1E,GACX,IACEy4E,EACEz4E,EADFy4E,cAAeC,EACb14E,EADa04E,MAAOpzB,EACpBtlD,EADoBslD,IAAKqzB,EACzB34E,EADyB24E,IAErBxU,EAAWuU,EAAXvU,OACFyU,EAAYH,GAAiB,CAAC,EAG/BG,EAAUC,oBACbD,EAAUC,kBAAoB,CAC5BC,kBAAmB,sCAIlBF,EAAUG,cACbH,EAAUG,YAAc,CAAEzhF,GAAIqhF,GAAOxU,EAAOwU,MAGzCC,EAAUI,kBACbJ,EAAUI,gBAAkB,CAAE1hF,GAAIguD,GAAO6e,EAAO7e,MAGlD,IAAA2zB,EDtBwB,SAAHj6F,GAA2B,IAArBy5F,EAAaz5F,EAAby5F,cAC7B,IAAKH,GAASC,aAAc,CAC1B,IAAMl0E,EAAU,CACd60E,WAAY,WAAF,OAAQT,EAAcO,gBAAgB1hF,EAAE,EAClD6hF,WAAY,WAAF,OAAQV,EAAcM,YAAYzhF,EAAE,EAC9C8hF,mBAAoB3uF,IAAAA,KACpB4uF,sBAAuB5uF,IAAAA,KACvB6uF,iBAAiB,GAGnBhB,GAASC,cAAegB,EAAAA,GAAAA,eAAcl1E,EAASo0E,EAAcI,kBAAkBC,kBAAmB,IAAIP,YACxG,CAEA,OAAOD,EACT,CCQ6BkB,CAAa,CAAEf,cAAeG,IAA/CL,EAAYU,EAAZV,aAER,OACEr6F,EAAAA,EAAAA,KAACu7F,GAAAA,wBAAuB,CAACC,cAAenB,EAAat6F,UACnDC,EAAAA,EAAAA,KAACkmB,GAAgBpS,EAAAA,EAAAA,GAAA,GAAKgO,KAG5B,EA0BA,OANA0E,EAAIvF,aAAe,CACjBu5E,MAAO,CAAEvU,OAAQ,CAAC,GAClB7e,IAAK,KACLqzB,IAAK,OAGAgB,EAAAA,GAAAA,IAAkBj1E,EAC3B,C","sources":["../../../../ads-studio/packages/ads-studio-app-shared-components/src/asset-images/video-icon.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/asset-images/sparkle-svg-icon.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/asset-images/hollow-sparkle-svg-icon.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/asset-images/black-sparkle-svg-icon.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/asset-images/info-sparkle-svg-icon.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/asset-images/squareDismiss-svg-icon.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/asset-images/spinnerBase-svg-icon.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/asset-images/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/constants.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/filter-type.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/get-asset-type-options.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/get-time-description.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/convert-time-duration.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/get-date-added-options.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/get-import-source-options.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/get-image-sorting-options.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/get-asset-source-options.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/edit-image-utils.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/AI-prompt-example/sample.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/merge-task-updates.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/use-clarity-hook.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/model/utils.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/add-asset-entry-card/style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/add-asset-entry-card/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-panel-container/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-spinner/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-action-button-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-action-button.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/theme/ads-studio-theme-provider.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/theme/with-ads-studio-styles.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-overlay-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-overlay.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-card-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-card.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-decorative-icon.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-decorative-icon.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-decorative-label.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-decorative-label.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-deletion-button-decorator.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-deletion-button-decorator-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-image.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-image.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-selection-decorator-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-selection-decorator.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-loading-cell.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/folder-icon-component/style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/folder-icon-component/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-drag-decorator-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-drag-decorator.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-cell-drop-decorator-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/grid-cells/tiles-grid-cell-drop-decorator.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/default-grid-config.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/tiles-grid.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/tiles-grid-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/multi-selection-grid.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/styles/section-tiles-grid-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-tile-grid/section-tiles-grid.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/text-with-highlight/styles.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/text-with-highlight/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/shared-cell-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/folders-grid-cell/style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/folders-grid-cell/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/image-assets-grid-cell/style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/image-assets-grid-cell/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/assets-grid-cell/grid-cell-factory.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/assets-grid-cell/style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/date-utils.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/upload-asset-limit-error.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/image-utils.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/video-utils.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/get-error-string.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/processor-util.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/upload-asset-error.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/folder-functions.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/upload-folder-error.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/task-poller.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service/folder-reducer.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/error-handling/ads-studio-error-base.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/error-handling/service-error-processors.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service/use-folders.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service/use-image-repo-methods.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service/use-video-repo-methods.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service/use-ai-generated-images.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service/asset-with-folders-data-service.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service/use-folder-path-tree.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service-ex/base/asset-window.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service-ex/base/assets-window-manager.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service-ex/base/assets-reducer-base.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service-ex/base/use-assets-service-base.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service-ex/use-basic-assets-services.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service-ex/use-edit-image-service.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/services/data-service-ex/use-video-task-poller.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/image-cropping-task-status-poller.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/video-task-status-poller.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/utils/with-asset-task-status-poller.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/assets-grid-cell/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/video-component/style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/video-component/video.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/video-component/video-placeholder.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/video-assets-grid-cell/style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/video-assets-grid-cell/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-asset-grid-cell/image-panel-grid-cell/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/panel-image-grid/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/performance-filter-bar/styles.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/performance-filter-bar/performance-editing-filter-bar.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/performance-filter-bar/view-all-filters-button.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/performance-filter-bar/performance-readonly-filter-bar.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/add-video-panel-content/video-playback-view.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/add-video-panel-content/item-placeholder-box-view.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/folder-uploading-preview/styles.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/folder-uploading-preview/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/file-uploading-preivew/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/add-video-panel-content/video-load-preview.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/add-video-panel-content/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/stock-image-panel-content/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/invest-image-panel-content/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/invest-video-panel-content/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/website-image-panel-content/domain-input-view.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/website-image-panel-content/subdomain-input-view.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/website-image-panel-content/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/website-image-panel-content/useWebsiteImages.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-breadcrumb/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-library-page-content/styles/empty-view-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/empty-view/library-page-empty-view.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/new-dropdown.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/image-size.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/simple-date-range-picker/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/date-added.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/search-box.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/asset-type.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/sort-by.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/asset-source.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/video-duration.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/import-source.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/video-duration-scrollbar.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/filter-toggle.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/state/date-added-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/context/filter-context.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/filter-bar-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/state/filter-toggle-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/state/asset-type-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/state/search-box-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/state/sort-by-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/state/asset-source-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/state/import-source-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/state/image-size-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/components/state/video-duration-state.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/filter-bar.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/context/filter-provider.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/filter-bar/performance-filter-components.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/folder-path-breadcrumb/style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/folder-path-breadcrumb/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-library-page-content/styles/library-page-style.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/hidden-div-for-announce/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-library-page-content/sections-utils.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/ads-studio-library-page-content/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/confirm-dialog/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/generate-image/context/generate-image-context.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/generate-image/context/generate-image-context-provider.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/loading-indicator/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/example-image/example-prompt.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/example-image/example-image-list.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/example-image/example-image-cell.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/prompt-editor/prompt-editor.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/components/object-selection/index.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/hooks/use-upload-asset.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/hooks/use-validate-asset.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/hooks/use-customized-handler-options.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/hooks/use-upload-files.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/js-data/init-cc-js-data.js","../../../../ads-studio/packages/ads-studio-app-shared-components/src/js-data/with-cc-js-data-context-provider.js"],"sourcesContent":["export const videoIcon = \"data:image/svg+xml,%3Csvg width='14' height='12' viewBox='0 0 14 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 3C1 2.17157 1.67157 1.5 2.5 1.5H8.5C9.32843 1.5 10 2.17157 10 3V9C10 9.82843 9.32843 10.5 8.5 10.5H2.5C1.67157 10.5 1 9.82843 1 9V3ZM2.5 0.5C1.11929 0.5 0 1.61929 0 3V9C0 10.3807 1.11929 11.5 2.5 11.5H8.5C9.88071 11.5 11 10.3807 11 9V8.49943L12.7999 9.84997C13.2943 10.221 14 9.86819 14 9.25008V2.75496C14 2.13743 13.2954 1.78451 12.8009 2.15432L11 3.50093V3C11 1.61929 9.88071 0.5 8.5 0.5H2.5ZM11 4.74959L13 3.25407V8.74993L11 7.24921V4.74959Z' fill='white'/%3E%3C/svg%3E%0A\";\r\n","import React from 'react';\r\n\r\nexport const SparkeSVGIcon = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n","import React from 'react';\r\n\r\nexport const HollowSparkleSVGIcon = () => (\r\n \r\n \r\n \r\n \r\n \r\n);\r\n","import React from 'react';\r\n\r\nexport const BlackSparkleSVGIcon = () => (\r\n \r\n \r\n \r\n \r\n \r\n);\r\n","import React from 'react';\r\n\r\nexport const InfoSparkleSVGIcon = () => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n);\r\n","import React from 'react';\r\nimport squareDismissImage from './squareDismiss.svg';\r\n\r\nexport const SquareDismissIcon = ({ i18n }) => ();\r\n","import React from 'react';\r\nimport spinnerBase from './spinnerBase.svg';\r\n\r\nexport const SpinnerIcon = ({ i18n }) => ();\r\n","import CreateSVGIcon from './ad-studio-create-icon.svg';\r\nimport UploadSVGIcon from './ad-studio-upload-icon.svg';\r\nimport StockSVGIcon from './ad-studio-stock-icon.svg';\r\nimport InvestSVGIcon from './ad-studio-invest-icon.svg';\r\nimport PdfSVGIcon from './ad-studio-pdf-icon.svg';\r\nimport WarningSVGIcon from './ad-studio-warning-icon.svg';\r\nimport CreateManualBrandKitSVGIcon from './ad-studio-create-manual-icon.svg';\r\nimport WebsiteSVGIcon from './ad-studio-website-icon.svg';\r\nimport ImageEmptyViewSVG from './image-page-empty-view-image.svg';\r\nimport LibraryEmptyViewSVG from './library-page-empty-view-image.svg';\r\nimport VideoEmptyViewSVG from './video-page-empty-view-image.svg';\r\nimport AIWarningIconSource from './AIWarningIcon.png';\r\nimport ChooseImageSVG from './choose-image-icon.svg';\r\nimport LogoAssetsSvg from './logo-assets.svg';\r\nimport BrandKitLogoIconSVG from './ad-studio-brandkit-logo-icon.svg';\r\n\r\nexport const EntryCardSVGIcons = {\r\n CreateSVGIcon,\r\n UploadSVGIcon,\r\n StockSVGIcon,\r\n InvestSVGIcon,\r\n PdfSVGIcon,\r\n WebsiteSVGIcon,\r\n WarningSVGIcon,\r\n CreateManualBrandKitSVGIcon,\r\n BrandKitLogoIconSVG,\r\n};\r\n\r\nexport { videoIcon } from './video-icon';\r\nexport { SparkeSVGIcon } from './sparkle-svg-icon';\r\nexport { HollowSparkleSVGIcon } from './hollow-sparkle-svg-icon';\r\nexport { BlackSparkleSVGIcon } from './black-sparkle-svg-icon';\r\nexport { InfoSparkleSVGIcon } from './info-sparkle-svg-icon';\r\nexport { SquareDismissIcon } from './squareDismiss-svg-icon';\r\nexport { SpinnerIcon } from './spinnerBase-svg-icon';\r\n\r\n\r\nexport const AIWarningIcon = AIWarningIconSource;\r\nexport const ChooseImageIcon = ChooseImageSVG;\r\nexport const LogoAssetsIcon = LogoAssetsSvg;\r\n\r\nexport const EmptyViewIcons = {\r\n ImageEmptyViewSVG,\r\n LibraryEmptyViewSVG,\r\n VideoEmptyViewSVG,\r\n};\r\n","export { allowedVideoFileExtensions as supportedVideoExtensions } from '@bingads-webui-campaign-react/upload-file-picker';\r\n\r\nexport const CSMLAdTypeUsage = {\r\n UsedIn: 'Used in',\r\n NotUsedIn: 'Not used in',\r\n};\r\n\r\nexport const CSMLAdType = {\r\n MMA: 'Multimedia ad',\r\n Audience: 'Microsoft Advertising Network',\r\n ImageExtension: 'Image extension',\r\n PMax: 'Performance max',\r\n};\r\n\r\nexport const CSMLSortIcon = {\r\n SortUp: 'SortUp',\r\n SortDown: 'SortDown',\r\n};\r\n\r\nexport const CSMLSortBy = {\r\n ImageName: 'Image name',\r\n ImageNameDesc: 'Image name (Z-A)',\r\n MostRecent: 'Most recent',\r\n MostRecentAsc: 'Most recent asc',\r\n LastCreated: 'Last created',\r\n LastCreatedAsc: 'Last created asc',\r\n TopRated: 'Top rated',\r\n\r\n AssetIdAsc: 'Asset Id Asc',\r\n AssetIdDesc: 'Asset Id Desc',\r\n\r\n ClickAsc: 'Click Asc',\r\n ClickDesc: 'Click Desc',\r\n ClickPeriodAsc: 'Period Click Asc',\r\n ClickPeriodDesc: 'Period Click Desc',\r\n ClickChangeAsc: 'Click Change Asc',\r\n ClickChangeDesc: 'Click Change Desc',\r\n ClickChangePercentAsc: 'Click Change Percent Asc',\r\n ClickChangePercentDesc: 'Click Change Percent Desc',\r\n\r\n CTRAsc: 'CTR Asc',\r\n CTRDesc: 'CTR Desc',\r\n CTRPeriodAsc: 'Period CTR Asc',\r\n CTRPeriodDesc: 'Period CTR Desc',\r\n CTRChangeAsc: 'CTR Change Asc',\r\n CTRChangeDesc: 'CTR Change Desc',\r\n CTRChangePercentAsc: 'CTR Change Percent Asc',\r\n CTRChangePercentDesc: 'CTR Change Percent Desc',\r\n\r\n ImpressionAsc: 'Impression Asc',\r\n ImpressionDesc: 'Impression Desc',\r\n ImpressionPeriodAsc: 'Period Impression Asc',\r\n ImpressionPeriodDesc: 'Period Impression Desc',\r\n ImpressionChangeAsc: 'Impression Change Asc',\r\n ImpressionChangeDesc: 'Impression Change Desc',\r\n ImpressionChangePercentAsc: 'Impression Change Percent Asc',\r\n ImpressionChangePercentDesc: 'Impression Change Percent Desc',\r\n\r\n SpendAsc: 'Spend Asc',\r\n SpendDesc: 'Spend Desc',\r\n SpendPeriodAsc: 'Period Spend Asc',\r\n SpendPeriodDesc: 'Period Spend Desc',\r\n SpendChangeAsc: 'Spend Change Asc',\r\n SpendChangeDesc: 'Spend Change Desc',\r\n SpendChangePercentAsc: 'Spend Change Percent Asc',\r\n SpendChangePercentDesc: 'Spend Change Percent Desc',\r\n};\r\n\r\nexport const CSMLVideoDuration = {\r\n min: 0,\r\n max: 120,\r\n unlimited: 121, // max + 1\r\n};\r\n\r\nexport const CSMLTimeFrame = {\r\n Anytime: 'Anytime',\r\n Today: 'Today',\r\n Last7Days: 'Last 7 days',\r\n Last30Days: 'Last 30 days',\r\n Custom: 'Custom range',\r\n};\r\n\r\nexport const CSMLImportSource = {\r\n Google: 'Google',\r\n Facebook: 'Facebook',\r\n};\r\n\r\nexport const CSMLAssetSource = {\r\n UserUploaded: 'UserUploaded',\r\n AIGenerated: 'AIGenerated',\r\n Website: 'WebsiteImported',\r\n Shutterstock: 'ShutterStock',\r\n Facebook: 'FacebookImported',\r\n Google: 'GoogleImported',\r\n BackgroundChangeGenerated: 'BackgroundChangeGenerated',\r\n AIGeneratedByRecraft: 'AIGeneratedByRecraft',\r\n};\r\n\r\nexport const ManualAddedImageSource = {\r\n Library: 'Library',\r\n ShutterStock: 'ShutterStock',\r\n};\r\n\r\nexport const AIModelSource = {\r\n Dalle: 'Dalle',\r\n Recraft: 'Recraft',\r\n};\r\n\r\nexport const DEFAULT_PAGE_SIZE = 20;\r\n\r\nexport const MIN_SIZE = [\r\n 703, // width\r\n 368, // height\r\n];\r\n\r\nexport const UPSCALE_MIN_SIZE = [ // half of MIN_SIZE\r\n 352, // width\r\n 184, // height\r\n];\r\n\r\nexport const ClarityTags = {\r\n LaunchedAdsStudio: 'LaunchedAdsStudio',\r\n LaunchedAddImageAssetsFromAdsStudio: 'LaunchedAddImageAssetsFromAdsStudio',\r\n DisplayTemplateHomePage: 'DisplayTemplateHomePage',\r\n EditDisplayTemplateImage: 'EditDisplayTemplateImage',\r\n CreateDisplayTemplate: 'CreateDisplayTemplate',\r\n BrandKitPage: 'BrandKitPage',\r\n EditBrandKitImage: 'EditBrandKitImage',\r\n EditBrandKitLogo: 'EditBrandKitLogo',\r\n};\r\n\r\nexport const CROP_BOX_MAX_SIZE = {\r\n width: 416,\r\n height: 300,\r\n};\r\n\r\nexport const CSMLAdTypeAbbr = {\r\n [CSMLAdType.MMA]: 'MultiMediaAd',\r\n [CSMLAdType.Audience]: 'MSAN',\r\n [CSMLAdType.ImageExtension]: 'ImageExtension',\r\n};\r\n\r\nexport const ROOT_FOLDER_ID = 'ROOT';\r\n\r\nexport const FolderAssetType = {\r\n Image: 'Image',\r\n Video: 'Video',\r\n All: 'All',\r\n Folder: 'Folder',\r\n};\r\n\r\nexport const RootFolderName = {\r\n [FolderAssetType.Image]: _TL_('Images'),\r\n [FolderAssetType.Video]: _TL_('Videos'),\r\n};\r\n\r\nexport const isRootFolderId = folderIdToTest => folderIdToTest === ROOT_FOLDER_ID;\r\n\r\nexport const supportedImageExtensions = ['.png', '.jpg', '.jpeg', '.gif'];\r\n\r\nexport const GridSectionName = {\r\n Folder: 'folderSection',\r\n Asset: 'assetsSection',\r\n};\r\n\r\nexport const MaxAddAssetJobInParell = 6;\r\n\r\n// export const AdsStudioAppNameODataHeader = {\r\n// key: 'x-ms-applicationname',\r\n// value: 'bingadsweb-assetlibrary',\r\n// };\r\n\r\nexport const CSMLSearchLocation = {\r\n Current: 'Current',\r\n Global: 'Global',\r\n};\r\n\r\nexport const VideoStatus = {\r\n Unverified: 'Unverified',\r\n Draft: 'Draft',\r\n Active: 'Active',\r\n Failed: 'Failed',\r\n};\r\n\r\nexport const AdsStudioPageName = {\r\n LibraryPage: 'LibraryPage',\r\n PerfPage: 'PerfPage',\r\n WebsiteImagePanelPage: 'WebsiteImagePanelPage',\r\n StockImagePanelPage: 'StockImagePanelPage',\r\n AddVideoPanelPage: 'AddVideoPanelPage',\r\n UploadFilesPanelPage: 'UploadFilesPanelPage',\r\n UploadFolderPanelPage: 'UploadFolderPanelPage',\r\n MixedImagePanelPage: 'MixedImagePanelPage',\r\n MixedVideoPanelPage: 'MixedVideoPanelPage',\r\n EditImagePage: 'EditImagePage',\r\n AssetDetailsPage: 'AssetDetailsPage',\r\n BackgroundRemovalModalPage: 'BackgroundRemovalModalPage',\r\n InvestImagePanelPage: 'InvestImagePanelPage',\r\n InvestVideoPanelPage: 'InvestVideoPanelPage',\r\n};\r\n\r\nconst UPLOAD = 'Upload';\r\nconst STOCK_IMAGES = 'StockImages';\r\nconst WEBSITE_IMAGES = 'WebsiteImages';\r\nconst AI_IMAGES = 'AiImages';\r\nconst SOCIAL_MEDIA = 'SocialMedia';\r\n\r\nexport const AddImagePivotKey = {\r\n UPLOAD,\r\n STOCK_IMAGES,\r\n WEBSITE_IMAGES,\r\n AI_IMAGES,\r\n SOCIAL_MEDIA,\r\n};\r\n\r\nexport const AdditionalQueries = {\r\n Query: 'query',\r\n FolderId: 'folderId',\r\n EditImageUrl: 'editImageUrl',\r\n InitialCurrentView: 'initialCurrentView',\r\n TemplateId: 'templateId',\r\n TemplateGroupId: 'templateGroupId',\r\n};\r\n\r\nexport const AdStudioSurveyTriggerFlag = {\r\n App: 'AdsStudioAppSurveyTrigger',\r\n};\r\n\r\nexport const RealUsedFlagSuffix = {\r\n App: 'AdsStudioApp',\r\n};\r\n","\r\nexport const FilterType = {\r\n SearchText: 'SearchText',\r\n AssetType: 'AssetType',\r\n ImageSize: 'ImageSize',\r\n VideoDuration: 'VideoDuration',\r\n DateAdded: 'DateAdded',\r\n ImportSource: 'ImportSource',\r\n AssetSource: 'AssetSource',\r\n};\r\n\r\nconst SearchTextFilter = {\r\n type: FilterType.SearchText,\r\n title: _TL_('Search by asset name or ID'),\r\n};\r\n\r\nconst AssetTypeFilter = {\r\n type: FilterType.AssetType,\r\n title: _TL_('Asset type'),\r\n};\r\n\r\nconst DateAddedFilter = {\r\n type: FilterType.DateAdded,\r\n title: _TL_('Date added'),\r\n};\r\n\r\nconst ImageSizeFilter = {\r\n type: FilterType.ImageSize,\r\n title: _TL_('Image size'),\r\n};\r\n\r\nconst ImportSourceFilter = {\r\n type: FilterType.ImportSource,\r\n title: _TL_('Import source'),\r\n};\r\n\r\nconst AssetSourceFilter = {\r\n type: FilterType.AssetSource,\r\n title: _TL_('Source'),\r\n};\r\n\r\n\r\nconst VideoDurationFilter = {\r\n type: FilterType.VideoDuration,\r\n title: _TL_('Video duration'),\r\n};\r\n\r\n\r\nexport const AllSupportedFilters = {\r\n [FilterType.SearchText]: SearchTextFilter,\r\n [FilterType.AssetType]: AssetTypeFilter,\r\n [FilterType.DateAdded]: DateAddedFilter,\r\n [FilterType.ImageSize]: ImageSizeFilter,\r\n [FilterType.ImportSource]: ImportSourceFilter,\r\n [FilterType.AssetSource]: AssetSourceFilter,\r\n [FilterType.VideoDuration]: VideoDurationFilter,\r\n};\r\n","import { FolderAssetType } from './constants';\r\n\r\nexport const getAssetTypeOptions = i18n => [\r\n {\r\n key: FolderAssetType.All,\r\n text: i18n.getString(_TL_('All')),\r\n title: i18n.getString(_TL_('All')),\r\n },\r\n {\r\n key: FolderAssetType.Image,\r\n text: i18n.getString(_TL_('Image')),\r\n title: i18n.getString(_TL_('Image')),\r\n },\r\n {\r\n key: FolderAssetType.Video,\r\n text: i18n.getString(_TL_('Video')),\r\n title: i18n.getString(_TL_('Video')),\r\n },\r\n];\r\n","import _ from 'underscore';\r\n\r\nconst MAX_DAYS = 7;\r\n\r\n// timestamp: Date\r\nexport function getTimeDescription(timestamp, i18n) {\r\n if (_.isDate(timestamp)) {\r\n const now = new Date();\r\n\r\n const diffInSec = Math.round((now - timestamp) / 1000);\r\n if (diffInSec < 0) {\r\n // in case something is wrong\r\n return null;\r\n } else if (diffInSec === 0) {\r\n return i18n.getString(_TL_('just now'));\r\n } else if (diffInSec === 1) {\r\n return i18n.getString(_TL_('1 second ago'));\r\n } else if (diffInSec < 60) {\r\n return i18n.getString(_TL_('{{seconds}} seconds ago'), { seconds: diffInSec });\r\n }\r\n\r\n const diffInMin = Math.round(diffInSec / 60);\r\n if (diffInMin === 1) {\r\n return i18n.getString(_TL_('1 minute ago'));\r\n } else if (diffInMin < 60) {\r\n return i18n.getString(_TL_('{{minutes}} minutes ago'), { minutes: diffInMin });\r\n }\r\n\r\n const diffInHour = Math.round(diffInMin / 60);\r\n if (diffInHour === 1) {\r\n return i18n.getString(_TL_('1 hour ago'));\r\n } else if (diffInHour < 24) {\r\n return i18n.getString(_TL_('{{hours}} hours ago'), { hours: diffInHour });\r\n }\r\n\r\n const diffInDay = Math.round(diffInHour / 24);\r\n if (diffInDay === 1) {\r\n return i18n.getString(_TL_('1 day ago'));\r\n } else if (diffInDay <= MAX_DAYS) {\r\n return i18n.getString(_TL_('{{days}} days ago'), { days: diffInDay });\r\n }\r\n }\r\n\r\n // no description for timestamp > 30 days ago\r\n return null;\r\n}\r\n","export const convertTimeDuration = (DurationInMS) => {\r\n const hours = Math.floor(DurationInMS / 3600000);\r\n const minutes = Math.floor((DurationInMS % 3600000) / 60000);\r\n const seconds = Math.floor((DurationInMS % 60000) / 1000);\r\n const timeArr = [];\r\n if (hours > 0) {\r\n timeArr.push(`${hours < 10 ? '0' : ''}${hours}`);\r\n }\r\n timeArr.push(`${minutes < 10 ? '0' : ''}${minutes}`);\r\n timeArr.push(`${seconds < 10 ? '0' : ''}${seconds}`);\r\n return timeArr.join(':');\r\n};\r\n","import { CivilDate } from 'tc39-proposal-temporal';\r\n// import { getCivilDateToday } from '@bingads-webui-universal/temporal-utitlities';\r\nimport { CSMLTimeFrame } from './constants';\r\n\r\nexport const getDateAddedChoiceOptions = (i18n, timeZone) => {\r\n // const yesterday = getCivilDateToday().plus({ days: -1 });\r\n const todayObj = i18n.getToday({ timeZone });\r\n const today = new CivilDate(todayObj.year, todayObj.month, todayObj.day);\r\n const last7day = today.plus({ days: -6 });\r\n const last30day = today.plus({ days: -29 });\r\n return [\r\n { key: CSMLTimeFrame.Today, text: i18n.getString(_TL_('Today')), range: { start: today, end: today } },\r\n { key: CSMLTimeFrame.Last7Days, text: i18n.getString(_TL_('Last 7 days')), range: { start: last7day, end: today } },\r\n { key: CSMLTimeFrame.Last30Days, text: i18n.getString(_TL_('Last 30 days')), range: { start: last30day, end: today } },\r\n { key: CSMLTimeFrame.Custom, text: i18n.getString(_TL_('Custom range')), range: null },\r\n ];\r\n};\r\n","import { CSMLImportSource } from './constants';\r\n\r\nexport const getImportSourceOptions = i18n => [\r\n {\r\n key: CSMLImportSource.Google,\r\n text: i18n.getString(_TL_('Google Ads')),\r\n title: i18n.getString(_TL_('Imported from Google Ads')),\r\n },\r\n {\r\n key: CSMLImportSource.Facebook,\r\n text: i18n.getString(_TL_('Meta Ads')),\r\n title: i18n.getString(_TL_('Imported from Meta Ads')),\r\n },\r\n];\r\n","import { CSMLSortBy, CSMLSortIcon } from './constants';\r\n\r\nexport const getSortingOptions = i18n => [\r\n { key: CSMLSortBy.MostRecent, text: i18n.getString(_TL_('Most recent')) },\r\n { key: CSMLSortBy.ImageName, text: i18n.getString(_TL_('Sort by name')), icon: CSMLSortIcon.SortUp },\r\n { key: CSMLSortBy.ImageNameDesc, text: i18n.getString(_TL_('Sort by name')), icon: CSMLSortIcon.SortDown },\r\n { key: CSMLSortBy.LastCreated, text: i18n.getString(_TL_('Last created')) },\r\n];\r\n\r\nexport const CSMLSortingRequestParams = {\r\n [CSMLSortBy.MostRecentAsc]: { sortBy: 'ModifiedTime', sortDirection: 'asc' },\r\n [CSMLSortBy.MostRecent]: { sortBy: 'ModifiedTime', sortDirection: 'desc' },\r\n\r\n [CSMLSortBy.ImageName]: { sortBy: 'Text', sortDirection: 'asc' },\r\n [CSMLSortBy.ImageNameDesc]: { sortBy: 'Text', sortDirection: 'desc' },\r\n [CSMLSortBy.LastCreated]: { sortBy: 'CreatedTime', sortDirection: 'desc' },\r\n [CSMLSortBy.LastCreatedAsc]: { sortBy: 'CreatedTime', sortDirection: 'asc' },\r\n\r\n [CSMLSortBy.AssetIdAsc]: { sortBy: 'AssetId', sortDirection: 'asc' },\r\n [CSMLSortBy.AssetIdDesc]: { sortBy: 'AssetId', sortDirection: 'desc' },\r\n\r\n [CSMLSortBy.ClickAsc]: { sortBy: 'PerformanceMetrics/Clicks', sortDirection: 'asc' },\r\n [CSMLSortBy.ClickDesc]: { sortBy: 'PerformanceMetrics/Clicks', sortDirection: 'desc' },\r\n [CSMLSortBy.ClickPeriodAsc]: { sortBy: 'PoPPerformanceMetrics/Clicks', sortDirection: 'asc' },\r\n [CSMLSortBy.ClickPeriodDesc]: { sortBy: 'PoPPerformanceMetrics/Clicks', sortDirection: 'desc' },\r\n [CSMLSortBy.ClickChangeAsc]: { sortBy: 'PoPPerformanceMetricsChange/Clicks', sortDirection: 'asc' },\r\n [CSMLSortBy.ClickChangeDesc]: { sortBy: 'PoPPerformanceMetricsChange/Clicks', sortDirection: 'desc' },\r\n [CSMLSortBy.ClickChangePercentAsc]: { sortBy: 'PoPPerformanceMetricsChangePercentage/Clicks', sortDirection: 'asc' },\r\n [CSMLSortBy.ClickChangePercentDesc]: { sortBy: 'PoPPerformanceMetricsChangePercentage/Clicks', sortDirection: 'desc' },\r\n\r\n [CSMLSortBy.CTRAsc]: { sortBy: 'PerformanceMetrics/CTR', sortDirection: 'asc' },\r\n [CSMLSortBy.CTRDesc]: { sortBy: 'PerformanceMetrics/CTR', sortDirection: 'desc' },\r\n [CSMLSortBy.CTRPeriodAsc]: { sortBy: 'PoPPerformanceMetrics/CTR', sortDirection: 'asc' },\r\n [CSMLSortBy.CTRPeriodDesc]: { sortBy: 'PoPPerformanceMetrics/CTR', sortDirection: 'desc' },\r\n [CSMLSortBy.CTRChangeAsc]: { sortBy: 'PoPPerformanceMetricsChange/CTR', sortDirection: 'asc' },\r\n [CSMLSortBy.CTRChangeDesc]: { sortBy: 'PoPPerformanceMetricsChange/CTR', sortDirection: 'desc' },\r\n [CSMLSortBy.CTRChangePercentAsc]: { sortBy: 'PoPPerformanceMetricsChangePercentage/CTR', sortDirection: 'asc' },\r\n [CSMLSortBy.CTRChangePercentDesc]: { sortBy: 'PoPPerformanceMetricsChangePercentage/CTR', sortDirection: 'desc' },\r\n\r\n [CSMLSortBy.ImpressionAsc]: { sortBy: 'PerformanceMetrics/Impressions', sortDirection: 'asc' },\r\n [CSMLSortBy.ImpressionDesc]: { sortBy: 'PerformanceMetrics/Impressions', sortDirection: 'desc' },\r\n [CSMLSortBy.ImpressionPeriodAsc]: { sortBy: 'PoPPerformanceMetrics/Impressions', sortDirection: 'asc' },\r\n [CSMLSortBy.ImpressionPeriodDesc]: { sortBy: 'PoPPerformanceMetrics/Impressions', sortDirection: 'desc' },\r\n [CSMLSortBy.ImpressionChangeAsc]: { sortBy: 'PoPPerformanceMetricsChange/Impressions', sortDirection: 'asc' },\r\n [CSMLSortBy.ImpressionChangeDesc]: { sortBy: 'PoPPerformanceMetricsChange/Impressions', sortDirection: 'desc' },\r\n [CSMLSortBy.ImpressionChangePercentAsc]: { sortBy: 'PoPPerformanceMetricsChangePercentage/Impressions', sortDirection: 'asc' },\r\n [CSMLSortBy.ImpressionChangePercentDesc]: { sortBy: 'PoPPerformanceMetricsChangePercentage/Impressions', sortDirection: 'desc' },\r\n\r\n [CSMLSortBy.SpendAsc]: { sortBy: 'PerformanceMetrics/Spend', sortDirection: 'asc' },\r\n [CSMLSortBy.SpendDesc]: { sortBy: 'PerformanceMetrics/Spend', sortDirection: 'desc' },\r\n [CSMLSortBy.SpendPeriodAsc]: { sortBy: 'PoPPerformanceMetrics/Spend', sortDirection: 'asc' },\r\n [CSMLSortBy.SpendPeriodDesc]: { sortBy: 'PoPPerformanceMetrics/Spend', sortDirection: 'desc' },\r\n [CSMLSortBy.SpendChangeAsc]: { sortBy: 'PoPPerformanceMetricsChange/Spend', sortDirection: 'asc' },\r\n [CSMLSortBy.SpendChangeDesc]: { sortBy: 'PoPPerformanceMetricsChange/Spend', sortDirection: 'desc' },\r\n [CSMLSortBy.SpendChangePercentAsc]: { sortBy: 'PoPPerformanceMetricsChangePercentage/Spend', sortDirection: 'asc' },\r\n [CSMLSortBy.SpendChangePercentDesc]: { sortBy: 'PoPPerformanceMetricsChangePercentage/Spend', sortDirection: 'desc' },\r\n};\r\n","import { CSMLAssetSource } from './constants';\r\n\r\nexport const getAssetSourceOptions = i18n => [\r\n {\r\n key: CSMLAssetSource.AIGenerated,\r\n text: i18n.getString(_TL_('Created')),\r\n title: i18n.getString(_TL_('Created with Microsoft Advertising')),\r\n },\r\n {\r\n key: CSMLAssetSource.UserUploaded,\r\n text: i18n.getString(_TL_('Upload')),\r\n title: i18n.getString(_TL_('Uploaded from computer')),\r\n },\r\n {\r\n key: CSMLAssetSource.Website,\r\n text: i18n.getString(_TL_('Website')),\r\n title: i18n.getString(_TL_('Advertiser website')),\r\n },\r\n {\r\n key: CSMLAssetSource.Shutterstock,\r\n text: i18n.getString(_TL_('Shutterstock')),\r\n title: i18n.getString(_TL_('Shutterstock')),\r\n },\r\n {\r\n key: CSMLAssetSource.Google,\r\n text: i18n.getString(_TL_('Imported')),\r\n title: i18n.getString(_TL_('Imported from Google Ads')),\r\n },\r\n {\r\n key: CSMLAssetSource.Facebook,\r\n text: i18n.getString(_TL_('Imported')),\r\n title: i18n.getString(_TL_('Imported from Meta Ads')),\r\n },\r\n];\r\n","/* eslint-disable max-len */\r\nimport _ from 'underscore';\r\nimport { constants as C } from '@bingads-webui-campaign-react/image-experience-model';\r\nimport {\r\n // UAPPlacementType as EPlacementType,\r\n UAPPlacementTypeAlias as PT,\r\n} from '@bingads-webui-campaign-react/unified-ad-preview-library-core';\r\n\r\nimport { CSMLAdTypeAbbr, CSMLAdType } from './constants';\r\n\r\n// eslint-disable-next-line prefer-destructuring\r\nconst imageAdExtSettings = C.imageAdExtSettings;\r\n\r\nexport const getPlacementConfig = () => ({\r\n // MMA\r\n [PT.MMA.LandscapeImage]: {\r\n isRequired: true,\r\n aspectRatioUIString: '1.91 : 1',\r\n previewTypeString: _TL_('Landscape image'),\r\n },\r\n [PT.MMA.WideImage]: {\r\n isRequired: false,\r\n aspectRatioUIString: '4 : 1',\r\n previewTypeString: _TL_('Wide image'),\r\n },\r\n [PT.MMA.SquareImage]: {\r\n isRequired: true,\r\n aspectRatioUIString: '1 : 1',\r\n previewTypeString: _TL_('Square image'),\r\n },\r\n [PT.MMA.VerticalImage]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1 : 2',\r\n previewTypeString: _TL_('Vertical image'),\r\n },\r\n\r\n // MMA in MSAN (Audience Network)\r\n [PT.MSAN.WideImage]: {\r\n isRequired: true,\r\n aspectRatioUIString: '1.91 : 1',\r\n previewTypeString: _TL_('MSN feed'),\r\n },\r\n [PT.MSAN.SquareImage]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1 : 1',\r\n previewTypeString: _TL_('MSN square image'),\r\n },\r\n [PT.MSAN.MSEdgeSingleCarousel]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.78 : 1',\r\n previewTypeString: _TL_('Microsoft Edge single carousel'),\r\n },\r\n [PT.MSAN.MSNInArticle]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.5 : 1',\r\n previewTypeString: _TL_('MSN in-article ad'),\r\n },\r\n [PT.MSAN.MSNSmallHeadline]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.33 : 1',\r\n previewTypeString: _TL_('MSN small headline'),\r\n },\r\n\r\n // pmax\r\n [PT.PMax.AudienceSquareImage]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1 : 1',\r\n previewTypeString: _TL_('MSN square image'),\r\n },\r\n [PT.PMax.AudienceWideImage]: {\r\n isRequired: true,\r\n aspectRatioUIString: '1.91 : 1',\r\n previewTypeString: _TL_('MSN feed'),\r\n },\r\n [PT.PMax.MMALandscapeImage]: {\r\n isRequired: true,\r\n aspectRatioUIString: '1.91 : 1',\r\n previewTypeString: _TL_('Landscape Image Multimedia Ad'),\r\n },\r\n [PT.PMax.MMAVerticalImage]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1 : 2',\r\n previewTypeString: _TL_('Vertical image'),\r\n },\r\n [PT.PMax.MMAWideImage]: {\r\n isRequired: false,\r\n aspectRatioUIString: '4 : 1',\r\n previewTypeString: _TL_('Wide image'),\r\n },\r\n [PT.PMax.MSNInArticle]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.5 : 1',\r\n previewTypeString: _TL_('MSN in-article ad'),\r\n },\r\n [PT.PMax.MSNSmallHeadline]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.33 : 1',\r\n previewTypeString: _TL_('MSN small headline'),\r\n },\r\n [PT.PMax.MSEdgeSingleCarousel]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.78 : 1',\r\n previewTypeString: _TL_('Microsoft Edge single carousel'),\r\n },\r\n [PT.PMax.MMAV2MSEdgeCarousel]: {\r\n isRequired: false,\r\n aspectRatioUIString: '2.01 : 1',\r\n previewTypeString: _TL_('Microsoft Edge carousel'),\r\n },\r\n [PT.PMax.MMAV2MSNSingleCarousel]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.69 : 1',\r\n previewTypeString: _TL_('MSN carousel'),\r\n },\r\n [PT.PMax.MMAV2MSNRestoday]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.24 : 1',\r\n previewTypeString: _TL_('MSN Restoday'),\r\n },\r\n [PT.PMax.MMAV2MSNPartnerStripe]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.53 : 1',\r\n previewTypeString: _TL_('MSN partner stripe'),\r\n },\r\n [PT.PMax.MMAV2MSNRiver]: {\r\n isRequired: true,\r\n aspectRatioUIString: '1.91 : 1',\r\n previewTypeString: _TL_('MSN feed'),\r\n },\r\n [PT.PMax.MSEdgeMobile]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1 : 1',\r\n previewTypeString: _TL_('Microsoft Edge mobile'),\r\n },\r\n\r\n // MSAN V2\r\n [PT.MSANV2.MSEdgeCarousel]: {\r\n isRequired: false,\r\n aspectRatioUIString: '2.01 : 1',\r\n previewTypeString: _TL_('Microsoft Edge carousel'),\r\n },\r\n [PT.MSANV2.MSANBanner]: {\r\n isRequired: false,\r\n aspectRatioUIString: '2 : 1',\r\n previewTypeString: _TL_('MSN banner'),\r\n },\r\n [PT.MSANV2.MSANRiver]: {\r\n isRequired: true,\r\n aspectRatioUIString: '1.91 : 1',\r\n previewTypeString: _TL_('MSN feed'),\r\n },\r\n [PT.MSANV2.MSNCarousel]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.69 : 1',\r\n previewTypeString: _TL_('MSN carousel'),\r\n },\r\n [PT.MSANV2.MSNPartnerStripe]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.53 : 1',\r\n previewTypeString: _TL_('MSN partner stripe'),\r\n },\r\n [PT.MSANV2.MSNRestoday]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.24 : 1',\r\n previewTypeString: _TL_('MSN Restoday'),\r\n },\r\n [PT.MSANV2.MSANRectangle]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.2 : 1',\r\n previewTypeString: _TL_('MSN rectangle image'),\r\n },\r\n [PT.MSANV2.MSEdgeMobile]: {\r\n isRequired: true,\r\n aspectRatioUIString: '1 : 1',\r\n previewTypeString: _TL_('Microsoft Edge mobile'),\r\n },\r\n\r\n // Image Extension\r\n [PT.ImageExt.WideImage]: {\r\n isRequired: true,\r\n aspectRatioUIString: '1.91 : 1',\r\n previewTypeString: _TL_('MSN feed'),\r\n },\r\n [PT.ImageExt.MSEdgeSingleCarousel]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.78 : 1',\r\n previewTypeString: _TL_('Microsoft Edge single carousel'),\r\n },\r\n [PT.ImageExt.BingDesktopSingleImage]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.78 : 1',\r\n previewTypeString: _TL_('Bing desktop single-image extension'),\r\n },\r\n [PT.ImageExt.MSEdgeMediumHeadline]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.72 : 1',\r\n previewTypeString: _TL_('Microsoft Edge medium headline'),\r\n },\r\n [PT.ImageExt.MSNSingleCarousel]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.69 : 1',\r\n previewTypeString: _TL_('MSN carousel'),\r\n },\r\n [PT.ImageExt.MSNMediumHeadline]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.55 : 1',\r\n previewTypeString: _TL_('MSN medium headline'),\r\n },\r\n [PT.ImageExt.MSNInArticle]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.5 : 1',\r\n previewTypeString: _TL_('MSN in-article ad'),\r\n },\r\n [PT.ImageExt.MSNSmallHeadline]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.33 : 1',\r\n previewTypeString: _TL_('MSN small headline'),\r\n },\r\n [PT.ImageExt.BingDesktopMultiImage]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.33 : 1',\r\n previewTypeString: _TL_('Bing desktop multi-image extension'),\r\n },\r\n [PT.ImageExt.BingMobileMultiImage]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.33 : 1',\r\n previewTypeString: _TL_('Bing mobile multi-image extension'),\r\n },\r\n [PT.ImageExt.SquareImage]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1 : 1',\r\n previewTypeString: _TL_('MSN square image'),\r\n },\r\n [PT.ImageExt.MSNDoubleCarousel]: {\r\n isRequired: false,\r\n aspectRatioUIString: '0.93 : 1',\r\n previewTypeString: _TL_('MSN double carousel'),\r\n },\r\n [PT.ImageExt.MMAV2MSNRiver]: {\r\n isRequired: true,\r\n aspectRatioUIString: '1.91 : 1',\r\n previewTypeString: _TL_('MSN feed'),\r\n },\r\n [PT.ImageExt.MMAV2MSNSingleCarousel]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1.69 : 1',\r\n previewTypeString: _TL_('MSN carousel'),\r\n },\r\n [PT.ImageExt.MSEdgeMobile]: {\r\n isRequired: false,\r\n aspectRatioUIString: '1 : 1',\r\n previewTypeString: _TL_('Microsoft Edge mobile'),\r\n },\r\n});\r\n\r\nexport const aspectRatioConfig = isMultimediaAd => ({\r\n Image191x100: {\r\n aspectRatio: 1.91,\r\n aspectRatioAsRatio: '1.91 : 1',\r\n aspectRatioString: '191X100',\r\n type: 'Image191x100',\r\n isRequired: true,\r\n },\r\n Image4x1: {\r\n aspectRatio: 4,\r\n aspectRatioAsRatio: '4 : 1',\r\n aspectRatioString: '400X100',\r\n type: 'Image4x1',\r\n isRequired: false,\r\n },\r\n Image1x1: {\r\n aspectRatio: 1,\r\n aspectRatioAsRatio: '1 : 1',\r\n aspectRatioString: '100X100',\r\n type: 'Image1x1',\r\n isRequired: isMultimediaAd,\r\n },\r\n Image1x2: {\r\n aspectRatio: 0.5,\r\n aspectRatioAsRatio: '1 : 2',\r\n aspectRatioString: '50X100',\r\n type: 'Image1x2',\r\n isRequired: false,\r\n },\r\n Image178x100: {\r\n aspectRatio: 1.78,\r\n aspectRatioAsRatio: '1.78 : 1',\r\n aspectRatioString: '178X100',\r\n type: 'Image178x100',\r\n isRequired: false,\r\n extraExtension: {\r\n BingSingleImage: {\r\n previewTypeString: imageAdExtSettings.BingSingleImage.previewTypeString,\r\n },\r\n },\r\n },\r\n Image172x100: {\r\n aspectRatio: 1.72,\r\n type: 'Image172x100',\r\n aspectRatioAsRatio: '1.72 : 1',\r\n aspectRatioString: '172X100',\r\n isRequired: false,\r\n },\r\n Image169x100: {\r\n aspectRatio: 1.69,\r\n type: 'Image169x100',\r\n aspectRatioAsRatio: '1.69 : 1',\r\n aspectRatioString: '169X100',\r\n isRequired: false,\r\n },\r\n Image150x100: {\r\n aspectRatio: 1.5,\r\n aspectRatioAsRatio: '1.5 : 1',\r\n aspectRatioString: '150X100',\r\n type: 'Image150x100',\r\n isRequired: false,\r\n },\r\n Image155x100: {\r\n aspectRatio: 1.55,\r\n type: 'Image155x100',\r\n aspectRatioAsRatio: '1.55 : 1',\r\n aspectRatioString: '155X100',\r\n isRequired: false,\r\n },\r\n Image133x100: {\r\n aspectRatio: 1.33,\r\n aspectRatioAsRatio: '1.33 : 1',\r\n aspectRatioString: '133X100',\r\n type: 'Image133x100',\r\n isRequired: false,\r\n extraExtension: {\r\n MobileMultiImage: {\r\n previewTypeString: imageAdExtSettings.MobileMultiImage.previewTypeString,\r\n },\r\n BingDesktopImage: {\r\n previewTypeString: imageAdExtSettings.BingDesktopImage.previewTypeString,\r\n },\r\n },\r\n },\r\n Image93x100: {\r\n aspectRatio: 0.93,\r\n aspectRatioAsRatio: '0.93 : 1',\r\n aspectRatioString: '93X100',\r\n type: 'Image93x100',\r\n isRequired: false,\r\n },\r\n Image201x100: {\r\n aspectRatio: 2.01,\r\n aspectRatioAsRatio: '2.01 : 1',\r\n aspectRatioString: '201X100',\r\n type: 'Image201x100',\r\n isRequired: false,\r\n },\r\n Image200x100: {\r\n aspectRatio: 2,\r\n aspectRatioAsRatio: '2 : 1',\r\n aspectRatioString: '200X100',\r\n type: 'Image200x100',\r\n isRequired: false,\r\n },\r\n Image153x100: {\r\n aspectRatio: 1.53,\r\n aspectRatioAsRatio: '1.53 : 1',\r\n aspectRatioString: '153X100',\r\n type: 'Image153x100',\r\n isRequired: false,\r\n },\r\n Image124x100: {\r\n aspectRatio: 1.24,\r\n aspectRatioAsRatio: '1.24 : 1',\r\n aspectRatioString: '124X100',\r\n type: 'Image124x100',\r\n isRequired: false,\r\n },\r\n Image120x100: {\r\n aspectRatio: 1.2,\r\n aspectRatioAsRatio: '1.2 : 1',\r\n aspectRatioString: '120X100',\r\n type: 'Image120x100',\r\n isRequired: false,\r\n },\r\n});\r\n\r\nexport const getAspectRatioConfig = (adType, isMMAV2Enabled, isPMaxAspectRatiosV2Enabled) => {\r\n const aspectRatios = C.getAspectRatios({\r\n isMultimediaAd: adType === CSMLAdType.MMA,\r\n isMultimediaAdinMSANEnabled: CSMLAdType.Audience === adType,\r\n isCombinedMsanAndMmaAspectRatios: CSMLAdType.PMax === adType,\r\n isMMAV2Enabled: CSMLAdType.Audience === adType && isMMAV2Enabled,\r\n isPMaxAspectRatiosV2Enabled: CSMLAdType.PMax === adType && isPMaxAspectRatiosV2Enabled,\r\n });\r\n\r\n const allAspectRatioConfig = aspectRatioConfig(adType === CSMLAdType.MMA);\r\n\r\n const aspectRatiosExceptOriginal = _.omit(aspectRatios, 'OriginalImage');\r\n\r\n const subAspectRatioConfig = _.mapObject(aspectRatiosExceptOriginal, item => ({\r\n ...allAspectRatioConfig[item.type],\r\n minSize: item.minSize,\r\n previewTypeString: item.previewTypeString,\r\n placementType: `${CSMLAdTypeAbbr[adType]}${allAspectRatioConfig[item.type].aspectRatioString}`,\r\n }));\r\n\r\n return subAspectRatioConfig;\r\n};\r\n\r\nexport const getPreviewText = (isImageExtension, i18n) => {\r\n if (isImageExtension) {\r\n return {\r\n shortHeadline: i18n.getString(_TL_('Title part 1')),\r\n longHeadline: i18n.getString(_TL_('Title part 1 | Title part 2 | Title part 3')),\r\n description: i18n.getString(_TL_('Ad text 1. Ad text 2')),\r\n businessName: i18n.getString(_TL_('Business name')),\r\n url: 'https://example.com',\r\n finalUrl: 'https://example.com',\r\n };\r\n }\r\n\r\n return {\r\n shortHeadline: i18n.getString(_TL_('Short headline')),\r\n longHeadline: i18n.getString(_TL_('Long headline')),\r\n description: i18n.getString(_TL_('Ad text')),\r\n businessName: i18n.getString(_TL_('Business name')),\r\n url: 'https://example.com',\r\n finalUrl: 'https://example.com',\r\n callToAction: i18n.getString(_TL_('Shop Now')),\r\n };\r\n};\r\n\r\nexport const sizeValidForRatio = (minSize, cropSettings) => {\r\n if (cropSettings && minSize) {\r\n const { SourceWidth, SourceHeight } = cropSettings;\r\n if (SourceWidth < minSize[0] || SourceHeight < minSize[1]) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n};\r\n\r\nexport const getSizeErrorRatioList = (\r\n adType,\r\n cropSettings,\r\n requiredOnly = false,\r\n isMMAV2Enabled = false,\r\n isPMaxAspectRatiosV2Enabled = false\r\n) => {\r\n let ratioList = getAspectRatioConfig(adType, isMMAV2Enabled, isPMaxAspectRatiosV2Enabled);\r\n\r\n if (requiredOnly) {\r\n ratioList = _.filter(ratioList, config => config.isRequired);\r\n }\r\n\r\n const invalidRatioList = _.filter(ratioList, (item) => {\r\n const { minSize } = item;\r\n return !sizeValidForRatio(minSize, cropSettings);\r\n });\r\n\r\n return invalidRatioList;\r\n};\r\n\r\nexport const getAllSizeErrorRatioList = (cropSettings, requiredOnly = false, isMMAV2Enabled = false, isPMaxAspectRatiosV2Enabled = false) => {\r\n const errorListForMMA = getSizeErrorRatioList(CSMLAdType.MMA, cropSettings, requiredOnly, isMMAV2Enabled, isPMaxAspectRatiosV2Enabled);\r\n const errorListForAudience = getSizeErrorRatioList(CSMLAdType.Audience, cropSettings, requiredOnly, isMMAV2Enabled, isPMaxAspectRatiosV2Enabled);\r\n const errorListForExtension = getSizeErrorRatioList(CSMLAdType.ImageExtension, cropSettings, requiredOnly, isMMAV2Enabled, isPMaxAspectRatiosV2Enabled);\r\n const errorListForPmax = getSizeErrorRatioList(CSMLAdType.Pmax, cropSettings, requiredOnly, isMMAV2Enabled, isPMaxAspectRatiosV2Enabled);\r\n\r\n return _.uniq(\r\n [...errorListForAudience, ...errorListForExtension, ...errorListForMMA, ...errorListForPmax],\r\n item => item.type\r\n );\r\n};\r\n\r\nexport const getPlacementsToExpand = (adType) => {\r\n const aspectRatios = C.getAspectRatios({\r\n isMultimediaAd: adType === CSMLAdType.MMA,\r\n isMultimediaAdinMSANEnabled: CSMLAdType.Audience === adType,\r\n isMMAV2Enabled: adType === CSMLAdType.Audience,\r\n isCombinedMsanAndMmaAspectRatios: adType === CSMLAdType.PMax,\r\n });\r\n\r\n const placementsToExpand = _.chain(aspectRatios)\r\n .reject(p => CSMLAdType.Audience === adType && p.type === 'OriginalImage')\r\n .map(({ aspectRatio, minSize }) => ({ aspectRatio, minHeight: minSize[1] }))\r\n .value();\r\n\r\n return placementsToExpand;\r\n};\r\n","import image0 from './image/Designer0.png';\r\nimport image1 from './image/Designer1.png';\r\nimport image2 from './image/Designer2.jpg';\r\nimport image3 from './image/Designer3.png';\r\nimport image4 from './image/Designer4.jpg';\r\nimport image5 from './image/Designer5.jpg';\r\nimport image6 from './image/Designer6.jpg';\r\nimport image7 from './image/Designer7.png';\r\nimport image8 from './image/Designer8.jpg';\r\nimport image9 from './image/Designer9.jpg';\r\nimport image10 from './image/Designer10.jpg';\r\nimport image11 from './image/Designer11.jpg';\r\nimport image12 from './image/Designer12.jpg';\r\nimport image13 from './image/Designer13.png';\r\nimport image14 from './image/Designer14.jpg';\r\nimport image15 from './image/Designer15.jpg';\r\nimport image16 from './image/Designer16.jpg';\r\nimport image17 from './image/Designer17.jpg';\r\nimport image18 from './image/Designer18.jpg';\r\nimport image19 from './image/Designer19.png';\r\n\r\nconst samples = [\r\n {\r\n promptText: _TL_('Modern high-tech gadgets on a sleek, minimalist desk.'),\r\n imageSrc: image0,\r\n },\r\n {\r\n promptText: _TL_('A luxury car driving through scenic mountains.'),\r\n imageSrc: image1,\r\n },\r\n {\r\n promptText: _TL_('A digital timer displayed prominently on a sleek marble surface.'),\r\n imageSrc: image2,\r\n },\r\n {\r\n promptText: _TL_('An array of high-end skincare products on a marble countertop.'),\r\n imageSrc: image3,\r\n },\r\n {\r\n promptText: _TL_('An electric bicycle displayed next to an outdoor café.'),\r\n imageSrc: image4,\r\n },\r\n {\r\n promptText: _TL_('A stylish home office setup with tech gadgets.'),\r\n imageSrc: image5,\r\n },\r\n {\r\n promptText: _TL_('A picnic setup with food and decor in a park.'),\r\n imageSrc: image6,\r\n },\r\n {\r\n promptText: _TL_('A product photo of juice bottles with no label.'),\r\n imageSrc: image7,\r\n },\r\n {\r\n promptText: _TL_('A five-star hotel room with a stunning view of the city skyline.'),\r\n imageSrc: image8,\r\n },\r\n {\r\n promptText: _TL_('An all-inclusive spa treatment setting.'),\r\n imageSrc: image9,\r\n },\r\n {\r\n promptText: _TL_('A hiking backpack and gear on an adventurous trail with breathtaking views.'),\r\n imageSrc: image10,\r\n },\r\n {\r\n promptText: _TL_('A trendy cafe table with coffee cups.'),\r\n imageSrc: image11,\r\n },\r\n {\r\n promptText: _TL_('A beautifully arranged floral bouquet on a table.'),\r\n imageSrc: image12,\r\n },\r\n {\r\n promptText: _TL_('A beautifully wrapped gift in front of a fireplace.'),\r\n imageSrc: image13,\r\n },\r\n {\r\n promptText: _TL_('An elegant dining setup for a romantic evening.'),\r\n imageSrc: image14,\r\n },\r\n {\r\n promptText: _TL_('Refreshing smoothies in elegant glassware.'),\r\n imageSrc: image15,\r\n },\r\n {\r\n promptText: _TL_('A stylish urban setting with modern decor.'),\r\n imageSrc: image16,\r\n },\r\n {\r\n promptText: _TL_('A festive living room with a beautifully decorated Christmas tree, featuring branded holiday decor items and cozy products.'),\r\n imageSrc: image17,\r\n },\r\n {\r\n promptText: _TL_('A winter market stall with festive treats.'),\r\n imageSrc: image18,\r\n },\r\n {\r\n promptText: _TL_('Beautifully wrapped gift boxes placed under a decorated holiday tree with twinkling lights.'),\r\n imageSrc: image19,\r\n },\r\n];\r\n\r\nexport const AIPromptExamples = samples;\r\n","import _ from 'underscore';\r\n\r\nexport const getUpdatedAssets = ({\r\n assets,\r\n updates = {},\r\n}) => {\r\n const {\r\n imageCroppingTasks,\r\n videoUpdated,\r\n } = updates || {};\r\n\r\n if (assets &&\r\n (!_.isEmpty(imageCroppingTasks) || !_.isEmpty(videoUpdated))\r\n ) {\r\n let updatedAssets = assets;\r\n\r\n if (!_.isEmpty(imageCroppingTasks)) {\r\n updatedAssets = updatedAssets.map((asset) => {\r\n const taskStatus = imageCroppingTasks[asset.id];\r\n if (taskStatus) {\r\n return {\r\n ...asset,\r\n updating: !taskStatus.isFinished,\r\n };\r\n }\r\n\r\n return asset;\r\n });\r\n }\r\n\r\n if (!_.isEmpty(videoUpdated)) {\r\n updatedAssets = updatedAssets.map((asset) => {\r\n const newUpdates = videoUpdated[asset.id];\r\n if (newUpdates && newUpdates.status !== asset.status) {\r\n return {\r\n ...asset,\r\n ...newUpdates,\r\n };\r\n }\r\n\r\n return asset;\r\n });\r\n }\r\n\r\n return updatedAssets;\r\n }\r\n\r\n return assets;\r\n};\r\n","import { useState, useEffect } from 'react';\r\nimport { reduce } from 'underscore';\r\n\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\n\r\nexport const useClarityTags = (customTags) => {\r\n const [haveSetClarityTags, setHaveSetClarityTags] = useState(false);\r\n\r\n useEffect(() => {\r\n if (!haveSetClarityTags) {\r\n const tagsToSet = reduce(customTags, (tagsObj, currentTag) => ({\r\n ...tagsObj,\r\n [currentTag]: true,\r\n }), {});\r\n\r\n setClarityTag(tagsToSet);\r\n setHaveSetClarityTags(true);\r\n }\r\n }, [haveSetClarityTags, setHaveSetClarityTags, customTags]);\r\n};\r\n","import _ from 'underscore';\r\nimport queryString from 'query-string';\r\nimport { VideoStatus, AdditionalQueries } from './constants';\r\nimport { EntryCardSVGIcons } from '../../src/asset-images';\r\n\r\n// TO DO: update this when new entity type is created\r\nconst ExternalEntityType = {\r\n XandrAdvertiser: 8,\r\n};\r\n\r\nexport const checkVideosIntermediateStatus =\r\n video => video.status !== VideoStatus.Active && video.status !== VideoStatus.Failed;\r\n/* istanbul ignore next */\r\nconst getSizeLimitPerAccount = (aid, id) => {\r\n const value = localStorage.getItem(`SystemLimitData_${aid}`);\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n let valObj = null;\r\n\r\n try {\r\n valObj = JSON.parse(value);\r\n } catch (e) {\r\n return null;\r\n }\r\n\r\n const limitData = _.find(valObj.data, data => data.id === id);\r\n\r\n return limitData && limitData.val;\r\n};\r\n\r\nexport const isValidXandrAccount = (account) => {\r\n if (account && account.ExternalAccountIds && account.ExternalAccountIds.length > 0) {\r\n // TO DO switch this to new enetity type when its available\r\n const externalAccountId = _.find(account.ExternalAccountIds, item => item.Type === ExternalEntityType.XandrAdvertiser);\r\n return externalAccountId !== undefined && externalAccountId.Id !== null && externalAccountId.Id !== undefined;\r\n }\r\n // TO DO switch to false\r\n return true;\r\n};\r\n\r\nexport const getEntryCardData = ({\r\n i18n,\r\n cardKeys = [],\r\n onClickCreate = _.noop,\r\n onClickUpload = _.noop,\r\n onClickStock = _.noop,\r\n onClickInvest = _.noop,\r\n onClickWebsite = _.noop,\r\n isImagePage = false,\r\n isVideoPage = false,\r\n isXandrIntegrationEnabled = false,\r\n}) => {\r\n let uploadDescription = i18n.getString(_TL_('Upload assets from your computer'));\r\n let websiteDescription = i18n.getString(_TL_('Enter your URL and we\\'ll pull assets from it'));\r\n let websiteTitle = i18n.getString(_TL_('Add from website'));\r\n let createDescription = i18n.getString(_TL_('Create AI-generated images'));\r\n let createTitle = i18n.getString(_TL_('Create'));\r\n let investDescription = i18n.getString(_TL_('Search Invest'));\r\n if (isImagePage) {\r\n createDescription = i18n.getString(_TL_('Create AI-generated images'));\r\n uploadDescription = i18n.getString(_TL_('Upload images from your computer'));\r\n websiteDescription = i18n.getString(_TL_('Enter your URL and we\\'ll pull images from it'));\r\n investDescription = i18n.getString(_TL_('Search Invest for images'));\r\n } else if (isVideoPage) {\r\n createTitle = i18n.getString(_TL_('Create'));\r\n createDescription = i18n.getString(_TL_('Create a video using a template'));\r\n uploadDescription = i18n.getString(_TL_('Upload videos from your computer'));\r\n websiteDescription = i18n.getString(_TL_('Enter your video\\'s URL'));\r\n websiteTitle = i18n.getString(_TL_('Add from URL'));\r\n investDescription = i18n.getString(_TL_('Search Invest for videos'));\r\n }\r\n\r\n let cardData = [\r\n {\r\n title: createTitle,\r\n description: createDescription,\r\n image: EntryCardSVGIcons.CreateSVGIcon,\r\n onClick: onClickCreate,\r\n key: 'Create',\r\n },\r\n {\r\n title: i18n.getString(_TL_('Upload')),\r\n description: uploadDescription,\r\n image: EntryCardSVGIcons.UploadSVGIcon,\r\n onClick: onClickUpload,\r\n key: 'Upload',\r\n },\r\n {\r\n title: i18n.getString(_TL_('Get stock images')),\r\n description: i18n.getString(_TL_('Search Shutterstock for images')),\r\n image: EntryCardSVGIcons.StockSVGIcon,\r\n onClick: onClickStock,\r\n key: 'Stock',\r\n },\r\n {\r\n title: websiteTitle,\r\n description: websiteDescription,\r\n image: EntryCardSVGIcons.WebsiteSVGIcon,\r\n onClick: onClickWebsite,\r\n key: 'Website',\r\n },\r\n ];\r\n\r\n if (isXandrIntegrationEnabled) {\r\n cardData = [\r\n ...cardData,\r\n {\r\n title: i18n.getString(_TL_('Add from Microsoft Invest')),\r\n description: investDescription,\r\n image: EntryCardSVGIcons.InvestSVGIcon,\r\n onClick: onClickInvest,\r\n key: 'Invest',\r\n },\r\n ];\r\n }\r\n\r\n\r\n if (!cardKeys.length) {\r\n return cardData;\r\n }\r\n return cardData.filter(card => cardKeys.includes(card.key));\r\n};\r\n\r\nexport const getHomePageCardData = ({\r\n i18n,\r\n cardKeys = [],\r\n onClickUpload = _.noop,\r\n onClickStock = _.noop,\r\n onClickWebsite = _.noop,\r\n onClickInvest = _.noop,\r\n isXandrIntegrationEnabled = false,\r\n}) => {\r\n let cardData = [\r\n {\r\n title: i18n.getString(_TL_('Upload')),\r\n description: i18n.getString(_TL_('Upload assets from your computer')),\r\n image: EntryCardSVGIcons.UploadSVGIcon,\r\n onClick: onClickUpload,\r\n key: 'Upload',\r\n },\r\n {\r\n title: i18n.getString(_TL_('Add from website')),\r\n description: i18n.getString(_TL_('Enter your URL and we’ll pull assets from it')),\r\n image: EntryCardSVGIcons.WebsiteSVGIcon,\r\n onClick: onClickWebsite,\r\n key: 'Website',\r\n },\r\n {\r\n title: i18n.getString(_TL_('Get stock images')),\r\n description: i18n.getString(_TL_('Search Shutterstock for images')),\r\n image: EntryCardSVGIcons.StockSVGIcon,\r\n onClick: onClickStock,\r\n key: 'Stock',\r\n },\r\n ];\r\n\r\n if (isXandrIntegrationEnabled) {\r\n cardData = [\r\n ...cardData,\r\n {\r\n title: i18n.getString(_TL_('Add from Microsoft Invest')),\r\n description: i18n.getString(_TL_('Search Invest for images')),\r\n image: EntryCardSVGIcons.InvestSVGIcon,\r\n onClick: onClickInvest,\r\n key: 'Invest',\r\n },\r\n ];\r\n }\r\n\r\n if (!cardKeys.length) {\r\n return cardData;\r\n }\r\n return cardData.filter(card => cardKeys.includes(card.key));\r\n};\r\n\r\nexport const getImageAssetLimitPerAccount = (aid, logger) => {\r\n const assetLimit = getSizeLimitPerAccount(aid, 32);\r\n /* istanbul ignore if */\r\n if (assetLimit) {\r\n return assetLimit;\r\n }\r\n\r\n logger.logError('get image asset limit data error', { aid });\r\n return 5000;\r\n};\r\n\r\nexport const getFoldersLimitPerAccount = (aid, logger) => {\r\n const foldersLimit = getSizeLimitPerAccount(aid, 97);\r\n /* istanbul ignore if */\r\n if (foldersLimit) {\r\n return foldersLimit;\r\n }\r\n logger.logError('get folders limit data error', { aid });\r\n return 1000;\r\n};\r\n\r\nexport const getVideoAssetLimitPerAccount = (aid, logger) => {\r\n const assetLimit = getSizeLimitPerAccount(aid, 86);\r\n /* istanbul ignore if */\r\n if (assetLimit) {\r\n return assetLimit;\r\n }\r\n\r\n logger.logError('get video asset limit data error', { aid });\r\n return 1000;\r\n};\r\n\r\nexport const validate = (value) => {\r\n const reg = /<|>|:|\\*|\\?|\"|\\\\|\\/|\\|/;\r\n return !reg.test(value);\r\n};\r\n\r\nexport const getSearchQuery = ({ search = '', additionalQueries = {}, removeQueries = [] }) => {\r\n let query = queryString.parse(search);\r\n query = _.omit(query, (value, key) => _.includes(_.values(AdditionalQueries), key) || _.includes(removeQueries, key));\r\n query = {\r\n ...query,\r\n ...additionalQueries,\r\n };\r\n return `?${queryString.stringify(query)}`;\r\n};\r\n\r\nexport const AIGCHandler = (isAdsStudioAIGCMVPEnabled, isAIGCRegionRestricted, notificationApi, i18n, enabledCallback) => {\r\n if (isAdsStudioAIGCMVPEnabled && !isAIGCRegionRestricted) {\r\n enabledCallback();\r\n } else if (isAIGCRegionRestricted) {\r\n notificationApi.showWarning(i18n.getString(_TL_('This feature isn\\'t available in all markets.')));\r\n } else {\r\n notificationApi.showWarning(i18n.getString(_TL_('This feature isn\\'t available yet, but it\\'s coming soon.')));\r\n }\r\n};\r\n\r\nconst getRealUsedFlagValue = (preference, flagSuffix) => {\r\n if (preference && flagSuffix) {\r\n const realUsedFlagStr = `realUsedFlagIn${flagSuffix}`;\r\n const realUsedFlagHandlerStr = `setRealUsedFlagIn${flagSuffix}`;\r\n const realUsedFlag = preference[realUsedFlagStr];\r\n const realUsedFlagHandler = preference[realUsedFlagHandlerStr];\r\n\r\n return {\r\n realUsedFlag,\r\n realUsedFlagHandler,\r\n };\r\n }\r\n\r\n return {};\r\n};\r\n\r\nexport const handleRealUsedFlag = (preference, flagSuffix) => { // flagSuffix: AssetLibraryApp or AssetLibraryPicker\r\n const { realUsedFlag, realUsedFlagHandler } = getRealUsedFlagValue(preference, flagSuffix);\r\n\r\n const {\r\n haveUsed,\r\n } = realUsedFlag || {};\r\n\r\n if (!haveUsed && realUsedFlagHandler) {\r\n realUsedFlagHandler();\r\n }\r\n};\r\n\r\nexport const addAdStudioSurveyTriggerFlag = (preference, triggerFlag, usedFlagSuffix) => {\r\n const { realUsedFlag } = getRealUsedFlagValue(preference, usedFlagSuffix);\r\n\r\n const { haveUsed, timestamp } = realUsedFlag || {};\r\n\r\n if (haveUsed) {\r\n const currentTime = new Date().getTime();\r\n const diffDay = (currentTime - timestamp) / 1000 / 60 / 60 / 24;\r\n if (diffDay > 1 && window.survey && window.survey.surveyManager) {\r\n window.survey[triggerFlag] = true;\r\n window.survey.surveyManager.trigger({\r\n checkIfSurveyIsOpen: true,\r\n });\r\n }\r\n }\r\n};\r\n\r\nexport const removeAdStudioSurveyTriggerFlag = (triggerFlag) => {\r\n if (window.survey) {\r\n window.survey[triggerFlag] = false;\r\n }\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nconst commonButtonStyle = {\r\n display: 'flex',\r\n ...shorthands.padding('12px'),\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n ...shorthands.gap('8px'),\r\n ...shorthands.borderRadius('8px'),\r\n backgroundColor: '#FFF',\r\n boxShadow: '0 2px 4px 0 rgba(0, 0, 0, 0.14), 0 0 2px 0 rgba(0, 0, 0, 0.12)',\r\n ...shorthands.border('none'),\r\n ...shorthands.outline('none'),\r\n maxHeight: '150px',\r\n ...shorthands.overflow('hidden'),\r\n minWidth: '230px',\r\n};\r\n\r\nconst commonTextStyle = {\r\n fontFamily: 'Segoe UI',\r\n fontStyle: 'normal',\r\n textAlign: 'left',\r\n ...shorthands.flex(1, 1, '0px'),\r\n width: '100%',\r\n ...shorthands.overflow('hidden'),\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n};\r\n\r\nconst commonIconStyle = {\r\n display: 'flex',\r\n ...shorthands.margin('4px'),\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n width: '20px',\r\n height: '20px',\r\n};\r\n\r\nexport const useAssetsEntryCardStyle = makeStyles({\r\n fillWidth: {\r\n ...shorthands.flex(1, 0, '0px'),\r\n },\r\n assetsEntryCard: {\r\n ...commonButtonStyle,\r\n '& .title': {\r\n ...commonTextStyle,\r\n color: '#242424',\r\n fontSize: '14px',\r\n lineHeight: '20px',\r\n fontWeight: 600,\r\n },\r\n '& .description': {\r\n ...commonTextStyle,\r\n color: '#616161',\r\n fontSize: '12px',\r\n lineHeight: '16px',\r\n fontWeight: '400',\r\n },\r\n '& .text': {\r\n ...shorthands.flex(1),\r\n minWidth: '110px',\r\n width: '100%',\r\n },\r\n '& .picture': {\r\n width: '52px',\r\n height: '52px',\r\n '& img': {\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'contain',\r\n },\r\n },\r\n '& .icon': {\r\n ...commonIconStyle,\r\n },\r\n },\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { mergeClasses, Button } from '@fluentui/react-components';\r\nimport { Add20Regular } from '@fluentui/react-icons';\r\nimport { useAssetsEntryCardStyle } from './style';\r\n\r\nconst AssetsEntryCard = ({\r\n id, title, description, imageSrc, onClick, isFillWidth, cardClassName,\r\n}) => {\r\n const classes = useAssetsEntryCardStyle();\r\n\r\n return (\r\n \r\n
\r\n {title}\r\n
\r\n
\r\n
\r\n {title}\r\n
\r\n
\r\n {description}\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n );\r\n};\r\nAssetsEntryCard.propTypes = {\r\n id: PropTypes.string,\r\n title: PropTypes.string.isRequired,\r\n description: PropTypes.string.isRequired,\r\n imageSrc: PropTypes.string.isRequired,\r\n onClick: PropTypes.func.isRequired,\r\n isFillWidth: PropTypes.bool,\r\n cardClassName: PropTypes.string,\r\n};\r\n\r\nAssetsEntryCard.defaultProps = {\r\n id: undefined,\r\n isFillWidth: false,\r\n cardClassName: '',\r\n};\r\n\r\nexport const AddAssetEntryCard = AssetsEntryCard;\r\n","import _ from 'underscore';\r\nimport React, { Children, cloneElement, forwardRef, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Overlay, Layer } from '@bingads-webui-react/fabric-control';\r\n\r\nimport { Button, makeStyles, mergeClasses } from '@fluentui/react-components';\r\nimport {\r\n DrawerHeader,\r\n DrawerHeaderTitle,\r\n DrawerBody,\r\n DrawerFooter,\r\n DrawerOverlay,\r\n} from '@fluentui/react-drawer';\r\nimport { Dismiss24Regular } from '@fluentui/react-icons';\r\n\r\nconst TOP_BANNER_HEIGHT = 60;\r\n\r\nconst useStyles = makeStyles({\r\n addMediaPanel: {\r\n height: `calc(100vh - ${TOP_BANNER_HEIGHT}px)`,\r\n top: 'auto',\r\n bottom: '0px',\r\n },\r\n panelContent: {\r\n '-ms-overflow-style': 'none',\r\n scrollbarWidth: 'none',\r\n },\r\n overlay: {\r\n zIndex: '2',\r\n },\r\n layer: {\r\n zIndex: '1000',\r\n },\r\n});\r\n\r\nexport const AdsStudioPanelContainer = forwardRef((props, ref) => {\r\n const {\r\n onRenderFooterContent,\r\n isOpen,\r\n dismiss,\r\n headerText,\r\n children,\r\n size,\r\n className,\r\n } = props;\r\n\r\n const overlayBodyRef = useRef(null);\r\n const styles = useStyles();\r\n\r\n return (\r\n <>\r\n \r\n \r\n }\r\n onClick={dismiss}\r\n />\r\n }\r\n >\r\n {headerText}\r\n \r\n \r\n \r\n {Children.map(children, child =>\r\n child && cloneElement(child, {\r\n overlayBodyRef,\r\n }))}\r\n \r\n \r\n {onRenderFooterContent}\r\n \r\n \r\n {\r\n isOpen && (\r\n \r\n \r\n \r\n )\r\n }\r\n \r\n );\r\n});\r\n\r\nAdsStudioPanelContainer.propTypes = {\r\n onRenderFooterContent: PropTypes.func,\r\n isOpen: PropTypes.bool,\r\n dismiss: PropTypes.func,\r\n headerText: PropTypes.string,\r\n children: PropTypes.element,\r\n size: PropTypes.string,\r\n className: PropTypes.string,\r\n};\r\n\r\nAdsStudioPanelContainer.defaultProps = {\r\n onRenderFooterContent: _.noop,\r\n isOpen: false,\r\n dismiss: _.noop,\r\n headerText: '',\r\n children: null,\r\n size: 'large',\r\n className: '',\r\n};\r\n\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { Spinner, SpinnerSize } from '@fluentui/react';\r\n\r\nexport const AdsStudioSpinner = ({\r\n useCustomSize,\r\n className,\r\n customStyle,\r\n}) => {\r\n const spinnerStyles = useMemo(() => ({\r\n circle: useCustomSize ? { width: 50, height: 50 } : null,\r\n root: customStyle || {\r\n width: '100%',\r\n height: '100%',\r\n margin: 'auto',\r\n },\r\n }), [customStyle, useCustomSize]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\n\r\nAdsStudioSpinner.propTypes = {\r\n customStyle: PropTypes.shape({}),\r\n useCustomSize: PropTypes.bool,\r\n className: PropTypes.string,\r\n};\r\n\r\nAdsStudioSpinner.defaultProps = {\r\n useCustomSize: false,\r\n className: '',\r\n customStyle: null,\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useActionButtonStyles = makeStyles({\r\n actionButton: {\r\n fontSize: '13px',\r\n fontStyle: 'normal',\r\n fontWeight: 400,\r\n backgroundColor: 'rgb(255,255,255,0.2)',\r\n ...shorthands.borderRadius('999px'),\r\n ...shorthands.border('none'),\r\n ...shorthands.margin('6px'),\r\n },\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { Button } from '@fluentui/react-components';\r\n\r\nimport { useActionButtonStyles } from '../styles/tiles-grid-cell-action-button-style';\r\n\r\nconst ActionButton = ({\r\n text, icon: Icon, onClick, primary, className,\r\n}) => {\r\n const classes = useActionButtonStyles();\r\n const appearance = primary ? 'primary' : 'secondary';\r\n return (\r\n }\r\n onClick={onClick}\r\n className={classnames('cell-button', classes.actionButton, className)}\r\n appearance={appearance}\r\n >\r\n {text}\r\n \r\n );\r\n};\r\n\r\nActionButton.propTypes = {\r\n text: PropTypes.string.isRequired,\r\n icon: PropTypes.elementType.isRequired,\r\n onClick: PropTypes.func.isRequired,\r\n primary: PropTypes.bool,\r\n // injected\r\n className: PropTypes.string.isRequired,\r\n};\r\n\r\nActionButton.defaultProps = {\r\n primary: true,\r\n};\r\n\r\nexport const TilesGridCellActionButton = ActionButton;\r\n","import React, { useCallback, useMemo } from 'react';\r\n\r\nconst AdsStudoThemeContext = React.createContext({});\r\n\r\n// theme is a black box object which could be platform specific\r\n// and is passed down to this context provider, and then\r\n// passed to getStyles functions in withAdsStudioDefaultStyles\r\nexport const AdsStudioThemeProvider = ({ theme, componentStyles, children }) => {\r\n //\r\n // get styles for a specific components by component name\r\n // the styles could be a function (theme) => styles, or an object\r\n const getComponentStyles = useCallback((componentName) => {\r\n const { components } = theme || {};\r\n if (componentStyles && componentStyles[componentName]) {\r\n return componentStyles[componentName];\r\n }\r\n if (components && components[componentName]) {\r\n return components[componentName];\r\n }\r\n return undefined;\r\n }, [componentStyles, theme]);\r\n\r\n const contextValue = useMemo(() => ({\r\n theme,\r\n getComponentStyles,\r\n }), [getComponentStyles, theme]);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport const useAdsStudioTheme = () => React.useContext(AdsStudoThemeContext);\r\n","import _ from 'underscore';\r\nimport React, { useMemo } from 'react';\r\nimport { createUseStyles } from 'react-jss';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\n\r\nimport { useAdsStudioTheme } from './ads-studio-theme-provider';\r\n\r\nconst emptyAdsStudioTheme = { theme: {}, getComponentStyles: () => { } };\r\nconst getDisplayName = Component => Component.displayName || Component.name || 'Component';\r\n\r\nfunction useThemedStyles({ componentName, prefixClassName, getDefaultStyles }) {\r\n // get theme from ads studio themem context provider\r\n const { theme, getComponentStyles } = useAdsStudioTheme() || emptyAdsStudioTheme;\r\n\r\n // get themed styles\r\n const themedStyles = useMemo(() => {\r\n // check if there are any overriden styles for this component from theme provider\r\n let overridenStyles = {};\r\n if (getComponentStyles) {\r\n // it could be an function or an object\r\n const getOverridenStyles = getComponentStyles(componentName);\r\n overridenStyles = _.isFunction(getOverridenStyles) ? getOverridenStyles(theme || {}) : getOverridenStyles;\r\n }\r\n\r\n // default styles\r\n const defaultStyles = getDefaultStyles && getDefaultStyles(theme || {});\r\n\r\n // merge styles\r\n return { ...defaultStyles, ...overridenStyles };\r\n }, [componentName, getComponentStyles, getDefaultStyles, theme]);\r\n\r\n // create jss styles\r\n const useStyles = useMemo(\r\n () => createUseStyles(themedStyles, { name: prefixClassName || 'AS' }),\r\n [prefixClassName, themedStyles]\r\n );\r\n const classes = useStyles() || {};\r\n\r\n const styles = useMemo(() => ({ classes, themedStyles }), [classes, themedStyles]);\r\n return styles;\r\n}\r\n\r\n// use an external theme to decouple the wrapped components with a specific theme provider\r\n// eslint-disable-next-line valid-jsdoc\r\n/**\r\n * @deprecated this function is deprecated, and will be removed later\r\n */\r\nexport function withAdsStudioStyles(WrappedComponent, getDefaultStyles, options) {\r\n const {\r\n prefixClassName, // the prefix of the class names generated by react-jss\r\n useRawStyles, // also pass down the themed styles to the wrapped component, which may be used in Fluent UI components\r\n componentName, // the description name of WrappedComponent\r\n } = options || {};\r\n\r\n const finalComponentName = componentName || getDisplayName(WrappedComponent);\r\n\r\n const HOC = (props) => {\r\n const { classes, themedStyles } = useThemedStyles({ componentName: finalComponentName, prefixClassName, getDefaultStyles });\r\n return (\r\n \r\n );\r\n };\r\n\r\n HOC.displayName = `withAdsStudioStyles(${finalComponentName})`;\r\n\r\n hoistNonReactStatics(HOC, WrappedComponent);\r\n\r\n return HOC;\r\n}\r\n\r\n","const positionFill = {\r\n position: 'absolute',\r\n left: 0,\r\n top: 0,\r\n right: 0,\r\n bottom: 0,\r\n};\r\n\r\nexport const getCellOverlayStyle = () => ({\r\n cellOverlayContainer: {\r\n ...positionFill,\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n background: 'linear-gradient(180deg, rgba(49, 34, 34, 0.3) 0%, rgba(49, 34, 34, 0.8) 53.12%, #312222 100%)',\r\n opacity: 0,\r\n transition: 'opacity 0.2s ease-out',\r\n borderRadius: 6,\r\n },\r\n});\r\n","\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\n\r\nimport { withAdsStudioStyles } from '../../../theme/with-ads-studio-styles';\r\nimport { getCellOverlayStyle } from '../styles/tiles-grid-cell-overlay-style';\r\n\r\nconst CellOverlay = ({ children, classes }) => (\r\n
\r\n {children}\r\n
\r\n);\r\n\r\nCellOverlay.propTypes = {\r\n children: PropTypes.node,\r\n classes: PropTypes.shape({\r\n cellOverlayContainer: PropTypes.string,\r\n }).isRequired,\r\n};\r\n\r\nCellOverlay.defaultProps = {\r\n children: null,\r\n};\r\n\r\nexport const TilesGridCellOverlay = withAdsStudioStyles(CellOverlay, getCellOverlayStyle);\r\n","/* eslint-disable no-unused-vars */\r\nconst getCommonCellCardStyle = palette => ({\r\n position: 'relative',\r\n flexShrink: 1,\r\n flexGrow: 1,\r\n borderRadius: 6,\r\n backgroundColor: palette.neutralLight,\r\n filter: 'drop-shadow(0px 0.6px 1.8px rgba(0, 0, 0, 0.1)) drop-shadow(0px 3.2px 7.2px rgba(0, 0, 0, 0.13))',\r\n});\r\n\r\nexport const getCellCardStyle = ({ components, core: { palette = {} } = {} } = {}) => ({\r\n cellCardContainer: {\r\n ...getCommonCellCardStyle(palette),\r\n },\r\n});\r\n\r\nexport const getCellCardWithOverlayStyle = ({ components, core: { palette = {} } = {} } = {}) => {\r\n const activeStyle = {\r\n '& .cell-overlay': {\r\n opacity: 1,\r\n\r\n '& .cell-overlay-actions': {\r\n opacity: 1,\r\n transform: 'translate(0px, -10px)',\r\n },\r\n },\r\n '& .cell-decorative-label-container': {\r\n '& .label-secondary-text': {\r\n opacity: 1,\r\n transform: 'translate(10px, 0px)',\r\n },\r\n },\r\n };\r\n return {\r\n cellCardContainer: getCommonCellCardStyle(palette),\r\n\r\n cellCardContainerOverflow: {\r\n overflow: 'hidden',\r\n },\r\n\r\n cellCardWithOverlayContainer: {\r\n '& .cell-overlay-actions': {\r\n display: 'flex',\r\n flex: 1,\r\n flexDirection: 'row',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n height: '100%',\r\n position: 'relative',\r\n opacity: 0.2,\r\n top: 10,\r\n transition: 'opacity 0.5s 0.1s, transform 0.3s 0.1s',\r\n },\r\n\r\n '& .static-cell-overlay-items': {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n button: 0,\r\n },\r\n\r\n '&:hover, &:focus-within': activeStyle,\r\n },\r\n focused: activeStyle,\r\n };\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\n\r\nimport { TilesGridCellOverlay } from './tiles-grid-cell-overlay';\r\nimport { withAdsStudioStyles } from '../../../theme/with-ads-studio-styles';\r\nimport {\r\n getCellCardStyle,\r\n getCellCardWithOverlayStyle,\r\n} from '../styles/tiles-grid-cell-card-style';\r\n\r\nconst CellCardWithOverlay = ({\r\n children,\r\n isOverlayEnabled,\r\n isCellFocused,\r\n renderOverlayContent,\r\n renderStaticOverlayContent,\r\n onClick,\r\n customCellCardClass,\r\n classes,\r\n}) => {\r\n const onClickFunc = (event) => {\r\n if (onClick) {\r\n onClick();\r\n }\r\n if (event && event.stopPropagation) { event.stopPropagation(); }\r\n if (event && event.preventDefault) { event.preventDefault(); }\r\n };\r\n\r\n const onKeyDown = (event) => {\r\n if (event.keyCode === 13) { // Enter key\r\n onClickFunc();\r\n }\r\n };\r\n\r\n return (\r\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\r\n \r\n {children}\r\n {isOverlayEnabled && (\r\n \r\n
\r\n {renderOverlayContent ? renderOverlayContent() : null}\r\n
\r\n { renderStaticOverlayContent ?\r\n
\r\n {renderStaticOverlayContent()}\r\n
\r\n : null}\r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nCellCardWithOverlay.propTypes = {\r\n children: PropTypes.node.isRequired,\r\n renderOverlayContent: PropTypes.func,\r\n renderStaticOverlayContent: PropTypes.func,\r\n isOverlayEnabled: PropTypes.bool,\r\n isCellFocused: PropTypes.bool,\r\n onClick: PropTypes.func,\r\n customCellCardClass: PropTypes.string,\r\n classes: PropTypes.shape({\r\n containerClass: PropTypes.string,\r\n cellCardContainer: PropTypes.string,\r\n cellCardWithOverlayContainer: PropTypes.string,\r\n cellCardContainerOverflow: PropTypes.string,\r\n focused: PropTypes.string,\r\n }).isRequired,\r\n};\r\n\r\nCellCardWithOverlay.defaultProps = {\r\n isOverlayEnabled: true,\r\n isCellFocused: false,\r\n renderOverlayContent: null,\r\n renderStaticOverlayContent: null,\r\n customCellCardClass: undefined,\r\n onClick: undefined,\r\n};\r\n\r\nconst CellCard = ({ children, classes, customCellCardClass }) => (\r\n
\r\n {children}\r\n
\r\n);\r\n\r\nCellCard.propTypes = {\r\n children: PropTypes.node.isRequired,\r\n customCellCardClass: PropTypes.string,\r\n classes: PropTypes.shape({\r\n containerClass: PropTypes.string,\r\n cellCardContainer: PropTypes.string,\r\n }).isRequired,\r\n};\r\n\r\nCellCard.defaultProps = {\r\n customCellCardClass: undefined,\r\n};\r\n\r\nexport const TilesGridCellCard = withAdsStudioStyles(CellCard, getCellCardStyle);\r\nexport const TilesGridCellCardWithOverlay = withAdsStudioStyles(CellCardWithOverlay, getCellCardWithOverlayStyle);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Icon } from '@fluentui/react';\r\n\r\nimport { withAdsStudioStyles } from '../../../theme/with-ads-studio-styles';\r\nimport { getGridDecorativeIconStyle } from '../styles/tiles-grid-cell-decorative-icon';\r\n\r\nconst CellDecorativeIcon = ({\r\n iconName,\r\n classes,\r\n i18n,\r\n}) => (\r\n
\r\n
\r\n \r\n {i18n.getString(_TL_('Video'))}\r\n
\r\n
\r\n);\r\n\r\nCellDecorativeIcon.propTypes = {\r\n iconName: PropTypes.string.isRequired,\r\n classes: PropTypes.shape({\r\n centerContainer: PropTypes.string,\r\n circleContainer: PropTypes.string,\r\n iconContent: PropTypes.string,\r\n labelName: PropTypes.string,\r\n }),\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nCellDecorativeIcon.defaultProps = {\r\n classes: {},\r\n};\r\n\r\nexport const TilesGridCellDecorativeIcon\r\n = withAdsStudioStyles(CellDecorativeIcon, getGridDecorativeIconStyle);\r\n","/* eslint-disable no-unused-vars */\r\nexport const getGridDecorativeIconStyle = ({ components, core: { palette = {} } = {} } = {}) => ({\r\n centerContainer: {\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n },\r\n circleContainer: {\r\n width: 80,\r\n height: 41,\r\n backgroundColor: 'rgb(50,49,48, 0.6)',\r\n borderRadius: 4,\r\n boxShadow: '0px 4px 16px rgb(0 0 0 / 14%)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n iconContent: {\r\n fontSize: 20,\r\n color: palette.white,\r\n },\r\n labelName: {\r\n fontSize: 16,\r\n color: palette.white,\r\n marginLeft: 5,\r\n },\r\n});\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useGridDecorativeLabelStyle = makeStyles({\r\n tilesGridCellDecorativeLabel: {\r\n color: tokens.colorNeutralForegroundInverted,\r\n fontWeight: 600,\r\n fontSize: '12px',\r\n lineHeight: '16px',\r\n\r\n '& .label-icon-and-text': {\r\n display: 'flex',\r\n ...shorthands.borderRadius('4px'),\r\n ...shorthands.padding('2px', '8px', '2px', '4px'),\r\n marginRight: '6px',\r\n // background: 'linear-gradient(158.29deg, #0078D4 16.69%, #4400D4 85.76%)',\r\n backgroundColor: tokens.colorNeutralBackgroundStatic,\r\n '& .label-icon': {\r\n marginRight: '4px',\r\n fontSize: '16px',\r\n },\r\n },\r\n\r\n '& .label-secondary-text': {\r\n position: 'relative',\r\n left: '-10px',\r\n opacity: 0,\r\n ...shorthands.transition('opacity', '0.5s', '0.1s', 'transform', '0.3s', '0.1s'),\r\n },\r\n\r\n '& .additional-icon-content': {\r\n width: '25px',\r\n height: '24px',\r\n backgroundColor: 'rgb(50,49,48, 0.6)',\r\n ...shorthands.borderRadius('4px'),\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n display: 'flex',\r\n marginRight: '8px',\r\n position: 'absolute',\r\n right: '50px',\r\n '& .additional-icon': {\r\n width: '17px',\r\n },\r\n },\r\n\r\n '& .label-additional-text': {\r\n position: 'absolute',\r\n right: '0px',\r\n '& .label-additional-content': {\r\n backgroundColor: tokens.colorNeutralBackgroundStatic,\r\n float: 'right',\r\n ...shorthands.padding('4px'),\r\n ...shorthands.borderRadius('4px'),\r\n },\r\n },\r\n },\r\n\r\n cellLabelDisplay: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\n\r\nimport { videoIcon } from '../../../asset-images';\r\nimport { useGridDecorativeLabelStyle } from '../styles/tiles-grid-cell-decorative-label';\r\n\r\nconst CellDecorativeLabel = ({\r\n text,\r\n icon: Icon,\r\n secondaryText,\r\n additionaIconName,\r\n additionalText,\r\n customClass,\r\n}) => {\r\n const classes = useGridDecorativeLabelStyle();\r\n\r\n return (\r\n
\r\n {\r\n (text || Icon) && (\r\n
\r\n {Icon && }\r\n {text &&
{text}
}\r\n
\r\n )\r\n }\r\n {secondaryText &&
{secondaryText}
}\r\n {\r\n additionaIconName && (\r\n
\r\n \"\"\r\n
\r\n )\r\n }\r\n {\r\n additionalText && (\r\n
\r\n
{additionalText}
\r\n
\r\n )\r\n }\r\n
\r\n );\r\n};\r\n\r\nCellDecorativeLabel.propTypes = {\r\n text: PropTypes.string,\r\n icon: PropTypes.elementType,\r\n additionaIconName: PropTypes.string,\r\n secondaryText: PropTypes.string,\r\n additionalText: PropTypes.string,\r\n customClass: PropTypes.shape({\r\n cellLabel: PropTypes.string,\r\n iconTextWrapper: PropTypes.string,\r\n }),\r\n};\r\n\r\nCellDecorativeLabel.defaultProps = {\r\n text: null,\r\n icon: null,\r\n secondaryText: '',\r\n additionalText: null,\r\n additionaIconName: null,\r\n customClass: {},\r\n};\r\n\r\nexport const TilesGridCellDecorativeLabel = CellDecorativeLabel;\r\n","/* eslint-disable max-len */\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { IconButton } from '@fluentui/react';\r\n\r\nimport { withAdsStudioStyles } from '../../../theme/with-ads-studio-styles';\r\nimport { getCellDeletionButtonDecoratorStyle } from '../styles/tiles-grid-cell-deletion-button-decorator-style';\r\n\r\nconst iconProps = { iconName: 'Clear' };\r\n\r\nconst CellDeletionButtonDecorator = ({\r\n item, onDelete, children, classes,\r\n}) => {\r\n const onClick = (event) => {\r\n if (onDelete) {\r\n onDelete(item);\r\n }\r\n if (event.stopPropagation) { event.stopPropagation(); }\r\n if (event.preventDefault) { event.preventDefault(); }\r\n };\r\n\r\n return (\r\n <>\r\n {children}\r\n
\r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nCellDeletionButtonDecorator.propTypes = {\r\n item: PropTypes.shape({}).isRequired,\r\n onDelete: PropTypes.func,\r\n children: PropTypes.node.isRequired,\r\n classes: PropTypes.shape({\r\n cellDeletionButtonDecorator: PropTypes.string,\r\n deleteButton: PropTypes.string,\r\n }).isRequired,\r\n};\r\n\r\nCellDeletionButtonDecorator.defaultProps = {\r\n onDelete: undefined,\r\n};\r\n\r\nexport const TilesGridCellDeletionButtonDecorator = withAdsStudioStyles(\r\n CellDeletionButtonDecorator,\r\n getCellDeletionButtonDecoratorStyle\r\n);\r\n","/* eslint-disable no-unused-vars */\r\nexport const getCellDeletionButtonDecoratorStyle = ({ components, core: { palette = {} } = {} } = {}) => ({\r\n cellDeletionButtonDecorator: {\r\n position: 'absolute',\r\n bottom: 8,\r\n right: 10,\r\n },\r\n deleteButton: {\r\n backgroundColor: palette.themeLighter,\r\n opacity: 0.7,\r\n zIndex: 2,\r\n padding: 0,\r\n height: 24,\r\n width: 24,\r\n '&:hover': {\r\n opacity: 0.9,\r\n },\r\n '&:active': {\r\n opacity: 1,\r\n },\r\n '& .ms-Button-icon': {\r\n margin: 0,\r\n },\r\n },\r\n});\r\n","const positionFill = {\r\n position: 'absolute',\r\n left: 0,\r\n top: 0,\r\n right: 0,\r\n bottom: 0,\r\n};\r\n\r\nexport const getTilesGridCellImageStyles = () => ({\r\n tilesGridCellImageContainer: {\r\n '& .cell-image-state': {\r\n ...positionFill,\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n },\r\n imageStateOverlayClass: {\r\n position: 'absolute',\r\n width: '100%',\r\n height: '100%',\r\n top: 0,\r\n left: 0,\r\n },\r\n stateParent: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: '100%',\r\n height: '100%',\r\n },\r\n reloadBtn: {\r\n zIndex: 1,\r\n },\r\n});\r\n","import React, { useCallback, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { noop } from 'underscore';\r\nimport classnames from 'classnames';\r\n\r\nimport { Image as FluentImage, ImageFit, ImageLoadState } from '@fluentui/react';\r\nimport { ArrowClockwiseRegular } from '@fluentui/react-icons';\r\n\r\nimport { AdsStudioSpinner } from '../../ads-studio-spinner';\r\nimport { withAdsStudioStyles } from '../../../theme/with-ads-studio-styles';\r\nimport { TilesGridCellActionButton as ActionButton } from './tiles-grid-cell-action-button';\r\nimport { getTilesGridCellImageStyles } from '../styles/tiles-grid-cell-image';\r\n\r\nconst RETRY_COUNT = 3;\r\nconst RETRY_DEALY = 1000;\r\n\r\nconst CellImage = ({\r\n src,\r\n alt,\r\n showSpinner,\r\n onLoaded,\r\n onError,\r\n i18n,\r\n onClick,\r\n enableRetry,\r\n classes,\r\n customClasses,\r\n onCustomizedSpinner,\r\n imageFit,\r\n}) => {\r\n //\r\n const [imageLoadState, setImageLoadState] = useState(ImageLoadState.notLoaded);\r\n\r\n const onLoadingStateChange = useCallback((s, onLoadError) => {\r\n if (s === ImageLoadState.loaded) {\r\n onLoaded(true);\r\n } else if (s === ImageLoadState.error) {\r\n onLoadError();\r\n // don't set error state until all retrying are failed\r\n return;\r\n }\r\n setImageLoadState(s);\r\n }, [onLoaded]);\r\n\r\n // retry image loading by creating a HTML Image element\r\n const reloadImage = useCallback((onLoadError) => {\r\n const img = new Image();\r\n img.onerror = () => {\r\n onLoadingStateChange(ImageLoadState.error, onLoadError);\r\n };\r\n img.onload = () => {\r\n onLoadingStateChange(ImageLoadState.loaded);\r\n };\r\n onLoadingStateChange(ImageLoadState.notLoaded);\r\n img.src = src;\r\n }, [onLoadingStateChange, src]);\r\n\r\n const onErrorWithRetry = useCallback((retryCount = RETRY_COUNT) => {\r\n if (enableRetry && retryCount > 0) {\r\n setTimeout(() => reloadImage(() => onErrorWithRetry(retryCount - 1)), RETRY_DEALY);\r\n } else {\r\n setImageLoadState(ImageLoadState.error);\r\n if (onError) {\r\n onError();\r\n }\r\n }\r\n }, [enableRetry, onError, reloadImage]);\r\n\r\n const onReloadImage = useCallback((event) => {\r\n if (imageLoadState === ImageLoadState.error) {\r\n reloadImage(onErrorWithRetry);\r\n }\r\n if (event.stopPropagation) { event.stopPropagation(); }\r\n if (event.preventDefault) { event.preventDefault(); }\r\n }, [imageLoadState, onErrorWithRetry, reloadImage]);\r\n\r\n const onImageLoadingStateChange = useCallback((s) => {\r\n onLoadingStateChange(s, onErrorWithRetry);\r\n }, [onErrorWithRetry, onLoadingStateChange]);\r\n\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {imageLoadState === ImageLoadState.notLoaded && showSpinner && (onCustomizedSpinner ?\r\n onCustomizedSpinner() : ())\r\n }\r\n { imageLoadState === ImageLoadState.error && (\r\n \r\n )}\r\n
\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nCellImage.propTypes = {\r\n src: PropTypes.string.isRequired,\r\n alt: PropTypes.string.isRequired,\r\n showSpinner: PropTypes.bool,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n onLoaded: PropTypes.func,\r\n onError: PropTypes.func,\r\n onClick: PropTypes.func,\r\n onCustomizedSpinner: PropTypes.func,\r\n enableRetry: PropTypes.bool,\r\n classes: PropTypes.shape({\r\n tilesGridCellImageContainer: PropTypes.string,\r\n imageStateOverlayClass: PropTypes.string,\r\n stateParent: PropTypes.string,\r\n reloadBtn: PropTypes.string,\r\n }).isRequired,\r\n customClasses: PropTypes.shape({\r\n containerClass: PropTypes.string,\r\n imageClass: PropTypes.string,\r\n }),\r\n imageFit: PropTypes.number,\r\n};\r\n\r\nCellImage.defaultProps = {\r\n showSpinner: true,\r\n onLoaded: noop,\r\n onError: noop,\r\n onClick: noop,\r\n enableRetry: true,\r\n customClasses: {},\r\n onCustomizedSpinner: undefined,\r\n imageFit: ImageFit.cover,\r\n};\r\n\r\nexport const TilesGridCellImage = withAdsStudioStyles(CellImage, getTilesGridCellImageStyles);\r\n","import { makeResetStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const useCellSectionDecoratorStyle = makeResetStyles({\r\n width: '100%',\r\n height: '100%',\r\n '& .grid-cell-selection-decorator': {\r\n width: '100%',\r\n height: '100%',\r\n ...shorthands.overflow('hidden'),\r\n },\r\n '& .selected-checkbox': {\r\n position: 'absolute',\r\n top: '6px',\r\n right: '6px',\r\n },\r\n '& .selectedState': {\r\n outlineStyle: 'solid',\r\n outlineWidth: '4px',\r\n outlineColor: tokens.colorBrandBackground,\r\n ...shorthands.borderRadius('6px'),\r\n },\r\n '& .checkbox': {\r\n backgroundColor: tokens.colorNeutralForegroundInverted,\r\n zIndex: 2,\r\n width: '20px',\r\n height: '20px',\r\n ...shorthands.borderRadius(tokens.borderRadiusSmall),\r\n '& .fui-Checkbox__indicator': {\r\n width: '20px',\r\n height: '20px',\r\n ...shorthands.margin(0),\r\n },\r\n },\r\n});\r\n","/* eslint-disable jsx-a11y/no-static-element-interactions */\r\n/* eslint-disable jsx-a11y/click-events-have-key-events */\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Checkbox, mergeClasses } from '@fluentui/react-components';\r\n\r\nimport { useCellSectionDecoratorStyle } from '../styles/tiles-grid-cell-selection-decorator-style';\r\n\r\nexport const TilesGridCellSelectionDecorator = ({\r\n item, selected, onClick, children, ariaLabel, isFocused, classes,\r\n}) => {\r\n const onClickFunc = (event) => {\r\n if (onClick) {\r\n onClick({ item, selected });\r\n }\r\n if (event.stopPropagation) { event.stopPropagation(); }\r\n if (event.preventDefault) { event.preventDefault(); }\r\n };\r\n\r\n const onKeyDown = (event) => {\r\n if (event.keyCode === 13) { // Enter key\r\n onClickFunc(event);\r\n }\r\n };\r\n\r\n const cellSelectionDecoratorWrapper = useCellSectionDecoratorStyle();\r\n\r\n return (\r\n
\r\n \r\n {children}\r\n
\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nTilesGridCellSelectionDecorator.propTypes = {\r\n item: PropTypes.shape({}).isRequired,\r\n selected: PropTypes.bool.isRequired,\r\n onClick: PropTypes.func,\r\n children: PropTypes.node.isRequired,\r\n classes: PropTypes.shape({\r\n cellSelectionDecorator: PropTypes.string,\r\n cellSelectionDecoratorWrapper: PropTypes.string,\r\n selectedState: PropTypes.string,\r\n selectedStateWrapper: PropTypes.string,\r\n }),\r\n ariaLabel: PropTypes.string,\r\n isFocused: PropTypes.bool,\r\n};\r\n\r\nTilesGridCellSelectionDecorator.defaultProps = {\r\n onClick: undefined,\r\n ariaLabel: '',\r\n isFocused: false,\r\n classes: {},\r\n};\r\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport const TilesGridLoadingCell = ({\r\n onLoading, containerClass, children,\r\n}) => {\r\n const gridCellContent = useRef(null);\r\n const [hasSetUpObserver, setHasSetUpObserver] = useState(false);\r\n const onLoadingCalled = useRef(false);\r\n\r\n const observer = useMemo(() => {\r\n onLoadingCalled.current = false;\r\n if (window.IntersectionObserver && onLoading) {\r\n return new IntersectionObserver((entries) => {\r\n const [entry] = entries || [];\r\n\r\n if (entry && entry.isIntersecting && onLoading && !onLoadingCalled.current) {\r\n onLoading();\r\n onLoadingCalled.current = true;\r\n\r\n if (entry && entry.target) {\r\n observer.unobserve(entry.target);\r\n }\r\n }\r\n }, {\r\n root: null,\r\n rootMargin: '0px',\r\n threshold: 0.0,\r\n });\r\n }\r\n return null;\r\n }, [onLoading]);\r\n\r\n useEffect(() => {\r\n if (observer && gridCellContent.current && !hasSetUpObserver) {\r\n observer.observe(gridCellContent.current);\r\n setHasSetUpObserver(true);\r\n }\r\n }, [observer, gridCellContent, hasSetUpObserver]);\r\n\r\n return (\r\n
\r\n {children}\r\n
\r\n );\r\n};\r\n\r\nTilesGridLoadingCell.propTypes = {\r\n onLoading: PropTypes.func,\r\n children: PropTypes.node,\r\n containerClass: PropTypes.string,\r\n};\r\n\r\nTilesGridLoadingCell.defaultProps = {\r\n onLoading: null,\r\n children: null,\r\n containerClass: undefined,\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nconst commonStyles = {\r\n boxShadow: '0px 1.47522px 4.42567px rgba(0, 0, 0, 0.2), inset 0.295044px -0.295044px 0.590089px rgba(0, 0, 0, 0.2), inset -0.590089px 0.590089px 1.47522px rgba(255, 255, 255, 0.3)',\r\n ...shorthands.borderRadius('2px'),\r\n};\r\n\r\nexport const useFolderIconStyle = makeStyles({\r\n folderIconContainer: {\r\n position: 'relative',\r\n height: '52px',\r\n width: '68px',\r\n\r\n '& .folder-tag': {\r\n width: '50%',\r\n height: '28.36%',\r\n ...commonStyles,\r\n },\r\n\r\n '& .folder-content': {\r\n width: '100%',\r\n height: '85.84%',\r\n ...commonStyles,\r\n\r\n position: 'absolute',\r\n left: 0,\r\n bottom: 0,\r\n ...shorthands.overflow('hidden'),\r\n },\r\n },\r\n folderTag: {\r\n backgroundColor: '#1F65F1',\r\n },\r\n emptyFolderTag: {\r\n backgroundColor: '#A0A0A0',\r\n },\r\n folderContent: {\r\n backgroundColor: '#1F65F1',\r\n },\r\n emptyFolderContent: {\r\n backgroundColor: '#C4C4C4',\r\n },\r\n});\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { mergeClasses, Image } from '@fluentui/react-components';\r\n\r\nimport { useFolderIconStyle } from './style';\r\n\r\nconst FolderIconInternal = ({\r\n thumbnailImageUrl, isEmptyFolder, folderIconRootClassName,\r\n}) => {\r\n const classes = useFolderIconStyle();\r\n return (\r\n
\r\n
\r\n
\r\n { thumbnailImageUrl && }\r\n
\r\n
\r\n );\r\n};\r\n\r\nFolderIconInternal.propTypes = {\r\n thumbnailImageUrl: PropTypes.string,\r\n folderIconRootClassName: PropTypes.string,\r\n isEmptyFolder: PropTypes.bool,\r\n};\r\n\r\nFolderIconInternal.defaultProps = {\r\n thumbnailImageUrl: undefined,\r\n folderIconRootClassName: '',\r\n isEmptyFolder: false,\r\n};\r\n\r\nexport const FolderIcon = FolderIconInternal;\r\n","import { makeStyles } from '@fluentui/react-components';\r\n\r\nexport const useCellSectionDecoratorStyle = makeStyles({\r\n dragPreview: {\r\n width: '100px',\r\n height: '100px',\r\n display: 'block',\r\n position: 'relative',\r\n },\r\n dragPreviewImage: {\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover',\r\n opacity: 0.5,\r\n },\r\n dragPreviewFolderWrapper: {\r\n width: '100%',\r\n height: '100%',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n dragPreviewFolder: {\r\n width: '100px',\r\n height: '76px',\r\n },\r\n dragPreviewCount: {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n textAlign: 'center',\r\n verticalAlign: 'middle',\r\n width: '100px',\r\n height: '100px',\r\n lineHeight: '100px',\r\n backgroundColor: 'rgba(0,0,0,0.5)',\r\n color: 'white',\r\n fontSize: '14px',\r\n },\r\n});\r\n","import React, { useCallback, useMemo } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\n\r\nimport { FolderIcon } from '../../folder-icon-component';\r\nimport { useCellSectionDecoratorStyle } from '../styles/tiles-grid-cell-drag-decorator-style';\r\n\r\nexport const TilesGridCellDragDecorator = ({\r\n draggable,\r\n children,\r\n item,\r\n dragItemsLength,\r\n onDrag,\r\n i18n,\r\n selected,\r\n}) => {\r\n const classes = useCellSectionDecoratorStyle();\r\n\r\n const dragPreviewDescription = useMemo(() => {\r\n let dragItemsLengthInner = dragItemsLength;\r\n if (!selected) {\r\n dragItemsLengthInner += 1;\r\n }\r\n if (dragItemsLengthInner > 1) {\r\n return i18n.getString(_TL_('{{dragItemsLength}} items'), { dragItemsLength: dragItemsLengthInner });\r\n }\r\n return i18n.getString(_TL_('1 item'));\r\n }, [dragItemsLength, i18n, selected]);\r\n\r\n const renderDragPreview = useCallback(() => (\r\n
\r\n {\r\n item.url || item.thumbnailUrl ? (\r\n \r\n ) : (\r\n
\r\n \r\n
\r\n )\r\n }\r\n
{dragPreviewDescription}
\r\n
\r\n ), [classes, dragPreviewDescription, item.thumbnailUrl, item.url]);\r\n\r\n const onDragStart = useCallback((event) => {\r\n onDrag({ item });\r\n const container = document.createElement('div');\r\n const DragPreview = renderDragPreview;\r\n ReactDOM.render(, container);\r\n const domElement = container.firstChild;\r\n document.body.appendChild(domElement);\r\n\r\n if (event && event.dataTransfer && event.dataTransfer.setDragImage) {\r\n event.dataTransfer.setDragImage(domElement, 0, 0);\r\n }\r\n }, [item, onDrag, renderDragPreview]);\r\n\r\n return (\r\n draggable ?\r\n \r\n {children}\r\n
: children\r\n );\r\n};\r\n\r\nTilesGridCellDragDecorator.propTypes = {\r\n draggable: PropTypes.bool,\r\n children: PropTypes.node.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n item: PropTypes.shape({}),\r\n onDrag: PropTypes.func,\r\n dragItemsLength: PropTypes.number,\r\n selected: PropTypes.bool,\r\n};\r\n\r\nTilesGridCellDragDecorator.defaultProps = {\r\n draggable: false,\r\n item: {},\r\n onDrag: () => null,\r\n dragItemsLength: 1,\r\n selected: false,\r\n};\r\n","import { makeResetStyles, tokens } from '@fluentui/react-components';\r\n\r\nexport const useFolderGridCellDropStyle = makeResetStyles({\r\n outlineOffset: '6px',\r\n outlineStyle: 'dashed',\r\n outlineWidth: '2px',\r\n outlineColor: tokens.colorBrandBackground,\r\n});\r\n","import React, { useCallback, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\n\r\nimport { useFolderGridCellDropStyle } from '../styles/tiles-grid-cell-drop-decorator-style';\r\n\r\nexport const TilesGridCellDropDecorator = ({\r\n children,\r\n droppable,\r\n onDrop,\r\n customClassName,\r\n}) => {\r\n const [isOver, setIsOver] = useState(false);\r\n\r\n const tilesGridCellDropOver = useFolderGridCellDropStyle();\r\n\r\n const onDragOver = useCallback((event) => {\r\n event.preventDefault();\r\n setIsOver(true);\r\n }, []);\r\n\r\n const onDragLeave = useCallback(() => {\r\n setIsOver(false);\r\n }, []);\r\n\r\n const onDropHandler = useCallback((event) => {\r\n event.preventDefault();\r\n setIsOver(false);\r\n onDrop();\r\n }, [onDrop]);\r\n\r\n return (\r\n droppable ? (\r\n \r\n {children}\r\n \r\n ) : children\r\n );\r\n};\r\n\r\nTilesGridCellDropDecorator.propTypes = {\r\n children: PropTypes.node.isRequired,\r\n droppable: PropTypes.bool,\r\n onDrop: PropTypes.func,\r\n customClassName: PropTypes.string,\r\n};\r\n\r\nTilesGridCellDropDecorator.defaultProps = {\r\n droppable: false,\r\n onDrop: () => null,\r\n customClassName: '',\r\n};\r\n","import { DEFAULT_PAGE_SIZE } from '../../model';\r\n\r\nconst ROW_HEIGHT = 275;\r\nconst MAX_COLUMN_WIDTH = 350;\r\nconst MIN_COLUMN_WIDTH = 250;\r\nconst DEFAULT_ASPECT_RATIO = 0.9;\r\n\r\nexport const DEFAULT_CONFIG = {\r\n // if this value is set, rowHeight vallue is ignored, and\r\n // the row height is calculated by columnWidth * aspectRatio\r\n aspectRatio: DEFAULT_ASPECT_RATIO,\r\n maxColumnWidth: MAX_COLUMN_WIDTH,\r\n minColumnWidth: MIN_COLUMN_WIDTH,\r\n rowHeight: ROW_HEIGHT,\r\n preferredCellsPerPage: DEFAULT_PAGE_SIZE,\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\n\r\nimport { Grid } from '@bingads-webui-campaign-react/ads-studio-shared-components';\r\nimport { withAdsStudioStyles } from '../../theme/with-ads-studio-styles';\r\n\r\nimport { getTilesGridStyle } from './styles/tiles-grid-style';\r\nimport { DEFAULT_CONFIG } from './default-grid-config';\r\n\r\n\r\nconst TilesGridInternal = ({\r\n items,\r\n onRenderCell,\r\n config,\r\n classes,\r\n}) => {\r\n const onRenderCellImpl = useCallback((gridItem) => {\r\n const { item } = gridItem;\r\n const { _index } = item;\r\n return (\r\n
\r\n {onRenderCell({ item, index: _index })}\r\n
\r\n );\r\n }, [onRenderCell]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nTilesGridInternal.propTypes = {\r\n items: PropTypes.arrayOf(PropTypes.shape({})),\r\n onRenderCell: PropTypes.func.isRequired,\r\n config: PropTypes.shape({\r\n aspectRatio: PropTypes.number,\r\n maxColumnWidth: PropTypes.number,\r\n minColumnWidth: PropTypes.number,\r\n rowHeight: PropTypes.number,\r\n preferredCellsPerPage: PropTypes.number,\r\n columnPadding: PropTypes.number,\r\n }),\r\n // injected styles\r\n classes: PropTypes.shape({\r\n tilesGridContainer: PropTypes.string,\r\n }).isRequired,\r\n};\r\n\r\nTilesGridInternal.defaultProps = {\r\n items: [],\r\n config: DEFAULT_CONFIG,\r\n};\r\n\r\nexport const TilesGrid = withAdsStudioStyles(TilesGridInternal, getTilesGridStyle);\r\n","export const getTilesGridStyle = () => ({\r\n tilesGridContainer: {\r\n // grid styles\r\n '& .tiles-grid': {\r\n overflow: 'hidden',\r\n position: 'relative',\r\n '& .ms-List-page': {\r\n overflowX: 'hidden',\r\n },\r\n },\r\n\r\n '& .tiles-grid-list-cell': {\r\n float: 'left', // make the cells shown as grid style\r\n },\r\n\r\n // cell styles\r\n '& .tiles-grid-cell': {\r\n position: 'relative',\r\n boxSizing: 'border-box',\r\n width: '100%',\r\n height: '100%',\r\n },\r\n },\r\n});\r\n","/* eslint-disable max-len */\r\nimport _ from 'underscore';\r\nimport React, { useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { TilesGrid } from './tiles-grid';\r\n\r\nfunction findItem(items, itemToFind, itemKey) {\r\n return _.find(items, item => item[itemKey] === itemToFind[itemKey]);\r\n}\r\n\r\nfunction addItem(items, itemToAdd, itemKey) {\r\n if (!findItem(items, itemToAdd, itemKey)) {\r\n return [[...items, itemToAdd], true];\r\n }\r\n return [items, false];\r\n}\r\n\r\nfunction removeItem(items, itemToRemove, itemKey) {\r\n if (findItem(items, itemToRemove, itemKey)) {\r\n return [_.filter(items, item => item[itemKey] !== itemToRemove[itemKey]), true];\r\n }\r\n return [items, false];\r\n}\r\n\r\nexport const MultiSelectionGrid = ({\r\n itemKey,\r\n onSelectionChange,\r\n onRenderCell,\r\n items,\r\n selectedItems: propSelectedItems,\r\n ...rest\r\n}) => {\r\n const selectedItems = useMemo(() => propSelectedItems || [], [propSelectedItems]);\r\n\r\n // force to re-render when selection changed\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n const allItems = useMemo(() => ([...items || []]), [items, selectedItems]);\r\n\r\n const selectItem = useCallback((item, selected) => {\r\n const action = selected ? addItem : removeItem;\r\n const [newSelectedItems, updated] = action(selectedItems, item, itemKey);\r\n if (updated) {\r\n if (onSelectionChange) {\r\n onSelectionChange({ item, selected, selectedItems: newSelectedItems });\r\n }\r\n }\r\n }, [itemKey, onSelectionChange, selectedItems]);\r\n\r\n const onRenderCellImpl = useCallback(({ item, index }) => {\r\n const selected = !!findItem(selectedItems, item, itemKey);\r\n const fnSelectItem = _.partial(selectItem, item);\r\n return onRenderCell({\r\n item, index, selected, selectItem: fnSelectItem,\r\n });\r\n }, [itemKey, onRenderCell, selectItem, selectedItems]);\r\n\r\n return ;\r\n};\r\n\r\nMultiSelectionGrid.propTypes = {\r\n itemKey: PropTypes.string,\r\n items: PropTypes.arrayOf(PropTypes.shape({})),\r\n selectedItems: PropTypes.arrayOf(PropTypes.shape({})),\r\n onSelectionChange: PropTypes.func,\r\n onRenderCell: PropTypes.func.isRequired,\r\n};\r\n\r\nMultiSelectionGrid.defaultProps = {\r\n itemKey: 'id',\r\n items: [],\r\n selectedItems: [],\r\n onSelectionChange: undefined,\r\n};\r\n","export const getSectionTilesGridStyle = () => ({\r\n sectionTilesGridContainer: {\r\n '& .section-title': {\r\n fontSize: 12,\r\n fontWeight: 400,\r\n lineHeight: '16px',\r\n color: '#424242',\r\n marginBottom: 8,\r\n marginTop: 8,\r\n '&:first-child': {\r\n marginTop: 0,\r\n },\r\n },\r\n '& .section-loading': {\r\n margin: 'auto',\r\n },\r\n },\r\n});\r\n","import _ from 'underscore';\r\nimport React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\n\r\nimport { AdsStudioSpinner } from '../ads-studio-spinner';\r\nimport { MultiSelectionGrid } from './multi-selection-grid';\r\nimport { getSectionTilesGridStyle } from './styles/section-tiles-grid-style';\r\nimport { TilesGrid } from './tiles-grid';\r\nimport { TilesGridLoadingCell } from './grid-cells';\r\nimport { withAdsStudioStyles } from '../../theme/with-ads-studio-styles';\r\n\r\nconst SectionTilesGridInternal = ({\r\n sectionData, onRenderCell, loadNextPage, multiSelectionEnabled, onSelectionChange, onRenderLoadingCell, classes, ...otherProps\r\n}) => {\r\n const wrappedSectionData = useMemo(() => sectionData.map(section => ({\r\n onRenderCell: (params) => {\r\n const { sectionName } = section || {};\r\n return onRenderCell({ ...params, sectionName });\r\n },\r\n // to support selectoin on grid\r\n onSelectionChange: onSelectionChange ?\r\n (params) => {\r\n const { sectionName } = section || {};\r\n onSelectionChange({ ...params, sectionName });\r\n } : undefined,\r\n onRenderLoadingCell: () => {\r\n const { items, totalItemCount } = section || {};\r\n if (onRenderLoadingCell) {\r\n return onRenderLoadingCell({ items, totalItemCount });\r\n }\r\n if (items.length > 0 && items.length < totalItemCount) {\r\n return
;\r\n }\r\n return null;\r\n },\r\n ...section,\r\n })), [loadNextPage, onRenderCell, onRenderLoadingCell, onSelectionChange, sectionData]);\r\n\r\n // don't show section title if only one section has data\r\n const countOfSectionsWithData =\r\n _.filter(sectionData, sec => sec.totalItemCount > 0).length;\r\n\r\n const GridComponent = multiSelectionEnabled ? MultiSelectionGrid : TilesGrid;\r\n\r\n return (\r\n
\r\n {wrappedSectionData.map(({\r\n sectionName,\r\n sectionTitle,\r\n sectionClassName,\r\n items,\r\n config,\r\n totalItemCount,\r\n ...rest\r\n }) => (\r\n (items && items.length >= 0) ?\r\n \r\n {countOfSectionsWithData > 1 && items.length > 0 ?
{sectionTitle}
: null}\r\n {\r\n items.length > 0 &&\r\n \r\n }\r\n {\r\n rest.onRenderLoadingCell()\r\n }\r\n
\r\n : null\r\n ))}\r\n \r\n );\r\n};\r\n\r\nSectionTilesGridInternal.propTypes = {\r\n sectionData: PropTypes.arrayOf(PropTypes.shape({\r\n sectionName: PropTypes.string,\r\n sectionTitle: PropTypes.string,\r\n sectionClassName: PropTypes.string,\r\n items: PropTypes.arrayOf(PropTypes.shape({})),\r\n selectedItems: PropTypes.arrayOf(PropTypes.shape({})), // to support multiple selection\r\n totalItemCount: PropTypes.number, // total item count, including not loaded items\r\n config: PropTypes.shape({\r\n aspectRatio: PropTypes.number,\r\n maxColumnWidth: PropTypes.number,\r\n minColumnWidth: PropTypes.number,\r\n rowHeight: PropTypes.number,\r\n preferredCellsPerPage: PropTypes.number,\r\n }),\r\n })).isRequired,\r\n onRenderCell: PropTypes.func.isRequired,\r\n loadNextPage: PropTypes.func,\r\n\r\n multiSelectionEnabled: PropTypes.bool,\r\n onSelectionChange: PropTypes.func,\r\n onRenderLoadingCell: PropTypes.func,\r\n\r\n classes: PropTypes.shape({\r\n sectionTilesGridContainer: PropTypes.string,\r\n gridConainerClass: PropTypes.string,\r\n }).isRequired,\r\n};\r\n\r\nSectionTilesGridInternal.defaultProps = {\r\n multiSelectionEnabled: false,\r\n onSelectionChange: undefined,\r\n loadNextPage: _.noop,\r\n onRenderLoadingCell: undefined,\r\n};\r\n\r\nexport const SectionTilesGrid = withAdsStudioStyles(SectionTilesGridInternal, getSectionTilesGridStyle);\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useStyle = makeStyles({\r\n overflow: {\r\n display: 'block',\r\n ...shorthands.overflow('hidden'),\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n },\r\n});\r\n","/* eslint-disable object-curly-newline */\r\nimport _ from 'underscore';\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { Tooltip, mergeClasses } from '@fluentui/react-components';\r\nimport { useStyle } from './styles';\r\n\r\nexport const splitString = (text, substr) => {\r\n //\r\n if (!text || !substr || _.isEmpty(substr)) {\r\n return [{ matched: false, text, idx: 0 }];\r\n }\r\n\r\n // case-insensitive\r\n const lowerText = text.toLowerCase();\r\n const lowerSubstr = substr.toLowerCase();\r\n\r\n let startIndex = 0;\r\n const fragments = [];\r\n\r\n while (startIndex < text.length) {\r\n const index = lowerText.indexOf(lowerSubstr, startIndex);\r\n if (index === -1) {\r\n fragments.push({ matched: false, text: text.substring(startIndex) });\r\n break;\r\n } else if (index > startIndex) {\r\n fragments.push({ matched: false, text: text.substring(startIndex, index) });\r\n fragments.push({ matched: true, text: text.substring(index, index + substr.length) });\r\n startIndex = index + substr.length;\r\n } else {\r\n fragments.push({ matched: true, text: text.substring(index, index + substr.length) });\r\n startIndex = index + substr.length;\r\n }\r\n }\r\n\r\n // add an idx field for each fragment\r\n const fragmentsWithIndex = fragments.map((f, idx) => ({ ...f, idx }));\r\n return fragmentsWithIndex;\r\n};\r\n\r\nexport const TextWithHighlightImp = ({\r\n text: txt, highlightedText, highlightedClassname, enableTooltip,\r\n}) => {\r\n const textFragments = splitString(txt, highlightedText);\r\n\r\n const content = (\r\n \r\n {\r\n textFragments.map(({ matched, text, idx }) =>\r\n {text})\r\n }\r\n \r\n );\r\n\r\n const classes = useStyle();\r\n\r\n return enableTooltip ? (\r\n {txt}}\r\n relationship=\"inaccessible\"\r\n withArrow\r\n positioning=\"above-start\"\r\n >\r\n
\r\n {content}\r\n
\r\n \r\n ) : content;\r\n};\r\n\r\nTextWithHighlightImp.propTypes = {\r\n text: PropTypes.string,\r\n highlightedText: PropTypes.string,\r\n highlightedClassname: PropTypes.string,\r\n enableTooltip: PropTypes.bool,\r\n};\r\n\r\nTextWithHighlightImp.defaultProps = {\r\n text: '',\r\n highlightedText: undefined,\r\n highlightedClassname: 'highlighted-text',\r\n enableTooltip: false,\r\n};\r\n\r\nexport const TextWithHighlight = TextWithHighlightImp;\r\n","import { shorthands, tokens } from '@fluentui/react-components';\r\n\r\nexport const positionFill = {\r\n position: 'absolute',\r\n left: 0,\r\n top: 0,\r\n right: 0,\r\n bottom: 0,\r\n};\r\n\r\nexport const getSharedAssetContainerStyle = () => ({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexWrap: 'nowrap',\r\n boxSizing: 'border-box',\r\n\r\n // name and ID\r\n '& .cell-description': {\r\n display: 'flex',\r\n flexShrink: 0,\r\n flexGrow: 0,\r\n justifyContent: 'space-between',\r\n fontWeight: 600,\r\n fontSize: '12px',\r\n ...shorthands.margin('12px', '4px'),\r\n\r\n '& .cell-description-name': {\r\n flexShrink: 1,\r\n flexGrow: 1,\r\n ...shorthands.overflow('hidden'),\r\n marginRight: '12px',\r\n },\r\n\r\n '& .cell-description-id': {\r\n flexShrink: 0,\r\n flexGrow: 0,\r\n },\r\n\r\n '& .highlighted-text': {\r\n backgroundColor: tokens.colorPaletteYellowBackground3,\r\n },\r\n },\r\n});\r\n\r\nexport const getSharedMultiSelectingCellStyles = () => ({\r\n // only show checkbox on overlay if it is NOT in multi-selecting mode\r\n selectableCardContainerAutoHideCheckbox: {\r\n '& .cell-image-frame': {\r\n ...shorthands.overflow('hidden'),\r\n ...shorthands.borderRadius('6px'),\r\n },\r\n\r\n '& .selected-checkbox': {\r\n visibility: 'hidden',\r\n },\r\n\r\n '&:hover': {\r\n '& .selected-checkbox': {\r\n visibility: 'visible',\r\n // '& .ms-Checkbox-checkbox': {\r\n // ...shorthands.border('2px solid white !important'),\r\n // },\r\n '& .ms-Checkbox-checkmark': {\r\n color: tokens.colorNeutralForegroundInverted,\r\n },\r\n },\r\n },\r\n\r\n '& .visible-checkbox': {\r\n visibility: 'visible',\r\n // '& .ms-Checkbox-checkbox': {\r\n // border: '2px solid white !important',\r\n // },\r\n '& .ms-Checkbox-checkmark': {\r\n color: tokens.colorNeutralForegroundInverted,\r\n },\r\n },\r\n },\r\n\r\n selectableCardContainer: {\r\n '& .cell-image-frame': {\r\n ...shorthands.overflow('hidden'),\r\n ...shorthands.borderRadius('6px'),\r\n },\r\n\r\n '& .selected-checkbox': {\r\n visibility: 'visible',\r\n // '& .ms-Checkbox-checkbox': {\r\n // border: '2px solid white !important',\r\n // },\r\n '& .ms-Checkbox-checkmark': {\r\n color: tokens.colorNeutralForegroundInverted,\r\n },\r\n },\r\n },\r\n});\r\n","import { makeResetStyles, shorthands, tokens } from '@fluentui/react-components';\r\nimport { positionFill } from './../shared-cell-style';\r\n\r\n/* eslint-disable no-unused-vars */\r\nexport const iconStyles = {\r\n root: {\r\n position: 'relative',\r\n top: '3px',\r\n marginLeft: '12px',\r\n marginRight: '5px',\r\n },\r\n};\r\n\r\nexport const videoSvgIconStyles = {\r\n ...iconStyles,\r\n root: {\r\n ...iconStyles.root,\r\n top: '5px',\r\n width: '15px',\r\n opacity: 0.8,\r\n },\r\n};\r\n\r\nexport const useFolderGridCellStyle = makeResetStyles({\r\n display: 'flex',\r\n flexWrap: 'nowrap',\r\n boxSizing: 'border-box',\r\n height: '86px',\r\n\r\n '& .folder-grid-cell-content': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexGrow: 1,\r\n flexShrink: 1,\r\n\r\n justifyContent: 'flex-start',\r\n alignItems: 'center',\r\n backgroundColor: '#fff',\r\n ...shorthands.padding('16px'),\r\n cursor: 'pointer',\r\n\r\n ...shorthands.borderRadius('6px'),\r\n ...positionFill,\r\n\r\n '& .folder-thumbnail': {\r\n display: 'flex',\r\n flexGrow: 0,\r\n flexShrink: 0,\r\n marginRight: '16px',\r\n },\r\n\r\n '& .folder-info': {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexGrow: 1,\r\n flexShrink: 1,\r\n justifyContent: 'space-between',\r\n height: '100%',\r\n paddingTop: '6px',\r\n\r\n ...shorthands.overflow('hidden'),\r\n whiteSpace: 'nowrap',\r\n\r\n '& .folder-name': {\r\n fontStyle: 'normal',\r\n fontWeight: 600,\r\n fontSize: '12px',\r\n lineHeight: '16px',\r\n\r\n '& .highlighted-text': {\r\n backgroundColor: tokens.colorPaletteYellowBackground3,\r\n },\r\n },\r\n\r\n '& .folder-newlabel-counting': {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n ...shorthands.padding('1px'),\r\n\r\n '& .counting-info': {\r\n display: 'block',\r\n ...shorthands.overflow('hidden'),\r\n whiteSpace: 'nowrap',\r\n textOverflow: 'ellipsis',\r\n\r\n fontStyle: 'normal',\r\n fontWeight: 400,\r\n fontSize: '12px',\r\n lineHeight: '15px',\r\n textAlign: 'right',\r\n\r\n position: 'relative',\r\n top: '2px',\r\n\r\n '& .count-icon': {\r\n marginLeft: '12px',\r\n marginRight: '4px',\r\n fontSize: '14px',\r\n '&:first-child': {\r\n marginLeft: '0px',\r\n },\r\n },\r\n\r\n '& span': {\r\n verticalAlign: 'top',\r\n },\r\n },\r\n\r\n '& .empty-desc': {\r\n fontSize: '12px',\r\n },\r\n },\r\n },\r\n },\r\n\r\n '& .grid-cell-with-accessory': {\r\n paddingRight: '54px',\r\n },\r\n\r\n '& .folder-cell-accessory': {\r\n position: 'absolute',\r\n top: 0,\r\n bottom: 0,\r\n right: 0,\r\n width: '42px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n\r\n '& .folder-grid-loading-cell-content': {\r\n height: '100%',\r\n },\r\n\r\n '& .selectable-cell-card': {\r\n backgroundColor: 'white',\r\n },\r\n});\r\n","/* eslint-disable object-curly-newline */\r\nimport _ from 'underscore';\r\nimport React, { useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\n\r\nimport { Checkbox, Tooltip } from '@fluentui/react-components';\r\nimport { FolderRegular, ImageRegular, VideoRegular } from '@fluentui/react-icons';\r\n\r\nimport {\r\n TilesGridCellCard,\r\n TilesGridCellDragDecorator,\r\n TilesGridCellDropDecorator,\r\n} from '../../ads-studio-tile-grid';\r\nimport { FolderIcon } from '../../folder-icon-component';\r\nimport { TextWithHighlight } from '../../text-with-highlight';\r\nimport { FolderAssetType } from '../../../model';\r\n\r\nimport {\r\n useFolderGridCellStyle\r\n} from './style';\r\n\r\nfunction getCountDescription({\r\n itemInfo,\r\n i18n,\r\n}) {\r\n let subFoldersCountDesc = '';\r\n let imagesCountDesc = '';\r\n let videosCountDesc = '';\r\n if (itemInfo.subfoldersCount === 1) {\r\n subFoldersCountDesc = i18n.getString(_TL_('{{count}} folder'), { count: itemInfo.subfoldersCount });\r\n } else if (!_.isUndefined(itemInfo.subfoldersCount)) {\r\n subFoldersCountDesc = i18n.getString(_TL_('{{count}} folders'), { count: itemInfo.subfoldersCount });\r\n }\r\n if (itemInfo.imageAssetsCount === 1) {\r\n imagesCountDesc = i18n.getString(_TL_('{{count}} image'), { count: itemInfo.imageAssetsCount });\r\n } else if (!_.isUndefined(itemInfo.imageAssetsCount)) {\r\n imagesCountDesc = i18n.getString(_TL_('{{count}} images'), { count: itemInfo.imageAssetsCount });\r\n }\r\n if (itemInfo.videoAssetsCount === 1) {\r\n videosCountDesc = i18n.getString(_TL_('{{count}} video'), { count: itemInfo.videoAssetsCount });\r\n } else if (!_.isUndefined(itemInfo.videoAssetsCount)) {\r\n videosCountDesc = i18n.getString(_TL_('{{count}} videos'), { count: itemInfo.videoAssetsCount });\r\n }\r\n const res = [subFoldersCountDesc, imagesCountDesc, videosCountDesc].filter(item => item !== '').join(', ');\r\n return res;\r\n}\r\n\r\nconst convertItemInfo = ({ allowedAssetType, itemInfos }) => {\r\n const result = {\r\n subfoldersCount: itemInfos.SubFoldersCount,\r\n };\r\n if (allowedAssetType === FolderAssetType.Image) {\r\n result.imageAssetsCount = itemInfos.ImageAssetsCount;\r\n } else if (allowedAssetType === FolderAssetType.Video) {\r\n result.videoAssetsCount = itemInfos.VideoAssetsCount;\r\n } else if (!allowedAssetType) {\r\n result.imageAssetsCount = itemInfos.ImageAssetsCount;\r\n result.videoAssetsCount = itemInfos.VideoAssetsCount;\r\n }\r\n\r\n return result;\r\n};\r\n\r\n// eslint-disable-next-line react/prop-types\r\nconst FolderCountInfo = ({ itemInfo, className, i18n, isEmptyFolder }) => (\r\n \r\n { !isEmptyFolder ? (\r\n
\r\n {!_.isUndefined(itemInfo.subfoldersCount) &&\r\n \r\n \r\n {itemInfo.subfoldersCount}\r\n \r\n }\r\n {!_.isUndefined(itemInfo.imageAssetsCount) &&\r\n \r\n \r\n {itemInfo.imageAssetsCount}\r\n \r\n }\r\n {!_.isUndefined(itemInfo.videoAssetsCount) &&\r\n \r\n \r\n {itemInfo.videoAssetsCount}\r\n \r\n }\r\n
\r\n ) : (\r\n {i18n.getString(_TL_('0 items'))}\r\n )}\r\n \r\n);\r\n\r\nconst getFolderThumbnail = ({ assets }) => {\r\n const firstAsset = _.first(assets) || {};\r\n\r\n // MT will ensure valid assets returned first, so UI only need to check first asset.\r\n if (firstAsset.folderAssetType === FolderAssetType.Video) {\r\n return firstAsset.status === 'Active' ? firstAsset.thumbnailUrl : '';\r\n }\r\n\r\n return firstAsset.url;\r\n};\r\n\r\nconst FoldersGridCell = ({\r\n item,\r\n highlightedText,\r\n onFolderClick,\r\n i18n,\r\n selectable,\r\n selected,\r\n onSelect,\r\n allowedAssetType,\r\n\r\n renderAccessory,\r\n\r\n draggable,\r\n onDrag,\r\n selectedItemCount,\r\n droppable,\r\n onDrop,\r\n}) => {\r\n const folderGridCellContainer = useFolderGridCellStyle();\r\n const {\r\n folderName, itemCount, assets,\r\n } = item || {};\r\n\r\n const itemInfo = useMemo(() => convertItemInfo({ allowedAssetType, itemInfos: itemCount }), [allowedAssetType, itemCount]);\r\n const isEmptyFolder = !_.isUndefined(itemCount.TotalCount) && itemCount.TotalCount === 0;\r\n\r\n const thumbnailUrl = useMemo(() => getFolderThumbnail({ assets }), [assets]);\r\n\r\n const onClick = useCallback(() => {\r\n onFolderClick(item);\r\n }, [item, onFolderClick]);\r\n\r\n const onCheckboxChange = useCallback((event, checked) => {\r\n if (onSelect) {\r\n onSelect(checked);\r\n }\r\n }, [onSelect]);\r\n\r\n const hasAccessory = renderAccessory || selectable;\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events */}\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {hasAccessory ?\r\n
\r\n {selectable &&\r\n \r\n }\r\n {(renderAccessory && !selectable) && renderAccessory()}\r\n
\r\n : null}\r\n \r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nFoldersGridCell.propTypes = {\r\n item: PropTypes.shape({}).isRequired,\r\n highlightedText: PropTypes.string,\r\n onFolderClick: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n\r\n // show checkbox\r\n selectable: PropTypes.bool,\r\n selected: PropTypes.bool,\r\n onSelect: PropTypes.func,\r\n\r\n allowedAssetType: PropTypes.string,\r\n\r\n renderAccessory: PropTypes.func,\r\n};\r\n\r\nFoldersGridCell.defaultProps = {\r\n highlightedText: undefined,\r\n selectable: false,\r\n selected: false,\r\n onSelect: undefined,\r\n allowedAssetType: null,\r\n\r\n renderAccessory: undefined,\r\n};\r\n\r\nexport const AdsStudioFoldersGridCell = FoldersGridCell;\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\nimport {\r\n getSharedAssetContainerStyle,\r\n getSharedMultiSelectingCellStyles,\r\n} from './../shared-cell-style';\r\n\r\nexport const useImageAssetsGridCellStyle = makeStyles({\r\n imageAssetsGridCellContainer: {\r\n ...getSharedAssetContainerStyle(),\r\n\r\n // the 'Updating' label animation\r\n '& .updating-label-icon-and-text': {\r\n display: 'flex',\r\n backgroundColor: tokens.colorNeutralBackgroundStatic,\r\n\r\n '& .label-icon': {\r\n animationName: [{\r\n from: { transform: 'rotate(0deg)' },\r\n to: { transform: 'rotate(360deg)' },\r\n }],\r\n animationDuration: '1.5s',\r\n animationIterationCount: 'infinite',\r\n animationTimingFunction: 'linear',\r\n },\r\n },\r\n },\r\n\r\n imageCellLabelContainer: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n position: 'absolute',\r\n left: '12px',\r\n bottom: '8px',\r\n zIndex: 1,\r\n\r\n '& .label-icon-and-text.created-with-ai-label': {\r\n display: 'flex',\r\n ...shorthands.padding(0),\r\n ...shorthands.margin(0),\r\n marginRight: '6px',\r\n height: '24px',\r\n backgroundColor: '#FFFFFFBB',\r\n\r\n '& .label-icon': {\r\n ...shorthands.margin(0),\r\n },\r\n },\r\n\r\n '& .label-icon-and-text.image-source-label': {\r\n ...shorthands.padding('2px', '4px'),\r\n backgroundColor: '#616161',\r\n },\r\n },\r\n\r\n // only show checkbox on overlay if it is NOT in multi-selecting mode\r\n ...getSharedMultiSelectingCellStyles(),\r\n\r\n});\r\n","/* eslint-disable react/jsx-closing-tag-location */\r\nimport _ from 'underscore';\r\nimport React, { Fragment, useCallback, useMemo, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { ArrowSync16Filled } from '@fluentui/react-icons';\r\n\r\nimport {\r\n TilesGridCellImage as CellImage,\r\n TilesGridCellDecorativeLabel as CellLabel,\r\n TilesGridCellCardWithOverlay,\r\n TilesGridCellSelectionDecorator,\r\n TilesGridCellDeletionButtonDecorator,\r\n TilesGridCellDragDecorator,\r\n} from '../../ads-studio-tile-grid';\r\nimport { TextWithHighlight } from '../../text-with-highlight';\r\nimport { CSMLAssetSource, ManualAddedImageSource } from '../../../model';\r\nimport { InfoSparkleSVGIcon } from '../../../asset-images';\r\nimport { useImageAssetsGridCellStyle } from './style';\r\n\r\nexport const AdsStudioImageAssetsGridCell = ({\r\n item,\r\n highlightedText,\r\n isOverlayEnabled,\r\n isCellFocused,\r\n renderCellContent,\r\n renderOverlayContent,\r\n i18n,\r\n selectable,\r\n selected,\r\n isMultiSelecting, // is in multi-selection mode, need to show checkbox on cells\r\n onClick,\r\n deletable,\r\n onDelete,\r\n draggable,\r\n onDrag,\r\n selectedItemCount,\r\n}) => {\r\n const [isImageLoaded, setImageLoaded] = useState(false);\r\n const classes = useImageAssetsGridCellStyle();\r\n\r\n const {\r\n name,\r\n url,\r\n id,\r\n updating,\r\n sourceType,\r\n manualAddedImageSourceType,\r\n } = item || {};\r\n\r\n const cellContent = useMemo(() => {\r\n const defaultContent = (\r\n \r\n \r\n
\r\n {manualAddedImageSourceType === ManualAddedImageSource.Library && (\r\n \r\n )}\r\n {manualAddedImageSourceType === ManualAddedImageSource.ShutterStock && (\r\n \r\n )}\r\n {(sourceType === CSMLAssetSource.AIGenerated || sourceType === CSMLAssetSource.BackgroundChangeGenerated || sourceType === CSMLAssetSource.AIGeneratedByRecraft) && (\r\n \r\n )}\r\n {updating && (\r\n \r\n )}\r\n
\r\n
\r\n );\r\n if (renderCellContent) {\r\n return renderCellContent(defaultContent);\r\n }\r\n return defaultContent;\r\n }, [classes.imageCellLabelContainer, i18n, id, manualAddedImageSourceType, name, renderCellContent, sourceType, updating, url]);\r\n\r\n const funcRenderOverlayContent = useCallback(() => {\r\n if (renderOverlayContent) {\r\n return renderOverlayContent();\r\n }\r\n return null;\r\n }, [renderOverlayContent]);\r\n\r\n const onCellClick = useCallback(() => {\r\n if (selectable) {\r\n onClick({ item, selected });\r\n }\r\n }, [item, onClick, selectable, selected]);\r\n\r\n const withSelectionDecorator = useCallback(decoratedContent => (\r\n selectable ? (\r\n \r\n {decoratedContent}\r\n \r\n ) : decoratedContent\r\n ), [i18n, isCellFocused, item, name, onClick, selectable, selected]);\r\n\r\n const withDeleteButtonDecorator = useCallback(decoratedContent => (\r\n deletable ? (\r\n \r\n {decoratedContent}\r\n \r\n ) : decoratedContent\r\n ), [deletable, item, onDelete]);\r\n\r\n return (\r\n
\r\n \r\n \r\n {_.compose(withDeleteButtonDecorator, withSelectionDecorator)(cellContent)}\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n {id && (\r\n
\r\n {`${i18n.getString(_TL_('ID'))} `}\r\n \r\n
\r\n )}\r\n
\r\n
\r\n );\r\n};\r\n\r\nAdsStudioImageAssetsGridCell.propTypes = {\r\n item: PropTypes.shape({\r\n id: PropTypes.string,\r\n name: PropTypes.string,\r\n url: PropTypes.string,\r\n createdTime: PropTypes.instanceOf(Date),\r\n // cropping task progress\r\n updating: PropTypes.bool,\r\n }).isRequired,\r\n highlightedText: PropTypes.string,\r\n isOverlayEnabled: PropTypes.bool,\r\n isCellFocused: PropTypes.bool,\r\n renderCellContent: PropTypes.func,\r\n renderOverlayContent: PropTypes.func,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n selectable: PropTypes.bool,\r\n selected: PropTypes.bool,\r\n onClick: () => null,\r\n isMultiSelecting: PropTypes.bool,\r\n deletable: PropTypes.bool,\r\n onDelete: PropTypes.func,\r\n draggable: PropTypes.bool,\r\n onDrag: PropTypes.func,\r\n selectedItemCount: PropTypes.number,\r\n};\r\n\r\nAdsStudioImageAssetsGridCell.defaultProps = {\r\n highlightedText: undefined,\r\n isOverlayEnabled: false,\r\n isCellFocused: false,\r\n renderCellContent: null,\r\n renderOverlayContent: null,\r\n selectable: false,\r\n selected: false,\r\n onClick: undefined,\r\n isMultiSelecting: false,\r\n deletable: false,\r\n onDelete: undefined,\r\n draggable: false,\r\n onDrag: _.noop,\r\n selectedItemCount: 1,\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { FolderAssetType } from '../../../model';\r\nimport {\r\n AdsStudioImageAssetsGridCell as DefaultImageGridCell,\r\n AdsStudioVideoAssetsGridCell as DefaultVideoGridCell,\r\n} from '..';\r\n\r\nexport const GridCellFactory = (props) => {\r\n const { item } = props;\r\n const { folderAssetType } = item || {};\r\n\r\n switch (folderAssetType) {\r\n case FolderAssetType.Image:\r\n return ;\r\n case FolderAssetType.Video:\r\n return ;\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\nGridCellFactory.propTypes = {\r\n item: PropTypes.shape({\r\n folderAssetType: PropTypes.string.isRequired,\r\n }),\r\n};\r\n\r\nGridCellFactory.defaultProps = {\r\n item: null,\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useStyles = makeStyles({\r\n container: {\r\n '& .cell-overlay-actions': {\r\n zIndex: 1,\r\n alignItems: 'end',\r\n justifyContent: 'end',\r\n },\r\n },\r\n actionButton: {\r\n ...shorthands.margin('6px'),\r\n marginLeft: '0px',\r\n\r\n '&:focus': {\r\n ...shorthands.border('1px', 'solid', '#FFFFFF'),\r\n },\r\n\r\n '&:hover': {\r\n backgroundColor: '#C4C4C4',\r\n },\r\n },\r\n});\r\n","import { CivilDate } from 'tc39-proposal-temporal';\r\nimport {\r\n getCivilDateToday,\r\n compareCivilDate,\r\n} from '@bingads-webui-universal/temporal-utitlities';\r\n\r\nexport const civilDateEqual = (d1, d2) => {\r\n if (!d1 && !d2) {\r\n return true;\r\n }\r\n if (!d1 || !d2) {\r\n return false;\r\n }\r\n return compareCivilDate(d1, d2) === 0;\r\n};\r\n\r\nexport const civilDateRangeEqual = (r1, r2) => {\r\n if ((!r1 && !r2) || (r1 === r2)) {\r\n return true;\r\n }\r\n if (!r1 || !r2) {\r\n return false;\r\n }\r\n return civilDateEqual(r1.start, r2.start) && civilDateEqual(r1.end, r2.end);\r\n};\r\n\r\nexport const civilDateToDebugString = (cd) => {\r\n if (!cd) return '';\r\n const { year, month, day } = cd || {};\r\n return `${year || ''}-${month || ''}-${day || ''}`;\r\n};\r\n\r\nexport const civilDateRangeToDebugString = (dr) => {\r\n if (!dr) {\r\n return '';\r\n }\r\n return `start:${civilDateToDebugString(dr.start)} end:${civilDateToDebugString(dr.end)}`;\r\n};\r\n\r\nexport const getDefaultDateRange = () => {\r\n const yesterday = getCivilDateToday().plus({ days: -1 });\r\n const defaultRange = { start: yesterday, end: yesterday };\r\n return defaultRange;\r\n};\r\n\r\nexport const getDefaultMetricDateRange = (i18n, dateFormat, timeZone, lcid) => {\r\n const todayObj = i18n.getToday({ timeZone });\r\n const today = new CivilDate(todayObj.year, todayObj.month, todayObj.day);\r\n const yesterday = today.plus({ days: -1 });\r\n const last30day = today.plus({ days: -30 });\r\n return {\r\n RangeStartDate: i18n.formatCivilDate(last30day, { raw: dateFormat, timeZone }),\r\n RangeEndDate: i18n.formatCivilDate(yesterday, { raw: dateFormat, timeZone }),\r\n Rangelcid: lcid,\r\n RangeId: 5, // last 30 days, RANGES.Last30Days\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport {\r\n getFoldersLimitPerAccount,\r\n getImageAssetLimitPerAccount,\r\n getVideoAssetLimitPerAccount\r\n} from '../model';\r\n\r\nconst containsErrorCodeInList = (errorList, searchErrorCode) => {\r\n const found = _.find(errorList, (err) => {\r\n const errorCodeInn = _.get(err, ['body', 'value', 0, 'Code'], '') || err;\r\n return errorCodeInn === searchErrorCode;\r\n });\r\n if (found) {\r\n return true;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nexport const processFolderSizeLimitError = ({ errorList, aid, logger }) => {\r\n if (errorList.length > 0 && containsErrorCodeInList(errorList, 'FolderLimitExceededPerAccount')) {\r\n const limit = getFoldersLimitPerAccount(aid, logger);\r\n\r\n return { limit };\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport const processImageSizeLimitError = ({ errorList, aid, logger }) => {\r\n if (errorList.length > 0 && containsErrorCodeInList(errorList, 'ImagesLimitExceededPerAccount')) {\r\n const limit = getImageAssetLimitPerAccount(aid, logger);\r\n\r\n return { limit };\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport const processVideoSizeLimitError = ({ errorList, aid, logger }) => {\r\n if (errorList.length > 0 && containsErrorCodeInList(errorList, 'VideoLimitExceededPerAccount')) {\r\n const limit = getVideoAssetLimitPerAccount(aid, logger);\r\n\r\n return { limit };\r\n }\r\n\r\n return null;\r\n};\r\n","import { Promise } from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { parseSync } from '@bingads-webui/safe-json';\r\n\r\nexport const fetchImgPromise = imgUrl => new Promise((resolve, reject) => {\r\n const image = new Image();\r\n image.onload = () => {\r\n resolve(image);\r\n };\r\n image.onerror = () => {\r\n reject(new Error('Failed to load image'));\r\n };\r\n image.crossOrigin = '';\r\n image.src = imgUrl;\r\n});\r\n\r\nexport const createOffScreenContext = (width, height) => {\r\n const canvas = document.createElement('canvas');\r\n canvas.width = width;\r\n canvas.height = height;\r\n const context = canvas.getContext('2d');\r\n return {\r\n canvas,\r\n context,\r\n };\r\n};\r\n\r\nexport const getImagePixels = (image, imageWidth, imageHeight) => {\r\n const {\r\n canvas,\r\n context,\r\n } = createOffScreenContext(imageWidth, imageHeight);\r\n\r\n context.drawImage(image, 0, 0);\r\n const imageData = context.getImageData(0, 0, canvas.width, canvas.height);\r\n const pixels = imageData.data;\r\n return pixels;\r\n};\r\n\r\nexport const parseMaskResultPromise = ({\r\n result,\r\n imageUrl,\r\n imageWidth,\r\n imageHeight,\r\n}) => new Promise((resolve, reject) => {\r\n const { rawMaskSetsBase64String } = result;\r\n const maskSetsBase64Json = parseSync(rawMaskSetsBase64String);\r\n if (_.isUndefined(maskSetsBase64Json)) {\r\n reject(new Error('Failed to parse result'));\r\n }\r\n const {\r\n shape = [],\r\n data: maskSetsBase64,\r\n } = maskSetsBase64Json;\r\n\r\n // Convert the decompressed data into a 3D array\r\n const reshapeTo3D = (array, x, y, z) => {\r\n const res = [];\r\n let index = 0;\r\n for (let i = 0; i < x; i += 1) {\r\n const temp2D = [];\r\n for (let j = 0; j < y; j += 1) {\r\n const temp1D = [];\r\n for (let k = 0; k < z; k += 1) {\r\n temp1D.push(array[index]);\r\n index += 1;\r\n }\r\n temp2D.push(temp1D);\r\n }\r\n res.push(temp2D);\r\n }\r\n return res;\r\n };\r\n\r\n async function decompressAndParse3DArray(base64String, x, y, z) {\r\n // Step 1: Decode the Base64 string to a binary Uint8Array\r\n const binaryString = atob(base64String);\r\n const byteArray = new Uint8Array(binaryString.length);\r\n for (let i = 0; i < binaryString.length; i += 1) {\r\n byteArray[i] = binaryString.charCodeAt(i);\r\n }\r\n\r\n // Step 2: Create a readable stream from the byteArray\r\n const inputStream = new Blob([byteArray]).stream();\r\n\r\n // Step 3: Decompress the stream using DecompressionStream (assuming 'gzip')\r\n const decompressionStream = new DecompressionStream('gzip');\r\n const decompressedStream = inputStream.pipeThrough(decompressionStream);\r\n\r\n // Step 4: Collect the decompressed data\r\n const decompressedResponse = new Response(decompressedStream);\r\n const decompressedBuffer = await decompressedResponse.arrayBuffer();\r\n\r\n // Step 5: Convert the decompressed data to a Uint8Array\r\n const decompressedArray = new Uint8Array(decompressedBuffer);\r\n\r\n // Step 6: Reshape the decompressed array into the specified 3D dimensions (x, y, z)\r\n const int3DArray = reshapeTo3D(decompressedArray, x, y, z);\r\n\r\n return int3DArray;\r\n }\r\n\r\n // Execute the function and log the result\r\n decompressAndParse3DArray(maskSetsBase64, shape[1], shape[0], shape[2])\r\n .then((maskSets3Darray) => {\r\n const maskSetsArray = maskSets3Darray.map(row => row.map(a => a[0])).flat();\r\n const alphaArray = maskSets3Darray.map(row => row.map(a => a[1])).flat();\r\n const selectedMasksArray = _.filter(_.uniq(maskSetsArray), pixelMask => pixelMask > 0);\r\n fetchImgPromise(imageUrl).then((image) => {\r\n const {\r\n canvas,\r\n context,\r\n } = createOffScreenContext(imageWidth, imageHeight);\r\n\r\n context.drawImage(image, 0, 0);\r\n const imageData = context.getImageData(0, 0, canvas.width, canvas.height);\r\n const pixels = imageData.data;\r\n return pixels;\r\n }).then((originalImagePixels) => {\r\n if (originalImagePixels && maskSetsArray) {\r\n // If not in mask, return empty and transparent pixel\r\n // If in mask, return the original pixel\r\n const {\r\n canvas,\r\n context,\r\n } = createOffScreenContext(imageWidth, imageHeight);\r\n const imageData = context.getImageData(0, 0, canvas.width, canvas.height);\r\n const pixels = imageData.data;\r\n for (let i = 0; i < pixels.length; i += 4) {\r\n if (maskSetsArray[i / 4] > 0) {\r\n pixels[i] = originalImagePixels[i];\r\n pixels[i + 1] = originalImagePixels[i + 1];\r\n pixels[i + 2] = originalImagePixels[i + 2];\r\n pixels[i + 3] = alphaArray[i / 4];\r\n }\r\n }\r\n // put the selected image from first canvas to second canvas\r\n const { context: secondContext, canvas: secondCanvas } = createOffScreenContext(imageWidth, imageHeight);\r\n secondContext.putImageData(imageData, 0, 0);\r\n resolve({\r\n rawMaskSetsBase64String,\r\n maskSetsArray,\r\n alphaArray,\r\n selectedMasksArray,\r\n imageUrlWithoutBackground: secondCanvas.toDataURL(),\r\n });\r\n } else {\r\n reject(new Error('Failed to parse result'));\r\n }\r\n });\r\n })\r\n .catch(() => {\r\n reject(new Error('Failed to parse result'));\r\n });\r\n});\r\n\r\nexport function hexToRgb(hex) {\r\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n return result ? {\r\n r: parseInt(result[1], 16),\r\n g: parseInt(result[2], 16),\r\n b: parseInt(result[3], 16),\r\n } : null;\r\n}\r\n\r\nexport function getMaskValueAtPointFunc(x, y, imageWidth, segmentationMasks) {\r\n if (x < 0 || y < 0) {\r\n return null;\r\n }\r\n // Should transform the point to the original point on the image size\r\n const width = imageWidth;\r\n\r\n // get index of the mask array\r\n const index = (parseInt(y, 10) * width) + parseInt(x, 10);\r\n // get mask value at the index\r\n return segmentationMasks[index];\r\n}\r\n\r\nexport function createColorBackground(image, imageWidth, imageHeight, color, segmentationMasks, selectedMasks, alphaArray) {\r\n // If not in mask, return empty and transparent pixel\r\n // If in mask, return the original pixel\r\n const { r, g, b } = hexToRgb(color);\r\n const {\r\n canvas,\r\n context,\r\n } = createOffScreenContext(imageWidth, imageHeight);\r\n\r\n context.drawImage(image, 0, 0);\r\n const imageData = context.getImageData(0, 0, canvas.width, canvas.height);\r\n const pixels = imageData.data;\r\n for (let i = 0; i < pixels.length; i += 4) {\r\n if (!selectedMasks.includes(segmentationMasks[i / 4])) {\r\n pixels[i] = r;\r\n pixels[i + 1] = g;\r\n pixels[i + 2] = b;\r\n pixels[i + 3] = 255;\r\n } else {\r\n const alpha = alphaArray[i / 4] / 255;\r\n const newR = ((1 - alpha) * r) + ((alpha) * pixels[i]);\r\n const newG = ((1 - alpha) * g) + ((alpha) * pixels[i + 1]);\r\n const newB = ((1 - alpha) * b) + ((alpha) * pixels[i + 2]);\r\n pixels[i] = newR;\r\n pixels[i + 1] = newG;\r\n pixels[i + 2] = newB;\r\n pixels[i + 3] = 255;\r\n }\r\n }\r\n // put the selected image from first canvas to second canvas\r\n const { context: secondContext, canvas: secondCanvas } = createOffScreenContext(imageWidth, imageHeight);\r\n secondContext.putImageData(imageData, 0, 0);\r\n return secondCanvas.toDataURL();\r\n}\r\n\r\nexport function createSelectedImageSrc(image, imageWidth, imageHeight, originalImagePixels, segmentationMasks, masks, isAdd, hasSelectedImageSrc) {\r\n // If not in mask, return empty and transparent pixel\r\n // If in mask, return the original pixel\r\n const {\r\n canvas,\r\n context,\r\n } = createOffScreenContext(imageWidth, imageHeight);\r\n\r\n if (hasSelectedImageSrc) {\r\n context.drawImage(image, 0, 0);\r\n }\r\n\r\n const imageData = context.getImageData(0, 0, canvas.width, canvas.height);\r\n const pixels = imageData.data;\r\n\r\n for (let i = 0; i < pixels.length; i += 4) {\r\n if (masks.includes(segmentationMasks[i / 4])) {\r\n if (isAdd) {\r\n pixels[i] = originalImagePixels[i];\r\n pixels[i + 1] = originalImagePixels[i + 1];\r\n pixels[i + 2] = originalImagePixels[i + 2];\r\n pixels[i + 3] = originalImagePixels[i + 3];\r\n } else {\r\n pixels[i] = 0;\r\n pixels[i + 1] = 0;\r\n pixels[i + 2] = 0;\r\n pixels[i + 3] = 0;\r\n }\r\n }\r\n }\r\n\r\n const { context: secondContext, canvas: secondCanvas } = createOffScreenContext(imageWidth, imageHeight);\r\n secondContext.putImageData(imageData, 0, 0);\r\n\r\n const dArr = [-1, -1, 0, -1, 1, -1, -1, 0, 1, 0, -1, 1, 0, 1, 1, 1]; // offset array\r\n const s = 6; // thickness scale\r\n\r\n context.clearRect(0, 0, canvas.width, canvas.height);\r\n // draw images at offsets from the array scaled by s\r\n for (let i = 0; i < dArr.length; i += 2) {\r\n context.drawImage(secondCanvas, dArr[i] * s, dArr[i + 1] * s);\r\n }\r\n\r\n // fill with color\r\n context.globalCompositeOperation = 'source-in';\r\n context.fillStyle = '#D1ACFF';\r\n context.fillRect(0, 0, canvas.width, canvas.height);\r\n\r\n return ({\r\n borderImageSrc: canvas.toDataURL(),\r\n selectedImageSrc: secondCanvas.toDataURL(),\r\n });\r\n}\r\n\r\nexport function createHighlightedImage(imageWidth, imageHeight, originalImagePixels, segmentationMasks, workingMasks, maskValue) {\r\n const {\r\n canvas,\r\n context,\r\n } = createOffScreenContext(imageWidth, imageHeight);\r\n\r\n const imageData = context.getImageData(0, 0, canvas.width, canvas.height);\r\n const pixels = imageData.data;\r\n\r\n if (originalImagePixels) {\r\n for (let i = 0; i < pixels.length; i += 4) {\r\n if (segmentationMasks[i / 4] === maskValue) {\r\n if (workingMasks.includes(maskValue)) {\r\n pixels[i] = (originalImagePixels[i] + 1672) / 9; // X + Y * 8) / 9\r\n pixels[i + 1] = (originalImagePixels[i + 1] + 1376) / 9;\r\n pixels[i + 2] = (originalImagePixels[i + 2] + 2040) / 9;\r\n pixels[i + 3] = originalImagePixels[i + 3];\r\n } else if (maskValue > 0) {\r\n pixels[i] = originalImagePixels[i];\r\n pixels[i + 1] = originalImagePixels[i + 1];\r\n pixels[i + 2] = originalImagePixels[i + 2];\r\n pixels[i + 3] = 128;\r\n }\r\n }\r\n }\r\n }\r\n\r\n context.putImageData(imageData, 0, 0);\r\n\r\n return canvas.toDataURL();\r\n}\r\n","export const PlacementQualities = {\r\n PERFECT: 7,\r\n EXCELLENT_AND_PERFECT: 6,\r\n PERFECT_AND_GOOD: 5,\r\n ONLY_PERFECT: 4,\r\n EXCELLENT: 3,\r\n ONLY_EXCELLENT: 2,\r\n GOOD: 1,\r\n NONE: 0,\r\n};\r\n\r\n// recently changed wording for each quality label\r\n// perfect -> excellent\r\n// excellent -> good\r\n// good -> fair\r\nexport const PlacementQualityToText = {\r\n [PlacementQualities.PERFECT]: _TL_('Excellent'),\r\n [PlacementQualities.EXCELLENT]: _TL_('Good'),\r\n [PlacementQualities.GOOD]: _TL_('Fair'),\r\n [PlacementQualities.NONE]: _TL_('Poor'),\r\n [PlacementQualities.PERFECT_AND_GOOD]: _TL_('Excellent'),\r\n [PlacementQualities.EXCELLENT_AND_PERFECT]: _TL_('Excellent'),\r\n [PlacementQualities.ONLY_PERFECT]: _TL_('Excellent'),\r\n [PlacementQualities.ONLY_EXCELLENT]: _TL_('Good'),\r\n};\r\n\r\nexport const formatFileSize = fileSize => Math.round(fileSize / 1000000);\r\n\r\nexport const getClosestAspectRatio = (width, height) => {\r\n const inputRatio = width / height;\r\n const ratios = {\r\n '16:9': (16 / 9),\r\n '9:16': (9 / 16),\r\n '4:3': (4 / 3),\r\n '1:1': (1 / 1),\r\n '9:21': (9 / 21),\r\n '21:9': (21 / 9),\r\n '3:4': (3 / 4),\r\n };\r\n let closestRatio = null;\r\n let closestDiff = Math.abs(inputRatio - closestRatio);\r\n\r\n /* eslint-disable no-restricted-syntax */\r\n for (const [label, ratio] of Object.entries(ratios)) {\r\n const diff = Math.abs(inputRatio - ratio);\r\n if (diff < closestDiff) {\r\n closestDiff = diff;\r\n closestRatio = label;\r\n }\r\n }\r\n /* eslint-enable no-restricted-syntax */\r\n\r\n return closestRatio;\r\n};\r\n\r\nexport const formatBrandkitForAPI = (obj) => {\r\n if (Array.isArray(obj)) {\r\n return obj.map(formatBrandkitForAPI);\r\n } else if (obj !== null && typeof obj === 'object') {\r\n const formattedObj = {};\r\n Object.keys(obj).forEach((key) => {\r\n if (key === 'Id') {\r\n formattedObj.Id = parseInt(obj[key], 10);\r\n } else if (key === 'SubType') {\r\n formattedObj.SubType = 'None';\r\n } else if (obj[key] === null) {\r\n formattedObj[key] = [];\r\n } else if (key !== 'Type') {\r\n formattedObj[key] = formatBrandkitForAPI(obj[key]);\r\n }\r\n });\r\n return formattedObj;\r\n }\r\n return obj;\r\n};\r\n\r\nexport const VideoSourceType = {\r\n AIGenerated: 'AIGenerated',\r\n};\r\n\r\n","import _ from 'underscore';\r\n\r\nconst errorObjectToString = (err) => {\r\n const { name, message, stack } = err;\r\n if (message || stack) {\r\n return `Error: ${name}, message: ${message}, stack: ${stack}`;\r\n }\r\n return JSON.stringify(err) || '(no error message)';\r\n};\r\n\r\nexport const getErrorString = (err) => {\r\n if (!err) {\r\n return '';\r\n }\r\n\r\n if (_.isString(err)) {\r\n return err;\r\n }\r\n\r\n if (_.isObject(err)) {\r\n let msg = errorObjectToString(err);\r\n if (err.originError) {\r\n msg += `,\\r\\nOrigin ${errorObjectToString(err.originError)}`;\r\n }\r\n return msg;\r\n }\r\n\r\n return JSON.stringify(err);\r\n};\r\n","import _ from 'underscore';\r\n\r\n// return first truthy result\r\nexport const fetchResultFromProcessors = ({ processors, options = {} } = {}) => {\r\n for (let i = 0; i < _.size(processors); i += 1) {\r\n const result = processors[i](options);\r\n\r\n if (result) {\r\n return result;\r\n }\r\n }\r\n\r\n return '';\r\n};\r\n","import React from 'react';\r\nimport _ from 'underscore';\r\nimport {\r\n processImageSizeLimitError,\r\n processVideoSizeLimitError,\r\n} from './upload-asset-limit-error';\r\nimport { fetchResultFromProcessors } from './processor-util';\r\n\r\nconst errorCodeMessageKeyMapping = {\r\n InvalidDuration: _TL_('One or more videos failed to upload because their duration is outside the valid range: 6 - 120 seconds.'),\r\n AssetDataInvalidWidth: _TL_('One or more videos failed to upload because their width is outside the valid range: 120 - 4096 pixels'),\r\n AssetDataInvalidHeight: _TL_('One or more videos failed to upload because their height is outside the valid range: 120 - 2160 pixels'),\r\n ImageAIUpScaleFailed: _TL_('One or more images are smaller than the required minimum size (703 x 368).'),\r\n};\r\n\r\nconst processAssetLimitErrors = ({\r\n codes, aid, logger, i18n,\r\n}) => {\r\n const imageSizeLimitResult = processImageSizeLimitError({ errorList: codes, aid, logger });\r\n\r\n if (imageSizeLimitResult) {\r\n const { limit: imageAssetLimit } = imageSizeLimitResult;\r\n\r\n return i18n.getString(\r\n _TL_('One or more images failed to upload because your account has exceeded the {{value}}-image asset limit. Please remove assets and try again.'),\r\n { value: imageAssetLimit }\r\n );\r\n }\r\n\r\n const videoSizeLimitResult = processVideoSizeLimitError({ errorList: codes, aid, logger });\r\n if (videoSizeLimitResult) {\r\n const { limit: videoAssetLimit } = videoSizeLimitResult;\r\n\r\n return i18n.getString(\r\n _TL_('One or more videos failed to upload because your account has exceeded the {{value}}-video asset limit. Please remove assets and try again.'),\r\n { value: videoAssetLimit }\r\n );\r\n }\r\n\r\n return '';\r\n};\r\n\r\nconst processImageErrors = ({ codes, filePickerI18n }) => filePickerI18n.getString(`ImageExperience_Error_${codes[0]}`);\r\n\r\nconst processPredefinedAssetErrors = ({ codes, i18n }) => {\r\n const mappedKey = errorCodeMessageKeyMapping[codes[0]];\r\n\r\n return mappedKey ? i18n.getString(mappedKey) : '';\r\n};\r\n\r\nexport const getAssetUploadError = ({\r\n uploadErrorCodeArr,\r\n i18n,\r\n filePickerI18n,\r\n aid,\r\n logger,\r\n disableGenericMessage = false,\r\n} = {}) => {\r\n if (_.size(uploadErrorCodeArr) > 0) {\r\n const errorMessage = fetchResultFromProcessors({\r\n processors: [\r\n processAssetLimitErrors,\r\n processImageErrors,\r\n processPredefinedAssetErrors,\r\n ],\r\n options: {\r\n codes: uploadErrorCodeArr,\r\n filePickerI18n,\r\n i18n,\r\n aid,\r\n logger,\r\n },\r\n });\r\n\r\n if (disableGenericMessage || errorMessage) {\r\n return errorMessage;\r\n }\r\n\r\n const genericMessage = (\r\n \r\n {\r\n i18n.getString(_TL_('One or more assets failed to upload. Please try again'))\r\n }\r\n {i18n.getString(_TL_('Learn more about asset guidelines and accepted file types.'))}\r\n \r\n );\r\n\r\n return genericMessage;\r\n }\r\n\r\n return '';\r\n};\r\n","/* eslint-disable arrow-body-style */\r\nimport Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { runJobsInParallelWithRateLimit } from '@bingads-webui-universal/parallel-job-with-rate-limit';\r\nimport { parseFileName } from '@bingads-webui-campaign-react/upload-file-picker';\r\n\r\n// if folder creation fails, continue partial upload around failed folder\r\n// mark failing folder with unique id;\r\nexport const INVALID_FOLDER_ID = -9999;\r\n\r\nconst UPLOAD_PARALLEL_RATE_LIMIT = 6;\r\n\r\n/*\r\n* Folder traversal functions\r\n* Upload folder via input button results in an array of File objects\r\n* with property webkitRelativePath that contains path of File relative\r\n* to (and including) the selected folder.\r\n* e.g. if I selected a folder A with subfolder B and file C.jpg is in B\r\n* then B's webkitRelativePath is \"A/B/C.jpg\"\r\n*\r\n* More information can be found here: https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/webkitdirectory\r\n* Some of these property names may be liable to changing as the webkit\r\n* prefix is an artifact of this folder upload feature being originally\r\n* implemented in Chrome and not having been standardized across all\r\n* browsers initially.\r\n*/\r\n\r\n// Will return an array of folders that form the relative path\r\n// e.g. for \"A/B/C.jpg\", returns [\"A\", \"B\"]\r\nconst getRelativeFoldersFromRelativePath = (relativePath) => {\r\n const pathArr = _.map(relativePath.split('/'), name => name.trim());\r\n\r\n pathArr.pop();\r\n\r\n return pathArr;\r\n};\r\n\r\n\r\n// Will return name of the parent folder directly containing the file\r\n// e.g. from file with path \"A/B/C.jpg\", returns \"B\"\r\nexport const getFileFolderName = (file) => {\r\n const { webkitRelativePath } = file;\r\n const pathArr = _.map(webkitRelativePath.split('/'), name => name.trim());\r\n\r\n pathArr.pop();\r\n\r\n return pathArr.pop();\r\n};\r\n\r\n// Filters out all files in the files array for files with supported\r\n// extension type (not handled by default by browser)\r\nexport const filterFilesByExtensions = ({ files, supportedExtensions }) => {\r\n const acceptedFiles = [];\r\n\r\n _.each(files, (file) => {\r\n const { ext } = parseFileName(file.name);\r\n if (ext && _.contains(supportedExtensions, ext)) {\r\n acceptedFiles.push(file);\r\n }\r\n });\r\n\r\n return acceptedFiles;\r\n};\r\n\r\n// For a list of files, will return a map of the folder hierarchy\r\n// where an empty object - {} - indicates that the folder is a leaf\r\n// node\r\n// e.g. for [\"A/B/C.jpg\", \"A/D/E.jpg\", \"A/F.png\"] will return\r\n// { A: { B: { C: {} }, D: { E: {} } } }\r\nexport const createFolderHierarchyMap = (files) => {\r\n const foldersToCreate = {};\r\n\r\n _.each(files, ({ webkitRelativePath }) => {\r\n const folders = getRelativeFoldersFromRelativePath(webkitRelativePath);\r\n let currFolderMap = foldersToCreate;\r\n\r\n _.each(folders, (folder) => {\r\n if (!currFolderMap[folder]) {\r\n currFolderMap[folder] = {};\r\n }\r\n currFolderMap = currFolderMap[folder];\r\n });\r\n });\r\n\r\n return foldersToCreate;\r\n};\r\n\r\nconst createFolderWithErrorHandling = ({\r\n folderCreationErrors,\r\n createFolderAsync,\r\n folderName,\r\n parentFolderId,\r\n currentFolderId,\r\n originalFolderName,\r\n numberOfAttempts = 1,\r\n}) => {\r\n return createFolderAsync({\r\n folderName,\r\n parentFolderId,\r\n })\r\n .catch((e) => {\r\n // for duplicate folder upload, rename as -1\r\n if (parentFolderId === currentFolderId) {\r\n const errorCode = _.get(e, ['body', 'value', 0, 'Code'], null);\r\n\r\n if (errorCode === 'DuplicateEntity') {\r\n return createFolderWithErrorHandling({\r\n folderCreationErrors,\r\n createFolderAsync,\r\n folderName: `${originalFolderName}-${numberOfAttempts}`,\r\n parentFolderId,\r\n currentFolderId,\r\n originalFolderName,\r\n numberOfAttempts: numberOfAttempts + 1,\r\n });\r\n }\r\n }\r\n // allow other folder creation jobs to continue as we allow partial succeed\r\n folderCreationErrors.push(e);\r\n return INVALID_FOLDER_ID;\r\n });\r\n};\r\n\r\nconst createFoldersByHierarchyInternal = ({\r\n folderMap,\r\n createFolderAsync,\r\n creationPromises,\r\n parentFolderName,\r\n folderCreationErrors,\r\n currentFolderId,\r\n}) => {\r\n const folderNames = _.keys(folderMap);\r\n if (folderNames.length > 0) {\r\n _.each(folderNames, (folderName) => {\r\n const subFoldersMap = folderMap[folderName];\r\n const parentPromise = parentFolderName ? creationPromises[parentFolderName] : Promise.resolve(currentFolderId);\r\n\r\n // eslint-disable-next-line no-param-reassign\r\n creationPromises[folderName] = parentPromise.then((parentFolderId) => {\r\n // if parent folder failed to be created, skip trying to create child folder\r\n if (parentFolderId === INVALID_FOLDER_ID) {\r\n return INVALID_FOLDER_ID;\r\n }\r\n\r\n return createFolderWithErrorHandling({\r\n folderCreationErrors,\r\n createFolderAsync,\r\n folderName,\r\n parentFolderId,\r\n currentFolderId,\r\n originalFolderName: folderName,\r\n });\r\n });\r\n\r\n createFoldersByHierarchyInternal({\r\n folderMap: subFoldersMap,\r\n createFolderAsync,\r\n creationPromises,\r\n parentFolderName: folderName,\r\n folderCreationErrors,\r\n });\r\n });\r\n }\r\n};\r\n\r\n// For a given folderMap (in the format created by createFolderHierarchyMap)\r\n// Will create folders using the provided method in the correct sequence\r\n// e.g. if for file \"A/B/C.jpg\", createFolderHierarchyMap will generate map\r\n// { A: { B: {} } }, createFoldersByHierarchy will create folders in this order:\r\n// create folder A with parentId = null (null used for root in MT)\r\n// create folder B with parentId = folder A's Id\r\nexport const createFoldersByHierarchy = ({\r\n folderMap,\r\n createFolderAsync,\r\n folderCreationErrors = [],\r\n currentFolderId,\r\n}) => {\r\n const creationPromises = {};\r\n\r\n createFoldersByHierarchyInternal({\r\n folderMap,\r\n createFolderAsync,\r\n creationPromises,\r\n folderCreationErrors,\r\n parentFolderName: null,\r\n currentFolderId,\r\n });\r\n\r\n return Promise.all(_.values(creationPromises))\r\n .then(() => creationPromises);\r\n};\r\n\r\n// Creates a promise which will ensure all assets are uploaded\r\n// in a rate limited manner, in which we will send AddAsset requests\r\n// one by one with a maximum of 6 parallel requests at a time\r\nexport const createRateLimitedAssetUploadPromises = ({\r\n customizedFilesOptions = [],\r\n acceptedAssets,\r\n folderIdPromises,\r\n validateAssetAsync = () => Promise.resolve(true),\r\n uploadAssetAsync,\r\n assetsSkippedUpload = [],\r\n assetUploadErrors = [],\r\n readAssetAsync,\r\n}) => {\r\n const processAssetJobPromises = [];\r\n const assetUploadJobs = [];\r\n\r\n _.each(acceptedAssets, (asset, index) => {\r\n const folderName = getFileFolderName(asset);\r\n const extraOptions = customizedFilesOptions[index] || {};\r\n\r\n const processAssetJobPromise = folderIdPromises[folderName].then((folderId) => {\r\n if (folderId === INVALID_FOLDER_ID) {\r\n assetsSkippedUpload.push(asset);\r\n return Promise.resolve();\r\n }\r\n\r\n return readAssetAsync(asset, extraOptions)\r\n .then((dataURL) => {\r\n const assetUploadJob = () => {\r\n return validateAssetAsync({\r\n dataURL,\r\n ...extraOptions,\r\n })\r\n .then((validatedResult) => {\r\n const isImageUpscaled = _.get(validatedResult, 'isImageUpscaled', false);\r\n const { nameWithoutExt } = parseFileName(asset.name);\r\n\r\n return uploadAssetAsync({\r\n dataURL,\r\n fileObject: asset,\r\n nameWithoutExt,\r\n folderId,\r\n isImageUpscaled,\r\n ...extraOptions,\r\n });\r\n });\r\n };\r\n assetUploadJobs.push(assetUploadJob);\r\n })\r\n .catch((e) => {\r\n assetUploadErrors.push(e);\r\n });\r\n });\r\n\r\n processAssetJobPromises.push(processAssetJobPromise);\r\n });\r\n\r\n return Promise.all(processAssetJobPromises).then(() => {\r\n return runJobsInParallelWithRateLimit({\r\n jobsToRateLimit: assetUploadJobs,\r\n maxJobsInParallel: UPLOAD_PARALLEL_RATE_LIMIT,\r\n handleJobError: e => assetUploadErrors.push(e),\r\n });\r\n });\r\n};\r\n","import { fetchResultFromProcessors } from './processor-util';\r\nimport { processFolderSizeLimitError } from './upload-asset-limit-error';\r\nimport { getAssetUploadError } from './upload-asset-error';\r\n\r\nconst processFolderSizeLimitErrors = ({\r\n folderCreationErrors, aid, logger, i18n,\r\n}) => {\r\n const folderLimitResult = processFolderSizeLimitError({ errorList: folderCreationErrors, aid, logger });\r\n if (folderLimitResult) {\r\n const { limit: folderLimit } = folderLimitResult;\r\n const warnMessage = _TL_('Failed to create one or more folders because your account has exceeded the {{value}}-folder limit. Please remove folders and try again.');\r\n\r\n return i18n.getString(warnMessage, { value: folderLimit });\r\n }\r\n\r\n return '';\r\n};\r\n\r\nconst processAssetErrors = ({\r\n assetUploadErrors, i18n, filePickerI18n, aid, logger,\r\n}) => getAssetUploadError({\r\n uploadErrorCodeArr: assetUploadErrors,\r\n i18n,\r\n filePickerI18n,\r\n aid,\r\n logger,\r\n disableGenericMessage: true,\r\n});\r\n\r\nexport const getFolderUploadError = ({\r\n folderCreationErrors,\r\n assetUploadErrors,\r\n i18n,\r\n filePickerI18n,\r\n aid,\r\n logger,\r\n}) => {\r\n const result = fetchResultFromProcessors({\r\n processors: [\r\n processFolderSizeLimitErrors,\r\n processAssetErrors,\r\n ],\r\n options: {\r\n folderCreationErrors,\r\n assetUploadErrors,\r\n i18n,\r\n filePickerI18n,\r\n aid,\r\n logger,\r\n },\r\n });\r\n\r\n if (result) {\r\n return result;\r\n }\r\n\r\n let genericErrorMessage;\r\n if (folderCreationErrors.length > 0) {\r\n if (assetUploadErrors.length > 0) {\r\n genericErrorMessage = _TL_('One or more folders or assets within folders failed to upload.');\r\n } else {\r\n genericErrorMessage = _TL_('One or more folders failed to upload.');\r\n }\r\n } else {\r\n genericErrorMessage = _TL_('One or more assets within your folders failed to upload.');\r\n }\r\n\r\n return i18n.getString(genericErrorMessage);\r\n};\r\n","import Promise from 'bluebird';\r\n\r\nexport const getTaskPoller = ({\r\n task, // func returns a promise which resolves to a value { isFinished }\r\n interval = 30000, // in milli-seconds\r\n}) => {\r\n let timerId;\r\n let stopRunning = false;\r\n let counter = 0;\r\n let taskPromise = null;\r\n\r\n const start = () => {\r\n if (taskPromise) {\r\n return taskPromise;\r\n }\r\n\r\n taskPromise = new Promise((resolve, reject) => {\r\n // run task immediately once\r\n counter = 1;\r\n task().then((result) => {\r\n const { isFinished } = result || {};\r\n if (!isFinished && !stopRunning) {\r\n timerId = setInterval(() => {\r\n if (!stopRunning) {\r\n counter += 1;\r\n task().then(({ isFinished: isDone }) => {\r\n if (isDone) {\r\n clearInterval(timerId);\r\n timerId = undefined;\r\n resolve(counter);\r\n }\r\n }).catch((err) => {\r\n clearInterval(timerId);\r\n timerId = undefined;\r\n reject(err);\r\n });\r\n } else {\r\n if (timerId) {\r\n clearInterval(timerId);\r\n timerId = undefined;\r\n }\r\n resolve(counter);\r\n }\r\n }, interval);\r\n } else {\r\n resolve(counter);\r\n }\r\n }).catch((err) => {\r\n reject(err);\r\n });\r\n });\r\n\r\n return taskPromise;\r\n };\r\n\r\n const stop = () => {\r\n stopRunning = true;\r\n return taskPromise;\r\n };\r\n\r\n return { start, stop };\r\n};\r\n","import _ from 'underscore';\r\nimport { useCallback, useReducer } from 'react';\r\n\r\nconst existDup = (arr, newArr, itemKey) => {\r\n const keys = _.pluck(arr, itemKey);\r\n const newKeys = _.pluck(newArr, itemKey);\r\n\r\n return _.intersection(keys, newKeys).length > 0;\r\n};\r\n\r\nconst ACTION_TYPE_SET_FOLDER_DATA = 100;\r\nconst ACTION_TYPE_SET_PERF_TIME_SERIES = 200;\r\nconst ACTION_TYPE_RESET_DATA = 300;\r\n\r\nconst AL_FOLDER_REDUCER_INIT_STATE = {\r\n folders: null,\r\n assets: null,\r\n perfTimeSeriesData: null,\r\n};\r\n\r\n/*\r\n state:{\r\n // null - not yet initialized\r\n // [] - no folders\r\n folders: [\r\n {\r\n folderId: id of folder,\r\n folderName: name of folder,\r\n parentFolderId: id of parent folder, if parent is root\r\n parentHierarchy: [],\r\n assets: [],\r\n subfolders: [],\r\n itemCount: {\r\n ImageAssetsCount,\r\n LogoAssetsCount,\r\n SubFoldersCount,\r\n TextAssetsCount,\r\n VideoAssetsCount,\r\n TotalCount,\r\n },\r\n createdTime: time folder was created\r\n modifiedTime: last time folder was modified\r\n }\r\n ],\r\n assets: [\r\n {\r\n id, // \"1234\"\r\n name,\r\n folderAssetType, // \"Image\"\r\n url,\r\n originalUrl,\r\n sourceType, // \"UserUploaded\",\r\n type, // \"GenericImage\",\r\n height,\r\n width,\r\n originalHeight,\r\n originalWidth,\r\n cropSettings,\r\n cropSettingOnOriginal,\r\n placementSettings: [\r\n ],\r\n createdTime,\r\n modifiedTime,\r\n\r\n // !! Performance metrics, new for V4\r\n usedByCount: 10, // ads count?\r\n performanceLabel, // \"Best\", \"Good\", \"Low\",\r\n // # performanceMetrics\r\n impressions,\r\n clicks,\r\n CTR,\r\n spend,\r\n // # performanceMetricsChange\r\n impressionsChange,\r\n clicksChange,\r\n CTRChange,\r\n spendChange,\r\n // # performanceMetricsChangePercentage\r\n impressionsChangePercentage,\r\n clicksChangePercentage,\r\n CTRChangePercentage,\r\n spendChangePercentage,\r\n // # periodPerformanceMetrics\r\n periodImpressions,\r\n periodClicks,\r\n periodCTR,\r\n periodSpend,\r\n }\r\n ],\r\n perfTimeSeriesData: [ // one entry for each selected metric, at most 2 selected metrics on UI chart currently\r\n {\r\n metricName: \"Impressions\",\r\n uniqueId: 'a guid',\r\n primaryDataPoints: [\r\n {\r\n datetime: \"2023-06-12T00:00:00\",\r\n value: 400,\r\n },\r\n ...\r\n ],\r\n comparisonDataPoints: [ // empty if POP is disabled\r\n {\r\n datetime: \"2023-06-12T00:00:00\",\r\n value: 600,\r\n },\r\n ...\r\n ],\r\n },\r\n ],\r\n\r\n // mark where the data are loaded\r\n pageName: AdsStudioPageName.LibraryPage/AdsStudioPageName.PerfPage/undefined\r\n }\r\n*/\r\nconst folderDataStateReducer = (state, action) => {\r\n const { type: actionType, ...actionData } = action;\r\n switch (actionType) {\r\n case ACTION_TYPE_SET_FOLDER_DATA:\r\n {\r\n const {\r\n newFolders = [], newAssets = [], newPerfTimeSeries = [], shouldFlush, logger, pageName,\r\n } = actionData;\r\n\r\n if (shouldFlush) {\r\n return {\r\n ...state, folders: newFolders, assets: newAssets, perfTimeSeriesData: newPerfTimeSeries, pageName,\r\n };\r\n }\r\n\r\n // todo: investigate why there are duliacted folders and assets\r\n const foundFolderDup = existDup(state.folders, newFolders, 'folderId');\r\n const foundAssetDup = existDup(state.assets, newAssets, 'id');\r\n if (foundFolderDup) {\r\n logger.logTrace('Unexpected duplicate folders found in folderDataStateReducer');\r\n }\r\n if (foundAssetDup) {\r\n logger.logTrace('Unexpected duplicate assets found in folderDataStateReducer');\r\n }\r\n if (foundFolderDup || foundAssetDup) {\r\n // if found duplicate, which should not happen, don't update the state\r\n return state;\r\n }\r\n\r\n // todo: don't update time series data if shouldFlush is false, is that expected? confirm with MT\r\n return {\r\n ...state,\r\n folders: [...(state.folders || []), ...newFolders],\r\n assets: [...(state.assets || []), ...newAssets],\r\n };\r\n }\r\n case ACTION_TYPE_SET_PERF_TIME_SERIES:\r\n {\r\n const { newPerfTimeSeries } = actionData;\r\n return { ...state, perfTimeSeriesData: newPerfTimeSeries };\r\n }\r\n case ACTION_TYPE_RESET_DATA:\r\n {\r\n return AL_FOLDER_REDUCER_INIT_STATE;\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const useDataServiceReducer = (logger, initState = AL_FOLDER_REDUCER_INIT_STATE) => {\r\n const [folderData, dispatch] = useReducer(folderDataStateReducer, initState);\r\n\r\n const setFolderData = useCallback(({\r\n newAssets, newFolders, newPerfTimeSeries,\r\n }, pageName) => {\r\n dispatch({\r\n type: ACTION_TYPE_SET_FOLDER_DATA,\r\n newAssets,\r\n newFolders,\r\n newPerfTimeSeries,\r\n pageName,\r\n shouldFlush: true,\r\n logger,\r\n });\r\n }, [logger]);\r\n\r\n // replace assets only, and keep other data unchanged\r\n const setAssetsOnly = useCallback((newAssets) => {\r\n dispatch({\r\n type: ACTION_TYPE_SET_FOLDER_DATA,\r\n newAssets,\r\n newFolders: folderData.folders,\r\n newPerfTimeSeries: folderData.perfTimeSeriesData,\r\n pageName: folderData.pageName,\r\n shouldFlush: true,\r\n logger,\r\n });\r\n }, [folderData.pageName, folderData.folders, folderData.perfTimeSeriesData, logger]);\r\n\r\n const appendFolderData = useCallback(({ newAssets, newFolders }) => {\r\n dispatch({\r\n type: ACTION_TYPE_SET_FOLDER_DATA,\r\n newAssets,\r\n newFolders,\r\n shouldFlush: false,\r\n logger,\r\n });\r\n }, [logger]);\r\n\r\n const setPerfTimeSeriesData = useCallback(({ newPerfTimeSeries }) => {\r\n dispatch({\r\n type: ACTION_TYPE_SET_PERF_TIME_SERIES,\r\n newPerfTimeSeries,\r\n logger,\r\n });\r\n }, [logger]);\r\n\r\n const resetFolderData = useCallback(() => {\r\n dispatch({ type: ACTION_TYPE_RESET_DATA });\r\n }, []);\r\n\r\n return {\r\n folderData,\r\n setFolderData,\r\n setAssetsOnly,\r\n appendFolderData,\r\n setPerfTimeSeriesData,\r\n resetFolderData,\r\n };\r\n};\r\n","import _ from 'underscore';\r\n\r\nexport class AdsStudioErrorBase extends Error {\r\n constructor({\r\n message,\r\n originError,\r\n errorCode,\r\n errorProcessor, // use processor to extend the error object with anything needed\r\n ...rest // additional data passed to processor\r\n }) {\r\n super(message);\r\n this.originError = originError;\r\n this.errorCode = errorCode || (originError && originError.errorCode) || 'Unknown';\r\n if (errorProcessor) {\r\n const params = { message, errorCode, ...rest };\r\n const info = errorProcessor(this.errorCode, params);\r\n _.extendOwn(this, info);\r\n }\r\n }\r\n}\r\n","import { FolderAssetType } from '../model';\r\n\r\n// use processors to append any info to AdsStudioODataError instance based on errorCode,\r\n// for example:\r\n// uxMessage: message to show on UI\r\n// actionable: if use could correct this error\r\n// getUXMessage(): function to get message shown on UI, but could pass in additiona parameters\r\n// ...\r\n\r\nexport const renameFolderApiErrorProcessor = (errorCode) => {\r\n const msgs = {\r\n InvalidFolderId: {\r\n uxMessage: _TL_(\"This folder doesn't exist because you may have already deleted it. Please refresh the page to confirm.\"),\r\n actionable: false,\r\n },\r\n DuplicateFolderName: {\r\n uxMessage: _TL_('This folder name already exists. Please enter another one.'),\r\n actionable: true,\r\n },\r\n InvalidFolderName: {\r\n uxMessage: _TL_(\"You've entered one or more invalid characters in the fields. Please correct them and try again.\"),\r\n actionable: true,\r\n },\r\n genericError: {\r\n uxMessage: _TL_(\"Your folder couldn't be renamed. Please refresh the page and try again.\"),\r\n actionable: false,\r\n },\r\n };\r\n\r\n // actionable:\r\n // true - ask user to do correct the error\r\n // false - user can't do any action, just show notification\r\n return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\nexport const deleteFolderApiErrorProcessor = (errorCode /* {folderId, folderName} */) => {\r\n const msgs = {\r\n InvalidFolderId: {\r\n uxMessage: _TL_(\"This folder doesn't exist because you may have already deleted it. Please refresh the page to confirm.\"),\r\n ignorable: true,\r\n shortMsg: _TL_('Error'),\r\n },\r\n\r\n FolderHasAssets: {\r\n uxMessage: _TL_(\"Your folder couldn't be deleted because it contains assets or subfolders. Please remove these and try again.\"),\r\n shortMsg: _TL_(\"Folder isn't empty\"),\r\n ignorable: true,\r\n },\r\n\r\n genericError: {\r\n uxMessage: _TL_(\"Your folder couldn't be deleted. Please refresh the page and try again.\"),\r\n shortMsg: _TL_('Error'),\r\n },\r\n };\r\n msgs.InvalidId = msgs.InvalidFolderId;\r\n msgs.FolderHasSubFolders = msgs.FolderHasAssets;\r\n\r\n // actionable:\r\n // true - ask user to do correct the error\r\n // false - user can't do any action, just show notification\r\n return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\nexport const bulkMoveApiErrorProcessor = (errorCode, { folderCount, assetCount }) => {\r\n const msgs = {\r\n // DestFolderId is invalid\r\n InvalidFolderId: {\r\n getUXMessage: i18n => i18n.getString(\r\n _TL_(\"({{folderCount}} folders, {{assetCount}} assets)) couldn't be moved because you may have already deleted the folder. Please refresh the page and try a different folder.\"),\r\n { folderCount, assetCount }\r\n ),\r\n actionable: false,\r\n },\r\n\r\n genericError: {\r\n getUXMessage: i18n => i18n.getString(\r\n _TL_(\"({{folderCount}} folders, {{assetCount}} assets) couldn't be moved. Please refresh the page and try again.\"),\r\n { folderCount, assetCount }\r\n ),\r\n },\r\n };\r\n\r\n // actionable:\r\n // true - ask user to do correct the error\r\n // false - user can't do any action, just show notification\r\n return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\n// error for a specific item in the batch response\r\nexport const bulkMoveApiItemErrorProcessor = (errorCode) => {\r\n const msgs = {\r\n InvalidFolderId: {\r\n uxMessage: _TL_(\"This folder doesn't exist because you may have already deleted it. Please refresh the page to confirm.\"),\r\n shortMsg: _TL_(\"Folder doesn't exist\"),\r\n availableActions: {},\r\n },\r\n AssetIdInvalid: {\r\n uxMessage: _TL_(\"This asset doesn't exist because you may have already deleted it. Please refresh the page to confirm.\"),\r\n shortMsg: _TL_(\"Asset doesn't exist\"),\r\n availableActions: {},\r\n },\r\n DuplicateAssetsUnderFolder: {\r\n uxMessage: _TL_('Your asset already exists in the folder. Please note that you can add the same asset to different folders, but you cannot have duplicate assets in the same folder.'),\r\n shortMsg: _TL_('Duplicate asset'),\r\n availableActions: {},\r\n },\r\n DuplicateImage: {\r\n uxMessage: _TL_('Your image already exists in the folder. Please note that you can add the same image to different folders, but you cannot have duplicate images in the same folder.'),\r\n shortMsg: _TL_('Duplicate image'),\r\n availableActions: {},\r\n },\r\n DuplicateFolderName: {\r\n uxMessage: _TL_('You cannot have duplicate subfolder names in the same folder. Please rename your subfolder and try again.'),\r\n shortMsg: _TL_('Duplicate subfolder name'),\r\n availableActions: {},\r\n },\r\n FolderCanNotMoveToTarget: {\r\n uxMessage: _TL_('You cannot move a folder into itself or one of its subfolders. Please select a different folder and try again.'),\r\n shortMsg: _TL_('Wrong target folder'),\r\n availableActions: {},\r\n },\r\n\r\n genericError: {\r\n uxMessage: _TL_(\"Your assets couldn't be moved. Please refresh the page and try again.\"),\r\n shortMsg: _TL_('Error'),\r\n availableActions: {},\r\n },\r\n };\r\n\r\n // actionable:\r\n // true - ask user to do correct the error\r\n // false - user can't do any action, just show notification\r\n return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\nexport const deleteAssetApiErrorProcessor = (errorCode, { assetType }) => {\r\n const msgs = {\r\n AssetIsUsed: {\r\n uxMessage: assetType === FolderAssetType.Video\r\n ? _TL_(\"You can't delete this video because it's being used by other campaigns, ads, or video extensions.\")\r\n : _TL_(\"You can't delete this image because it's being used by other campaigns, ads, or image extensions.\"),\r\n availableActions: {\r\n gotoAds: true,\r\n // others: true,\r\n },\r\n },\r\n // ImageAdExtensionPilotNotEnabledForCustomer\r\n // AssetDoesNotBelongToAccount\r\n // AssetIdInvalid\r\n // AssetIsAlreadyDeleted\r\n // CamAssetCannotBeDeleted --Asset of this Type ( CAM ) can not be deleted\r\n genericError: {\r\n uxMessage: _TL_('Failed to delete image. Please try again or contact support.'),\r\n availableActions: {},\r\n },\r\n };\r\n return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\nexport const createFolderApiErrorProcessor = (errorCode) => {\r\n const msgs = {\r\n DuplicateEntity: {\r\n getUXMessage: i18n => i18n.getString(_TL_('This folder name already exists. Please enter another one.')),\r\n actionable: true,\r\n },\r\n InvalidFolderName: {\r\n getUXMessage: i18n => i18n.getString(_TL_(\"You've entered one or more invalid characters in the fields. Please correct them and try again.\")),\r\n actionable: true,\r\n },\r\n FolderLimitExceededPerAccount: {\r\n getUXMessage: (i18n, getFolderLimit) => (i18n.getString(_TL_('Failed to create one or more folders because your account has exceeded the {{value}}-folder limit. Please remove folders and try again.'), getFolderLimit())\r\n ),\r\n actionable: false,\r\n },\r\n genericError: {\r\n getUXMessage: i18n => i18n.getString(_TL_('Failed to create folder. Please try again.')),\r\n actionable: false,\r\n },\r\n };\r\n return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\n// ## rename asset\r\n// AssetIsNull\r\n// AssetDoesNotBelongToAccount\r\n// AssetIsAlreadyDeleted\r\n\r\n//\r\n// ## bulk delete asset\r\nexport const bulkDeleteAssetsApiItemErrorProcessor = (errorCode, { assetType }) => {\r\n const msgs = {\r\n // AssetIdInvalid\r\n // AssetIsAlreadyDeleted\r\n CampaignServiceMediaIdInvalid: {\r\n uxMessage: _TL_(\"This asset doesn't exist because you may have already deleted it. Please refresh the page to confirm.\"),\r\n shortMsg: _TL_(\"Asset doesn't exist\"),\r\n availableActions: {},\r\n },\r\n // // AssetDoesNotBelongToAccount\r\n // CampaignServiceMediaNotFoundInAccount: {\r\n // uxMessage: _TL_('Asset does not belong to account'),\r\n // availableActions: {},\r\n // },\r\n // // CamAssetCannotBeDeleted\r\n // CampaignServiceMediaTypeInvalidForOperation: {\r\n // uxMessage: _TL_('Asset of this Type ( CAM ) cannot be deleted'),\r\n // availableActions: {},\r\n // },\r\n // AssetIsUsed\r\n CampaignServiceMediaIsAssociated: {\r\n uxMessage: assetType === FolderAssetType.Video\r\n ? _TL_(\"You can't delete this video because it's being used by other campaigns, ads, or video extensions. Delete these associations and try again.\")\r\n : _TL_(\"You can't delete this image because it's being used by other campaigns, ads, or image extensions. Delete these associations and try again.\"),\r\n shortMsg: _TL_('Asset is currently in use '),\r\n availableActions: {\r\n gotoAds: true,\r\n // others: true,\r\n },\r\n },\r\n // // AccountIdInvalid\r\n // CampaignServiceInvalidAccountId: {\r\n // uxMessage: _TL_('account id is invalid'),\r\n // availableActions: {},\r\n // },\r\n // // DuplicateId\r\n // DuplicateId: {\r\n // uxMessage: _TL_('There are dulpicate ids from input'),\r\n // availableActions: {},\r\n // },\r\n genericError: {\r\n uxMessage: _TL_(\"Your assets couldn't be deleted. Please refresh the page and try again.\"),\r\n shortMsg: _TL_('Error'),\r\n availableActions: {},\r\n },\r\n };\r\n return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\nexport const bulkDeleteAssetsApiErrorProcessor = (errorCode) => {\r\n const msgs = {\r\n genericError: {\r\n uxMessage: _TL_(\"Your assets couldn't be deleted. Please refresh the page and try again.\"),\r\n shortMsg: _TL_('Error'),\r\n availableActions: {},\r\n },\r\n };\r\n return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\nexport const generateImagesWithAIAPIErrorProcessor = (errorCode, params) => {\r\n const reqCountErr = _TL_(\"Sorry, our servers are busy and we're unable to process your request. We're working to resolve this issue. Please try again later.\");\r\n\r\n const msgs = {\r\n GenerateImagesPromptLengthInvalid: {\r\n uxMessage: _TL_('Your image description is either too long or too short. 256 characters maximum.'),\r\n },\r\n GenerateImagesRequestCountLimitExceededPerAccount: {\r\n uxMessage: reqCountErr,\r\n },\r\n GenerateImagesRequestCountLimitExceeded: {\r\n uxMessage: reqCountErr,\r\n },\r\n GenerateImagesPromptContentInvalid: { // when AIGC told MT the input prompt is invalid\r\n uxMessage: _TL_('Something went wrong with your request and we\\'re unable to process it at this time.'),\r\n },\r\n\r\n // use general message for this one\r\n // GenerateImagesAIGCNoRecommendation: when AIGC failed to create task, failed to generate image, but it does not specify the reason.\r\n\r\n GenerateImagesAIGCNoRecommendationWithBrand: {\r\n brandNameDetected: true,\r\n brandNames: (params && params.errorMessage) || '',\r\n },\r\n\r\n genericError: {\r\n uxMessage: _TL_('We\\'ve encountered an error and failed to generate images.'),\r\n },\r\n };\r\n return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\nexport const getAIGeneratedImageAPIErrorProcessor = (errorCode) => {\r\n const msgs = {\r\n AI_Generation_Failed: {\r\n shouldRetry: false,\r\n uxMessage: _TL_('Something went wrong with your request and we\\'re unable to process it at this time. We apologize for the inconvenience. Please try again later.'),\r\n },\r\n genericError: {\r\n shouldRetry: true,\r\n uxMessage: _TL_('We\\'ve encountered an error and failed to generate images.'),\r\n },\r\n };\r\n return msgs[errorCode] || msgs.genericError;\r\n};\r\n\r\n// todo: handle error codes returned from MT (what error codes are returned from MT?)\r\n// todo: scrub error message text\r\nexport const getRemoveImageBackgroundAPIErrorProcessor = (errorCode) => {\r\n const msgs = {\r\n GenerateImagesPromptContentInvalid: { // when AIGC told MT the input prompt is invalid\r\n uxMessage: _TL_('Something went wrong with your request and we\\'re unable to process it at this time.'),\r\n },\r\n GenerationBackgroundFailed: {\r\n shouldRetry: false,\r\n uxMessage: _TL_('Something went wrong with your request and we\\'re unable to process it at this time. We apologize for the inconvenience. Please try again later.'),\r\n },\r\n GenerateImagesAIGCInvalidImageSize: {\r\n uxMessage: _TL_('We’re unable to generate the image because the image size does not meet the minimum required dimensions.'),\r\n },\r\n GenerateImagesAIGCInvalidImageContent: {\r\n uxMessage: _TL_('We’re unable to generate the image because the image you provided may violate our policies and guidelines. To learn more, see '),\r\n availableActions: {\r\n gotoDisallowedContent: true,\r\n },\r\n },\r\n GenerateImageAIGCInvalidUserPrompt: {\r\n uxMessage: _TL_('We’re unable to generate the image because the prompt you provided may violate our policies and guidelines. To learn more, see '),\r\n availableActions: {\r\n gotoDisallowedContent: true,\r\n },\r\n },\r\n GenerateImageAIGCInvalidGeneratedImage: {\r\n uxMessage: _TL_('We’re unable to generate the image because it may violate our policies and guidelines. To learn more, see '),\r\n availableActions: {\r\n gotoDisallowedContent: true,\r\n },\r\n },\r\n genericError: {\r\n shouldRetry: true,\r\n uxMessage: _TL_('We’ve encountered an error removing the image’s background. Please try again.'),\r\n },\r\n };\r\n return msgs[errorCode] || msgs.genericError;\r\n};\r\n","/* istanbul ignore file */\r\n// ut tests of use-folders are covered in CMUI level\r\n/* eslint-disable arrow-body-style */\r\nimport Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport { useCallback, useMemo, useRef, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport {\r\n ROOT_FOLDER_ID,\r\n RootFolderName,\r\n DEFAULT_PAGE_SIZE,\r\n CSMLSortBy,\r\n FolderAssetType,\r\n} from '../../model';\r\nimport { civilDateRangeToDebugString } from '../../utils';\r\nimport { useDataServiceReducer } from './folder-reducer';\r\nimport { AdsStudioErrorBase, deleteFolderApiErrorProcessor } from '../../error-handling';\r\n\r\nconst PATH_SEPERATOR = ' > ';\r\n\r\nconst getPathString = (i18n, folderPath) => {\r\n // remove ROOT section from the string\r\n let pathString = folderPath.slice(1).map(fp => fp.folderName).join(PATH_SEPERATOR) || '';\r\n if (pathString) {\r\n pathString = `${PATH_SEPERATOR}${pathString}`;\r\n }\r\n pathString = `${i18n.getString(_TL_('Library'))}${pathString}`;\r\n return pathString;\r\n};\r\n\r\nexport const getAssetTypeToFetch = ({ filterSettings, defaultAssetType }) => {\r\n const { assetTypeFilter } = filterSettings || {};\r\n\r\n return assetTypeFilter || defaultAssetType;\r\n};\r\n\r\nexport const useFolders = ({\r\n perfMetricDateRange,\r\n defaultPerfMetricDateRange,\r\n repository,\r\n logger,\r\n assetType: defaultAssetType,\r\n i18n,\r\n}) => {\r\n const ROOT_FOLDER = {\r\n folderId: ROOT_FOLDER_ID,\r\n folderName: i18n.getString(RootFolderName[defaultAssetType] || _TL_('Library')),\r\n };\r\n\r\n const {\r\n folderData, setFolderData, setAssetsOnly: setAssets, appendFolderData, setPerfTimeSeriesData, resetFolderData,\r\n } = useDataServiceReducer(logger);\r\n\r\n const [newFolderId, setNewFolderId] = useState('');\r\n const totalItemCount = useRef({});\r\n\r\n // set current folder navigation path\r\n // ROOT_FOLDER will always be element 0 in the paths folder state\r\n // when navigating, folders get pushed onto path\r\n // so top most folder is the current folder\r\n const [folderPath, setFolderPath] = useState([ROOT_FOLDER]);\r\n const currentFolder = useMemo(() => folderPath[folderPath.length - 1], [folderPath]);\r\n const currentFolderId = useMemo(() => currentFolder.folderId, [currentFolder]);\r\n\r\n const latestRequestTimestamp = useRef(0);\r\n\r\n /*\r\n searchTerm,\r\n minWidth,\r\n minHeight,\r\n dateAddedStart,\r\n dateAddedEnd,\r\n importSource,\r\n assetSources,\r\n assetTypeFilter,\r\n minVideoDuration,\r\n maxVideoDuration,\r\n isGlobalSearch,\r\n hasPerfData,\r\n topRated,\r\n */\r\n const curFilterSettings = useRef(null);\r\n\r\n const curSortBy = useRef(CSMLSortBy.MostRecent);\r\n const curAssetCountToLoadForSubFolders = useRef(1);\r\n const curFolderAssetTypeToLoad = useRef(defaultAssetType);\r\n const curIncludeParentHierarchy = useRef(false);\r\n const curIncludeSubfolders = useRef(true);\r\n const curPageName = useRef(undefined);\r\n const curPerfMarker = useRef(undefined);\r\n\r\n const pendingVideoBlobUploadPromiseTokens = useRef([]);\r\n\r\n const resetData = useCallback(() => {\r\n resetFolderData();\r\n curFilterSettings.current = null;\r\n curSortBy.current = CSMLSortBy.MostRecent;\r\n curAssetCountToLoadForSubFolders.current = 1;\r\n curFolderAssetTypeToLoad.current = defaultAssetType;\r\n curIncludeParentHierarchy.current = false;\r\n curIncludeSubfolders.current = true;\r\n curPageName.current = undefined;\r\n curPerfMarker.current = undefined;\r\n }, [defaultAssetType, resetFolderData]);\r\n\r\n const logTrace = useCallback((message, ...rest) => {\r\n logger.logTrace(`DataService: ${message}`, ...rest);\r\n }, [logger]);\r\n\r\n const loadFolderArgs = useCallback(({\r\n filterSettings,\r\n sortBy,\r\n assetsToLoadForSubfolders,\r\n includeParentHierarchy,\r\n count,\r\n }) => {\r\n const folderAssetTypeToFetch = getAssetTypeToFetch({\r\n filterSettings,\r\n defaultAssetType,\r\n });\r\n\r\n return repository.getFolderArgs({\r\n perfMetricDateRange,\r\n ...filterSettings,\r\n sortBy,\r\n skip: 0,\r\n count: count || DEFAULT_PAGE_SIZE,\r\n folderId: currentFolderId,\r\n assetType: folderAssetTypeToFetch,\r\n includeAssets: true,\r\n includeSubfolders: true,\r\n includeParentHierarchy,\r\n assetsToLoadForSubfolders,\r\n isAssetPickerScenario: defaultAssetType !== null,\r\n });\r\n }, [defaultAssetType, repository, perfMetricDateRange, currentFolderId]);\r\n\r\n const loadFolderDataInternal = useCallback(({\r\n hasDateRange,\r\n filterSettings,\r\n sortBy,\r\n folderId,\r\n assetsToLoadForSubfolders,\r\n includeParentHierarchy,\r\n count,\r\n includeSubfolders = true,\r\n pageName,\r\n perfMarker,\r\n withBIData = false,\r\n }) => {\r\n const requestTimestamp = Date.now();\r\n const folderAssetTypeToFetch = getAssetTypeToFetch({\r\n filterSettings,\r\n defaultAssetType,\r\n });\r\n const saveCurrentFilters = () => {\r\n curSortBy.current = sortBy;\r\n curFilterSettings.current = filterSettings;\r\n curFolderAssetTypeToLoad.current = folderAssetTypeToFetch;\r\n curAssetCountToLoadForSubFolders.current = assetsToLoadForSubfolders;\r\n curIncludeParentHierarchy.current = includeParentHierarchy;\r\n curIncludeSubfolders.current = includeSubfolders;\r\n curPageName.current = pageName;\r\n curPerfMarker.current = perfMarker;\r\n };\r\n return repository.getFolderData({\r\n perfMetricDateRange: hasDateRange ? perfMetricDateRange : defaultPerfMetricDateRange,\r\n ...filterSettings,\r\n sortBy,\r\n skip: 0,\r\n count: count || DEFAULT_PAGE_SIZE,\r\n folderId,\r\n assetType: folderAssetTypeToFetch,\r\n includeAssets: true,\r\n includeSubfolders,\r\n includeParentHierarchy,\r\n assetsToLoadForSubfolders,\r\n isAssetPickerScenario: defaultAssetType !== null,\r\n withBIData,\r\n perfMarker,\r\n }).then((res) => {\r\n if (requestTimestamp >= latestRequestTimestamp.current) {\r\n const { folder } = res;\r\n const newFolders = folder.subfolders || [];\r\n const newAssets = folder.assets || [];\r\n const perfTimeSeriesData = folder.perfTimeSeriesData || [];\r\n\r\n totalItemCount.current = folder.itemCount;\r\n saveCurrentFilters();\r\n\r\n setFolderData({ newAssets, newFolders, newPerfTimeSeries: perfTimeSeriesData }, pageName);\r\n\r\n latestRequestTimestamp.current = requestTimestamp;\r\n\r\n const {\r\n searchTerm: searchText, dateAddedStart, dateAddedEnd, ...otherFilters\r\n } = filterSettings || {};\r\n logTrace('FolderDataService: loaded assets, folders', {\r\n ...otherFilters,\r\n searchText,\r\n dateAddedDateRange: (dateAddedStart != null && dateAddedEnd != null) ? civilDateRangeToDebugString({ start: dateAddedStart, end: dateAddedEnd }) : undefined,\r\n sortBy: curSortBy.current,\r\n skip: 0,\r\n count: DEFAULT_PAGE_SIZE,\r\n assetType: curFolderAssetTypeToLoad.current,\r\n hasDateRange,\r\n });\r\n } else {\r\n logTrace('DataService: load folders and assets through folder service, ignore other requests');\r\n }\r\n\r\n return res;\r\n }).tapCatch(() => {\r\n if (requestTimestamp > latestRequestTimestamp.current) {\r\n saveCurrentFilters();\r\n latestRequestTimestamp.current = requestTimestamp;\r\n }\r\n });\r\n }, [defaultAssetType, repository, perfMetricDateRange, defaultPerfMetricDateRange, setFolderData, logTrace]);\r\n\r\n const loadFolderData = useCallback(({\r\n filterSettings,\r\n sortBy,\r\n assetsToLoadForSubfolders,\r\n includeParentHierarchy,\r\n count,\r\n includeSubfolders = true,\r\n pageName,\r\n perfMarker,\r\n }) => {\r\n return loadFolderDataInternal({\r\n hasDateRange: false,\r\n filterSettings,\r\n sortBy,\r\n folderId: currentFolderId,\r\n assetsToLoadForSubfolders,\r\n includeParentHierarchy,\r\n count,\r\n includeSubfolders,\r\n pageName,\r\n perfMarker,\r\n });\r\n }, [loadFolderDataInternal, currentFolderId]);\r\n\r\n const loadFolderDataInDateRange = useCallback(({\r\n filterSettings,\r\n sortBy,\r\n assetsToLoadForSubfolders,\r\n includeParentHierarchy,\r\n count,\r\n includeSubfolders = true,\r\n pageName,\r\n perfMarker,\r\n }) => loadFolderDataInternal({\r\n hasDateRange: true,\r\n filterSettings,\r\n sortBy,\r\n folderId: currentFolderId,\r\n assetsToLoadForSubfolders,\r\n includeParentHierarchy,\r\n count,\r\n includeSubfolders,\r\n pageName,\r\n perfMarker,\r\n withBIData: true,\r\n }), [loadFolderDataInternal, currentFolderId]);\r\n\r\n const loadPerfTimeSeriesData = useCallback(({ perfTimeSeriesParams, filterSettings }) => {\r\n const ret = repository.getPerfTimeSeriesData({\r\n perfMetricDateRange,\r\n perfTimeSeriesParams,\r\n ...(filterSettings || {}),\r\n folderId: currentFolderId === ROOT_FOLDER_ID ? -1 : currentFolderId,\r\n }).then((res) => {\r\n const { perfTimeSeriesData } = res || {};\r\n setPerfTimeSeriesData({ newPerfTimeSeries: perfTimeSeriesData });\r\n logTrace('FolderDataService: loaded performance timeseries data');\r\n return perfTimeSeriesData;\r\n });\r\n return ret;\r\n }, [currentFolderId, logTrace, perfMetricDateRange, repository, setPerfTimeSeriesData]);\r\n\r\n const loadMoreFolderDataImpl = useCallback(({ hasDateRange, count = DEFAULT_PAGE_SIZE, withBIData = false }) => {\r\n const requestTimestamp = Date.now();\r\n\r\n const { folders, assets } = folderData;\r\n\r\n const skip = (folders ? folders.length : 0) + (assets ? assets.length : 0);\r\n\r\n // avoid error: Invalid $top, $skip Combination. $skip should be multiple of $top\r\n // this could happen if additional loadmore request (maybe caused by grid rerender) is sent after all items are aready loaded\r\n if (totalItemCount.current && skip >= totalItemCount.current.TotalCount) {\r\n logTrace('skip this request as all items are already loaded.', {\r\n skip, top: count, totalItemCount: totalItemCount.current.TotalCount, hasDateRange,\r\n });\r\n return Promise.resolve({});\r\n }\r\n if (count && skip % count) {\r\n logTrace('$skip is not multiple of $top', {\r\n skip, top: count, totalItemCount: totalItemCount.current.TotalCount, hasDateRange,\r\n });\r\n return Promise.resolve({});\r\n }\r\n\r\n return repository.getFolderData({\r\n perfMetricDateRange: hasDateRange ? perfMetricDateRange : defaultPerfMetricDateRange,\r\n ...curFilterSettings.current,\r\n sortBy: curSortBy.current,\r\n skip,\r\n folderId: currentFolderId,\r\n count: count || DEFAULT_PAGE_SIZE,\r\n assetType: curFolderAssetTypeToLoad.current,\r\n includeAssets: true,\r\n includeSubfolders: curIncludeSubfolders.current,\r\n includeParentHierarchy: curIncludeParentHierarchy.current,\r\n assetsToLoadForSubfolders: curAssetCountToLoadForSubFolders.current,\r\n isAssetPickerScenario: defaultAssetType !== null,\r\n withBIData,\r\n perfMarker: curPerfMarker.current,\r\n }).then((res) => {\r\n if (requestTimestamp >= latestRequestTimestamp.current) {\r\n const { folder } = res;\r\n const newFolders = folder.subfolders || [];\r\n const newAssets = folder.assets || [];\r\n\r\n latestRequestTimestamp.current = requestTimestamp;\r\n\r\n logTrace('DataService: loaded more folders and assets through folder service', {\r\n sortBy: curSortBy.current,\r\n skip,\r\n count,\r\n filterSettings: curFilterSettings.current,\r\n assetType: curFolderAssetTypeToLoad.current,\r\n hasDateRange,\r\n });\r\n\r\n appendFolderData({ newFolders, newAssets });\r\n } else {\r\n logTrace('DataService: load more data, ignore other requests');\r\n }\r\n\r\n return res;\r\n }).tapCatch(() => {\r\n logger.logError('Failed to load more data');\r\n });\r\n }, [folderData, repository, perfMetricDateRange, defaultPerfMetricDateRange, currentFolderId, defaultAssetType, logTrace, appendFolderData, logger]);\r\n\r\n const loadMoreFolderData = useCallback(({ count = DEFAULT_PAGE_SIZE }) => loadMoreFolderDataImpl({ hasDateRange: false, count }), [loadMoreFolderDataImpl]);\r\n const loadMoreFolderDataInDateRange = useCallback(({ count = DEFAULT_PAGE_SIZE }) => loadMoreFolderDataImpl({ hasDateRange: true, count, withBIData: true }), [loadMoreFolderDataImpl]);\r\n\r\n const reloadFolders = useCallback(({ count } = {}) => loadFolderDataInternal({\r\n hasDateRange: false,\r\n filterSettings: curFilterSettings.current,\r\n folderId: currentFolderId,\r\n sortBy: curSortBy.current,\r\n assetsToLoadForSubfolders: curAssetCountToLoadForSubFolders.current,\r\n includeParentHierarchy: curIncludeParentHierarchy.current,\r\n includeSubfolders: curIncludeSubfolders.current,\r\n count,\r\n pageName: curPageName.current,\r\n perfMarker: curPerfMarker.current,\r\n }), [loadFolderDataInternal, currentFolderId]);\r\n\r\n const reloadFoldersInDateRange = useCallback(({ count } = {}) => loadFolderDataInternal({\r\n hasDateRange: true,\r\n filterSettings: curFilterSettings.current,\r\n folderId: currentFolderId,\r\n sortBy: curSortBy.current,\r\n assetsToLoadForSubfolders: curAssetCountToLoadForSubFolders.current,\r\n includeParentHierarchy: curIncludeParentHierarchy.current,\r\n includeSubfolders: curIncludeSubfolders.current,\r\n count,\r\n pageName: curPageName.current,\r\n perfMarker: curPerfMarker.current,\r\n }), [loadFolderDataInternal, currentFolderId]);\r\n\r\n // use method to navigate into a folder that's a child of the current folder\r\n // i.e. user clicking a folder that's displayed in the folder grid\r\n const navigateIntoFolder = useCallback(({ id = '', navigateToNewFolder = false }) => {\r\n let folderToNavigate;\r\n\r\n const { folders } = folderData;\r\n\r\n if (navigateToNewFolder && !id && newFolderId) {\r\n folderToNavigate = _.find(folders, ({ folderId }) => folderId === newFolderId);\r\n } else if (id) {\r\n folderToNavigate = _.find(folders, ({ folderId }) => folderId === id);\r\n }\r\n\r\n const { parentHierarchy } = folderToNavigate;\r\n if (parentHierarchy && parentHierarchy.length > 0) {\r\n setFolderPath([ROOT_FOLDER, ...parentHierarchy]);\r\n } else {\r\n setFolderPath(curFolderPath => [\r\n ...curFolderPath,\r\n folderToNavigate,\r\n ]);\r\n }\r\n setNewFolderId('');\r\n }, [ROOT_FOLDER, folderData, newFolderId]);\r\n\r\n // use method to navigate to a folder in current path\r\n // i.e. user clicking a parent folder that's displayed in the summary bar\r\n const navigateToFolderInPath = useCallback(({ id }) => {\r\n setFolderPath((curFolderPath) => {\r\n const indexOfFolderInPath = _.findIndex(curFolderPath, ({ folderId }) => folderId === id);\r\n return curFolderPath.slice(0, indexOfFolderInPath + 1);\r\n });\r\n setNewFolderId('');\r\n }, [setFolderPath]);\r\n\r\n // use method to navigate into a folder in navigation tree\r\n // i.e. user clicking a folder in the navigation tree or in recent of home page\r\n const navigateIntoFolderItem = useCallback(({ folder }) => {\r\n const { parentHierarchy = [] } = folder;\r\n setFolderPath([ROOT_FOLDER, ...parentHierarchy]);\r\n }, [ROOT_FOLDER]);\r\n\r\n const navigateIntoRootFolder = useCallback(() => {\r\n setFolderPath([ROOT_FOLDER]);\r\n }, [ROOT_FOLDER]);\r\n\r\n const createFolder = useCallback(({ folderName }) => {\r\n return repository.createFolder({ folderName, parentFolderId: currentFolderId });\r\n }, [repository, currentFolderId]);\r\n\r\n const createFolderBulk = useCallback(({ folderName, parentFolderId }) => {\r\n return repository.createFolder({ folderName, parentFolderId });\r\n }, [repository]);\r\n\r\n const deleteEmptyFolder = useCallback(({ folderId, folderName }) => {\r\n return repository.deleteFolder({ folderId, folderName });\r\n }, [repository]);\r\n\r\n const renameFolder = useCallback(({ folderId, newFolderName }) => {\r\n return repository.renameFolder({ folderId, newFolderName });\r\n }, [repository]);\r\n\r\n const uploadImageByUrlToFolder = useCallback(({\r\n imageUrl,\r\n folderId,\r\n sourceType,\r\n }) => {\r\n return repository.addUrlImageToFolder({\r\n imageSrc: imageUrl,\r\n folderId: folderId || currentFolderId,\r\n sourceType,\r\n });\r\n }, [repository, currentFolderId]);\r\n\r\n const addImageWithBaseIdToFolder = useCallback(({\r\n folderId,\r\n imageSrc,\r\n metaData,\r\n baseId,\r\n sourceType,\r\n }) => {\r\n return repository.addImageWithBaseIdToFolder({\r\n folderId: folderId || currentFolderId,\r\n imageSrc,\r\n metaData,\r\n baseId,\r\n sourceType,\r\n });\r\n }, [currentFolderId, repository]);\r\n\r\n const uploadVideoToAzureBlob = useCallback(({\r\n fileObject,\r\n onProgress,\r\n }) => {\r\n const promise = new Promise((resolve, reject) => {\r\n repository.uploadVideoToAzureBlobWithCancellation({\r\n fileObject,\r\n onProgress,\r\n }).then(({ token, blobName }) => {\r\n pendingVideoBlobUploadPromiseTokens.current.push(token);\r\n\r\n token.on({\r\n onSuccess: () => resolve({ token, blobName }),\r\n onError: reject,\r\n onCancel: () => {\r\n logTrace('DataService: cancel azure upload for video file');\r\n\r\n reject();\r\n },\r\n });\r\n });\r\n });\r\n\r\n return promise;\r\n }, [logTrace, repository]);\r\n\r\n const uploadVideoToFolder = useCallback(({\r\n fileObject,\r\n updateCurrentProgress,\r\n name,\r\n folderId,\r\n perfMarker,\r\n }) => {\r\n let uploadVideoPerfMarker = null;\r\n if (perfMarker) {\r\n uploadVideoPerfMarker = perfMarker.createChild('uploadSingleVideo');\r\n uploadVideoPerfMarker.willInit();\r\n }\r\n // blob upload stage: 0.9 progress\r\n // save blob to MT: 0.1 progress\r\n const scale = 0.9;\r\n const progressForBlobUpload = updateCurrentProgress ? (percentage) => {\r\n return updateCurrentProgress({\r\n loaded: percentage * scale,\r\n total: 1,\r\n });\r\n } : undefined;\r\n const progressForSavingBlobToMT = updateCurrentProgress ? (evt) => {\r\n const { loaded, total } = evt;\r\n\r\n return updateCurrentProgress({\r\n loaded: (total * scale) + (loaded * (1 - scale)),\r\n total,\r\n });\r\n } : undefined;\r\n\r\n return uploadVideoToAzureBlob({\r\n fileObject,\r\n onProgress: progressForBlobUpload,\r\n }).then(({ token, blobName }) => {\r\n pendingVideoBlobUploadPromiseTokens.current = _.without(pendingVideoBlobUploadPromiseTokens.current, token);\r\n\r\n return repository.addFolderUploadAsset({\r\n folderId: folderId || currentFolderId,\r\n asset: { blobName, name },\r\n folderAssetType: FolderAssetType.Video,\r\n inProgress: progressForSavingBlobToMT,\r\n }).finally(() => {\r\n if (uploadVideoPerfMarker) {\r\n uploadVideoPerfMarker.done();\r\n }\r\n });\r\n });\r\n }, [currentFolderId, repository, uploadVideoToAzureBlob]);\r\n\r\n const cancelPendingVideoUpload = () => {\r\n _.each(pendingVideoBlobUploadPromiseTokens.current, (token) => {\r\n token.cancel();\r\n });\r\n };\r\n\r\n const postVideoByUrl = useCallback(({\r\n videoUrl,\r\n name,\r\n folderId,\r\n }) => {\r\n return repository.postVideoByUrl({\r\n folderId: folderId || currentFolderId,\r\n videoUrl,\r\n name,\r\n });\r\n }, [currentFolderId, repository]);\r\n\r\n const uploadImageToFolder = useCallback(({\r\n imageData,\r\n updateCurrentProgress,\r\n imageName,\r\n folderId,\r\n supportUpscale,\r\n }) => {\r\n return repository.addFolderUploadAsset({\r\n folderId: folderId || currentFolderId,\r\n asset: { data: imageData, name: imageName },\r\n folderAssetType: FolderAssetType.Image,\r\n inProgress: updateCurrentProgress,\r\n supportUpscale,\r\n });\r\n }, [currentFolderId, repository]);\r\n\r\n const uploadStockImageToFolder = useCallback(({\r\n stockImageId,\r\n folderId,\r\n }) => {\r\n return repository.addStockImageToFolder({\r\n folderId: folderId || currentFolderId,\r\n stockImageId,\r\n });\r\n }, [repository, currentFolderId]);\r\n\r\n const uploadInvestImageToFolder = useCallback(({\r\n investImageId,\r\n imageSrc,\r\n folderId,\r\n }) => {\r\n return repository.addInvestImageToFolder({\r\n folderId: folderId || currentFolderId,\r\n investImageId,\r\n imageSrc,\r\n });\r\n }, [repository, currentFolderId]);\r\n\r\n const uploadInvestVideoToFolder = useCallback(({\r\n investVideoId,\r\n videoSrc,\r\n description,\r\n folderId,\r\n }) => {\r\n return repository.addInvestVideoToFolder({\r\n folderId: folderId || currentFolderId,\r\n investVideoId,\r\n videoSrc,\r\n description,\r\n });\r\n }, [repository, currentFolderId]);\r\n\r\n const renameAsset = useCallback(({\r\n assetId,\r\n folderAssetType,\r\n name,\r\n }) => {\r\n return repository.renameAsset({\r\n assetId,\r\n folderAssetType,\r\n name,\r\n }).then(() => {\r\n logTrace('DataService: asset is renamed', { assetId, folderAssetType, newName: name });\r\n\r\n // update the internal state\r\n const { assets } = folderData;\r\n const idx = _.findIndex(assets, asset => asset.id === assetId);\r\n if (idx >= 0 && assets[idx].name !== name) {\r\n const newAsset = { ...assets[idx], name };\r\n const newAssets = [...assets];\r\n newAssets.splice(idx, 1, newAsset);\r\n setAssets(newAssets);\r\n }\r\n });\r\n }, [folderData, logTrace, repository, setAssets]);\r\n\r\n const deleteAsset = useCallback(({\r\n assetId,\r\n folderAssetType,\r\n }) => {\r\n return repository.deleteAsset({ assetId, folderAssetType })\r\n .tap(() => {\r\n logTrace('DataService: asset is deleted', { assetId, folderAssetType });\r\n });\r\n }, [repository, logTrace]);\r\n\r\n // eslint-disable-next-line no-underscore-dangle\r\n const _batchDeleteAssetsAsync = useCallback(({ assets, parentPath, onItemDeleted }) => {\r\n return repository.bulkDeleteAssets(assets).then(({ resultSummary }) => {\r\n const ret = _.map(resultSummary, ({\r\n err, id: assetId, name: assetName, folderAssetType, url, thumbnailUrl,\r\n }) => {\r\n onItemDeleted({\r\n err, assetId, assetName, path: parentPath, assetType: folderAssetType, thumbnailUrl: thumbnailUrl || url, api: 'bulkdeleteAssetApi', errorCode: err && err.errorCode,\r\n });\r\n return {\r\n err, assetId, assetName, parentPath, folderAssetType,\r\n };\r\n });\r\n return ret;\r\n }).catch((err) => {\r\n const ret = _.map(assets, ({\r\n id: assetId, name: assetName, folderAssetType, url, thumbnailUrl,\r\n }) => {\r\n onItemDeleted({\r\n err, assetId, assetName, path: parentPath, assetType: folderAssetType, thumbnailUrl: thumbnailUrl || url, api: 'bulkdeleteAssetApi', errorCode: err && err.errorCode,\r\n });\r\n return {\r\n err, assetId, assetName, parentPath, folderAssetType,\r\n };\r\n });\r\n return ret;\r\n });\r\n }, [repository]);\r\n\r\n // eslint-disable-next-line no-underscore-dangle\r\n const _deleteEmptyFolderAsync = useCallback(({\r\n folderId, folderName, parentPath, onItemDeleted = _.noop,\r\n }) => {\r\n return deleteEmptyFolder({ folderId, folderName }).then(() => {\r\n onItemDeleted({\r\n folderId, folderName, path: parentPath, api: 'deleteFolderApi',\r\n });\r\n return {\r\n folderId, folderName, parentPath,\r\n };\r\n }).catch((err) => {\r\n onItemDeleted({\r\n err, folderId, folderName, path: parentPath, api: 'deleteFolderApi', errorCode: err && err.errorCode,\r\n });\r\n return {\r\n err, folderId, folderName, parentPath,\r\n };\r\n });\r\n }, [deleteEmptyFolder]);\r\n\r\n // MT only support delete empty folder, to delete a folder with assets & subfolders,\r\n // need to delete its subfolders one by one, and batch delete its assets\r\n // eslint-disable-next-line no-underscore-dangle\r\n const _batchDelete = useCallback(({\r\n folders = [], assets = [], path, onItemDeleted, _deleteFolder,\r\n }) => {\r\n const parentPath = path || getPathString(i18n, folderPath);\r\n const concurrencyCount = 3;\r\n\r\n return Promise.map(\r\n folders,\r\n ({ folderId, folderName, itemCount: ic }) => _deleteFolder({\r\n folderId, folderName, path: parentPath, totalItemCount: ic.TotalCount, onItemDeleted,\r\n }),\r\n { concurrency: concurrencyCount }\r\n ).then((foldersResult) => {\r\n return _batchDeleteAssetsAsync({ assets, parentPath, onItemDeleted }).then((assetsResult) => {\r\n return { folders: foldersResult, assets: assetsResult };\r\n });\r\n });\r\n }, [_batchDeleteAssetsAsync, folderPath, i18n]);\r\n\r\n const deleteFolder = useCallback(({\r\n folderId,\r\n folderName,\r\n totalItemCount: totalItmCnt, // optional param\r\n path,\r\n onItemDeleted,\r\n skip = 0,\r\n }) => {\r\n const parentPath = path || getPathString(i18n, folderPath);\r\n\r\n // query one page (without any filters) and then delete returned items.\r\n const loadOnePageAndDeleteAsync = () => {\r\n const ret = repository.getFolderData({\r\n folderId, sortBy: curSortBy.current, skip, count: DEFAULT_PAGE_SIZE, includeAssets: true, includeSubfolders: true,\r\n }).then((res) => {\r\n const { folder } = res;\r\n const { subfolders, assets, itemCount: { TotalCount: totalCount } } = folder || {};\r\n\r\n logTrace('delete folder - loaded data to delete', { folderId, folderName, totalItemCount: totalCount });\r\n\r\n // folder is empty\r\n if (totalCount <= 0) {\r\n return { hasNextPage: false };\r\n }\r\n\r\n // folder is not empty, batch deleting\r\n return _batchDelete({\r\n folders: subfolders, assets, path: `${parentPath}${PATH_SEPERATOR}${folderName}`, onItemDeleted, _deleteFolder: deleteFolder,\r\n }).then((results) => {\r\n // stop if all tasks failed\r\n let newSkip = skip;\r\n const successCount = _.filter([...results.folders, ...results.assets], ({ err }) => !err).length;\r\n if (successCount <= 0) {\r\n // all failed, skip the page\r\n newSkip = skip + DEFAULT_PAGE_SIZE;\r\n }\r\n\r\n // all items are deleted (some of them may failed)\r\n return { hasNextPage: totalCount > skip + DEFAULT_PAGE_SIZE, newSkip };\r\n });\r\n }).catch((e) => {\r\n // failed to load data, stop handling this folder\r\n const err = new AdsStudioErrorBase({ message: 'failed to load data to delete', originError: e, errorProcessor: deleteFolderApiErrorProcessor });\r\n onItemDeleted({\r\n e, folderId, folderName, path: parentPath, api: 'getFolderDataApi', errorCode: err && err.errorCode,\r\n });\r\n\r\n\r\n return { hasNextPage: undefined, loadDataError: err };\r\n });\r\n return ret;\r\n };\r\n\r\n // current folder is empty\r\n if (totalItmCnt <= 0) {\r\n return _deleteEmptyFolderAsync({\r\n folderId, folderName, parentPath: path, onItemDeleted,\r\n });\r\n }\r\n\r\n // load subfolders and assets for 'folderId' page by page and then delete them one by one\r\n return loadOnePageAndDeleteAsync().then(({ hasNextPage, newSkip, loadDataError }) => {\r\n // continue to load next page and delete it\r\n if (hasNextPage === true) {\r\n return deleteFolder({\r\n folderId, folderName, totalItemCount: totalItmCnt, parentPath, onItemDeleted, skip: newSkip,\r\n });\r\n } else if (hasNextPage === false) {\r\n // try to delete the folder itself\r\n return _deleteEmptyFolderAsync({\r\n folderId, folderName, parentPath, onItemDeleted, skip: newSkip,\r\n });\r\n }\r\n\r\n // failed to load data (!!loadDataError), stop handling this folder\r\n return {\r\n folderId, folderName, parentPath, err: loadDataError,\r\n };\r\n // }).tap((result) => {\r\n // console.log('####', result);\r\n });\r\n }, [_batchDelete, _deleteEmptyFolderAsync, folderPath, i18n, logTrace, repository]);\r\n\r\n const batchDelete = useCallback(({\r\n folders = [], assets = [], path, onItemDeleted = _.noop,\r\n }) => _batchDelete({\r\n folders, assets, path, onItemDeleted, _deleteFolder: deleteFolder,\r\n }), [_batchDelete, deleteFolder]);\r\n\r\n const batchMove = useCallback(({ destFolderId, folders = [], assets = [] }) => {\r\n return repository.batchMove({ destFolderId, folders, assets });\r\n }, [repository]);\r\n\r\n const folderContext = useMemo(() => ({\r\n folders: folderData.folders,\r\n folderPath,\r\n loadFolderData,\r\n loadMoreFolderData,\r\n loadFolderDataInDateRange,\r\n loadFolderArgs,\r\n loadMoreFolderDataInDateRange,\r\n perfTimeSeriesData: folderData.perfTimeSeriesData,\r\n loadPerfTimeSeriesData,\r\n navigateIntoFolder,\r\n navigateToFolderInPath,\r\n navigateIntoFolderItem,\r\n navigateIntoRootFolder,\r\n createFolder,\r\n deleteFolder,\r\n renameFolder,\r\n createFolderBulk,\r\n currentFolder,\r\n uploadImageByUrlToFolder,\r\n currentFolderId,\r\n uploadVideoToFolder,\r\n cancelPendingVideoUpload,\r\n postVideoByUrl,\r\n uploadImageToFolder,\r\n uploadStockImageToFolder,\r\n uploadInvestImageToFolder,\r\n uploadInvestVideoToFolder,\r\n reloadFolders,\r\n reloadFoldersInDateRange,\r\n totalItemCount,\r\n assets: folderData.assets,\r\n setAssets,\r\n renameAsset,\r\n deleteAsset,\r\n batchDelete,\r\n batchMove,\r\n addImageWithBaseIdToFolder,\r\n resetFolderData: resetData,\r\n dataOwnerPageName: folderData.pageName,\r\n }), [folderData.folders, folderData.perfTimeSeriesData, folderData.assets, folderData.pageName, folderPath, loadFolderData, loadMoreFolderData, loadFolderDataInDateRange, loadFolderArgs, loadMoreFolderDataInDateRange, loadPerfTimeSeriesData, navigateIntoFolder, navigateToFolderInPath, navigateIntoRootFolder, navigateIntoFolderItem, createFolder, deleteFolder, renameFolder, createFolderBulk, currentFolder, uploadImageByUrlToFolder, currentFolderId, uploadVideoToFolder, postVideoByUrl, uploadImageToFolder, uploadStockImageToFolder, uploadInvestImageToFolder, uploadInvestVideoToFolder, reloadFolders, reloadFoldersInDateRange, setAssets, renameAsset, deleteAsset, batchDelete, batchMove, resetData, addImageWithBaseIdToFolder]);\r\n\r\n return folderContext;\r\n};\r\n\r\nuseFolders.propTypes = {\r\n repository: PropTypes.shape({\r\n getFolders: PropTypes.func.isRequired,\r\n getImages: PropTypes.func.isRequired,\r\n createFolder: PropTypes.func.isRequired,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func.isRequired,\r\n }).isRequired,\r\n};\r\n","import { useCallback, useMemo, useRef, useState } from 'react';\r\nimport _ from 'underscore';\r\nimport Promise from 'bluebird';\r\n\r\nexport const useCommonImageRepoMethods = ({\r\n imageRepository,\r\n logger,\r\n loadedImages,\r\n setLoadedImages,\r\n}) => {\r\n const latestTimestampRef = useRef(0);\r\n const [imageCroppingTasks, setImageCroppingTasks] = useState({});\r\n // used to restart task status poller\r\n const [croppingTaskUpdated, setCroppingTaskUpdated] = useState(null);\r\n\r\n const getImageById = useCallback(({ imageId, useCache = true }) => {\r\n if (useCache) {\r\n const image = _.find(loadedImages, img => img.id === imageId);\r\n if (image) {\r\n return Promise.resolve(image);\r\n }\r\n }\r\n // no local value, request from backend\r\n return imageRepository.getImage(imageId);\r\n }, [loadedImages, imageRepository]);\r\n\r\n const getImageCroppingTaskStatus = useCallback((imageId) => {\r\n const requestTimestamp = Date.now();\r\n return imageRepository.getImageCroppingTaskStatus(imageId).then(({ tasks /* totalCount */ }) => {\r\n // if multipe requests are sent out, ensure to keep the result from the latest request\r\n if (requestTimestamp > latestTimestampRef.current) {\r\n // only update if any value is changed\r\n setImageCroppingTasks((curTasks) => {\r\n let dirty = false;\r\n const newTaks = (tasks || []).reduce((prev, tsk = {}) => {\r\n const curTsk = curTasks && curTasks[tsk.id];\r\n const newTsk = _.pick(tsk, ['id', 'stage', 'hasError', 'failureMessage', 'isFinished']) || {};\r\n if (newTsk.isFinished) {\r\n dirty = dirty || !!curTsk;\r\n // task is finsished, remove it from the list\r\n return prev;\r\n }\r\n if (!curTsk || !_.isEqual(curTsk, newTsk)) {\r\n dirty = true;\r\n }\r\n return { ...prev, [newTsk.id]: newTsk };\r\n }, {});\r\n dirty = dirty || !_.isEmpty(_.difference(_.keys(curTasks), _.keys(newTaks)));\r\n if (dirty) {\r\n return newTaks;\r\n }\r\n return curTasks;\r\n });\r\n // eslint-disable-next-line no-param-reassign\r\n latestTimestampRef.current = requestTimestamp;\r\n }\r\n const taskCount = _.filter(tasks || [], t => t && !t.isFinished).length;\r\n return { totalCount: taskCount };\r\n }).catch((ex) => {\r\n // log and ignore the error\r\n logger.logError(`Failed to get image cropping task status. ${JSON.stringify(ex)}`);\r\n });\r\n }, [logger, imageRepository, latestTimestampRef]);\r\n\r\n const renameImage = useCallback(({ assetId: imageId, name }) => {\r\n const renameLocalImage = (images, setImages) => {\r\n const idx = _.findIndex(images, img => img.id === imageId);\r\n if (idx >= 0 && images[idx].name !== name) {\r\n const newImage = { ...images[idx], name };\r\n const newImages = [...images];\r\n newImages.splice(idx, 1, newImage);\r\n setImages(newImages);\r\n }\r\n };\r\n\r\n return imageRepository.renameImage({ imageId, name })\r\n .then(() => {\r\n logger.logTrace('DataService: image is renamed', { imageId, newName: name });\r\n renameLocalImage(loadedImages, setLoadedImages);\r\n })\r\n .tapCatch(() => {\r\n // logger.logError(err);\r\n });\r\n }, [imageRepository, logger, loadedImages, setLoadedImages]);\r\n\r\n const deleteImage = useCallback(({ assetId: imageId }) => {\r\n const promise = imageRepository.deleteImage(imageId)\r\n .tap(() => {\r\n logger.logTrace('DataService: image is deleted', { imageId });\r\n })\r\n .tapCatch(() => {\r\n // logger.logError();\r\n });\r\n return promise;\r\n }, [logger, imageRepository]);\r\n\r\n const cropImage = useCallback(({ imageId, cropSettings, placementSettings }) => {\r\n const ret = imageRepository.cropImage({ imageId, cropSettings, placementSettings }).then(() => {\r\n // update state to notify the status changes\r\n setCroppingTaskUpdated({ imageId });\r\n logger.logTrace('DataService: image is cropping', { imageId });\r\n });\r\n return ret;\r\n }, [logger, imageRepository]);\r\n\r\n const addCreative = useCallback(({ creativeData, baseId }) => {\r\n const ret = imageRepository.addCreative({ creativeData, baseId });\r\n return ret;\r\n }, [imageRepository]);\r\n\r\n const returnVal = useMemo(() => ({\r\n imageCroppingTasks,\r\n croppingTaskUpdated,\r\n getImageById,\r\n getImageCroppingTaskStatus,\r\n renameImage,\r\n deleteImage,\r\n cropImage,\r\n addCreative,\r\n }), [\r\n imageCroppingTasks,\r\n croppingTaskUpdated,\r\n getImageById,\r\n getImageCroppingTaskStatus,\r\n renameImage,\r\n deleteImage,\r\n cropImage,\r\n addCreative,\r\n ]);\r\n\r\n return returnVal;\r\n};\r\n","import { useCallback, useMemo, useRef, useState } from 'react';\r\nimport _ from 'underscore';\r\n\r\nimport { checkVideosIntermediateStatus } from '../../model';\r\n\r\n// below fields will be impacted along with status change\r\nconst VideoChangedFieldsWithStatusUpdate = [\r\n 'thumbnailUrl',\r\n 'url',\r\n 'width',\r\n 'height',\r\n 'durationInMS',\r\n 'status',\r\n];\r\n\r\nexport const useCommonVideoRepoMethods = ({\r\n repository,\r\n videoRepository,\r\n logger,\r\n}) => {\r\n const latestTimestampRef = useRef(0);\r\n const [videoUpdated, setVideoUpdated] = useState({}); // sample: { 123: { .. } }\r\n const getVideoTaskStatus = useCallback((videoTasks) => {\r\n const requestTimestamp = Date.now();\r\n const videosToCheck = _.keys(videoTasks);\r\n\r\n return repository.updateVideoStatusByIds(videosToCheck).then((response) => {\r\n // if multipe requests are sent out, ensure to keep the result from the latest request\r\n let notFinishedTaskList = {};\r\n let newVideoUpdated = {};\r\n if (requestTimestamp > latestTimestampRef.current) {\r\n const responseKeys = [];\r\n\r\n response.forEach((item) => {\r\n responseKeys.push(item.id);\r\n newVideoUpdated = {\r\n ...newVideoUpdated,\r\n [item.id]: _.pick(item, VideoChangedFieldsWithStatusUpdate),\r\n };\r\n\r\n if (item && checkVideosIntermediateStatus(item)) {\r\n notFinishedTaskList = { ...notFinishedTaskList, [item.id]: item.status };\r\n }\r\n });\r\n\r\n // eslint-disable-next-line no-param-reassign\r\n latestTimestampRef.current = requestTimestamp;\r\n }\r\n\r\n setVideoUpdated(newVideoUpdated);\r\n\r\n const taskCount = Object.keys(notFinishedTaskList).length;\r\n\r\n return { totalCount: taskCount };\r\n }).catch(() => {\r\n // log and ignore the error\r\n logger.logError('Failed to get videos task status.');\r\n });\r\n }, [logger, repository]);\r\n\r\n const addVideoCreative = useCallback(({ videoCreative }) => {\r\n const promise = videoRepository.addVideoCreative({ videoCreative });\r\n return promise;\r\n }, [videoRepository]);\r\n\r\n const getVideo = useCallback(({ id, fetchMetadata }) => {\r\n const promise = videoRepository.getVideo({ id, fetchMetadata });\r\n return promise;\r\n }, [videoRepository]);\r\n\r\n const returnVal = useMemo(() => ({\r\n getVideoTaskStatus,\r\n videoUpdated,\r\n addVideoCreative,\r\n getVideo,\r\n }), [addVideoCreative, getVideo, getVideoTaskStatus, videoUpdated]);\r\n\r\n return returnVal;\r\n};\r\n","import Promise from 'bluebird';\r\nimport { useCallback } from 'react';\r\nimport { getTaskPoller } from '../task-poller';\r\n\r\nfunction checkError(err) {\r\n const { errorCode } = err || {};\r\n return ['GenerateImagesAIGCNoRecommendation', 'AI_Generation_Failed'].includes(errorCode);\r\n}\r\n\r\n// retry promise if it fails within timeout\r\nfunction retryPromise(getPromise, retryCount, start, logger, { timeout = 5000, shouldRetry = () => true }) {\r\n return getPromise().catch((err) => {\r\n const now = Date.now();\r\n const elapsed = now - start;\r\n\r\n if (retryCount >= 1 && elapsed < timeout && shouldRetry(err)) {\r\n return retryPromise(getPromise, retryCount - 1, start, logger, { timeout, shouldRetry });\r\n }\r\n\r\n logger.logError('Re-tried but failed to generate image by AI');\r\n return Promise.reject(err);\r\n });\r\n}\r\n\r\nexport const useAIGeneratedImages = ({\r\n repository,\r\n logger,\r\n pollInterval = 3000,\r\n maxRetryCount = 3, // max retry count for polling task status\r\n}) => {\r\n const generateImagesByAI = useCallback(({\r\n prompt, onProgress, onStartPolling, skipBrandDetection,\r\n }) => {\r\n if (!repository) {\r\n return Promise.reject(new Error());\r\n }\r\n\r\n const generateImagesByAIPromise = () => new Promise((resolve, reject) => {\r\n // start generating task\r\n repository.generateImagesWithAIAsync(prompt, skipBrandDetection).then((res) => {\r\n const { taskId } = res || {};\r\n\r\n if (!taskId && res.brandNameDetected) {\r\n resolve({\r\n brandNameDetected: true, brandNames: res.brandNames, prompt, images: [],\r\n });\r\n return;\r\n }\r\n\r\n // poll task status\r\n let retryCount = 0;\r\n const pollStatus = () => repository.getAIGeneratedImageTaskStatus(taskId).then((taskStatus) => {\r\n // status, progress, requestId, images, isTaskDone, taskId,\r\n const { isTaskDone, ...rest } = taskStatus || {};\r\n\r\n // reset retry count if there is successfull poll\r\n retryCount = 0;\r\n\r\n // report status\r\n if (onProgress) {\r\n onProgress({ ...rest, isTaskDone });\r\n }\r\n\r\n if (isTaskDone) {\r\n resolve({ ...rest, prompt });\r\n }\r\n\r\n // stop polling if it's done\r\n return { isFinished: isTaskDone };\r\n }).catch((err) => {\r\n retryCount += 1;\r\n if (err.shouldRetry === false || retryCount >= maxRetryCount) { // got continuous errors\r\n reject(err);\r\n // stop polling if failed maxRetryCount times continuously\r\n return { isFinished: true };\r\n }\r\n\r\n // ignore errors and retry\r\n logger.logError(`failed to get AI generation task status, retryCount: ${retryCount}, taskId: ${taskId}, prompt: ${prompt}, error: ${err.uxMessage}`);\r\n return { isFinished: false };\r\n });\r\n\r\n // start polling task status\r\n const taskPoller = getTaskPoller({ task: pollStatus, interval: pollInterval });\r\n taskPoller.start();\r\n if (onStartPolling) {\r\n onStartPolling(taskPoller);\r\n }\r\n }).catch((err) => {\r\n reject(err);\r\n });\r\n });\r\n\r\n const ret = retryPromise(generateImagesByAIPromise, 1, Date.now(), logger, { shouldRetry: checkError, timeout: 10000 });\r\n\r\n if (logger.monitorPromise) {\r\n return logger.monitorPromise({ promise: ret, msg: `generateImagesByAI, prompt: ${prompt}`, api: 'generateImagesByAI' });\r\n }\r\n return ret;\r\n }, [logger, maxRetryCount, pollInterval, repository]);\r\n\r\n return {\r\n generateImagesByAI,\r\n };\r\n};\r\n","/* istanbul ignore file */\r\n// ut test has been covered by other hook files\r\n/* eslint-disable arrow-body-style */\r\nimport React, { useCallback, useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { useFolders } from './use-folders';\r\nimport { useCommonImageRepoMethods } from './use-image-repo-methods';\r\nimport { useCommonVideoRepoMethods } from './use-video-repo-methods';\r\nimport { useAIGeneratedImages } from './use-ai-generated-images';\r\nimport { useFolderPathTree } from './use-folder-path-tree';\r\n\r\nconst AssetWithFoldersDataServiceContext = React.createContext({});\r\n\r\nexport const AssetWithFoldersDataServiceProvider = ({\r\n children, imageRepository, aigcRepository, folderRepository, videoRepository, logger, allowedAssetType, i18n, perfMetricDateRange, defaultPerfMetricDateRange,\r\n}) => {\r\n const {\r\n folders,\r\n folderPath,\r\n loadFolderData,\r\n loadMoreFolderData,\r\n loadFolderDataInDateRange,\r\n loadFolderArgs,\r\n loadMoreFolderDataInDateRange,\r\n perfTimeSeriesData,\r\n loadPerfTimeSeriesData,\r\n navigateIntoFolder,\r\n navigateToFolderInPath,\r\n navigateIntoFolderItem,\r\n navigateIntoRootFolder,\r\n createFolder,\r\n createFolderBulk,\r\n deleteFolder,\r\n renameFolder,\r\n currentFolder,\r\n currentFolderId,\r\n uploadVideoToFolder,\r\n cancelPendingVideoUpload,\r\n postVideoByUrl,\r\n uploadImageByUrlToFolder,\r\n uploadImageToFolder,\r\n uploadStockImageToFolder,\r\n uploadInvestImageToFolder,\r\n uploadInvestVideoToFolder,\r\n reloadFolders,\r\n reloadFoldersInDateRange,\r\n totalItemCount,\r\n loadAssetsUnderFolder,\r\n assets,\r\n setAssets,\r\n renameAsset,\r\n deleteAsset,\r\n batchDelete,\r\n batchMove,\r\n resetFolderData,\r\n dataOwnerPageName,\r\n addImageWithBaseIdToFolder,\r\n } = useFolders({\r\n repository: folderRepository,\r\n logger,\r\n assetType: allowedAssetType,\r\n i18n,\r\n perfMetricDateRange,\r\n defaultPerfMetricDateRange,\r\n });\r\n\r\n const {\r\n imageCroppingTasks,\r\n croppingTaskUpdated,\r\n getImageById,\r\n getImageCroppingTaskStatus,\r\n cropImage,\r\n addCreative,\r\n } = useCommonImageRepoMethods({\r\n imageRepository,\r\n logger,\r\n loadedImages: assets,\r\n setLoadedImages: setAssets,\r\n });\r\n\r\n const {\r\n generateImagesByAI,\r\n } = useAIGeneratedImages({ repository: aigcRepository, logger });\r\n\r\n const {\r\n getVideoTaskStatus, videoUpdated, addVideoCreative, getVideo,\r\n } = useCommonVideoRepoMethods({\r\n repository: folderRepository,\r\n videoRepository,\r\n logger,\r\n i18n,\r\n });\r\n\r\n const {\r\n folderPathTree,\r\n loadFolderPathTreeItem,\r\n loadMoreFolderPathTreeItem,\r\n initializeFolderPathTree,\r\n reloadFolderPathTreeItem,\r\n } = useFolderPathTree({ repository: folderRepository, defaultPerfMetricDateRange });\r\n\r\n const totalAssetCount =\r\n totalItemCount.current.ImageAssetsCount + totalItemCount.current.VideoAssetsCount;\r\n const totalSubfoldersCount = totalItemCount.current.SubFoldersCount;\r\n\r\n const loadDataArgs = useCallback(({\r\n searchText,\r\n minImageWidth,\r\n minImageHeight,\r\n dateAddedDateRange,\r\n sortBy,\r\n importSource,\r\n assetSources,\r\n assetsToLoadForSubfolders = 1,\r\n assetTypeFilter,\r\n minVideoDuration,\r\n maxVideoDuration,\r\n isGlobalSearch = false,\r\n includeParentHierarchy = false,\r\n count,\r\n topRated,\r\n } = {}) => {\r\n return loadFolderArgs({\r\n filterSettings: {\r\n searchTerm: searchText,\r\n minWidth: minImageWidth,\r\n minHeight: minImageHeight,\r\n dateAddedStart: dateAddedDateRange && dateAddedDateRange.start,\r\n dateAddedEnd: dateAddedDateRange && dateAddedDateRange.end,\r\n importSource,\r\n assetSources,\r\n assetTypeFilter,\r\n minVideoDuration,\r\n maxVideoDuration,\r\n isGlobalSearch,\r\n topRated,\r\n },\r\n sortBy,\r\n assetsToLoadForSubfolders,\r\n includeParentHierarchy,\r\n count,\r\n });\r\n }, [loadFolderArgs]);\r\n\r\n const loadDataImpl = useCallback(({\r\n useDateRange,\r\n searchText,\r\n minImageWidth,\r\n minImageHeight,\r\n dateAddedDateRange,\r\n sortBy,\r\n importSource,\r\n assetSources,\r\n assetsToLoadForSubfolders = 1,\r\n assetTypeFilter,\r\n minVideoDuration,\r\n maxVideoDuration,\r\n isGlobalSearch = false,\r\n includeParentHierarchy = false,\r\n hasPerfData = false,\r\n includeSubfolders = true,\r\n count,\r\n topRated,\r\n pageName,\r\n perfMarker,\r\n } = {}) => {\r\n const loadFolderDataFunc = useDateRange ? loadFolderDataInDateRange : loadFolderData;\r\n return loadFolderDataFunc({\r\n filterSettings: {\r\n searchTerm: searchText,\r\n minWidth: minImageWidth,\r\n minHeight: minImageHeight,\r\n dateAddedStart: dateAddedDateRange && dateAddedDateRange.start,\r\n dateAddedEnd: dateAddedDateRange && dateAddedDateRange.end,\r\n importSource,\r\n assetSources,\r\n assetTypeFilter,\r\n minVideoDuration,\r\n maxVideoDuration,\r\n isGlobalSearch,\r\n hasPerfData,\r\n topRated,\r\n },\r\n perfMarker,\r\n sortBy,\r\n assetsToLoadForSubfolders,\r\n includeParentHierarchy,\r\n count,\r\n includeSubfolders,\r\n pageName,\r\n });\r\n }, [loadFolderData, loadFolderDataInDateRange]);\r\n\r\n const loadData = useCallback(args => loadDataImpl({ ...args, useDateRange: false }), [loadDataImpl]);\r\n const loadDataInDateRange = useCallback(args => loadDataImpl({ ...args, useDateRange: true }), [loadDataImpl]);\r\n\r\n const loadPerfTimeSeriesDataImpl = useCallback((\r\n perfTimeSeriesParams,\r\n {\r\n searchText,\r\n minImageWidth,\r\n minImageHeight,\r\n dateAddedDateRange,\r\n importSource,\r\n assetSources,\r\n // assetTypeFilter,\r\n minVideoDuration,\r\n maxVideoDuration,\r\n isGlobalSearch = false,\r\n hasPerfData = false,\r\n topRated,\r\n } = {}\r\n ) => {\r\n return loadPerfTimeSeriesData({\r\n perfTimeSeriesParams,\r\n filterSettings: {\r\n searchTerm: searchText,\r\n minWidth: minImageWidth,\r\n minHeight: minImageHeight,\r\n dateAddedStart: dateAddedDateRange && dateAddedDateRange.start,\r\n dateAddedEnd: dateAddedDateRange && dateAddedDateRange.end,\r\n importSource,\r\n assetSources,\r\n // assetTypeFilter,\r\n minVideoDuration,\r\n maxVideoDuration,\r\n isGlobalSearch,\r\n hasPerfData,\r\n topRated,\r\n },\r\n });\r\n }, [loadPerfTimeSeriesData]);\r\n\r\n const uploadImageByUrl = useCallback(({ imageUrl, folderId, sourceType }) => {\r\n return uploadImageByUrlToFolder({ imageUrl, folderId, sourceType }).tap(() => {\r\n logger.logTrace('DataService: image is uploaded by Url to folder', { sourceType, imageUrl, folderId });\r\n });\r\n }, [logger, uploadImageByUrlToFolder]);\r\n\r\n const uploadImage = useCallback(({\r\n imageData,\r\n updateCurrentProgress = null,\r\n name = '',\r\n folderId = null,\r\n supportUpscale,\r\n }) => {\r\n return uploadImageToFolder({\r\n imageData,\r\n updateCurrentProgress,\r\n imageName: name,\r\n folderId,\r\n supportUpscale,\r\n }).tap(() => {\r\n logger.logTrace('DataService: image is uploaded to folder');\r\n });\r\n }, [logger, uploadImageToFolder]);\r\n\r\n const uploadVideo = useCallback(({\r\n fileObject,\r\n updateCurrentProgress = null,\r\n name = '',\r\n folderId = null,\r\n perfMarker = null,\r\n }) => {\r\n return uploadVideoToFolder({\r\n fileObject,\r\n updateCurrentProgress,\r\n name,\r\n folderId,\r\n perfMarker,\r\n }).tap(() => {\r\n logger.logTrace('DataService: video is uploaded to folder');\r\n });\r\n }, [logger, uploadVideoToFolder]);\r\n\r\n const uploadVideoByUrl = useCallback(({\r\n videoUrl,\r\n name = '',\r\n folderId = null,\r\n }) => {\r\n return postVideoByUrl({\r\n videoUrl,\r\n name,\r\n folderId,\r\n }).tap(() => {\r\n logger.logTrace('DataService: video is uploaded by Url to folder');\r\n });\r\n }, [logger, postVideoByUrl]);\r\n\r\n const uploadStockImage = useCallback(({ stockImageId, folderId }) => {\r\n return uploadStockImageToFolder({ stockImageId, folderId }).tap(() => {\r\n logger.logTrace('DataService: stock image is uploaded to folder');\r\n });\r\n }, [logger, uploadStockImageToFolder]);\r\n\r\n const uploadInvestImage = useCallback(({ investImageId, imageSrc, folderId }) => {\r\n return uploadInvestImageToFolder({ investImageId, imageSrc, folderId }).tap(() => {\r\n logger.logTrace('DataService: invest image is uploaded to folder');\r\n });\r\n }, [logger, uploadInvestImageToFolder]);\r\n\r\n const uploadInvestVideo = useCallback(({\r\n investVideoId, videoSrc, description, folderId,\r\n }) => {\r\n return uploadInvestVideoToFolder({\r\n investVideoId, videoSrc, description, folderId,\r\n }).tap(() => {\r\n logger.logTrace('DataService: invest video is uploaded to folder');\r\n });\r\n }, [logger, uploadInvestVideoToFolder]);\r\n\r\n const contextVal = useMemo(\r\n () => ({\r\n assets,\r\n totalAssetCount,\r\n totalSubfoldersCount,\r\n // load first page, with filters and sortby\r\n loadData,\r\n loadDataArgs,\r\n loadDataInDateRange,\r\n // reload images with previous filters\r\n reloadData: reloadFolders,\r\n reloadDataInDataRange: reloadFoldersInDateRange,\r\n // load more, with previous filters/sort\r\n loadMoreData: loadMoreFolderData,\r\n loadMoreDataInDateRange: loadMoreFolderDataInDateRange,\r\n getImageById, // if it's not cached, send a request (deep linking)\r\n perfTimeSeriesData,\r\n loadPerfTimeSeriesData: loadPerfTimeSeriesDataImpl,\r\n\r\n // get image cropping tasks status\r\n imageCroppingTasks,\r\n getImageCroppingTaskStatus,\r\n croppingTaskUpdated,\r\n\r\n // get video tasks status\r\n getVideoTaskStatus,\r\n videoUpdated,\r\n addVideoCreative,\r\n getVideo,\r\n\r\n renameAsset,\r\n deleteAsset,\r\n cropImage,\r\n uploadVideo,\r\n cancelPendingVideoUpload,\r\n uploadVideoByUrl,\r\n uploadImage,\r\n uploadImageByUrl,\r\n addCreative,\r\n folders,\r\n folderPath,\r\n navigateIntoFolder,\r\n navigateToFolderInPath,\r\n navigateIntoFolderItem,\r\n navigateIntoRootFolder,\r\n createFolder,\r\n createFolderBulk,\r\n deleteFolder,\r\n renameFolder,\r\n currentFolder,\r\n currentFolderId,\r\n loadAssetsUnderFolder,\r\n uploadStockImage,\r\n uploadInvestImage,\r\n uploadInvestVideo,\r\n reloadFolders,\r\n batchDelete,\r\n batchMove,\r\n resetFolderData,\r\n dataOwnerPageName,\r\n generateImagesByAI,\r\n addImageWithBaseIdToFolder,\r\n\r\n folderPathTree,\r\n loadFolderPathTreeItem,\r\n loadMoreFolderPathTreeItem,\r\n initializeFolderPathTree,\r\n reloadFolderPathTreeItem,\r\n }),\r\n [assets, totalAssetCount, totalSubfoldersCount, loadData, loadDataArgs, loadDataInDateRange, reloadFolders, reloadFoldersInDateRange, loadMoreFolderData, loadMoreFolderDataInDateRange, getImageById, perfTimeSeriesData, loadPerfTimeSeriesDataImpl, imageCroppingTasks, getImageCroppingTaskStatus, croppingTaskUpdated, getVideoTaskStatus, videoUpdated, addVideoCreative, getVideo, renameAsset, deleteAsset, cropImage, uploadVideo, cancelPendingVideoUpload, uploadVideoByUrl, uploadImage, uploadImageByUrl, addCreative, folders, folderPath, navigateIntoFolder, navigateToFolderInPath, navigateIntoFolderItem, navigateIntoRootFolder, createFolder, createFolderBulk, deleteFolder, renameFolder, currentFolder, currentFolderId, loadAssetsUnderFolder, uploadStockImage, uploadInvestImage, uploadInvestVideo, batchDelete, batchMove, resetFolderData, dataOwnerPageName, generateImagesByAI, folderPathTree, loadFolderPathTreeItem, loadMoreFolderPathTreeItem, initializeFolderPathTree, reloadFolderPathTreeItem, addImageWithBaseIdToFolder]\r\n );\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nAssetWithFoldersDataServiceProvider.propTypes = {\r\n children: PropTypes.node.isRequired,\r\n imageRepository: PropTypes.shape({\r\n getImage: PropTypes.func,\r\n getImageCroppingTaskStatus: PropTypes.func,\r\n renameImage: PropTypes.func,\r\n deleteImage: PropTypes.func,\r\n updateCropSettings: PropTypes.func,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n logError: PropTypes.func,\r\n }).isRequired,\r\n aigcRepository: PropTypes.shape({}),\r\n folderRepository: PropTypes.shape({}).isRequired,\r\n videoRepository: PropTypes.shape({}).isRequired,\r\n allowedAssetType: PropTypes.string,\r\n i18n: PropTypes.shape({}).isRequired,\r\n perfMetricDateRange: PropTypes.shape({}),\r\n defaultPerfMetricDateRange: PropTypes.shape({}),\r\n};\r\n\r\nAssetWithFoldersDataServiceProvider.defaultProps = {\r\n aigcRepository: null,\r\n allowedAssetType: null,\r\n perfMetricDateRange: null,\r\n defaultPerfMetricDateRange: null,\r\n};\r\n\r\nexport const useAsssetWithFoldersDataService = () => useContext(AssetWithFoldersDataServiceContext);\r\n","import { useState, useCallback } from 'react';\r\nimport { Promise } from 'bluebird';\r\n\r\nimport { CSMLSortBy, DEFAULT_PAGE_SIZE, ROOT_FOLDER_ID } from '../../model';\r\n\r\n/**\r\n * floderPathTree:\r\n * [{\r\n * folderId,\r\n * folderName,\r\n * subFolders: [{}] // recursive\r\n * subFoldersCount,\r\n * }]\r\n *\r\n */\r\n\r\nexport const useFolderPathTree = ({ repository, defaultPerfMetricDateRange }) => {\r\n const [folderPathTree, setFolderPathTree] = useState([]);\r\n\r\n const updateFolderPathTree = useCallback((currentFolderPathTree, folderIdArr, subFoldersArr, totalSubfoldersCount = [], reload = false) => {\r\n const recursiveUpdate = items => items.map((item) => {\r\n if (folderIdArr.includes(item.folderId)) {\r\n const index = folderIdArr.indexOf(item.folderId);\r\n if (reload) {\r\n return {\r\n ...item,\r\n subFolders: subFoldersArr[index],\r\n subFoldersCount: totalSubfoldersCount[index],\r\n };\r\n }\r\n const newSubFloders = [...item.subFolders, ...subFoldersArr[index]];\r\n return {\r\n ...item,\r\n subFolders: newSubFloders,\r\n };\r\n }\r\n return {\r\n ...item,\r\n subFolders: item.subFolders.length > 0 ? recursiveUpdate(item.subFolders) : item.subFolders,\r\n };\r\n });\r\n\r\n return recursiveUpdate(currentFolderPathTree);\r\n }, []);\r\n\r\n const loadFolderPathTreeItemImp = useCallback(({\r\n folderId,\r\n skip,\r\n // eslint-disable-next-line arrow-body-style\r\n }) => {\r\n return repository.getFolderData({\r\n perfMetricDateRange: defaultPerfMetricDateRange,\r\n sortBy: CSMLSortBy.ImageName,\r\n skip: skip || 0,\r\n count: DEFAULT_PAGE_SIZE,\r\n folderId,\r\n includeAssets: false,\r\n includeSubfolders: true,\r\n includeParentHierarchy: true,\r\n assetsToLoadForSubfolders: false,\r\n isAssetPickerScenario: false,\r\n withBIData: false,\r\n }).then((res) => {\r\n const { folder } = res;\r\n const newFolders = (folder.subfolders || []).map(subFolder => ({\r\n folderId: subFolder.folderId,\r\n folderName: subFolder.folderName,\r\n subFolders: [],\r\n subFoldersCount: subFolder.itemCount.SubFoldersCount,\r\n parentHierarchy: subFolder.parentHierarchy,\r\n }));\r\n const totalSubfoldersCount = folder.itemCount.SubFoldersCount || 0;\r\n return {\r\n subFolders: newFolders,\r\n totalSubfoldersCount,\r\n };\r\n });\r\n }, [defaultPerfMetricDateRange, repository]);\r\n\r\n const initializeFolderPathTree = useCallback(() => loadFolderPathTreeItemImp({\r\n folderId: ROOT_FOLDER_ID,\r\n }).then(({\r\n subFolders,\r\n totalSubfoldersCount,\r\n }) => {\r\n setFolderPathTree([{\r\n folderId: ROOT_FOLDER_ID,\r\n subFolders,\r\n subFoldersCount: totalSubfoldersCount,\r\n folderName: 'Root',\r\n parentHierarchy: [],\r\n }]);\r\n }), [loadFolderPathTreeItemImp]);\r\n\r\n const loadFolderPathTreeItem = useCallback(folderId => loadFolderPathTreeItemImp({\r\n folderId,\r\n }).then(({\r\n subFolders,\r\n }) => {\r\n setFolderPathTree(currentFolderPathTree => updateFolderPathTree(currentFolderPathTree, [folderId], [subFolders]));\r\n }), [loadFolderPathTreeItemImp, updateFolderPathTree]);\r\n\r\n const loadMoreFolderPathTreeItem = useCallback((folderId, currentFolderCount) => loadFolderPathTreeItemImp({\r\n folderId,\r\n skip: currentFolderCount,\r\n }).then(({\r\n subFolders,\r\n }) => {\r\n setFolderPathTree(currentFolderPathTree => updateFolderPathTree(currentFolderPathTree, [folderId], [subFolders]));\r\n }), [loadFolderPathTreeItemImp, updateFolderPathTree]);\r\n\r\n const reloadFolderPathTreeItem = useCallback(folderIdArr => Promise.all(folderIdArr.map(folderId => loadFolderPathTreeItemImp({\r\n folderId,\r\n }).then(({\r\n subFolders,\r\n totalSubfoldersCount,\r\n }) => ({\r\n subFolders, totalSubfoldersCount,\r\n })))).then((result) => {\r\n const subFoldersArr = result.map(({ subFolders }) => subFolders);\r\n const totalSubfoldersCountArr = result.map(({ totalSubfoldersCount }) => totalSubfoldersCount);\r\n setFolderPathTree(currentFolderPathTree => updateFolderPathTree(currentFolderPathTree, folderIdArr, subFoldersArr, totalSubfoldersCountArr, true));\r\n }), [loadFolderPathTreeItemImp, updateFolderPathTree]);\r\n\r\n return {\r\n folderPathTree,\r\n loadFolderPathTreeItem,\r\n loadMoreFolderPathTreeItem,\r\n initializeFolderPathTree,\r\n reloadFolderPathTreeItem,\r\n };\r\n};\r\n","/* istanbul ignore file */\r\n// ut test has been covered by other hook files\r\nimport React from 'react';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport _ from 'underscore';\r\n\r\nimport {\r\n AssetWithFoldersDataServiceProvider,\r\n useAsssetWithFoldersDataService,\r\n} from './asset-with-folders-data-service';\r\n\r\nexport const useAdsStudioServices = useAsssetWithFoldersDataService;\r\n\r\nexport const withAdsStudioServicesConsumer = (Comp, pickedPropNames) => {\r\n const CompWithService = (props) => {\r\n const dataService = useAdsStudioServices();\r\n // explicitly pick these props to keep pages' props clean\r\n let pickedProps = props;\r\n if (pickedPropNames) {\r\n pickedProps = _.pick(props, pickedPropNames);\r\n }\r\n return ();\r\n };\r\n\r\n hoistNonReactStatics(CompWithService, Comp);\r\n\r\n return CompWithService;\r\n};\r\n\r\nexport { AssetWithFoldersDataServiceProvider };\r\nexport { useFolders, getAssetTypeToFetch } from './use-folders';\r\nexport { useAIGeneratedImages } from './use-ai-generated-images';\r\nexport { useFolderPathTree } from './use-folder-path-tree';\r\n\r\n// todo: copilot depends on serverContext, should be move to cmui-shell package\r\n// export { withCopilotDataServiceLoaded } from './copilot-data-service';\r\n","/*\r\n // an AssetWindow is a window of assets, which is a subset of the assets in a repository\r\n // use this to keep track of the loading status of each window\r\n // usually, each call to repository.loadAssets will load a window of assets\r\n type AssetWindow = {\r\n windowIndex: number,\r\n windowSize: number,\r\n // status: string,\r\n ... // any other properties as needed, which will be passed to the repository\r\n }\r\n*/\r\n\r\n//\r\nexport const WindowStatus = {\r\n loading: 'loading',\r\n loaded: 'loaded',\r\n error: 'error',\r\n};\r\n","import _ from 'underscore';\r\n\r\nimport { WindowStatus } from './asset-window';\r\n\r\n// -1 means the total count is unknown (maybe infinite), so the windows count is unknown too\r\nconst INDETERMINATE = -1; // indeterminate\r\n// -2 means the total count is not set yet\r\nconst UNSET = -2;\r\n\r\nconst MAX_ITEM_COUNT = 0x7FFFFFFF;\r\n\r\n// the loading windows manager is used to keep track which pages are loading/loaded or not loaded yet\r\nexport class AssetsWindowManager {\r\n constructor(windowSize) {\r\n this.windowSize = windowSize;\r\n }\r\n\r\n resetWindows() {\r\n this.assetWindows = []; // array of WindowStatus\r\n this.totalAssetCount = UNSET;\r\n this.windowsCount = UNSET;\r\n }\r\n\r\n setTotalItemCount(totalAssetCount) {\r\n if (this.totalAssetCount !== UNSET) {\r\n return;\r\n }\r\n this.totalAssetCount = totalAssetCount >= 0 ? totalAssetCount : INDETERMINATE;\r\n this.windowsCount = totalAssetCount >= 0 && this.windowSize > 0 ? Math.ceil(totalAssetCount / this.windowSize) : INDETERMINATE;\r\n }\r\n\r\n // is any window loading?\r\n get isLoading() {\r\n const ret = _.some(this.assetWindows, w => w === WindowStatus.loading);\r\n return ret;\r\n }\r\n\r\n // all windows are loaded?\r\n get isCompleted() {\r\n // if the total count is not set, it means the loading is not started yet\r\n if (this.totalAssetCount === UNSET) {\r\n return false;\r\n }\r\n\r\n // if the total count is indeterminate, it will never be completed\r\n if (this.totalAssetCount === INDETERMINATE || this.windowsCount === INDETERMINATE) {\r\n return false;\r\n }\r\n\r\n // check status of all windows\r\n for (let i = 0; i < this.windowsCount; i += 1) {\r\n if (!this.assetWindows[i] || this.assetWindows[i] !== WindowStatus.loaded) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n getTotalAssetCount() {\r\n if (this.totalAssetCount === UNSET || this.totalAssetCount === INDETERMINATE) {\r\n return MAX_ITEM_COUNT;\r\n }\r\n return this.totalAssetCount || 0;\r\n }\r\n\r\n // return AssetWindow object, which contains the windowIndex of the next window to load\r\n // and if all windows are loaded, it will return -1\r\n getNextUnloadedWindow() {\r\n // the initial page load, item count is returned with the initial page data\r\n if (this.totalAssetCount === UNSET) {\r\n this.assetWindows = [WindowStatus.loading];\r\n return { windowIndex: 0, windowSize: this.windowSize };\r\n }\r\n\r\n // find the first unloaded window\r\n let windowIndex = -1;\r\n const length = this.windowsCount >= 0 ? this.windowsCount : this.assetWindows.length;\r\n for (let i = 0; i < length; i += 1) {\r\n // for error windows, retry them\r\n if (!this.assetWindows[i] || this.assetWindows[i] === WindowStatus.error) {\r\n this.assetWindows[i] = WindowStatus.loading;\r\n windowIndex = i;\r\n break;\r\n }\r\n }\r\n\r\n if (windowIndex !== -1) {\r\n return { windowIndex, windowSize: this.windowSize };\r\n }\r\n\r\n // it's maybe a infinite list\r\n if (this.totalAssetCount === INDETERMINATE) {\r\n // add a new loading window\r\n this.assetWindows.push(WindowStatus.loading);\r\n return { windowIndex: this.assetWindows.length - 1, windowSize: this.windowSize };\r\n }\r\n\r\n // no more windows to load\r\n return { windowIndex: -1, windowSize: this.windowSize };\r\n }\r\n\r\n // paremeter is the window object and status to set\r\n setWindowStatus({ windowIndex }, status) {\r\n this.assetWindows[windowIndex] = status;\r\n }\r\n}\r\n\r\n// compose multiple AssetsWindowManager for multiple sources\r\nexport class SequenceAssetsWindowManager {\r\n // sourceNames is an array of source names, like ['assetlibrary', 'stock']\r\n constructor(windowSize, sourceNames) {\r\n this.windowSize = windowSize;\r\n this.sourceNames = sourceNames;\r\n this.winMgrList = _.map(sourceNames, (sourceName) => {\r\n const mgr = new AssetsWindowManager(windowSize);\r\n mgr.sourceName = sourceName;\r\n return mgr;\r\n });\r\n }\r\n\r\n resetWindows() {\r\n _.each(this.winMgrList, (mgr) => {\r\n mgr.resetWindows();\r\n });\r\n }\r\n\r\n setTotalItemCount(totalAssetCount, winObj) {\r\n const { sourceName } = winObj;\r\n const mgr = _.find(this.winMgrList, { sourceName });\r\n if (mgr) {\r\n mgr.setTotalItemCount(totalAssetCount);\r\n }\r\n }\r\n\r\n get isLoading() {\r\n const ret = _.some(this.winMgrList, mgr => mgr.isLoading);\r\n return ret;\r\n }\r\n\r\n get isCompleted() {\r\n const ret = _.every(this.winMgrList, mgr => mgr.isCompleted);\r\n return ret;\r\n }\r\n\r\n getTotalAssetCount() {\r\n let count = 0;\r\n for (let i = 0; i < this.winMgrList.length; i += 1) {\r\n const cnt = this.winMgrList[i].totalAssetCount;\r\n if (cnt === INDETERMINATE || cnt === UNSET) {\r\n return MAX_ITEM_COUNT;\r\n }\r\n count += cnt || 0;\r\n }\r\n return count;\r\n }\r\n\r\n getNextUnloadedWindow() {\r\n // find the first incomplete window\r\n const winMgr = _.find(this.winMgrList, mgr => !mgr.isCompleted);\r\n if (winMgr) {\r\n const { windowIndex } = winMgr.getNextUnloadedWindow();\r\n //\r\n let indexOffset = 0; // sum of previous windows' totalAssetCount\r\n for (let i = 0; i < this.winMgrList.length; i += 1) {\r\n if (this.winMgrList[i] === winMgr) {\r\n break;\r\n }\r\n indexOffset += this.winMgrList[i].totalAssetCount;\r\n }\r\n // append sourceName to the window object\r\n return {\r\n windowIndex,\r\n windowSize: this.windowSize,\r\n sourceName: winMgr.sourceName,\r\n indexOffset, // sum of previous windows' totalAssetCount\r\n };\r\n }\r\n return { windowIndex: -1, windowSize: this.windowSize };\r\n }\r\n\r\n setWindowStatus(winObj, status) {\r\n const { sourceName } = winObj;\r\n const mgr = _.find(this.winMgrList, { sourceName });\r\n if (mgr) {\r\n mgr.setWindowStatus(winObj, status);\r\n }\r\n }\r\n\r\n getAssetCountBySource() {\r\n const ret = {};\r\n _.each(this.winMgrList, (mgr) => {\r\n ret[mgr.sourceName] = mgr.totalAssetCount;\r\n });\r\n return ret;\r\n }\r\n}\r\n","import _ from 'underscore';\r\n\r\nexport const AssetsReducerActionType = {\r\n SetAssetsData: 'ACTION_TYPE_SET_ASSETS_DATA',\r\n AddAssetsData: 'ACTION_TYPE_ADD_ASSETS_DATA',\r\n ResetAssetsData: 'ACTION_TYPE_RESET_ASSETS_DATA',\r\n RenameAssetData: 'ACTION_TYPE_RENAME_ASSET_DATA',\r\n};\r\n\r\nexport const AssetsReducerActions = {\r\n setAssetsData: ({\r\n assets, ...rest\r\n }) => ({\r\n actionType: AssetsReducerActionType.SetAssetsData,\r\n assets,\r\n ...rest,\r\n }),\r\n\r\n addAssetsData: ({\r\n assets, windowIndex, windowSize, ...rest\r\n }) => ({\r\n actionType: AssetsReducerActionType.AddAssetsData,\r\n assets,\r\n pageIndex: windowIndex,\r\n pageSize: windowSize,\r\n ...rest,\r\n }),\r\n\r\n resetAssetData: () => ({\r\n actionType: AssetsReducerActionType.ResetAssetsData,\r\n }),\r\n\r\n renameAssetData: ({\r\n assetId, name,\r\n }) => ({\r\n actionType: AssetsReducerActionType.RenameAssetData,\r\n assetId,\r\n name,\r\n }),\r\n};\r\n\r\nexport const InitialReducerState = {\r\n assets: [],\r\n};\r\n\r\nexport const defaultReducer = (state, action) => {\r\n const { actionType, ...actionData } = action || {};\r\n switch (actionType) {\r\n case AssetsReducerActionType.SetAssetsData:\r\n {\r\n const { assets, ...rest } = actionData;\r\n const newAssets = [...assets];\r\n return { ...state, ...rest, assets: newAssets };\r\n }\r\n\r\n case AssetsReducerActionType.AddAssetsData:\r\n {\r\n const {\r\n assets, pageIndex, pageSize, ...rest\r\n } = actionData;\r\n const newAssets = [...state.assets];\r\n const startIdx = pageIndex * pageSize;\r\n _.forEach(assets, (asset, idx) => {\r\n newAssets[startIdx + idx] = asset;\r\n });\r\n return { ...state, ...rest, assets: newAssets };\r\n }\r\n\r\n case AssetsReducerActionType.ResetAssetsData:\r\n return InitialReducerState;\r\n\r\n case AssetsReducerActionType.RenameAssetData:\r\n {\r\n const { assetId, name } = actionData;\r\n const idx = _.findIndex(state.assets, asset => asset.id === assetId);\r\n if (idx >= 0 && state.assets[idx].name !== name) {\r\n const newAsset = { ...state.assets[idx], name };\r\n const newAssets = [...state.assets];\r\n newAssets.splice(idx, 1, newAsset);\r\n return { ...state, assets: newAssets };\r\n }\r\n return state;\r\n }\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\n// used with SequenceAssetsWindowManager, which has sourceName and indexOffset in the window object\r\nexport const sequenceWindowReducer = (state, action) => {\r\n const { actionType, ...actionData } = action || {};\r\n switch (actionType) {\r\n case AssetsReducerActionType.AddAssetsData:\r\n {\r\n const {\r\n assets, pageIndex, pageSize, indexOffset = 0, ...rest // sourceName,\r\n } = actionData;\r\n const newAssets = [...state.assets];\r\n const startIdx = indexOffset + (pageIndex * pageSize);\r\n _.forEach(assets, (asset, idx) => {\r\n newAssets[startIdx + idx] = asset;\r\n });\r\n return { ...state, ...rest, assets: newAssets };\r\n }\r\n\r\n default:\r\n return defaultReducer(state, action);\r\n }\r\n};\r\n","import Promise from 'bluebird';\r\nimport { useCallback, useReducer, useRef } from 'react';\r\n\r\nimport { WindowStatus } from './asset-window';\r\nimport { AssetsWindowManager } from './assets-window-manager';\r\nimport { AssetsReducerActions } from './assets-reducer-base';\r\n\r\n/*\r\n @reducer\r\n reducer function, support actions defined in AssetsReducerActions, and its state structure is transparent to this hook\r\n\r\n @reducerInitialArg\r\n initial state for reducer\r\n\r\n @repository\r\n repository object with following methods:\r\n - loadAssets: (...filters, ...params) => Promise<{ assets, totalItemCount }>\r\n filters : a filter object, which will be cached in this hook, and it's internal data is transparent to this hook\r\n params : additional parameters for loading assets, which will be passed to loadAssets\r\n it contains at least windowIndex and windowSize\r\n both filters and params will be passed to repository without any modification\r\n */\r\nexport const useAssetsServiceBase = ({\r\n reducer,\r\n reducerInitialArg,\r\n repository,\r\n pageSize,\r\n assetWindowManager,\r\n}) => {\r\n const filtersRef = useRef(null);\r\n const loadingWindowManagerRef = useRef(assetWindowManager || new AssetsWindowManager(pageSize));\r\n\r\n const [assetState, dispatch] = useReducer(reducer, reducerInitialArg || null);\r\n\r\n const uploadImage = useCallback(({\r\n imageData,\r\n updateCurrentProgress = null,\r\n name = '',\r\n folderId = null,\r\n supportUpscale,\r\n }) => repository.uploadImageToFolder({\r\n imageData,\r\n updateCurrentProgress,\r\n imageName: name,\r\n folderId,\r\n supportUpscale,\r\n }), [repository]);\r\n\r\n /**\r\n * Load assets\r\n * @param {Object} filters\r\n * @param {Object} params\r\n * @returns {Promise}\r\n */\r\n const loadAssets = useCallback((filters, ...params) => {\r\n // reset loading status\r\n loadingWindowManagerRef.current.resetWindows();\r\n const winObj = loadingWindowManagerRef.current.getNextUnloadedWindow();\r\n\r\n // keep filter reference to use in loadMoreAssets\r\n filtersRef.current = filters;\r\n\r\n const ret = repository.loadAssets({\r\n ...filters,\r\n ...params,\r\n ...winObj,\r\n }).then(({ assets, totalItemCount, ...rest }) => {\r\n // update loading status\r\n loadingWindowManagerRef.current.setTotalItemCount(totalItemCount, winObj);\r\n loadingWindowManagerRef.current.setWindowStatus(winObj, WindowStatus.loaded);\r\n // save assets to reducer state\r\n dispatch(AssetsReducerActions.setAssetsData({ assets, ...rest }));\r\n }).catch((error) => {\r\n // upload loading status\r\n loadingWindowManagerRef.current.setWindowStatus(winObj, WindowStatus.error);\r\n throw error;\r\n });\r\n\r\n return ret;\r\n }, [repository]);\r\n\r\n /**\r\n * Load more assets\r\n * @param {Object} params\r\n * @returns {Promise}\r\n */\r\n const loadMoreAssets = useCallback((params) => {\r\n const winObj = loadingWindowManagerRef.current.getNextUnloadedWindow();\r\n\r\n // no more window to load\r\n if (winObj.windowIndex < 0) {\r\n return Promise.resolve({ noMoreData: true });\r\n }\r\n\r\n const ret = repository.loadAssets({\r\n ...filtersRef.current,\r\n ...params,\r\n ...winObj,\r\n }).then(({ assets, totalItemCount, ...rest }) => {\r\n loadingWindowManagerRef.current.setTotalItemCount(totalItemCount, winObj);\r\n loadingWindowManagerRef.current.setWindowStatus(winObj, WindowStatus.loaded);\r\n // save assets to reducer state\r\n dispatch(AssetsReducerActions.addAssetsData({\r\n assets, ...winObj, ...rest,\r\n }));\r\n }).catch((error) => {\r\n // upload loading status\r\n loadingWindowManagerRef.current.setWindowStatus(winObj, WindowStatus.error);\r\n throw error;\r\n });\r\n\r\n return ret;\r\n }, [repository]);\r\n\r\n /**\r\n * Reload assets\r\n * @param {Object} params\r\n * @returns {Promise}\r\n */\r\n const reloadAssets = useCallback((params) => {\r\n const ret = loadAssets(filtersRef.current, params);\r\n return ret;\r\n }, [loadAssets]);\r\n\r\n /**\r\n * Reset assets data\r\n */\r\n const resetAssetsData = useCallback(() => {\r\n dispatch(AssetsReducerActions.resetAssetData());\r\n }, []);\r\n\r\n /**\r\n * Rename asset\r\n */\r\n const renameAsset = useCallback(({\r\n assetId,\r\n folderAssetType,\r\n name,\r\n }) => {\r\n const ret = repository.renameAsset({\r\n assetId,\r\n folderAssetType,\r\n name,\r\n }).then(() => {\r\n dispatch(AssetsReducerActions.renameAssetData({\r\n assetId,\r\n name,\r\n }));\r\n });\r\n return ret;\r\n }, [repository]);\r\n\r\n return {\r\n ...assetState,\r\n uploadImage,\r\n loadAssets,\r\n loadMoreAssets,\r\n reloadAssets,\r\n resetAssetsData,\r\n renameAsset,\r\n //\r\n totalAssetCount: loadingWindowManagerRef.current.getTotalAssetCount(),\r\n isLoading: loadingWindowManagerRef.current.isLoading,\r\n isCompleted: loadingWindowManagerRef.current.isCompleted,\r\n\r\n // for debug/logging only\r\n // loadingWindowManagerRef,\r\n // filtersRef,\r\n };\r\n};\r\n","import { useRef } from 'react';\r\n\r\nimport { DEFAULT_PAGE_SIZE } from '../../model';\r\n\r\nimport { useAssetsServiceBase } from './base/use-assets-service-base';\r\nimport { InitialReducerState, defaultReducer, sequenceWindowReducer } from './base/assets-reducer-base';\r\nimport { SequenceAssetsWindowManager } from './base/assets-window-manager';\r\n\r\nexport const useBasicAssetsService = ({ repository, pageSize = DEFAULT_PAGE_SIZE }) => {\r\n const service = useAssetsServiceBase({\r\n reducer: defaultReducer,\r\n reducerInitialArg: InitialReducerState,\r\n repository,\r\n pageSize,\r\n });\r\n\r\n return service;\r\n};\r\n\r\nexport const useMultiSourceAssetsService = ({ repository, pageSize = DEFAULT_PAGE_SIZE, dataSourceNames }) => {\r\n const assetWindowManagerRef = useRef(new SequenceAssetsWindowManager(pageSize, dataSourceNames));\r\n const service = useAssetsServiceBase({\r\n reducer: sequenceWindowReducer,\r\n reducerInitialArg: InitialReducerState,\r\n repository,\r\n pageSize,\r\n assetWindowManager: assetWindowManagerRef.current,\r\n });\r\n\r\n return {\r\n ...service,\r\n getAssetCountBySource: () => assetWindowManagerRef.current.getAssetCountBySource(),\r\n };\r\n};\r\n","/* eslint-disable arrow-body-style */\r\nimport { useCallback, useState } from 'react';\r\nimport { Promise } from 'bluebird';\r\nimport { get } from 'underscore';\r\nimport { CSMLAssetSource } from '../../model';\r\nimport { getTaskPoller } from '../task-poller';\r\n\r\nexport const useEditImageService = ({\r\n repository,\r\n logger,\r\n pollInterval = 3000,\r\n maxRetryCount = 3, // max retry count for polling task status\r\n}) => {\r\n const [imagesWithFilter, setImagesWithFilter] = useState([]);\r\n const [imagesWithFilterAndBlur, setImagesWithFilterAndBlur] = useState([]);\r\n\r\n const getImagesWithFilter = useCallback((imageUrl) => {\r\n return repository.generateImageWithSmartEffect({\r\n imageUrl,\r\n smartEffects: [{\r\n smartEffectName: 'design_ideas',\r\n smartEffectOptions: {},\r\n }],\r\n }).then((res = []) => {\r\n const filterRes = res.map(filter => ({\r\n filter: filter.Effect,\r\n url: filter.Resource,\r\n }));\r\n filterRes.unshift({\r\n url: imageUrl,\r\n filter: 'None',\r\n });\r\n setImagesWithFilter(filterRes);\r\n logger.logTrace('edit image services: get image filters successfully');\r\n return filterRes;\r\n }).catch((err) => {\r\n logger.logError('edit image services: get image filters failed', err);\r\n return [];\r\n });\r\n }, [logger, repository]);\r\n\r\n const getImagesWithFilterAndBlurImp = useCallback((imageUrl, blurLevel) => {\r\n return repository.generateImageWithSmartEffect({\r\n imageUrl,\r\n smartEffects: [{\r\n smartEffectName: 'bg_blur',\r\n smartEffectOptions: blurLevel ? {\r\n ManualBgBlurLevel: blurLevel,\r\n } : {},\r\n },\r\n {\r\n smartEffectName: 'design_ideas',\r\n smartEffectOptions: {},\r\n },\r\n ],\r\n }).then((assets = []) => {\r\n return assets;\r\n });\r\n }, [repository]);\r\n\r\n const getOriginalImageWithBlur = useCallback((imageUrl, blurLevel) => {\r\n return repository.generateImageWithSmartEffect({\r\n imageUrl,\r\n smartEffects: [{\r\n smartEffectName: 'bg_blur',\r\n smartEffectOptions: blurLevel ? {\r\n ManualBgBlurLevel: blurLevel,\r\n } : {},\r\n }],\r\n }).then((assets = []) => {\r\n return assets;\r\n });\r\n }, [repository]);\r\n\r\n const getImagesWithFilterAndBlur = useCallback((imageUrl, blurLevel) => {\r\n return Promise.all([getOriginalImageWithBlur(imageUrl, blurLevel), getImagesWithFilterAndBlurImp(imageUrl, blurLevel)]).then(([originalImageWithBlurRes, imagesWithFilterAndBlurRes]) => {\r\n const res = [...originalImageWithBlurRes, ...imagesWithFilterAndBlurRes];\r\n const imagesWithFilterAndBlurInner = res.map((asset) => {\r\n const filter = get(asset, 'Effect', '');\r\n const url = get(asset, 'Resource', '');\r\n return {\r\n filter,\r\n blur: blurLevel,\r\n url,\r\n };\r\n });\r\n setImagesWithFilterAndBlur(imagesWithFilterAndBlurInner);\r\n logger.logTrace('edit image services: get image filters and blur successfully');\r\n return imagesWithFilterAndBlurInner;\r\n });\r\n }, [getImagesWithFilterAndBlurImp, getOriginalImageWithBlur, logger]);\r\n\r\n const removeImageBackground = useCallback((imageUrl) => {\r\n return repository.removeImageBackground(imageUrl);\r\n }, [repository]);\r\n\r\n const generateImageBackground = useCallback(({\r\n prompt,\r\n imageUrl,\r\n maskSetsBase64,\r\n selectedMasks,\r\n outputImageWidth,\r\n outputImageHeight,\r\n }) => {\r\n return repository.generateImageBackground({\r\n prompt,\r\n imageUrl,\r\n maskSetsBase64,\r\n selectedMasks,\r\n outputImageWidth,\r\n outputImageHeight,\r\n }).then((res) => {\r\n const { imageUrl: newImageUrl } = res || {};\r\n logger.logTrace('edit image services: generate image background successfully', { generatedUrl: newImageUrl, prompt });\r\n return res;\r\n });\r\n }, [logger, repository]);\r\n\r\n const generateMultipleImageBackgrounds = useCallback(({\r\n prompt,\r\n imageUrl,\r\n maskSetsBase64,\r\n selectedMasks,\r\n outputImageWidth,\r\n outputImageHeight,\r\n }) => {\r\n if (!repository) {\r\n return Promise.reject(new Error());\r\n }\r\n\r\n const generateImageBackgroundsByAIPromise = () => new Promise((resolve, reject) => {\r\n // start generating task\r\n repository.generateMultipleImageBackgrounds({\r\n prompt, imageUrl, maskSetsBase64, selectedMasks, outputImageWidth, outputImageHeight,\r\n }).then((res) => {\r\n const { taskId } = res || {};\r\n\r\n if (!taskId) {\r\n resolve({\r\n prompt, images: [],\r\n });\r\n return;\r\n }\r\n\r\n // poll task status\r\n let retryCount = 0;\r\n const pollStatus = () => repository.getGenerateMultipleImageBackgroundsTaskStatus(taskId).then((taskStatus) => {\r\n // taskId, status, progress, images, isTaskDone,\r\n const { isTaskDone, ...rest } = taskStatus || {};\r\n\r\n // reset retry count if there is successfull poll\r\n retryCount = 0;\r\n\r\n if (isTaskDone) {\r\n resolve({ ...rest, prompt });\r\n }\r\n\r\n // stop polling if it's done\r\n return { isFinished: isTaskDone };\r\n }).catch((err) => {\r\n retryCount += 1;\r\n if (err.shouldRetry === false || retryCount >= maxRetryCount) { // got continuous errors\r\n reject(err);\r\n // stop polling if failed maxRetryCount times continuously\r\n return { isFinished: true };\r\n }\r\n\r\n // ignore errors and retry\r\n logger.logError(`failed to get background generation task status, retryCount: ${retryCount}, taskId: ${taskId}, prompt: ${prompt}, error: ${err.uxMessage}`);\r\n return { isFinished: false };\r\n });\r\n\r\n // start polling task status\r\n const taskPoller = getTaskPoller({ task: pollStatus, interval: pollInterval });\r\n taskPoller.start();\r\n }).catch((err) => {\r\n reject(err);\r\n });\r\n });\r\n\r\n const ret = generateImageBackgroundsByAIPromise();\r\n\r\n if (logger.monitorPromise) {\r\n return logger.monitorPromise({ promise: ret, msg: `generateMultipleImageBackgrounds, prompt: ${prompt}`, api: 'GenerateMultipleImageBackgrounds' });\r\n }\r\n return ret;\r\n }, [logger, maxRetryCount, pollInterval, repository]);\r\n\r\n const getImageSegmentations = useCallback((imageUrl) => {\r\n return repository.getImageSegmentations(imageUrl).then((res) => {\r\n logger.logTrace('edit image services: get image segmentations successfully', { originalUrl: imageUrl });\r\n return res;\r\n });\r\n }, [logger, repository]);\r\n\r\n // Save function for background change generated image\r\n const saveImageCopy = useCallback(({\r\n image,\r\n folderId = null,\r\n }) => {\r\n const imageUrl = image.url;\r\n return repository.saveImageCopy({\r\n imageUrl,\r\n folderId,\r\n sourceType: CSMLAssetSource.BackgroundChangeGenerated,\r\n }).then((res) => {\r\n logger.logTrace('edit image services: image is saved as copy', { imageUrl, folderId });\r\n return res;\r\n });\r\n }, [logger, repository]);\r\n\r\n const saveImage = useCallback(({\r\n id,\r\n type,\r\n url,\r\n }) => {\r\n return repository.saveImage({\r\n imageUrl: url,\r\n imageId: id,\r\n type,\r\n }).then((res) => {\r\n logger.logTrace('edit image services: image is saved directly', { url, id });\r\n return res;\r\n });\r\n }, [logger, repository]);\r\n\r\n const cropImage = useCallback(({ imageId, cropSettings, placementSettings }) => {\r\n return repository.cropImage({ imageId, cropSettings, placementSettings }).then(() => {\r\n logger.logTrace('edit image services: image is cropping', { imageId });\r\n });\r\n }, [logger, repository]);\r\n\r\n const getImageById = useCallback(({ imageId, isImageFittingEnabled }) => {\r\n return repository.getImageById({ imageId, isImageFittingEnabled }).then((res) => {\r\n logger.logTrace('edit image services: get image by id', { imageId });\r\n return res;\r\n });\r\n }, [logger, repository]);\r\n\r\n const uploadImageToFolder = useCallback(({\r\n imageData,\r\n folderId = null,\r\n }) => {\r\n return repository.uploadImageToFolder({\r\n imageData,\r\n folderId,\r\n });\r\n }, [repository]);\r\n\r\n const saveImageWithBaseId = useCallback(({\r\n image,\r\n baseId,\r\n folderId = null,\r\n }) => {\r\n return repository.saveImageWithBaseId({ image, baseId, folderId });\r\n }, [repository]);\r\n\r\n const uploadStockImage = useCallback(({ stockImageId, folderId }) => {\r\n return repository.uploadStockImageToFolder({ stockImageId, folderId }).tap(() => {\r\n logger.logTrace('edit image services: stock image is uploaded to folder', { stockImageId, folderId });\r\n });\r\n }, [logger, repository]);\r\n\r\n const moveImageToFolder = useCallback(({\r\n image,\r\n destFolderId,\r\n }) => {\r\n return repository.moveImageToFolder({\r\n image,\r\n destFolderId,\r\n });\r\n }, [repository]);\r\n\r\n const imageFit = useCallback(({\r\n imageUrl,\r\n placements,\r\n skipOutpainting,\r\n }) => {\r\n return repository.imageFit({\r\n imageUrl,\r\n placements,\r\n skipOutpainting,\r\n });\r\n }, [repository]);\r\n\r\n const addImageWithBaseIdToFolder = useCallback(({\r\n imageSrc, baseId, folderId, metaData,\r\n }) => {\r\n return repository.addImageWithBaseIdToFolder({\r\n imageSrc,\r\n baseId,\r\n folderId,\r\n metaData,\r\n });\r\n }, [repository]);\r\n\r\n return {\r\n getImagesWithFilter,\r\n getImagesWithFilterAndBlur,\r\n imagesWithFilter,\r\n imagesWithFilterAndBlur,\r\n removeImageBackground,\r\n generateImageBackground,\r\n generateMultipleImageBackgrounds,\r\n getImageSegmentations,\r\n saveImage,\r\n saveImageCopy,\r\n cropImage,\r\n getImageById,\r\n uploadImageToFolder,\r\n saveImageWithBaseId,\r\n uploadStockImage,\r\n moveImageToFolder,\r\n imageFit,\r\n addImageWithBaseIdToFolder,\r\n };\r\n};\r\n","import { useCallback, useMemo, useRef, useState, useEffect } from 'react';\r\nimport _ from 'underscore';\r\nimport Promise from 'bluebird';\r\n\r\nimport { checkVideosIntermediateStatus, FolderAssetType } from '../../model';\r\nimport { getTaskPoller } from '../task-poller';\r\n\r\n// below fields will be impacted along with status change\r\nconst VideoChangedFieldsWithStatusUpdate = [\r\n 'thumbnailUrl',\r\n 'url',\r\n 'width',\r\n 'height',\r\n 'durationInMS',\r\n 'status',\r\n];\r\n\r\nexport const useVideoTaskPoller = ({\r\n repository,\r\n logger,\r\n assets,\r\n interval,\r\n}) => {\r\n const latestTimestampRef = useRef(0);\r\n const [videoUpdated, setVideoUpdated] = useState({}); // sample: { 123: { .. } }\r\n const getVideoTaskStatus = useCallback((videoTasks) => {\r\n const requestTimestamp = Date.now();\r\n const videosToCheck = _.keys(videoTasks);\r\n\r\n return repository.updateVideoStatusByIds(videosToCheck).then((response) => {\r\n // if multipe requests are sent out, ensure to keep the result from the latest request\r\n let notFinishedTaskList = {};\r\n let newVideoUpdated = {};\r\n if (requestTimestamp > latestTimestampRef.current) {\r\n const responseKeys = [];\r\n\r\n response.forEach((item) => {\r\n responseKeys.push(item.id);\r\n newVideoUpdated = {\r\n ...newVideoUpdated,\r\n [item.id]: _.pick(item, VideoChangedFieldsWithStatusUpdate),\r\n };\r\n\r\n if (item && checkVideosIntermediateStatus(item)) {\r\n notFinishedTaskList = { ...notFinishedTaskList, [item.id]: item.status };\r\n }\r\n });\r\n\r\n // eslint-disable-next-line no-param-reassign\r\n latestTimestampRef.current = requestTimestamp;\r\n }\r\n\r\n setVideoUpdated(newVideoUpdated);\r\n\r\n const taskCount = Object.keys(notFinishedTaskList).length;\r\n\r\n return { totalCount: taskCount };\r\n }).catch(() => {\r\n // log and ignore the error\r\n logger.logError('Failed to get videos task status.');\r\n });\r\n }, [logger, repository]);\r\n\r\n const newVideoTasks = useRef({});\r\n const isPollerRunning = useRef(false);\r\n\r\n const currentTaskPoller = useRef(null);\r\n\r\n const startVideoTaskStatusPoller = useCallback(() => {\r\n const taskPoller = getTaskPoller({\r\n task: () => {\r\n isPollerRunning.current = true;\r\n\r\n const queryPromise = _.isEmpty(newVideoTasks.current)\r\n ? Promise.resolve({ totalCount: 0 })\r\n : getVideoTaskStatus(newVideoTasks.current);\r\n\r\n return queryPromise.then((res) => {\r\n const { totalCount } = res || {};\r\n\r\n const isFinished = totalCount === 0;\r\n\r\n if (isFinished) {\r\n isPollerRunning.current = false;\r\n }\r\n\r\n return { isFinished };\r\n });\r\n },\r\n interval,\r\n });\r\n taskPoller.start();\r\n const stopPoller = () => {\r\n taskPoller.stop();\r\n isPollerRunning.current = false;\r\n };\r\n return { stopPoller };\r\n }, [getVideoTaskStatus, interval]);\r\n\r\n useEffect(() => {\r\n newVideoTasks.current = assets ? assets.reduce((prev, asset) => {\r\n if (asset.folderAssetType === FolderAssetType.Video && checkVideosIntermediateStatus(asset)) {\r\n return { ...prev, [asset.id]: asset.status };\r\n }\r\n return prev;\r\n }, {}) : {};\r\n\r\n // start pollerif there are no running poller\r\n if (!isPollerRunning.current && !_.isEmpty(newVideoTasks.current)) {\r\n const { stopPoller } = startVideoTaskStatusPoller();\r\n currentTaskPoller.current = stopPoller;\r\n }\r\n\r\n // stop poller when component unmount.\r\n return () => {\r\n if (currentTaskPoller.current && isPollerRunning.current) {\r\n currentTaskPoller.current();\r\n }\r\n };\r\n }, [assets, startVideoTaskStatusPoller]);\r\n\r\n const returnVal = useMemo(() => ({\r\n videoUpdated,\r\n }), [videoUpdated]);\r\n\r\n return returnVal;\r\n};\r\n","/* istanbul ignore file */\r\nimport { useCallback, useEffect, } from 'react';\r\nimport { getSessionStorage } from '@bingads-webui/storage';\r\nimport { useAdsStudioServices, getTaskPoller } from '../services';\r\n\r\n// use session storeage to sync the in progress tasks count between\r\n// asset-library pages and summary bar\r\n\r\nconst KEY = 'ASSET_LIBRARY_STORAGE';\r\n\r\nconst updateInProgressTasksStatus = (inProgressTaskCount) => {\r\n const ss = getSessionStorage();\r\n if (ss.supportsStorage()) {\r\n if (inProgressTaskCount > 0) {\r\n ss.set(KEY, { inProgressTaskCount });\r\n } else {\r\n ss.invalidate(KEY);\r\n }\r\n }\r\n};\r\n\r\nconst clearInProgressTaskStatus = () => updateInProgressTasksStatus(0);\r\n\r\nexport const ImageCroppingTaskStatusPoller = ({ interval }) => {\r\n //\r\n const { getImageCroppingTaskStatus, croppingTaskUpdated } = useAdsStudioServices();\r\n\r\n const startImageCroppingTaskStatusPoller = useCallback(() => {\r\n const taskPoller = getTaskPoller({\r\n task: () => getImageCroppingTaskStatus().then((res) => {\r\n const { totalCount } = res || {};\r\n updateInProgressTasksStatus(totalCount || 0);\r\n return { isFinished: totalCount === 0 };\r\n }),\r\n interval,\r\n });\r\n taskPoller.start();\r\n const stopPoller = () => {\r\n taskPoller.stop();\r\n clearInProgressTaskStatus();\r\n };\r\n return { stopPoller };\r\n }, [getImageCroppingTaskStatus, interval]);\r\n\r\n // query in progress task stasus, and update summary-bar status accordingly\r\n useEffect(() => {\r\n const { stopPoller } = startImageCroppingTaskStatusPoller();\r\n return () => stopPoller();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [croppingTaskUpdated]);\r\n\r\n return null;\r\n};\r\n","/* istanbul ignore file */\r\nimport { useCallback, useEffect, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Promise from 'bluebird';\r\nimport _ from 'underscore';\r\n\r\nimport { getSessionStorage } from '@bingads-webui/storage';\r\nimport { useAdsStudioServices, getTaskPoller } from '../services';\r\nimport { FolderAssetType, checkVideosIntermediateStatus } from '../model';\r\n\r\n// use session storeage to sync the in progress tasks count between\r\n// asset-library pages and summary bar\r\n\r\nconst KEY = 'ASSET_LIBRARY_STORAGE';\r\n\r\nconst updateInProgressTasksStatus = (inProgressTaskCount) => {\r\n const ss = getSessionStorage();\r\n if (ss.supportsStorage()) {\r\n if (inProgressTaskCount > 0) {\r\n ss.set(KEY, { inProgressTaskCount });\r\n } else {\r\n ss.invalidate(KEY);\r\n }\r\n }\r\n};\r\n\r\nexport const VideoTaskStatusPoller = ({ interval }) => {\r\n const {\r\n getVideoTaskStatus,\r\n assets,\r\n } = useAdsStudioServices();\r\n\r\n const newVideoTasks = useRef({});\r\n const isPollerRunning = useRef(false);\r\n\r\n const currentTaskPoller = useRef(null);\r\n\r\n const startVideoTaskStatusPoller = useCallback(() => {\r\n const taskPoller = getTaskPoller({\r\n task: () => {\r\n isPollerRunning.current = true;\r\n\r\n const queryPromise = _.isEmpty(newVideoTasks.current)\r\n ? Promise.resolve({ totalCount: 0 })\r\n : getVideoTaskStatus(newVideoTasks.current);\r\n\r\n return queryPromise.then((res) => {\r\n const { totalCount } = res || {};\r\n\r\n updateInProgressTasksStatus(totalCount || 0);\r\n\r\n const isFinished = totalCount === 0;\r\n\r\n if (isFinished) {\r\n isPollerRunning.current = false;\r\n }\r\n\r\n return { isFinished };\r\n });\r\n },\r\n interval,\r\n });\r\n taskPoller.start();\r\n const stopPoller = () => {\r\n taskPoller.stop();\r\n isPollerRunning.current = false;\r\n };\r\n return { stopPoller };\r\n }, [getVideoTaskStatus, interval]);\r\n\r\n useEffect(() => {\r\n newVideoTasks.current = assets ? assets.reduce((prev, asset) => {\r\n if (asset.folderAssetType === FolderAssetType.Video && checkVideosIntermediateStatus(asset)) {\r\n return { ...prev, [asset.id]: asset.status };\r\n }\r\n return prev;\r\n }, {}) : {};\r\n\r\n // start pollerif there are no running poller\r\n if (!isPollerRunning.current && !_.isEmpty(newVideoTasks.current)) {\r\n const { stopPoller } = startVideoTaskStatusPoller();\r\n currentTaskPoller.current = stopPoller;\r\n }\r\n\r\n // stop poller when component unmount.\r\n return () => {\r\n if (currentTaskPoller.current && isPollerRunning.current) {\r\n currentTaskPoller.current();\r\n }\r\n };\r\n }, [assets, startVideoTaskStatusPoller]);\r\n\r\n return null;\r\n};\r\n\r\nVideoTaskStatusPoller.propTypes = {\r\n interval: PropTypes.number.isRequired,\r\n};\r\n","/* istanbul ignore file */\r\nimport React from 'react';\r\nimport hoistNonReactStatics from 'hoist-non-react-statics';\r\nimport { ImageCroppingTaskStatusPoller } from './image-cropping-task-status-poller';\r\nimport { VideoTaskStatusPoller } from './video-task-status-poller';\r\n\r\nexport const withAssetTaskStatusPoller = (Component) => {\r\n const Wrapper = props => (\r\n <>\r\n \r\n \r\n \r\n \r\n );\r\n\r\n Wrapper.displayName = `withAssetTaskStatusPoller(${Component.displayName || Component.name})`;\r\n hoistNonReactStatics(Wrapper, Component);\r\n\r\n return Wrapper;\r\n};\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useState, useRef, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { EditRegular, ListRegular } from '@fluentui/react-icons';\r\nimport { Button } from '@fluentui/react-components';\r\nimport { stringifySync } from '@bingads-webui/safe-json';\r\n\r\nimport { FolderAssetType, ManualAddedImageSource } from '../../../model';\r\nimport { GridCellFactory } from './grid-cell-factory';\r\nimport { useStyles } from './style';\r\nimport { VideoSourceType } from '../../../utils';\r\n\r\nexport const AdsStudioAssetGridCell = ({\r\n item,\r\n highlightedText,\r\n onDetailsClick,\r\n onEditClick,\r\n selectable,\r\n selected,\r\n onSelect,\r\n isMultiSelecting,\r\n i18n,\r\n logger,\r\n index,\r\n draggable,\r\n onDrag,\r\n selectedItemCount,\r\n permissions,\r\n shouldShowExternalLink,\r\n}) => {\r\n const classes = useStyles();\r\n\r\n const [focusIndex, setFocusIndex] = useState(-1);\r\n const focusCellButton = useRef();\r\n\r\n const onKeyDown = useCallback((event, i) => {\r\n const assetContainers = document.querySelectorAll('.asset-grid-cell-container');\r\n const firstButton = document.querySelector('.ads-studio-page button');\r\n switch (event.code) {\r\n case 'ArrowUp':\r\n case 'ArrowLeft':\r\n if (i > 0 && assetContainers[i - 1]) {\r\n assetContainers[i - 1].focus();\r\n setFocusIndex(-1);\r\n }\r\n break;\r\n case 'ArrowDown':\r\n case 'ArrowRight':\r\n if (i < assetContainers.length - 1 && assetContainers[i + 1]) {\r\n assetContainers[i + 1].focus();\r\n setFocusIndex(-1);\r\n }\r\n break;\r\n case 'Space':\r\n setFocusIndex(i);\r\n break;\r\n case 'Tab':\r\n if (focusIndex < 0 && firstButton) {\r\n firstButton.focus();\r\n } else if (assetContainers[i]) {\r\n const detailButton = assetContainers[i].querySelector('.detail-button');\r\n const editButton = assetContainers[i].querySelector('.edit-button');\r\n if (focusCellButton.current === 'edit') {\r\n if (detailButton) {\r\n detailButton.focus();\r\n focusCellButton.current = 'detail';\r\n }\r\n } else if (editButton) {\r\n if (editButton) {\r\n editButton.focus();\r\n focusCellButton.current = 'edit';\r\n }\r\n } else if (detailButton) {\r\n detailButton.focus();\r\n focusCellButton.current = 'detail';\r\n }\r\n }\r\n break;\r\n case 'Enter':\r\n if (focusCellButton.current === 'detail') {\r\n onDetailsClick(item);\r\n } else if (focusCellButton.current === 'edit') {\r\n onEditClick(item);\r\n } else {\r\n onSelect();\r\n }\r\n setFocusIndex(-1);\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }, [focusIndex, item, onDetailsClick, onEditClick, onSelect]);\r\n\r\n const renderOverlayContent = useCallback(() => {\r\n const clickDetails = (evt) => {\r\n onDetailsClick(item);\r\n if (evt) {\r\n evt.stopPropagation();\r\n evt.preventDefault();\r\n }\r\n };\r\n const onDetailsKeyDown = (evt) => {\r\n if (evt.code === 'Enter' || evt.code === 'Space') {\r\n clickDetails(evt);\r\n }\r\n };\r\n const clickEdit = (evt) => {\r\n onEditClick(item);\r\n if (evt) {\r\n evt.stopPropagation();\r\n evt.preventDefault();\r\n }\r\n };\r\n const onEditKeyDown = (evt) => {\r\n if (evt.code === 'Enter' || evt.code === 'Space') {\r\n clickEdit(evt);\r\n }\r\n };\r\n const { folderAssetType, manualAddedImageSourceType } = item || {};\r\n const isVideoCell = folderAssetType === FolderAssetType.Video;\r\n const isStockImageCell = manualAddedImageSourceType === ManualAddedImageSource.ShutterStock;\r\n const videoTemplateUIEnabled = permissions && permissions.dynamic && permissions.dynamic.VideoTemplateUI;\r\n const isAIGenerated = item && item.sourceType && item.sourceType === VideoSourceType.AIGenerated;\r\n\r\n const showEditIcon = ((isAIGenerated && videoTemplateUIEnabled && isVideoCell && item && item.id && item.metaData) || !isVideoCell);\r\n\r\n return (\r\n \r\n { showEditIcon &&\r\n }\r\n onClick={clickEdit}\r\n onKeyDown={onEditKeyDown}\r\n className={classnames('edit-button', classes.actionButton)}\r\n title={i18n.getString(_TL_('Edit'))}\r\n aria-label={i18n.getString(_TL_('Edit asset'))}\r\n />\r\n }\r\n { !isStockImageCell &&\r\n }\r\n onClick={clickDetails}\r\n onKeyDown={onDetailsKeyDown}\r\n className={classnames('detail-button', classes.actionButton)}\r\n title={i18n.getString(_TL_('Details'))}\r\n aria-label={i18n.getString(_TL_('Click to view asset details'))}\r\n />\r\n }\r\n \r\n );\r\n }, [classes.actionButton, i18n, item, onDetailsClick, onEditClick]);\r\n\r\n useEffect(() => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace(`Grid cell rendered item: ${stringifySync(item)}`);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n return (\r\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\r\n { onKeyDown(event, index); }}\r\n style={{ width: '100%', height: '100%' }}\r\n data-is-focusable\r\n >\r\n \r\n {shouldShowExternalLink && (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nAdsStudioAssetGridCell.propTypes = {\r\n item: PropTypes.shape({\r\n id: PropTypes.string,\r\n name: PropTypes.string,\r\n url: PropTypes.string,\r\n createdTime: PropTypes.instanceOf(Date),\r\n // cropping task progress\r\n updating: PropTypes.bool,\r\n }).isRequired,\r\n highlightedText: PropTypes.string,\r\n onDetailsClick: PropTypes.func.isRequired,\r\n onEditClick: PropTypes.func,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n selectable: PropTypes.bool,\r\n selected: PropTypes.bool,\r\n onSelect: PropTypes.func,\r\n isMultiSelecting: PropTypes.bool,\r\n index: PropTypes.number,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n logError: PropTypes.func,\r\n }),\r\n draggable: PropTypes.bool,\r\n onDrag: PropTypes.func,\r\n selectedItemCount: PropTypes.number,\r\n shouldShowExternalLink: PropTypes.bool,\r\n};\r\n\r\nAdsStudioAssetGridCell.defaultProps = {\r\n highlightedText: undefined,\r\n index: -1,\r\n selectable: false,\r\n selected: false,\r\n onSelect: _.noop,\r\n onEditClick: _.noop,\r\n isMultiSelecting: false,\r\n logger: undefined,\r\n draggable: false,\r\n onDrag: _.noop,\r\n selectedItemCount: 1,\r\n shouldShowExternalLink: false,\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useControlStyles = makeStyles({\r\n root: {\r\n position: 'relative',\r\n width: '100%',\r\n ...shorthands.overflow('hidden'),\r\n top: '-5px',\r\n backgroundColor: 'rgba(0,0,0,0.75)',\r\n\r\n '& .ms-Button svg': {\r\n width: '100%',\r\n },\r\n '& .ms-Button:focus': {\r\n ...shorthands.border('1px solid #fff'),\r\n },\r\n '& .ms-Button:hover': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n videoContainer: {\r\n paddingBottom: '32px',\r\n },\r\n sliderContainer: {\r\n width: '100%',\r\n },\r\n previewVideo: {\r\n width: '100%',\r\n maxHeight: '100%',\r\n },\r\n container: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n\r\n '& i': {\r\n width: '100%',\r\n cursor: 'pointer',\r\n },\r\n },\r\n});\r\n\r\nconst commonParentStyles = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexDirection: 'column',\r\n height: '100%',\r\n};\r\n\r\nconst iconCommonStyles = {\r\n fontSize: '36px',\r\n lineHeight: '36px',\r\n color: '#0078d4',\r\n};\r\n\r\nexport const usePlaceholderStyle = makeStyles({\r\n encoding: {\r\n ...commonParentStyles,\r\n '& .placeholder-icon': {\r\n ...iconCommonStyles,\r\n animationName: [\r\n {\r\n to: {\r\n transform: 'rotate(360deg)',\r\n },\r\n },\r\n ],\r\n animationDuration: '1.2s',\r\n animationTimingFunction: 'linear',\r\n animationIterationCount: 'infinite',\r\n },\r\n '& .add-video-content-container': {\r\n marginTop: '14px',\r\n },\r\n },\r\n unverified: {\r\n ...commonParentStyles,\r\n '& .download-icon-container': {\r\n ...shorthands.overflow('hidden'),\r\n ...shorthands.borderBottom('2px solid #0078d4'),\r\n },\r\n '& .placeholder-icon': {\r\n ...iconCommonStyles,\r\n animationName: [\r\n {\r\n from: {\r\n transform: 'translateY(-18px)',\r\n },\r\n to: {\r\n transform: 'translateY(42px)',\r\n },\r\n },\r\n ],\r\n animationDuration: '1.2s',\r\n animationTimingFunction: 'ease',\r\n animationIterationCount: 'infinite',\r\n },\r\n },\r\n failed: {\r\n ...commonParentStyles,\r\n '& .placeholder-icon': {\r\n ...iconCommonStyles,\r\n color: '#d83b01',\r\n },\r\n },\r\n});\r\n","import React from 'react';\r\n\r\nimport { VideoPureComponent } from '@bingads-webui-campaign-react/video-pure-component';\r\n\r\nimport { useControlStyles } from './style';\r\n\r\nexport const Video = (props) => {\r\n const classes = useControlStyles();\r\n\r\n return ;\r\n};\r\n","import React from 'react';\r\n\r\nimport { EncodingPlaceholder, FailedPlaceholder, UnverifiedPlaceholder } from '@bingads-webui-campaign-react/video-status-placeholder-pure-component';\r\n\r\nimport { usePlaceholderStyle } from './style';\r\n\r\nexport const EncodingPlaceholderWithStyle = (props) => {\r\n const classes = usePlaceholderStyle();\r\n return ;\r\n};\r\n\r\nexport const FailedPlaceholderWithStyle = (props) => {\r\n const classes = usePlaceholderStyle();\r\n return ;\r\n};\r\n\r\nexport const UnverifiedPlaceholderWithStyle = (props) => {\r\n const classes = usePlaceholderStyle();\r\n return ;\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\nimport {\r\n getSharedAssetContainerStyle,\r\n getSharedMultiSelectingCellStyles,\r\n} from '../shared-cell-style';\r\n\r\nexport const useVideoAssetsGridCellStyle = makeStyles({\r\n VideoAssetsGridCellContainer: {\r\n ...getSharedAssetContainerStyle(),\r\n },\r\n\r\n videoCellLabelContainer: {\r\n display: 'flex',\r\n position: 'absolute',\r\n left: '12px',\r\n bottom: '8px',\r\n zIndex: 1,\r\n },\r\n\r\n videoCell: {\r\n // visibility: 'hidden',\r\n opacity: 0,\r\n position: 'absolute',\r\n top: '0px',\r\n left: '0px',\r\n // zIndex: -1,\r\n ...shorthands.borderRadius('6px'),\r\n '& .video-previewer-root': {\r\n backgroundColor: 'transparent',\r\n transform: 'translateY(-100%)',\r\n '& .time': {\r\n paddingLeft: '8px',\r\n paddingRight: '12px',\r\n color: '#fff',\r\n fontSize: '11px',\r\n lineHeight: '14px',\r\n whiteSpace: 'nowrap',\r\n },\r\n '& button[aria-label=\"Unmute\"], button[aria-label=\"Mute\"]': {\r\n marginRight: '8px',\r\n '& .ms-Icon': {\r\n lineHeight: '32px',\r\n fontSize: '32px',\r\n height: '32px',\r\n },\r\n },\r\n },\r\n '&.show-video': {\r\n // visibility: 'visible',\r\n opacity: 1,\r\n // zIndex: 2,\r\n },\r\n },\r\n placeholderCell: {\r\n width: '100%',\r\n height: '135px',\r\n },\r\n\r\n // only show checkbox on overlay if it is NOT in multi-selecting mode\r\n ...getSharedMultiSelectingCellStyles(),\r\n});\r\n","/* eslint-disable object-curly-newline */\r\nimport React, { useCallback, useMemo, useState, useRef, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\n\r\nimport { TimerRegular } from '@fluentui/react-icons';\r\nimport {\r\n TilesGridCellImage as CellImage,\r\n TilesGridCellDecorativeLabel as CellLabel,\r\n TilesGridCellCardWithOverlay,\r\n TilesGridCellSelectionDecorator,\r\n TilesGridCellDragDecorator,\r\n} from '../../ads-studio-tile-grid';\r\nimport { TextWithHighlight } from '../../text-with-highlight';\r\nimport {\r\n Video,\r\n EncodingPlaceholderWithStyle,\r\n UnverifiedPlaceholderWithStyle,\r\n FailedPlaceholderWithStyle\r\n} from '../../video-component';\r\nimport { convertTimeDuration } from '../../../model';\r\n\r\nimport { useVideoAssetsGridCellStyle } from './style';\r\n\r\nexport const AdsStudioVideoAssetsGridCell = ({\r\n item,\r\n highlightedText,\r\n isOverlayEnabled,\r\n isCellFocused,\r\n renderCellContent,\r\n renderOverlayContent,\r\n selectable,\r\n selected,\r\n isMultiSelecting,\r\n onClick,\r\n i18n,\r\n onClickVideo,\r\n draggable,\r\n onDrag,\r\n selectedItemCount,\r\n}) => {\r\n const classes = useVideoAssetsGridCellStyle();\r\n const [isVideoLoaded, setVideoLoaded] = useState(false);\r\n const [showVideo, setShowVideo] = useState(false); // control opacity of video element\r\n const [hideVideo, setHideVideo] = useState(false); // display video element or not\r\n const [thumbnailSeletable, setThumbnailSelectable] = useState(false);\r\n\r\n const { name, thumbnailUrl, id, durationInMS, status, url } = item || {};\r\n const durationDesc = useMemo(() => convertTimeDuration(durationInMS), [durationInMS]);\r\n\r\n const [cellRef, setCellRef] = useState(null);\r\n const timerRef = useRef(null);\r\n\r\n useEffect(() => {\r\n if (isVideoLoaded && cellRef && !isMultiSelecting) {\r\n cellRef.addEventListener('mouseover', () => {\r\n setShowVideo(true);\r\n timerRef.current = setTimeout(() => {\r\n setShowVideo(false);\r\n setThumbnailSelectable(true);\r\n setHideVideo(true);\r\n }, 5000);\r\n });\r\n cellRef.addEventListener('mouseout', () => {\r\n setShowVideo(false);\r\n clearTimeout(timerRef.current);\r\n setThumbnailSelectable(false);\r\n });\r\n }\r\n }, [cellRef, isMultiSelecting, isVideoLoaded]);\r\n\r\n useEffect(() => () => {\r\n if (timerRef.current) {\r\n clearTimeout(timerRef.current);\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (selected) {\r\n setShowVideo(false);\r\n setThumbnailSelectable(true);\r\n }\r\n }, [selected]);\r\n\r\n const onClickVideoCard = useCallback(() => {\r\n clearTimeout(timerRef.current);\r\n onClickVideo();\r\n }, [onClickVideo]);\r\n\r\n const playVideoObject = useMemo(() => ({ play: showVideo }), [showVideo]);\r\n\r\n const wrapperWidth = cellRef ? cellRef.offsetWidth : 0;\r\n\r\n const cellContent = useMemo(() => {\r\n let defaultContent = null;\r\n // status order: unverified => draft => active/invalid\r\n if (status === 'Active') {\r\n defaultContent = (\r\n
\r\n \r\n
\r\n {isVideoLoaded && durationDesc && !showVideo && (\r\n \r\n )}\r\n
\r\n
\r\n );\r\n } else {\r\n setVideoLoaded(true);\r\n\r\n if (status === 'Unverified') {\r\n defaultContent =
;\r\n } else if (status === 'Draft') {\r\n defaultContent =
;\r\n } else if (status === 'Failed') {\r\n defaultContent =
;\r\n }\r\n }\r\n\r\n if (renderCellContent) {\r\n return renderCellContent(defaultContent);\r\n }\r\n return defaultContent;\r\n }, [status, renderCellContent, thumbnailUrl, name, id, i18n, classes.videoCellLabelContainer, classes.placeholderCell, isVideoLoaded, showVideo, durationDesc]);\r\n\r\n const funcRenderOverlayContent = useCallback(() => {\r\n if (renderOverlayContent) {\r\n return renderOverlayContent();\r\n }\r\n return null;\r\n }, [renderOverlayContent]);\r\n\r\n const onCellClick = useCallback(() => {\r\n if (selectable && thumbnailSeletable) {\r\n onClick({ item, selected });\r\n } else if (showVideo) {\r\n onClickVideoCard();\r\n }\r\n }, [item, onClick, onClickVideoCard, selectable, selected, showVideo, thumbnailSeletable]);\r\n\r\n useEffect(() => {\r\n if (isMultiSelecting) {\r\n setThumbnailSelectable(true);\r\n }\r\n }, [isMultiSelecting]);\r\n\r\n return (\r\n
\r\n \r\n \r\n {selectable && thumbnailSeletable ? (\r\n \r\n {cellContent}\r\n \r\n ) : cellContent}\r\n \r\n {\r\n !hideVideo && !isMultiSelecting && status === 'Active' &&\r\n
setCellRef(x)}>\r\n \r\n
\r\n }\r\n \r\n
\r\n
\r\n \r\n
\r\n {id && (\r\n
\r\n {`${i18n.getString(_TL_('ID'))} `}\r\n \r\n
\r\n )}\r\n
\r\n
\r\n );\r\n};\r\n\r\nAdsStudioVideoAssetsGridCell.propTypes = {\r\n item: PropTypes.shape({\r\n id: PropTypes.string,\r\n name: PropTypes.string,\r\n url: PropTypes.string,\r\n createdTime: PropTypes.instanceOf(Date),\r\n }).isRequired,\r\n highlightedText: PropTypes.string,\r\n isOverlayEnabled: PropTypes.bool,\r\n isCellFocused: PropTypes.bool,\r\n renderCellContent: PropTypes.func,\r\n renderOverlayContent: PropTypes.func,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n selectable: PropTypes.bool,\r\n selected: PropTypes.bool,\r\n onClick: () => null,\r\n isMultiSelecting: PropTypes.bool,\r\n onClickVideo: PropTypes.func.isRequired,\r\n};\r\n\r\nAdsStudioVideoAssetsGridCell.defaultProps = {\r\n highlightedText: undefined,\r\n isOverlayEnabled: false,\r\n isCellFocused: false,\r\n renderCellContent: null,\r\n renderOverlayContent: null,\r\n selectable: false,\r\n selected: false,\r\n onClick: undefined,\r\n isMultiSelecting: false,\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { makeStyles, tokens, shorthands, mergeClasses } from '@fluentui/react-components';\r\nimport classNames from 'classnames';\r\nimport { CheckmarkCircleFilled } from '@fluentui/react-icons';\r\nimport {\r\n TilesGridCellImage as CellImage,\r\n} from '../../ads-studio-tile-grid';\r\n\r\nexport const useStyles = makeStyles({\r\n imageWrapper: {\r\n position: 'relative',\r\n ...shorthands.borderRadius(tokens.borderRadiusXLarge),\r\n ...shorthands.outline('2px', 'solid', '#0078d4'),\r\n },\r\n containerClass: {\r\n ...shorthands.borderRadius(tokens.borderRadiusXLarge),\r\n boxShadow: '0 0 2px 0 rgba(0, 0, 0, 0.12), 0 2px 4px 0 rgba(0, 0, 0, 0.14)',\r\n },\r\n imageClass: {\r\n ...shorthands.borderRadius(tokens.borderRadiusXLarge),\r\n },\r\n iconChecked: {\r\n top: '9px',\r\n right: '10px',\r\n position: 'absolute',\r\n color: '#0078d4',\r\n fontSize: '20px',\r\n backgroundColor: '#ffffff',\r\n ...shorthands.borderRadius(tokens.borderRadiusCircular),\r\n },\r\n});\r\n\r\nexport const ImagePanelGridCell = (props) => {\r\n const {\r\n item, i18n, onSelectImage, isSelected, isMultiple,\r\n } = props;\r\n const { url, id } = item || {};\r\n const classes = useStyles();\r\n\r\n const onClickCell = useCallback(() => {\r\n onSelectImage(id);\r\n }, [id, onSelectImage]);\r\n\r\n return (\r\n
\r\n \r\n {isSelected && isMultiple && }\r\n
\r\n );\r\n};\r\n\r\nImagePanelGridCell.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n item: PropTypes.shape({\r\n id: PropTypes.string,\r\n url: PropTypes.string,\r\n }).isRequired,\r\n onSelectImage: PropTypes.func.isRequired,\r\n isSelected: PropTypes.bool.isRequired,\r\n isMultiple: PropTypes.bool,\r\n};\r\n\r\nImagePanelGridCell.defaultProps = {\r\n isMultiple: true,\r\n};\r\n\r\n","import React, { useMemo, useCallback, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\n\r\nimport _ from 'underscore';\r\nimport { makeStyles, } from '@fluentui/react-components';\r\nimport { ImagePanelGridCell } from '../ads-studio-asset-grid-cell';\r\nimport { SectionTilesGrid, TilesGridLoadingCell } from '../ads-studio-tile-grid';\r\nimport { AdsStudioSpinner } from '../ads-studio-spinner';\r\nimport { GridSectionName, DEFAULT_PAGE_SIZE } from '../../model/constants';\r\n\r\nconst DEFAULT_IMAGE_WIDTH = 211;\r\nconst DEFAULT_COLUMN_PADDING = 16;\r\n\r\nconst useStyles = makeStyles({\r\n contentGridWrapper: {\r\n paddingTop: '24px',\r\n },\r\n description: {\r\n marginBottom: '8px',\r\n fontSize: '14px',\r\n lineHeight: '20px',\r\n fontWeight: '600',\r\n },\r\n});\r\n\r\nexport const PanelImageGrid = ({\r\n i18n,\r\n dataService,\r\n onFailedToLoadData,\r\n onSelectImage,\r\n overlayBodyRef,\r\n imageWidth,\r\n columnPadding,\r\n isHideDescription,\r\n isMultiple = true,\r\n isLoadingMore,\r\n}) => {\r\n const {\r\n assets,\r\n totalAssetCount,\r\n loadMoreData,\r\n } = dataService;\r\n const classes = useStyles();\r\n const [selectedItemIds, setSelectedItemIds] = useState([]);\r\n\r\n const onSelectedChange = useCallback((selectedItemId) => {\r\n if (selectedItemIds.includes(selectedItemId)) {\r\n const newSelectedItems = selectedItemIds.filter(itemId => itemId !== selectedItemId);\r\n setSelectedItemIds(newSelectedItems);\r\n } else {\r\n setSelectedItemIds(isMultiple ? [...selectedItemIds, selectedItemId] : [selectedItemId]);\r\n }\r\n onSelectImage(selectedItemId);\r\n }, [isMultiple, onSelectImage, selectedItemIds]);\r\n\r\n const assetsWithAction = useMemo(() => _.map(assets, (image) => {\r\n const {\r\n id,\r\n } = image;\r\n\r\n return ({\r\n ...image,\r\n onAction: (event) => {\r\n const code = _.get(event, ['detail', 'originalEvent', 'code']);\r\n if (code === 'Enter' || code === 'Space') {\r\n onSelectedChange(id);\r\n event.preventDefault();\r\n }\r\n },\r\n });\r\n }), [assets, onSelectedChange]);\r\n\r\n const imagesGridSection = useMemo(() => ({\r\n sectionName: GridSectionName.Asset,\r\n sectionClassName: 'ads-studio-image-section',\r\n itemKey: 'id',\r\n items: assetsWithAction,\r\n totalItemCount: totalAssetCount,\r\n config: {\r\n width: imageWidth || DEFAULT_IMAGE_WIDTH,\r\n columnPadding: columnPadding || DEFAULT_COLUMN_PADDING,\r\n scrollContainer: overlayBodyRef || '.ads-studio-panel-container-drawer-overlay-body',\r\n },\r\n }), [assetsWithAction, totalAssetCount, imageWidth, columnPadding, overlayBodyRef]);\r\n\r\n const sectionGridData = useMemo(\r\n () => ([imagesGridSection]),\r\n [imagesGridSection]\r\n );\r\n\r\n const onRenderCell = useCallback(({ item }) => {\r\n const { _index, id } = item;\r\n\r\n return (\r\n \r\n );\r\n }, [i18n, onSelectedChange, selectedItemIds, isMultiple]);\r\n\r\n const loadNextPage = useCallback(() => {\r\n if (assets && assets.length >= totalAssetCount) {\r\n return;\r\n }\r\n const p$res = loadMoreData({ count: DEFAULT_PAGE_SIZE });\r\n if (p$res) {\r\n p$res.catch((err) => {\r\n if (onFailedToLoadData) {\r\n onFailedToLoadData(err);\r\n }\r\n });\r\n }\r\n }, [assets, loadMoreData, onFailedToLoadData, totalAssetCount]);\r\n\r\n const onRenderLoadingCell = useCallback(({ items, totalItemCount }) => {\r\n if ((items.length < totalItemCount) && (items.length > 0)) {\r\n return (\r\n \r\n {isLoadingMore && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n );\r\n }\r\n return null;\r\n }, [isLoadingMore, loadNextPage]);\r\n\r\n return (\r\n
\r\n {!isHideDescription &&
{i18n.getString(_TL_('Suggestions from recent searches'))}
}\r\n \r\n
\r\n );\r\n};\r\n\r\nPanelImageGrid.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n isMultiple: PropTypes.bool,\r\n dataService: PropTypes.shape({}),\r\n // logger: PropTypes.shape({\r\n // logTrace: PropTypes.func,\r\n // }).isRequired,\r\n onFailedToLoadData: PropTypes.func,\r\n onSelectImage: PropTypes.func.isRequired,\r\n overlayBodyRef: PropTypes.shape({}),\r\n};\r\n\r\nPanelImageGrid.defaultProps = {\r\n dataService: {},\r\n onFailedToLoadData: _.noop,\r\n overlayBodyRef: null,\r\n isMultiple: true,\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const usePerformanceFilterBarEditingStyle = makeStyles({\r\n filterBarEditingContainer: {\r\n position: 'relative',\r\n minHeight: '56px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n backgroundColor: '#f3f2f1',\r\n\r\n '& .filter-list-editing': {\r\n display: 'flex',\r\n ...shorthands.flex(1),\r\n flexWrap: 'wrap',\r\n alignItems: 'flex-start',\r\n paddingLeft: '12px',\r\n\r\n '& .filter-list-divider': {\r\n paddingRight: '12px',\r\n },\r\n },\r\n\r\n '& .filter-bar-button-group': {\r\n marginLeft: 'auto',\r\n display: 'flex',\r\n },\r\n\r\n '& button.add-filter-button .iconba-Add': {\r\n color: '#373737',\r\n },\r\n '& button.filter-bar-button': {\r\n ...shorthands.border('none'),\r\n backgroundColor: 'transparent',\r\n ...shorthands.padding('0px', '7px'),\r\n height: '56px',\r\n '& .iconba': {\r\n color: '#373737',\r\n },\r\n '&:hover': {\r\n backgroundColor: '#f3f2f1',\r\n },\r\n '&:focus': {\r\n backgroundColor: '#e1dfdd',\r\n '&:hover': {\r\n backgroundColor: '#d0d0d0',\r\n },\r\n },\r\n },\r\n '& .filter-bar-divider': {\r\n ...shorthands.borderLeft('1px', 'solid', '#eaeaea'),\r\n ...shorthands.margin('8px', '0px'),\r\n },\r\n '& button.filter-bar-cancel-button': {\r\n ...shorthands.padding('0px', '18px'),\r\n minWidth: 'auto',\r\n '& .iconba:before': {\r\n color: '#373737',\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport const usePerformanceFilterBarReadonlyStyle = makeStyles({\r\n filterBarReadonlyContainer: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n\r\n '& .btn.btn-link': {\r\n marginLeft: '5px',\r\n color: '#17717a',\r\n ...shorthands.textDecoration('underline'),\r\n },\r\n\r\n '& .filter-list': {\r\n height: '56px',\r\n paddingLeft: '12px',\r\n display: 'block',\r\n alignItems: 'center',\r\n textOverflow: 'ellipsis',\r\n color: '#17717a',\r\n ...shorthands.overflow('hidden'),\r\n whiteSpace: 'nowrap',\r\n\r\n fontFamily: 'Segoe UI',\r\n fontSize: '14px',\r\n lineHeight: '19px',\r\n paddingTop: '14px',\r\n\r\n '& .asset-library-search': {\r\n top: '0px',\r\n },\r\n },\r\n '& .filter-list:focus-within': {\r\n textOverflow: 'inherit', // collpase text would invisiable issues when use tab to change focus, reference here: https://msasg.visualstudio.com/DefaultCollection/Bing_Ads/_workitems/edit/3702640/\r\n },\r\n },\r\n addFilterButton: {\r\n ...shorthands.flex(0, 0, 'auto'),\r\n ...shorthands.border('none'),\r\n height: '56px',\r\n fontSize: '14px',\r\n marginLeft: '4px',\r\n paddingLeft: '8px',\r\n paddingRight: '8px',\r\n backgroundColor: '#ffffff',\r\n fontWeight: '600',\r\n },\r\n});\r\n\r\nexport const useViewAllFiltersButtonStyle = makeStyles({\r\n viewAllButton: {\r\n ...shorthands.border('none'),\r\n color: 'rgb(23, 113, 122) !important',\r\n fontWeight: '400',\r\n width: 'auto',\r\n minWidth: '0px !important',\r\n ...shorthands.padding('0px !important', '8px !important'),\r\n backgroundColor: 'transparent !important',\r\n lineHeight: '56px !important',\r\n '&:hover': {\r\n ...shorthands.textDecoration('underline'),\r\n },\r\n },\r\n viewContentTitle: {\r\n paddingLeft: '8px',\r\n fontWeight: '600',\r\n fontSize: '20px',\r\n },\r\n viewAllFilterItem: {\r\n display: 'block',\r\n ...shorthands.border('none'),\r\n color: 'rgb(23, 113, 122) !important',\r\n fontWeight: '400',\r\n width: 'auto',\r\n minWidth: '0px !important',\r\n ...shorthands.padding('0px !important', '8px !important'),\r\n height: 'auto',\r\n backgroundColor: 'transparent !important',\r\n '&:hover': {\r\n ...shorthands.textDecoration('underline'),\r\n },\r\n },\r\n});\r\n","import _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport React, { Fragment } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Button } from '@fluentui/react-components';\r\nimport { ArrowClockwiseRegular, DismissRegular } from '@fluentui/react-icons';\r\n\r\nimport { usePerformanceFilterBarEditingStyle } from './styles';\r\n\r\nconst EditingFilterBar = ({\r\n filters,\r\n focusedFilter,\r\n onRenderNewFilterContextMenu,\r\n onRenderFilter,\r\n onCloseClick,\r\n onResetClick,\r\n i18n,\r\n}) => {\r\n const classes = usePerformanceFilterBarEditingStyle();\r\n // if no editing filter, show new filter context menu\r\n\r\n const getDivider = (index) => {\r\n if (index === filters.length - 1) {\r\n return null;\r\n }\r\n return ();\r\n };\r\n\r\n return (\r\n
\r\n
\r\n {filters.map((filter, index) => (\r\n \r\n {onRenderFilter({\r\n filter,\r\n focused: focusedFilter && focusedFilter.id === filter.id,\r\n index,\r\n isLast: index === filters.length - 1,\r\n isFirst: index === 0,\r\n })}\r\n {getDivider(index)}\r\n \r\n ))}\r\n {onRenderNewFilterContextMenu()}\r\n
\r\n
\r\n }\r\n >\r\n {i18n.getString(_TL_('Reset'))}\r\n \r\n
\r\n }\r\n />\r\n
\r\n
\r\n );\r\n};\r\n\r\nEditingFilterBar.propTypes = {\r\n filters: PropTypes.arrayOf(PropTypes.shape({})),\r\n focusedFilter: PropTypes.shape({\r\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\r\n }),\r\n onRenderNewFilterContextMenu: PropTypes.func,\r\n onRenderFilter: PropTypes.func.isRequired,\r\n onCloseClick: PropTypes.func,\r\n onResetClick: PropTypes.func,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nEditingFilterBar.defaultProps = {\r\n filters: [],\r\n focusedFilter: null,\r\n onRenderNewFilterContextMenu: () => null,\r\n onCloseClick: _.noop,\r\n onResetClick: _.noop,\r\n};\r\n\r\nexport const PerformanceEditingFilterBar\r\n = React.memo(EditingFilterBar);\r\n","import _ from 'underscore';\r\nimport React from 'react';\r\nimport classNames from 'classnames';\r\nimport { Popover, PopoverSurface, PopoverTrigger, Button, mergeClasses } from '@fluentui/react-components';\r\nimport PropTypes from 'prop-types';\r\nimport { useViewAllFiltersButtonStyle } from './styles';\r\n\r\nexport const FilterListWithPopover = ({\r\n filters, onClickFilter, i18n,\r\n}) => {\r\n const classes = useViewAllFiltersButtonStyle();\r\n\r\n return (\r\n
\r\n
{i18n.getString('Filters')}
\r\n {_.map(filters, filter =>\r\n (\r\n onClickFilter(filter)}\r\n >\r\n {`${i18n.getString(filter.title)}: ${filter.humanizedValue}`}\r\n \r\n ))}\r\n
\r\n );\r\n};\r\n\r\nFilterListWithPopover.propTypes = {\r\n filters: PropTypes.arrayOf(PropTypes.shape({\r\n humanizedValue: PropTypes.string,\r\n })).isRequired,\r\n onClickFilter: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\n\r\nconst ViewAllFiltersButtonImpl = ({\r\n filters, onClickFilter, i18n,\r\n}) => {\r\n const classes = useViewAllFiltersButtonStyle();\r\n // don't show the always visible filters on the View all popover\r\n const selectedFilters = _.filter(filters, ({ isFilterAlwaysVisible }) => !isFilterAlwaysVisible);\r\n return (_.isEmpty(selectedFilters) ? null : (\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n ));\r\n};\r\n\r\nViewAllFiltersButtonImpl.propTypes = {\r\n filters: PropTypes.arrayOf(PropTypes.shape({\r\n isFilterAlwaysVisible: PropTypes.bool,\r\n })).isRequired,\r\n onClickFilter: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nexport const ViewAllFiltersButton = React.memo(ViewAllFiltersButtonImpl);\r\n","import _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport { Button } from '@fluentui/react-components';\r\nimport { AddRegular } from '@fluentui/react-icons';\r\nimport React, { Fragment, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { keyCode } from '@bingads-webui/keycode';\r\nimport { FilterType } from '../../model/filter-type';\r\nimport { ViewAllFiltersButton } from './view-all-filters-button';\r\nimport { usePerformanceFilterBarReadonlyStyle } from './styles';\r\n\r\nconst ReadonlyFilterBar = ({\r\n filters,\r\n onRenderFilter,\r\n onClickFilter,\r\n onClickAddFilterButton,\r\n i18n,\r\n}) => {\r\n const classes = usePerformanceFilterBarReadonlyStyle();\r\n const onKeyPress = (event, filter, index) => {\r\n if (event.which === keyCode.Enter || event.which === keyCode.Space) {\r\n onClickFilter(filter, index);\r\n }\r\n };\r\n\r\n const filterListRef = useRef();\r\n const onFilterBlur = () => {\r\n // reset scroll position to 0\r\n if (filterListRef.current) {\r\n filterListRef.current.scrollTo(0, 0);\r\n }\r\n };\r\n\r\n return (\r\n
\r\n
\r\n {filters.map((filter, index) => (\r\n filter.type === FilterType.SearchText ?\r\n onRenderFilter({\r\n filter,\r\n index,\r\n isLast: index === filters.length - 1,\r\n isFirst: index === 0,\r\n }) :\r\n \r\n onClickFilter(filter, index)}\r\n tabIndex=\"0\"\r\n role=\"button\"\r\n onKeyDown={event => onKeyPress(event, filter, index)}\r\n >\r\n {onRenderFilter({\r\n filter,\r\n index,\r\n isLast: index === filters.length - 1,\r\n isFirst: index === 0,\r\n })}\r\n \r\n \r\n ))}\r\n
\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nReadonlyFilterBar.propTypes = {\r\n filters: PropTypes.arrayOf(PropTypes.shape({})),\r\n onRenderFilter: PropTypes.func.isRequired,\r\n onClickFilter: PropTypes.func,\r\n onClickAddFilterButton: PropTypes.func,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nReadonlyFilterBar.defaultProps = {\r\n filters: [],\r\n onClickFilter: _.noop,\r\n onClickAddFilterButton: _.noop,\r\n};\r\n\r\nexport const PerformanceReadonlyFilterBar\r\n = React.memo(ReadonlyFilterBar);\r\n","/* eslint-disable jsx-a11y/media-has-caption */\r\nimport React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport classnames from 'classnames';\r\nimport { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nconst useStyles = makeStyles({\r\n dynamicSizeContainer: {\r\n height: '100%',\r\n\r\n '& video': {\r\n maxWidth: '100%',\r\n maxHeight: '100%',\r\n position: 'relative',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n },\r\n },\r\n videoOutlineGray: {\r\n '& video:focus': {\r\n ...shorthands.outline('2px', 'solid', 'gray'),\r\n outlineOffset: '1px',\r\n },\r\n },\r\n videoNormalContainer: {\r\n '& video::-webkit-media-controls-play-button:focus': {\r\n outlineOffset: '-2px',\r\n },\r\n '& video::-webkit-media-controls-pause-button:focus': {\r\n outlineOffset: '-2px',\r\n },\r\n '& video::-webkit-media-controls-volume-slider:focus': {\r\n outlineOffset: '-2px',\r\n },\r\n '& video::-webkit-media-controls-timeline:focus': {\r\n outlineOffset: '-2px',\r\n },\r\n '& video::-webkit-media-controls-mute-button:focus': {\r\n outlineOffset: '-2px',\r\n },\r\n '& video::-webkit-media-controls-fullscreen-button:focus': {\r\n outlineOffset: '-2px',\r\n },\r\n '& video::-webkit-media-controls-panel': {\r\n backgroundImage: 'linear-gradient(0deg,rgba(255, 255, 255, 0.8), transparent) !important',\r\n filter: 'brightness(1)',\r\n boxShadow: 'none !important',\r\n },\r\n },\r\n});\r\n\r\n// since the
\r\n
\r\n {isDomainInvalid && (\r\n \r\n {errorMessage ||\r\n i18n.getString(_TL_('Please enter a valid Final URL to see images from your website.'))}\r\n
\r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nDomainInputView.propTypes = {\r\n i18n: PropTypes.shape({}).isRequired,\r\n isDomainInvalid: PropTypes.bool.isRequired,\r\n onDomainChange: PropTypes.func.isRequired,\r\n errorMessage: PropTypes.string,\r\n errorMessageClassName: PropTypes.string,\r\n domainInputWrapperClassName: PropTypes.string,\r\n};\r\n\r\nDomainInputView.defaultProps = {\r\n errorMessage: '',\r\n errorMessageClassName: '',\r\n domainInputWrapperClassName: '',\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { Input, makeStyles } from '@fluentui/react-components';\r\nimport { SearchFilled } from '@fluentui/react-icons';\r\nimport { getUrlProtocolAndDomain, hasProtocol } from '@bingads-webui/url-util';\r\n\r\nconst useStyles = makeStyles({\r\n subdomainWrapper: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n input: {\r\n width: '260px',\r\n },\r\n divider: {\r\n marginLeft: '10px',\r\n marginRight: '10px',\r\n fontSize: '14px',\r\n },\r\n});\r\n\r\nexport const SubdomainInputView = (props) => {\r\n const {\r\n i18n, isLoading, defaultDomainUrl, onDomainUrlChange, onSubdomainUrlChange,\r\n } = props;\r\n const classes = useStyles();\r\n\r\n const onDomainBlur = useCallback((ev) => {\r\n const temporaryFinalUrl = ev && ev.target && ev.target.value;\r\n let newDomainUrl = getUrlProtocolAndDomain(temporaryFinalUrl);\r\n\r\n if (!hasProtocol(newDomainUrl)) {\r\n newDomainUrl = `https://${newDomainUrl}`;\r\n }\r\n onDomainUrlChange(newDomainUrl);\r\n }, [onDomainUrlChange]);\r\n\r\n const onDomainKeyDown = useCallback((ev) => {\r\n if (ev.key === 'Enter') {\r\n onDomainBlur(ev);\r\n }\r\n }, [onDomainBlur]);\r\n\r\n const onSubdomainBlur = useCallback((ev) => {\r\n const newSubdomainUrl = ev && ev.target && ev.target.value;\r\n onSubdomainUrlChange(newSubdomainUrl);\r\n }, [onSubdomainUrlChange]);\r\n\r\n const onSubdomainKeyDown = useCallback((ev) => {\r\n if (ev.key === 'Enter') {\r\n onSubdomainBlur(ev);\r\n }\r\n }, [onSubdomainBlur]);\r\n\r\n return (\r\n
\r\n } disabled={isLoading} onBlur={onDomainBlur} onKeyDown={onDomainKeyDown} />\r\n
\r\n /\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nSubdomainInputView.propTypes = {\r\n i18n: PropTypes.shape({}).isRequired,\r\n isLoading: PropTypes.bool.isRequired,\r\n defaultDomainUrl: PropTypes.string.isRequired,\r\n onDomainUrlChange: PropTypes.func.isRequired,\r\n onSubdomainUrlChange: PropTypes.func.isRequired,\r\n};\r\n\r\n","import React, { useState, useCallback, useMemo, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport { makeStyles } from '@fluentui/react-components';\r\nimport { getUrlProtocolAndDomain, isValidUrl } from '@bingads-webui/url-util';\r\nimport { DomainInputView } from './domain-input-view';\r\nimport { SubdomainInputView } from './subdomain-input-view';\r\nimport { useWebsiteImages } from './useWebsiteImages';\r\nimport { PanelImageGrid } from '../panel-image-grid';\r\nimport { AdsStudioSpinner } from '../ads-studio-spinner';\r\n\r\nconst subdomainUrlRegex = /^https?:\\/\\/([a-z0-9-_]+\\.)*[a-z0-9-_]+\\.[a-z]{2,63}(?=$|\\/)\\//i;\r\n\r\nconst useStyles = makeStyles({\r\n contentWrapper: {\r\n paddingTop: '8px',\r\n },\r\n});\r\n\r\nconst getSubdomain = (url) => {\r\n const regexResult = url.trim().split(subdomainUrlRegex);\r\n if (regexResult && regexResult.length > 1) {\r\n return regexResult[2];\r\n }\r\n return url;\r\n};\r\n\r\nexport const WebsiteImagePanelContent = (props) => {\r\n const {\r\n aid, cid, oDataConfig, i18n, setSelectedImages, overlayBodyRef,\r\n } = props;\r\n const [domainUrl, setDomailUrl] = useState('');\r\n const [subdomain, setSubdomain] = useState('');\r\n const [isDomainInvalid, setIsdomainInvalid] = useState(false);\r\n const classes = useStyles();\r\n\r\n const {\r\n setPageNumber,\r\n loadNextPage,\r\n loadImages,\r\n images,\r\n totalCount,\r\n isLoadingFistPage,\r\n isLoading,\r\n setImages,\r\n onSelectImage,\r\n } = useWebsiteImages({\r\n aid, cid, oDataConfig, setSelectedImages,\r\n });\r\n\r\n const finalUrl = useMemo(() => `${domainUrl}/${subdomain}`, [domainUrl, subdomain]);\r\n const showDomain = useMemo(() => !finalUrl || !isValidUrl(finalUrl), [finalUrl]);\r\n\r\n const finalUrlDomain = useMemo(() => {\r\n if (finalUrl) {\r\n return getUrlProtocolAndDomain(finalUrl);\r\n }\r\n return '';\r\n }, [finalUrl]);\r\n\r\n const onDomainChange = useCallback((newDomainUrl) => {\r\n setDomailUrl(newDomainUrl);\r\n if (isValidUrl(newDomainUrl)) {\r\n setIsdomainInvalid(false);\r\n setPageNumber(1);\r\n setImages([]);\r\n loadImages({ url: `${newDomainUrl}/${subdomain}`, sDomain: subdomain });\r\n } else {\r\n setIsdomainInvalid(true);\r\n }\r\n }, [loadImages, setImages, setPageNumber, subdomain]);\r\n\r\n const onSubdomainChange = useCallback((newSubdomainUrl) => {\r\n if (!_.isNull(newSubdomainUrl) && !_.isUndefined(newSubdomainUrl)) {\r\n const newValue = getSubdomain(newSubdomainUrl);\r\n const newSearchUrl = `${finalUrlDomain}/${newValue}`;\r\n if (newSearchUrl !== finalUrl) {\r\n setSubdomain(newValue);\r\n setPageNumber(1);\r\n setImages([]);\r\n loadImages({ url: newSearchUrl, sDomain: newValue });\r\n }\r\n }\r\n }, [finalUrl, finalUrlDomain, loadImages, setImages, setPageNumber]);\r\n\r\n const loadMoreData = useCallback(() => {\r\n loadNextPage({ url: finalUrl, sDomain: subdomain });\r\n }, [finalUrl, loadNextPage, subdomain]);\r\n\r\n useEffect(() => {\r\n if (showDomain) {\r\n setDomailUrl('');\r\n setSubdomain('');\r\n }\r\n }, [showDomain]);\r\n\r\n return (\r\n
\r\n {\r\n showDomain ?\r\n :\r\n \r\n }\r\n {\r\n !showDomain && !isLoading && images.length === 0 &&\r\n
\r\n
\r\n
\r\n {i18n.getString(_TL_('No suggestion found from your site.'))}\r\n
\r\n
\r\n }\r\n {\r\n !showDomain && (\r\n <>\r\n { isLoadingFistPage && !images.length && }\r\n {!!images.length && (\r\n \r\n )}\r\n \r\n )\r\n }\r\n
\r\n );\r\n};\r\n\r\nWebsiteImagePanelContent.prototype = {\r\n aid: PropTypes.number.isRequired,\r\n cid: PropTypes.number.isRequired,\r\n oDataConfig: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n setSelectedImages: PropTypes.func.isRequired,\r\n};\r\n","import { useMemo, useCallback, useState, useRef } from 'react';\r\nimport _ from 'underscore';\r\nimport { SuggestionPoller } from '@bingads-webui-campaign/media-repository';\r\nimport { MIN_SIZE } from '../../../src/model/constants';\r\n\r\nexport const useWebsiteImages = ({\r\n cid, aid, oDataConfig, setSelectedImages,\r\n}) => {\r\n const [images, setImages] = useState([]);\r\n const [totalCount, setTotalCount] = useState(0);\r\n const [isLoadingFistPage, setIsLoadingFirstPage] = useState(false);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const pageNumber = useRef(0);\r\n const selectedImages = useRef([]);\r\n\r\n const suggestionPoller = useMemo(() => new SuggestionPoller({\r\n cid,\r\n aid,\r\n oDataConfig,\r\n logger: {\r\n trace: _.noop,\r\n startSignal: _.noop,\r\n stopSignal: _.noop,\r\n },\r\n jobCompleteCallback: _.noop,\r\n }), [cid, aid, oDataConfig]);\r\n\r\n const setPageNumber = useCallback((newPageNumber) => {\r\n pageNumber.current = newPageNumber;\r\n }, []);\r\n\r\n const getLandingPageSuggestions = useCallback(({\r\n landingPageUrl,\r\n isSubdomain,\r\n pageNum,\r\n }) => {\r\n const minimumResolution = {\r\n width: MIN_SIZE[0],\r\n height: MIN_SIZE[1],\r\n };\r\n if (pageNum === 1) {\r\n // eslint-disable-next-line no-restricted-globals\r\n return new Promise((resolve) => {\r\n suggestionPoller.setJobCompleteCallback(resolve);\r\n suggestionPoller.getLandingPageSuggestions({\r\n landingPageUrl,\r\n forceInternalScrapingService: isSubdomain,\r\n minimumResolution,\r\n pageNumber: pageNum,\r\n });\r\n });\r\n }\r\n return suggestionPoller.getMoreLandingPageSuggestions({\r\n landingPageUrl,\r\n pageNumber: pageNum,\r\n forceInternalScrapingService: isSubdomain,\r\n minimumResolution,\r\n });\r\n }, [suggestionPoller]);\r\n /* istanbul ignore next */\r\n const loadImages =\r\n useCallback(({ url = '', sDomain = '' }) => {\r\n if (url) {\r\n if (pageNumber.current === 1) {\r\n selectedImages.current = [];\r\n setSelectedImages(selectedImages.current);\r\n setIsLoadingFirstPage(true);\r\n }\r\n setIsLoading(true);\r\n getLandingPageSuggestions({\r\n landingPageUrl: url,\r\n isSubdomain: !!sDomain,\r\n pageNum: pageNumber.current,\r\n }).then((data) => {\r\n const { TotalCount } = data.ImagePaging;\r\n setTotalCount(TotalCount);\r\n setImages(prevImages => [\r\n ...(pageNumber.current > 1 ? prevImages : []),\r\n ..._.map(data.Images, (item) => {\r\n const image = {\r\n url: item.ThumbnailUrl || item.ImageUrl,\r\n id: item.ImageUrl,\r\n };\r\n\r\n return image;\r\n }),\r\n ]);\r\n\r\n if (pageNumber.current === 1) {\r\n setIsLoadingFirstPage(false);\r\n }\r\n\r\n setIsLoading(false);\r\n }).catch(() => {\r\n if (pageNumber.current === 1) {\r\n setIsLoadingFirstPage(false);\r\n }\r\n\r\n setIsLoading(false);\r\n });\r\n }\r\n }, [getLandingPageSuggestions, setSelectedImages]);\r\n /* istanbul ignore else */\r\n const loadNextPage = useCallback((props) => {\r\n pageNumber.current += 1;\r\n loadImages(props);\r\n }, [loadImages]);\r\n\r\n const onSelectImage = useCallback((imageId) => {\r\n const originSelectedLength = selectedImages.current.length;\r\n const newSelectedList = selectedImages.current.filter(({ id }) => id !== imageId);\r\n /* istanbul ignore else */\r\n if (newSelectedList.length === originSelectedLength) {\r\n const selectedItem = images.find(({ id }) => id === imageId);\r\n selectedImages.current.push(selectedItem);\r\n } else {\r\n selectedImages.current = newSelectedList;\r\n }\r\n setSelectedImages([...selectedImages.current]);\r\n }, [images, setSelectedImages]);\r\n\r\n return {\r\n images,\r\n totalCount,\r\n isLoadingFistPage,\r\n isLoading,\r\n setImages,\r\n loadNextPage,\r\n loadImages,\r\n setPageNumber,\r\n onSelectImage,\r\n };\r\n};\r\n","import React, { useCallback, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n Tooltip,\r\n Menu,\r\n MenuTrigger,\r\n useOverflowMenu,\r\n MenuPopover,\r\n MenuList,\r\n MenuItem,\r\n Button,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n Breadcrumb,\r\n BreadcrumbItem,\r\n BreadcrumbButton,\r\n BreadcrumbDivider,\r\n partitionBreadcrumbItems,\r\n truncateBreadcrumbLongName,\r\n isTruncatableBreadcrumbContent,\r\n} from '@fluentui/react-breadcrumb';\r\nimport { MoreHorizontalRegular } from '@fluentui/react-icons';\r\n\r\nconst DefaultMaxDisplayedItems = 5;\r\nconst DefaultMaxLengthOfItem = 30;\r\n\r\nconst OverflowItemsMenu = ({\r\n overflowItems,\r\n onItemClick,\r\n}) => {\r\n const { ref, isOverflowing, overflowCount } = useOverflowMenu();\r\n // const tooltipStyles = useTooltipStyles();\r\n\r\n const overflowItemsCount = useMemo(() =>\r\n (overflowItems ? overflowItems.length + overflowCount : overflowCount\r\n ), [overflowItems, overflowCount]);\r\n\r\n if (!isOverflowing && overflowItems && overflowItems.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n }\r\n aria-label={`${overflowItemsCount} more items`}\r\n role=\"button\"\r\n />\r\n \r\n \r\n \r\n {\r\n overflowItems && overflowItems.map(item => (\r\n onItemClick(item)}>{item.text}\r\n ))\r\n }\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport const AdsStudioBreadcrumb = ({\r\n items,\r\n onItemClick,\r\n maxDisplayedItems,\r\n maxLengthOfItem,\r\n customItemStyle,\r\n}) => {\r\n const {\r\n startDisplayedItems,\r\n overflowItems,\r\n endDisplayedItems,\r\n } = partitionBreadcrumbItems({\r\n items,\r\n maxDisplayedItems,\r\n });\r\n\r\n const lastIndex = useMemo(() => items.length - 1, [items]);\r\n\r\n const renderItem = useCallback((entry, isLastItem, onClick) => (\r\n \r\n {isTruncatableBreadcrumbContent(entry.text, maxLengthOfItem) ? (\r\n \r\n \r\n onClick(entry)}\r\n className={mergeClasses(customItemStyle.breadcrumbButton, isLastItem && customItemStyle.breadcrumbButtonCurrent)}\r\n >\r\n {truncateBreadcrumbLongName(entry.text, maxLengthOfItem)}\r\n \r\n \r\n \r\n ) : (\r\n \r\n onClick(entry)}\r\n className={mergeClasses(customItemStyle.breadcrumbButton, isLastItem && customItemStyle.breadcrumbButtonCurrent)}\r\n >{entry.text}\r\n \r\n \r\n )}\r\n\r\n {!isLastItem && }\r\n \r\n ), [customItemStyle, maxLengthOfItem]);\r\n\r\n return (\r\n \r\n {\r\n startDisplayedItems && startDisplayedItems.map((item, index) => renderItem(item, index === lastIndex, onItemClick))\r\n }\r\n {\r\n overflowItems &&\r\n \r\n }\r\n {\r\n endDisplayedItems && endDisplayedItems.map((item, index) => {\r\n const isLastItem = index + (items.length - endDisplayedItems.length) === lastIndex;\r\n return renderItem(item, isLastItem, onItemClick);\r\n })\r\n }\r\n \r\n );\r\n};\r\n\r\nAdsStudioBreadcrumb.propTypes = {\r\n items: PropTypes.arrayOf(PropTypes.shape({\r\n key: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n text: PropTypes.string,\r\n })).isRequired,\r\n onItemClick: PropTypes.func.isRequired,\r\n maxDisplayedItems: PropTypes.number,\r\n maxLengthOfItem: PropTypes.number,\r\n customItemStyle: PropTypes.shape({\r\n breadcrumbButton: PropTypes.string,\r\n breadcrumbButtonCurrent: PropTypes.string,\r\n }),\r\n};\r\n\r\nAdsStudioBreadcrumb.defaultProps = {\r\n maxDisplayedItems: DefaultMaxDisplayedItems,\r\n maxLengthOfItem: DefaultMaxLengthOfItem,\r\n customItemStyle: {},\r\n};\r\n","import { makeStyles, shorthands, tokens } from '@fluentui/react-components';\r\n\r\n\r\nexport const useLibraryEmptyViewStyle = makeStyles({\r\n CardContainer: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flexWrap: 'wrap',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n ...shorthands.gap('8px'),\r\n ...shorthands.padding('8px', '0', '0', '0'),\r\n width: '700px',\r\n\r\n '& >button': {\r\n width: '340px',\r\n },\r\n },\r\n emptyView: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n ...shorthands.gap('8px'),\r\n },\r\n emptyIcon: {\r\n width: '256px',\r\n height: '256px',\r\n },\r\n mainText: {\r\n fontFamily: 'Segoe UI',\r\n fontStyle: 'normal',\r\n textAlign: 'center',\r\n ...shorthands.overflow('hidden'),\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n color: tokens.neutralForegroundRest,\r\n lineHeight: '22px',\r\n fontWeight: 400,\r\n\r\n },\r\n});\r\n\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { mergeClasses } from '@fluentui/react-components';\r\nimport { getEntryCardData } from '../../model/utils';\r\nimport { AddAssetEntryCard } from '../add-asset-entry-card';\r\n\r\nimport { EmptyViewIcons } from '../../asset-images';\r\nimport { useLibraryEmptyViewStyle } from '../ads-studio-library-page-content/styles/empty-view-style';\r\n\r\nexport const LibraryEmptyView = ({\r\n i18n,\r\n isInSubfolder,\r\n isAnyFilterSet,\r\n onClickStock,\r\n onClickCreate,\r\n onClickUpload,\r\n onClickWebsite,\r\n onClickInvest,\r\n hideAddAssetCards,\r\n isXandrIntegrationEnabled,\r\n}) => {\r\n const cardData = getEntryCardData({\r\n i18n,\r\n onClickCreate,\r\n onClickUpload,\r\n onClickStock,\r\n onClickWebsite,\r\n onClickInvest,\r\n isXandrIntegrationEnabled,\r\n });\r\n\r\n const classes = useLibraryEmptyViewStyle();\r\n\r\n let str = i18n.getString(_TL_('You haven\\'t added any assets yet. Choose from the options below to add assets.'));\r\n if (isAnyFilterSet) {\r\n str = i18n.getString(_TL_('No assets match your search. Please try again.'));\r\n } else if (isInSubfolder) {\r\n str = i18n.getString(_TL_('You haven\\'t added any assets to this folder yet. Once you add assets, you\\'ll see them here.'));\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \"Empty\r\n
\r\n
\r\n {str}\r\n
\r\n {\r\n !hideAddAssetCards &&\r\n
\r\n {cardData.map(card => (\r\n \r\n ))}\r\n
\r\n }\r\n
\r\n );\r\n};\r\n\r\nLibraryEmptyView.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n isInSubfolder: PropTypes.bool,\r\n isAnyFilterSet: PropTypes.bool,\r\n onClickStock: PropTypes.func.isRequired,\r\n onClickCreate: PropTypes.func.isRequired,\r\n onClickUpload: PropTypes.func.isRequired,\r\n onClickWebsite: PropTypes.func.isRequired,\r\n onClickInvest: PropTypes.func.isRequired,\r\n hideAddAssetCards: PropTypes.bool,\r\n isXandrIntegrationEnabled: PropTypes.bool,\r\n};\r\n\r\nLibraryEmptyView.defaultProps = {\r\n isInSubfolder: false,\r\n isAnyFilterSet: false,\r\n hideAddAssetCards: false,\r\n isXandrIntegrationEnabled: false,\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport {\r\n Menu,\r\n MenuButton,\r\n MenuItem,\r\n MenuList,\r\n MenuDivider,\r\n MenuPopover,\r\n MenuTrigger,\r\n} from '@fluentui/react-components';\r\nimport {\r\n Add20Regular,\r\n ArrowUpload20Regular,\r\n ImageMultiple20Regular,\r\n FolderAdd20Regular,\r\n} from '@fluentui/react-icons';\r\nimport { SparkeSVGIcon } from '../../asset-images';\r\n\r\nconst AddFromAnotherSourceSubMenu = (props) => {\r\n const {\r\n i18n,\r\n onUploadImage,\r\n onUploadVideo,\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n }>\r\n {i18n.getString(_TL_('Add from another source'))}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {i18n.getString(_TL_('Add image'))}\r\n \r\n \r\n {i18n.getString(_TL_('Add video'))}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst UploadFromComputerSubMenu = (props) => {\r\n const {\r\n i18n,\r\n onUploadLocalFile,\r\n onUploadLocalFolder,\r\n } = props;\r\n\r\n return (\r\n \r\n \r\n }>\r\n {i18n.getString(_TL_('Upload from computer'))}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {i18n.getString(_TL_('Upload file'))}\r\n \r\n \r\n {i18n.getString(_TL_('Upload folder'))}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport const NewDropDown = (props) => {\r\n const {\r\n i18n,\r\n className,\r\n logger,\r\n onUploadLocalFileClick,\r\n onUploadLocalFolderClick,\r\n onUploadImageClick,\r\n onUploadVideoClick,\r\n onAIGenerateClick,\r\n onCreateFolderClick,\r\n handleUsage,\r\n } = props;\r\n\r\n const onUploadLocalFile = useCallback(() => {\r\n logger.logTrace('Add assets - file upload is clicked');\r\n onUploadLocalFileClick();\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }, [handleUsage, logger, onUploadLocalFileClick]);\r\n\r\n const onUploadLocalFolder = useCallback(() => {\r\n logger.logTrace('Add assets - folder upload is clicked');\r\n onUploadLocalFolderClick();\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }, [handleUsage, logger, onUploadLocalFolderClick]);\r\n\r\n const onUploadImage = useCallback(() => {\r\n logger.logTrace('Add assets - image source is clicked');\r\n onUploadImageClick();\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }, [handleUsage, logger, onUploadImageClick]);\r\n\r\n const onUploadVideo = useCallback(() => {\r\n logger.logTrace('Add assets - video source is clicked');\r\n onUploadVideoClick();\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }, [handleUsage, logger, onUploadVideoClick]);\r\n\r\n const onAIGenerate = useCallback(() => {\r\n logger.logTrace('Add assets - ai generate image clicked');\r\n onAIGenerateClick();\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }, [handleUsage, logger, onAIGenerateClick]);\r\n\r\n const onCreateFolder = useCallback(() => {\r\n logger.logTrace('Create folder is clicked');\r\n onCreateFolderClick();\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }, [handleUsage, logger, onCreateFolderClick]);\r\n\r\n return (\r\n
\r\n \r\n \r\n }>\r\n {i18n.getString(_TL_('New'))}\r\n \r\n \r\n\r\n \r\n \r\n } onClick={onAIGenerate}>\r\n {i18n.getString(_TL_('Generate images'))}\r\n \r\n \r\n \r\n \r\n } onClick={onCreateFolder}>\r\n {i18n.getString(_TL_('Create folder'))}\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n","import React, { useState, useRef, useCallback, useMemo, useEffect } from 'react';\r\nimport _ from 'underscore';\r\nimport {\r\n Button,\r\n MenuButton,\r\n MenuList,\r\n MenuDivider,\r\n makeStyles,\r\n tokens,\r\n Label,\r\n Input,\r\n useId,\r\n mergeClasses,\r\n Popover,\r\n PopoverTrigger,\r\n PopoverSurface,\r\n shorthands,\r\n} from '@fluentui/react-components';\r\nimport {\r\n Dismiss20Regular,\r\n} from '@fluentui/react-icons';\r\n\r\nconst useStyles = makeStyles({\r\n menuPopover: {\r\n minWidth: '180px',\r\n ...shorthands.padding('4px'),\r\n },\r\n menuButton: {\r\n // This is a known fluent ui issue between Popover and MenuButton: https://github.com/microsoft/fluentui/issues/31804\r\n // This bug has been fixed in the latest version, but as we use legacy version, update the style as a workaround.\r\n backgroundColor: 'transparent',\r\n '&[aria-expanded=\"true\"]': {\r\n backgroundColor: '#EBEBEB',\r\n },\r\n },\r\n unselectedMenuButton: {\r\n '&[aria-expanded=\"false\"]': {\r\n fontWeight: 'unset',\r\n },\r\n },\r\n enabledClearButton: {\r\n float: 'right',\r\n color: tokens.colorNeutralForeground2BrandHover,\r\n },\r\n disabledClearButton: {\r\n float: 'right',\r\n color: tokens.colorNeutralForegroundDisabled,\r\n },\r\n});\r\n\r\nconst useCustomItemStyles = makeStyles({\r\n minWidth: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n marginLeft: '28px',\r\n marginRight: '28px',\r\n maxWidth: '124px',\r\n },\r\n minHeight: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n marginLeft: '28px',\r\n marginRight: '28px',\r\n marginBottom: '6px',\r\n maxWidth: '124px',\r\n },\r\n input: {\r\n paddingRight: '0px',\r\n height: '32px',\r\n lineHeight: '32px',\r\n overflowX: 'hidden',\r\n overflowY: 'hidden',\r\n },\r\n contentAfter: {\r\n backgroundColor: tokens.colorNeutralBackground3,\r\n paddingRight: '6px',\r\n paddingLeft: '8px',\r\n },\r\n contentLabel: {\r\n marginBottom: '6px',\r\n marginTop: '8px',\r\n },\r\n});\r\n\r\nexport const ImageSizeFilter = (props) => {\r\n const {\r\n i18n,\r\n defaultMinWidth,\r\n defaultMinHeight,\r\n onChange,\r\n forceClear,\r\n onDismiss,\r\n defaultOpen = false,\r\n } = props;\r\n\r\n const minWidthId = useId('minWidth');\r\n const afterMinWidthId = useId('afterMinWidthId');\r\n const minHeightId = useId('minHeight');\r\n const afterMinHeightId = useId('afterMinHeightId');\r\n const customClasses = useCustomItemStyles();\r\n\r\n const classes = useStyles();\r\n const [isOpen, setIsOpen] = useState(defaultOpen);\r\n const [showInput, setShowInput] = useState(defaultOpen);\r\n const [menuList, setMenuList] = useState(null);\r\n\r\n // use ref to handle focus switching when pressing tab key\r\n const minWidthRef = useRef(null);\r\n const minHeightRef = useRef(null);\r\n\r\n const [minWidth, setMinWidth] = useState(defaultMinWidth);\r\n const [minHeight, setMinHeight] = useState(defaultMinHeight);\r\n\r\n const getOnChangeCallback = useCallback(setter => (event, newValue) => {\r\n const val = parseInt(newValue, 10);\r\n if (_.isEmpty(newValue) || _.isNaN(val)) {\r\n setter(null);\r\n return;\r\n }\r\n if (!_.isNaN(val) && val >= 0 && val <= 1000000) {\r\n setter(val);\r\n }\r\n }, []);\r\n\r\n const onMinWidthChange = useMemo(\r\n () => getOnChangeCallback(setMinWidth),\r\n [getOnChangeCallback]\r\n );\r\n\r\n const onMinHeightChange = useMemo(\r\n () => getOnChangeCallback(setMinHeight),\r\n [getOnChangeCallback]\r\n );\r\n\r\n const onClear = useCallback(() => {\r\n setMinWidth(null);\r\n setMinHeight(null);\r\n if ((defaultMinHeight || defaultMinWidth)) {\r\n // trigger onchange only when dropdown list is closed\r\n onChange({ newMinHeight: null, newMinWidth: null });\r\n }\r\n if (onDismiss) {\r\n onDismiss();\r\n }\r\n }, [defaultMinHeight, defaultMinWidth, onChange, onDismiss]);\r\n\r\n const title = useMemo(() => {\r\n if (minWidth && minHeight) {\r\n return `> ${minWidth}px x ${minHeight}px`;\r\n }\r\n if (minWidth) {\r\n return `${i18n.getString(_TL_('Width'))} > ${minWidth}px`;\r\n }\r\n if (minHeight) {\r\n return `${i18n.getString(_TL_('Height'))} > ${minHeight}px`;\r\n }\r\n return '';\r\n }, [i18n, minHeight, minWidth]);\r\n\r\n const focusTextField = useCallback(textFieldRef => (event) => {\r\n if (event.key === 'Tab') {\r\n if (textFieldRef.current) {\r\n textFieldRef.current.focus();\r\n }\r\n if (event.stopPropagation) { event.stopPropagation(); }\r\n if (event.preventDefault) { event.preventDefault(); }\r\n }\r\n }, []);\r\n\r\n const onMinWidthKeyUp = useMemo(() => focusTextField(minHeightRef), [focusTextField]);\r\n const onMinHeightKeyUp = useMemo(() => focusTextField(minWidthRef), [focusTextField]);\r\n\r\n const onDropdownDismiss = useCallback(() => {\r\n if (defaultMinHeight !== minHeight || defaultMinWidth !== minWidth) {\r\n onChange({ newMinWidth: minWidth, newMinHeight: minHeight }, title);\r\n }\r\n }, [defaultMinHeight, defaultMinWidth, minHeight, minWidth, onChange, title]);\r\n\r\n const clear = () => {\r\n setIsOpen(false);\r\n onClear();\r\n };\r\n\r\n const isSelected = useMemo(() => minWidth || minHeight, [minHeight, minWidth]);\r\n\r\n const onOpenChange = (e, data) => {\r\n setIsOpen(data.open);\r\n };\r\n\r\n useEffect(() => {\r\n if (forceClear) {\r\n clear();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [forceClear]);\r\n\r\n useEffect(() => {\r\n if (!isOpen) {\r\n onDropdownDismiss();\r\n }\r\n }, [isOpen, onDropdownDismiss]);\r\n\r\n useEffect(() => {\r\n let timeoutId;\r\n if (isOpen) {\r\n timeoutId = setTimeout(() => {\r\n if (minWidthRef.current) {\r\n minWidthRef.current.focus();\r\n }\r\n }, 300);\r\n }\r\n setShowInput(isOpen);\r\n return () => {\r\n clearTimeout(timeoutId);\r\n };\r\n }, [isOpen]);\r\n\r\n useEffect(() => {\r\n if (menuList) {\r\n // as we are using custom input, we need to remove menu role for accessibility\r\n menuList.removeAttribute('role');\r\n }\r\n }, [menuList]);\r\n\r\n return (\r\n \r\n \r\n \r\n {isSelected ? title : i18n.getString(_TL_('Image ratio'))}\r\n \r\n \r\n\r\n \r\n \r\n
\r\n
\r\n \r\n {\r\n // Add a condition to check if the input should be shown or not\r\n // By this way, screen reader can read the expanded state of Menu correctly\r\n showInput &&\r\n onMinWidthChange(ev, data.value)}\r\n contentAfter={\r\n
\r\n {i18n.getString(_TL_('px'))}\r\n
\r\n }\r\n aria-labelledby={`${minWidthId} ${afterMinWidthId}`}\r\n id={minWidthId}\r\n onKeyDown={onMinWidthKeyUp}\r\n />\r\n }\r\n
\r\n
\r\n \r\n {\r\n showInput &&\r\n onMinHeightChange(ev, data.value)}\r\n contentAfter={\r\n
\r\n {i18n.getString(_TL_('px'))}\r\n
\r\n }\r\n onKeyDown={onMinHeightKeyUp}\r\n aria-labelledby={`${minHeightId} ${afterMinHeightId}`}\r\n id={minHeightId}\r\n />\r\n }\r\n
\r\n
\r\n \r\n
\r\n
\r\n }\r\n onClick={() => clear()}\r\n >\r\n {i18n.getString(_TL_('Clear'))}\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n","import classnames from 'classnames';\r\nimport React, { useCallback, useMemo, useState, useRef, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { CivilDate } from 'tc39-proposal-temporal';\r\nimport { SingleMonthCalendar } from '@bingads-webui-react/single-month-calendar';\r\n\r\nimport { civilDateRangeEqual } from '../../../utils/date-utils';\r\n\r\n// this is a simple date range picker based on the Calendar control used in\r\n// Campaign UI (NOT Fluent UI Calendar)\r\n// the 'Compare' feature is not supported, so only one date range selection\r\n// is supported\r\nconst SimpleDateRangePickerInternal = ({\r\n defaultSelectedDateRange,\r\n // to select a date range, need to select 2 days (start & end) on calendars\r\n // this value control which value is currently selecting\r\n defaultIsSelectingStartDate,\r\n onDateRangeChange,\r\n timeZone,\r\n i18n,\r\n}) => {\r\n // use ref instead of state to avoid unnecessary rending\r\n const isSelectingStartDate = useRef(defaultIsSelectingStartDate);\r\n\r\n const [selectedDateRange, setSelectedDateRange]\r\n = useState(defaultSelectedDateRange);\r\n\r\n // the navigatedDate set on the left calendar, which control which month\r\n // is shown on the calendar\r\n const [leftNavigatedDate, setLeftNavigationDate] = useState(new CivilDate(\r\n defaultSelectedDateRange.end.year,\r\n defaultSelectedDateRange.end.month - 1,\r\n 15\r\n ));\r\n\r\n // the navigatedDate set on the right calendar\r\n const rightNavigatedDate = useMemo(\r\n () => new CivilDate(leftNavigatedDate.year, leftNavigatedDate.month + 1, 15),\r\n [leftNavigatedDate]\r\n );\r\n\r\n const today = useMemo(() => {\r\n const todayObj = i18n.getToday({ timeZone });\r\n return new CivilDate(todayObj.year, todayObj.month, todayObj.day);\r\n }, [i18n, timeZone]);\r\n\r\n // for now, use the default values here\r\n const minDate = useMemo(() => today.plus({ years: -3 }), [today]);\r\n const maxDate = today;\r\n\r\n // 'Compare' is not supported, so only one range is used\r\n const selectedRanges = useMemo(() => [selectedDateRange], [selectedDateRange]);\r\n\r\n // click '<' button on the left calendar\r\n const onNavigateStartMonthDate = useCallback((date) => {\r\n setLeftNavigationDate(date);\r\n }, []);\r\n\r\n // click '>' button on the right calendar\r\n const onNavigateEndMonthDate = useCallback((date) => {\r\n setLeftNavigationDate(date.plus({ months: -1 }));\r\n }, []);\r\n\r\n const onSelectDate = useCallback((newDate) => {\r\n let { start, end } = selectedDateRange || {};\r\n if (isSelectingStartDate.current) {\r\n start = newDate;\r\n end = end > newDate ? end : newDate;\r\n } else {\r\n end = newDate;\r\n }\r\n if (start > end) {\r\n setSelectedDateRange({ start: end, end: start });\r\n } else {\r\n setSelectedDateRange({ start, end });\r\n }\r\n isSelectingStartDate.current = !isSelectingStartDate.current;\r\n }, [selectedDateRange]);\r\n\r\n useEffect(() => {\r\n if (!civilDateRangeEqual(selectedDateRange, defaultSelectedDateRange) && onDateRangeChange) {\r\n onDateRangeChange(selectedDateRange);\r\n }\r\n }, [onDateRangeChange, selectedDateRange, defaultSelectedDateRange]);\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nSimpleDateRangePickerInternal.propTypes = {\r\n defaultSelectedDateRange: PropTypes.shape({\r\n start: PropTypes.instanceOf(CivilDate),\r\n end: PropTypes.instanceOf(CivilDate),\r\n }).isRequired,\r\n defaultIsSelectingStartDate: PropTypes.bool,\r\n onDateRangeChange: PropTypes.func,\r\n timeZone: PropTypes.string.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n getToday: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nSimpleDateRangePickerInternal.defaultProps = {\r\n defaultIsSelectingStartDate: true,\r\n onDateRangeChange: undefined,\r\n};\r\n\r\nexport const SimpleDateRangePicker = SimpleDateRangePickerInternal;\r\n","import React, { useState, useMemo, useCallback, useRef, useEffect } from 'react';\r\nimport {\r\n Menu,\r\n Button,\r\n MenuButton,\r\n MenuList,\r\n MenuDivider,\r\n MenuPopover,\r\n MenuTrigger,\r\n MenuItemRadio,\r\n makeStyles,\r\n tokens,\r\n shorthands,\r\n Label,\r\n Input,\r\n useId,\r\n mergeClasses,\r\n Popover,\r\n PopoverTrigger,\r\n PopoverSurface,\r\n} from '@fluentui/react-components';\r\nimport {\r\n Dismiss20Regular,\r\n ChevronRight20Filled,\r\n ChevronRight20Regular,\r\n CalendarLtr20Regular,\r\n bundleIcon,\r\n} from '@fluentui/react-icons';\r\nimport {\r\n SimpleDateRangePicker,\r\n} from './simple-date-range-picker';\r\nimport {\r\n CSMLTimeFrame,\r\n} from '../../model';\r\nimport {\r\n civilDateRangeEqual,\r\n} from '../../utils';\r\n\r\n\r\nconst ChevronRightIcon = bundleIcon(ChevronRight20Filled, ChevronRight20Regular);\r\n\r\nconst useStyles = makeStyles({\r\n menuPopover: {\r\n minWidth: '240px',\r\n ...shorthands.padding('4px'),\r\n },\r\n menuButton: {\r\n // This is a known fluent ui issue between Popover and MenuButton: https://github.com/microsoft/fluentui/issues/31804\r\n // This bug has been fixed in the latest version, but as we use legacy version, update the style as a workaround.\r\n backgroundColor: 'transparent',\r\n '&[aria-expanded=\"true\"]': {\r\n backgroundColor: '#EBEBEB',\r\n },\r\n },\r\n unselectedMenuButton: {\r\n '&[aria-expanded=\"false\"]': {\r\n fontWeight: 'unset',\r\n },\r\n },\r\n enabledClearButton: {\r\n float: 'right',\r\n color: tokens.colorNeutralForeground2BrandHover,\r\n },\r\n disabledClearButton: {\r\n float: 'right',\r\n color: tokens.colorNeutralForegroundDisabled,\r\n },\r\n});\r\n\r\nconst useCustomItemStyles = makeStyles({\r\n menuPopover: {\r\n maxWidth: 'unset',\r\n '& .compared-date-range-picker-dialog': {\r\n top: 'auto !important',\r\n left: 'auto !important',\r\n right: 'auto !important',\r\n width: 'auto !important',\r\n height: 'auto !important',\r\n paddingLeft: '14px',\r\n paddingRight: '14px',\r\n paddingTop: '14px',\r\n position: 'relative',\r\n boxShadow: 'none',\r\n ...shorthands.border('0px', 'none'),\r\n },\r\n },\r\n item: {\r\n '& .fui-MenuItem__content': {\r\n display: 'flex',\r\n paddingRight: '0px',\r\n },\r\n },\r\n text: {\r\n flexGrow: '1',\r\n },\r\n icon: {\r\n },\r\n startDate: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n marginLeft: '28px',\r\n marginRight: '28px',\r\n maxWidth: '160px',\r\n },\r\n endDate: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n marginLeft: '28px',\r\n marginRight: '28px',\r\n marginBottom: '6px',\r\n maxWidth: '160px',\r\n },\r\n input: {\r\n paddingRight: '0px',\r\n height: '32px',\r\n lineHeight: '32px',\r\n overflowX: 'hidden',\r\n overflowY: 'hidden',\r\n },\r\n contentAfter: {\r\n paddingRight: '6px',\r\n paddingLeft: '8px',\r\n '& svg': {\r\n display: 'block',\r\n },\r\n },\r\n contentLabel: {\r\n marginBottom: '6px',\r\n marginTop: '8px',\r\n },\r\n});\r\n\r\nconst CustomItem = (props) => {\r\n const {\r\n i18n,\r\n isCustomSelected,\r\n timeZone,\r\n customDateRange,\r\n setCustomDateRange,\r\n customRangeStartStr,\r\n customRangeEndStr,\r\n name,\r\n customOption,\r\n } = props;\r\n\r\n const classes = useCustomItemStyles();\r\n const menuItemRef = useRef(null);\r\n const startDateId = useId('startDate');\r\n const afterStartDateId = useId('afterStartDateId');\r\n const startDateRef = useRef(null);\r\n const endDateId = useId('endDate');\r\n const afterEndDateId = useId('afterEndDateId');\r\n const [isDatePickerOpen, setIsDatePickerOpen] = useState(false);\r\n const isOpen = useMemo(() => isDatePickerOpen && isCustomSelected, [isDatePickerOpen, isCustomSelected]);\r\n const onOpenChange = (e, data) => {\r\n setIsDatePickerOpen(data.open);\r\n };\r\n\r\n // date range picker related handling\r\n // selecting 'start' or 'end' on date range picker\r\n const isSelectingStartDate = useRef(true);\r\n\r\n const onSelectedDateRangeChange = useCallback((newRange) => {\r\n setCustomDateRange(newRange);\r\n }, [setCustomDateRange]);\r\n\r\n const openDatePickerForStart = useCallback(() => {\r\n setIsDatePickerOpen(true);\r\n isSelectingStartDate.current = true;\r\n }, []);\r\n\r\n const openDatePickerForEnd = useCallback(() => {\r\n setIsDatePickerOpen(true);\r\n isSelectingStartDate.current = false;\r\n }, []);\r\n\r\n const onStartKeyDown = useCallback((event) => {\r\n if (event.code === 'Enter') {\r\n openDatePickerForStart();\r\n event.preventDefault();\r\n } else if (event.code === 'ArrowUp') {\r\n if (menuItemRef.current) {\r\n menuItemRef.current.focus();\r\n event.preventDefault();\r\n }\r\n }\r\n }, [openDatePickerForStart]);\r\n\r\n const onEndKeyDown = useCallback((event) => {\r\n if (event.code === 'Enter') {\r\n openDatePickerForEnd();\r\n event.preventDefault();\r\n } else if (event.code === 'ArrowUp') {\r\n if (startDateRef.current) {\r\n startDateRef.current.focus();\r\n event.preventDefault();\r\n }\r\n }\r\n }, [openDatePickerForEnd]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n {customOption.text}\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n {isCustomSelected && (\r\n
\r\n
\r\n \r\n openDatePickerForStart()}\r\n onKeyDown={onStartKeyDown}\r\n readOnly\r\n contentAfter={\r\n
\r\n \r\n
\r\n }\r\n value={customRangeStartStr}\r\n aria-labelledby={`${startDateId} ${afterStartDateId}`}\r\n id={startDateId}\r\n />\r\n
\r\n
\r\n \r\n openDatePickerForEnd()}\r\n onKeyDown={onEndKeyDown}\r\n readOnly\r\n contentAfter={\r\n
\r\n \r\n
\r\n }\r\n value={customRangeEndStr}\r\n aria-labelledby={`${endDateId} ${afterEndDateId}`}\r\n id={endDateId}\r\n />\r\n
\r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport const DateAddedFilter = (props) => {\r\n const {\r\n i18n,\r\n dateFormat,\r\n timeZone,\r\n defaultTimeFrame,\r\n defaultCustomDateRange,\r\n options,\r\n onChange,\r\n forceClear,\r\n onDismiss,\r\n defaultOpen = false,\r\n } = props;\r\n\r\n const classes = useStyles();\r\n const name = 'date';\r\n const [checkedValues, setCheckedValues] = useState({\r\n [name]: [defaultTimeFrame],\r\n });\r\n const isCustomSelected = useMemo(() => checkedValues[name].includes(CSMLTimeFrame.Custom), [checkedValues]);\r\n const customOption = useMemo(() => options.find(option => option.key === CSMLTimeFrame.Custom), [options]);\r\n const optionsWithoutCustom = useMemo(() => options.filter(option => option.key !== CSMLTimeFrame.Custom), [options]);\r\n // date range user selected for 'Custom'\r\n const [customDateRange, setCustomDateRange] = useState(defaultCustomDateRange);\r\n\r\n // dropdown related handling\r\n const formatDate = useCallback(\r\n date => i18n.formatCivilDate(date, { raw: dateFormat, timeZone }),\r\n [dateFormat, i18n, timeZone]\r\n );\r\n\r\n const customRangeStartStr = useMemo(\r\n () => formatDate(customDateRange.start),\r\n [formatDate, customDateRange.start]\r\n );\r\n\r\n const customRangeEndStr = useMemo(\r\n () => formatDate(customDateRange.end),\r\n [formatDate, customDateRange.end]\r\n );\r\n\r\n const selectedChoice = useMemo(\r\n () => options.find(r => r.key === checkedValues[name][0]),\r\n [checkedValues, options]\r\n );\r\n\r\n // the string shown on dropdown title\r\n const dropdownTitle = useMemo(() => {\r\n if (!selectedChoice) {\r\n return null;\r\n }\r\n if (selectedChoice.key === CSMLTimeFrame.Custom) {\r\n return `${customRangeStartStr} - ${customRangeEndStr}`;\r\n }\r\n return selectedChoice.text;\r\n }, [customRangeEndStr, customRangeStartStr, selectedChoice]);\r\n\r\n // when the X button on dropdown title is clicked\r\n const onDropdownClear = useCallback(() => {\r\n if (onChange && defaultTimeFrame !== CSMLTimeFrame.Anytime) {\r\n onChange({ timeframe: CSMLTimeFrame.Anytime, customDateRange });\r\n }\r\n if (onDismiss) {\r\n onDismiss();\r\n }\r\n }, [customDateRange, defaultTimeFrame, onChange, onDismiss]);\r\n\r\n // when dropdown list is dismissed\r\n const onDropdownDismiss = useCallback(() => {\r\n const timeframe = checkedValues[name][0];\r\n if (timeframe && onChange) {\r\n if (defaultTimeFrame !== timeframe\r\n || !civilDateRangeEqual(defaultCustomDateRange, customDateRange)) {\r\n onChange({ timeframe, customDateRange }, dropdownTitle);\r\n }\r\n }\r\n }, [checkedValues, customDateRange, defaultCustomDateRange, defaultTimeFrame, dropdownTitle, onChange]);\r\n\r\n const [isOpen, setIsOpen] = useState(defaultOpen);\r\n const clear = useCallback(() => {\r\n setIsOpen(false);\r\n setCheckedValues(() => ({\r\n [name]: [],\r\n }));\r\n onDropdownClear();\r\n }, [onDropdownClear]);\r\n\r\n const onCheckedValueChange = (e, data) => {\r\n const {\r\n checkedItems,\r\n } = data;\r\n setCheckedValues(s => ({\r\n ...s,\r\n [name]: checkedItems,\r\n }));\r\n if (checkedItems && checkedItems.length > 0 && checkedItems[0] !== CSMLTimeFrame.Custom) {\r\n setIsOpen(false);\r\n }\r\n };\r\n\r\n const isSelected = useMemo(() => checkedValues[name].length > 0 && checkedValues[name][0] !== CSMLTimeFrame.Anytime, [checkedValues]);\r\n\r\n const onOpenChange = (e, data) => {\r\n setIsOpen(data.open);\r\n };\r\n\r\n useEffect(() => {\r\n if (forceClear) {\r\n clear();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [forceClear]);\r\n\r\n useEffect(() => {\r\n if (!isOpen) {\r\n onDropdownDismiss();\r\n }\r\n }, [isOpen, onDropdownDismiss]);\r\n\r\n return (\r\n \r\n \r\n \r\n {isSelected ? dropdownTitle : i18n.getString(_TL_('Date added'))}\r\n \r\n \r\n\r\n \r\n \r\n {optionsWithoutCustom.map(option => (\r\n \r\n {option.text}\r\n \r\n ))}\r\n {customOption &&\r\n }\r\n \r\n \r\n
\r\n }\r\n onClick={() => clear()}\r\n >\r\n {i18n.getString(_TL_('Clear'))}\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n","import React from 'react';\r\nimport { SearchBox } from '@fluentui/react-search';\r\nimport {\r\n makeStyles,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\n\r\nconst useStyles = makeStyles({\r\n searchBox: {\r\n minWidth: '300px',\r\n '& input[type=\"search\"]': {\r\n backgroundImage: 'none',\r\n backgroundSize: 'unset',\r\n paddingLeft: '4px',\r\n },\r\n '& input[type=\"search\"]::placeholder ': {\r\n color: '#707070',\r\n },\r\n },\r\n});\r\n\r\nexport const SearchBoxFilter = (props) => {\r\n const {\r\n i18n,\r\n className,\r\n onSearchTextChanging,\r\n onSearchTextChange,\r\n onSearchTextBlur,\r\n onSearchTextClear,\r\n defaultSearchText,\r\n searchboxPlaceHolder,\r\n autoFocus,\r\n ariaLabel,\r\n } = props;\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n
\r\n {\r\n if (data.value === '' && e.type === 'click') {\r\n onSearchTextClear(data);\r\n } else {\r\n onSearchTextChanging(e, data.value);\r\n }\r\n }}\r\n onKeyDown={(e) => {\r\n if (e.key === 'Enter') {\r\n onSearchTextChange(e.target.value);\r\n }\r\n }}\r\n onBlur={() => {\r\n onSearchTextBlur();\r\n }}\r\n />\r\n
\r\n );\r\n};\r\n","import React from 'react';\r\nimport {\r\n makeStyles,\r\n mergeClasses,\r\n shorthands,\r\n} from '@fluentui/react-components';\r\nimport { ToggleButtons } from '@bingads-webui-campaign-react/ads-studio-shared-components';\r\n\r\nconst useStyles = makeStyles({\r\n toggleButton: {\r\n minWidth: 'unset',\r\n fontWeight: 'unset',\r\n },\r\n toggleButtons: {\r\n display: 'flex',\r\n columnGap: '8px',\r\n },\r\n selectedButton: {\r\n minWidth: 'unset',\r\n backgroundColor: '#EBF3FC',\r\n ...shorthands.border('1px', 'solid', '#B4D6FA'),\r\n color: '#115EA3',\r\n },\r\n});\r\n\r\nexport const AssetTypeToggleButtonsFilter = (props) => {\r\n const {\r\n className,\r\n options,\r\n optionsState,\r\n toggleSelectedOption,\r\n } = props;\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n","import React, { useState, useMemo, useEffect } from 'react';\r\nimport {\r\n Menu,\r\n MenuButton,\r\n MenuList,\r\n MenuPopover,\r\n MenuTrigger,\r\n MenuItemRadio,\r\n makeStyles,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n ArrowSort20Regular,\r\n ArrowSortUp20Regular,\r\n ArrowSortDown20Regular,\r\n} from '@fluentui/react-icons';\r\nimport {\r\n CSMLSortIcon,\r\n CSMLSortBy,\r\n} from '../../model';\r\n\r\nconst useStyles = makeStyles({\r\n menuPopover: {\r\n minWidth: '180px',\r\n },\r\n item: {\r\n '& .fui-MenuItem__content': {\r\n display: 'flex',\r\n },\r\n },\r\n});\r\n\r\nexport const SortByFilter = (props) => {\r\n const {\r\n className,\r\n options,\r\n sortBy,\r\n onChange,\r\n } = props;\r\n\r\n const classes = useStyles();\r\n const name = 'sortBy';\r\n const [checkedValues, setCheckedValues] = useState({\r\n [name]: [sortBy || CSMLSortBy.MostRecent],\r\n });\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const onCheckedValueChange = (e, data) => {\r\n const {\r\n checkedItems,\r\n } = data;\r\n setCheckedValues(s => ({\r\n ...s,\r\n [name]: checkedItems,\r\n }));\r\n onChange(e, {\r\n key: checkedItems[0],\r\n });\r\n };\r\n\r\n const onOpenChange = (e, data) => {\r\n setIsOpen(data.open);\r\n };\r\n\r\n const selectedOptionMemo = useMemo(() => {\r\n const selectedOption = options.find(option => option.key === checkedValues[name][0]);\r\n return selectedOption ?\r\n <>\r\n {selectedOption.text}\r\n {selectedOption.icon && selectedOption.icon === CSMLSortIcon.SortUp && }\r\n {selectedOption.icon && selectedOption.icon === CSMLSortIcon.SortDown && }\r\n : '';\r\n }, [checkedValues, options]);\r\n\r\n // As, this could be modified by the parent component, we need to update the checkedValues\r\n useEffect(() => {\r\n if (sortBy === checkedValues[name][0]) {\r\n return;\r\n }\r\n if (sortBy == null) {\r\n return;\r\n }\r\n setCheckedValues({\r\n [name]: [sortBy],\r\n });\r\n }, [checkedValues, sortBy]);\r\n\r\n return (\r\n
\r\n \r\n \r\n }>\r\n {selectedOptionMemo}\r\n \r\n \r\n\r\n \r\n \r\n {\r\n options.map((option, index) => (\r\n \r\n {option.text}\r\n {option.icon && option.icon === CSMLSortIcon.SortUp && }\r\n {option.icon && option.icon === CSMLSortIcon.SortDown && }\r\n \r\n ))\r\n }\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\n","import React, { useState, useCallback, useMemo, useEffect } from 'react';\r\nimport _ from 'underscore';\r\nimport {\r\n Menu,\r\n Button,\r\n MenuButton,\r\n MenuList,\r\n MenuDivider,\r\n MenuPopover,\r\n MenuTrigger,\r\n makeStyles,\r\n tokens,\r\n Checkbox,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n Dismiss20Regular,\r\n} from '@fluentui/react-icons';\r\n\r\nconst useStyles = makeStyles({\r\n menuPopover: {\r\n minWidth: '180px',\r\n },\r\n unselectedMenuButton: {\r\n '&[aria-expanded=\"false\"]': {\r\n fontWeight: 'unset',\r\n },\r\n },\r\n enabledClearButton: {\r\n float: 'right',\r\n color: tokens.colorNeutralForeground2BrandHover,\r\n },\r\n disabledClearButton: {\r\n float: 'right',\r\n color: tokens.colorNeutralForegroundDisabled,\r\n },\r\n checkbox: {\r\n '& label': {\r\n paddingLeft: '0px',\r\n fontWeight: 'unset',\r\n },\r\n },\r\n});\r\n\r\nexport const AssetSourceFilter = (props) => {\r\n const {\r\n i18n,\r\n defaultSelectedAssetSources,\r\n options,\r\n onChange,\r\n forceClear,\r\n onDismiss,\r\n defaultOpen = false,\r\n } = props;\r\n\r\n const classes = useStyles();\r\n const [selectedAssetSources, setSelectedAssetSources] = useState(defaultSelectedAssetSources);\r\n const [isOpen, setIsOpen] = useState(defaultOpen);\r\n\r\n const selectedOptions = useMemo(\r\n () => _.filter(options, ({ key }) => _.contains(selectedAssetSources, key)) || [],\r\n [selectedAssetSources, options]\r\n );\r\n\r\n const onChangeCallback = useCallback((key, checked) => {\r\n const selectedSources = checked ? _.sortBy([...selectedAssetSources, key]) : _.without(selectedAssetSources, key);\r\n setSelectedAssetSources(selectedSources || []);\r\n }, [selectedAssetSources]);\r\n\r\n // the string shown on dropdown title\r\n const dropdownTitle = useMemo(() => {\r\n if (_.isEmpty(selectedOptions)) return null;\r\n const title = _.uniq(selectedOptions.map(({ text }) => text)).join('; ');\r\n return title;\r\n }, [selectedOptions]);\r\n\r\n const isSelected = useMemo(() => !_.isEmpty(selectedAssetSources), [selectedAssetSources]);\r\n\r\n // when the X button on dropdown title is clicked\r\n const onDropdownClear = useCallback(() => {\r\n setSelectedAssetSources([]);\r\n if (onChange && !_.isEmpty(defaultSelectedAssetSources)) {\r\n onChange([]);\r\n }\r\n if (onDismiss) {\r\n onDismiss();\r\n }\r\n }, [defaultSelectedAssetSources, onChange, onDismiss]);\r\n\r\n // when dropdown list is dismissed\r\n const onDropdownDismiss = useCallback(() => {\r\n if (onChange && !_.isEqual(defaultSelectedAssetSources, selectedAssetSources)) {\r\n onChange(selectedAssetSources, dropdownTitle);\r\n }\r\n }, [defaultSelectedAssetSources, dropdownTitle, selectedAssetSources, onChange]);\r\n\r\n const clear = () => {\r\n setIsOpen(false);\r\n onDropdownClear();\r\n };\r\n\r\n const onOpenChange = (e, data) => {\r\n setIsOpen(data.open);\r\n };\r\n\r\n useEffect(() => {\r\n if (forceClear) {\r\n clear();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [forceClear]);\r\n\r\n useEffect(() => {\r\n if (!isOpen) {\r\n onDropdownDismiss();\r\n }\r\n }, [isOpen, onDropdownDismiss]);\r\n\r\n return (\r\n \r\n \r\n \r\n {dropdownTitle || i18n.getString(_TL_('Source'))}\r\n \r\n \r\n\r\n \r\n \r\n
\r\n {options.map(option => (\r\n
\r\n onChangeCallback(option.key, data.checked)}\r\n />\r\n
\r\n ))}\r\n
\r\n \r\n
\r\n }\r\n onClick={() => clear()}\r\n >\r\n {i18n.getString(_TL_('Clear'))}\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n","import React, { useMemo, useEffect, useState, useRef, useCallback } from 'react';\r\nimport _ from 'underscore';\r\nimport {\r\n Button,\r\n MenuButton,\r\n MenuList,\r\n MenuDivider,\r\n Popover,\r\n PopoverSurface,\r\n PopoverTrigger,\r\n makeStyles,\r\n shorthands,\r\n tokens,\r\n Label,\r\n Input,\r\n useId,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n Dismiss20Regular,\r\n} from '@fluentui/react-icons';\r\n\r\nconst useStyles = makeStyles({\r\n menuPopover: {\r\n minWidth: '180px',\r\n ...shorthands.padding('4px'),\r\n },\r\n menuButton: {\r\n // This is a known fluent ui issue between Popover and MenuButton: https://github.com/microsoft/fluentui/issues/31804\r\n // This bug has been fixed in the latest version, but as we use legacy version, update the style as a workaround.\r\n backgroundColor: 'transparent',\r\n '&[aria-expanded=\"true\"]': {\r\n backgroundColor: '#EBEBEB',\r\n },\r\n },\r\n unselectedMenuButton: {\r\n '&[aria-expanded=\"false\"]': {\r\n fontWeight: 'unset',\r\n },\r\n },\r\n enabledClearButton: {\r\n float: 'right',\r\n color: tokens.colorNeutralForeground2BrandHover,\r\n },\r\n disabledClearButton: {\r\n float: 'right',\r\n color: tokens.colorNeutralForegroundDisabled,\r\n },\r\n});\r\n\r\nconst useCustomItemStyles = makeStyles({\r\n minDuration: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n marginLeft: '28px',\r\n marginRight: '28px',\r\n maxWidth: '124px',\r\n },\r\n customDuration: {\r\n '& .invalidInput': {\r\n '&:focus-within': {\r\n '::after': {\r\n ...shorthands.borderBottom('2px', 'solid', 'rgb(164, 38, 44)'),\r\n },\r\n },\r\n ...shorthands.borderBottom('1px', 'solid', 'rgb(164, 38, 44)'),\r\n },\r\n },\r\n maxDuration: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n marginLeft: '28px',\r\n marginRight: '28px',\r\n marginBottom: '6px',\r\n maxWidth: '124px',\r\n },\r\n input: {\r\n paddingRight: '0px',\r\n height: '32px',\r\n lineHeight: '32px',\r\n overflowX: 'hidden',\r\n overflowY: 'hidden',\r\n },\r\n contentAfter: {\r\n backgroundColor: tokens.colorNeutralBackground3,\r\n paddingRight: '6px',\r\n paddingLeft: '8px',\r\n },\r\n contentLabel: {\r\n marginBottom: '6px',\r\n marginTop: '8px',\r\n },\r\n});\r\n\r\nexport const VideoDurationFilter = (props) => {\r\n const {\r\n i18n,\r\n defaultMaxDuration,\r\n defaultMinDuration,\r\n onChange,\r\n forceClear,\r\n } = props;\r\n\r\n const minDurationId = useId('minDuration');\r\n const afterMinDurationId = useId('afterMinDurationId');\r\n const maxDurationId = useId('maxDuration');\r\n const afterMaxDurationId = useId('afterMaxDurationId');\r\n const customClasses = useCustomItemStyles();\r\n const classes = useStyles();\r\n\r\n // use ref to handle focus switching when pressing tab key\r\n const minDurationRef = useRef(null);\r\n const maxDurationRef = useRef(null);\r\n\r\n const [minDuration, setMinDuration] = useState(defaultMinDuration);\r\n const [maxDuration, setMaxDuration] = useState(defaultMaxDuration);\r\n\r\n const [minDurationInvalid, setMinDurationInvalid] = useState(false);\r\n const [maxDurationInvalid, setMaxDurationInvalid] = useState(false);\r\n\r\n const onChangeCallback = useCallback((setter, newValue) => {\r\n const val = parseInt(newValue, 10);\r\n if (_.isEmpty(newValue) || _.isNaN(val)) {\r\n setter(null);\r\n return;\r\n }\r\n if (!_.isNaN(val) && val >= 0 && val <= 1000000) {\r\n setter(val);\r\n }\r\n }, []);\r\n\r\n const onMinDurationChange = useCallback((event, newValue) => {\r\n onChangeCallback(setMinDuration, newValue);\r\n if (_.isEmpty(newValue) || maxDuration > newValue) {\r\n setMinDurationInvalid(false);\r\n setMaxDurationInvalid(false);\r\n } else if ((maxDuration && newValue >= maxDuration)) {\r\n setMinDurationInvalid(true);\r\n } else {\r\n setMinDurationInvalid(false);\r\n }\r\n }, [maxDuration, onChangeCallback]);\r\n\r\n const onMaxDurationChange = useCallback((event, newValue) => {\r\n onChangeCallback(setMaxDuration, newValue);\r\n if (_.isEmpty(newValue) || newValue > minDuration) {\r\n setMinDurationInvalid(false);\r\n setMaxDurationInvalid(false);\r\n } else if (newValue <= minDuration) {\r\n setMaxDurationInvalid(true);\r\n } else {\r\n setMaxDurationInvalid(false);\r\n }\r\n }, [onChangeCallback, minDuration]);\r\n\r\n const onClear = useCallback(() => {\r\n setMinDuration(null);\r\n setMaxDuration(null);\r\n if (!(defaultMinDuration || defaultMaxDuration)) {\r\n // trigger onchange only when dropdown list is closed\r\n onChange({ newMinDuration: null, newMaxDuration: null });\r\n }\r\n if (minDurationRef.current) {\r\n minDurationRef.current.focus();\r\n }\r\n }, [defaultMinDuration, defaultMaxDuration, onChange]);\r\n\r\n const title = useMemo(() => {\r\n if (minDuration && maxDuration && !minDurationInvalid && !maxDurationInvalid) {\r\n return `${minDuration}s < ${i18n.getString(_TL_('Duration'))} < ${maxDuration}s`;\r\n }\r\n if (minDuration && !minDurationInvalid) {\r\n return `${i18n.getString(_TL_('Duration'))} > ${minDuration}s`;\r\n }\r\n if (maxDuration && !maxDurationInvalid) {\r\n return `${i18n.getString(_TL_('Duration'))} < ${maxDuration}s`;\r\n }\r\n return '';\r\n }, [minDuration, maxDuration, minDurationInvalid, maxDurationInvalid, i18n]);\r\n\r\n const focusTextField = useCallback(textFieldRef => (event) => {\r\n if (event.key === 'Tab') {\r\n if (textFieldRef.current) {\r\n textFieldRef.current.focus();\r\n }\r\n if (event.stopPropagation) { event.stopPropagation(); }\r\n if (event.preventDefault) { event.preventDefault(); }\r\n }\r\n }, []);\r\n\r\n const onMinDurationKeyUp = useMemo(() => focusTextField(maxDurationRef), [focusTextField]);\r\n const onMaxDurationKeyUp = useMemo(() => focusTextField(minDurationRef), [focusTextField]);\r\n\r\n const onDropdownDismiss = useCallback(() => {\r\n if (defaultMinDuration !== minDuration || defaultMaxDuration !== maxDuration) {\r\n onChange({ newMinDuration: minDurationInvalid ? null : minDuration, newMaxDuration: maxDurationInvalid ? null : maxDuration });\r\n }\r\n }, [defaultMinDuration, minDuration, defaultMaxDuration, maxDuration, onChange, minDurationInvalid, maxDurationInvalid]);\r\n\r\n\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [menuList, setMenuList] = useState(null);\r\n\r\n const isSelected = useMemo(() => minDuration || maxDuration, [minDuration, maxDuration]);\r\n\r\n const onOpenChange = (e, data) => {\r\n setIsOpen(data.open);\r\n };\r\n\r\n const clear = () => {\r\n setIsOpen(false);\r\n onClear();\r\n };\r\n\r\n useEffect(() => {\r\n if (forceClear) {\r\n clear();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [forceClear]);\r\n\r\n useEffect(() => {\r\n if (!isOpen) {\r\n onDropdownDismiss();\r\n }\r\n }, [isOpen, onDropdownDismiss]);\r\n\r\n useEffect(() => {\r\n if (menuList) {\r\n // as we are using custom input, we need to remove menu role for accessibility\r\n menuList.removeAttribute('role');\r\n }\r\n }, [menuList]);\r\n\r\n return (\r\n \r\n \r\n \r\n {isSelected ? title : i18n.getString(_TL_('Video duration'))}\r\n \r\n \r\n\r\n \r\n \r\n
\r\n
\r\n \r\n onMinDurationChange(ev, data.value)}\r\n contentAfter={\r\n
\r\n {i18n.getString(_TL_('s'))}\r\n
\r\n }\r\n aria-labelledby={`${minDurationId} ${afterMinDurationId}`}\r\n id={minDurationId}\r\n onKeyDown={onMinDurationKeyUp}\r\n />\r\n
\r\n
\r\n \r\n onMaxDurationChange(ev, data.value)}\r\n contentAfter={\r\n
\r\n {i18n.getString(_TL_('s'))}\r\n
\r\n }\r\n aria-labelledby={`${maxDurationId} ${afterMaxDurationId}`}\r\n id={maxDurationId}\r\n onKeyDown={onMaxDurationKeyUp}\r\n />\r\n
\r\n
\r\n \r\n
\r\n
\r\n }\r\n onClick={() => clear()}\r\n >\r\n {i18n.getString(_TL_('Clear'))}\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n","import React, { useState, useMemo, useCallback, useEffect } from 'react';\r\nimport {\r\n Menu,\r\n MenuButton,\r\n MenuList,\r\n MenuPopover,\r\n Button,\r\n MenuTrigger,\r\n MenuItemRadio,\r\n makeStyles,\r\n MenuDivider,\r\n tokens,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n Dismiss20Regular,\r\n} from '@fluentui/react-icons';\r\n\r\nconst useStyles = makeStyles({\r\n menuPopover: {\r\n minWidth: '180px',\r\n },\r\n unselectedMenuButton: {\r\n '&[aria-expanded=\"false\"]': {\r\n fontWeight: 'unset',\r\n },\r\n },\r\n enabledClearButton: {\r\n float: 'right',\r\n color: tokens.colorNeutralForeground2BrandHover,\r\n },\r\n disabledClearButton: {\r\n float: 'right',\r\n color: tokens.colorNeutralForegroundDisabled,\r\n },\r\n});\r\n\r\nexport const ImportSourceFilter = (props) => {\r\n const {\r\n className,\r\n options,\r\n defaultImportSource,\r\n onChange,\r\n forceClear,\r\n i18n,\r\n onDismiss,\r\n defaultOpen = false,\r\n } = props;\r\n\r\n const classes = useStyles();\r\n const name = 'importSource';\r\n const [checkedValues, setCheckedValues] = useState({\r\n [name]: [defaultImportSource],\r\n });\r\n const [isOpen, setIsOpen] = useState(defaultOpen);\r\n\r\n const onCheckedValueChange = (e, data) => {\r\n const {\r\n checkedItems,\r\n } = data;\r\n setCheckedValues(s => ({\r\n ...s,\r\n [name]: checkedItems,\r\n }));\r\n };\r\n\r\n const selectedChoice = useMemo(\r\n () => options.find(r => r.key === checkedValues[name][0]),\r\n [checkedValues, options]\r\n );\r\n\r\n // the string shown on dropdown title\r\n const dropdownTitle = selectedChoice ? selectedChoice.title : null;\r\n\r\n // when the X button on dropdown title is clicked\r\n const onDropdownClear = useCallback(() => {\r\n if (onChange && defaultImportSource !== null) {\r\n onChange(null);\r\n }\r\n }, [defaultImportSource, onChange]);\r\n\r\n // when dropdown list is dismissed\r\n const onDropdownDismiss = useCallback(() => {\r\n const importSource = checkedValues[name][0];\r\n if (importSource && onChange && defaultImportSource !== importSource) {\r\n onChange(importSource);\r\n }\r\n }, [checkedValues, defaultImportSource, onChange]);\r\n\r\n const isSelected = checkedValues[name][0] != null;\r\n\r\n const onOpenChange = (e, data) => {\r\n setIsOpen(data.open);\r\n };\r\n\r\n const clear = useCallback(() => {\r\n setIsOpen(false);\r\n setCheckedValues(() => ({\r\n [name]: [],\r\n }));\r\n onDropdownClear();\r\n if (onDismiss) {\r\n onDismiss();\r\n }\r\n }, [onDropdownClear, onDismiss]);\r\n\r\n useEffect(() => {\r\n if (forceClear) {\r\n clear();\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [forceClear]);\r\n\r\n useEffect(() => {\r\n if (!isOpen) {\r\n onDropdownDismiss();\r\n }\r\n }, [isOpen, onDropdownDismiss]);\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n {isSelected ? dropdownTitle : i18n.getString(_TL_('Import source'))}\r\n \r\n \r\n\r\n \r\n \r\n {\r\n options.map(option => (\r\n \r\n {option.text}\r\n \r\n ))\r\n }\r\n \r\n
\r\n }\r\n onClick={() => clear()}\r\n >\r\n {i18n.getString(_TL_('Clear'))}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n","/* eslint-disable jsx-a11y/click-events-have-key-events */\r\n/* eslint-disable jsx-a11y/interactive-supports-focus */\r\nimport React, { useRef, useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { useId, makeStyles, mergeClasses, tokens, shorthands } from '@fluentui/react-components';\r\n\r\n\r\nconst thumbSizeVar = '--thumb-size';\r\nconst railSizeVar = '--rail-size';\r\nconst railColorVar = '--rail-color';\r\nconst progressColorVar = '--progress-color';\r\nconst thumbColorVar = '--thumb-color';\r\n\r\nexport const sliderCSSVars = {\r\n sliderMinProgressVar: '--slider-min-progress',\r\n sliderMaxProgressVar: '--slider-max-progress',\r\n};\r\n\r\nconst {\r\n sliderMinProgressVar,\r\n sliderMaxProgressVar,\r\n} = sliderCSSVars;\r\n\r\nconst useStyles = makeStyles({\r\n videoDuration: {\r\n position: 'relative',\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'left',\r\n },\r\n videoDurationScrollbar: {\r\n position: 'relative',\r\n display: 'inline-grid',\r\n touchAction: 'none',\r\n alignItems: 'center',\r\n justifyItems: 'center',\r\n minWidth: '240px',\r\n // 3x3 grid with the rail and thumb in the center cell [2,2] and the hidden input stretching across all cells\r\n gridTemplateRows: `1fr var(${thumbSizeVar}) 1fr`,\r\n gridTemplateColumns: `1fr calc(100% - var(${thumbSizeVar})) 1fr`,\r\n [thumbSizeVar]: '20px',\r\n [railSizeVar]: '4px',\r\n minHeight: '32px',\r\n marginRight: '8px',\r\n },\r\n colors: {\r\n [railColorVar]: tokens.colorNeutralStrokeAccessible,\r\n [progressColorVar]: tokens.colorCompoundBrandBackground,\r\n [thumbColorVar]: tokens.colorCompoundBrandBackground,\r\n ':hover': {\r\n [thumbColorVar]: tokens.colorCompoundBrandBackgroundHover,\r\n [progressColorVar]: tokens.colorCompoundBrandBackgroundHover,\r\n },\r\n ':active': {\r\n [thumbColorVar]: tokens.colorCompoundBrandBackgroundPressed,\r\n [progressColorVar]: tokens.colorCompoundBrandBackgroundPressed,\r\n },\r\n '@media (forced-colors: active)': {\r\n [railColorVar]: 'CanvasText',\r\n [thumbColorVar]: 'Highlight',\r\n [progressColorVar]: 'Highlight',\r\n ':hover': {\r\n [thumbColorVar]: 'Highlight',\r\n [progressColorVar]: 'Highlight',\r\n },\r\n },\r\n },\r\n rail: {\r\n ...shorthands.borderRadius(tokens.borderRadiusXLarge),\r\n gridRowStart: '2',\r\n gridRowEnd: '2',\r\n gridColumnStart: '2',\r\n gridColumnEnd: '2',\r\n position: 'relative',\r\n forcedColorAdjust: 'none',\r\n // Background gradient represents the progress of the slider\r\n backgroundImage: `linear-gradient(90deg,\r\n var(${railColorVar}) 0%,\r\n var(${railColorVar}) var(${sliderMinProgressVar}),\r\n var(${progressColorVar}) var(${sliderMinProgressVar}),\r\n var(${progressColorVar}) var(${sliderMaxProgressVar}),\r\n var(${railColorVar}) var(${sliderMaxProgressVar})\r\n )`,\r\n outlineWidth: '1px',\r\n outlineStyle: 'solid',\r\n outlineColor: tokens.colorTransparentStroke,\r\n width: '100%',\r\n height: `var(${railSizeVar})`,\r\n },\r\n thumb: {\r\n gridRowStart: '2',\r\n gridRowEnd: '2',\r\n gridColumnStart: '2',\r\n gridColumnEnd: '2',\r\n position: 'absolute',\r\n width: `var(${thumbSizeVar})`,\r\n height: `var(${thumbSizeVar})`,\r\n cursor: 'pointer',\r\n outlineStyle: 'none',\r\n forcedColorAdjust: 'none',\r\n ...shorthands.borderRadius(tokens.borderRadiusCircular),\r\n boxShadow: `0 0 0 calc(var(${thumbSizeVar}) * .2) ${tokens.colorNeutralBackground1} inset`,\r\n backgroundColor: `var(${thumbColorVar})`,\r\n '::before': {\r\n position: 'absolute',\r\n top: '0px',\r\n left: '0px',\r\n bottom: '0px',\r\n right: '0px',\r\n ...shorthands.borderRadius(tokens.borderRadiusCircular),\r\n boxSizing: 'border-box',\r\n content: \"''\",\r\n ...shorthands.border(`calc(var(${thumbSizeVar}) * .05)`, 'solid', tokens.colorNeutralStroke1),\r\n },\r\n transform: 'translateX(-50%)',\r\n },\r\n rangeInput: {\r\n gridRowStart: '2',\r\n gridRowEnd: '-2',\r\n gridColumnStart: '2',\r\n gridColumnEnd: '-2',\r\n pointerEvents: 'none',\r\n opacity: '0',\r\n ...shorthands.margin(0),\r\n ...shorthands.padding(0),\r\n },\r\n minRangeInput: {\r\n '&:focus ~ .video-duration-scrollbar__minThumb::after': {\r\n content: '\"\"',\r\n position: 'absolute',\r\n pointerEvents: 'none',\r\n zIndex: 1,\r\n\r\n ...shorthands.border('2px', 'solid', tokens.colorStrokeFocus2),\r\n ...shorthands.borderRadius(tokens.borderRadiusMedium),\r\n\r\n top: '-4px',\r\n right: '-4px',\r\n bottom: '-4px',\r\n left: '-4px',\r\n },\r\n },\r\n maxRangeInput: {\r\n '&:focus ~ .video-duration-scrollbar__maxThumb::after': {\r\n content: '\"\"',\r\n position: 'absolute',\r\n pointerEvents: 'none',\r\n zIndex: 1,\r\n\r\n ...shorthands.border('2px', 'solid', tokens.colorStrokeFocus2),\r\n ...shorthands.borderRadius(tokens.borderRadiusMedium),\r\n\r\n top: '-4px',\r\n right: '-4px',\r\n bottom: '-4px',\r\n left: '-4px',\r\n },\r\n },\r\n minThumb: {\r\n left: `var(${sliderMinProgressVar})`,\r\n },\r\n maxThumb: {\r\n left: `var(${sliderMaxProgressVar})`,\r\n },\r\n});\r\n\r\nconst getPercent = (value, min, max) => (max === min ? 0 : ((value - min) / (max - min)) * 100);\r\n\r\nconst Slider = (props) => {\r\n const {\r\n setValue,\r\n getRelatedValue,\r\n className,\r\n } = props;\r\n\r\n const [isDragging, setIsDragging] = useState(false);\r\n\r\n const onMouseDown = (e) => {\r\n if (e.button !== 0) {\r\n return;\r\n }\r\n setIsDragging(true);\r\n const newValue = getRelatedValue(e);\r\n setValue(newValue);\r\n e.stopPropagation();\r\n e.preventDefault();\r\n };\r\n\r\n useEffect(() => {\r\n if (isDragging) {\r\n const onMouseMove = (e) => {\r\n const newValue = getRelatedValue(e);\r\n setValue(newValue);\r\n };\r\n const onMouseUp = (e) => {\r\n setIsDragging(false);\r\n const newValue = getRelatedValue(e);\r\n setValue(newValue, true);\r\n document.removeEventListener('mousemove', onMouseMove);\r\n document.removeEventListener('mouseup', onMouseUp);\r\n };\r\n document.addEventListener('mousemove', onMouseMove);\r\n document.addEventListener('mouseup', onMouseUp);\r\n return () => {\r\n document.removeEventListener('mousemove', onMouseMove);\r\n document.removeEventListener('mouseup', onMouseUp);\r\n };\r\n }\r\n return () => {};\r\n }, [getRelatedValue, isDragging, setValue]);\r\n\r\n return (\r\n {\r\n console.log(e);\r\n onMouseDown(e);\r\n }}\r\n />\r\n );\r\n};\r\n\r\n// input slider for video duration\r\n// two thumbs for min and max duration\r\n// one rail for the range\r\nexport const VideoDurationScrollbarFilter = (props) => {\r\n const minInputId = useId('min-input');\r\n const maxInputId = useId('max-input');\r\n const {\r\n min,\r\n max,\r\n unlimited,\r\n i18n,\r\n minDurationFilter,\r\n maxDurationFilter,\r\n onChange,\r\n } = props;\r\n\r\n const [minValue, setMinValue] = useState(minDurationFilter);\r\n const [maxValue, setMaxValue] = useState(maxDurationFilter);\r\n const classes = useStyles();\r\n const scrollbarRef = useRef();\r\n\r\n const styleVariables = {\r\n [sliderMinProgressVar]: (minValue == null ? '0%' : `${getPercent(minValue, min, unlimited)}%`),\r\n [sliderMaxProgressVar]: (maxValue == null ? '100%' : `${getPercent(maxValue, min, unlimited)}%`),\r\n };\r\n\r\n const wrappedSetMinValue = (value, shouldCallOnChange) => {\r\n const newValue = Math.min(Math.min(maxValue || unlimited, max), Math.max(min, value));\r\n setMinValue(newValue);\r\n if (shouldCallOnChange) {\r\n onChange({ newMinDuration: newValue, newMaxDuration: maxValue });\r\n }\r\n };\r\n\r\n const wrappedSetMaxValue = (value, shouldCallOnChange) => {\r\n const newValue = Math.min(unlimited, Math.max(minValue || 0, value));\r\n setMaxValue(newValue);\r\n if (shouldCallOnChange) {\r\n onChange({ newMinDuration: minValue, newMaxDuration: newValue });\r\n }\r\n };\r\n\r\n const getRelatedValue = ({\r\n clientX,\r\n }) => {\r\n if (!scrollbarRef.current) {\r\n return null;\r\n }\r\n const scrollbarBox = scrollbarRef.current.getBoundingClientRect();\r\n const {\r\n left,\r\n width,\r\n } = scrollbarBox;\r\n\r\n const x = clientX - left;\r\n return parseInt(Math.min(unlimited, Math.max(min, ((x / width) * (unlimited - min)) + min)), 10);\r\n };\r\n\r\n const onClickRail = (e) => {\r\n const value = getRelatedValue(e);\r\n if (value != null) {\r\n // set the min value if the click is closer to the min thumb\r\n // set the max value if the click is closer to the max thumb\r\n const minDistance = Math.abs((minValue || 0) - value);\r\n const maxDistance = Math.abs((maxValue || unlimited) - value);\r\n if (minDistance < maxDistance) {\r\n wrappedSetMinValue(value, true);\r\n } else {\r\n wrappedSetMaxValue(value, true);\r\n }\r\n }\r\n };\r\n\r\n\r\n return (\r\n
\r\n
\r\n {\r\n wrappedSetMinValue(parseInt(e.target.value, 10), true);\r\n }}\r\n aria-label={i18n.getString(_TL_('Min value: {{ value }}'), { value: minValue })}\r\n />\r\n {\r\n wrappedSetMaxValue(parseInt(e.target.value, 10), true);\r\n }}\r\n aria-label={i18n.getString(_TL_('Max value: {{ value }}'), { value: maxValue > max ? 'unlimited' : maxValue })}\r\n />\r\n {\r\n onClickRail(e);\r\n }}\r\n />\r\n \r\n \r\n
\r\n
\r\n {maxValue > max || maxValue == null ? `≥${i18n.getString(_TL_('{{ min }} seconds'), {\r\n min: minValue,\r\n })}` : i18n.getString(_TL_('{{ min }}-{{ max }} seconds'), {\r\n min: minValue,\r\n max: maxValue,\r\n })}\r\n
\r\n
\r\n );\r\n};\r\n\r\n\r\nVideoDurationScrollbarFilter.propTypes = {\r\n min: PropTypes.number,\r\n max: PropTypes.number,\r\n unlimited: PropTypes.number,\r\n i18n: PropTypes.shape({}).isRequired,\r\n};\r\n\r\nVideoDurationScrollbarFilter.defaultProps = {\r\n min: 0,\r\n max: 120,\r\n unlimited: 121,\r\n};\r\n","import React from 'react';\r\nimport {\r\n ToggleButton,\r\n makeStyles,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n Filter20Regular,\r\n} from '@fluentui/react-icons';\r\n\r\nconst useStyles = makeStyles({\r\n toggleButton: {\r\n minWidth: 'unset',\r\n },\r\n});\r\n\r\nexport const FilterToggleButton = (props) => {\r\n const {\r\n i18n,\r\n className,\r\n onClick,\r\n checked,\r\n } = props;\r\n\r\n const classes = useStyles();\r\n const text = i18n.getString(_TL_('Filter'));\r\n\r\n return (\r\n
\r\n }\r\n onClick={() => {\r\n onClick();\r\n }}\r\n >\r\n {text}\r\n \r\n
\r\n );\r\n};\r\n","import { useCallback, useState, useMemo } from 'react';\r\nimport { getCivilDateToday } from '@bingads-webui-universal/temporal-utitlities';\r\nimport {\r\n getDateAddedChoiceOptions,\r\n CSMLTimeFrame,\r\n} from '../../../model';\r\nimport {\r\n civilDateRangeEqual,\r\n civilDateRangeToDebugString,\r\n} from '../../../utils';\r\n\r\nconst yesterday = getCivilDateToday().plus({ days: -1 });\r\nconst DEFAULT_RANGE = { start: yesterday, end: yesterday };\r\n\r\nexport const useDateAddedState = ({\r\n logger,\r\n i18n,\r\n ianaTimeZone,\r\n handleUsage,\r\n}) => {\r\n const [dateAddedFilter, setDateAddedFilter] = useState(CSMLTimeFrame.Anytime);\r\n // date range user selected for 'Custom'\r\n const [dateAddedFilterCustomDateRange, setDateAddedFilterCustomDateRange] = useState(DEFAULT_RANGE);\r\n\r\n const dateAddedChoiceOptions = useMemo(\r\n () => getDateAddedChoiceOptions(i18n, ianaTimeZone),\r\n [i18n, ianaTimeZone]\r\n );\r\n\r\n const onDateAddedFilterChange = useCallback(({ timeframe: tf, customDateRange: cdr }) => {\r\n if (tf !== dateAddedFilter) {\r\n logger.logTrace('onDateAddedFilterChange', { dateAddedFilter: tf });\r\n setDateAddedFilter(tf);\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }\r\n if (!civilDateRangeEqual(cdr, dateAddedFilterCustomDateRange)) {\r\n logger.logTrace('onDateAddedFilterChange', { customDateRange: civilDateRangeToDebugString(cdr) });\r\n setDateAddedFilterCustomDateRange(cdr);\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }\r\n }, [dateAddedFilter, dateAddedFilterCustomDateRange, handleUsage, logger]);\r\n\r\n return {\r\n dateAddedChoiceOptions,\r\n dateAddedFilter,\r\n dateAddedFilterCustomDateRange,\r\n onDateAddedFilterChange,\r\n };\r\n};\r\n","import React from 'react';\r\n\r\nexport const FilterContext = React.createContext({});\r\n\r\n","import { useMemo, useContext, useEffect } from 'react';\r\nimport {\r\n useAdditionalFilterBarState,\r\n useAssetTypeState,\r\n useSearchBoxState,\r\n useSortByState,\r\n useDateAddedState,\r\n useImportSourceState,\r\n useAssetSourcesState,\r\n useImageSizeState,\r\n useVideoDurationState,\r\n} from './components/state';\r\nimport {\r\n FilterContext,\r\n} from './context/filter-context';\r\nimport {\r\n CSMLTimeFrame,\r\n} from '../model';\r\n\r\nexport const useFilterBarState = ({\r\n logger,\r\n i18n,\r\n userPreference,\r\n defaultSearchText,\r\n defaultMinVideoDuration,\r\n defaultMaxVideoDuration,\r\n}) => {\r\n const {\r\n setFilterBar,\r\n } = useContext(FilterContext);\r\n\r\n const {\r\n toggleFilterBar,\r\n showAdditionalFilterBar,\r\n } = useAdditionalFilterBarState({ logger });\r\n\r\n const {\r\n toggleAssetType,\r\n assetTypesState,\r\n assetTypes,\r\n isImageSelected,\r\n isVideoSelected,\r\n } = useAssetTypeState({ logger, i18n });\r\n\r\n const {\r\n searchText,\r\n onSearchTextChanging,\r\n onSearchTextBlur,\r\n onSearchTextChange,\r\n onSearchTextClear,\r\n } = useSearchBoxState({ logger, defaultSearchText });\r\n\r\n const {\r\n sortBy,\r\n sortingOptions,\r\n setSortBy,\r\n onSortByChange,\r\n } = useSortByState({ logger, i18n, userPreference });\r\n\r\n const {\r\n dateAddedChoiceOptions,\r\n dateAddedFilter,\r\n dateAddedFilterCustomDateRange,\r\n onDateAddedFilterChange,\r\n } = useDateAddedState({ logger, i18n });\r\n\r\n const {\r\n assetSources,\r\n assetSourceOptions,\r\n onAssetSourceFilterChange,\r\n } = useAssetSourcesState({ logger, i18n });\r\n\r\n const {\r\n importSource,\r\n importSourceOptions,\r\n onImportSourceFilterChange,\r\n } = useImportSourceState({ logger, i18n });\r\n\r\n const {\r\n minWidthFilter,\r\n minHeightFilter,\r\n onImageSizeFilterChange,\r\n } = useImageSizeState({ logger, i18n });\r\n\r\n const {\r\n minDurationFilter,\r\n maxDurationFilter,\r\n onVideoDurationFilterChange,\r\n } = useVideoDurationState({\r\n logger,\r\n i18n,\r\n defaultMinVideoDuration,\r\n defaultMaxVideoDuration,\r\n });\r\n\r\n const isDateAddedFilterActive = dateAddedFilter !== CSMLTimeFrame.Anytime;\r\n const isImportSourceFilterActive = importSource !== null;\r\n const isAssetSourceFilterActive = assetSources.length > 0;\r\n\r\n const isAdditionalFilterActive = useMemo(\r\n () => {\r\n if (isImageSelected) {\r\n if (minWidthFilter || minHeightFilter) {\r\n return true;\r\n }\r\n }\r\n if (isVideoSelected) {\r\n if (minDurationFilter || maxDurationFilter) {\r\n return true;\r\n }\r\n }\r\n return isDateAddedFilterActive || isImportSourceFilterActive || isAssetSourceFilterActive;\r\n },\r\n [isAssetSourceFilterActive,\r\n isDateAddedFilterActive,\r\n isImageSelected,\r\n isImportSourceFilterActive, isVideoSelected, maxDurationFilter, minDurationFilter, minHeightFilter, minWidthFilter]\r\n );\r\n\r\n useEffect(() => {\r\n setFilterBar({\r\n getFilters: () =>\r\n ({\r\n isImageSelected,\r\n isVideoSelected,\r\n assetTypesState,\r\n searchText,\r\n sortBy,\r\n dateAddedFilter,\r\n dateAddedFilterCustomDateRange,\r\n importSource,\r\n assetSources,\r\n minWidthFilter,\r\n minHeightFilter,\r\n minDurationFilter,\r\n maxDurationFilter,\r\n }),\r\n });\r\n }, [assetSources, assetTypesState, dateAddedFilter, dateAddedFilterCustomDateRange, importSource,\r\n isImageSelected, isVideoSelected, maxDurationFilter, minDurationFilter, minHeightFilter, minWidthFilter, searchText, setFilterBar, sortBy]);\r\n\r\n return {\r\n toggleFilterBar,\r\n showAdditionalFilterBar,\r\n isAdditionalFilterActive,\r\n toggleAssetType,\r\n isImageSelected,\r\n isVideoSelected,\r\n assetTypesState,\r\n assetTypes,\r\n // Search box state\r\n searchText,\r\n onSearchTextChanging,\r\n onSearchTextBlur,\r\n onSearchTextChange,\r\n onSearchTextClear,\r\n // Sort by state\r\n sortBy,\r\n sortingOptions,\r\n setSortBy,\r\n onSortByChange,\r\n // Date added state\r\n dateAddedChoiceOptions,\r\n dateAddedFilter,\r\n dateAddedFilterCustomDateRange,\r\n onDateAddedFilterChange,\r\n // Import source state\r\n importSource,\r\n importSourceOptions,\r\n onImportSourceFilterChange,\r\n // Asset source state\r\n assetSources,\r\n assetSourceOptions,\r\n onAssetSourceFilterChange,\r\n // Image size state\r\n minWidthFilter,\r\n minHeightFilter,\r\n onImageSizeFilterChange,\r\n // Video duration state\r\n minDurationFilter,\r\n maxDurationFilter,\r\n onVideoDurationFilterChange,\r\n };\r\n};\r\n","import { useState } from 'react';\r\n\r\nexport const useAdditionalFilterBarState = ({ logger, handleUsage }) => {\r\n const [showAdditionalFilterBar, setShowAdditionalFilterBar] = useState(false);\r\n const toggleFilterBar = () => {\r\n logger.logTrace('toggle the filter bar', { showAdditionalFilterBar: !showAdditionalFilterBar });\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n setShowAdditionalFilterBar(!showAdditionalFilterBar);\r\n };\r\n\r\n return {\r\n toggleFilterBar,\r\n showAdditionalFilterBar,\r\n };\r\n};\r\n","import { useState, } from 'react';\r\nimport { getAssetTypeOptions } from '../../../model/get-asset-type-options';\r\nimport { FolderAssetType } from '../../../model/constants';\r\n\r\nexport const useAssetTypeState = ({ i18n, logger, handleUsage }) => {\r\n const assetTypes = getAssetTypeOptions(i18n);\r\n\r\n const [assetTypesState, setAssetTypesState] = useState(() => {\r\n const initialState = {};\r\n assetTypes.forEach((option) => {\r\n initialState[option.key] = false;\r\n });\r\n initialState[FolderAssetType.All] = true;\r\n return initialState;\r\n });\r\n\r\n const toggleAssetType = (key) => {\r\n const newAssetTypesState = {};\r\n assetTypes.forEach((option) => {\r\n const { key: optionKey } = option;\r\n if (optionKey === key) {\r\n newAssetTypesState[optionKey] = !assetTypesState[optionKey];\r\n } else {\r\n newAssetTypesState[optionKey] = false;\r\n }\r\n });\r\n if (newAssetTypesState[key] === false) {\r\n newAssetTypesState[FolderAssetType.All] = true;\r\n }\r\n logger.logTrace('toggle the media type assetTypes', { assetTypesState: newAssetTypesState });\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n setAssetTypesState(newAssetTypesState);\r\n };\r\n\r\n const isImageSelected = assetTypesState[FolderAssetType.Image];\r\n const isVideoSelected = assetTypesState[FolderAssetType.Video];\r\n\r\n return {\r\n toggleAssetType,\r\n assetTypesState,\r\n assetTypes,\r\n isImageSelected,\r\n isVideoSelected,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport { useCallback, useState, useRef, } from 'react';\r\n\r\nexport const useSearchBoxState = ({ logger, handleUsage, defaultSearchText = '' }) => {\r\n const [searchText, setSearchText] = useState(defaultSearchText);\r\n const searchTextValueRef = useRef('');\r\n const onSearchTextChanging = useCallback((evt, newValue) => {\r\n searchTextValueRef.current = newValue || '';\r\n }, []);\r\n\r\n const onSearchTextBlur = useCallback(() => {\r\n setSearchText(searchTextValueRef.current);\r\n }, []);\r\n\r\n const onSearchTextChange = useCallback((newValue) => {\r\n if (newValue !== searchText) {\r\n logger.logTrace('start searching text', { searchText: newValue });\r\n setSearchText(newValue);\r\n }\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }, [logger, searchText, handleUsage]);\r\n\r\n const onSearchTextClear = useCallback(() => {\r\n if (!_.isEmpty(searchText)) {\r\n logger.logTrace('start searching text', { searchText: '' });\r\n setSearchText('');\r\n searchTextValueRef.current = '';\r\n }\r\n }, [logger, searchText]);\r\n\r\n return {\r\n searchText,\r\n onSearchTextChanging,\r\n onSearchTextBlur,\r\n onSearchTextChange,\r\n onSearchTextClear,\r\n };\r\n};\r\n","import _ from 'underscore';\r\nimport { useCallback, useState, useMemo, useEffect } from 'react';\r\nimport {\r\n CSMLSortBy, getSortingOptions,\r\n} from '../../../model';\r\n\r\nexport const useSortByState = ({\r\n logger,\r\n i18n,\r\n handleUsage,\r\n userPreference,\r\n}) => {\r\n const [sortBy, setSortBy] = useState(() => {\r\n if (userPreference && userPreference.sortBy) {\r\n return userPreference.sortBy;\r\n }\r\n return CSMLSortBy.MostRecent;\r\n });\r\n\r\n useEffect(() => {\r\n if (userPreference && userPreference.sortBy) {\r\n setSortBy(userPreference.sortBy);\r\n }\r\n }, [setSortBy, userPreference]);\r\n\r\n const sortingOptions = useMemo(\r\n () => getSortingOptions(i18n),\r\n [i18n]\r\n );\r\n\r\n const safeSetSortBy = useCallback((newVal) => {\r\n const allSortByOptions = Object.values(CSMLSortBy);\r\n let safeNewValue = CSMLSortBy.MostRecent; // default value\r\n if (_.contains(allSortByOptions, newVal)) {\r\n safeNewValue = newVal;\r\n }\r\n setSortBy(safeNewValue);\r\n return safeNewValue;\r\n }, []);\r\n\r\n const onSortByChange = useCallback((_evt, item) => {\r\n if (item) {\r\n const newVal = safeSetSortBy(item.key);\r\n logger.logTrace('onSortByChange', { sortby: newVal });\r\n if (userPreference) {\r\n // save preferences\r\n userPreference.setSortBy(newVal);\r\n }\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n } else {\r\n // shouldn't happen\r\n logger.logError('onSortByChange, invalid key');\r\n }\r\n }, [safeSetSortBy, logger, userPreference, handleUsage]);\r\n\r\n return {\r\n sortBy,\r\n sortingOptions,\r\n setSortBy: safeSetSortBy,\r\n onSortByChange,\r\n };\r\n};\r\n\r\n","import _ from 'underscore';\r\nimport { useCallback, useState, useMemo } from 'react';\r\nimport {\r\n getAssetSourceOptions,\r\n} from '../../../model';\r\n\r\nexport const useAssetSourcesState = ({\r\n logger,\r\n i18n,\r\n handleUsage,\r\n disabledAssetSources = [],\r\n}) => {\r\n const [assetSources, setAssetSources] = useState([]);\r\n\r\n const assetSourceOptions = useMemo(() => {\r\n const options = getAssetSourceOptions(i18n);\r\n if (!_.isEmpty(disabledAssetSources)) {\r\n return options.filter(({ key }) => !disabledAssetSources.includes(key));\r\n }\r\n\r\n return options;\r\n }, [disabledAssetSources, i18n]);\r\n\r\n const onAssetSourceFilterChange = useCallback((newAssetSources) => {\r\n if (!_.isEqual(assetSources, newAssetSources)) {\r\n setAssetSources(newAssetSources);\r\n logger.logTrace('onAssetSourceFilterChange', { assetSources: (assetSources || []).join(',') });\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }\r\n }, [assetSources, handleUsage, logger]);\r\n\r\n return {\r\n assetSources,\r\n assetSourceOptions,\r\n onAssetSourceFilterChange,\r\n };\r\n};\r\n","import { useCallback, useState, useMemo } from 'react';\r\nimport {\r\n getImportSourceOptions,\r\n} from '../../../model';\r\n\r\nexport const useImportSourceState = ({\r\n logger,\r\n i18n,\r\n handleUsage,\r\n}) => {\r\n const [importSource, setImportSource] = useState(null);\r\n\r\n const importSourceOptions = useMemo(() => getImportSourceOptions(i18n), [i18n]);\r\n\r\n const onImportSourceFilterChange = useCallback((newImportSource) => {\r\n if (importSource !== newImportSource) {\r\n setImportSource(newImportSource);\r\n logger.logTrace('onImportSourceFilterChange', { importSource: newImportSource });\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }\r\n }, [handleUsage, importSource, logger]);\r\n\r\n return {\r\n importSource,\r\n importSourceOptions,\r\n onImportSourceFilterChange,\r\n };\r\n};\r\n","import { useCallback, useState } from 'react';\r\n\r\nexport const useImageSizeState = ({\r\n logger, handleUsage,\r\n}) => {\r\n const [minWidthFilter, setMinWidthFilter] = useState(null);\r\n const [minHeightFilter, setMinHeightFilter] = useState(null);\r\n\r\n const onImageSizeFilterChange = useCallback(({ newMinWidth, newMinHeight }) => {\r\n if (newMinWidth !== minWidthFilter) {\r\n logger.logTrace('onImageSizeFilterChange', { minWidth: newMinWidth });\r\n setMinWidthFilter(newMinWidth);\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }\r\n if (newMinHeight !== minHeightFilter) {\r\n logger.logTrace('onImageSizeFilterChange', { minHeight: newMinHeight });\r\n setMinHeightFilter(newMinHeight);\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }\r\n }, [handleUsage, logger, minHeightFilter, minWidthFilter]);\r\n\r\n return {\r\n minWidthFilter,\r\n minHeightFilter,\r\n onImageSizeFilterChange,\r\n };\r\n};\r\n","import { useCallback, useState } from 'react';\r\n\r\nexport const useVideoDurationState = ({\r\n logger,\r\n handleUsage,\r\n defaultMinVideoDuration = null,\r\n defaultMaxVideoDuration = null,\r\n}) => {\r\n const [minDurationFilter, setMinDurationFilter] = useState(defaultMinVideoDuration);\r\n const [maxDurationFilter, setMaxDurationFilter] = useState(defaultMaxVideoDuration);\r\n\r\n const onVideoDurationFilterChange = useCallback(({ newMinDuration, newMaxDuration }) => {\r\n if (newMinDuration !== minDurationFilter) {\r\n logger.logTrace('onVideoDurationFilterChange', { minDuration: newMinDuration });\r\n setMinDurationFilter(newMinDuration);\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }\r\n if (newMaxDuration !== maxDurationFilter) {\r\n logger.logTrace('onVideoDurationFilterChange', { maxDuration: newMaxDuration });\r\n setMaxDurationFilter(newMaxDuration);\r\n if (handleUsage) {\r\n handleUsage();\r\n }\r\n }\r\n }, [handleUsage, logger, maxDurationFilter, minDurationFilter]);\r\n\r\n return {\r\n minDurationFilter,\r\n maxDurationFilter,\r\n onVideoDurationFilterChange,\r\n };\r\n};\r\n","// Two level of filter bars\r\nimport React, { useState } from 'react';\r\nimport {\r\n FluentProvider,\r\n Label,\r\n webLightTheme,\r\n makeResetStyles,\r\n makeStyles,\r\n shorthands,\r\n useId,\r\n tokens,\r\n Button,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport {\r\n Dismiss20Regular,\r\n} from '@fluentui/react-icons';\r\nimport {\r\n CSMLVideoDuration,\r\n} from '../model';\r\nimport {\r\n NewDropDown,\r\n AssetTypeToggleButtonsFilter,\r\n SearchBoxFilter,\r\n FilterToggleButton,\r\n ImageSizeFilter,\r\n VideoDurationFilter,\r\n AssetSourceFilter,\r\n ImportSourceFilter,\r\n DateAddedFilter,\r\n SortByFilter,\r\n VideoDurationScrollbarFilter,\r\n} from './components';\r\nimport {\r\n useFilterBarState,\r\n} from './filter-bar-state';\r\n\r\nconst useFilterBarStyles = makeStyles({\r\n filterBar: {\r\n display: 'flex',\r\n columnGap: '8px',\r\n rowGap: '8px',\r\n flexWrap: 'wrap',\r\n '& button': {\r\n whiteSpace: 'nowrap',\r\n },\r\n },\r\n remaining: {\r\n flexGrow: 1,\r\n },\r\n});\r\n\r\nconst useBaseAdditionalFilterBarStyles = makeResetStyles({\r\n marginTop: '12px',\r\n display: 'flex',\r\n columnGap: '8px',\r\n rowGap: '8px',\r\n flexWrap: 'wrap',\r\n '& button': {\r\n whiteSpace: 'nowrap',\r\n color: tokens.colorNeutralForeground2,\r\n },\r\n ...shorthands.borderRadius('4px'),\r\n ...shorthands.border('1px', 'solid', '#F1F1F1'),\r\n ...shorthands.padding('8px', '16px'),\r\n boxShadow: '0px 1px 4px 0px rgba(0, 0, 0, 0.15)',\r\n alignItems: 'center',\r\n '& button.clearButton': {\r\n '&:hover': {\r\n fontWeight: tokens.fontWeightSemibold,\r\n },\r\n color: tokens.colorNeutralForeground2BrandHover,\r\n fontWeight: 'unset',\r\n },\r\n});\r\n\r\nconst useAdditionalFilterBarStyles = makeStyles({\r\n hide: {\r\n display: 'none',\r\n },\r\n remaining: {\r\n flexGrow: 1,\r\n },\r\n filterText: {\r\n width: '60px',\r\n },\r\n});\r\n\r\nconst AdditionalFilterBar = (props) => {\r\n const {\r\n i18n,\r\n isSelected,\r\n isImageSelected,\r\n isVideoSelected,\r\n logger,\r\n timeZone,\r\n dateFormat,\r\n dateAddedChoiceOptions,\r\n dateAddedFilter,\r\n dateAddedFilterCustomDateRange,\r\n onDateAddedFilterChange,\r\n showAdditionalFilterBar,\r\n isAdsStudioAIGCMVPEnabled,\r\n importSource,\r\n importSourceOptions,\r\n onImportSourceFilterChange,\r\n assetSources,\r\n assetSourceOptions,\r\n onAssetSourceFilterChange,\r\n minWidthFilter,\r\n minHeightFilter,\r\n onImageSizeFilterChange,\r\n minDurationFilter,\r\n maxDurationFilter,\r\n onVideoDurationFilterChange,\r\n } = props;\r\n\r\n const baseClasses = useBaseAdditionalFilterBarStyles();\r\n const classes = useAdditionalFilterBarStyles();\r\n const filterId = useId('filter');\r\n const [forceClear, setForceClear] = useState(0);\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n {isAdsStudioAIGCMVPEnabled &&\r\n }\r\n {!isAdsStudioAIGCMVPEnabled &&\r\n }\r\n {isSelected &&\r\n }\r\n onClick={() => {\r\n setForceClear(forceClear + 1);\r\n }}\r\n >\r\n {i18n.getString(_TL_('Clear all'))}\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport const VideosFilterBar = (props) => {\r\n const {\r\n i18n,\r\n logger,\r\n defaultSearchText,\r\n searchboxPlaceHolder,\r\n userPreference,\r\n defaultMinVideoDuration,\r\n defaultMaxVideoDuration,\r\n } = props;\r\n\r\n const classes = useFilterBarStyles();\r\n const {\r\n onSearchTextChanging,\r\n onSearchTextBlur,\r\n onSearchTextChange,\r\n onSearchTextClear,\r\n sortBy,\r\n sortingOptions,\r\n onSortByChange,\r\n minDurationFilter,\r\n maxDurationFilter,\r\n onVideoDurationFilterChange,\r\n } = useFilterBarState({\r\n logger,\r\n i18n,\r\n userPreference,\r\n defaultSearchText,\r\n defaultMinVideoDuration,\r\n defaultMaxVideoDuration,\r\n });\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport const ImagesFilterBar = (props) => {\r\n const {\r\n i18n,\r\n logger,\r\n defaultSearchText,\r\n userPreference,\r\n searchboxPlaceHolder,\r\n } = props;\r\n\r\n const classes = useFilterBarStyles();\r\n const {\r\n onSearchTextChanging,\r\n onSearchTextBlur,\r\n onSearchTextChange,\r\n onSearchTextClear,\r\n sortBy,\r\n sortingOptions,\r\n onSortByChange,\r\n } = useFilterBarState({\r\n logger,\r\n i18n,\r\n userPreference,\r\n defaultSearchText,\r\n });\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport const LibraryFilterBar = (props) => {\r\n const {\r\n i18n,\r\n logger,\r\n ianaTimeZone,\r\n dateFormat,\r\n defaultSearchText,\r\n searchboxPlaceHolder,\r\n isAdsStudioAIGCMVPEnabled,\r\n onUploadLocalFileClick,\r\n onUploadLocalFolderClick,\r\n onUploadImageClick,\r\n onUploadVideoClick,\r\n onAIGenerateClick,\r\n onCreateFolderClick,\r\n userPreference,\r\n } = props;\r\n\r\n const classes = useFilterBarStyles();\r\n // Filter state change will trigger useEffect reload\r\n const {\r\n assetTypes,\r\n assetTypesState,\r\n toggleAssetType,\r\n toggleFilterBar,\r\n showAdditionalFilterBar,\r\n isAdditionalFilterActive,\r\n isImageSelected,\r\n isVideoSelected,\r\n onSearchTextChanging,\r\n onSearchTextBlur,\r\n onSearchTextChange,\r\n onSearchTextClear,\r\n sortBy,\r\n sortingOptions,\r\n onSortByChange,\r\n dateAddedChoiceOptions,\r\n dateAddedFilter,\r\n dateAddedFilterCustomDateRange,\r\n onDateAddedFilterChange,\r\n importSource,\r\n importSourceOptions,\r\n onImportSourceFilterChange,\r\n assetSources,\r\n assetSourceOptions,\r\n onAssetSourceFilterChange,\r\n minWidthFilter,\r\n minHeightFilter,\r\n onImageSizeFilterChange,\r\n minDurationFilter,\r\n maxDurationFilter,\r\n onVideoDurationFilterChange,\r\n } = useFilterBarState({\r\n logger,\r\n i18n,\r\n userPreference,\r\n defaultSearchText,\r\n });\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n toggleFilterBar()}\r\n checked={showAdditionalFilterBar}\r\n logger={logger}\r\n />\r\n \r\n
\r\n \r\n \r\n );\r\n};\r\n\r\nexport const SearchResultFilterBar = (props) => {\r\n const {\r\n i18n,\r\n logger,\r\n defaultSearchText,\r\n searchboxPlaceHolder,\r\n } = props;\r\n\r\n const classes = useFilterBarStyles();\r\n const {\r\n onSearchTextChanging,\r\n onSearchTextBlur,\r\n onSearchTextChange,\r\n onSearchTextClear,\r\n } = useFilterBarState({ logger, i18n, defaultSearchText });\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n );\r\n};\r\n","import React, { useState } from 'react';\r\nimport { FilterContext } from './filter-context';\r\n\r\nexport const FilterContextProvider = (props) => {\r\n const [filterBar, setFilterBar] = useState({\r\n getFilters: () => ({}),\r\n });\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n};\r\n\r\nexport const withFilterContext = Component => props => ();\r\n","import _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport React, { useCallback, useRef, useMemo } from 'react';\r\n// import { SearchBox } from '@bingads-webui-react/fabric-control';\r\n\r\nimport {\r\n // AssetTypeToggleButtonsFilter,\r\n ImportSourceFilter,\r\n AssetSourceFilter,\r\n ImageSizeFilter,\r\n // VideoDurationFilter,\r\n DateAddedFilter,\r\n SearchBoxFilter,\r\n} from './components';\r\nimport {\r\n CSMLTimeFrame,\r\n FilterType,\r\n // getAssetTypeOptions,\r\n getImportSourceOptions,\r\n getAssetSourceOptions,\r\n getDateAddedChoiceOptions,\r\n} from '../model';\r\nimport { civilDateRangeEqual, getDefaultDateRange } from '../utils';\r\n\r\n// export const AssetTypeFilterComponent = React.memo(({\r\n// filter, focused, onValueChange, onDropdownDismiss, i18n,\r\n// }) => {\r\n// const { value } = filter || {};\r\n// const { assetTypeFilter } = value || {};\r\n// const dropdownOptions = useMemo(() => getAssetTypeOptions(i18n), [i18n]);\r\n\r\n// const onChange = useCallback((newValue, newHumanizedVaue) => {\r\n// if (newValue !== assetTypeFilter) {\r\n// onValueChange(filter, { assetTypeFilter: newValue }, newHumanizedVaue);\r\n// }\r\n// }, [assetTypeFilter, filter, onValueChange]);\r\n\r\n// return (\r\n//
\r\n// onDropdownDismiss(filter, { assetTypeFilter: newValue }, newHumanizedValue)}\r\n// focused={focused}\r\n// i18n={i18n}\r\n// />\r\n//
\r\n// );\r\n// });\r\n\r\nexport const ImportSourceFilterComponent = React.memo(({\r\n filter, i18n, onValueChange, onDropdownDismiss, defaultOpen,\r\n}) => {\r\n const { value } = filter || {};\r\n const { importSource } = value || {};\r\n const dropdownOptions = useMemo(() => getImportSourceOptions(i18n), [i18n]);\r\n\r\n const onChange = useCallback((newValue, newHumanizedVaue) => {\r\n const option = _.find(dropdownOptions, { key: newValue }) || {};\r\n if (newValue !== importSource) {\r\n onValueChange(filter, { importSource: newValue }, option.text || newHumanizedVaue);\r\n }\r\n }, [dropdownOptions, filter, importSource, onValueChange]);\r\n\r\n const onDismiss = useCallback((newValue, newHumanizedValue) => {\r\n const option = _.find(dropdownOptions, { key: newValue }) || {};\r\n onDropdownDismiss(filter, { importSource: newValue }, option.text || newHumanizedValue);\r\n }, [dropdownOptions, filter, onDropdownDismiss]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n});\r\n\r\nexport const AssetSourceFilterComponent = React.memo(({\r\n filter, i18n, onValueChange, onDropdownDismiss, defaultOpen,\r\n}) => {\r\n const { value } = filter || {};\r\n const { assetSources } = value || {};\r\n const assetSourceOptions = useMemo(() => getAssetSourceOptions(i18n), [i18n]);\r\n const onChange = useCallback((newAssetSources, newHumanizedVaue) => {\r\n if (!_.isEqual(assetSources, newAssetSources)) {\r\n onValueChange(filter, { assetSources: newAssetSources }, newHumanizedVaue);\r\n }\r\n }, [assetSources, filter, onValueChange]);\r\n\r\n const onDismiss = useCallback((newValue, newHumanizedValue) => {\r\n onDropdownDismiss(filter, { assetSources: newValue }, newHumanizedValue);\r\n }, [filter, onDropdownDismiss]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n});\r\n\r\nexport const ImageSizeFilterComponent = React.memo(({\r\n filter, i18n, onValueChange, onDropdownDismiss, defaultOpen,\r\n}) => {\r\n const { value } = filter || {};\r\n const { minImageWidth, minImageHeight } = value || {};\r\n\r\n const onImageSizeChange = useCallback((newValue, newHumanizedVaue) => {\r\n const { newMinWidth, newMinHeight } = newValue || {};\r\n if (minImageWidth !== newMinWidth || minImageHeight !== newMinHeight) {\r\n onValueChange(filter, { minImageWidth: newMinWidth, minImageHeight: newMinHeight }, newHumanizedVaue);\r\n }\r\n }, [filter, minImageHeight, minImageWidth, onValueChange]);\r\n\r\n const onDismiss = useCallback((newValue, newHumanizedValue) => {\r\n const { newMinWidth, newMinHeight } = newValue || {};\r\n onDropdownDismiss(filter, { minImageWidth: newMinWidth, minImageHeight: newMinHeight }, newHumanizedValue);\r\n }, [filter, onDropdownDismiss]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n});\r\n\r\n// export const VideoDurationFilterComponent = React.memo(({\r\n// filter, focused, i18n, onValueChange, onDropdownDismiss,\r\n// }) => {\r\n// const { value } = filter || {};\r\n// const { minVideoDuration, maxVideoDuration } = value || {};\r\n\r\n// const onChange = useCallback((newValue, newHumanizedVaue) => {\r\n// const { newMinDuration, newMaxDuration } = newValue || {};\r\n// if (minVideoDuration !== newMinDuration || maxVideoDuration !== newMaxDuration) {\r\n// onValueChange(filter, { minVideoDuration: newMinDuration, maxVideoDuration: newMaxDuration }, newHumanizedVaue);\r\n// }\r\n// }, [filter, maxVideoDuration, minVideoDuration, onValueChange]);\r\n\r\n// const onDismiss = useCallback((newValue, newHumanizedValue) => {\r\n// const { newMinDuration, newMaxDuration } = newValue || {};\r\n// onDropdownDismiss(filter, { minVideoDuration: newMinDuration, maxVideoDuration: newMaxDuration }, newHumanizedValue);\r\n// }, [filter, onDropdownDismiss]);\r\n\r\n// return (\r\n//
\r\n// \r\n//
\r\n// );\r\n// });\r\n\r\nexport const AL_DATE_ADDED_FILTER_DEFAULT_RANGE = getDefaultDateRange();\r\nexport const DateAddedFilterComponent = React.memo(({\r\n filter, i18n, onValueChange, onDropdownDismiss, ianaTimeZone, dateFormat, defaultOpen,\r\n}) => {\r\n const { value } = filter || {};\r\n const { dateAddedFilter, dateAddedFilterCustomDateRange = AL_DATE_ADDED_FILTER_DEFAULT_RANGE } = value || {};\r\n const dateAddedChoiceOptions = useMemo(() => getDateAddedChoiceOptions(i18n, ianaTimeZone), [i18n, ianaTimeZone]);\r\n\r\n const onChange = useCallback((newValue, newHumanizedVaue) => {\r\n const { timeframe: tf, customDateRange: cdr } = newValue || {};\r\n if (tf !== dateAddedFilter || !civilDateRangeEqual(cdr, dateAddedFilterCustomDateRange)) {\r\n onValueChange(filter, { dateAddedFilter: tf, dateAddedFilterCustomDateRange: cdr }, newHumanizedVaue);\r\n }\r\n }, [dateAddedFilter, dateAddedFilterCustomDateRange, filter, onValueChange]);\r\n\r\n const onDismiss = useCallback((newValue, newHumanizedValue) => {\r\n const { timeframe: tf, customDateRange: cdr } = newValue || {};\r\n onDropdownDismiss(filter, { dateAddedFilter: tf, dateAddedFilterCustomDateRange: cdr }, newHumanizedValue);\r\n }, [filter, onDropdownDismiss]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n});\r\n\r\nexport const PerformanceSearchTextFilterComponent = React.memo(({ i18n, filter, onValueChange }) => {\r\n const { value, title } = filter || {};\r\n const { searchText } = value || {};\r\n\r\n const searchTextValueRef = useRef('');\r\n const onSearchTextChanging = useCallback((evt, newValue) => {\r\n searchTextValueRef.current = newValue || '';\r\n }, []);\r\n\r\n const onSearchTextChange = useCallback((newValue) => {\r\n if (newValue !== searchText) {\r\n onValueChange(filter, { searchText: newValue }, newValue);\r\n }\r\n }, [filter, onValueChange, searchText]);\r\n\r\n const onSearchTextBlur = useCallback(() => {\r\n onSearchTextChange(searchTextValueRef.current);\r\n }, [onSearchTextChange]);\r\n\r\n\r\n const onSearchTextClear = useCallback(() => {\r\n onSearchTextChange('');\r\n }, [onSearchTextChange]);\r\n\r\n return (\r\n
\r\n \r\n {/* */}\r\n
\r\n );\r\n});\r\n\r\nexport const getPerformanceFilterComponents = ({ isAdsStudioAIGCMVPEnabled }) => {\r\n const ComponentMap = {\r\n // [FilterType.AssetType]: AssetTypeFilterComponent,\r\n [FilterType.ImportSource]: !isAdsStudioAIGCMVPEnabled ? ImportSourceFilterComponent : undefined,\r\n [FilterType.AssetSource]: isAdsStudioAIGCMVPEnabled ? AssetSourceFilterComponent : undefined,\r\n [FilterType.ImageSize]: ImageSizeFilterComponent,\r\n // [FilterType.VideoDuration]: VideoDurationFilterComponent,\r\n [FilterType.DateAdded]: DateAddedFilterComponent,\r\n [FilterType.SearchText]: PerformanceSearchTextFilterComponent,\r\n };\r\n return ComponentMap;\r\n};\r\n","import { makeStyles } from '@fluentui/react-components';\r\n\r\nexport const useBreadcrumbStyles = makeStyles({\r\n breadcrumbButton: {\r\n '&.fui-BreadcrumbButton': {\r\n color: '#0F6CBD',\r\n },\r\n },\r\n breadcrumbButtonCurrent: {\r\n '&.fui-BreadcrumbButton': {\r\n color: '#424242',\r\n fontWeight: 400,\r\n },\r\n },\r\n breadcrumbContainer: {\r\n marginBottom: '24px',\r\n },\r\n});\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\nimport { AdsStudioBreadcrumb } from '../ads-studio-breadcrumb';\r\n\r\nimport { useBreadcrumbStyles } from './style';\r\n\r\nexport const FolderPathBreadcrumb = ({\r\n folderPath,\r\n onItemClick,\r\n visibleForRootFolder,\r\n}) => {\r\n const items = useMemo(() => folderPath.map(item => ({\r\n key: item.folderId,\r\n text: item.folderName,\r\n })), [folderPath]);\r\n\r\n const classes = useBreadcrumbStyles();\r\n\r\n return (\r\n items.length > 1 || visibleForRootFolder ? (\r\n
\r\n \r\n
\r\n ) : null\r\n );\r\n};\r\n\r\nFolderPathBreadcrumb.propTypes = {\r\n folderPath: PropTypes.arrayOf(PropTypes.shape({\r\n folderId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\r\n folderName: PropTypes.string,\r\n })),\r\n onItemClick: PropTypes.func.isRequired,\r\n visibleForRootFolder: PropTypes.bool,\r\n};\r\n\r\nFolderPathBreadcrumb.defaultProps = {\r\n folderPath: [],\r\n visibleForRootFolder: false,\r\n};\r\n","import { makeStyles, shorthands } from '@fluentui/react-components';\r\n\r\nexport const useAdsStudioLibraryPageContentStyle = makeStyles({\r\n container: {\r\n '& .ads-studio-grid-container': {\r\n marginTop: '12px',\r\n position: 'relative',\r\n ...shorthands.overflow('hidden'),\r\n // to show the shadow\r\n paddingLeft: '15px',\r\n paddingRight: '15px',\r\n },\r\n '& .library-page-header': {\r\n position: 'sticky',\r\n paddingBottom: '12px',\r\n paddingTop: '24px',\r\n paddingLeft: '36px',\r\n paddingRight: '36px',\r\n marginLeft: '-21px',\r\n marginRight: '-21px',\r\n top: 0,\r\n zIndex: 10,\r\n backgroundColor: 'white',\r\n height: 'auto',\r\n '& .library-page-header-top-wrapper': {\r\n visibility: 'visible',\r\n },\r\n '&.show-bulk-toolbar': {\r\n paddingTop: '12px',\r\n height: '80px',\r\n '& .library-page-header-top-wrapper': {\r\n visibility: 'hidden',\r\n },\r\n },\r\n },\r\n '& .library-page-header-toolbar': {\r\n position: 'absolute',\r\n top: '12px',\r\n left: '36px',\r\n right: '36px',\r\n zIndex: 11,\r\n backgroundColor: 'white',\r\n },\r\n },\r\n});\r\n\r\n","import React, { useState, useEffect } from 'react';\r\n\r\nexport const HiddenDivForAnnounce = ({\r\n toAnnounce,\r\n}) => {\r\n const [announce, setAnnounce] = useState('');\r\n\r\n useEffect(() => {\r\n if (toAnnounce && announce !== toAnnounce) {\r\n setAnnounce(toAnnounce);\r\n }\r\n }, [announce, toAnnounce]);\r\n\r\n return (\r\n \r\n {announce}\r\n
\r\n );\r\n};\r\n","import _ from 'underscore';\r\nimport { DEFAULT_CONFIG as DEFAULT_GRID_CONFIG } from '../ads-studio-tile-grid';\r\n\r\nexport const FOLDER_GRID_CONFIG = { ...DEFAULT_GRID_CONFIG, aspectRatio: undefined, rowHeight: 100 };\r\n\r\n// null means loading\r\nexport const isSectionDataLoadingStatus =\r\n sectionData => _.every(sectionData, ({ items }) => items == null);\r\n\r\n// [] means loaded, but no data\r\nexport const isSectionDataEmptyStatus =\r\n (sectionData) => {\r\n const anySectionLoaded = _.any(sectionData, ({ items }) => !!items);\r\n\r\n return anySectionLoaded && _.every(sectionData, ({ items }) => _.isEmpty(items));\r\n };\r\n","import _ from 'underscore';\r\nimport React, { useCallback, useEffect, useMemo, useState, useContext, useRef } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { Overlay } from '@bingads-webui-react/fabric-control';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\nimport { useJsData } from '@bingads-webui-cc-react/js-data-rest';\r\n\r\nimport { LibraryEmptyView } from '../empty-view/library-page-empty-view';\r\nimport { LibraryFilterBar, FilterContext } from '../../filter-bar';\r\n\r\nimport { SectionTilesGrid, DEFAULT_CONFIG as DEFAULT_GRID_CONFIG } from '../ads-studio-tile-grid';\r\n\r\nimport {\r\n GridSectionName,\r\n DEFAULT_PAGE_SIZE,\r\n AdsStudioPageName,\r\n FolderAssetType,\r\n CSMLTimeFrame,\r\n getDateAddedChoiceOptions,\r\n getUpdatedAssets,\r\n AIGCHandler,\r\n isValidXandrAccount,\r\n} from '../../model';\r\n\r\nimport { FolderPathBreadcrumb } from '../folder-path-breadcrumb';\r\nimport { AdsStudioSpinner } from '../ads-studio-spinner';\r\n\r\nimport { useAdsStudioLibraryPageContentStyle } from './styles/library-page-style';\r\nimport {\r\n isSectionDataLoadingStatus,\r\n isSectionDataEmptyStatus,\r\n} from './sections-utils';\r\nimport { HiddenDivForAnnounce } from '../hidden-div-for-announce';\r\n\r\nconst overlaySpinnerStyles = { margin: 200 };\r\n// const bottomSpinnerStyles = { marginTop: 20, marginBottom: 100 };\r\n\r\nconst FOLDER_GRID_CONFIG = {\r\n ...DEFAULT_GRID_CONFIG,\r\n aspectRatio: undefined,\r\n rowHeight: 110,\r\n // width: 320,\r\n};\r\n\r\nconst AdsStudioLibraryPageContentInternal = ({\r\n dataService,\r\n renderHeader,\r\n renderGridCell,\r\n onFailedToLoadData,\r\n dateFormat,\r\n ianaTimeZone,\r\n // assetLibraryUserPreferences,\r\n // assetLibraryAccountPreferences,\r\n adsStudioUserPreferences,\r\n reload,\r\n logger,\r\n i18n,\r\n aid,\r\n cid,\r\n oDataConfig,\r\n dataLoaded,\r\n perfMarker,\r\n displayFolderPath,\r\n reloadingFolders,\r\n assetsToLoadForSubfolders,\r\n renderToolbar,\r\n renderEmptyView,\r\n\r\n // multi-selection props\r\n multiSelectionEnabled,\r\n onSelectionChange,\r\n // onFolderNavigationChange,\r\n sectionSelectedItems,\r\n //\r\n // searchLocationFilterState,\r\n // setSearchLocationFilterState,\r\n\r\n // realUsedFlagSuffix,\r\n isAssetLibraryAIGCMVPEnabled,\r\n isAdsStudioAIGCMVPEnabled,\r\n isAIGCRegionRestricted,\r\n notificationApi,\r\n // isClickableOutsideFocusTrap,\r\n\r\n preDefinedAssetSources,\r\n // disabledAssetSources,\r\n onCreateFolderClick,\r\n navigation,\r\n\r\n gridScrollContainer,\r\n permissions,\r\n}) => {\r\n const isXandrIntEnabled = useMemo(() => permissions.dynamic.XandrIntegrationEnabled, [permissions]);\r\n // eslint-disable-next-line no-restricted-globals\r\n const { data: account } = useJsData(jsData => (isXandrIntEnabled ? jsData.Account.find(aid) : Promise.resolve()), [aid, isXandrIntEnabled]);\r\n const isXandrIntegrationEnabled = useMemo(() => (isXandrIntEnabled ? isValidXandrAccount(account) : false), [account, isXandrIntEnabled]);\r\n\r\n const classes = useAdsStudioLibraryPageContentStyle();\r\n const [announcedText, setAnnouncedText] = useState('');\r\n\r\n const { filterBar } = useContext(FilterContext);\r\n const {\r\n isImageSelected,\r\n isVideoSelected,\r\n searchText: searchBoxText,\r\n sortBy,\r\n dateAddedFilter,\r\n dateAddedFilterCustomDateRange,\r\n importSource,\r\n assetSources,\r\n minWidthFilter,\r\n minHeightFilter,\r\n minDurationFilter,\r\n maxDurationFilter,\r\n } = useMemo(() => filterBar.getFilters(), [filterBar]);\r\n\r\n const isAnyFilterSet = searchBoxText || importSource || isImageSelected || isVideoSelected\r\n || minWidthFilter || minHeightFilter || minDurationFilter || maxDurationFilter\r\n || (dateAddedFilter && dateAddedFilter !== CSMLTimeFrame.Anytime) || !_.isEmpty(assetSources);\r\n\r\n const {\r\n assets,\r\n totalAssetCount,\r\n totalSubfoldersCount,\r\n imageCroppingTasks,\r\n loadData,\r\n loadMoreData,\r\n folderPath,\r\n navigateToFolderInPath,\r\n folders,\r\n currentFolderId,\r\n videoUpdated,\r\n dataOwnerPageName,\r\n } = dataService || {};\r\n\r\n const openSystemUploadRef = useRef(null);\r\n\r\n const onUploadLocalFileClick = useCallback(() => {\r\n openSystemUploadRef.current = {};\r\n navigation.gotoUploadFilesPanelPage({\r\n aid, cid, oDataConfig, i18n, openSystemUpload: openSystemUploadRef.current,\r\n });\r\n }, [aid, cid, i18n, navigation, oDataConfig]);\r\n\r\n const onStockButtonClick = useCallback((props) => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('Add asset from shutterstock');\r\n }\r\n navigation.gotoStockImagePanelPage(props);\r\n }, [logger, navigation]);\r\n\r\n const onInvestButtonClick = useCallback((props) => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('Add asset from invest');\r\n }\r\n navigation.gotoInvestImagePanelPage(props);\r\n }, [logger, navigation]);\r\n\r\n const onWebsiteButtonClick = useCallback((props) => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('Add asset from website');\r\n }\r\n navigation.gotoWebsiteImagePanelPage(props);\r\n }, [logger, navigation]);\r\n\r\n const onUploadLocalFolderClick = useCallback(() => {\r\n openSystemUploadRef.current = {};\r\n navigation.gotoUploadFolderPanelPage({\r\n aid, cid, oDataConfig, i18n, openSystemUpload: openSystemUploadRef.current,\r\n });\r\n }, [aid, cid, i18n, navigation, oDataConfig]);\r\n\r\n const onUploadVideoClick = useCallback(() => {\r\n if (logger && logger.logTrace) {\r\n logger.logTrace('Add video from URl');\r\n }\r\n\r\n if (isXandrIntegrationEnabled) {\r\n navigation.gotoMixedVideoPanelPage({\r\n aid, cid, oDataConfig, i18n,\r\n });\r\n } else {\r\n navigation.gotoAddVideoPanelPage({\r\n aid, cid, oDataConfig, i18n,\r\n });\r\n }\r\n }, [aid, cid, i18n, logger, navigation, oDataConfig, isXandrIntegrationEnabled]);\r\n\r\n const onUploadImageClick = useCallback(() => {\r\n navigation.gotoMixedImagePanelPage({\r\n aid, cid, oDataConfig, i18n,\r\n });\r\n }, [aid, cid, i18n, navigation, oDataConfig]);\r\n\r\n // // load assets for initial page load, or after any filters are changed\r\n const loadedAssetList = useMemo(() => getUpdatedAssets({\r\n assets,\r\n updates: {\r\n imageCroppingTasks,\r\n videoUpdated,\r\n },\r\n }), [assets, imageCroppingTasks, videoUpdated]);\r\n\r\n const onRenderCell = useCallback(({ item, sectionName, ...others }) => {\r\n if (renderGridCell) {\r\n const cell = renderGridCell({\r\n item, searchText: searchBoxText, sectionName, ...others,\r\n });\r\n if (cell) return cell;\r\n }\r\n return null;\r\n }, [renderGridCell, searchBoxText]);\r\n\r\n const [isPageInited, setPageInited] = useState(false);\r\n // const [isGridInited, setGridInited] = useState(false);\r\n const [loadingData, setLoadingData] = useState(false);\r\n\r\n const loadDataAsync = useCallback(() => {\r\n // get selected date range for date added filter\r\n let dateAddedDateRange;\r\n if (dateAddedFilter === CSMLTimeFrame.Custom) {\r\n dateAddedDateRange = dateAddedFilterCustomDateRange;\r\n } else {\r\n const dateAddedChoiceOptions = getDateAddedChoiceOptions(i18n, ianaTimeZone);\r\n const { range } = _.find(dateAddedChoiceOptions, o => o.key === dateAddedFilter) || {};\r\n dateAddedDateRange = range;\r\n }\r\n\r\n const usePreDefinedAssetSources = preDefinedAssetSources.length > 0 && assetSources.length === 0;\r\n let assetTypeFilter = null;\r\n if (isImageSelected || isVideoSelected) {\r\n assetTypeFilter = isImageSelected ? FolderAssetType.Image : FolderAssetType.Video;\r\n }\r\n let libraryPageLoadDataPerfMarker;\r\n if (perfMarker) {\r\n libraryPageLoadDataPerfMarker = perfMarker.createChild('libraryPageLoadData');\r\n }\r\n return loadData({\r\n searchText: searchBoxText,\r\n minImageWidth: minWidthFilter,\r\n minImageHeight: minHeightFilter,\r\n minVideoDuration: minDurationFilter,\r\n maxVideoDuration: maxDurationFilter,\r\n dateAddedDateRange,\r\n sortBy,\r\n importSource,\r\n assetSources: usePreDefinedAssetSources ? preDefinedAssetSources : assetSources,\r\n assetsToLoadForSubfolders,\r\n assetTypeFilter,\r\n isGlobalSearch: false,\r\n includeParentHierarchy: false, // include parent hierarchy when global searching\r\n pageName: AdsStudioPageName.LibraryPage,\r\n perfMarker: libraryPageLoadDataPerfMarker,\r\n });\r\n }, [assetSources, assetsToLoadForSubfolders, dateAddedFilter, dateAddedFilterCustomDateRange, i18n, ianaTimeZone, importSource, isImageSelected, isVideoSelected, loadData, maxDurationFilter, minDurationFilter, minHeightFilter, minWidthFilter, preDefinedAssetSources, searchBoxText, sortBy]);\r\n\r\n const bulkTookbar = useMemo(() => (renderToolbar ? renderToolbar() : null), [renderToolbar]);\r\n\r\n const onFolderPathClicked = useCallback((item) => {\r\n logger.logTrace('Navigate to folder in path', { folderId: item.key });\r\n navigateToFolderInPath({ id: item.key });\r\n }, [navigateToFolderInPath, logger]);\r\n\r\n const onRenderHeader = useCallback(() => (\r\n !renderHeader ? (\r\n
\r\n
\r\n {/* display folder path */}\r\n {displayFolderPath &&\r\n \r\n }\r\n {\r\n AIGCHandler(isAdsStudioAIGCMVPEnabled, isAIGCRegionRestricted, notificationApi, i18n, () => {\r\n navigation.gotoAIGenerationPanelPage({ folderId: currentFolderId });\r\n });\r\n }}\r\n onCreateFolderClick={onCreateFolderClick}\r\n userPreference={adsStudioUserPreferences}\r\n />\r\n
\r\n
\r\n {bulkTookbar}\r\n
\r\n
\r\n\r\n ) : (\r\n renderHeader()\r\n )\r\n ), [adsStudioUserPreferences, bulkTookbar, currentFolderId, dateFormat, displayFolderPath, folderPath, i18n, ianaTimeZone, isAIGCRegionRestricted, isAdsStudioAIGCMVPEnabled, logger, navigation, notificationApi, onCreateFolderClick, onFolderPathClicked, onUploadImageClick, onUploadLocalFileClick, onUploadLocalFolderClick, onUploadVideoClick, renderHeader]);\r\n\r\n const foldersGridSection = useMemo(() => ({\r\n sectionName: GridSectionName.Folder,\r\n sectionTitle: i18n.getString(_TL_('Folders')),\r\n sectionClassName: 'ads-studio-folders-section',\r\n itemKey: 'folderId',\r\n items: folders,\r\n totalItemCount: totalSubfoldersCount,\r\n config: {\r\n ...FOLDER_GRID_CONFIG,\r\n scrollContainer: gridScrollContainer,\r\n },\r\n selectedItems: sectionSelectedItems && sectionSelectedItems[GridSectionName.Folder],\r\n }), [folders, gridScrollContainer, i18n, sectionSelectedItems, totalSubfoldersCount]);\r\n\r\n const assetsGridSection = useMemo(() => ({\r\n sectionName: GridSectionName.Asset,\r\n sectionTitle: i18n.getString(_TL_('Assets')),\r\n sectionClassName: 'ads-studio-assets-section',\r\n itemKey: 'id',\r\n items: loadedAssetList,\r\n totalItemCount: totalAssetCount,\r\n selectedItems: sectionSelectedItems && sectionSelectedItems[GridSectionName.Asset],\r\n config: {\r\n scrollContainer: gridScrollContainer,\r\n minItemHeight: 42,\r\n },\r\n }), [gridScrollContainer, i18n, loadedAssetList, sectionSelectedItems, totalAssetCount]);\r\n\r\n const sectionGridData = useMemo(\r\n () => ([foldersGridSection, assetsGridSection]),\r\n [assetsGridSection, foldersGridSection]\r\n );\r\n\r\n // init page\r\n useEffect(() => {\r\n if (!isPageInited) {\r\n setPageInited(true);\r\n }\r\n }, [isPageInited]);\r\n\r\n useEffect(() => {\r\n if (isAssetLibraryAIGCMVPEnabled) {\r\n setClarityTag({ AssetLibraryCopilot: 'true' });\r\n }\r\n }, [isAssetLibraryAIGCMVPEnabled]);\r\n\r\n // load data for initial page load\r\n useEffect(() => {\r\n if (!isPageInited) {\r\n // wait until page is initialized\r\n return;\r\n }\r\n\r\n if (reload) { // Important! Add a trivial log so that reload will be an explicit dep.\r\n logger.logTrace('force to reload');\r\n }\r\n if (perfMarker) {\r\n perfMarker.willFetchData();\r\n }\r\n setLoadingData(true);\r\n loadDataAsync()\r\n .tapCatch((err) => { // throw out so that this error will be shown in console for easy debugging\r\n onFailedToLoadData(err);\r\n }).finally(() => {\r\n setLoadingData(false);\r\n if (perfMarker) {\r\n perfMarker.willRender();\r\n }\r\n dataLoaded();\r\n // setGridInited(true);\r\n });\r\n }, [isPageInited, loadDataAsync, onFailedToLoadData, reload, logger]);\r\n\r\n const loadNextPage = useCallback(() => {\r\n loadMoreData({ count: DEFAULT_PAGE_SIZE }).catch((err) => {\r\n onFailedToLoadData(err);\r\n });\r\n }, [loadMoreData, onFailedToLoadData]);\r\n\r\n const isPageLoading = !isPageInited\r\n || loadingData || isSectionDataLoadingStatus(sectionGridData) || reloadingFolders;\r\n\r\n const hadNoData = isSectionDataEmptyStatus(sectionGridData);\r\n\r\n useEffect(() => {\r\n if (!isPageLoading && hadNoData && !_.isFunction(renderEmptyView) && isAnyFilterSet) {\r\n setAnnouncedText(i18n.getString(_TL_('No assets match your search. Please try again.')));\r\n } else {\r\n setAnnouncedText('');\r\n }\r\n }, [hadNoData, i18n, isAnyFilterSet, isPageLoading, renderEmptyView]);\r\n\r\n return (\r\n
\r\n {/* grid header or toolbar */}\r\n {onRenderHeader()}\r\n\r\n {/* grid content */}\r\n
\r\n {(!dataOwnerPageName || dataOwnerPageName === AdsStudioPageName.LibraryPage) && (\r\n \r\n )}\r\n
\r\n {/* show loading indicator */}\r\n {isPageLoading && (\r\n \r\n \r\n \r\n )}\r\n\r\n {/* no content */}\r\n {(!isPageLoading && hadNoData) && (\r\n
\r\n {\r\n renderEmptyView ? renderEmptyView() : (\r\n 1)}\r\n isAnyFilterSet={isAnyFilterSet}\r\n onClickCreate={() => {\r\n AIGCHandler(isAdsStudioAIGCMVPEnabled, isAIGCRegionRestricted, notificationApi, i18n, () => {\r\n navigation.gotoAIGenerationPanelPage({ folderId: currentFolderId });\r\n });\r\n }}\r\n onClickUpload={onUploadLocalFileClick}\r\n onClickStock={onStockButtonClick}\r\n onClickWebsite={onWebsiteButtonClick}\r\n onClickInvest={onInvestButtonClick}\r\n isXandrIntegrationEnabled={isXandrIntegrationEnabled}\r\n />\r\n )\r\n }\r\n
\r\n )}\r\n \r\n
\r\n );\r\n};\r\n\r\nAdsStudioLibraryPageContentInternal.propTypes = {\r\n dataService: PropTypes.shape({\r\n assets: PropTypes.arrayOf(PropTypes.shape({})),\r\n totalAssetCount: PropTypes.number,\r\n imageCroppingTasks: PropTypes.shape({}),\r\n loadData: PropTypes.func,\r\n loadMoreData: PropTypes.func,\r\n }).isRequired,\r\n onFailedToLoadData: PropTypes.func,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n logError: PropTypes.func,\r\n }).isRequired,\r\n ianaTimeZone: PropTypes.string.isRequired,\r\n dateFormat: PropTypes.string.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n getToday: PropTypes.func,\r\n formatCivilDate: PropTypes.func,\r\n }).isRequired,\r\n assetLibraryUserPreferences: PropTypes.shape({\r\n sortBy: PropTypes.string,\r\n setSortBy: PropTypes.func,\r\n }),\r\n assetLibraryAccountPreferences: PropTypes.shape({}),\r\n reload: PropTypes.shape({}), // if changed, force to reload\r\n renderHeader: PropTypes.func,\r\n renderGridCell: PropTypes.func,\r\n renderToolbar: PropTypes.func,\r\n\r\n dataLoaded: PropTypes.func,\r\n displayFolderPath: PropTypes.bool,\r\n reloadingFolders: PropTypes.bool,\r\n assetsToLoadForSubfolders: PropTypes.number,\r\n\r\n // multi selection\r\n multiSelectionEnabled: PropTypes.bool,\r\n onSelectionChange: PropTypes.func,\r\n // onFolderNavigationChange: PropTypes.func,\r\n sectionSelectedItems: PropTypes.shape({}),\r\n\r\n // searchLocationFilterState: PropTypes.string,\r\n // setSearchLocationFilterState: PropTypes.func,\r\n\r\n // realUsedFlagSuffix: PropTypes.string,\r\n isAssetLibraryAIGCMVPEnabled: PropTypes.bool,\r\n isAdsStudioAIGCMVPEnabled: PropTypes.bool,\r\n // isClickableOutsideFocusTrap: PropTypes.bool,\r\n\r\n // custom filter\r\n preDefinedAssetSources: PropTypes.arrayOf(PropTypes.shape({})),\r\n // disabledAssetSources: PropTypes.arrayOf(PropTypes.string),\r\n onCreateFolderClick: PropTypes.func,\r\n navigation: PropTypes.shape({\r\n gotoUploadFilesPanelPage: PropTypes.func,\r\n gotoUploadFolderPanelPage: PropTypes.func,\r\n gotoWebsiteImagePanelPage: PropTypes.func,\r\n gotoStockImagePanelPage: PropTypes.func,\r\n gotoAddVideoPanelPage: PropTypes.func,\r\n gotoAIGenerationPanelPage: PropTypes.func,\r\n gotoMixedImagePanelPage: PropTypes.func,\r\n gotoMixedVideoPanelPage: PropTypes.func,\r\n gotoInvestImagePanelPage: PropTypes.func,\r\n }),\r\n gridScrollContainer: PropTypes.string,\r\n isAIGCRegionRestricted: PropTypes.bool,\r\n permissions: PropTypes.shape({\r\n dynamic: PropTypes.shape({}),\r\n }),\r\n\r\n};\r\n\r\nAdsStudioLibraryPageContentInternal.defaultProps = {\r\n assetLibraryUserPreferences: null,\r\n assetLibraryAccountPreferences: null,\r\n reload: null,\r\n renderHeader: null,\r\n renderGridCell: null,\r\n renderToolbar: null,\r\n onFailedToLoadData: () => null,\r\n dataLoaded: () => null,\r\n displayFolderPath: false,\r\n reloadingFolders: false,\r\n\r\n multiSelectionEnabled: false,\r\n onSelectionChange: undefined,\r\n // onFolderNavigationChange: _.noop,\r\n sectionSelectedItems: undefined,\r\n\r\n assetsToLoadForSubfolders: 1,\r\n\r\n // searchLocationFilterState: undefined,\r\n // setSearchLocationFilterState: undefined,\r\n\r\n // realUsedFlagSuffix: '',\r\n isAssetLibraryAIGCMVPEnabled: false,\r\n isAdsStudioAIGCMVPEnabled: false,\r\n // isClickableOutsideFocusTrap: false,\r\n\r\n preDefinedAssetSources: [],\r\n // disabledAssetSources: [],\r\n onCreateFolderClick: undefined,\r\n navigation: {},\r\n gridScrollContainer: '[role=\"main\"]',\r\n isAIGCRegionRestricted: false,\r\n permissions: { dynamic: {} },\r\n};\r\n\r\nexport const AdsStudioLibraryPageContent = AdsStudioLibraryPageContentInternal;\r\n","import React, { useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n Dialog,\r\n DialogTitle,\r\n DialogContent,\r\n DialogActions,\r\n DialogBody,\r\n DialogSurface,\r\n Button,\r\n makeStyles,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\nimport { Dismiss20Regular } from '@fluentui/react-icons';\r\n\r\nconst useStyles = makeStyles({\r\n dialog: {\r\n '&.fui-DialogSurface': {\r\n width: '450px',\r\n },\r\n },\r\n title: {\r\n wordBreak: 'break-word',\r\n },\r\n});\r\n\r\nexport const ConfirmDialog = (props) => {\r\n const {\r\n isDisplayed,\r\n title,\r\n errorText,\r\n confirmString,\r\n cancelString,\r\n onClickConfirm,\r\n onClickCancel,\r\n isUiBlocked,\r\n warningMsg,\r\n } = props;\r\n\r\n const classes = useStyles();\r\n\r\n const DismissIcon = useMemo(() => , [onClickCancel]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n {\r\n warningMsg &&\r\n
\r\n {warningMsg}\r\n
\r\n }\r\n {\r\n errorText &&\r\n
\r\n {errorText}\r\n
\r\n }\r\n
\r\n \r\n 0 || isUiBlocked}\r\n className=\"dialog-confirm-button\"\r\n onClick={onClickConfirm}\r\n appearance=\"primary\"\r\n >\r\n {confirmString}\r\n \r\n \r\n {cancelString}\r\n \r\n \r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nConfirmDialog.propTypes = {\r\n isDisplayed: PropTypes.bool.isRequired,\r\n isUiBlocked: PropTypes.bool,\r\n title: PropTypes.string.isRequired,\r\n errorText: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\r\n warningMsg: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\r\n confirmString: PropTypes.string.isRequired,\r\n cancelString: PropTypes.string.isRequired,\r\n onClickConfirm: PropTypes.func.isRequired,\r\n onClickCancel: PropTypes.func.isRequired,\r\n customStyle: PropTypes.shape({}),\r\n};\r\n\r\nConfirmDialog.defaultProps = {\r\n errorText: '',\r\n warningMsg: '',\r\n isUiBlocked: false,\r\n customStyle: null,\r\n};\r\n","import React from 'react';\r\n\r\nexport const GenerateImageContext = React.createContext({});\r\n\r\n","import React, { useState } from 'react';\r\nimport { GenerateImageContext } from './generate-image-context';\r\n\r\nexport const GenerateImageContextProvider = (props) => {\r\n const [generateImageExample, setGenerateImageExample] = useState({\r\n prompt: undefined,\r\n imageUrl: undefined,\r\n });\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n};\r\n\r\nexport const withGenerateImageContext = Component => props => (\r\n \r\n \r\n \r\n);\r\n","import React from 'react';\r\nimport {\r\n makeResetStyles,\r\n shorthands,\r\n mergeClasses,\r\n} from '@fluentui/react-components';\r\n\r\nconst useLoadingViewStyles = makeResetStyles({\r\n width: '100%',\r\n ...shorthands.borderRadius('2px'),\r\n height: '4px',\r\n background: 'linear-gradient(to right, rgba(0, 120, 212, 0) 0%, #213AD5 50%, rgba(0, 120, 212, 0) 100%)',\r\n backgroundSize: '33%',\r\n backgroundRepeat: 'no-repeat',\r\n animation: 'loading_indicator 3s linear infinite',\r\n animationIterationCount: 'infinite',\r\n animationTimingFunction: 'linear',\r\n animationDuration: '3s',\r\n animationName: [{\r\n from: { backgroundPosition: '-50%' },\r\n to: { backgroundPosition: '150%' },\r\n }],\r\n backgroundColor: '#E6E6E6',\r\n forcedColorAdjust: 'none',\r\n});\r\n\r\nexport const LoadingIndicator = () => {\r\n const loadingViewStyles = useLoadingViewStyles();\r\n return (\r\n
\r\n );\r\n};\r\n","import ExampleBackground1 from './media/background1.jpg';\r\nimport ExampleBackground2 from './media/background2.jpg';\r\nimport ExampleBackground3 from './media/background3.jpg';\r\nimport ExampleBackground4 from './media/background4.jpg';\r\n\r\nexport const ExamplePromptList = [\r\n {\r\n backgroundImageUrl: ExampleBackground1,\r\n promptText: _TL_(' behind subtle floral patterns, having a fresh and vibrant summer garden atmosphere. Surrounded by soft greenery and natural sunlight.'),\r\n },\r\n {\r\n backgroundImageUrl: ExampleBackground2,\r\n promptText: _TL_(' on a sleek marble surface, having a clean and refreshing atmosphere. Surrounded by eucalyptus leaves and soft natural light filtering through a window.'),\r\n },\r\n {\r\n backgroundImageUrl: ExampleBackground3,\r\n promptText: _TL_(' is placed under a Christmas tree, with lots of gift boxes besides it, having Christmas atmosphere.'),\r\n },\r\n {\r\n backgroundImageUrl: ExampleBackground4,\r\n promptText: _TL_(' on a stone platform, having a serene and coastal atmosphere. Surrounded by beach reflections.'),\r\n },\r\n];\r\n","import _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport React, { useMemo, useState, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { HiddenDivForAnnounce } from '../hidden-div-for-announce';\r\nimport { ExamplePromptList } from './example-prompt';\r\n\r\nexport const ExampleImageListWithoutStyle = ({\r\n onSelectImage,\r\n classes,\r\n MultiLineEllipsisText,\r\n ExampleImageCell,\r\n i18n,\r\n labelId,\r\n}) => {\r\n const [announcedText, setAnnouncedText] = useState('');\r\n const promptList = useMemo(() => ExamplePromptList.map(x => ({\r\n ...x,\r\n promptText: i18n.getString(x.promptText),\r\n })), [i18n]);\r\n\r\n const wrappedOnSelectImage = useCallback((promptText, index) => {\r\n onSelectImage(promptText, index);\r\n setAnnouncedText(i18n.getString(_TL_('Set the prompt to {{promptText}}'), { promptText }));\r\n }, [onSelectImage, i18n]);\r\n\r\n return (\r\n
\r\n {_.map(promptList, (template, index) => (\r\n \r\n ))}\r\n \r\n
);\r\n};\r\n\r\nExampleImageListWithoutStyle.propTypes = {\r\n onSelectImage: PropTypes.func.isRequired,\r\n classes: PropTypes.shape({\r\n exampleImageList: PropTypes.string,\r\n }),\r\n labelId: PropTypes.string,\r\n};\r\n\r\nExampleImageListWithoutStyle.defaultProps = {\r\n classes: {},\r\n labelId: '',\r\n};\r\n\r\n","import classNames from 'classnames';\r\nimport React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport const ExampleImageCellWithoutStyle = ({\r\n backgroundImageUrl,\r\n promptText,\r\n onSelectImage,\r\n index,\r\n classes,\r\n MultiLineEllipsisText,\r\n}) => {\r\n // when press Enter key, trigger the click event\r\n const onKeyDown = useCallback((event) => {\r\n if (event.key === 'Enter') {\r\n onSelectImage(promptText, index);\r\n }\r\n }, [index, onSelectImage, promptText]);\r\n\r\n const onClick = useCallback(() => {\r\n onSelectImage(promptText, index);\r\n }, [index, onSelectImage, promptText]);\r\n\r\n return (\r\n \r\n {`Example\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nExampleImageCellWithoutStyle.propTypes = {\r\n backgroundImageUrl: PropTypes.string.isRequired,\r\n promptText: PropTypes.string.isRequired,\r\n onSelectImage: PropTypes.func.isRequired,\r\n index: PropTypes.number.isRequired,\r\n classes: PropTypes.shape({\r\n exampleImageCell: PropTypes.string,\r\n }),\r\n};\r\n\r\nExampleImageCellWithoutStyle.defaultProps = {\r\n classes: {},\r\n};\r\n","import React from 'react';\r\nimport { Button, Textarea, mergeClasses, useId } from '@fluentui/react-components';\r\nimport {\r\n SendRegular,\r\n} from '@fluentui/react-icons';\r\n\r\nexport const MAX_PROMPT_LENGTH = 200;\r\n\r\nexport const PromptEditorV2 = (props) => {\r\n const {\r\n i18n,\r\n prompt,\r\n setPrompt,\r\n disabledText,\r\n onKeyDownInTextArea,\r\n placeholder,\r\n } = props;\r\n\r\n const textAreaId = useId('prompt-editor-textarea');\r\n\r\n return (\r\n <>\r\n
{i18n.getString(_TL_('What background do you want to create?'))}
\r\n
\r\n setPrompt(data.value)}\r\n onKeyDown={onKeyDownInTextArea}\r\n className={mergeClasses('prompt-textarea', disabledText && 'disabled-prompt-textarea')}\r\n aria-label={i18n.getString(_TL_('Prompt Editor'))}\r\n aria-describedby={textAreaId}\r\n placeholder={placeholder}\r\n disabled={disabledText}\r\n />\r\n
{i18n.getString(_TL_('{{prompt}}'), { prompt })}
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport const PromptEditor = (props) => {\r\n const {\r\n i18n,\r\n prompt,\r\n setPrompt,\r\n disabledText,\r\n disabledButton,\r\n onKeyDownInTextArea,\r\n onClickGenerateButton,\r\n placeholder,\r\n } = props;\r\n\r\n const textAreaId = useId('prompt-editor-textarea');\r\n\r\n return (\r\n <>\r\n
{i18n.getString(_TL_('What background do you want to create?'))}
\r\n
\r\n setPrompt(data.value)}\r\n onKeyDown={onKeyDownInTextArea}\r\n className=\"prompt-textarea\"\r\n aria-label={i18n.getString(_TL_('Prompt Editor'))}\r\n aria-describedby={textAreaId}\r\n placeholder={placeholder}\r\n disabled={disabledText}\r\n />\r\n
{i18n.getString(_TL_('{{prompt}}'), { prompt })}
\r\n
\r\n }\r\n appearance=\"transparent\"\r\n onClick={onClickGenerateButton}\r\n disabled={disabledButton}\r\n className={mergeClasses('generate-button', disabledButton ? 'disabled' : 'enabled')}\r\n aria-label={i18n.getString(_TL_('Expand background'))}\r\n />\r\n
\r\n
\r\n \r\n );\r\n};\r\n","import React, { useRef, useEffect, useCallback, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport const ObjectSelectionImageView = ({\r\n i18n,\r\n originalImageUrl,\r\n originalImageHeight,\r\n originalImageWidth,\r\n getMaskValueAtPoint,\r\n updateHighlightedImage,\r\n isFetchingSegmentations,\r\n toggleSelectedMask,\r\n borderImageSrc,\r\n workingSelectedImageSrc,\r\n highlightedImageSrc,\r\n maskValues,\r\n logger,\r\n}) => {\r\n // get image from offscreen canvas\r\n // draw the canvas in the front\r\n const imageContainer = useRef(null);\r\n const [maskIndex, setMaskIndex] = useState(undefined);\r\n\r\n const windowToImgPosition = useCallback((x, y) => {\r\n if (imageContainer.current) {\r\n const imageBox = imageContainer.current.getBoundingClientRect();\r\n const targetWidth = imageBox.width;\r\n const targetHeight = imageBox.height;\r\n // calculate the ratio of the original image and the target image for object-fit: contain\r\n const wr = targetWidth / originalImageWidth;\r\n const hr = targetHeight / originalImageHeight;\r\n const ratio = Math.min(wr, hr);\r\n const width = originalImageWidth * ratio;\r\n const height = originalImageHeight * ratio;\r\n const leftToImage = (targetWidth - width) / 2.0;\r\n const topToImage = (targetHeight - height) / 2.0;\r\n const { top, left } = imageBox;\r\n return {\r\n x: ((x - left) - leftToImage) * (originalImageWidth / width),\r\n y: ((y - top) - topToImage) * (originalImageHeight / height),\r\n };\r\n }\r\n return { x: -1, y: -1 };\r\n }, [originalImageHeight, originalImageWidth]);\r\n\r\n const mousemoveHandler = useCallback((e) => {\r\n const { x, y } = windowToImgPosition(e.clientX, e.clientY);\r\n const maskValue = getMaskValueAtPoint(x, y, originalImageWidth);\r\n updateHighlightedImage(maskValue);\r\n }, [getMaskValueAtPoint, originalImageWidth, updateHighlightedImage, windowToImgPosition]);\r\n\r\n const mouseleaveHandler = useCallback(() => {\r\n updateHighlightedImage(undefined);\r\n }, [updateHighlightedImage]);\r\n\r\n const mousedownHandler = useCallback((e) => {\r\n const { x, y } = windowToImgPosition(e.clientX, e.clientY);\r\n const maskValue = getMaskValueAtPoint(x, y, originalImageWidth);\r\n if (maskValue > 0) {\r\n toggleSelectedMask(maskValue);\r\n logger.logTrace('Copilot change image background - object selection view - object selection');\r\n }\r\n }, [getMaskValueAtPoint, logger, originalImageWidth, toggleSelectedMask, windowToImgPosition]);\r\n\r\n const keyHandler = useCallback((e) => {\r\n if (maskValues && maskValues.length > 0) {\r\n if (e.key === 'Tab') {\r\n if (e.shiftKey === true) {\r\n if (maskIndex === undefined) {\r\n setMaskIndex(maskValues.length - 1);\r\n updateHighlightedImage(maskValues[maskValues.length - 1]);\r\n e.preventDefault();\r\n } else if (maskIndex - 1 >= 0) {\r\n setMaskIndex((maskIndex - 1));\r\n updateHighlightedImage(maskValues[(maskIndex - 1)]);\r\n e.preventDefault();\r\n }\r\n } else if (e.shiftKey === false) {\r\n if (maskIndex === undefined) {\r\n setMaskIndex(0);\r\n updateHighlightedImage(maskValues[0]);\r\n e.preventDefault();\r\n } else if ((maskIndex + 1) < maskValues.length - 1) {\r\n setMaskIndex((maskIndex + 1));\r\n updateHighlightedImage(maskValues[(maskIndex + 1)]);\r\n e.preventDefault();\r\n }\r\n }\r\n } else if (e.key === 'Enter' && maskIndex !== undefined) {\r\n toggleSelectedMask(maskValues[maskIndex]);\r\n logger.logTrace('Copilot change image background - object selection view - object selection');\r\n e.preventDefault();\r\n }\r\n }\r\n }, [logger, maskIndex, maskValues, toggleSelectedMask, updateHighlightedImage]);\r\n\r\n const resetMaskHandler = useCallback(() => {\r\n setMaskIndex(undefined);\r\n updateHighlightedImage(undefined);\r\n }, [updateHighlightedImage]);\r\n\r\n useEffect(() => {\r\n const imageBox = imageContainer.current;\r\n if (imageBox) {\r\n imageBox.addEventListener('mousemove', mousemoveHandler);\r\n imageBox.addEventListener('mouseleave', mouseleaveHandler);\r\n imageBox.addEventListener('mousedown', mousedownHandler);\r\n imageBox.addEventListener('keydown', keyHandler);\r\n imageBox.addEventListener('blur', resetMaskHandler);\r\n imageBox.addEventListener('focus', resetMaskHandler);\r\n }\r\n return () => {\r\n if (imageBox) {\r\n imageBox.removeEventListener('mousemove', mousemoveHandler);\r\n imageBox.removeEventListener('mouseleave', mouseleaveHandler);\r\n imageBox.removeEventListener('mousedown', mousedownHandler);\r\n imageBox.removeEventListener('keydown', keyHandler);\r\n imageBox.removeEventListener('blur', resetMaskHandler);\r\n imageBox.addEventListener('focus', resetMaskHandler);\r\n }\r\n };\r\n }, [windowToImgPosition, mousemoveHandler, mouseleaveHandler, mousedownHandler, keyHandler, resetMaskHandler]);\r\n\r\n return (\r\n \r\n {originalImageUrl && (\r\n <>\r\n {i18n.getString(_TL_('Original\r\n
\r\n {isFetchingSegmentations && (
)}\r\n {!isFetchingSegmentations && (\r\n <>\r\n {(borderImageSrc && {i18n.getString(_TL_('Border)}\r\n {(workingSelectedImageSrc && {i18n.getString(_TL_('Selected)}\r\n {(highlightedImageSrc && {i18n.getString(_TL_('Highlighted)}\r\n \r\n )}\r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\n\r\nObjectSelectionImageView.propTypes = {\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func.isRequired,\r\n }).isRequired,\r\n originalImageUrl: PropTypes.string.isRequired,\r\n originalImageHeight: PropTypes.number.isRequired,\r\n originalImageWidth: PropTypes.number.isRequired,\r\n getMaskValueAtPoint: PropTypes.func.isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n maskValues: PropTypes.arrayOf(PropTypes.number),\r\n isFetchingSegmentations: PropTypes.bool.isRequired,\r\n};\r\n\r\nObjectSelectionImageView.defaultProps = {\r\n maskValues: [],\r\n};\r\n","import { useCallback } from 'react';\r\n\r\nexport const useUploadAsset = ({ dataService, perfMarker, isUploadImageUpscaleEnabled }) => {\r\n let videoUploadPerfMarker;\r\n\r\n const uploadFileAsync = useCallback(({\r\n dataURL,\r\n fileObject,\r\n nameWithoutExt,\r\n updateCurrentProgress,\r\n isVideo,\r\n folderId,\r\n uploadCallback,\r\n }) => {\r\n if (perfMarker) {\r\n videoUploadPerfMarker = perfMarker.createChild('videoUpload');\r\n videoUploadPerfMarker.willInit();\r\n }\r\n\r\n const commonOptions = {\r\n updateCurrentProgress,\r\n name: nameWithoutExt,\r\n folderId,\r\n };\r\n\r\n if (isVideo) {\r\n return dataService.uploadVideo({\r\n ...commonOptions,\r\n fileObject,\r\n perfMarker: videoUploadPerfMarker,\r\n }).then((res) => {\r\n if (uploadCallback) {\r\n uploadCallback(res);\r\n }\r\n });\r\n }\r\n\r\n return dataService.uploadImage({\r\n ...commonOptions,\r\n imageData: dataURL,\r\n supportUpscale: isUploadImageUpscaleEnabled ? true : undefined,\r\n }).then((res) => {\r\n if (uploadCallback) {\r\n uploadCallback(res);\r\n }\r\n });\r\n }, [dataService, isUploadImageUpscaleEnabled, videoUploadPerfMarker]);\r\n\r\n return {\r\n uploadFileAsync,\r\n };\r\n};\r\n","import { useCallback, useRef } from 'react';\r\nimport {\r\n validateImageAsync as validateImageAsyncInternal,\r\n validateVideoAsync,\r\n readFileAsDataURLAsync,\r\n} from '@bingads-webui-campaign-react/upload-file-picker';\r\nimport { getImageDetailAsync } from '@bingads-webui-campaign/image-experience-utils';\r\nimport { MIN_SIZE, UPSCALE_MIN_SIZE } from '../model';\r\n\r\nconst READ_VIDEO_MAX_TIME = 10000; // 10s\r\n\r\nexport const useReadAsset = () => {\r\n const readFileAsync = useCallback((fileObject, { isVideo } = {}) => {\r\n if (isVideo) {\r\n // for video, data URl is optional to MT request, so here swallow the error to unblock next.\r\n return readFileAsDataURLAsync(fileObject).timeout(READ_VIDEO_MAX_TIME).catch(() => {});\r\n }\r\n\r\n return readFileAsDataURLAsync(fileObject);\r\n }, []);\r\n\r\n return {\r\n readFileAsync,\r\n };\r\n};\r\n\r\nexport const useValidateAsset = () => {\r\n const isImageUpscaledRef = useRef(false);\r\n\r\n const validateImageAsync = useCallback(\r\n ({ dataURL, isUploadImageUpscaleEnabled }) => validateImageAsyncInternal({\r\n imageSource: dataURL,\r\n minimumHeight: isUploadImageUpscaleEnabled ? UPSCALE_MIN_SIZE[1] : MIN_SIZE[1],\r\n minimumWidth: isUploadImageUpscaleEnabled ? UPSCALE_MIN_SIZE[0] : MIN_SIZE[0],\r\n })\r\n .then(() => getImageDetailAsync(dataURL))\r\n .then((img) => {\r\n if (isUploadImageUpscaleEnabled && img &&\r\n ((img.naturalWidth >= UPSCALE_MIN_SIZE[0] && img.naturalWidth < MIN_SIZE[0]) ||\r\n (img.naturalHeight >= UPSCALE_MIN_SIZE[1] && img.naturalHeight < MIN_SIZE[1]))\r\n ) {\r\n isImageUpscaledRef.current = true;\r\n } else {\r\n isImageUpscaledRef.current = false;\r\n }\r\n return {\r\n isImageUpscaled: isImageUpscaledRef.current,\r\n };\r\n })\r\n , []\r\n );\r\n\r\n const validateFileAsync = useCallback(({ dataURL, isVideo, isUploadImageUpscaleEnabled }) => {\r\n if (isVideo) {\r\n return validateVideoAsync();\r\n }\r\n\r\n return validateImageAsync({ dataURL, isUploadImageUpscaleEnabled });\r\n }, [validateImageAsync]);\r\n\r\n return {\r\n validateImageAsync,\r\n validateFileAsync,\r\n };\r\n};\r\n","import { useCallback } from 'react';\r\nimport _ from 'underscore';\r\nimport {\r\n supportedVideoExtensions,\r\n} from '../model/constants';\r\n\r\nconst checkExtension = (supportedList, ext) => {\r\n if (ext && !_.isEmpty(supportedList)) {\r\n const extToCheck = ext.toLowerCase();\r\n\r\n return _.chain(supportedList)\r\n .map(item => item.toLowerCase())\r\n .contains(extToCheck)\r\n .value();\r\n }\r\n\r\n return false;\r\n};\r\n\r\nexport const useCustomizedHandlerOptions = () => {\r\n const getCustomizedHandlerOptions = useCallback(({ ext } = {}) => ({\r\n isVideo: checkExtension(supportedVideoExtensions, ext),\r\n }), []);\r\n\r\n return {\r\n getCustomizedHandlerOptions,\r\n };\r\n};\r\n","import React, { useCallback, useState } from 'react';\r\nimport classNames from 'classnames';\r\nimport { map, each, get, contains, filter } from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport { makeStyles, shorthands, } from '@fluentui/react-components';\r\nimport { stringifySync } from '@bingads-webui/safe-json';\r\nimport { parseFileName, generatePreviewArray, updateFilePreviewArrayUploadProgress, updateProgress, MaximumImageFileSizeMB, MaximumVideoFileSizeMB, } from '@bingads-webui-campaign-react/upload-file-picker';\r\nimport { runJobsInParallelWithRateLimit } from '@bingads-webui-universal/parallel-job-with-rate-limit';\r\nimport {\r\n getImageValidationErrorMessage,\r\n} from '@bingads-webui-campaign/image-experience-utils';\r\nimport { MaxAddAssetJobInParell, supportedImageExtensions, supportedVideoExtensions } from '../model';\r\nimport { getAssetUploadError } from '../utils';\r\nimport { useUploadAsset } from './use-upload-asset';\r\nimport { useReadAsset, useValidateAsset } from './use-validate-asset';\r\nimport { useCustomizedHandlerOptions } from './use-customized-handler-options';\r\n\r\nconst MAX_UPSCALED_SIZE = 4;\r\n\r\nconst useStyles = makeStyles({\r\n linkButton: {\r\n color: '#337ab7',\r\n fontWeight: 'normal',\r\n backgroundColor: 'transparent',\r\n ...shorthands.borderRadius('0px', '0px', '0px', '0px'),\r\n ...shorthands.border('none'),\r\n },\r\n});\r\n\r\nexport const useUploadFiles = ({\r\n logger, dataService, perfMarker, notificationApi, i18n, onFilesAddedCallback, aid, setErrors, filePickerI18n, uploadCallback, isUploadImageUpscaleEnabled,\r\n}) => {\r\n const [previewArr, setPreviewArr] = useState([]);\r\n const { readFileAsync } = useReadAsset();\r\n const { validateFileAsync } = useValidateAsset();\r\n const { uploadFileAsync } = useUploadAsset({ dataService, perfMarker, isUploadImageUpscaleEnabled });\r\n const { getCustomizedHandlerOptions } = useCustomizedHandlerOptions();\r\n const classes = useStyles();\r\n\r\n const onFileRead = useCallback((selectedFiles, callback) => {\r\n setErrors([]);\r\n\r\n const isMultipleFiles = selectedFiles.length > 1;\r\n const customizedOptions = map(selectedFiles, (file) => {\r\n const { nameWithoutExt, ext } = parseFileName(file.name);\r\n\r\n const passedOptions = getCustomizedHandlerOptions({\r\n nameWithoutExt,\r\n ext,\r\n });\r\n\r\n return {\r\n ...passedOptions,\r\n nameWithoutExt,\r\n };\r\n });\r\n\r\n // there is a perf concern for large video file\r\n // previous design is reading files first and then process\r\n // for video, may need different handling, will address it later\r\n return Promise.map(\r\n selectedFiles,\r\n (fileObj, index) => readFileAsync(fileObj, customizedOptions[index])\r\n ).then((fileSources) => {\r\n const fileAdditionalInfoArr = [];\r\n const validateFilePromise = Promise.map(\r\n fileSources,\r\n (fileSource, index) =>\r\n validateFileAsync({\r\n isUploadImageUpscaleEnabled,\r\n dataURL: fileSource,\r\n ...customizedOptions[index],\r\n }).then((validatedResult) => {\r\n const isImageUpscaled = get(validatedResult, 'isImageUpscaled', false);\r\n const { nameWithoutExt } = customizedOptions[index];\r\n fileAdditionalInfoArr[index] = {\r\n isImageUpscaled,\r\n text: nameWithoutExt,\r\n };\r\n }).catch((e) => {\r\n if (e && e.message === 'SizeValidationError' && logger && logger.logTrace) {\r\n logger.logTrace(`Add Media Panel per file - SizeValidationError: ${stringifySync(e)}`);\r\n logger.logTrace(`Add Media Panel per file - SizeValidationError - ImageSource: ${stringifySync(fileSource)}`);\r\n }\r\n throw e;\r\n })\r\n );\r\n\r\n const doubleValidateFilePromise = validateFilePromise\r\n .then(() => {\r\n const needUpscaledImage = filter(fileAdditionalInfoArr, item => item && item.isImageUpscaled);\r\n if (needUpscaledImage.length > MAX_UPSCALED_SIZE) {\r\n // When the need upscaled image count over the max size, should skip the upscale feature and use original threshold to validate again.\r\n return Promise.map(fileSources, (fileSource, index) => {\r\n if (fileAdditionalInfoArr[index].isImageUpscaled === true) {\r\n return validateFileAsync({\r\n isUploadImageUpscaleEnabled: false,\r\n dataURL: fileSource,\r\n ...customizedOptions[index],\r\n }).catch((e) => {\r\n if (e && e.message === 'SizeValidationError' && logger && logger.logTrace) {\r\n logger.logTrace(`Add Media Panel per file - SizeValidationError: ${stringifySync(e)}`);\r\n logger.logTrace(`Add Media Panel per file - SizeValidationError - ImageSource: ${stringifySync(fileSource)}`);\r\n }\r\n throw e;\r\n });\r\n }\r\n return Promise.resolve();\r\n });\r\n }\r\n return Promise.resolve();\r\n });\r\n\r\n return doubleValidateFilePromise.then(() => {\r\n const sourcesForPreview = generatePreviewArray({\r\n files: selectedFiles,\r\n fileSources,\r\n customizedOptions,\r\n });\r\n\r\n setPreviewArr(sourcesForPreview);\r\n\r\n const setProgress = (index, progress) => {\r\n setPreviewArr((prevArr) => {\r\n const newState =\r\n updateFilePreviewArrayUploadProgress(index, progress)({ previewArr: prevArr });\r\n\r\n return newState.previewArr;\r\n });\r\n };\r\n\r\n const uploadBatchs = [];\r\n\r\n each(fileSources, (fileSource, index) => {\r\n const { nameWithoutExt } = customizedOptions[index];\r\n\r\n uploadBatchs.push(() => uploadFileAsync({\r\n dataURL: fileSource,\r\n fileObject: selectedFiles[index],\r\n updateCurrentProgress: updateProgress({\r\n setProgress,\r\n index,\r\n uploadProgressBoundary: 1,\r\n }),\r\n uploadCallback,\r\n nameWithoutExt,\r\n ...customizedOptions[index],\r\n }));\r\n });\r\n\r\n const uploadErrorCodeArr = [];\r\n const handleJobError = (err) => {\r\n const errorCode = get(err, ['body', 'value', 0, 'Code'], '');\r\n\r\n // when errorCode is empty, it means some server error, e.g. 500 response\r\n uploadErrorCodeArr.push(errorCode);\r\n };\r\n return runJobsInParallelWithRateLimit({\r\n jobsToRateLimit: uploadBatchs,\r\n maxJobsInParallel: MaxAddAssetJobInParell,\r\n handleJobError,\r\n })\r\n .then((uploadResult) => {\r\n const errorMsg = getAssetUploadError({\r\n uploadErrorCodeArr,\r\n filePickerI18n,\r\n aid,\r\n logger,\r\n i18n,\r\n });\r\n\r\n if (errorMsg) {\r\n onFilesAddedCallback();\r\n setPreviewArr([]);\r\n notificationApi.showWarning(errorMsg);\r\n logger.logTrace(`Add Media Panel: failed to upload assets to folder, error: ${errorMsg}`);\r\n } else {\r\n const assetIds = uploadResult && uploadResult.join(',');\r\n logger.logTrace('Add Media Panel: saved uploaded assets to folder', { assetIds });\r\n\r\n const upscaledImagesArr = filter(fileAdditionalInfoArr, item => item && item.isImageUpscaled);\r\n const upscaledImagesArrCount = upscaledImagesArr.length;\r\n\r\n if (upscaledImagesArrCount > 0) {\r\n notificationApi.showInfo(i18n.getString(_TL_('Your assets were uploaded and we upscaled {{fileCount}} image(s) to meet the minimum required file size. You can always upload higher quality images if needed.'), { fileCount: upscaledImagesArrCount }));\r\n } else {\r\n notificationApi.showInfo((\r\n \r\n {i18n.getString(_TL_('Your assets were successfully uploaded.'))}\r\n \r\n \r\n ));\r\n }\r\n onFilesAddedCallback();\r\n setPreviewArr([]);\r\n }\r\n });\r\n });\r\n }).catch((e) => {\r\n const genericErrorMsg = i18n.getString(_TL_('We\\'ve encountered an error and can\\'t continue.'));\r\n const newErrors = [\r\n getImageValidationErrorMessage(e, filePickerI18n, isMultipleFiles, isUploadImageUpscaleEnabled /* skipDimension */) || genericErrorMsg,\r\n ];\r\n setPreviewArr([]);\r\n setErrors(newErrors);\r\n\r\n logger.logTrace(`Add Media Panel: failed to upload assets to folder, error: ${newErrors[0]}`);\r\n if (e && e.message === 'SizeValidationError' && logger && logger.logTrace) {\r\n logger.logTrace(`Add Media Panel - SizeValidationError: ${stringifySync(e)}`);\r\n }\r\n }).finally(() => {\r\n callback();\r\n });\r\n }, [setErrors, getCustomizedHandlerOptions, readFileAsync, validateFileAsync, logger, uploadFileAsync, uploadCallback, filePickerI18n, aid, onFilesAddedCallback, notificationApi, i18n, classes.linkButton, isUploadImageUpscaleEnabled]);\r\n\r\n return {\r\n onFileRead,\r\n previewArr,\r\n };\r\n};\r\n\r\nexport const isReachFileSizeLimit = ({ ext, fileSizeMB }) => {\r\n let limitMB;\r\n\r\n if (contains(supportedImageExtensions, ext)) {\r\n limitMB = MaximumImageFileSizeMB;\r\n } else if (contains(supportedVideoExtensions, ext)) {\r\n limitMB = MaximumVideoFileSizeMB;\r\n }\r\n\r\n return limitMB > 0 && fileSizeMB > limitMB;\r\n};\r\n\r\nexport const getReachFileSizeLimitErrorMessage = ({ i18n }) =>\r\n i18n.getString(\r\n _TL_('One or more assets exceed the maximum file size. Please upload images that are smaller than {{maximumImageFileSize}} MB and videos that are smaller than {{maximumVideoFileSize}} MB.'),\r\n {\r\n maximumImageFileSize: MaximumImageFileSizeMB,\r\n maximumVideoFileSize: MaximumVideoFileSizeMB,\r\n }\r\n );\r\n","import _ from 'underscore';\r\nimport { GetJsDataInfo } from '@bingads-webui-clientcenter/js-data-cc-rest-base';\r\n\r\nconst ccJSData = {\r\n jsDataCcRest: null,\r\n};\r\n\r\nexport const initCcJsData = ({ serverContext }) => {\r\n if (!ccJSData.jsDataCcRest) {\r\n const options = {\r\n cidFetcher: () => serverContext.CurrentCustomer.Id,\r\n uidFetcher: () => serverContext.CurrentUser.Id,\r\n appendErrorSummary: _.noop,\r\n handleAjaxAuthFailure: _.noop,\r\n willSupportCors: true,\r\n };\r\n\r\n ccJSData.jsDataCcRest = GetJsDataInfo(options, serverContext.ServicesEndpoints.ClientCenterUIAPI, []).jsDataCcRest;\r\n }\r\n\r\n return ccJSData;\r\n};\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { CcJsDataContextProvider } from '@bingads-webui-cc-react/js-data-rest';\r\nimport { withServerContext } from '@bingads-webui-campaign-react/server-context';\r\nimport { initCcJsData } from './init-cc-js-data';\r\n\r\nexport const withCcJsDataContextProvider = (WrappedComponent) => {\r\n const HOC = (props) => {\r\n const {\r\n serverContext, scope, cid, uid,\r\n } = props;\r\n const { values } = scope;\r\n const serverCtx = serverContext || {};\r\n\r\n // TO DO: eventually remove these checks\r\n if (!serverCtx.ServicesEndpoints) {\r\n serverCtx.ServicesEndpoints = {\r\n ClientCenterUIAPI: 'https://ADS-INT.MICROSOFT.COM/cc/',\r\n };\r\n }\r\n\r\n if (!serverCtx.CurrentUser) {\r\n serverCtx.CurrentUser = { Id: uid || values.uid };\r\n }\r\n\r\n if (!serverCtx.CurrentCustomer) {\r\n serverCtx.CurrentCustomer = { Id: cid || values.cid };\r\n }\r\n\r\n const { jsDataCcRest } = initCcJsData({ serverContext: serverCtx });\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n };\r\n\r\n HOC.propTypes = {\r\n serverContext: PropTypes.shape({\r\n CurrentUser: PropTypes.shape({ Id: PropTypes.number }),\r\n CurrentCustomer: PropTypes.shape({ Id: PropTypes.number }),\r\n ServicesEndpoints: PropTypes.shape({\r\n ClientCenterUIAPI: PropTypes.string,\r\n }),\r\n }).isRequired,\r\n scope: PropTypes.shape({\r\n values: PropTypes.shape({\r\n cid: PropTypes.number,\r\n uid: PropTypes.number,\r\n }),\r\n }),\r\n cid: PropTypes.number,\r\n uid: PropTypes.number,\r\n };\r\n\r\n HOC.defaultProps = {\r\n scope: { values: {} },\r\n cid: null,\r\n uid: null,\r\n };\r\n\r\n return withServerContext(HOC);\r\n};\r\n"],"names":["videoIcon","SparkeSVGIcon","_jsxs","xmlns","width","height","viewBox","fill","children","_jsx","d","id","x1","y1","x2","y2","gradientUnits","stopColor","offset","HollowSparkleSVGIcon","BlackSparkleSVGIcon","InfoSparkleSVGIcon","SquareDismissIcon","_ref","i18n","src","squareDismissImage","alt","getString","_TL_","SpinnerIcon","spinnerBase","className","EntryCardSVGIcons","CreateSVGIcon","UploadSVGIcon","StockSVGIcon","InvestSVGIcon","PdfSVGIcon","WebsiteSVGIcon","WarningSVGIcon","CreateManualBrandKitSVGIcon","BrandKitLogoIconSVG","AIWarningIcon","AIWarningIconSource","ChooseImageIcon","ChooseImageSVG","EmptyViewIcons","ImageEmptyViewSVG","LibraryEmptyViewSVG","VideoEmptyViewSVG","CSMLAdType","MMA","Audience","ImageExtension","PMax","CSMLSortIcon","SortUp","SortDown","CSMLSortBy","ImageName","ImageNameDesc","MostRecent","MostRecentAsc","LastCreated","LastCreatedAsc","TopRated","AssetIdAsc","AssetIdDesc","ClickAsc","ClickDesc","ClickPeriodAsc","ClickPeriodDesc","ClickChangeAsc","ClickChangeDesc","ClickChangePercentAsc","ClickChangePercentDesc","CTRAsc","CTRDesc","CTRPeriodAsc","CTRPeriodDesc","CTRChangeAsc","CTRChangeDesc","CTRChangePercentAsc","CTRChangePercentDesc","ImpressionAsc","ImpressionDesc","ImpressionPeriodAsc","ImpressionPeriodDesc","ImpressionChangeAsc","ImpressionChangeDesc","ImpressionChangePercentAsc","ImpressionChangePercentDesc","SpendAsc","SpendDesc","SpendPeriodAsc","SpendPeriodDesc","SpendChangeAsc","SpendChangeDesc","SpendChangePercentAsc","SpendChangePercentDesc","CSMLVideoDuration","min","max","unlimited","CSMLTimeFrame","Anytime","Today","Last7Days","Last30Days","Custom","CSMLImportSource","Google","Facebook","CSMLAssetSource","UserUploaded","AIGenerated","Website","Shutterstock","BackgroundChangeGenerated","AIGeneratedByRecraft","ManualAddedImageSource","Library","ShutterStock","AIModelSource","Dalle","Recraft","DEFAULT_PAGE_SIZE","MIN_SIZE","UPSCALE_MIN_SIZE","ClarityTags","LaunchedAdsStudio","LaunchedAddImageAssetsFromAdsStudio","DisplayTemplateHomePage","EditDisplayTemplateImage","CreateDisplayTemplate","BrandKitPage","EditBrandKitImage","EditBrandKitLogo","CSMLAdTypeAbbr","_defineProperty","ROOT_FOLDER_ID","FolderAssetType","Image","Video","All","Folder","RootFolderName","isRootFolderId","folderIdToTest","supportedImageExtensions","GridSectionName","Asset","MaxAddAssetJobInParell","VideoStatus","Unverified","Draft","Active","Failed","AdsStudioPageName","LibraryPage","PerfPage","WebsiteImagePanelPage","StockImagePanelPage","AddVideoPanelPage","UploadFilesPanelPage","UploadFolderPanelPage","MixedImagePanelPage","MixedVideoPanelPage","EditImagePage","AssetDetailsPage","BackgroundRemovalModalPage","InvestImagePanelPage","InvestVideoPanelPage","AdditionalQueries","Query","FolderId","EditImageUrl","InitialCurrentView","TemplateId","TemplateGroupId","AdStudioSurveyTriggerFlag","App","RealUsedFlagSuffix","FilterType","SearchText","AssetType","ImageSize","VideoDuration","DateAdded","ImportSource","AssetSource","SearchTextFilter","type","title","AssetTypeFilter","DateAddedFilter","ImageSizeFilter","ImportSourceFilter","AssetSourceFilter","VideoDurationFilter","AllSupportedFilters","getAssetTypeOptions","key","text","MAX_DAYS","getTimeDescription","timestamp","_","now","Date","diffInSec","Math","round","seconds","diffInMin","minutes","diffInHour","hours","diffInDay","days","convertTimeDuration","DurationInMS","floor","timeArr","push","concat","join","getDateAddedChoiceOptions","timeZone","todayObj","getToday","today","CivilDate","year","month","day","last7day","plus","last30day","range","start","end","getImportSourceOptions","getSortingOptions","icon","getAssetSourceOptions","_CSMLSortingRequestPa","sortBy","sortDirection","imageAdExtSettings","C","getPlacementConfig","PT","LandscapeImage","isRequired","aspectRatioUIString","previewTypeString","WideImage","SquareImage","VerticalImage","MSAN","MSEdgeSingleCarousel","MSNInArticle","MSNSmallHeadline","AudienceSquareImage","AudienceWideImage","MMALandscapeImage","MMAVerticalImage","MMAWideImage","MMAV2MSEdgeCarousel","MMAV2MSNSingleCarousel","MMAV2MSNRestoday","MMAV2MSNPartnerStripe","MMAV2MSNRiver","MSEdgeMobile","MSANV2","MSEdgeCarousel","MSANBanner","MSANRiver","MSNCarousel","MSNPartnerStripe","MSNRestoday","MSANRectangle","ImageExt","BingDesktopSingleImage","MSEdgeMediumHeadline","MSNSingleCarousel","MSNMediumHeadline","BingDesktopMultiImage","BingMobileMultiImage","MSNDoubleCarousel","getAspectRatioConfig","adType","isMMAV2Enabled","isPMaxAspectRatiosV2Enabled","aspectRatios","getAspectRatios","isMultimediaAd","isMultimediaAdinMSANEnabled","isCombinedMsanAndMmaAspectRatios","allAspectRatioConfig","Image191x100","aspectRatio","aspectRatioAsRatio","aspectRatioString","Image4x1","Image1x1","Image1x2","Image178x100","extraExtension","BingSingleImage","Image172x100","Image169x100","Image150x100","Image155x100","Image133x100","MobileMultiImage","BingDesktopImage","Image93x100","Image201x100","Image200x100","Image153x100","Image124x100","Image120x100","aspectRatiosExceptOriginal","item","_objectSpread","minSize","placementType","getPreviewText","isImageExtension","shortHeadline","longHeadline","description","businessName","url","finalUrl","callToAction","sizeValidForRatio","cropSettings","SourceWidth","SourceHeight","getSizeErrorRatioList","requiredOnly","arguments","length","undefined","ratioList","config","getAllSizeErrorRatioList","errorListForMMA","errorListForAudience","errorListForExtension","errorListForPmax","Pmax","_toConsumableArray","getPlacementsToExpand","reject","p","map","_ref2","minHeight","value","AIPromptExamples","promptText","imageSrc","getUpdatedAssets","assets","_ref$updates","updates","imageCroppingTasks","videoUpdated","updatedAssets","asset","taskStatus","updating","isFinished","newUpdates","status","useClarityTags","customTags","_useState","useState","_useState2","_slicedToArray","haveSetClarityTags","setHaveSetClarityTags","useEffect","tagsToSet","reduce","tagsObj","currentTag","setClarityTag","ExternalEntityType","checkVideosIntermediateStatus","video","getSizeLimitPerAccount","aid","localStorage","getItem","valObj","JSON","parse","e","limitData","data","val","isValidXandrAccount","account","ExternalAccountIds","externalAccountId","Type","Id","getEntryCardData","_ref$cardKeys","cardKeys","_ref$onClickCreate","onClickCreate","_ref$onClickUpload","onClickUpload","_ref$onClickStock","onClickStock","_ref$onClickInvest","onClickInvest","_ref$onClickWebsite","onClickWebsite","_ref$isImagePage","isImagePage","_ref$isVideoPage","isVideoPage","_ref$isXandrIntegrati","isXandrIntegrationEnabled","uploadDescription","websiteDescription","websiteTitle","createDescription","createTitle","investDescription","cardData","image","onClick","filter","card","includes","getHomePageCardData","_ref2$cardKeys","_ref2$onClickUpload","_ref2$onClickStock","_ref2$onClickWebsite","_ref2$onClickInvest","_ref2$isXandrIntegrat","getImageAssetLimitPerAccount","logger","assetLimit","logError","getFoldersLimitPerAccount","foldersLimit","getVideoAssetLimitPerAccount","validate","test","getSearchQuery","_ref3","_ref3$search","search","_ref3$additionalQueri","additionalQueries","_ref3$removeQueries","removeQueries","query","queryString","AIGCHandler","isAdsStudioAIGCMVPEnabled","isAIGCRegionRestricted","notificationApi","enabledCallback","showWarning","getRealUsedFlagValue","preference","flagSuffix","realUsedFlagStr","realUsedFlagHandlerStr","realUsedFlag","realUsedFlagHandler","handleRealUsedFlag","_getRealUsedFlagValue","haveUsed","addAdStudioSurveyTriggerFlag","triggerFlag","usedFlagSuffix","_ref5","getTime","window","survey","surveyManager","trigger","checkIfSurveyIsOpen","removeAdStudioSurveyTriggerFlag","commonButtonStyle","display","shorthands","padding","justifyContent","alignItems","gap","borderRadius","backgroundColor","boxShadow","border","outline","maxHeight","overflow","minWidth","commonTextStyle","fontFamily","fontStyle","textAlign","flex","textOverflow","whiteSpace","commonIconStyle","margin","useAssetsEntryCardStyle","makeStyles","fillWidth","assetsEntryCard","color","fontSize","lineHeight","fontWeight","objectFit","AssetsEntryCard","isFillWidth","cardClassName","classes","Button","mergeClasses","Add20Regular","defaultProps","AddAssetEntryCard","useStyles","addMediaPanel","top","bottom","panelContent","scrollbarWidth","overlay","zIndex","layer","AdsStudioPanelContainer","forwardRef","props","ref","onRenderFooterContent","isOpen","dismiss","headerText","size","overlayBodyRef","useRef","styles","_Fragment","DrawerOverlay","open","modalType","position","tabIndex","DrawerHeader","DrawerHeaderTitle","action","appearance","Dismiss24Regular","DrawerBody","Children","child","cloneElement","DrawerFooter","Layer","Overlay","isDarkThemed","AdsStudioSpinner","useCustomSize","customStyle","spinnerStyles","useMemo","circle","root","Spinner","SpinnerSize","large","useActionButtonStyles","actionButton","ActionButton","Icon","primary","classnames","TilesGridCellActionButton","AdsStudoThemeContext","React","AdsStudioThemeProvider","theme","componentStyles","getComponentStyles","useCallback","componentName","components","contextValue","Provider","emptyAdsStudioTheme","useThemedStyles","prefixClassName","getDefaultStyles","themedStyles","overridenStyles","getOverridenStyles","defaultStyles","createUseStyles","name","withAdsStudioStyles","WrappedComponent","options","Component","useRawStyles","finalComponentName","displayName","HOC","_useThemedStyles","hoistNonReactStatics","positionFill","left","right","CellOverlay","cellOverlayContainer","TilesGridCellOverlay","background","opacity","transition","getCommonCellCardStyle","palette","flexShrink","flexGrow","neutralLight","CellCardWithOverlay","isOverlayEnabled","isCellFocused","renderOverlayContent","renderStaticOverlayContent","customCellCardClass","onClickFunc","event","stopPropagation","preventDefault","containerClass","cellCardContainer","cellCardContainerOverflow","cellCardWithOverlayContainer","focused","onKeyDown","keyCode","CellCard","TilesGridCellCard","_ref$core","core","_ref$core2$palette","TilesGridCellCardWithOverlay","_ref2$core","_ref2$core2$palette","activeStyle","transform","flexDirection","button","CellDecorativeIcon","iconName","centerContainer","circleContainer","iconContent","labelName","white","marginLeft","useGridDecorativeLabelStyle","tilesGridCellDecorativeLabel","tokens","colorNeutralForegroundInverted","marginRight","colorNeutralBackgroundStatic","float","cellLabelDisplay","CellDecorativeLabel","secondaryText","additionaIconName","additionalText","customClass","cellLabel","iconTextWrapper","role","TilesGridCellDecorativeLabel","iconProps","CellDeletionButtonDecorator","onDelete","cellDeletionButtonDecorator","IconButton","ariaLabel","disabled","deleteButton","TilesGridCellDeletionButtonDecorator","themeLighter","CellImage","showSpinner","onLoaded","onError","enableRetry","customClasses","onCustomizedSpinner","imageFit","ImageLoadState","notLoaded","imageLoadState","setImageLoadState","onLoadingStateChange","s","onLoadError","loaded","error","reloadImage","img","onerror","onload","onErrorWithRetry","retryCount","setTimeout","onReloadImage","onImageLoadingStateChange","tilesGridCellImageContainer","imageStateOverlayClass","stateParent","ArrowClockwiseRegular","reloadBtn","FluentImage","imageClass","maximizeFrame","noop","ImageFit","cover","TilesGridCellImage","useCellSectionDecoratorStyle","makeResetStyles","outlineStyle","outlineWidth","outlineColor","colorBrandBackground","borderRadiusSmall","TilesGridCellSelectionDecorator","selected","isFocused","cellSelectionDecoratorWrapper","selectedStateWrapper","cellSelectionDecorator","selectedState","Checkbox","checked","TilesGridLoadingCell","onLoading","gridCellContent","hasSetUpObserver","setHasSetUpObserver","onLoadingCalled","observer","current","IntersectionObserver","entries","entry","isIntersecting","target","unobserve","rootMargin","threshold","observe","commonStyles","useFolderIconStyle","folderIconContainer","folderTag","emptyFolderTag","folderContent","emptyFolderContent","FolderIconInternal","thumbnailImageUrl","isEmptyFolder","folderIconRootClassName","fit","FolderIcon","dragPreview","dragPreviewImage","dragPreviewFolderWrapper","dragPreviewFolder","dragPreviewCount","verticalAlign","TilesGridCellDragDecorator","draggable","dragItemsLength","onDrag","dragPreviewDescription","dragItemsLengthInner","renderDragPreview","thumbnailUrl","onDragStart","container","document","createElement","DragPreview","ReactDOM","domElement","firstChild","body","appendChild","dataTransfer","setDragImage","useFolderGridCellDropStyle","outlineOffset","TilesGridCellDropDecorator","droppable","onDrop","customClassName","isOver","setIsOver","tilesGridCellDropOver","onDragOver","onDragLeave","onDropHandler","classNames","DEFAULT_CONFIG","maxColumnWidth","minColumnWidth","rowHeight","preferredCellsPerPage","TilesGridInternal","items","onRenderCell","onRenderCellImpl","gridItem","_index","index","tilesGridContainer","Grid","renderItem","columnWidth","gridMode","columnPadding","rowPadding","scrollContainer","maxColumns","minItemHeight","TilesGrid","overflowX","boxSizing","findItem","itemToFind","itemKey","addItem","itemToAdd","removeItem","itemToRemove","MultiSelectionGrid","onSelectionChange","propSelectedItems","selectedItems","rest","_objectWithoutProperties","_excluded","allItems","selectItem","_action","_action2","newSelectedItems","fnSelectItem","SectionTilesGridInternal","sectionData","loadNextPage","multiSelectionEnabled","onRenderLoadingCell","otherProps","wrappedSectionData","section","params","sectionName","_ref4","totalItemCount","countOfSectionsWithData","sec","GridComponent","sectionTilesGridContainer","gridConainerClass","sectionTitle","sectionClassName","_excluded2","SectionTilesGrid","marginBottom","marginTop","useStyle","TextWithHighlightImp","txt","highlightedText","highlightedClassname","enableTooltip","textFragments","substr","matched","idx","lowerText","toLowerCase","lowerSubstr","startIndex","fragments","indexOf","substring","f","splitString","content","Tooltip","relationship","withArrow","positioning","TextWithHighlight","getSharedAssetContainerStyle","flexWrap","colorPaletteYellowBackground3","getSharedMultiSelectingCellStyles","selectableCardContainerAutoHideCheckbox","visibility","selectableCardContainer","iconStyles","useFolderGridCellStyle","cursor","paddingTop","paddingRight","getCountDescription","itemInfo","subFoldersCountDesc","imagesCountDesc","videosCountDesc","subfoldersCount","count","imageAssetsCount","videoAssetsCount","FolderCountInfo","FolderRegular","ImageRegular","VideoRegular","FoldersGridCell","onFolderClick","selectable","onSelect","allowedAssetType","renderAccessory","selectedItemCount","folderGridCellContainer","_ref6","folderName","itemCount","itemInfos","result","SubFoldersCount","ImageAssetsCount","VideoAssetsCount","convertItemInfo","TotalCount","firstAsset","folderAssetType","getFolderThumbnail","onCheckboxChange","hasAccessory","onChange","AdsStudioFoldersGridCell","useImageAssetsGridCellStyle","imageAssetsGridCellContainer","animationName","from","to","animationDuration","animationIterationCount","animationTimingFunction","imageCellLabelContainer","AdsStudioImageAssetsGridCell","renderCellContent","isMultiSelecting","deletable","isImageLoaded","setImageLoaded","sourceType","manualAddedImageSourceType","cellContent","defaultContent","Fragment","CellLabel","ArrowSync16Filled","funcRenderOverlayContent","onCellClick","withSelectionDecorator","decoratedContent","withDeleteButtonDecorator","GridCellFactory","DefaultImageGridCell","DefaultVideoGridCell","civilDateEqual","d1","d2","compareCivilDate","civilDateRangeEqual","r1","r2","civilDateToDebugString","cd","civilDateRangeToDebugString","dr","getDefaultMetricDateRange","dateFormat","lcid","yesterday","RangeStartDate","formatCivilDate","raw","RangeEndDate","Rangelcid","RangeId","containsErrorCodeInList","errorList","searchErrorCode","err","processVideoSizeLimitError","limit","fetchImgPromise","imgUrl","Promise","resolve","Error","crossOrigin","createOffScreenContext","canvas","context","getContext","getImagePixels","imageWidth","imageHeight","_createOffScreenConte","drawImage","getImageData","parseMaskResultPromise","imageUrl","rawMaskSetsBase64String","maskSetsBase64Json","parseSync","_maskSetsBase64Json$s","shape","maskSetsBase64","reshapeTo3D","array","x","y","z","res","i","temp2D","j","temp1D","k","_decompressAndParse3DArray","_asyncToGenerator","_regeneratorRuntime","mark","_callee","base64String","binaryString","byteArray","inputStream","decompressionStream","decompressedStream","decompressedResponse","decompressedBuffer","decompressedArray","int3DArray","wrap","_context","prev","next","atob","Uint8Array","charCodeAt","Blob","stream","DecompressionStream","pipeThrough","Response","arrayBuffer","sent","abrupt","stop","apply","_x","_x2","_x3","_x4","decompressAndParse3DArray","then","maskSets3Darray","maskSetsArray","row","a","flat","alphaArray","selectedMasksArray","pixelMask","_createOffScreenConte2","originalImagePixels","_createOffScreenConte3","imageData","pixels","_createOffScreenConte4","secondContext","secondCanvas","putImageData","imageUrlWithoutBackground","toDataURL","catch","getMaskValueAtPointFunc","segmentationMasks","parseInt","createColorBackground","selectedMasks","_hexToRgb","hex","exec","r","g","b","hexToRgb","_createOffScreenConte5","alpha","newR","newG","newB","_createOffScreenConte6","createSelectedImageSrc","masks","isAdd","hasSelectedImageSrc","_createOffScreenConte7","_createOffScreenConte8","dArr","clearRect","globalCompositeOperation","fillStyle","fillRect","borderImageSrc","selectedImageSrc","createHighlightedImage","workingMasks","maskValue","_createOffScreenConte9","PlacementQualities","PlacementQualityToText","formatFileSize","fileSize","getClosestAspectRatio","inputRatio","closestRatio","closestDiff","abs","_i","_Object$entries","Object","_Object$entries$_i","label","ratio","diff","formatBrandkitForAPI","obj","Array","isArray","formattedObj","keys","forEach","SubType","VideoSourceType","errorObjectToString","message","stack","stringify","getErrorString","msg","originError","fetchResultFromProcessors","processors","_ref$options","errorCodeMessageKeyMapping","InvalidDuration","AssetDataInvalidWidth","AssetDataInvalidHeight","ImageAIUpScaleFailed","processAssetLimitErrors","codes","imageSizeLimitResult","processImageSizeLimitError","imageAssetLimit","videoSizeLimitResult","videoAssetLimit","processImageErrors","filePickerI18n","processPredefinedAssetErrors","mappedKey","getAssetUploadError","uploadErrorCodeArr","_ref4$disableGenericM","disableGenericMessage","errorMessage","style","href","INVALID_FOLDER_ID","filterFilesByExtensions","files","supportedExtensions","acceptedFiles","file","ext","parseFileName","createFolderHierarchyMap","foldersToCreate","folders","relativePath","pathArr","split","trim","pop","getRelativeFoldersFromRelativePath","webkitRelativePath","currFolderMap","folder","createFolderWithErrorHandling","folderCreationErrors","createFolderAsync","parentFolderId","currentFolderId","originalFolderName","_ref3$numberOfAttempt","numberOfAttempts","createFoldersByHierarchyInternal","folderMap","creationPromises","parentFolderName","folderNames","subFoldersMap","parentPromise","createFoldersByHierarchy","_ref5$folderCreationE","createRateLimitedAssetUploadPromises","_ref6$customizedFiles","customizedFilesOptions","acceptedAssets","folderIdPromises","_ref6$validateAssetAs","validateAssetAsync","uploadAssetAsync","_ref6$assetsSkippedUp","assetsSkippedUpload","_ref6$assetUploadErro","assetUploadErrors","readAssetAsync","processAssetJobPromises","assetUploadJobs","getFileFolderName","extraOptions","processAssetJobPromise","folderId","dataURL","validatedResult","isImageUpscaled","nameWithoutExt","fileObject","runJobsInParallelWithRateLimit","jobsToRateLimit","maxJobsInParallel","handleJobError","processFolderSizeLimitErrors","folderLimitResult","processFolderSizeLimitError","folderLimit","processAssetErrors","getFolderUploadError","genericErrorMessage","getTaskPoller","timerId","task","_ref$interval","interval","stopRunning","counter","taskPromise","setInterval","clearInterval","existDup","arr","newArr","newKeys","ACTION_TYPE_SET_FOLDER_DATA","AL_FOLDER_REDUCER_INIT_STATE","perfTimeSeriesData","folderDataStateReducer","state","actionType","actionData","_actionData$newFolder","newFolders","_actionData$newAssets","newAssets","_actionData$newPerfTi","newPerfTimeSeries","shouldFlush","pageName","foundFolderDup","foundAssetDup","logTrace","AdsStudioErrorBase","_Error","_this","errorCode","errorProcessor","_classCallCheck","_callSuper","info","_inherits","_createClass","_wrapNativeSuper","renameFolderApiErrorProcessor","msgs","InvalidFolderId","uxMessage","actionable","DuplicateFolderName","InvalidFolderName","genericError","deleteFolderApiErrorProcessor","ignorable","shortMsg","FolderHasAssets","InvalidId","FolderHasSubFolders","bulkMoveApiErrorProcessor","folderCount","assetCount","getUXMessage","bulkMoveApiItemErrorProcessor","availableActions","AssetIdInvalid","DuplicateAssetsUnderFolder","DuplicateImage","FolderCanNotMoveToTarget","createFolderApiErrorProcessor","DuplicateEntity","FolderLimitExceededPerAccount","getFolderLimit","bulkDeleteAssetsApiItemErrorProcessor","CampaignServiceMediaIdInvalid","CampaignServiceMediaIsAssociated","assetType","gotoAds","bulkDeleteAssetsApiErrorProcessor","generateImagesWithAIAPIErrorProcessor","reqCountErr","GenerateImagesPromptLengthInvalid","GenerateImagesRequestCountLimitExceededPerAccount","GenerateImagesRequestCountLimitExceeded","GenerateImagesPromptContentInvalid","GenerateImagesAIGCNoRecommendationWithBrand","brandNameDetected","brandNames","getAIGeneratedImageAPIErrorProcessor","AI_Generation_Failed","shouldRetry","getRemoveImageBackgroundAPIErrorProcessor","GenerationBackgroundFailed","GenerateImagesAIGCInvalidImageSize","GenerateImagesAIGCInvalidImageContent","gotoDisallowedContent","GenerateImageAIGCInvalidUserPrompt","GenerateImageAIGCInvalidGeneratedImage","PATH_SEPERATOR","getPathString","folderPath","pathString","slice","fp","getAssetTypeToFetch","filterSettings","defaultAssetType","assetTypeFilter","useFolders","perfMetricDateRange","defaultPerfMetricDateRange","repository","ROOT_FOLDER","_useDataServiceReduce","initState","_useReducer","useReducer","_useReducer2","folderData","dispatch","setFolderData","setAssetsOnly","appendFolderData","setPerfTimeSeriesData","resetFolderData","useDataServiceReducer","setAssets","newFolderId","setNewFolderId","_useState3","_useState4","setFolderPath","currentFolder","latestRequestTimestamp","curFilterSettings","curSortBy","curAssetCountToLoadForSubFolders","curFolderAssetTypeToLoad","curIncludeParentHierarchy","curIncludeSubfolders","curPageName","curPerfMarker","pendingVideoBlobUploadPromiseTokens","resetData","_len","_key","loadFolderArgs","assetsToLoadForSubfolders","includeParentHierarchy","folderAssetTypeToFetch","getFolderArgs","skip","includeAssets","includeSubfolders","isAssetPickerScenario","loadFolderDataInternal","hasDateRange","_ref5$includeSubfolde","perfMarker","_ref5$withBIData","withBIData","requestTimestamp","saveCurrentFilters","getFolderData","subfolders","searchText","searchTerm","dateAddedStart","dateAddedEnd","otherFilters","dateAddedDateRange","tapCatch","loadFolderData","_ref7","_ref7$includeSubfolde","loadFolderDataInDateRange","_ref8","_ref8$includeSubfolde","loadPerfTimeSeriesData","_ref9","perfTimeSeriesParams","getPerfTimeSeriesData","loadMoreFolderDataImpl","_ref11","_ref11$count","_ref11$withBIData","loadMoreFolderData","_ref12","_ref12$count","loadMoreFolderDataInDateRange","_ref13","_ref13$count","reloadFolders","reloadFoldersInDateRange","navigateIntoFolder","_ref16","folderToNavigate","_ref16$id","_ref16$navigateToNewF","navigateToNewFolder","_ref17","_ref18","parentHierarchy","curFolderPath","navigateToFolderInPath","_ref19","indexOfFolderInPath","_ref20","navigateIntoFolderItem","_ref21","_folder$parentHierarc","navigateIntoRootFolder","createFolder","_ref22","createFolderBulk","_ref23","deleteEmptyFolder","_ref24","deleteFolder","renameFolder","_ref25","newFolderName","uploadImageByUrlToFolder","_ref26","addUrlImageToFolder","addImageWithBaseIdToFolder","_ref27","metaData","baseId","uploadVideoToAzureBlob","_ref28","onProgress","uploadVideoToAzureBlobWithCancellation","_ref29","token","blobName","on","onSuccess","onCancel","uploadVideoToFolder","_ref30","updateCurrentProgress","uploadVideoPerfMarker","createChild","willInit","progressForBlobUpload","percentage","total","progressForSavingBlobToMT","evt","_ref31","addFolderUploadAsset","inProgress","finally","done","cancelPendingVideoUpload","cancel","postVideoByUrl","_ref32","videoUrl","uploadImageToFolder","_ref33","imageName","supportUpscale","uploadStockImageToFolder","_ref34","stockImageId","addStockImageToFolder","uploadInvestImageToFolder","_ref35","investImageId","addInvestImageToFolder","uploadInvestVideoToFolder","_ref36","investVideoId","videoSrc","addInvestVideoToFolder","renameAsset","_ref37","assetId","newName","newAsset","splice","deleteAsset","_ref38","tap","_batchDeleteAssetsAsync","_ref39","parentPath","onItemDeleted","bulkDeleteAssets","_ref40","resultSummary","_ref41","assetName","path","api","_ref42","_deleteEmptyFolderAsync","_ref43","_ref43$onItemDeleted","_batchDelete","_ref44","_ref44$folders","_ref44$assets","_deleteFolder","_ref45","ic","concurrency","foldersResult","assetsResult","_ref46","totalItmCnt","_ref46$skip","_ref47","totalCount","hasNextPage","results","newSkip","_ref48","loadDataError","_ref49","batchDelete","_ref50","_ref50$folders","_ref50$assets","_ref50$onItemDeleted","batchMove","_ref51","destFolderId","_ref51$folders","_ref51$assets","dataOwnerPageName","propTypes","PropTypes","getFolders","getImages","useCommonImageRepoMethods","imageRepository","loadedImages","setLoadedImages","latestTimestampRef","setImageCroppingTasks","croppingTaskUpdated","setCroppingTaskUpdated","getImageById","imageId","_ref2$useCache","useCache","getImage","getImageCroppingTaskStatus","tasks","curTasks","dirty","newTaks","tsk","curTsk","newTsk","t","ex","renameImage","images","setImages","newImage","newImages","renameLocalImage","deleteImage","cropImage","placementSettings","addCreative","creativeData","VideoChangedFieldsWithStatusUpdate","checkError","retryPromise","getPromise","_ref2$timeout","timeout","_ref2$shouldRetry","useAIGeneratedImages","_ref3$pollInterval","pollInterval","_ref3$maxRetryCount","maxRetryCount","generateImagesByAI","prompt","onStartPolling","skipBrandDetection","ret","generateImagesWithAIAsync","taskId","taskPoller","getAIGeneratedImageTaskStatus","isTaskDone","monitorPromise","promise","AssetWithFoldersDataServiceContext","AssetWithFoldersDataServiceProvider","aigcRepository","folderRepository","videoRepository","_useFolders","loadAssetsUnderFolder","_useCommonImageRepoMe","_useCommonVideoRepoMe","setVideoUpdated","getVideoTaskStatus","videoTasks","videosToCheck","updateVideoStatusByIds","response","notFinishedTaskList","newVideoUpdated","responseKeys","addVideoCreative","videoCreative","getVideo","fetchMetadata","useCommonVideoRepoMethods","_useFolderPathTree","folderPathTree","setFolderPathTree","updateFolderPathTree","currentFolderPathTree","folderIdArr","subFoldersArr","totalSubfoldersCount","reload","recursiveUpdate","subFolders","subFoldersCount","newSubFloders","loadFolderPathTreeItemImp","subFolder","initializeFolderPathTree","loadFolderPathTreeItem","loadMoreFolderPathTreeItem","currentFolderCount","reloadFolderPathTreeItem","all","totalSubfoldersCountArr","useFolderPathTree","totalAssetCount","loadDataArgs","minImageWidth","minImageHeight","importSource","assetSources","_ref2$assetsToLoadFor","minVideoDuration","maxVideoDuration","_ref2$isGlobalSearch","isGlobalSearch","_ref2$includeParentHi","topRated","loadDataImpl","useDateRange","_ref3$assetsToLoadFor","_ref3$isGlobalSearch","_ref3$includeParentHi","_ref3$hasPerfData","hasPerfData","_ref3$includeSubfolde","loadData","args","loadDataInDateRange","loadPerfTimeSeriesDataImpl","_ref4$isGlobalSearch","_ref4$hasPerfData","uploadImageByUrl","uploadImage","_ref6$updateCurrentPr","_ref6$name","_ref6$folderId","uploadVideo","_ref7$updateCurrentPr","_ref7$name","_ref7$folderId","_ref7$perfMarker","uploadVideoByUrl","_ref8$name","_ref8$folderId","uploadStockImage","uploadInvestImage","_ref10","uploadInvestVideo","contextVal","reloadData","reloadDataInDataRange","loadMoreData","loadMoreDataInDateRange","useAdsStudioServices","useContext","withAdsStudioServicesConsumer","Comp","pickedPropNames","CompWithService","dataService","pickedProps","WindowStatus","INDETERMINATE","UNSET","MAX_ITEM_COUNT","AssetsWindowManager","windowSize","this","assetWindows","windowsCount","ceil","get","w","windowIndex","SequenceAssetsWindowManager","sourceNames","winMgrList","sourceName","mgr","resetWindows","winObj","setTotalItemCount","isLoading","isCompleted","cnt","winMgr","getNextUnloadedWindow","indexOffset","setWindowStatus","AssetsReducerActionType","AssetsReducerActions","pageIndex","pageSize","InitialReducerState","defaultReducer","_excluded3","_excluded4","_excluded5","startIdx","sequenceWindowReducer","_excluded6","_actionData$indexOffs","_excluded7","useAssetsServiceBase","reducer","reducerInitialArg","assetWindowManager","filtersRef","loadingWindowManagerRef","assetState","_ref2$updateCurrentPr","_ref2$name","_ref2$folderId","loadAssets","filters","loadMoreAssets","noMoreData","reloadAssets","resetAssetsData","getTotalAssetCount","useBasicAssetsService","_ref$pageSize","useMultiSourceAssetsService","_ref2$pageSize","dataSourceNames","assetWindowManagerRef","service","getAssetCountBySource","useEditImageService","_ref$pollInterval","_ref$maxRetryCount","imagesWithFilter","setImagesWithFilter","imagesWithFilterAndBlur","setImagesWithFilterAndBlur","getImagesWithFilter","generateImageWithSmartEffect","smartEffects","smartEffectName","smartEffectOptions","filterRes","Effect","Resource","unshift","getImagesWithFilterAndBlurImp","blurLevel","ManualBgBlurLevel","getOriginalImageWithBlur","getImagesWithFilterAndBlur","originalImageWithBlurRes","imagesWithFilterAndBlurRes","imagesWithFilterAndBlurInner","blur","removeImageBackground","generateImageBackground","outputImageWidth","outputImageHeight","newImageUrl","generatedUrl","generateMultipleImageBackgrounds","getGenerateMultipleImageBackgroundsTaskStatus","getImageSegmentations","originalUrl","saveImageCopy","_ref9$folderId","saveImage","isImageFittingEnabled","_ref13$folderId","saveImageWithBaseId","_ref14","_ref14$folderId","_ref15","moveImageToFolder","placements","skipOutpainting","useVideoTaskPoller","newVideoTasks","isPollerRunning","currentTaskPoller","startVideoTaskStatusPoller","stopPoller","KEY","updateInProgressTasksStatus","inProgressTaskCount","ss","getSessionStorage","supportsStorage","set","invalidate","ImageCroppingTaskStatusPoller","_useAdsStudioServices","startImageCroppingTaskStatusPoller","VideoTaskStatusPoller","withAssetTaskStatusPoller","Wrapper","AdsStudioAssetGridCell","onDetailsClick","onEditClick","permissions","shouldShowExternalLink","focusIndex","setFocusIndex","focusCellButton","assetContainers","querySelectorAll","firstButton","querySelector","code","focus","detailButton","editButton","clickDetails","clickEdit","isVideoCell","isStockImageCell","videoTemplateUIEnabled","dynamic","VideoTemplateUI","showEditIcon","EditRegular","ListRegular","stringifySync","onClickVideo","rel","useControlStyles","videoContainer","paddingBottom","sliderContainer","previewVideo","commonParentStyles","iconCommonStyles","usePlaceholderStyle","encoding","unverified","borderBottom","failed","VideoPureComponent","EncodingPlaceholderWithStyle","EncodingPlaceholder","FailedPlaceholderWithStyle","FailedPlaceholder","UnverifiedPlaceholderWithStyle","UnverifiedPlaceholder","useVideoAssetsGridCellStyle","VideoAssetsGridCellContainer","videoCellLabelContainer","videoCell","paddingLeft","placeholderCell","AdsStudioVideoAssetsGridCell","isVideoLoaded","setVideoLoaded","showVideo","setShowVideo","_useState5","_useState6","hideVideo","setHideVideo","_useState7","_useState8","thumbnailSeletable","setThumbnailSelectable","durationInMS","durationDesc","_useState9","_useState10","cellRef","setCellRef","timerRef","addEventListener","clearTimeout","onClickVideoCard","playVideoObject","play","wrapperWidth","offsetWidth","TimerRegular","placeholderContent","videoWrapper","autoPlay","muteByDefault","maxWidth","showTime","showPlay","customPlayObject","imageWrapper","borderRadiusXLarge","iconChecked","borderRadiusCircular","ImagePanelGridCell","onSelectImage","isSelected","isMultiple","onClickCell","CheckmarkCircleFilled","contentGridWrapper","PanelImageGrid","onFailedToLoadData","isHideDescription","_ref$isMultiple","isLoadingMore","selectedItemIds","setSelectedItemIds","onSelectedChange","selectedItemId","itemId","assetsWithAction","onAction","imagesGridSection","sectionGridData","p$res","usePerformanceFilterBarEditingStyle","filterBarEditingContainer","borderLeft","usePerformanceFilterBarReadonlyStyle","filterBarReadonlyContainer","textDecoration","addFilterButton","useViewAllFiltersButtonStyle","viewAllButton","viewContentTitle","viewAllFilterItem","EditingFilterBar","focusedFilter","onRenderNewFilterContextMenu","onRenderFilter","onCloseClick","onResetClick","getDivider","isLast","isFirst","DismissRegular","PerformanceEditingFilterBar","FilterListWithPopover","onClickFilter","humanizedValue","ViewAllFiltersButtonImpl","selectedFilters","isFilterAlwaysVisible","Popover","align","PopoverTrigger","as","PopoverSurface","ViewAllFiltersButton","ReadonlyFilterBar","onClickAddFilterButton","filterListRef","onBlur","scrollTo","which","Enter","Space","onKeyPress","AddRegular","PerformanceReadonlyFilterBar","dynamicSizeContainer","videoOutlineGray","videoNormalContainer","backgroundImage","VideoPlaybackView","hideControls","onLoadedMetadata","onErrorHanler","isOutlineGray","useDynamicVideoSize","ev","poster","controls","controlsList","disablePictureInPicture","mainViewContainer","mainViewContentContainer","mainViewIconLabelContainer","contentIcon","footerContainer","footerInvalid","footerContent","helpLink","ItemPlaceholderBoxViewFooterType","warning","ItemPlaceholderBoxView","mainViewIcon","mainViewIconLabel","footerProps","summary","tip","learnMoreLinkText","learnMoreLinkTopic","renderFooter","footContentStatus","getFolderProgressPreviewStyles","imageContent","baseItemBoxProgressStyles","imageContentText","folderSize","folderIconRoot","createFolderPreviewComponent","numberOfAssets","FileUploadingPreview","isVideo","SimpleImagePreview","VideoLoadState","placeholderView","hidden","shown","PlaceHolderBoxViewFooterConfig","VideoLoadPreview","onErrorHandler","videoLoadState","setVideoLoadState","cachedUrl","setCachedUrl","localizedTextFields","onLoadedMetadataInternal","onErrorHandlerInternal","addUrlInput","placeHolderImage","errorMesBelowUrlInput","videoPlaybackView","messageContainer","AddVideoPanelContent","videoLoaded","processedUrl","setProcessedUrl","messageBarText","setMessageBarText","urlInputErrors","setUrlInputErrors","_useState11","_useState12","videoLoadStarted","setVideoLoadStarted","handleInput","isEmpty","onUrlInputChange","errors","isValidUrl","Input","placeholder","contentBefore","SearchFilled","MessageBar","intent","contentWrapper","searchArea","input","messageBar","dropdown","listbox","StockImagePanelContent","cid","oDataConfig","setSelectedImages","setIsLoadingMore","isLoadingFirstPage","setIsLoadingFirstPage","setTotalCount","selectedImages","searchQuery","hasMore","filterQueryJSON","onInputChange","_ref$value","stockImageService","StockImageDataService","controller","getStockImages","loadImages","_ref2$$search","$search","_ref2$$skip","$skip","_ref2$$query","$query","customQueries","extend","appName","$top","language","includevertical","prevImages","Preview","Url","originSelectedLength","newSelectedList","selectedItem","find","prototype","InvestImagePanelContent","investImageService","InvestImageDataService","getInvestImages","getInvestAssets","_ref2$creativeId","creativeId","queryParams","assetTypeId","XandrAssetId","videoNameWrapper","videoName","emptyButtonStyle","borderImage","borderColor","borderStyle","InvestVideoPanelContent","setSelectedVideos","videos","setVideos","selectedVideos","getInvestVideos","loadVideos","prevVideos","Description","onSelectVideo","videoId","videosGridSection","loop","urlPrefixOptions","domainInputWrapper","columnGap","prefixSelect","domainInput","suggestionErrorInvalid","DomainInputView","onDomainChange","isDomainInvalid","errorMessageClassName","domainInputWrapperClassName","urlPrefix","setUrlPrefix","selectId","useId","onSelectChange","onBlurUrl","newUrl","prefix","newDomain","Select","option","subdomainWrapper","divider","SubdomainInputView","defaultDomainUrl","onDomainUrlChange","onSubdomainUrlChange","onDomainBlur","temporaryFinalUrl","newDomainUrl","getUrlProtocolAndDomain","hasProtocol","onDomainKeyDown","onSubdomainBlur","newSubdomainUrl","onSubdomainKeyDown","defaultValue","subdomainUrlRegex","WebsiteImagePanelContent","domainUrl","setDomailUrl","subdomain","setSubdomain","setIsdomainInvalid","_useWebsiteImages","isLoadingFistPage","setIsLoading","pageNumber","suggestionPoller","SuggestionPoller","trace","startSignal","stopSignal","jobCompleteCallback","setPageNumber","newPageNumber","getLandingPageSuggestions","landingPageUrl","isSubdomain","pageNum","minimumResolution","setJobCompleteCallback","forceInternalScrapingService","getMoreLandingPageSuggestions","_ref3$url","_ref3$sDomain","sDomain","ImagePaging","Images","ThumbnailUrl","ImageUrl","useWebsiteImages","showDomain","finalUrlDomain","onSubdomainChange","newValue","regexResult","getSubdomain","newSearchUrl","OverflowItemsMenu","overflowItems","onItemClick","_useOverflowMenu","useOverflowMenu","isOverflowing","overflowCount","overflowItemsCount","Menu","MenuTrigger","disableButtonEnhancement","MoreHorizontalRegular","MenuPopover","MenuList","MenuItem","AdsStudioBreadcrumb","maxDisplayedItems","maxLengthOfItem","customItemStyle","_partitionBreadcrumbI","partitionBreadcrumbItems","startDisplayedItems","endDisplayedItems","lastIndex","isLastItem","isTruncatableBreadcrumbContent","BreadcrumbItem","BreadcrumbButton","breadcrumbButton","breadcrumbButtonCurrent","truncateBreadcrumbLongName","BreadcrumbDivider","Breadcrumb","useLibraryEmptyViewStyle","CardContainer","emptyView","emptyIcon","mainText","neutralForegroundRest","LibraryEmptyView","isInSubfolder","isAnyFilterSet","hideAddAssetCards","str","AddFromAnotherSourceSubMenu","onUploadImage","onUploadVideo","ImageMultiple20Regular","UploadFromComputerSubMenu","onUploadLocalFile","onUploadLocalFolder","ArrowUpload20Regular","NewDropDown","onUploadLocalFileClick","onUploadLocalFolderClick","onUploadImageClick","onUploadVideoClick","onAIGenerateClick","onCreateFolderClick","handleUsage","onAIGenerate","onCreateFolder","MenuButton","MenuDivider","FolderAdd20Regular","menuPopover","menuButton","unselectedMenuButton","enabledClearButton","colorNeutralForeground2BrandHover","disabledClearButton","colorNeutralForegroundDisabled","useCustomItemStyles","overflowY","contentAfter","colorNeutralBackground3","contentLabel","defaultMinWidth","defaultMinHeight","forceClear","onDismiss","_props$defaultOpen","defaultOpen","minWidthId","afterMinWidthId","minHeightId","afterMinHeightId","setIsOpen","showInput","setShowInput","menuList","setMenuList","minWidthRef","minHeightRef","setMinWidth","setMinHeight","getOnChangeCallback","setter","onMinWidthChange","onMinHeightChange","onClear","newMinHeight","newMinWidth","focusTextField","textFieldRef","onMinWidthKeyUp","onMinHeightKeyUp","onDropdownDismiss","clear","timeoutId","removeAttribute","trapFocus","onOpenChange","Label","htmlFor","toString","Dismiss20Regular","SimpleDateRangePickerInternal","defaultSelectedDateRange","defaultIsSelectingStartDate","onDateRangeChange","isSelectingStartDate","selectedDateRange","setSelectedDateRange","leftNavigatedDate","setLeftNavigationDate","rightNavigatedDate","minDate","years","maxDate","selectedRanges","onNavigateStartMonthDate","date","onNavigateEndMonthDate","months","onSelectDate","newDate","SingleMonthCalendar","navigatedDate","onNavigateDate","isRightNavigateVisible","isLeftNavigateVisible","SimpleDateRangePicker","ChevronRightIcon","bundleIcon","ChevronRight20Filled","ChevronRight20Regular","startDate","endDate","CustomItem","isCustomSelected","customDateRange","setCustomDateRange","customRangeStartStr","customRangeEndStr","customOption","menuItemRef","startDateId","afterStartDateId","startDateRef","endDateId","afterEndDateId","isDatePickerOpen","setIsDatePickerOpen","onSelectedDateRangeChange","newRange","openDatePickerForStart","openDatePickerForEnd","onStartKeyDown","onEndKeyDown","MenuItemRadio","hasSubmenu","readOnly","CalendarLtr20Regular","defaultTimeFrame","defaultCustomDateRange","checkedValues","setCheckedValues","optionsWithoutCustom","formatDate","selectedChoice","dropdownTitle","onDropdownClear","timeframe","onCheckedValueChange","checkedItems","hasCheckmarks","searchBox","backgroundSize","SearchBoxFilter","onSearchTextChanging","onSearchTextChange","onSearchTextBlur","onSearchTextClear","defaultSearchText","searchboxPlaceHolder","autoFocus","SearchBox","toggleButton","toggleButtons","selectedButton","AssetTypeToggleButtonsFilter","optionsState","toggleSelectedOption","ToggleButtons","SortByFilter","selectedOptionMemo","selectedOption","ArrowSortUp20Regular","ArrowSortDown20Regular","ArrowSort20Regular","checkbox","defaultSelectedAssetSources","selectedAssetSources","setSelectedAssetSources","selectedOptions","onChangeCallback","selectedSources","minDuration","customDuration","maxDuration","defaultMaxDuration","defaultMinDuration","minDurationId","afterMinDurationId","maxDurationId","afterMaxDurationId","minDurationRef","maxDurationRef","setMinDuration","setMaxDuration","minDurationInvalid","setMinDurationInvalid","maxDurationInvalid","setMaxDurationInvalid","onMinDurationChange","onMaxDurationChange","newMinDuration","newMaxDuration","onMinDurationKeyUp","onMaxDurationKeyUp","defaultImportSource","thumbSizeVar","railSizeVar","railColorVar","progressColorVar","thumbColorVar","sliderMinProgressVar","sliderMaxProgressVar","videoDuration","videoDurationScrollbar","touchAction","justifyItems","gridTemplateRows","gridTemplateColumns","colors","colorNeutralStrokeAccessible","colorCompoundBrandBackground","colorCompoundBrandBackgroundHover","colorCompoundBrandBackgroundPressed","rail","gridRowStart","gridRowEnd","gridColumnStart","gridColumnEnd","forcedColorAdjust","colorTransparentStroke","thumb","colorNeutralBackground1","colorNeutralStroke1","rangeInput","pointerEvents","minRangeInput","colorStrokeFocus2","borderRadiusMedium","maxRangeInput","minThumb","maxThumb","getPercent","Slider","setValue","getRelatedValue","isDragging","setIsDragging","onMouseMove","onMouseUp","removeEventListener","onMouseDown","console","log","VideoDurationScrollbarFilter","minInputId","maxInputId","minDurationFilter","maxDurationFilter","minValue","setMinValue","maxValue","setMaxValue","scrollbarRef","styleVariables","wrappedSetMinValue","shouldCallOnChange","wrappedSetMaxValue","clientX","scrollbarBox","getBoundingClientRect","onClickRail","FilterToggleButton","ToggleButton","Filter20Regular","getCivilDateToday","DEFAULT_RANGE","FilterContext","useFilterBarState","userPreference","defaultMinVideoDuration","defaultMaxVideoDuration","setFilterBar","_useAdditionalFilterB","showAdditionalFilterBar","setShowAdditionalFilterBar","toggleFilterBar","useAdditionalFilterBarState","_useAssetTypeState","assetTypes","initialState","assetTypesState","setAssetTypesState","isImageSelected","isVideoSelected","toggleAssetType","newAssetTypesState","optionKey","useAssetTypeState","_useSearchBoxState","_ref$defaultSearchTex","setSearchText","searchTextValueRef","useSearchBoxState","_useSortByState","setSortBy","sortingOptions","safeSetSortBy","newVal","allSortByOptions","values","safeNewValue","onSortByChange","_evt","sortby","useSortByState","_useDateAddedState","ianaTimeZone","dateAddedFilter","setDateAddedFilter","dateAddedFilterCustomDateRange","setDateAddedFilterCustomDateRange","dateAddedChoiceOptions","onDateAddedFilterChange","tf","cdr","useDateAddedState","_useAssetSourcesState","_ref$disabledAssetSou","disabledAssetSources","setAssetSources","assetSourceOptions","onAssetSourceFilterChange","newAssetSources","useAssetSourcesState","_useImportSourceState","setImportSource","importSourceOptions","onImportSourceFilterChange","newImportSource","useImportSourceState","_useImageSizeState","minWidthFilter","setMinWidthFilter","minHeightFilter","setMinHeightFilter","onImageSizeFilterChange","useImageSizeState","_useVideoDurationStat","_ref$defaultMinVideoD","_ref$defaultMaxVideoD","setMinDurationFilter","setMaxDurationFilter","onVideoDurationFilterChange","useVideoDurationState","isDateAddedFilterActive","isImportSourceFilterActive","isAssetSourceFilterActive","isAdditionalFilterActive","getFilters","useFilterBarStyles","filterBar","rowGap","remaining","useBaseAdditionalFilterBarStyles","colorNeutralForeground2","fontWeightSemibold","useAdditionalFilterBarStyles","hide","filterText","AdditionalFilterBar","baseClasses","filterId","setForceClear","VideosFilterBar","_useFilterBarState","FluentProvider","webLightTheme","ImagesFilterBar","_useFilterBarState2","LibraryFilterBar","_useFilterBarState3","assetTypeToggleButtons","SearchResultFilterBar","_useFilterBarState4","FilterContextProvider","withFilterContext","ImportSourceFilterComponent","onValueChange","dropdownOptions","newHumanizedVaue","newHumanizedValue","AssetSourceFilterComponent","ImageSizeFilterComponent","onImageSizeChange","AL_DATE_ADDED_FILTER_DEFAULT_RANGE","getDefaultDateRange","DateAddedFilterComponent","_ref14$dateAddedFilte","PerformanceSearchTextFilterComponent","getPerformanceFilterComponents","useBreadcrumbStyles","breadcrumbContainer","FolderPathBreadcrumb","visibleForRootFolder","useAdsStudioLibraryPageContentStyle","HiddenDivForAnnounce","DEFAULT_GRID_CONFIG","toAnnounce","announce","setAnnounce","clip","overlaySpinnerStyles","FOLDER_GRID_CONFIG","AdsStudioLibraryPageContentInternal","renderHeader","renderGridCell","adsStudioUserPreferences","dataLoaded","displayFolderPath","reloadingFolders","renderToolbar","renderEmptyView","sectionSelectedItems","isAssetLibraryAIGCMVPEnabled","preDefinedAssetSources","navigation","gridScrollContainer","isXandrIntEnabled","XandrIntegrationEnabled","useJsData","jsData","Account","announcedText","setAnnouncedText","_useMemo","searchBoxText","openSystemUploadRef","gotoUploadFilesPanelPage","openSystemUpload","onStockButtonClick","gotoStockImagePanelPage","onInvestButtonClick","gotoInvestImagePanelPage","onWebsiteButtonClick","gotoWebsiteImagePanelPage","gotoUploadFolderPanelPage","gotoMixedVideoPanelPage","gotoAddVideoPanelPage","gotoMixedImagePanelPage","loadedAssetList","others","cell","isPageInited","setPageInited","loadingData","setLoadingData","loadDataAsync","o","libraryPageLoadDataPerfMarker","usePreDefinedAssetSources","bulkTookbar","onFolderPathClicked","onRenderHeader","gotoAIGenerationPanelPage","foldersGridSection","assetsGridSection","AssetLibraryCopilot","willFetchData","willRender","isPageLoading","hadNoData","isSectionDataEmptyStatus","injectedContentContainer","emptyViewContainer","assetLibraryUserPreferences","assetLibraryAccountPreferences","AdsStudioLibraryPageContent","dialog","wordBreak","ConfirmDialog","isDisplayed","errorText","confirmString","cancelString","onClickConfirm","onClickCancel","isUiBlocked","warningMsg","DismissIcon","Dialog","DialogSurface","DialogBody","DialogTitle","DialogContent","DialogActions","GenerateImageContext","GenerateImageContextProvider","generateImageExample","setGenerateImageExample","withGenerateImageContext","useLoadingViewStyles","backgroundRepeat","animation","backgroundPosition","LoadingIndicator","loadingViewStyles","ExamplePromptList","backgroundImageUrl","ExampleImageListWithoutStyle","MultiLineEllipsisText","ExampleImageCell","labelId","promptList","wrappedOnSelectImage","exampleImageList","template","ExampleImageCellWithoutStyle","exampleImageCell","MAX_PROMPT_LENGTH","PromptEditorV2","setPrompt","disabledText","onKeyDownInTextArea","textAreaId","Textarea","PromptEditor","disabledButton","onClickGenerateButton","SendRegular","ObjectSelectionImageView","originalImageUrl","originalImageHeight","originalImageWidth","getMaskValueAtPoint","updateHighlightedImage","isFetchingSegmentations","toggleSelectedMask","workingSelectedImageSrc","highlightedImageSrc","maskValues","imageContainer","maskIndex","setMaskIndex","windowToImgPosition","imageBox","targetWidth","targetHeight","wr","hr","leftToImage","topToImage","mousemoveHandler","_windowToImgPosition","clientY","mouseleaveHandler","mousedownHandler","_windowToImgPosition2","keyHandler","shiftKey","resetMaskHandler","useUploadAsset","videoUploadPerfMarker","isUploadImageUpscaleEnabled","uploadFileAsync","uploadCallback","commonOptions","useReadAsset","readFileAsync","readFileAsDataURLAsync","useValidateAsset","isImageUpscaledRef","validateImageAsync","validateImageAsyncInternal","imageSource","minimumHeight","minimumWidth","getImageDetailAsync","naturalWidth","naturalHeight","validateFileAsync","validateVideoAsync","checkExtension","supportedList","extToCheck","contains","useCustomizedHandlerOptions","getCustomizedHandlerOptions","supportedVideoExtensions","linkButton","useUploadFiles","onFilesAddedCallback","setErrors","previewArr","setPreviewArr","onFileRead","selectedFiles","callback","isMultipleFiles","customizedOptions","_parseFileName","passedOptions","fileObj","fileSources","fileAdditionalInfoArr","fileSource","sourcesForPreview","generatePreviewArray","setProgress","progress","prevArr","updateFilePreviewArrayUploadProgress","uploadBatchs","each","updateProgress","uploadProgressBoundary","uploadResult","errorMsg","assetIds","upscaledImagesArrCount","showInfo","fileCount","genericErrorMsg","newErrors","getImageValidationErrorMessage","isReachFileSizeLimit","limitMB","fileSizeMB","MaximumImageFileSizeMB","MaximumVideoFileSizeMB","getReachFileSizeLimitErrorMessage","maximumImageFileSize","maximumVideoFileSize","ccJSData","jsDataCcRest","withCcJsDataContextProvider","serverContext","scope","uid","serverCtx","ServicesEndpoints","ClientCenterUIAPI","CurrentUser","CurrentCustomer","_initCcJsData","cidFetcher","uidFetcher","appendErrorSummary","handleAjaxAuthFailure","willSupportCors","GetJsDataInfo","initCcJsData","CcJsDataContextProvider","initialJsData","withServerContext"],"sourceRoot":""}