{"version":3,"file":"static/js/application.async.landing~183a1dc6.48743a68.chunk.js","mappings":"oXAAaA,EAAmB,WAAH,MAAU,CACrCC,SAAU,CACR,iBAAkB,CAChBC,YAAa,UACb,UAAW,CACTA,YAAa,YAGjB,UAAW,CACTC,QAAS,SAGbC,eAAgB,CACdC,gBAAiB,WAEnBC,OAAQ,CACN,SAAU,CACRH,QAAS,SAGd,E,YCLKI,EAAkB,CACtB,CACEC,QAASC,SACTC,MAAO,UAET,CACEF,QAASC,SACTC,MAAO,WAILC,EAAa,0BAENC,EAAW,SAAHC,GAA2C,IAArCC,EAAgBD,EAAhBC,iBAAwBJ,EAAKG,EAAXE,KACrCC,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAClBC,GAAUC,EAAAA,EAAAA,kBAAiBpB,GAE3BqB,GAAqBC,EAAAA,EAAAA,cACzB,SAACC,EAAGR,GACFD,EAAiBC,EAAKS,YACxB,GACA,CAACV,IAGGW,EAAef,GAAS,SACxBgB,EAAcV,EAAKW,UAAUC,IAAAA,KAAOrB,GAAiB,SAAAD,GAAM,OAAIA,EAAOI,QAAUe,CAAY,IAAEjB,SAEpG,OACEqB,EAAAA,EAAAA,KAACC,EAAAA,EAAc,CAACC,MAAOC,EAAAA,EAAcC,UACnCC,EAAAA,EAAAA,MAAA,OAAKC,UAAU,YAAWF,SAAA,EACxBJ,EAAAA,EAAAA,KAAA,OAAAI,UACEJ,EAAAA,EAAAA,KAACO,EAAAA,EAAK,CAACC,GAAI1B,EAAWsB,SAAEjB,EAAKW,UAAUlB,kBAEzCoB,EAAAA,EAAAA,KAACS,EAAAA,EAAQ,CACP,kBAAiB3B,EACjB4B,eAAgBlB,EAChBX,MAAOgB,EACPc,gBAAiB,CAACf,GAClBU,UAAWhB,EAAQlB,SAASgC,SAE3B1B,EAAgBkC,KAAI,SAAAnC,GAAM,OACzBuB,EAAAA,EAAAA,KAACa,EAAAA,EAAM,CAAoBhC,MAAOJ,EAAOI,MAAOyB,UAAWQ,IAAWrC,EAAOI,QAAUA,EAAQS,EAAQf,eAAiB,GAAIe,EAAQb,QAAQ2B,SACzIjB,EAAKW,UAAUrB,EAAOE,UADZF,EAAOI,MAEX,UAMrB,E,mCChCakC,GAAoBC,E,UAAAA,uBA3BW,SAAHhC,GAElC,IADLiC,EAAejC,EAAfiC,gBAAiBC,EAAgBlC,EAAhBkC,iBAEThC,EAAS+B,EAAT/B,KACFiC,EAASjC,GAAQA,EAAKH,SAEtBS,GAAqBC,EAAAA,EAAAA,cAAY,SAAC2B,GACtCF,EAAiB,GAAI,CAAEnC,SAAUqC,GACnC,GAAG,CAACF,IAOJ,OALAG,EAAAA,EAAAA,YAAU,WACRH,EAAiB,GAAI,CAAEnC,SAAUoC,GAAU,UAE7C,GAAG,KAEInB,EAAAA,EAAAA,KAACjB,EAAQ,CAACE,iBAAkBO,EAAoBN,KAAMiC,GAC/D,I,sBCTaG,EAAkBC,EAAAA,MAAW,SAACC,GACzC,IACEL,EACEK,EADFL,OAAQM,EACND,EADMC,OAAWC,GAAIC,EAAAA,EAAAA,GACrBH,EAAKI,GACHzC,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAClBwC,GAAiCC,EAAAA,EAAAA,UAAQ,kBAPxB,SAAC3C,EAAMgC,GAAM,MAAiB,WAAXA,EAAsBhC,EAAKW,UAAUlB,qBAA6BO,EAAKW,UAAUlB,oBAA0B,CAOhGmD,CAAiB5C,EAAMgC,EAAO,GAAE,CAACA,EAAQhC,IACxF8B,GAAkBa,EAAAA,EAAAA,UAAQ,iBAAO,CACrC5C,KAAM,CACJH,SAAUoC,GAEb,GAAG,CAACA,IAEL,OACEnB,EAAAA,EAAAA,KAACgC,EAAAA,IAAcC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAEbC,OAAOlC,EAAAA,EAAAA,KAACmC,EAAAA,GAAS,CACfC,SAAUxD,YAEVyD,YAAalD,EAAKW,UAAUlB,aAC5B0D,QAAST,IAEXU,qBAAsB,CAAEC,cAAeC,EAAAA,IACvCC,eAAgB,CACdjB,OAAAA,EACAkB,UAAW,iBAETjB,GAAI,IAAAtB,UAERJ,EAAAA,EAAAA,KAACe,EAAiB,CAACE,gBAAiBA,MAdhC,SAiBV,G,2UC3Ca2B,EAA4B,CACvCC,0DAA2DjE,0FAC3DkE,2EAA4ElE,iEAC5EmE,sDAAuDnE,0IACvDoE,uEAAwEpE,iHACxEqE,2CAA4CrE,gFAC5CsE,4DAA6DtE,uDAC7DuE,8CAA+CvE,mCAC/CwE,qCAAsCxE,uEACtCyE,8DAA+DzE,yDAC/D0E,6DAA8D1E,kEAC9D2E,oCAAqC3E,kDCiBjC4E,EAAcC,EAAAA,GAAUC,mBAExBC,EAAsB,SAACC,GAC3B,IAAMC,EAAS,CAAC,EAShB,OARA9D,IAAAA,KAAO6D,GAAKE,SAAQ,SAACC,GACnB,IAAMlF,EAAQ+E,EAAIG,GACdhE,IAAAA,SAAW6D,EAAIG,IACjBF,EAAOE,GAAOJ,EAAoB9E,GACf,OAAVA,QAA4BmF,IAAVnF,IAC3BgF,EAAOE,GAAOlF,EAElB,IACOgF,CACT,EAQMI,EAA0B,SAAHjF,GAStB,IARLkF,EAAQlF,EAARkF,SACAC,EAAWnF,EAAXmF,YACAC,EAAgBpF,EAAhBoF,iBACAC,EAAYrF,EAAZqF,aACAC,EAAetF,EAAfsF,gBACAC,EAA4BvF,EAA5BuF,6BACAC,EAAexF,EAAfwF,gBAAeC,EAAAzF,EACf0F,WAAAA,OAAU,IAAAD,GAAQA,EAEZE,GAAsBC,EAAAA,EAAAA,IAC1BV,EAASW,MACTX,EAASY,OACT,MACA,EACAtB,GACA,GACA,EACAa,EACAC,GACA,GACA,GACA,GACA,GACA,GACA,EACAI,GAGF,GAAIC,EAGF,MAFAA,EAAoBI,iBAAkB,EAEhCJ,EAGRP,GAAoBA,IAEpB,IAAMY,GAAcC,EAAAA,EAAAA,IAAqBf,EAAUC,GAanD,OAZsCe,EAAAA,EAAAA,IAA2B,CAC/DV,gBAAAA,EACAW,oBAAqBH,EACrBI,gBAAgB,EAChBC,6BAA6B,EAC7B7B,YAAAA,EACA8B,kBAAmB7B,EAAAA,GAAU8B,yBAC7BlB,aAAAA,EACAC,gBAAAA,EACAC,6BAAAA,GAIJ,EAEMiB,EAAkB5G,iDAEX6G,EAA6B,SAAHC,GAYhC,IAXLC,EAAGD,EAAHC,IACAC,EAAGF,EAAHE,IACAC,EAAWH,EAAXG,YACAC,EAAkBJ,EAAlBI,mBACA3G,EAAIuG,EAAJvG,KACA4G,EAAWL,EAAXK,YACA1B,EAAYqB,EAAZrB,aACAC,EAAeoB,EAAfpB,gBACA0B,EAAaN,EAAbM,cACAC,EAAkCP,EAAlCO,mCAAkCC,EAAAR,EAClChB,WAAAA,OAAU,IAAAwB,GAAQA,EAElBC,GAAgDC,EAAAA,EAAAA,UAAS,IAAGC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAArDI,EAAgBF,EAAA,GAAEG,EAAmBH,EAAA,GAC5CI,GAAsEL,EAAAA,EAAAA,WAAS,GAAMM,GAAAJ,EAAAA,EAAAA,GAAAG,EAAA,GAA9EE,EAA2BD,EAAA,GAAEE,EAA8BF,EAAA,IAElErF,EAAAA,EAAAA,YAAU,WACJ4E,IACFY,EAAAA,EAAAA,2BAA0B,CACxBC,QAAS,0BACTf,YAAAA,EACAC,cAAAA,IAECe,MAAK,SAACC,GACAA,GACHJ,EAA+BX,EAEnC,GAEN,GAAG,CAACA,EAAoCF,EAAaC,IAErD,IAAMiB,GAAsBnF,EAAAA,EAAAA,UAC1B,kBAAMoF,EAAAA,EAAAA,iBAAgB/H,EAAM,CAACyD,GAA2B,GACtD,CAACzD,IAGCgI,GAAUrF,EAAAA,EAAAA,UAAQ,kBAAM2B,EAAAA,GAAU2D,uBAAuB,MAAM,EAAO5D,GAAa,GAAO,EAAOa,EAAcC,EAAgB,GAAE,CAACD,EAAcC,IAEhJ+C,GAAgBvF,EAAAA,EAAAA,UAAQ,WAC5B,OAAI6E,GAA+BQ,EAAQG,OAAS,GAAKH,EAAQ,IAAM,KAAOA,EAAQ,IAAM,KAAOA,EAAQ,IAAM,KAAOA,EAAQ,IAAM,IAC7H,CAAC,IAAK,KAER,EACT,GAAG,CAACR,EAA6BQ,IAE3BI,GAAsBzF,EAAAA,EAAAA,UAAQ,kBAAO6E,IAAgC5G,IAAAA,QAAUsH,EAAc,GAAG,CAACV,EAA6BU,IAE9HG,GAAwC/H,EAAAA,EAAAA,cAAY,SAACC,GACzD8G,GAAoBiB,EAAAA,EAAAA,IAA+B/H,EAAGuH,IAAwB9H,EAAKW,UAAU0F,GAC/F,GAAG,CAACyB,EAAqB9H,IAEnBuI,GAAwBjI,EAAAA,EAAAA,cAAY,WACxC+G,EAAoB,GACtB,GAAG,IAEGmB,GAA0BlI,EAAAA,EAAAA,cAAY,SAAAmI,GAAyB,IAC/DC,EADuDD,EAAdE,eAO7C,OAJK/B,EAAYgC,6BACfF,EAAoB9H,IAAAA,KAAO8H,EAAmBG,EAAAA,GAAMC,cAG/CJ,CACT,GAAG,CACD9B,IAGImC,GAAkBpG,EAAAA,EAAAA,UAAQ,kBAAM,IAAIqG,EAAAA,GAAgBxC,EAAKC,EAAKC,EAAY,GAAE,CAChFF,EACAC,EACAC,IAGIuC,GAAwBtG,EAAAA,EAAAA,UAAQ,kBAAM,IAAIuG,EAAAA,EAAsB,CACpE1C,IAAAA,EACAC,IAAAA,EACAC,YAAAA,EACAyC,WAAY,eACZ,GAAE,CACF3C,EACAC,EACAC,IAGI0C,GAAyBzG,EAAAA,EAAAA,UAAQ,kBAAM,IAAI0G,EAAAA,EAAuB,CAAE7C,IAAAA,EAAKC,IAAAA,GAAM,GAAE,CAACD,EAAKC,IAEvF6C,GAAwB3G,EAAAA,EAAAA,UAAQ,kBAAM,IAAI4G,EAAAA,GAAsB,CACpE/C,IAAAA,EACAC,IAAAA,EACAC,YAAAA,GACA,GAAE,CACFF,EACAC,EACAC,IAGI8C,IAAwB7G,EAAAA,EAAAA,UAAQ,kBAAM,IAAI8G,EAAAA,GAAsB,CACpEC,WAAYJ,GACZ,GAAE,CACFA,IAGIjE,IAAkB1C,EAAAA,EAAAA,UAAQ,kBAAM,IAAIgH,EAAAA,GAAgB,CACxDnD,IAAAA,EAAKC,IAAAA,EAAKC,YAAAA,GACV,GAAE,CAACF,EAAKC,EAAKC,IAETtB,GAA+BxE,IAAAA,OAASgG,EAAYgD,QAAS,uBAAuB,GAKpFC,IAAcvJ,EAAAA,EAAAA,cAAY,SAAAwJ,GAAiD,IAA9CC,EAASD,EAATC,UAAWC,EAAqBF,EAArBE,sBAAuBC,EAAIH,EAAJG,KACnE,OAAOC,EAAAA,EAAAA,IAAuBH,EAAW,MACtCnC,MAAK,kBAAMmB,EAAgBoB,iBAC1BJ,EACA,KACAC,EACA3F,EACA4F,EACD,IACArC,MAAK,SAACwC,GACL,IAAKA,IAAaA,EAASC,QACzB,MAAM,IAAIC,MAAMF,GAAYA,EAAS,IAAMA,EAAS,GAAGG,MAEzD,OAAOH,CACT,GACJ,GAAG,CACDrB,IAMIyB,IAAuBlK,EAAAA,EAAAA,cAAY,SAAAmK,GAAgD,IAA7CJ,EAAOI,EAAPJ,QAASK,EAAKD,EAALC,MAAOV,EAAqBS,EAArBT,sBACpDW,EAAW,WAAH,OAASX,EAAsBU,EAAO,EAAG,EACjD1F,EAAcV,EAAAA,GAAUsG,aAAaC,OAE3C,OAAO9B,EAAgB+B,kBAAkBT,GACtCzC,MAAK,SAAA7C,GAAQ,OAAID,EAAwB,CACxCC,SAAAA,EACAC,YAAAA,EACAC,iBAAkB0F,EAClBzF,aAAAA,EACAC,gBAAAA,EACAE,gBAAAA,GACAD,6BAAAA,GACAG,WAAAA,GACA,IACDqC,MAAK,SAACmD,GAEL,OADApE,EAAmB,CAACoE,IAChB3C,EACKxH,IAAAA,MAAQmK,GAEV,IACT,GACJ,GAAG,CAAChC,EAAiB3D,GAA8BF,EAAcC,EAAiBE,GAAiBsB,EAAoByB,IAEjH4C,IAA0B1K,EAAAA,EAAAA,cAAY,WAAgB,IAAf2K,EAAIC,UAAA/C,OAAA,QAAAtD,IAAAqG,UAAA,GAAAA,UAAA,GAAG,GAC5CC,EAAiBvK,IAAAA,OAASqK,GAAM,SAAAG,GAAI,OAA0C,IAAtCxK,IAAAA,OAASwK,EAAM,kBAA2B,IAClFC,EAAQF,EAAehD,OAE7B,GAAc,IAAVkD,EAAa,CACf,IAAMC,EAAY1K,IAAAA,IAAMuK,EAAgB,CAAC,IAAK,SAC1CG,GACFC,EAAAA,gBAAgBC,SAASxL,EAAKW,UAAUlB,0IAAiJ,CAAEgM,SAAUH,IAEzM,MAAWD,EAAQ,GACjBE,EAAAA,gBAAgBC,SAASxL,EAAKW,UAAUlB,iJAAwJ,CAAEiM,UAAWL,IAEjN,GAAG,CAACrL,IAEE2L,IAAgBrL,EAAAA,EAAAA,cAAY,SAChCsL,GAGI,IAFJ5G,EAAWkG,UAAA/C,OAAA,QAAAtD,IAAAqG,UAAA,GAAAA,UAAA,GAAG5G,EAAAA,GAAUsG,aAAaiB,gBAGrC,OAAO3B,EAAAA,EAAAA,IAAuB0B,EAAU,MAAM,EAAOvH,GAClDuD,MAAK,kBACJmB,EAAgB+C,oBAAoB,CAAC,CAAEC,IAAKH,KACzChE,MAAK,SAACoE,GACL,GAAIpL,IAAAA,SAAWA,IAAAA,MAAQoL,IACrB,MAAM,IAAI1B,MAAM0B,EAAI,GAAGC,MAGzB,OAAOD,EAAI,EACb,GAAE,IAELpE,MAAK,SAAAvG,GAAE,OAAI0H,EAAgB+B,kBAAkBzJ,EAAG,IAChDuG,MAAK,SAAA7C,GAAQ,OAAID,EAAwB,CACxCC,SAAAA,EACAC,YAAAA,EACAE,aAAAA,EACAC,gBAAAA,EACAE,gBAAAA,GACAD,6BAAAA,GACAG,WAAAA,GACA,IACDqC,MAAK,SAACmD,GAEL,OADApE,EAAmB,CAACoE,IACb,CACLmB,eAAgBnB,EAEpB,IACCoB,OAAM,SAAC5L,GAGN,OAFA8H,EAAsC9H,GAE/B,CACL6L,cAAc9D,EAAAA,EAAAA,IAA+B/H,EAAGuH,IAAwB9H,EAAKW,UAAU0F,GAE3F,GACJ,GAAG,CAAC0C,EAAiB7D,EAAcC,EAAiBE,GAAiBD,GAA8BuB,EAAoB0B,EAAuCP,EAAqB9H,IAG7KqM,IAAe/L,EAAAA,EAAAA,cAAY,SAAAgM,GAAuB,IAApBC,EAAYD,EAAZC,aAC5BC,EAAW,eAAAC,GAAAC,EAAAA,EAAAA,IAAAC,EAAAA,EAAAA,KAAAC,MAAG,SAAAC,EAAOb,GAAG,IAAAc,EAAA,OAAAH,EAAAA,EAAAA,KAAAI,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,cAAAF,EAAAE,KAAA,EACPC,IAAAA,IAAYnB,EAAIvK,KAAI,SAAAJ,GAAE,OAAI0H,EAAgB+B,kBAAkBzJ,EAAG,KAAG,KAAD,EAA1E,OAANyL,EAAME,EAAAI,KAAAJ,EAAAK,OAAA,SACLP,GAAM,wBAAAE,EAAAM,OAAA,GAAAT,EAAA,KACd,gBAHgBU,GAAA,OAAAd,EAAAe,MAAA,KAAAtC,UAAA,KAKXuC,EAAS,eAAAC,GAAAhB,EAAAA,EAAAA,IAAAC,EAAAA,EAAAA,KAAAC,MAAG,SAAAe,EAAOC,GAAS,IAAAd,EAAA,OAAAH,EAAAA,EAAAA,KAAAI,MAAA,SAAAc,GAAA,cAAAA,EAAAZ,KAAAY,EAAAX,MAAA,cAAAW,EAAAX,KAAA,EACXC,IAAAA,IAAYS,EAAUnM,KAAI,SAAAsD,GAAQ,OAAI+I,EAAAA,EAAAA,IAA+B/I,EAAS,KAAG,KAAD,EAAzF,OAAN+H,EAAMe,EAAAT,KAAAS,EAAAR,OAAA,SACLP,GAAM,wBAAAe,EAAAP,OAAA,GAAAK,EAAA,KACd,gBAHcI,GAAA,OAAAL,EAAAF,MAAA,KAAAtC,UAAA,KAMT8C,EAAoBpN,IAAAA,IAAM2L,GAAc,SAAC0B,GAK7C,MAAO,CAAElC,MAJYkC,GAAY,CAAC,GAA1BC,UAEsB,CAAC,GAAvBC,MAEYpC,IACtB,IAGA,OAAOhD,EAAgB+C,oBAAoBkC,GACxCpG,MAAK,SAAAoE,GAAG,OAAImB,IAAAA,IAAYnB,EAAIvK,KAAI,SAAAJ,GAAE,OAAI0H,EAAgB+B,kBAAkBzJ,EAAG,IAAE,IAC7EuG,MAAK,SAAAkF,GAAM,OAAIP,EAAa9K,KAAI,SAACwM,EAAUvD,GAC1C,IAzSe3K,EAySPmO,GAAaD,GAAY,CAAC,GAA1BC,SAMR,OAHAD,EAASE,MAAQrB,EAAOpC,GAAO0D,IAC/BF,EAASC,MAAMpC,IAAMe,EAAOpC,GAAO0D,IAE5B,CACLrC,IAAKkC,EAASlC,IACdsC,UAjTatO,EAiTWkO,GAhTbK,EAAAA,EAAAA,eAAc9J,EAAoBzE,IACnCwO,QAAQ,KAAMC,mBAAmB,OAgT3CC,OAAQ3B,EAAOpC,GAAOgE,GACtBC,WAAY,cAEhB,GAAE,IACD/G,MAAK,SAAAqD,GAAI,OAAIlC,EAAgB+C,oBAAoBb,EAAK,IACtDrD,MAAK,SAACoE,GACL,IAAM4C,EAAQhO,IAAAA,KAAOoL,GAAK,SAAA3K,GAAE,OAAIT,IAAAA,SAAWS,EAAG,IAC9C,GAAIuN,EACF,MAAM,IAAItE,MAAMsE,EAAM3C,MAGxB,OAAOD,CACT,IACCpE,KAAK4E,GACL5E,KAAK6F,EACV,GAAG,CAAC1E,IAEE8F,IAAiBvO,EAAAA,EAAAA,cAAY,SAAA2K,GAAI,OAAIhC,EAAsB4F,eAAe5D,EAAK,GAAE,CACrFhC,IAGI6F,IAAkBxO,EAAAA,EAAAA,cAAY,SAAA2K,GAAI,OAAI7B,EAAuB2F,gBAAgB9D,EAAK,GAAE,CACxF7B,IAGI4F,IAAqB1O,EAAAA,EAAAA,cAAY,SAAA2O,GAA0B,IAAvBC,EAAeD,EAAfC,gBAClClK,EAAcV,EAAAA,GAAUsG,aAAauE,MAE3C,OAAOlG,EAAsBmG,eAAe,CAC1CC,aAAcH,EACdI,mBAAoB,iBAEnB1H,MAAK,SAAA2H,GAAA,IAAG7P,EAAK6P,EAAL7P,MAAK,OAAOqJ,EAAgB+B,kBAAkBpL,EAAM,IAC5DkI,MAAK,SAAA7C,GAAQ,OAAID,EAAwB,CACxCC,SAAAA,EACAC,YAAAA,EACAE,aAAAA,EACAC,gBAAAA,EACAE,gBAAAA,GACAD,6BAAAA,IACA,IACDwC,MAAK,SAACmD,GACLpE,EAAmB,CAACoE,GACtB,IACCoB,OAAM,SAAC5L,GACN8H,EAAsC9H,EACxC,GACJ,GAAG,CAAC0I,EAAuBF,EAAiB7D,EAAcC,EAAiBE,GAAiBD,GAA8BuB,EAAoB0B,IAExImH,IAAkBlP,EAAAA,EAAAA,cAAY,SAAC6N,GAA0D,IAAnDnJ,EAAWkG,UAAA/C,OAAA,QAAAtD,IAAAqG,UAAA,GAAAA,UAAA,GAAG5G,EAAAA,GAAUsG,aAAa6E,SACvEpO,GAAO8M,GAAS,CAAC,GAAjB9M,GAER,OAAIA,EACK0H,EAAgB+B,kBAAkBzJ,GACtCuG,MAAK,SAAC7C,GACL,IAAQ2K,EAAa3K,EAAb2K,SAEJC,EAAqBD,EAGrBA,IACFC,EAAqBD,EAASnB,QAAQ,OAAQ,MAGhD,IAAMqB,GAAkBC,EAAAA,EAAAA,WAAUF,GAGlC,OAAIC,GAAmBA,EAAgB1B,SAC9B,CACLC,OAAOL,EAAAA,EAAAA,IAA+B/I,GACtCwH,aAAc,CACZuD,aAAcF,EACdG,WAAY1O,IAKXyD,EAAwB,CAC7BC,SAAAA,EACAC,YAAAA,EACAE,aAAAA,EACAC,gBAAAA,EACAE,gBAAAA,GACAD,6BAAAA,GACAG,WAAAA,GAEJ,IACCqC,MAAK,SAACmD,GACLpE,EAAmB,CAACoE,GACtB,IACCoB,OAAM,SAAC5L,GACN8H,EAAsC9H,EACxC,IAGG4M,IAAAA,SACT,GAAG,CAACpE,EAAiB3D,GAA8BF,EAAcC,EAAiBE,GAAiBsB,EAAoB0B,IAEjH2H,IAAmB1P,EAAAA,EAAAA,cAAY,SAAC2P,GAA6D,IAAnDjL,EAAWkG,UAAA/C,OAAA,QAAAtD,IAAAqG,UAAA,GAAAA,UAAA,GAAG5G,EAAAA,GAAUsG,aAAa6E,SAC7ES,EAAmB,GAuCzB,OArCAtP,IAAAA,KAAOqP,GAAU,SAAC5F,GAChB6F,EAAiBC,KAAKpH,EAAgB+B,kBAAkBT,GACrDzC,MAAM,SAAC7C,GACN,IAAQ2K,EAAa3K,EAAb2K,SAEJC,EAAqBD,EAGrBA,IACFC,EAAqBD,EAASnB,QAAQ,OAAQ,MAGhD,IAAMqB,GAAkBC,EAAAA,EAAAA,WAAUF,GAGlC,OAAIC,GAAmBA,EAAgB1B,SAC9B,CACLC,OAAOL,EAAAA,EAAAA,IAA+B/I,GACtCwH,aAAc,CACZuD,aAAcF,EACdG,WAAY1F,IAKXvF,EAAwB,CAC7BC,SAAAA,EACAC,YAAAA,EACAE,aAAAA,EACAC,gBAAAA,EACAE,gBAAAA,GACAD,6BAAAA,GACAG,WAAAA,GAEJ,IACJ,IAEO4H,IAAAA,IAAY+C,GAChBtI,MAAK,SAAAwI,GAAe,OAAIzJ,EAAmByJ,EAAgB,IAC3DjE,OAAM,SAAC5L,GACN8H,EAAsC9H,EACxC,GACJ,GAAG,CAACwI,EAAiB3D,GAA8BF,EAAcC,EAAiBE,GAAiBsB,EAAoB0B,IAEvH,MAAO,CACLjB,iBAAAA,EACAC,oBAAqBgB,EACrBE,sBAAAA,EACAsB,YAAAA,GACAW,qBAAAA,GACAQ,wBAAAA,GACAhD,QAAAA,EACAE,cAAAA,EACAE,oBAAAA,EACAuD,cAAAA,GACAU,aAAAA,GACAwC,eAAAA,GACAC,gBAAAA,GACAE,mBAAAA,GACAQ,gBAAAA,GACAhG,sBAAAA,GACAhB,wBAAAA,EACAwH,iBAAAA,GAEJ,EC9faK,EAAiB,WAC5B,IAAArJ,GAAwBC,EAAAA,EAAAA,WAAS,GAAMC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAhCsJ,EAAIpJ,EAAA,GAAEqJ,EAAOrJ,EAAA,GACpBI,GAA8DL,EAAAA,EAAAA,UAAS,GAAEM,GAAAJ,EAAAA,EAAAA,GAAAG,EAAA,GAAlEkJ,EAA0BjJ,EAAA,GAAEkJ,EAAuBlJ,EAAA,GAC1DmJ,GAAgEzJ,EAAAA,EAAAA,UAAS4B,EAAAA,GAAM8H,aAAYC,GAAAzJ,EAAAA,EAAAA,GAAAuJ,EAAA,GAApFG,EAAwBD,EAAA,GAAEE,EAA2BF,EAAA,GAc5D,MAAO,CACLG,mBAAoBT,EACpBE,2BAAAA,EACAQ,sBAf4B,SAAC7R,GAC7BoR,EAAQpR,GACRsR,EAAwB,GACxBK,EAA4BjI,EAAAA,GAAM8H,YACpC,EAYEM,4BAVkC,WAClCV,GAAQ,GACRE,EAfyB,GAgBzBK,EAA4BjI,EAAAA,GAAMqI,aACpC,EAOEL,yBAAAA,EACAC,4BAAAA,EAEJ,E,oCChBMK,EAA2B,SAACC,EAAOC,GACvC,IACEC,EAKED,EALFC,KACAlH,EAIEiH,EAJFjH,SACAmH,EAGEF,EAHFE,oBACA3C,EAEEyC,EAFFzC,MACA4C,EACEH,EADFG,cAGF,GAAIF,IAASG,EAAAA,GAAiBC,sBAC5B,OAAA5O,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACKsO,GAAK,IACRO,UAAQ7O,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACHsO,EAAMO,UAAQ,IACjBC,QAAS,CACPN,KAAMO,EAAAA,eAAejD,MACrBgD,QAAShD,EAAMxC,kBAMvB,GAAIkF,IAASG,EAAAA,GAAiBK,yBAC5B,OAAAhP,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACKsO,GAAK,IACRO,UAAQ7O,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACHsO,EAAMO,UAAQ,IACjB7E,OAAQlM,IAAAA,OAASwQ,EAAMO,SAAS7E,QAAQ,SAACiF,EAAKC,GAAG,OAAKA,IAAQR,CAAa,IAC3EI,aAAS/M,MAKf,IAAMoN,GAAqBC,EAAAA,EAAAA,IAA6BZ,EAAMlH,EAAUmH,GAOxE,OAJKU,EAAmBN,WACtBM,EAAmBN,SAAWP,EAAMO,UAG/BM,CACT,EAEaE,EAAuB,SAAHtS,GAY1B,IAXL6G,EAAW7G,EAAX6G,YACA0L,EAASvS,EAATuS,UACAC,EAAexS,EAAfwS,gBACAC,EAAWzS,EAAXyS,YACA1L,EAAW/G,EAAX+G,YACA2L,EAAO1S,EAAP0S,QACAC,EAAa3S,EAAb2S,cACAC,EAAS5S,EAAT4S,UACAC,EAAY7S,EAAZ6S,aACAC,EAAiB9S,EAAjB8S,kBAAiBC,EAAA/S,EACjBgT,iCAAAA,OAAgC,IAAAD,EAAG,KAAIA,EAEvCE,GAGIC,EAAAA,EAAAA,YACF5B,EACAoB,EAAU,CAAC,GAAIL,EAAAA,EAAAA,IAA6BT,EAAAA,GAAiBuB,WAC9DC,GAAA9L,EAAAA,EAAAA,GAAA2L,EAAA,GALCI,EAAeD,EAAA,GACfE,EAAuBF,EAAA,GAMnBG,EAA+B,SAAChJ,EAAUmH,GAC9C4B,EAAwB,CACtB7B,KAAMlH,EAASwE,MAAQ6C,EAAAA,GAAiB4B,YAAc5B,EAAAA,GAAiB6B,aACvElJ,SAAAA,EACAmH,oBAAAA,GAEJ,EAIAvK,GAAiBC,EAAAA,EAAAA,WAAS,WACxB,IAAmCsM,GAC/BC,EAAAA,EAAAA,IAA4BnB,EAAiBM,EAAmB/L,GAD5D6M,0BAGR,OAAO,IAAIC,EAAAA,GAAiB,CAC1BlN,IAAK4L,EAAUuB,qBACflN,IAAK2L,EAAUwB,UACfC,MAAOzB,EAAU0B,WACjBpN,YAAAA,EACAqN,oBAAqBX,EACrBG,OAAAA,GAEJ,IAZOS,GAYL7M,EAAAA,EAAAA,GAAAH,EAAA,GAZW,GAePiN,GAAmBC,EAAAA,EAAAA,QAAO,CAAC,GAEjCD,EAAiBE,QAAQC,2BACvB9T,EAAAA,EAAAA,cAAY,SAAC+T,GAGX,OAFA/B,EAAY,4DAADgC,OAA6DC,KAAKC,UAAUH,KAEhFL,EAAOI,2BAAyBtR,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EACpCuR,GAAI,IACP5B,UAAAA,EACAC,aAAAA,IAEJ,GAAG,CAACA,EAAcD,EAAWH,EAAa0B,IAE5CC,EAAiBE,QAAQM,+BACvBnU,EAAAA,EAAAA,cAAY,SAAC+T,GAGX,OAFA/B,EAAY,gEAADgC,OAAiEC,KAAKC,UAAUH,KAEpFL,EAAOS,+BAA6B3R,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAC,EACxCuR,GAAI,IACP5B,UAAAA,EACAC,aAAAA,IAEJ,GAAG,CAACA,EAAcD,EAAWH,EAAa0B,IAE5C,IAAMU,GACJpU,EAAAA,EAAAA,aAAYM,IAAAA,UACV,SAACmL,EAAK4I,EAAcC,GAAwD,IAAvCC,EAAyB3J,UAAA/C,OAAA,QAAAtD,IAAAqG,UAAA,IAAAA,UAAA,GAC5DiI,EAAwB,CAAE7B,KAAMG,EAAAA,GAAiBqD,kBAEjD,IAAAvO,EAAwBsM,EAAmCA,IAAqCvO,EAAAA,GAAU2D,yBAAwBQ,GAAAtB,EAAAA,EAAAA,GAAAZ,EAAA,GAA3HwO,EAAKtM,EAAA,GAAEuM,EAAMvM,EAAA,GAEpB6J,EAAY,8DAADgC,OAA+DvI,EAAG,qBAAAuI,OAAoBK,EAAY,uBAAAL,OAAsBM,IAEnIZ,EAAOI,0BAA0B,CAC/Ba,eAAgBlJ,EAChB0G,UAAWkC,EACXjC,aAAckC,EACdC,0BAAAA,EACAK,kBAAmB,CAAEH,MAAAA,EAAOC,OAAAA,IAEhC,GAnIsB,KAqIrB,CAAChB,IAsBN,OApBA9R,EAAAA,EAAAA,YAAU,WAeR,OAdA8R,EAAOmB,SAEHvU,IAAAA,QAAU2R,GACZY,EAAwB,CAAE7B,KAAMG,EAAAA,GAAiBuB,WACxCR,EACTW,EAAwB,CAAE7B,KAAMG,EAAAA,GAAiB2D,aAEjDV,EACEnC,EACAE,EACAC,GAIG,WACLsB,EAAOmB,QACT,CACF,GAAG,CAACzC,EAAcgC,EAAsBnC,EAASC,EAAeC,EAAWuB,IAEpE,CACLd,gBAAAA,EACAmC,iBAAkBpB,EAAiBE,QACnChB,wBAAAA,EAEJ,C,wVC5KatK,EAAQ,CACnBqI,aAAc,eACdoE,WAAY,aACZxM,YAAa,cACb6H,YAAa,cACb4E,UAAW,eACXC,YAAa,e,YCOTC,EAA0B,SAAH5V,GAetB,IAdL6V,EAAoB7V,EAApB6V,qBACA1N,EAAOnI,EAAPmI,QACA2N,EAAc9V,EAAd8V,eACAC,EAAkB/V,EAAlB+V,mBACAC,EAAuBhW,EAAvBgW,wBACAtC,EAAM1T,EAAN0T,OACAuC,EAAYjW,EAAZiW,aACAC,EAAmBlW,EAAnBkW,oBACAC,EAAqBnW,EAArBmW,sBACAC,EAAkBpW,EAAlBoW,mBACAC,EAAoBrW,EAApBqW,qBACAC,EAAStW,EAATsW,UACAnW,EAAIH,EAAJG,KACAoW,EAAUvW,EAAVuW,WAEApP,GAA4BC,EAAAA,EAAAA,UAAS,IAAGC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAjC8F,EAAM5F,EAAA,GAAEmP,EAASnP,EAAA,GAClBoP,GAAgBhW,EAAAA,EAAAA,cAAY,SAACiW,GACjCF,GAAU,SAAAG,GAAU,SAAAlC,QAAAmC,EAAAA,EAAAA,GAAQD,IAAUC,EAAAA,EAAAA,GAAKF,GAAS,GACtD,GAAG,IAEGG,EC7BiD,SAAH7W,GAM/C,IALL6V,EAAoB7V,EAApB6V,qBACA1N,EAAOnI,EAAPmI,QACA2N,EAAc9V,EAAd8V,eACAU,EAASxW,EAATwW,UACAC,EAAazW,EAAbyW,cAGEK,EAMEjB,EANFiB,WACAC,EAKElB,EALFkB,SACAC,EAIEnB,EAJFmB,iBACAC,EAGEpB,EAHFoB,iBACAC,EAEErB,EAFFqB,uBACA1B,EACEK,EADFL,iBAGFrO,GAAoCC,EAAAA,EAAAA,UAAS,GAAEC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAxCgQ,EAAU9P,EAAA,GAAE+P,EAAa/P,EAAA,GAChCI,GAAkCL,EAAAA,EAAAA,UAAS,IAAGM,GAAAJ,EAAAA,EAAAA,GAAAG,EAAA,GAAvC4P,EAAS3P,EAAA,GAAE4P,EAAY5P,EAAA,GAC9BmJ,GAA8BzJ,EAAAA,EAAAA,WAAS,GAAK2J,GAAAzJ,EAAAA,EAAAA,GAAAuJ,EAAA,GAArC0G,EAAOxG,EAAA,GAAEyG,EAAUzG,EAAA,GACpB0G,GAAuBpD,EAAAA,EAAAA,QAAO,IAE9BqD,GAAqB5U,EAAAA,EAAAA,UAAQ,kBAAM6U,EAAAA,EAAAA,yBAAwBZ,GAAY,GAAG,GAAE,CAChFA,KAGF1U,EAAAA,EAAAA,YAAU,WACR,IAAMuV,EAAad,EAAW7J,QAAU,GAEnC6J,EAAWe,YAA6B,IAAfV,GAAoBM,EAAqBnD,UAAYsD,IACjFpB,EAAUzV,IAAAA,IAAM6W,GAAY,SAAAlR,GAAA,IAAGgM,EAAOhM,EAAPgM,QAAqB,MAAQ,CAC1DoF,aADkDpR,EAAZqR,aAEtCrF,QAAAA,EACD,KACD8E,EAAWV,EAAWS,SACtBE,EAAqBnD,QAAUsD,EAEnC,GAAG,CAACd,EAAYN,EAAWgB,EAAYL,IAEvC,IAAMa,GAAoBvX,EAAAA,EAAAA,cAAY,SAACwX,EAAIC,GACzCZ,EAAaY,EACf,GAAG,CAACZ,IAEEa,GAAoB1X,EAAAA,EAAAA,cAAY,SAAC2X,EAAQH,GAC7CjB,EAAiBiB,EACnB,GAAG,CAACjB,IAEEqB,GAAmB5X,EAAAA,EAAAA,cAAY,SAAC6X,EAAaL,GACjDf,EAAuBe,EAAI,CAAEM,KAAMD,GACrC,GAAG,CAACpB,IAEEsB,GAAqB/X,EAAAA,EAAAA,cAAY,SAACwX,GACtC,IAAMC,EAAeD,GAAMA,EAAGQ,QAAUR,EAAGQ,OAAO5Y,MAElD,IAAKkB,IAAAA,OAASmX,KAAkBnX,IAAAA,YAAcmX,GAAe,CAC3D,IAAMxF,EAAU3R,IAAAA,QAAUmX,EAAaQ,QACrC3B,GAAW4B,EAAAA,EAAAA,YAAWjB,EAAoBQ,GAC5CpC,GAAe,GACfsB,EAAc,GACd5B,EAAiBjB,0BAA0B,CACzCa,eAAgB1C,EAChBsC,2BAA2B,EAC3B4D,+BAAgCV,EAChC7C,kBAAmB,CACjBH,MAAO/M,EAAQ,GACfgN,OAAQhN,EAAQ,IAElB0Q,mBAAoB,WAClB/C,GAAe,EACjB,IAEFwB,EAAaY,EACf,CACF,GAAG,CAACnB,EAAUW,EAAoBlC,EAAkB8B,EAAcnP,EAAS2N,IAErEgD,GAAqBhW,EAAAA,EAAAA,UAAQ,kBAAMgU,GAAcA,EAAWe,YAA6B,IAAfV,CAAgB,GAAE,CAChGA,EACAL,IAGIiC,GAAetY,EAAAA,EAAAA,cAAY,WAC/B,GAAI8W,EAAS,CACX,IAAIrL,EAAM6K,EAENM,IACFnL,GAAMyM,EAAAA,EAAAA,YAAWjB,EAAoBL,IAGvC,IAAM2B,EAAgB7B,EAAa,EACnCC,EAAc4B,GACdxD,EAAiBZ,8BAA8B,CAC7CQ,eAAgBlJ,EAChBiL,WAAY6B,EACZJ,+BAAgCvB,EAChChC,kBAAmB,CACjBH,MAAO/M,EAAQ,GACfgN,OAAQhN,EAAQ,MAEjBJ,MAAK,SAAC7H,GACP,IAAA+Y,EAA6C/Y,EAAKgZ,YAA1CC,EAAUF,EAAVE,WAAYC,EAAQH,EAARG,SAAUC,EAAUJ,EAAVI,WAE9B7B,EAAW6B,EAAaD,EAAWD,GAEnC1C,EAAc1V,IAAAA,IAAMb,EAAKoZ,QAAQ,SAAA/N,GAAI,MAAK,CACxCuM,aAAcvM,EAAKgO,cAAgBhO,EAAKiO,SACxC9G,QAASnH,EAAKiO,SACf,IACH,GACF,CACF,GAAG,CACDjC,EACA/B,EACArN,EACAkP,EACAF,EACAJ,EACAW,EACAjB,IA+BF,OA5B2B3T,EAAAA,EAAAA,UAAQ,iBAAO,CACxCgW,qBAAsBA,EACtBW,YAAa3C,EAAWe,WACxBN,QAAAA,EACAR,SAAAA,EACAM,UAAAA,EACAW,kBAAAA,EACAQ,mBAAAA,EACAO,aAAAA,EACAZ,kBAAAA,EACAuB,SAAU,GACVC,SAAU1C,EACVoB,iBAAAA,EACAuB,qBAAqB,EACtB,GAAG,CACFrC,EACAuB,EACAhC,EACAC,EACAM,EACAW,EACAQ,EACAO,EACAZ,EACAlB,EACAoB,GAIJ,CDvH6BwB,CAA0C,CACnEhE,qBAAAA,EACA1N,QAAAA,EACA2N,eAAAA,EACAU,UAAAA,EACAC,cAAAA,IAGMjS,EAA4CqR,EAA5CrR,YAAa4B,EAA+ByP,EAA/BzP,eAAgBV,EAAemQ,EAAfnQ,WAErCgB,EAKIqP,GAAsB,CAAC,EAJO+D,EAAuBpT,EAAvDqT,+BACApK,EAAejJ,EAAfiJ,gBACAQ,EAAgBzJ,EAAhByJ,iBACA6J,EAAetT,EAAfsT,gBAIIC,GAAgBxZ,EAAAA,EAAAA,cAAY,SAACoK,GACjCiL,GAAe,GAEf,IAAM/J,EAAWkB,EAAOpC,GAAO6H,QAiB/B,OAfwBrI,EAAAA,EAAAA,IAAuB0B,EAAU,KAAM3F,EAAgB5B,GAC5EuD,MAAK,kBAAMiO,EAAwBkE,iBAAiB,CACnDnO,SAAAA,EACAoO,SAAUC,EAAAA,GACVtL,WAAYrK,EAAAA,GAAU4V,YAAYC,iBAClC,IACDvS,MAAK,SAACwS,GACL,GAAIxZ,IAAAA,QAAUwZ,GACZ,MAAM,IAAI9P,MAAM8P,EAAI,IAAMA,EAAI,GAAG7P,MAGnC,OADAgJ,EAAO8G,SAAS,4CAA6C,CAAEhQ,QAAS+P,IACjE5K,EAAgB,CAAEnO,GAAI+Y,GAAO9V,EAAAA,GAAUsG,aAAa0P,QAC7D,IACCnO,OAAM,SAAA5L,GAAC,OAAIsZ,EAAgBtZ,EAAE,IAG7Bga,SAAQ,WACP5E,GAAe,EACjB,GACJ,GAAG,CAACA,EAAgB7I,EAAQ7G,EAAgB5B,EAAawR,EAAyBtC,EAAQ/D,EAAiBqK,IAGrGW,GAAiCla,EAAAA,EAAAA,cAAY,SAACoK,GAClD,IAAM+P,EAAgB3N,EAAOpC,GACvBgQ,GAAQ5X,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAAQ2X,GAAa,IAAEE,YAAaF,EAAcE,aAC1DC,GAAMnE,EAAAA,EAAAA,GAAO3J,GACnB8N,EAAOlQ,GAASgQ,EAChBrE,EAAUuE,EACZ,GAAG,CAAC9N,KAEJ5K,EAAAA,EAAAA,YAAU,WAEJyX,IACF1D,GAAmB,GACnBD,GAAsB,GACtBG,EAAU,IACVD,EAAqBlW,EAAKW,UAAUlB,uCAA8C,CAAEob,YAAa/E,KAErG,GAAG,CAAC6D,EAAyB3Z,EAAM8V,EAAcE,EAAuBG,EAAWD,EAAsBD,KAEzG/T,EAAAA,EAAAA,YAAU,WACR,IAAM4Y,EAAiBla,IAAAA,OAASkM,GAAQ,SAAAqB,GAAK,OAAIA,GAASA,EAAMwM,UAAU,KAAK,GAC3EG,EAAe3S,OAAS2N,GAC1BK,EAAU,CAACnW,EAAKW,UAAUlB,uGAA+G,CAAEob,YAAa/E,MACxJE,GAAsB,IACb8E,EAAe3S,OAAS,GACjCgO,EAAU,IACVF,GAAmB,GACnBD,GAAsB,KAEtBG,EAAU,IACVF,GAAmB,GACnBD,GAAsB,IAGxB,IAEM+E,EAAcjF,EAAe,EADRrW,wDADCA,uDAG5ByW,EAAqBlW,EAAKW,UAAUoa,EAAa,CAAEC,eAAgBF,EAAe3S,OAAQ0S,YAAa/E,IACzG,GAAG,CAAC6D,EAAyB3Z,EAAM8M,EAAQgJ,EAAcE,EAAuBG,EAAWD,IAG3F,IAAM+E,GAAqB3a,EAAAA,EAAAA,cAAY,WACrC,IAAMwa,EAAiBla,IAAAA,OAASkM,GAAQ,SAAAqB,GAAK,OAAIA,GAASA,EAAMwM,UAAU,KAAK,GAE/EhF,GAAe,GAEf,IAAMuF,EAAyB9E,EAAW+E,YAAY,sBACtDD,EAAuBE,WAEvBjO,IAAAA,IACE2N,GACA,SAACO,GACC,IAAQ9I,GAAY8I,GAAO,CAAC,GAApB9I,QACR,OAAOrI,EAAAA,EAAAA,IAAuBqI,EAAS,KAAMtM,EAAgB5B,GAAa,GAAO,GAAO,GAAO,GAAO,GAAO,GAAO,GAAO,GAAO,EAAOkB,GACtIqC,MAAK,kBAAMiO,EAAwBkE,iBAAiB,CACnDnO,SAAU2G,EACVyH,SAAUC,EAAAA,GACVtL,WAAYrK,EAAAA,GAAU4V,YAAYC,iBAClC,IACDvS,MAAK,SAACwS,GACL,GAAIxZ,IAAAA,QAAUwZ,GACZ,MAAM,IAAI9P,MAAM8P,EAAI,IAAMA,EAAI,GAAG7P,MAEnC,OAAO6P,CACT,GACJ,GACA,CAAEkB,YAAaC,EAAAA,KACf3T,MAAK,SAACqI,GAEN,OADAsD,EAAO8G,SAAS,6CAA8C,CAAEpK,SAAAA,IACzDD,EAAiBC,EAAU3L,EAAAA,GAAUsG,aAAa0P,QAC3D,IAAGnO,OAAM,SAACqP,GACR3B,EAAgB2B,EAClB,IAAGjB,SAAQ,WACT5E,GAAe,GACfuF,EAAuBO,MACzB,GACF,GAAG,CAAC5F,EAAyBxR,EAAayI,EAAQ7G,EAAgBsN,EAAQsG,EAAiB7J,EAAkBoG,EAAYT,IAMzH,OAFAI,EAAoB5B,QAAUwF,EAA0BsB,OAAqBpW,GAG3EhE,EAAAA,EAAAA,KAAC6a,EAAAA,GAAgB5Y,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACfgK,OAAQA,GACJ4J,GAAkB,IACtBoD,cAAeH,EAA0Ba,EAAiCV,EAC1E6B,eAAgB,IAChBC,gBAAiB,MAGvB,EA4CAnG,EAAwBoG,aAAe,CACrClG,eAAgB/U,IAAAA,KAChBqV,mBAAoBrV,IAAAA,KACpBoV,sBAAuBpV,IAAAA,KACvBsV,qBAAsBtV,IAAAA,KACtBuV,UAAWvV,IAAAA,KACXkV,aAAc,IAGT,IAAMgG,EAA2B,CACtC/Y,MAAOtD,iBACPsc,gBAAgB,EAChBC,gBAAiB,SAAA3Z,GAAK,OACpBxB,EAAAA,EAAAA,KAAC4U,GAAuB3S,EAAAA,EAAAA,GAAA,GAClBT,GACJ,EAEJ4Z,aAAc,CACZC,MAAOzc,iBACP0c,KAAMtT,EAAMqI,aACZkL,SAAU,SACVC,cAAe,mB,WEhObC,EAAwB,SAAHzc,GAcpB,IAbL0c,EAAgB1c,EAAhB0c,iBACA5G,EAAc9V,EAAd8V,eACAS,EAAUvW,EAAVuW,WACAR,EAAkB/V,EAAlB+V,mBACAC,EAAuBhW,EAAvBgW,wBACAtC,EAAM1T,EAAN0T,OACAuC,EAAYjW,EAAZiW,aACAG,EAAkBpW,EAAlBoW,mBACAF,EAAmBlW,EAAnBkW,oBACAG,EAAoBrW,EAApBqW,qBACAF,EAAqBnW,EAArBmW,sBACAG,EAAStW,EAATsW,UACAnW,EAAIH,EAAJG,KAGEwP,EAIEoG,EAJFpG,gBACAQ,EAGE4F,EAHF5F,iBACA6J,EAEEjE,EAFFiE,gBAC8BF,EAC5B/D,EADF4G,6BAGIC,GAA2Bnc,EAAAA,EAAAA,cAAY,SAAC2K,GAC5C,IAAMyR,EAAuBtG,EAAW+E,YAAY,oBACpDuB,EAAqBtB,WAErB,IAAMuB,EAAmB9G,EAAwB+G,iBAAiB,CAChEvN,aAAcpE,EAAKiE,gBACnB8K,SAAUC,EAAAA,KAETrS,MAAK,SAAAlI,GAAK,OAAI8P,EAAgB,CAAEnO,GAAI3B,GAAS4E,EAAAA,GAAUsG,aAAauE,MAAM,IAC1EhD,OAAM,SAAA5L,GAAC,OAAIsZ,EAAgBtZ,EAAE,IAEhCoV,GAAe,GACfgH,EACGE,KAAI,WACH,IAAyBxS,GAAYY,GAAQ,CAAC,GAAtCiE,gBACRqE,EAAO8G,SAAS,0CAA2C,CAAEhQ,QAAAA,GAC/D,IACCkQ,SAAQ,WACP5E,GAAe,GACf+G,EAAqBjB,MACvB,GACJ,GAAG,CAACrF,EAAYT,EAAgBE,EAAyBrG,EAAiBqK,EAAiBtG,IAE3FvM,GAA4BC,EAAAA,EAAAA,UAAS,IAAGC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAjC8F,EAAM5F,EAAA,GAAEmP,EAASnP,EAAA,GACxBI,GAA8BL,EAAAA,EAAAA,WAAS,GAAKM,GAAAJ,EAAAA,EAAAA,GAAAG,EAAA,GAArC8P,EAAO7P,EAAA,GAAE8P,EAAU9P,EAAA,GAC1BmJ,GAAwBzJ,EAAAA,EAAAA,UAAS,GAAE2J,GAAAzJ,EAAAA,EAAAA,GAAAuJ,EAAA,GAA5BoM,EAAIlM,EAAA,GAAEmM,EAAOnM,EAAA,GACpBoM,GAA8D/V,EAAAA,EAAAA,UAAS,IAAGgW,GAAA9V,EAAAA,EAAAA,GAAA6V,EAAA,GAAnEE,EAAuBD,EAAA,GAAEE,EAA0BF,EAAA,GAC1DG,GAAoDnW,EAAAA,EAAAA,WAAS,GAAMoW,GAAAlW,EAAAA,EAAAA,GAAAiW,EAAA,GAA5DzE,EAAkB0E,EAAA,GAAEC,EAAqBD,EAAA,GAChDE,GAAsCtW,EAAAA,EAAAA,UAAS,IAAGuW,GAAArW,EAAAA,EAAAA,GAAAoW,EAAA,GAA3CE,EAAWD,EAAA,GAAEE,EAAcF,EAAA,GAClCG,GAA4B1W,EAAAA,EAAAA,UAAS,CAAC,GAAE2W,GAAAzW,EAAAA,EAAAA,GAAAwW,EAAA,GAAjCE,GAAMD,EAAA,GAAEE,GAASF,EAAA,IAExB1b,EAAAA,EAAAA,YAAU,WAEJyX,IACF1D,GAAmB,GACnBD,GAAsB,GACtBG,EAAU,IACVD,EAAqBlW,EAAKW,UAAUlB,uCAA8C,CAAEob,YAAa/E,KAErG,GAAG,CAAC6D,EAAyB3Z,EAAM8V,EAAcE,EAAuBG,EAAWD,EAAsBD,KAEzG/T,EAAAA,EAAAA,YAAU,WACR,IAAM4Y,EAAiBla,IAAAA,OAASkM,GAAQ,SAAAqB,GAAK,OAAIA,GAASA,EAAMwM,UAAU,KAAK,GAC3EG,EAAe3S,OAAS2N,GAC1BK,EAAU,CAACnW,EAAKW,UAAUlB,uGAA+G,CAAEob,YAAa/E,MACxJE,GAAsB,IACb8E,EAAe3S,OAAS,GACjCgO,EAAU,IACVH,GAAsB,KAEtBG,EAAU,IACVH,GAAsB,IAGxB,IAEM+E,EAAcjF,EAAe,EADRrW,wDADCA,uDAG5ByW,EAAqBlW,EAAKW,UAAUoa,EAAa,CAAEC,eAAgBF,EAAe3S,OAAQ0S,YAAa/E,IACzG,GAAG,CAAC6D,EAAyB3Z,EAAM8M,EAAQgJ,EAAcE,EAAuBG,EAAWD,IAG3F,IAAM+E,IAAqB3a,EAAAA,EAAAA,cAAY,WACrC,IAAMwa,EAAiBla,IAAAA,OAASkM,GAAQ,SAAAqB,GAAK,OAAIA,GAASA,EAAMwM,UAAU,KAAK,GAE/EhF,GAAe,GAEf,IAAM+G,EAAuBtG,EAAW+E,YAAY,oBACpDuB,EAAqBtB,WAErBjO,IAAAA,IACE2N,GACA,SAACO,GACC,IAAQha,GAAOga,GAAO,CAAC,GAAfha,GACR,OAAOwU,EAAwB+G,iBAAiB,CAAEvN,aAAchO,EAAI2Y,SAAUC,EAAAA,IAChF,GACA,CAAEqB,YAAaC,EAAAA,KAEd3T,MAAK,SAACqI,GAEL,OADAsD,EAAO8G,SAAS,2CAA4C,CAAEpK,SAAAA,IACvDD,EAAiBC,EAAU3L,EAAAA,GAAUsG,aAAauE,MAC3D,IACChD,OAAM,SAACqP,GACN3B,EAAgB2B,EAClB,IACCjB,SAAQ,WACP5E,GAAe,GACf+G,EAAqBjB,MACvB,GACJ,GAAG,CAAC5F,EAAyB/I,EAAQyG,EAAQsG,EAAiB7J,EAAkBoG,EAAYT,IAM5F,OAFAI,EAAoB5B,QAAUwF,EAA0BsB,QAAqBpW,GAG3EhE,EAAAA,EAAAA,KAACkd,EAAAA,GAAcjb,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACTyZ,GAAgB,IACpB5C,wBAAyBA,EACzB8C,yBAA0B9C,EAA0B/Y,IAAAA,KAAS6b,EAC7Dd,eAAgB,IAChBC,gBAAiB,IACjB9O,OAAQA,EACRuJ,UAAWA,EACXe,QAASA,EACTC,WAAYA,EACZyF,KAAMA,EACNC,QAASA,EACTG,wBAAyBA,EACzBC,2BAA4BA,EAC5BxE,mBAAoBA,EACpB2E,sBAAuBA,EACvBG,YAAaA,EACbC,eAAgBA,EAChBG,OAAQA,GACRC,UAAWA,KAGjB,EAqCAxB,EAAsBT,aAAe,CACnClG,eAAgB/U,IAAAA,KAChBqV,mBAAoBrV,IAAAA,KACpBoV,sBAAuBpV,IAAAA,KACvBsV,qBAAsBtV,IAAAA,KACtBuV,UAAWvV,IAAAA,KACXkV,aAAc,IAGT,IAAMkI,EAAyB,CACpCjb,MAAOtD,eACPsc,gBAAgB,EAChBC,gBAAiB,SAAA3Z,GAAK,OACpBxB,EAAAA,EAAAA,KAACyb,GAAqBxZ,EAAAA,EAAAA,GAAA,GAChBT,GACJ,EAEJ4Z,aAAc,CACZC,MAAOzc,eACP0c,KAAMtT,EAAMyM,WACZ8G,SAAU,eACVC,cAAe,iB,iFC/MN4B,EAAuB,WAAH,MAAU,CACzCC,qBAAsB,CACpB/e,QAAS,OACTgf,cAAe,SACfC,SAAU,GAEZC,UAAW,CACTC,cAAe,IAEjBC,gBAAiB,CACfC,WAAY,GACZrf,QAAS,OACTgf,cAAe,SACfC,SAAU,GAEb,ECOKK,EAAa,IAAIC,OAAO,wDA6BjBC,EAAkB,SAAHpY,GAWrB,IAVLuG,EAAMvG,EAANuG,OACA8R,EAAWrY,EAAXqY,YACAC,EAAmBtY,EAAnBsY,oBACAC,EAAkBvY,EAAlBuY,mBACAlI,EAAQrQ,EAARqQ,SACAC,EAAgBtQ,EAAhBsQ,iBACAlL,EAAapF,EAAboF,cACA4H,EAAMhN,EAANgN,OACAwD,EAAsBxQ,EAAtBwQ,uBACAD,EAAgBvQ,EAAhBuQ,iBAEMiI,GACJpc,EAAAA,EAAAA,UAAQ,kBAAOiU,KAAaoI,EAAAA,EAAAA,YAAWpI,EAAS,GAAE,CAACA,IAC/C5W,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aACxBwQ,GAAkCzJ,EAAAA,EAAAA,WAAS,GAAK2J,GAAAzJ,EAAAA,EAAAA,GAAAuJ,EAAA,GAAzC4I,EAAS1I,EAAA,GAAEqO,EAAYrO,EAAA,GAC9BoM,GAA8B/V,EAAAA,EAAAA,UAAS,IAAGgW,GAAA9V,EAAAA,EAAAA,GAAA6V,EAAA,GAAnCkC,EAAOjC,EAAA,GAAEkC,EAAUlC,EAAA,GAC1BG,GAAwCnW,EAAAA,EAAAA,UAAS,IAAGoW,GAAAlW,EAAAA,EAAAA,GAAAiW,EAAA,GAA7CgC,EAAY/B,EAAA,GAAEgC,EAAehC,EAAA,GAC9Bld,GAAUC,EAAAA,EAAAA,kBAAiB6d,GAE3BqB,GAA0Bhf,EAAAA,EAAAA,cAAY,SAACif,GAC5B,mBAAXA,EACFF,EAAgBrf,EAAKW,UAAUlB,2FACX,kBAAX8f,EACTF,EAAgBrf,EAAKW,UAAUlB,uDACX,SAAX8f,GACTF,EAAgBrf,EAAKW,UAAUlB,iDAEnC,GAAG,CAAC4f,EAAiBrf,IAEfwf,GAAmBlf,EAAAA,EAAAA,cAAY,SAACyL,GACpCkT,GAAa,GAEbL,EAAY7S,GAAKnE,MAAK,SAAC2X,GACrBD,EAAwBC,GAExBhM,EAAO8G,SAAS,8BAChB4E,GAAa,EACf,GACF,GAAG,CAACA,EAAcL,EAAaU,EAAyB/L,KAExDrR,EAAAA,EAAAA,YAAU,WACH6c,GACHS,EAAiB5I,EAErB,GAAG,KAEH1U,EAAAA,EAAAA,YAAU,WACRid,EAAW,uBAAD7K,OAAwBwK,EAAmBW,OACvD,GAAG,CAACX,EAAmBW,QAEvB,IAAMC,GAAkBpf,EAAAA,EAAAA,cAAY,SAACwX,EAAI6H,GACvCR,EAAWQ,EACb,GAAG,CAACR,IAEES,GAAStf,EAAAA,EAAAA,cAAY,WACzB,IAAMif,EAASL,EAAQW,MAAMpB,GAGzBc,GAAUA,EAAO,IACnBF,EAAgB,IAChBJ,GAAa,GACbJ,EAAoB,CAAC,CAAEiB,IAAK,UAAWL,MAAOF,EAAO,MAAO3X,MAAK,SAACmY,GAChET,EAAwBS,GACxBd,GAAa,EACf,KAEAI,EAAgBrf,EAAKW,UAAUlB,6EAEnC,GAAG,CAAC4f,EAAiBR,EAAqBK,EAASlf,EAAMsf,IAEnDxF,GAAgBxZ,EAAAA,EAAAA,cAAY,SAACoK,GACjC,IAAMsV,EAAoBlT,EAAOpC,GAEjC6I,EAAO8G,SAAS,+BAEhB1O,EAAcqU,EAAkBC,IAClC,GAAG,CAACnT,EAAQnB,EAAe4H,IAErByE,GAAoB1X,EAAAA,EAAAA,cAAY,SAAC2X,EAAQH,GAC7CjB,EAAiBiB,GACjB0H,EAAiBvH,EACnB,GAAG,CAACpB,EAAkB2I,IAEhBU,GAAY5f,EAAAA,EAAAA,cAAY,SAACwX,GACd,UAAXA,EAAGlT,KACLgb,EAAO9H,EAEX,GAAG,CAAC8H,IAEJ,OACE1e,EAAAA,EAAAA,MAAA,OAAKC,UAAWgf,IAAW,oBAAqBhgB,EAAQoe,iBAAiBtd,SAAA,CAErE8d,IACEle,EAAAA,EAAAA,KAACuf,EAAAA,EAAe,CACdpI,kBAAmBA,EACnBwB,SAAU1C,EACVoB,iBAAkBnB,KAIrBgI,IACD7d,EAAAA,EAAAA,MAAA,OAAKC,UAAWgf,IAAWhgB,EAAQ+d,qBAAsB,0BAA0Bjd,SAAA,EAE9EqY,IAAazY,EAAAA,EAAAA,KAACwf,EAAAA,UAAS,CACtBnE,MAAOkD,EACP1f,MAAOwf,EACPoB,UAAW,CAAElE,SAAU,UACvBjb,UAAWgf,IAAWhgB,EAAQke,UAAW,OAAQ,cACjDuB,OAAQA,EACRW,SAAUb,EACVQ,UAAWA,EACXM,OAAQ,CAAEC,WAAY,CAAE1L,MAAO,QAIjCuE,GAAYzY,EAAAA,EAAAA,KAAC6f,EAAAA,EAAmB,CAACC,eAAa,EAACC,YAAa,CAAEC,UAAW,WACzEhgB,EAAAA,EAAAA,KAACigB,EAAAA,EAAiB,CAChBhU,OAAQA,EACRyM,SAAU,GACVwH,eAAgBngB,IAAAA,KAChBkZ,cAAeA,EACfkH,eAAe,SAO7B,EAqBArC,EAAgB9C,aAAe,CAC7BjF,SAAU,GACVkI,mBAAoB,CAAC,EACrBvL,OAAQ,CACN8G,SAAUzZ,IAAAA,MAEZkW,iBAAkB,KAClBC,uBAAwB,MCrM1B,IAAMkK,EAAyB,SAAHphB,GAOrB,IANLqhB,EAAiBrhB,EAAjBqhB,kBACAvL,EAAc9V,EAAd8V,eACAD,EAAoB7V,EAApB6V,qBACAE,EAAkB/V,EAAlB+V,mBACAC,EAAuBhW,EAAvBgW,wBACAtC,EAAM1T,EAAN0T,OAEQ/J,EAA0B0X,EAA1B1X,sBACAgG,EAAqCoG,EAArCpG,gBAAiBqK,EAAoBjE,EAApBiE,gBAGvBjD,EAMElB,EANFkB,SACAC,EAKEnB,EALFmB,iBACAC,EAIEpB,EAJFoB,iBACAC,EAGErB,EAHFqB,uBACA1S,EAEEqR,EAFFrR,YACA4B,EACEyP,EADFzP,eAGFkb,EDPiD,SAAHthB,GAAmC,IAA7B2J,EAAqB3J,EAArB2J,sBACpDxC,GAA4BC,EAAAA,EAAAA,UAAS,IAAGC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAjC8F,EAAM5F,EAAA,GAAEmP,EAASnP,EAAA,GACxBI,GAAoDL,EAAAA,EAAAA,UAAS,CAAEwY,MAAO,KAAKlY,GAAAJ,EAAAA,EAAAA,GAAAG,EAAA,GAApEwX,EAAkBvX,EAAA,GAAE6Z,EAAqB7Z,EAAA,GAmBhD,OAjBAiC,EAAsB6X,WAAU,SAACC,GAC/B,GAAkB,SAAdA,EAAsB,CACxBjL,GAASI,EAAAA,EAAAA,GACJjN,EAAsBzJ,KAAK0B,KAAI,SAAA4Z,GAAG,OAAAvY,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GAChCuY,GAAG,IACN1D,aAAc0D,EAAI4E,KAAG,MAIzB,IAAMsB,EAAwB/X,EAAsBgY,oBAAoB,GAEpED,GACFH,EAAsBG,EAE1B,CACF,IAEO,CACLzU,OAAAA,EACAgS,mBAAAA,EAEJ,CCjBI2C,CAAoC,CAAEjY,sBAAAA,IADhCsD,EAAMqU,EAANrU,OAAQgS,EAAkBqC,EAAlBrC,mBAGVF,GACJte,EAAAA,EAAAA,cAAY,SAAAyL,GAAG,OAAIvC,EAAsBoV,YAAY7S,EAAI,GAAE,CAACvC,IAExDqV,GACJve,EAAAA,EAAAA,cAAY,SAAAohB,GAAI,OAAIlY,EAAsBqV,oBAAoB6C,EAAK,GAAE,CAAClY,IAElEsQ,GAAgBxZ,EAAAA,EAAAA,cAAY,SAACyL,GACjC4J,GAAe,IAESzL,EAAAA,EAAAA,IAAuB6B,EAAK,KAAM9F,EAAgB5B,GACvEuD,MAAK,kBAAMiO,EAAwBkE,iBAAiB,CACnDnO,SAAUG,EACViO,SAAUC,EAAAA,GACVtL,WAAYrK,EAAAA,GAAU4V,YAAYyH,iBAClC,IACD/Z,MAAK,SAAAvG,GAAE,OAAImO,EAAgB,CAAEnO,GAAAA,GAAMiD,EAAAA,GAAUsG,aAAagX,OAAO,IACjEzV,OAAM,SAAA5L,GAAC,OAAIsZ,EAAgBtZ,EAAE,IAG7Bsc,KAAI,SAACxB,GACJ,GAAIA,GAAOA,EAAIjP,aACbmH,EAAO8G,SAAS,sDAAD/F,OAAuD+G,EAAIjP,mBACrE,CACL,IAAY/B,GAAYgR,GAAO,CAAC,GAAxBha,GACRkS,EAAO8G,SAAS,2CAA4C,CAAEhQ,QAAAA,GAChE,CACF,IACCkQ,SAAQ,WACP5E,GAAe,EACjB,GACJ,GAAG,CAACA,EAAgB1P,EAAgB5B,EAAawR,EAAyBrG,EAAiBqK,EAAiBtG,IAE5G,OACE1S,EAAAA,EAAAA,KAAC8d,EAAe,CACd7R,OAAQA,EACRgS,mBAAoBA,EACpBnT,cAAemO,EACf8E,YAAaA,EACbC,oBAAqBA,EACrBjI,SAAUA,EACVC,iBAAkBA,EAClBC,iBAAkBA,EAClBC,uBAAwBA,EACxBxD,OAAQA,GAGd,EA+BA0N,EAAuBpF,aAAe,CACtC,EAEO,IAAMgG,EAA0B,CACrC9e,MAAOtD,SACPsc,gBAAgB,EAChBC,gBAAiB,SAAA3Z,GAAK,OACpBxB,EAAAA,EAAAA,KAACogB,GAAsBne,EAAAA,EAAAA,GAAA,GACjBT,GACJ,EAEJ4Z,aAAc,CACZC,MAAOzc,SACP0c,KAAMtT,EAAMC,YACZsT,SAAU,SACVC,cAAe,iB,sDCvGbyF,EAAuB,SAACzf,GAC5B,IACEuT,EAIEvT,EAJFuT,mBAAoBC,EAIlBxT,EAJkBwT,wBAAyBE,EAI3C1T,EAJ2C0T,oBAAqBJ,EAIhEtT,EAJgEsT,eAClEM,EAGE5T,EAHF4T,mBAAoBD,EAGlB3T,EAHkB2T,sBACpBF,EAEEzT,EAFFyT,aAAcI,EAEZ7T,EAFY6T,qBAAsBC,EAElC9T,EAFkC8T,UACpCnW,EACEqC,EADFrC,KAAMoW,EACJ/T,EADI+T,WAAY7C,EAChBlR,EADgBkR,OAAQ9M,EACxBpE,EADwBoE,IAAKG,EAC7BvE,EAD6BuE,YAAamb,EAC1C1f,EAD0C0f,aAEtCC,GAAmCpM,GAAsB,CAAC,GAA1DoM,+BAERC,GAAiDC,EAAAA,EAAAA,IAAyB,CACxEC,YAAatM,EAAyB7V,KAAAA,EAAMuT,OAAAA,EAAQwO,aAAAA,IAD9CjH,EAAcmH,EAAdnH,eAAgBsH,EAAMH,EAANG,OAAWC,GAAS7f,EAAAA,EAAAA,GAAAyf,EAAAxf,GAKtC6f,EAAsBxM,EAnBC,MAmBgEA,GAE7F5T,EAAAA,EAAAA,YAAU,WACR,IAAMqgB,EAAiBzH,GAAkBA,EAAe3S,QAAW,EACnE,GAAIoa,EAAgBD,EAClBnM,EAAU,CAACnW,EAAKW,UArBQlB,uGAqByB,CAAEob,YAAayH,MAChEtM,GAAsB,GACtBE,EAAqB,QAChB,CACLC,EAAU,IACVH,GAAsB,GACtBC,EAAmBsM,EAAgB,GACnC,IAAMxH,EAAcuH,EAAsB,EA7BrB7iB,wDADCA,uDA+BtByW,EAAqBlW,EAAKW,UAAUoa,EAAa,CAAEC,eAAgBuH,EAAe1H,YAAayH,IACjG,CACF,GAAG,CAACA,EAAqBtiB,EAAM8a,EAAgB9E,EAAuBG,EAAWD,EAAsBD,IAEvG,IAAMuM,GAAkBliB,EAAAA,EAAAA,cAAY,SAACmiB,GACnC,GAAIA,EAAUta,OAAS,EAMrB,GALwBvH,IAAAA,KAAO6hB,GAAW,SAACjH,GAEzC,MAAqB,kCADH5a,IAAAA,IAAM4a,EAAK,CAAC,OAAQ,QAAS,EAAG,QAAS,GAE7D,IAEqB,CACnB,IAAMkH,GAAaC,EAAAA,EAAAA,IAA6Blc,EAAK8M,GACrD4C,EAAU,CAACnW,EAAKW,UAAUlB,6IAAoJ,CAAEC,MAAOgjB,KACzL,KAAO,CACL,IAAME,GACJ1hB,EAAAA,EAAAA,MAAA,QAAAD,SAAA,CACIjB,EAAKW,UAAUlB,0DACjBoB,EAAAA,EAAAA,KAACgiB,EAAAA,GAAa,CAACC,SAAU9iB,EAAKW,UAAUlB,8DAAqEsjB,MAAM,gBAGvH5M,EAAU,CAACyM,GACb,CAEJ,GAAG,CAACnc,EAAKzG,EAAMuT,EAAQ4C,IAEjB6M,GAAwB1iB,EAAAA,EAAAA,cAAY,WAExC,GAAIM,IAAAA,QAAUka,IAAmBA,EAAe3S,OAASma,EACvD,OAAOnV,IAAAA,WAGT8V,EAAAA,EAAAA,IAAmBjB,EAAgCkB,EAAAA,GAAmBC,QACtE5P,EAAO8G,SAAS,sEAAuE,CAAElS,OAAQ2S,EAAe3S,SAChHoL,EAAO8G,SAAS,2BAA4B,CAC1C+I,UAAWtI,EAAerZ,KAAI,SAAA4hB,GAAC,OAAIA,EAAE1L,YAAY,IAAE2L,KAAK,KACxDjY,MAAOyP,EAAe3S,OACtBob,cAAc,EACdnB,OAAAA,IAGFzM,GAAe,GAEf,IAAM6N,EAAsBpN,EAAW+E,YAAY,mBACnDqI,EAAoBpI,WAEpB,IAAMqH,EAAY,GAClB,OAAOtV,IAAAA,IACL2N,GACA,SAACO,GACC,IAAsBzP,EAA0ByP,EAAxC1D,aAAwB8L,EAAgBpI,EAAhBoI,YAQhC,OANAlQ,EAAO8G,SAAS,kBAAmB,CACjCzO,SAAAA,EACAwW,OAAAA,EACAqB,YAAaA,GAAeC,EAAAA,GAAcC,QAGrC9N,EAAwBkE,iBAAiB,CAC9CnO,SAAAA,EAAU+C,WAAY8U,IAAgBC,EAAAA,GAAcE,QAAUtf,EAAAA,GAAU4V,YAAY2J,qBAAuBvf,EAAAA,GAAU4V,YAAY4J,cAChI3X,OAAM,SAACqP,GACRiH,EAAUtS,KAAKqL,EACjB,GACF,GACA,CAAEF,YAAaC,EAAAA,KACf3T,MAAK,SAACmc,GACN,IAAM9T,EAAWrP,IAAAA,QAAUmjB,GAAU,IACrC,OAAKnjB,IAAAA,QAAUqP,GAcR9C,IAAAA,WAbLoG,EAAO8G,SAAS,2DAEhB9G,EAAO8G,SAAS,wBAAyB,CACvCpK,SAAUA,EAASqT,KAAK,KACxBjY,MAAO4E,EAAS9H,OAChBob,cAAc,EACdnB,OAAAA,IAEEL,GAAgBA,EAAaiC,2BAC/BjC,EAAaiC,0BAA0B,CAAE/T,SAAAA,EAAUmS,OAAAA,IAE9CxM,EAAmB5F,iBAAiBC,EAAU3L,EAAAA,GAAUsG,aAAakZ,aAGhF,IAAGvJ,SAAQ,WACT5E,GAAe,GACf6M,EAAgBC,GAChBe,EAAoB/H,MACtB,GACF,GAAG,CAACuG,EAAgCpM,EAAoBC,EAAyByM,EAAqBE,EAAiBjP,EAAQ6C,EAAY0E,EAAgBnF,EAAgByM,EAAQL,IAInL,OAFAhM,EAAoB5B,QAAU6O,GAG5BniB,EAAAA,EAAAA,KAACojB,EAAAA,IAAgCnhB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CAC/B9C,KAAMA,EACNoiB,OAAQA,EACR7O,OAAQA,GACJ8O,GAAS,IACbL,+BAAgCA,EAChCpb,YAAaA,EACbmb,aAAcA,IAGpB,EA+BAD,EAAqBjG,aAAe,CAClClG,eAAgB/U,IAAAA,KAChBqV,mBAAoBrV,IAAAA,KACpBoV,sBAAuBpV,IAAAA,KACvBsV,qBAAsBtV,IAAAA,KACtBuV,UAAWvV,IAAAA,KACXkV,aA3K6B,GA4K7BlP,YAAa,CAAC,EACdmb,aAAc,MAGT,IAAMmC,EAAwB,CACnCnhB,MAAOtD,kBACPsc,gBAAgB,EAChBC,gBAAiB,SAAA3Z,GAAK,OAAIxB,EAAAA,EAAAA,KAACihB,GAAoBhf,EAAAA,EAAAA,GAAA,GAAKT,GAAS,EAC7D8hB,sBAAuB,SAAA9hB,GAAK,OAAIxB,EAAAA,EAAAA,KAACujB,EAAAA,GAAc,CAACpkB,KAAMqC,EAAMrC,MAAQ,G,wBCtMzDqkB,EAAuB,WAAH,MAAU,CACzCC,eAAgB,CACdnlB,QAAS,OACTgf,cAAe,SACfC,SAAU,EACVI,WAAY,IAEd+F,0BAA2B,CACzBplB,QAAS,OACTgf,cAAe,SACfC,SAAU,EACVoG,UAAW,EACXC,UAAW,SACXC,UAAW,OACX7D,UAAW,GAEX,4EAA6E,CAC3E8D,QAAS,IAGd,EAEYC,EAAwB,WAAH,MAAU,CAC1C,UAAW,CACT,uCAAwC,CACtC,0BAA2B,CACzBC,SAAU,OAIhBC,yBAA0B,CACxB,+BAAgC,CAC9BC,YAAa,EACbC,WAAY,EACZnE,UAAW,EAEX,0BAA2B,CACzB9L,MAAO,KAGT,qCAAsC,CACpCkQ,SAAU,KAGZ,qCAAsC,CACpCA,SAAU,KAEZ,wCAAyC,CACvCA,SAAU,KAGZ,uCAAwC,CACtCA,SAAU,IACVJ,SAAU,KAGZ,4BAA6B,CAC3BA,SAAU,KAEZ,wBAAyB,CACvBA,SAAU,MAGd,kCAAmC,CACjChE,UAAW,GACXqE,SAAU,aAGf,E,oCC9DKC,GAAsB,SAAHtlB,GAMlB,IALLulB,EAAiBvlB,EAAjBulB,kBACAC,EAAoBxlB,EAApBwlB,qBACAC,EAAczlB,EAAdylB,eACAC,EAAS1lB,EAAT0lB,UACAvlB,EAAIH,EAAJG,KAEAgH,GAA0CC,EAAAA,EAAAA,WAAS,GAAMC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAlDwe,EAAate,EAAA,GAAEue,EAAgBve,EAAA,GACtCI,GAAwCL,EAAAA,EAAAA,UAAS,IAAGM,GAAAJ,EAAAA,EAAAA,GAAAG,EAAA,GAA7C8E,EAAY7E,EAAA,GAAEme,EAAene,EAAA,GAE9Boe,EAAqB,WACzBD,EAAgB,IAChBL,GAAqB,GACrBI,GAAiB,EACnB,EAwBA,OAAOL,GACLvkB,EAAAA,EAAAA,KAAC+kB,EAAAA,EAAa,CACZC,YAAaT,EACbriB,MAAO/C,EAAKW,UAAUlB,mDACtBqmB,UAAW1Z,EACX2Z,cAAe/lB,EAAKW,UAAUlB,MAC9BumB,aAAchmB,EAAKW,UAAUlB,UAC7BwmB,eA7Ba,WACfR,GAAiB,GACjBH,IAAiB1d,MAAK,WACpB2d,IACAI,GACF,IAAGxZ,OAAM,SAAC/B,GACR,IAAQ8b,GAAW9b,GAAY,CAAC,GAAxB8b,OAES,iBADLtlB,IAAAA,MAAQslB,IAAW,CAAC,GACxB3b,KACNmb,EAAgB1lB,EAAKW,UAAUlB,sGAE/BimB,EAAgB1lB,EAAKW,UAAUlB,wEAEnC,IAAG8a,SAAQ,WACTkL,GAAiB,EACnB,GACF,EAcIU,cAZa,WACfR,GACF,EAWIS,YAAaZ,EACb5E,YAAa,CAAEyF,OAAQ,KAASC,WAAY,2BAA4BC,aAAc,gBAEtF,IACN,EChCMC,GAAe,CAAEC,YAAa,QAIvBC,GAAyB,SAACrkB,GACrC,IACEskB,EAsBEtkB,EAtBFskB,aACAC,EAqBEvkB,EArBFukB,4BACA5E,EAoBE3f,EApBF2f,+BACAzO,EAmBElR,EAnBFkR,OACAsT,EAkBExkB,EAlBFwkB,WACA7mB,EAiBEqC,EAjBFrC,KACAwP,EAgBEnN,EAhBFmN,gBACAsX,EAeEzkB,EAfFykB,qBACAC,EAcE1kB,EAdF0kB,sBACA5E,EAaE9f,EAbF8f,YACAlM,EAYE5T,EAZF4T,mBACAjG,EAWE3N,EAXF2N,iBACA+F,EAUE1T,EAVF0T,oBACAD,EASEzT,EATFyT,aACAK,EAQE9T,EARF8T,UACAH,EAOE3T,EAPF2T,sBACAE,EAME7T,EANF6T,qBACA8Q,EAKE3kB,EALF2kB,iBACAC,EAIE5kB,EAJF4kB,oBACAC,EAGE7kB,EAHF6kB,6BACAC,EAEE9kB,EAFF8kB,4BACAC,EACE/kB,EADF+kB,qBAII9E,EAAsBxM,EA7BC,MA6BgEA,GAG7F5T,EAAAA,EAAAA,YAAU,WACRgU,EAAqBlW,EAAKW,UAAUlB,uCAA8C,CAAEob,YAAayH,IACnG,GAAG,CAACtiB,EAAMsiB,EAAqBpM,IAE/B,IAAM/V,GAAUC,EAAAA,EAAAA,kBAAiBwkB,GACjC5d,GAA4CC,EAAAA,EAAAA,UAAS,IAAGC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAjD8T,EAAc5T,EAAA,GAAEmgB,EAAiBngB,EAAA,GACxCI,GAA8CL,EAAAA,EAAAA,UAAS,IAAGM,GAAAJ,EAAAA,EAAAA,GAAAG,EAAA,GAAnDggB,EAAe/f,EAAA,GAAEggB,EAAkBhgB,EAAA,GAC1CmJ,GAA0CzJ,EAAAA,EAAAA,UAAS,GAAE2J,GAAAzJ,EAAAA,EAAAA,GAAAuJ,EAAA,GAA9C6R,EAAa3R,EAAA,GAAE4W,EAAgB5W,EAAA,GACtCoM,GAA4C/V,EAAAA,EAAAA,WAAS,GAAMgW,GAAA9V,EAAAA,EAAAA,GAAA6V,EAAA,GAApDyK,EAAcxK,EAAA,GAAEyK,EAAiBzK,EAAA,IAExC/a,EAAAA,EAAAA,YAAU,WACJulB,IACFE,EAAAA,EAAAA,IAAiC3F,EAAgC4F,EAAAA,GAA8BzE,OAAQD,EAAAA,GAAmBC,OAE9H,GAAG,CAACnB,EAAgCyF,IAEpC,IAAMI,GAAavnB,EAAAA,EAAAA,cAAY,WAC7BonB,GAAkB,kBAAM,CAAI,GAC9B,GAAG,IAEGI,IAAgBxnB,EAAAA,EAAAA,cAAY,WAChC,GAAIiiB,GAAiBD,EAAqB,CACxC,IAAMyF,EAAoBnnB,IAAAA,QAAUA,IAAAA,IAAM0mB,GAAiB,SAAAU,GAAM,OAAIA,EAAOC,MAAM,KAC5EC,EAAuBtnB,IAAAA,IAAMmnB,GAAmB,SAAAloB,GAAK,OAAAA,EAAFwB,EAAW,IAC9D8mB,EAAmBvnB,IAAAA,IAAMka,GAAgB,SAAAvU,GAAK,OAAAA,EAAFlF,EAAW,IACvD+mB,EAAiCxnB,IAAAA,IAAMka,GAAgB,SAAArS,GAAmB,OAAAA,EAAhB4f,gBAAuC,IACjGC,EAAc,GAAAhU,QAAAmC,EAAAA,EAAAA,GACfyR,IAAoBzR,EAAAA,EAAAA,GACpB0R,IAGLnY,EAAiBsY,GACjB/U,EAAO8G,SACL,uDACA,CAAEpK,SAAUqY,EAAehF,KAAK,KAAMiF,uBAAwBH,EAA+B9E,KAAK,KAAMnb,OAAQmgB,EAAengB,UAEjI8a,EAAAA,EAAAA,IAAmBjB,EAAgCkB,EAAAA,GAAmBC,OACxE,CACF,GAAG,CAACmE,EAAiBxM,EAAgB9K,EAAkBuS,EAAeD,EAAqB/O,EAAQyO,IAEnGjM,EAAoB5B,QAAU2T,GAE9B,IAAA1K,IAA4BnW,EAAAA,EAAAA,eAASpC,GAAUwY,IAAAlW,EAAAA,EAAAA,GAAAiW,GAAA,GAAxCoL,GAAMnL,GAAA,GAAEoL,GAASpL,GAAA,GAClBqL,IAAgBpoB,EAAAA,EAAAA,cAAY,kBAAMmoB,GAAU,CAAC,EAAE,GAAE,IACjDE,GDlCmC,SAAHlgB,GAA0C,IAApC0Z,EAAW1Z,EAAX0Z,YAAaniB,EAAIyI,EAAJzI,KAAM4oB,EAASngB,EAATmgB,UAC/DlY,GAAkDzJ,EAAAA,EAAAA,WAAS,GAAM2J,GAAAzJ,EAAAA,EAAAA,GAAAuJ,EAAA,GAA1D0U,EAAiBxU,EAAA,GAAEyU,EAAoBzU,EAAA,GACxCiY,GAAkB3U,EAAAA,EAAAA,QAAO,MA+B/B,MAAO,CACL4U,KA9BW,SAAC1d,GACZyd,EAAgB1U,QAAU/I,EAC1Bia,GAAqB,EACvB,EA4BE0D,QA1BazoB,EAAAA,EAAAA,cAAY,WAezB,OAAQO,EAAAA,EAAAA,KAACskB,GAAmB,CAC1BC,kBAAmBA,EACnBC,qBAAsBA,EACtBC,eAjBuB,WACvB,GAAIuD,EAAgB1U,QAAS,CAC3B,IAAArK,EAAyC+e,EAAgB1U,SAAW,CAAC,EAAzD6U,EAAOlf,EAAXzI,GAAa4nB,EAAenf,EAAfmf,gBACrB,OAAO9G,EAAY+G,YAAY,CAAEF,QAAAA,EAASC,gBAAAA,GAC5C,CACA,OAAO9b,IAAAA,SACT,EAYEoY,UAVwB,WACpBqD,GACFA,EAAUC,EAAgB1U,QAE9B,EAOEnU,KAAMA,GAEV,GAAG,CAACmiB,EAAaniB,EAAM4oB,EAAWxD,IAMpC,CCHmC+D,CAA4B,CAC3DhH,YAAAA,EAAaniB,KAAAA,EAAM4oB,UAAWF,KAG1BU,IAAsB9oB,EAAAA,EAAAA,cAAY,SAAAwJ,GAA2B,IAAxBsB,EAAItB,EAAJsB,KAAMie,EAAUvf,EAAVuf,WACzCC,EAAU,WACd/V,EAAO8G,SAAS,gCAAiC,CAAEhQ,QAASe,GAAQA,EAAK/J,KACrEmO,GACFA,EAAgBpE,EAEpB,EAEM8U,EAAY,SAACqJ,GACbA,EAAMC,UAAYA,EAAAA,QAAQC,OAC5BH,GAEJ,EAMA,OACEzoB,EAAAA,EAAAA,KAAC6oB,EAAAA,GAAmC,CAClCte,KAAMA,EACNpL,KAAMA,EACN2pB,gBAAiBN,EACjBO,kBAVsB,SAAAC,GAAc,OACtChpB,EAAAA,EAAAA,KAAA,OAAKyoB,QAASA,EAASQ,KAAK,SAASC,SAAU,EAAG7J,UAAWA,EAAW8J,MAAO,CAAEjV,MAAO,OAAQC,OAAQ,QAAS/T,SAC9G4oB,GACG,EAQJI,UAAWhD,EACXiD,SAAUvB,GAAyBG,MAGzC,GAAG,CAAC7B,EAAqBjnB,EAAM2oB,GAAyBG,KAAMvV,EAAQ/D,IAGhE2a,IAAsB7pB,EAAAA,EAAAA,cAAY,WACtCinB,EAAmB,IACnBF,EAAkB,IAClBG,EAAiB,GACjBvR,GAAmB,GACnBE,EAAU,IACVD,EAAqBlW,EAAKW,UAAUlB,uCAA8C,CAAEob,YAAayH,KACjGtM,GAAsB,EACxB,GAAG,CAACC,EAAoBE,EAAWD,EAAsBF,EAAuBhW,EAAMsiB,IAGpF8H,GACEjI,EADFiI,mBAGIC,IAA+B/pB,EAAAA,EAAAA,cAAY,SAAAmK,GAE1C,IADLW,EAAIX,EAAJW,KAAMkf,EAAQ7f,EAAR6f,SAAUC,EAAU9f,EAAV8f,WAAYlB,EAAU5e,EAAV4e,WAAYmB,EAAW/f,EAAX+f,YAAa9f,EAAKD,EAALC,MAE/C4e,EAAU,WACdiB,GAAYD,EACd,EAUMG,EAAaC,SAASC,iBAAiB,8BAEzCC,EAAO,KACX,GAAIJ,IAAgBK,EAAAA,EAAgBC,OAClCF,GACE/pB,EAAAA,EAAAA,KAACkqB,EAAAA,GAA2B,CAC1B3f,KAAMA,EACNue,gBAAiBN,EACjBrpB,KAAMA,EACNsqB,SAAUA,EACVU,YAAU,EACVC,SAAU3B,EACV4B,cApBa,SAACC,GAClB,IAAQnR,GAAamR,GAAc,CAAC,GAA5BnR,SACJA,IACFmQ,KACAC,GAAmB,CAAE/oB,GAAI2Y,IACzBzG,EAAO8G,SAAS,2CAA4C,CAAEL,SAAAA,IAElE,EAcMgN,iBAAkBA,QAGjB,CACL,IAAMoE,EAAmB,SAACC,GACxB,IAAM7d,EAAQkd,SAASY,cAAc,iBAC/BnW,EAASuV,SAASY,cAAc,kBAChCC,EAASb,SAASY,cAAc,oCAEhChT,EAAS+S,EAAkBE,EAAU/d,GAAS2H,EAChDmD,GACFA,EAAOkT,OAEX,EAKAZ,GACE/pB,EAAAA,EAAAA,KAAA,OACEM,UAAU,4BACV+e,UAAW,SAACqJ,IAPE,SAACA,EAAOkC,IACxBC,EAAAA,EAAAA,IAA0BnC,EAAOkC,EAAGhB,OAAY5lB,EAAWykB,EAASA,EAAS8B,EAC/E,CAK4BlL,CAAUqJ,EAAO7e,EAAQ,EACjDsf,MAAO,CAAEjV,MAAO,OAAQC,OAAQ,QAChC,uBACA8U,KAAK,WACL,eAAcQ,EACdP,UAAW,EAAE9oB,UAEbJ,EAAAA,EAAAA,KAAC6oB,EAAAA,GAAmC,CAClCte,KAAMA,EACNue,gBAAiBN,EACjBrpB,KAAMA,EACNgrB,YAAU,EACV1B,QAASA,EACTgB,SAAUA,EACVL,UAAWhD,EACXiD,SAAUvB,GAAyBG,QAI3C,CACA,OAAO8B,CACT,GAAG,CAAC5D,EAAkBC,EAAqBjnB,EAAM2oB,GAAyBG,KAAMvV,EAAQ6W,GAAoBD,KAEtGwB,IAAoBrrB,EAAAA,EAAAA,cAAY,SAAAmM,GAE/B,IADL+d,EAAW/d,EAAX+d,YAAaoB,EAAanf,EAAbmf,cAETC,EAAW,EAEXrB,IAAgBK,EAAAA,EAAgBC,QAClCvD,GAAkB9Q,EAAAA,EAAAA,GACbmV,IAELC,EAAW/Q,EAAe3S,OAASvH,IAAAA,OAASgrB,GAAe,SAACE,EAAIpe,GAAa,OAAOoe,EAAPpe,EAATqe,UAAiCC,gBAAgB,GAAE,IAC9GxB,IAAgBK,EAAAA,EAAgBoB,QACzC5E,GAAiB5Q,EAAAA,EAAAA,GACZmV,IAELC,EAAWD,EAAczjB,OAASvH,IAAAA,OAAS0mB,GAAiB,SAACwE,EAAII,GAAa,OAAOJ,EAAPI,EAATH,UAAiCC,gBAAgB,GAAE,IAGtHH,EAAWvJ,GACbnM,EAAU,CAACnW,EAAKW,UAAUlB,uGAA+G,CAAEob,YAAayH,MACxJtM,GAAsB,KAEtBG,EAAU,IACVH,GAAsB,IAGxB,IAEM+E,EAAcuH,EAAsB,EADf7iB,wDADCA,uDAG5ByW,EAAqBlW,EAAKW,UAAUoa,EAAa,CAAEC,eAAgB6Q,EAAUhR,YAAayH,KAE1FkF,EAAiBqE,GACjB5V,EAAmB4V,EAAW,EAChC,GAAG,CACD5V,EACA6E,EACAwM,EACAhF,EACAtiB,EACAmW,EACAH,EACAE,IAGIiW,IAAuBxpB,EAAAA,EAAAA,UAAQ,kBAAAypB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAC,CAAD,EAClCvB,EAAAA,EAAgBoB,MAAQnR,GACxB+P,EAAAA,EAAgBC,OAASxD,EAAe,GACvC,CAACA,EAAiBxM,IAEtB,OACE5Z,EAAAA,EAAAA,MAAAmrB,EAAAA,SAAA,CAAAprB,SAAA,EACEJ,EAAAA,EAAAA,KAACyrB,EAAAA,GAA8B,CAC7BnK,YAAaA,EACboK,eAAgBxF,EAAwBsD,GAA+BjB,GACvEvC,WAAYA,EACZF,aAAcA,EACdC,4BAA6BA,EAC7B5E,+BAAgCA,EAChCzO,OAAQA,EACRvT,KAAMA,EACNwsB,cAAc,OACdC,OAAQjG,GACRkG,mBAAoB5F,EACpB6F,mBAAiB,EACjB5F,sBAAuBA,EACvB4E,kBAAmBA,GACnBQ,qBAAsBA,GACtBhsB,QAASA,EACTysB,0BAA2BtK,EAC3BuK,yBAA0B1C,GAC1BnD,iBAAkBA,EAClBwB,OAAQA,GACRsE,mBAAoB5J,EAAAA,GAAmBC,OACvC0E,WAAYA,EACZX,6BAA8BA,EAC9BC,4BAA6BA,EAC7BC,qBAAsBA,IAEvBuB,GAAyBI,WAGhC,EA6BArC,GAAuB7K,aAAe,CACpCrM,qBAAiB3K,EACjBiiB,0BAAsBjiB,EACtBkiB,uBAAuB,EACvBC,iBAAkB,KAClBC,qBAAqB,EACrBjF,+BAAgC,KAChCkF,8BAA8B,EAC9BC,6BAA6B,EAC7BC,qBAAsB,I,8CCjUlB2F,GAAgB,CACpBC,KAAM,CAAE3G,OAAQ,IAGL4G,GAAsB,SAAHptB,GA6BzB,IA5BLqtB,EAAQrtB,EAARqtB,SACAC,EAAettB,EAAfstB,gBACArX,EAAYjW,EAAZiW,aACA9N,EAAOnI,EAAPmI,QACAwC,EAAoB3K,EAApB2K,qBACAQ,EAAuBnL,EAAvBmL,wBACAiR,EAAYpc,EAAZoc,aACArG,EAAkB/V,EAAlB+V,mBACAO,EAAStW,EAATsW,UACAnW,EAAIH,EAAJG,KACAoW,EAAUvW,EAAVuW,WACAH,EAAkBpW,EAAlBoW,mBACAD,EAAqBnW,EAArBmW,sBACAD,EAAmBlW,EAAnBkW,oBACAF,EAAuBhW,EAAvBgW,wBACAH,EAAoB7V,EAApB6V,qBACA0X,EAASvtB,EAATutB,UACAlX,EAAoBrW,EAApBqW,qBACA8Q,EAAgBnnB,EAAhBmnB,iBACAE,EAA4BrnB,EAA5BqnB,6BACA3T,EAAM1T,EAAN0T,OACA4T,EAA2BtnB,EAA3BsnB,4BACAC,EAAoBvnB,EAApBunB,qBACArF,EAAYliB,EAAZkiB,aACA3Z,EAAmBvI,EAAnBuI,oBACAF,EAAarI,EAAbqI,cACAmlB,EAAmBxtB,EAAnBwtB,oBACAC,EAAiBztB,EAAjBytB,kBAEMntB,GAAUC,EAAAA,EAAAA,kBAAiBikB,GACjCrd,GAA0DC,EAAAA,EAAAA,UAAS,IAAGC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAA/DumB,EAAqBrmB,EAAA,GAAEsmB,EAAwBtmB,EAAA,GACtDI,GAAkDL,EAAAA,EAAAA,WAAS,GAAMM,GAAAJ,EAAAA,EAAAA,GAAAG,EAAA,GAA1DmmB,EAAiBlmB,EAAA,GAAEmmB,GAAoBnmB,EAAA,GAC9CmJ,IAAwCzJ,EAAAA,EAAAA,WAAS,GAAM2J,IAAAzJ,EAAAA,EAAAA,GAAAuJ,GAAA,GAAhDid,GAAgB/c,GAAA,GAAEgd,GAAWhd,GAAA,GAGjBid,GAGfjY,EAHFpG,gBACkBse,GAEhBlY,EAFF5F,iBACG+d,IAAUvrB,EAAAA,EAAAA,GACXoT,EAAkBnT,IAGpBwD,GACEyP,EADFzP,eAAgB5B,GACdqR,EADcrR,YAAakB,GAC3BmQ,EAD2BnQ,WAAYyoB,GACvCtY,EADuCsY,eAAgB9oB,GACvDwQ,EADuDxQ,aAAcC,GACrEuQ,EADqEvQ,gBAAiB8oB,GACtFvY,EADsFuY,gBAAiBC,GACvGxY,EADuGwY,oBAAqBC,GAC5HzY,EAD4HyY,0BAQ1H3e,IAAkBlP,EAAAA,EAAAA,cAAY,SAAC6N,GACnC,GAAI0f,GAAe,CACjB,IAAMO,EAAwBhY,EAAW+E,YAAY,uBACrDiT,EAAsBhT,WAEtBwS,IAAY,GACZC,GAAc1f,GAAOoM,SAAQ,SAAC8T,GAC5B,IAAIC,EAEAD,IACFC,EAAsB,CACpBC,WAAYF,EAAO3oB,MACnB8oB,YAAaH,EAAO1oB,SAIxBioB,IAAY,GACZQ,EAAsB3S,KAAK6S,EAC7B,GACF,CACF,GAAG,CAACT,GAAezX,IAEbpG,IAAmB1P,EAAAA,EAAAA,cAAY,SAAC2P,GACpC,GAAI6d,GAAgB,CAClB,IAAMM,EAAwBhY,EAAW+E,YAAY,uBACrDiT,EAAsBhT,WAEtBwS,IAAY,GACZE,GAAe7d,GAAUsK,SAAQ,WAG/BqT,IAAY,GACZQ,EAAsB3S,KAHlB6S,UAIN,GACF,CACF,GAAG,CAACR,GAAgB1X,IAEdqY,IAAmCnuB,EAAAA,EAAAA,cAAY,WACnD,GACC,IAEGouB,IAAoB/rB,EAAAA,EAAAA,UAAQ,WA6ChC,MA5Ce,CACbmT,aAAAA,EACA9N,QAAAA,EACAE,cAAAA,EACAymB,qBAAsBnkB,EACtBQ,wBAAAA,EAEA4jB,YAAa,SAAFroB,GAAmD,IAA9CwD,EAASxD,EAATwD,UAAWC,EAAqBzD,EAArByD,sBAAuBC,EAAI1D,EAAJ0D,KAC1C4kB,EAAyB1pB,IAAmBd,KAAgBC,EAAAA,GAAUwqB,gBAAgBC,SAmB5F,OAjBsB3mB,EAAsB+E,IAAAA,WAAoBjD,EAAAA,EAAAA,IAC9DH,EACAqjB,EACAnnB,GACA5B,GACA2pB,IACA,EACA9oB,GACA2pB,EACAZ,GACAC,GACAC,IACA,GACA,EACA5oB,KAICqC,MAAK,kBAAMiO,EAAwBhM,YAAY,CAC9CE,UAAAA,EACAC,sBAAAA,EACAC,KAAAA,EACA+P,SAAUC,EAAAA,GACV+U,iBAAgB5mB,QAA6BvD,GAC7C,IACD+C,MAAK,SAACyC,GAIL,OAHI0X,GAAgBA,EAAakN,eAC/BlN,EAAakN,cAAc5kB,GAEtB,CAAEA,QAAAA,EACX,GACJ,EAIJ,GAAG,CAACyL,EAAc9N,EAASE,EAAesC,EAAsBQ,EAAyB7F,GAAiBd,GAAa+oB,EAAWnnB,GAAgB+nB,GAAgB9oB,GAAc+oB,GAAiBC,GAAqBC,GAA2BtY,EAAyBzN,EAAqB2Z,IAEzRmN,IAAwB5uB,EAAAA,EAAAA,cAAY,WACxCiT,EAAO8G,SAAS,gDAChB6S,EAASrkB,EAAM0M,UACjB,GAAG,CAAC2X,EAAU3Z,IAEd,OACErS,EAAAA,EAAAA,MAAA,OAAKC,UAAWhB,EAAQmkB,eAAerjB,SAAA,CAEnC0sB,KACA9sB,EAAAA,EAAAA,KAACsuB,EAAAA,QAAO,CAACC,cAAc,EAAO5O,OAAQuM,GAAc9rB,UAClDJ,EAAAA,EAAAA,KAAC6f,EAAAA,EAAmB,CAACC,eAAa,MAIpC8M,GACE5sB,EAAAA,EAAAA,KAACuB,EAAAA,SAAc,CAAAnB,UACbJ,EAAAA,EAAAA,KAACwuB,EAAAA,GAAa,CACZC,UAAW/B,EACXzX,aAAcA,OAIlB5U,EAAAA,EAAAA,MAACkB,EAAAA,SAAc,CAAAnB,SAAA,CACZimB,GAAgCmG,IAC/BxsB,EAAAA,EAAAA,KAAC0uB,EAAAA,GAA+B,CAC9BL,sBAAuBA,GACvBlvB,KAAMA,KAGRknB,IACArmB,EAAAA,EAAAA,KAAC2uB,EAAAA,GAA4B,CAC3BC,QAASnC,EAAoBttB,EAAKW,UAAUlB,uGAC1CO,EAAKW,UAAUlB,0GACjBO,KAAMA,KAGVa,EAAAA,EAAAA,KAAC6uB,EAAAA,GAAwB,CACvBxC,SAAUA,EACVyC,yBAA0BnC,EAC1BE,qBAAsBA,GACtBkC,gBAAiBzZ,EACjBuY,kBAAmBA,GACnBvB,gBAAiBA,EACjBlR,aAAcA,EACd1I,OAAQA,EACRqC,mBAAoBA,EACpBxN,oBAAqBA,KAEvBvH,EAAAA,EAAAA,KAAA,OAAKM,UAAWhB,EAAQokB,0BAA2B,wBAAkBtjB,UACnEJ,EAAAA,EAAAA,KAAC6lB,IAAsB5jB,EAAAA,EAAAA,GAAA,CACrB0M,gBAAiBA,GACjBsX,qBAAsB2H,GACtBzuB,KAAMA,EACN+mB,uBAjJe,EAkJf9Q,mBAAoBA,EACpBjG,iBAAkBA,GAClB+F,oBAAqBA,EACrBD,aAAcA,EACdK,UAAWA,EACXH,sBAAuBA,EACvBmM,YAAatM,EACbK,qBAAsBA,EACtB8Q,iBAAkBA,EAClBzT,OAAQA,EACR2T,6BAA8BA,EAC9BC,4BAA6BA,EAC7BC,qBAAsBA,GAClB2G,YAQpB,EAsDAd,GAAoBpR,aAAe,CACjCmL,iBAAkB6I,EAAAA,GAAgBC,MAClC5I,8BAA8B,EAC9BC,6BAA6B,EAC7BC,qBAAsB,GACtBrF,aAAc,KACdsL,qBAAqB,EACrBjlB,qBAAqB,EACrBF,cAAe,ICrSjB,IAAM6nB,GAAqB,SAAHlwB,GA+BjB,IA9BL8I,EAAc9I,EAAd8I,eACAH,EAAuB3I,EAAvB2I,wBACAsN,EAAYjW,EAAZiW,aACA9N,EAAOnI,EAAPmI,QACAwC,EAAoB3K,EAApB2K,qBACAQ,EAAuBnL,EAAvBmL,wBACAkiB,EAAQrtB,EAARqtB,SACAC,EAAettB,EAAfstB,gBACAvX,EAAkB/V,EAAlB+V,mBACAO,EAAStW,EAATsW,UACAnW,EAAIH,EAAJG,KACAoW,EAAUvW,EAAVuW,WACAH,EAAkBpW,EAAlBoW,mBACAD,EAAqBnW,EAArBmW,sBACAD,EAAmBlW,EAAnBkW,oBACAF,EAAuBhW,EAAvBgW,wBACAH,EAAoB7V,EAApB6V,qBACA0X,EAASvtB,EAATutB,UACAlX,EAAoBrW,EAApBqW,qBACA8Q,EAAgBnnB,EAAhBmnB,iBACAE,EAA4BrnB,EAA5BqnB,6BACA3T,EAAM1T,EAAN0T,OACA4T,EAA2BtnB,EAA3BsnB,4BACA6I,EAAsBnwB,EAAtBmwB,uBACA5I,EAAoBvnB,EAApBunB,qBACArF,EAAYliB,EAAZkiB,aACA3Z,EAAmBvI,EAAnBuI,oBACAF,EAAarI,EAAbqI,cACAmlB,EAAmBxtB,EAAnBwtB,oBACAC,EAAiBztB,EAAjBytB,kBAEM2C,GAActtB,EAAAA,EAAAA,UAClB,WACE,OAAI/B,IAAAA,WAAa4H,GACRA,EAAwB,CAAEG,eAAAA,IAG5BH,GAA2BG,CACpC,GACA,CAACA,EAAgBH,IAEb0nB,EACJtvB,IAAAA,QAAUA,IAAAA,MAAQA,IAAAA,OAASqvB,GAAc,iBAS3C,OAPA/tB,EAAAA,EAAAA,YAAU,WAER+T,GAAmB,GACnBD,GAAsB,GACtBG,EAAU,GACZ,GAAG,CAACH,EAAuBG,EAAWF,KAGpCpV,EAAAA,EAAAA,KAACosB,GAAmB,CAClBC,SAAUA,EACVC,gBAAiBA,EACjBrX,aAAcA,EACd9N,QAASA,EACTwC,qBAAsBA,EACtBQ,wBAAyBA,EACzBiR,aAAciU,EACdta,mBAAoBA,EACpBO,UAAWA,EACXnW,KAAMA,EACNqtB,oBAAqBA,EACrBjX,WAAYA,EACZH,mBAAoBA,EACpBD,sBAAuBA,EACvBD,oBAAqBA,EACrBF,wBAAyBA,EACzBH,qBAAsBA,EACtB0X,UAAWA,EACXlX,qBAAsBA,EACtB8Q,iBAAkBA,EAClBE,6BAA8BA,EAC9B3T,OAAQA,EACR4T,4BAA6BA,EAC7B6I,uBAAwBA,EACxB5I,qBAAsBA,EACtBrF,aAAcA,EACd3Z,oBAAqBA,EACrBF,cAAeA,EACfolB,kBAAmBA,GAGzB,EA2CAyC,GAAmBlU,aAAe,CAChCrT,wBAAyB,KACzB2N,UAAWvV,IAAAA,KACXwsB,UAAW,KACXpG,iBAAkB6I,EAAAA,GAAgBC,MAClC5I,8BAA8B,EAC9Blc,wBAAyBpK,IAAAA,KACzBumB,6BAA6B,EAC7B6I,uBAAwB,GACxB5I,qBAAsB,GACtBrF,aAAc,KACd3Z,qBAAqB,EACrBilB,qBAAqB,EACrBnlB,cAAe,IAGV,IClJMioB,GAAsB,WAAH,MAAU,CACxCC,UAAW,CACT5R,WAAY,GACZrf,QAAS,OACTmf,cAAe,IAElB,EAEY+R,GAAgB,WAAH,MAAU,CAClCC,gBAAiB,CACfnxB,QAAS,OACTgf,cAAe,SACfC,SAAU,GAEb,ECEYmS,GAAkB,SAAH1wB,GAgBrB,IAfLiP,EAAejP,EAAfiP,gBACA2N,EAAwB5c,EAAxB4c,yBACA9C,EAAuB9Z,EAAvB8Z,wBACAgC,EAAc9b,EAAd8b,eACAC,EAAe/b,EAAf+b,gBACA9O,EAAMjN,EAANiN,OACAuJ,EAASxW,EAATwW,UACAe,EAAOvX,EAAPuX,QACAC,EAAUxX,EAAVwX,WACAyF,EAAIjd,EAAJid,KACAC,EAAOld,EAAPkd,QACApE,EAAkB9Y,EAAlB8Y,mBACA2E,EAAqBzd,EAArByd,sBACAG,EAAW5d,EAAX4d,YACAC,EAAc7d,EAAd6d,eAEM1d,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAClBswB,GAAqBpwB,EAAAA,EAAAA,kBAAiB+vB,IACpCG,GAAoBlwB,EAAAA,EAAAA,kBAAiBiwB,IAArCC,gBAEFG,GAAanwB,EAAAA,EAAAA,cAAY,SAAAiG,GAA8D,IAADmqB,EAAAnqB,EAA1DwJ,WAAAA,OAAU,IAAA2gB,EAAGjT,EAAWiT,EAAAC,EAAApqB,EAAEqqB,MAAAA,OAAK,IAAAD,EAAG7T,EAAI6T,EAAAE,EAAAtqB,EAAEuqB,OAAAA,OAAM,IAAAD,EAAG,CAAC,EAACA,EACrE,IAAVD,GACFtT,GAAsB,GAExB,IAAMyT,EAAc,CAClBC,QAAS,aACTC,YA7BoB,EA8BpBL,MAAAA,EACAM,KAhCY,IAkCVnhB,IACFghB,EAAYhhB,WAAaA,GAE3BjB,EAAgB,CACdqiB,eAAeC,EAAAA,EAAAA,QAAOL,EAAaD,KAClClpB,MAAK,SAAC7H,GACPsX,EAAWtX,EAAK,gBAAkBA,EAAKL,MAAMyI,OAASyoB,GACtDva,EAAU,GAAD/B,QAAAmC,EAAAA,EAAAA,GACHma,EAAQ,EAAI9jB,EAAS,KAAE2J,EAAAA,EAAAA,IACxBhV,EAAAA,EAAAA,KAAI1B,EAAKL,OAAO,SAAC0L,GAQlB,MAPc,CACZuM,aAAcvM,EAAKgD,IACnB/M,GAAI+J,EAAKimB,aACTC,SAAUlmB,EAAKgD,IACfuM,YAAY,EAIhB,OAGY,IAAViW,GACFtT,GAAsB,EAE1B,GACF,GAAG,CACDxQ,EAAQuJ,EAAWoH,EAAaX,EAAMzF,EAAYiG,EAAuBxO,IAGrE8J,GAAetY,EAAAA,EAAAA,cAAY,WAC/B,GAAI8W,EAAS,CACX,IAAMma,EAAUzU,EAjEJ,GAkEZC,EAAQwU,GACRd,EAAW,CAAEG,MAAOW,GACtB,CACF,GAAG,CAACzU,EAAMC,EAAS0T,EAAYrZ,IAEzB0C,GAAgBxZ,EAAAA,EAAAA,cAAY,SAACoK,GACjC,IAAMkQ,GAAMnE,EAAAA,EAAAA,GAAO3J,GACb2N,EAAgBG,EAAOlQ,GAEvB8mB,EAAkB,CAAEtiB,gBAAiBuL,EAAcpZ,IAEzD,GAAIsY,EAAyB,CAC3B,IAAM8X,GAAqBhX,EAAcE,WAEzCC,EAAOlQ,GAAOiQ,WAAa8W,EAC3BD,EAAgBE,eAAiBD,CACnC,CAEApb,EAAUuE,GACV6B,EAAyB+U,EAC3B,GAAG,CAAC1kB,EAAQuJ,EAAWoG,EAA0B9C,IAE3CuG,GAAY5f,EAAAA,EAAAA,cAAY,SAACwX,GACd,UAAXA,EAAGlT,MACLmY,EAAQ,GACR0T,EAAW,CACTG,MAAO,IAGb,GAAG,CAAC7T,EAAS0T,IASb,OANAvuB,EAAAA,EAAAA,YAAU,WACR6a,EAAQ,GACR0T,EAAW,CAAEG,MAAO,GAEtB,GAAG,KAGD1vB,EAAAA,EAAAA,MAAA,OAAKC,UAAWgf,IAAW,oBAAqBmQ,GAAiBrvB,SAAA,EAC/DC,EAAAA,EAAAA,MAAA,OAAKC,UAAWgf,IAAWqQ,EAAmBJ,UAAW,0BAA0BnvB,SAAA,EACjFJ,EAAAA,EAAAA,KAACwf,EAAAA,UAAS,CACR3gB,MAAO+d,EACP8C,SAAU,SAACzI,EAAI6H,GAAQ,OAAKjC,EAAeiC,EAAS,EACpDO,UAAWA,EACXyR,YAAa3xB,EAAKW,UAAUlB,gCAC5B+gB,OAAQ,CACNwM,KAAM,CACJjY,MAAO,MACP5V,QAAS,oBAIf0B,EAAAA,EAAAA,KAAC+wB,EAAAA,WAAU,CACTtR,UAAW,CAAElE,SAAU,UACvBjb,UAAU,gBACVmoB,QAAS,WACPvM,EAAQ,GACR0T,EAAW,CACTG,MAAO,GAEX,OAIFjY,GAAqB9X,EAAAA,EAAAA,KAAC6f,EAAAA,EAAmB,CAACC,eAAa,KACvD9f,EAAAA,EAAAA,KAACigB,EAAAA,EAAiB,CAChB3f,UAAU,sBACV2L,OAAQA,EACRyM,SAvIQ,GAwIRwH,eAAgBnI,EAChBkB,cAAeA,EACfkH,cAAe5J,EACfuE,eAAgBA,EAChBC,gBAAiBA,MAK3B,EAoBA2U,GAAgB1U,aAAe,CAC7BlC,yBAAyB,EACzBgC,oBAAgB9W,EAChB+W,qBAAiB/W,GCjLnB,IAAMgtB,GAAyB,SAAHhyB,GAcrB,IAbLiyB,EAAiBjyB,EAAjBiyB,kBACAnc,EAAc9V,EAAd8V,eACAS,EAAUvW,EAAVuW,WACAR,EAAkB/V,EAAlB+V,mBACAC,EAAuBhW,EAAvBgW,wBACAtC,EAAM1T,EAAN0T,OACAuC,EAAYjW,EAAZiW,aACAG,EAAkBpW,EAAlBoW,mBACAF,EAAmBlW,EAAnBkW,oBACAG,EAAoBrW,EAApBqW,qBACAF,EAAqBnW,EAArBmW,sBACAG,EAAStW,EAATsW,UACAnW,EAAIH,EAAJG,KAGEwP,EAIEoG,EAJFpG,gBACAQ,EAGE4F,EAHF5F,iBACA6J,EAEEjE,EAFFiE,gBAC+BF,EAC7B/D,EADFmc,8BAGItV,GAA2Bnc,EAAAA,EAAAA,cAAY,SAAC2K,GAC5C,IAAM+mB,EAAwB5b,EAAW+E,YAAY,qBACrD6W,EAAsB5W,WAEtB,IAAM6W,EAAoBpc,EAAwBqc,kBAAkB,CAClEC,cAAelnB,EAAKiE,gBACpBoiB,SAAUrmB,EAAKqmB,SACftX,SAAUC,EAAAA,KAETrS,MAAK,SAAAlI,GAAK,OAAI8P,EAAgB,CAAEnO,GAAI3B,GAAS4E,EAAAA,GAAUsG,aAAawnB,OAAO,IAC3EjmB,OAAM,SAAA5L,GAAC,OAAIsZ,EAAgBtZ,EAAE,IAEhCoV,GAAe,GACfsc,EACGpV,KAAI,WACH,IAAyBxS,GAAYY,GAAQ,CAAC,GAAtCiE,gBACRqE,EAAO8G,SAAS,2CAA4C,CAAEhQ,QAAAA,GAChE,IACCkQ,SAAQ,WACP5E,GAAe,GACfqc,EAAsBvW,MACxB,GACJ,GAAG,CAACrF,EAAYP,EAAyBF,EAAgBnG,EAAiBqK,EAAiBtG,IAE3FvM,GAA4BC,EAAAA,EAAAA,UAAS,IAAGC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAjC8F,EAAM5F,EAAA,GAAEmP,EAASnP,EAAA,GACxBI,GAA8BL,EAAAA,EAAAA,WAAS,GAAKM,GAAAJ,EAAAA,EAAAA,GAAAG,EAAA,GAArC8P,EAAO7P,EAAA,GAAE8P,EAAU9P,EAAA,GAC1BmJ,GAAwBzJ,EAAAA,EAAAA,UAAS,GAAE2J,GAAAzJ,EAAAA,EAAAA,GAAAuJ,EAAA,GAA5BoM,EAAIlM,EAAA,GAAEmM,EAAOnM,EAAA,GACpBoM,GAAoD/V,EAAAA,EAAAA,WAAS,GAAMgW,GAAA9V,EAAAA,EAAAA,GAAA6V,EAAA,GAA5DrE,EAAkBsE,EAAA,GAAEK,EAAqBL,EAAA,GAChDG,GAAsCnW,EAAAA,EAAAA,UAAS,IAAGoW,GAAAlW,EAAAA,EAAAA,GAAAiW,EAAA,GAA3CK,EAAWJ,EAAA,GAAEK,EAAcL,EAAA,IAElCnb,EAAAA,EAAAA,YAAU,WAEJyX,IACF1D,GAAmB,GACnBD,GAAsB,GACtBG,EAAU,IACVD,EAAqBlW,EAAKW,UAAUlB,uCAA8C,CAAEob,YAAa/E,KAErG,GAAG,CAAC6D,EAAyB3Z,EAAM8V,EAAcE,EAAuBG,EAAWD,EAAsBD,KAEzG/T,EAAAA,EAAAA,YAAU,WACR,IAAM4Y,EAAiBla,IAAAA,OAASkM,GAAQ,SAAAqB,GAAK,OAAIA,GAASA,EAAMwM,UAAU,KAAK,GAC3EG,EAAe3S,OAAS2N,GAC1BK,EAAU,CAACnW,EAAKW,UAAUlB,uGAA+G,CAAEob,YAAa/E,MACxJE,GAAsB,IACb8E,EAAe3S,OAAS,GACjCgO,EAAU,IACVH,GAAsB,KAEtBG,EAAU,IACVH,GAAsB,IAGxB,IAEM+E,EAAcjF,EAAe,EADRrW,wDADCA,uDAG5ByW,EAAqBlW,EAAKW,UAAUoa,EAAa,CAAEC,eAAgBF,EAAe3S,OAAQ0S,YAAa/E,IACzG,GAAG,CAAC6D,EAAyB3Z,EAAM8M,EAAQgJ,EAAcE,EAAuBG,EAAWD,IAG3F,IAAM+E,GAAqB3a,EAAAA,EAAAA,cAAY,WACrC,IAAMwa,EAAiBla,IAAAA,OAASkM,GAAQ,SAAAqB,GAAK,OAAIA,GAASA,EAAMwM,UAAU,KAAK,GAE/EhF,GAAe,GAEf,IAAMqc,EAAwB5b,EAAW+E,YAAY,qBACrD6W,EAAsB5W,WAEtBjO,IAAAA,IACE2N,GACA,SAACO,GACC,IAAA5S,EAAyB4S,GAAO,CAAC,EAAzBha,EAAEoH,EAAFpH,GAAIiwB,EAAQ7oB,EAAR6oB,SACZ,OAAOzb,EAAwBqc,kBAAkB,CAAEC,cAAe9wB,EAAIiwB,SAAAA,EAAUtX,SAAUC,EAAAA,IAC5F,GACA,CAAEqB,YAAaC,EAAAA,KAEd3T,MAAK,SAACqI,GAEL,OADAsD,EAAO8G,SAAS,4CAA6C,CAAEpK,SAAAA,IACxDD,EAAiBC,EAAU3L,EAAAA,GAAUsG,aAAawnB,OAC3D,IACCjmB,OAAM,SAACqP,GACN3B,EAAgB2B,EAClB,IACCjB,SAAQ,WACP5E,GAAe,GACfqc,EAAsBvW,MACxB,GACJ,GAAG,CAAC5F,EAAyB/I,EAAQyG,EAAQsG,EAAiB7J,EAAkBoG,EAAYT,IAM5F,OAFAI,EAAoB5B,QAAUwF,EAA0BsB,OAAqBpW,GAG3EhE,EAAAA,EAAAA,KAAC0vB,IAAeztB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACVgvB,GAAiB,IACrBnY,wBAAyBA,EACzB8C,yBAA0B9C,EAA0B/Y,IAAAA,KAAS6b,EAC7Dd,eAAgB,IAChBC,gBAAiB,IACjB9O,OAAQA,EACRuJ,UAAWA,EACXe,QAASA,EACTC,WAAYA,EACZyF,KAAMA,EACNC,QAASA,EACTpE,mBAAoBA,EACpB2E,sBAAuBA,EACvBG,YAAaA,EACbC,eAAgBA,IAGtB,EAwCAmU,GAAuBhW,aAAe,CACpCiW,kBAAmB,CACjBhjB,gBAAiBlO,IAAAA,MAEnB+U,eAAgB/U,IAAAA,KAChBqV,mBAAoBrV,IAAAA,KACpBoV,sBAAuBpV,IAAAA,KACvBsV,qBAAsBtV,IAAAA,KACtBuV,UAAWvV,IAAAA,KACXkV,aAAc,IAGT,IAAMuc,GAA0B,CACrCtvB,MAAOtD,8BACPsc,gBAAgB,EAChBC,gBAAiB,SAAA3Z,GAAK,OACpBxB,EAAAA,EAAAA,KAACgxB,IAAsB/uB,EAAAA,EAAAA,GAAA,GACjBT,GACJ,EAEJ4Z,aAAc,CACZC,MAAOzc,mBACP0c,KAAMtT,EAAM2M,YACZ4G,SAAU,uBACVC,cAAe,kBCpMNiW,GAAoB,SAAHzyB,GASvB,IARLqnB,EAA4BrnB,EAA5BqnB,6BACAqL,EAAwB1yB,EAAxB0yB,yBACAC,EAAc3yB,EAAd2yB,eACAlF,EAAiBztB,EAAjBytB,kBACAD,EAAmBxtB,EAAnBwtB,oBACAoF,EAAU5yB,EAAV4yB,WACAC,EAAa7yB,EAAb6yB,cACAC,EAAyB9yB,EAAzB8yB,0BAEIC,GAAMxG,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACPvjB,EAAMqI,aAAe4K,GACrBjT,EAAMyM,WAAa0I,GACnBnV,EAAMC,YAAc+Y,GACpBhZ,EAAM8H,YJ8HyB,SAACuW,EAA8BqL,EAA0BjF,EAAmBD,EAAqBoF,EAAYC,GAC/I,IAAI3vB,EAAQtD,gBACRozB,EAAW,GAef,OAdIJ,EACF1vB,EAAQ0vB,EACCF,EACTxvB,EAAQtD,YACC6tB,IACTvqB,EAAQtD,cAGNizB,EACFG,EAAWH,EACFH,IACTM,EAAWpzB,wEAGL,CACNsD,MAAAA,EACA+vB,iBAAkB,SAAFvsB,GAAA,IACdwsB,EAAaxsB,EAAbwsB,cACA/yB,EAAIuG,EAAJvG,KACAyG,EAAGF,EAAHE,IACAD,EAAGD,EAAHC,IACAwsB,EAAuBzsB,EAAvBysB,wBAAuB,OAEvBnyB,EAAAA,EAAAA,KAAA,OAAKM,UAAWgf,IAAW4S,EAAe,yBAAyB9xB,SAChE4xB,EACC7yB,EAAKW,UAAUkyB,IAEf3xB,EAAAA,EAAAA,MAACkB,EAAAA,SAAc,CAAAnB,SAAA,CACZimB,EACGlnB,EAAKW,UAAUlB,oEACfO,EAAKW,UAAUlB,8CACnBoB,EAAAA,EAAAA,KAAA,KACEoyB,KAAI,mBAAA3e,OAAqBgZ,EAAoB,gBAAkB,eAAc,SAAAhZ,OAAQ7N,EAAG,SAAA6N,OAAQ9N,GAChG8R,OAAO,SACP4a,IAAI,sBACJ5J,QAAS0J,EAA0B,WAAQA,EAAwB1F,EAAoB,EAAI1sB,IAAAA,KAAOK,SAEjGqsB,EAAoBttB,EAAKW,UAAUlB,cAAsBO,EAAKW,UAAUlB,mBAE1EO,EAAKW,UAAUlB,qCAGhB,EAERsc,gBAAgB,EAChBC,gBAAiB,SAAA3Z,GAAK,OACpBxB,EAAAA,EAAAA,KAACkvB,IAAkBjtB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACbT,GAAK,IACTirB,kBAAmBA,EACnBD,oBAAqBA,IACrB,EAGR,CItLyB8F,CAAqBjM,EAA8BqL,EAA0BjF,EAAmBD,EAAqBoF,EAAYC,IAmBxJ,OAjBIxL,IACF0L,GAAM9vB,EAAAA,EAAAA,IAAAspB,EAAAA,EAAAA,GAAA,GACHvjB,EAAM0M,UAAY2O,GAChB0O,IAGHJ,IACFI,EAAShyB,IAAAA,KAAOgyB,EAAQ/pB,EAAMyM,aAG5Bqd,IACFC,GAAM9vB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACD8vB,GAAM,IAAAxG,EAAAA,EAAAA,GAAA,GACRvjB,EAAM2M,YAAc6c,MAIlBO,CACT,E,2eC9BMQ,GAAevqB,EAAM8H,YAErB0iB,GAAkC,SAAChxB,GACvC,IACE8f,EAiBE9f,EAjBF8f,YACAwE,EAgBEtkB,EAhBFskB,aACAC,EAeEvkB,EAfFukB,4BACA5E,EAcE3f,EAdF2f,+BACAzO,EAaElR,EAbFkR,OACAqC,EAYEvT,EAZFuT,mBACAsR,EAWE7kB,EAXF6kB,6BACAqL,EAUElwB,EAVFkwB,yBACAe,EASEjxB,EATFixB,oBACAhG,EAQEjrB,EARFirB,kBACAiG,EAOElxB,EAPFkxB,oBACAxR,EAME1f,EANF0f,aACAsL,EAKEhrB,EALFgrB,oBACAoF,EAIEpwB,EAJFowB,WACAC,EAGErwB,EAHFqwB,cACAC,EAEEtwB,EAFFswB,0BACGpwB,GAAIC,EAAAA,EAAAA,GACLH,EAAKI,IAETuE,GAAoEC,EAAAA,EAAAA,WAAS,GAAMC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAA5EwsB,EAA0BtsB,EAAA,GAAEusB,EAA6BvsB,EAAA,GAwBhE,OAtBAhF,EAAAA,EAAAA,YAAU,kBAAM,YACdwxB,EAAAA,EAAAA,IAAoC9L,EAAAA,GAA8BzE,OACpE,CAAC,GAAE,KAEHjhB,EAAAA,EAAAA,YAAU,WACJglB,IACFyM,EAAAA,EAAAA,eAAc,CAAEC,oBAAqB,QAEzC,GAAG,CAAC1M,KAEJhlB,EAAAA,EAAAA,YAAU,WACJK,EAAKsxB,SAAWL,GAA8BzR,GAAgBnhB,IAAAA,WAAamhB,EAAa+R,uBAC1F/R,EAAa+R,sBACbL,GAA8B,GAElC,GAAG,CAAClxB,EAAKsxB,OAAQ9R,EAAcyR,IAE/B5d,EAAmBgR,4BAA8BA,EACjDhR,EAAmBoM,+BAAiCA,EACpDpM,EAAmBrC,OAASA,EAC5BqC,EAAmB+Q,aAAeA,EAGhCpkB,EAAKsxB,QAAUN,GACb1yB,EAAAA,EAAAA,KAACkzB,EAAAA,GAA0BjxB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACzB6F,eAAgB2pB,GAAkB,CAChCpL,6BAAAA,EACAqL,yBAAAA,EACAC,gBAAgB,EAChBlF,kBAAAA,EACAqF,2BAA2B,IAE7B/c,mBAAoBA,EACpBuM,YAAaA,EACbniB,KAAMuC,EAAKvC,KACXknB,6BAA8BA,EAC9B2M,OAAQtxB,EAAKsxB,OACbG,YAAaZ,GACb7f,OAAQA,GACJggB,GACAhxB,KAEN1B,EAAAA,EAAAA,KAACozB,EAAAA,IAAanxB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,CACZ+S,wBAAyBsM,EACzBxZ,eAAgB2pB,GAAkB,CAChCpL,6BAAAA,EACAqL,yBAAAA,EACAC,gBAAiBc,EACjBhG,kBAAAA,EACAD,oBAAAA,EACAoF,WAAAA,EACAC,cAAAA,EACAC,0BAA2BA,GAA6BpwB,EAAKuvB,oBAE/Dlc,mBAAoBA,EACpBrC,OAAQA,EACR2T,6BAA8BA,GAC1B3kB,GAAI,IACRyxB,YAAaZ,GACbrR,aAAcA,IAGtB,EAeAsR,GAAgCxX,aAAe,CAC7C0X,oBAAqB,KACrBxR,aAAc,KACd0Q,WAAY,GACZC,cAAe,GACfrF,qBAAqB,EACrBiG,qBAAqB,EACrBX,2BAA2B,GAG7B,IAAMuB,IAA8CC,EAAAA,EAAAA,IAA+Bd,GAAiC,CAAEe,UAAW,sBACpHC,GAA0B,SAAChyB,GACtC,IACEuT,EACEvT,EADFuT,mBAAoB5V,EAClBqC,EADkBrC,KAAM4G,EACxBvE,EADwBuE,YAAa0tB,EACrCjyB,EADqCiyB,UAAW/B,EAChDlwB,EADgDkwB,yBAA0BrL,EAC1E7kB,EAD0E6kB,6BAA8BnF,EACxG1f,EADwG0f,aAAclb,EACtHxE,EADsHwE,cAAkBtE,GAAIC,EAAAA,EAAAA,GAC5IH,EAAKkyB,IACTjtB,GAAkEL,EAAAA,EAAAA,WAAS,GAAMM,GAAAJ,EAAAA,EAAAA,GAAAG,EAAA,GAA1EktB,EAAyBjtB,EAAA,GAAEktB,EAA4BltB,EAAA,GAC9DmJ,GAA0EzJ,EAAAA,EAAAA,WAAS,GAAM2J,GAAAzJ,EAAAA,EAAAA,GAAAuJ,EAAA,GAAlFgkB,EAA6B9jB,EAAA,GAAE+jB,EAAgC/jB,EAAA,GAGhEgkB,OAAkE/vB,IAAjCqiB,GAA8CoN,EAAYpN,EAE3FoG,GAAoB3qB,EAAAA,EAAAA,UAAQ,kBAAM/B,IAAAA,IAAMgG,EAAa,CAAC,UAAW,iBAAiB,EAAM,GAAE,CAACA,IAC3F+rB,GAA4BhwB,EAAAA,EAAAA,UAAQ,kBAAM/B,IAAAA,IAAMgG,EAAa,CAAC,UAAW,4BAA4B,EAAM,GAAE,CAACA,IAE5GJ,EAAaoP,EAAbpP,IAAKC,EAAQmP,EAARnP,KAEbvE,EAAAA,EAAAA,YAAU,WACJwyB,IAAkCE,IAGtCltB,EAAAA,EAAAA,2BAA0B,CACxBC,QAAS,eACTf,YAAAA,EACAC,cAAAA,IACCe,MAAK,SAACC,GACFA,GACH4sB,EAA6BG,GAE/BD,GAAiC,EACnC,GACF,GAAG,CAACluB,EAAKD,EAAKkuB,EAA+BE,EAAgChuB,EAAaC,IAE1F,IACEguB,EAKEjf,EALFif,SACAC,EAIElf,EAJFkf,mBACAC,EAGEnf,EAHFmf,eACAruB,EAEEkP,EAFFlP,YACAmgB,EACEjR,EADFiR,WAGF,OACEhmB,EAAAA,EAAAA,KAACqzB,IAA2CpxB,EAAAA,EAAAA,GAAA,CAC1CkyB,gBAAiBH,EACjBI,kBAAmBH,EACnBI,SAAUH,EACVnf,mBAAoBA,EACpBlP,YAAaA,EACb1G,KAAMA,EACNgnB,iBAAkB6I,EAAAA,GAAgBC,MAClC5I,6BAA8BsN,EAC9BjC,yBAA0BA,EAC1B1L,WAAYA,EACZjgB,YAAaA,EACbmb,aAAcA,EACduL,kBAAmBA,EACnBqF,0BAA2BA,GACvBpwB,GAGV,EAkBA8xB,GAAwBxY,aAAe,CACrCkG,aAAc,KACduS,WAAW,E,iOC/MAa,EAAgC,CAC3CC,0CAA2C31B,SAC3C41B,+CAAgD51B,8BAChD61B,gDAAiD71B,iCACjD81B,qCAAsC91B,YACtC+1B,6CAA8C/1B,UAC9Cg2B,sDAAuDh2B,mBACvDi2B,2CAA4Cj2B,QAC5Ck2B,+CAAgDl2B,YAChDm2B,6CAA8Cn2B,UAC9Co2B,+CAAgDp2B,YAChDq2B,gDAAiDr2B,aACjDs2B,8CAA+Ct2B,WAC/Cu2B,8CAA+Cv2B,WAC/Cw2B,oDAAqDx2B,iBACrDy2B,qDAAsDz2B,kBACtD02B,sDAAuD12B,mBACvD22B,iDAAkD32B,cAClD42B,qDAAsD52B,kBACtD62B,2CAA4C72B,QAC5C82B,kCAAmC92B,SACnC+2B,gCAAiC/2B,OACjCg3B,kCAAmCh3B,SACnCi3B,gCAAiCj3B,OACjCk3B,+BAAgCl3B,MAChCm3B,uCAAwCn3B,UACxCo3B,wCAAyCp3B,WACzCq3B,yCAA0Cr3B,YAC1Cs3B,mCAAoCt3B,MACpCu3B,mCAAoCv3B,MACpCw3B,mCAAoCx3B,MACpCy3B,mCAAoCz3B,MACpC03B,mCAAoC13B,MACpC23B,qCAAsC33B,QACtC43B,kCAAmC53B,mBACnC63B,2BAA4B73B,SAC5B83B,0BAA2B93B,QAC3B+3B,0BAA2B/3B,QAC3Bg4B,yBAA0Bh4B,cAC1Bi4B,kCAAmCj4B,iBACnCk4B,gCAAiCl4B,8BACjCm4B,sCAAuCn4B,qCACvCo4B,iCAAkCp4B,8BAClCq4B,wCAAyCr4B,6BACzCs4B,8BAA+Bt4B,wBAC/Bu4B,gCAAiCv4B,KACjCw4B,0CAA2Cx4B,YAC3Cy4B,qCAAsCz4B,OACtC04B,qCAAsC14B,OACtC24B,qCAAsC34B,OACtC44B,qCAAsC54B,OACtC64B,qCAAsC74B,OACtC84B,uCAAwC94B,UCpD7B+4B,EAAiB,WAAH,MAAU,CACnCC,iBAAkB,CAChBvT,SAAU,YAEb,EAEYiL,EAAsB,WAAH,MAAU,CACxCC,UAAW,CACT5R,WAAY,GACZrf,QAAS,QAEZ,EAEYkxB,EAAgB,WAAH,MAAU,CAClCqI,eAAgB,CACdv5B,QAAS,OACTgf,cAAe,SACfC,SAAU,GAEb,E,YCWYL,EAAiB,SAAHle,GAoBpB,IAnBLgP,EAAchP,EAAdgP,eACA4N,EAAwB5c,EAAxB4c,yBACA9C,EAAuB9Z,EAAvB8Z,wBACAgC,EAAc9b,EAAd8b,eACAC,EAAe/b,EAAf+b,gBACA9O,EAAMjN,EAANiN,OACAuJ,EAASxW,EAATwW,UACAe,EAAOvX,EAAPuX,QACAC,EAAUxX,EAAVwX,WACAyF,EAAIjd,EAAJid,KACAC,EAAOld,EAAPkd,QACAG,EAAuBrd,EAAvBqd,wBACAC,EAA0Btd,EAA1Bsd,2BACAxE,EAAkB9Y,EAAlB8Y,mBACA2E,EAAqBzd,EAArByd,sBACAG,EAAW5d,EAAX4d,YACAC,EAAc7d,EAAd6d,eACAG,EAAMhe,EAANge,OACAC,EAASje,EAATie,UAEM9d,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAChBu4B,GAAqBr4B,EAAAA,EAAAA,kBAAiBo4B,GAAtCC,iBACFjI,GAAqBpwB,EAAAA,EAAAA,kBAAiB+vB,GACpCuI,GAAmBt4B,EAAAA,EAAAA,kBAAiBiwB,GAApCqI,eAEFC,GAAah2B,EAAAA,EAAAA,UAAQ,kBAAMoF,EAAAA,EAAAA,iBAAgB/H,EAAM,CAACm1B,GAA+B,GAAE,CAACn1B,IAEpFywB,GAAanwB,EAAAA,EAAAA,cAAY,SAAAiG,GAA+D,IAADqyB,EAAAryB,EAA3DsyB,QAAAA,OAAO,IAAAD,EAAGnb,EAAWmb,EAAAjI,EAAApqB,EAAEqqB,MAAAA,OAAK,IAAAD,EAAG7T,EAAI6T,EAAAE,EAAAtqB,EAAEuqB,OAAAA,OAAM,IAAAD,EAAGhT,EAAMgT,EAChFgI,IACY,IAAVjI,GACFtT,GAAsB,GAGxBzO,EAAe,CACbsiB,eAAeC,EAAAA,EAAAA,QAAO,CACpBJ,QAAS,aACT6H,QAAAA,EACAjI,MAAAA,EACAM,KAzCQ,GA0CR4H,SAAU,KACVC,iBAAiB,GAChBjI,KACFlpB,MAAK,SAAC7H,GACPsX,EAAWtX,EAAK,gBAAkBA,EAAKL,MAAMyI,OAASyoB,GAEtDva,EAAU,GAAD/B,QAAAmC,EAAAA,EAAAA,GACHma,EAAQ,EAAI9jB,EAAS,KAAE2J,EAAAA,EAAAA,IACxBhV,EAAAA,EAAAA,KAAI1B,EAAKL,OAAO,SAAC0L,GAOlB,MANc,CACZuM,aAAcvM,EAAK4tB,QAAQ5qB,IAC3B/M,GAAI+J,EAAKsD,GACTiM,YAAY,EAIhB,OAGY,IAAViW,GACFtT,GAAsB,EAE1B,IAEJ,GAAG,CACDxQ,EAAQuJ,EAAWxH,EAAgB4O,EAAaX,EAAMe,EAAQxG,EAAYiG,IAGtE1E,GAAetY,EAAAA,EAAAA,cAAY,WAC/B,GAAI8W,EAAS,CACX,IAAMma,EAAUzU,EAxEJ,GAyEZC,EAAQwU,GACRd,EAAW,CAAEG,MAAOW,GACtB,CACF,GAAG,CAACzU,EAAMC,EAAS0T,EAAYrZ,IAEzB0C,GAAgBxZ,EAAAA,EAAAA,cAAY,SAACoK,GACjC,IAAMkQ,GAAMnE,EAAAA,EAAAA,GAAO3J,GACb2N,EAAgBG,EAAOlQ,GAEvB8mB,EAAkB,CAAEtiB,gBAAiBuL,EAAcpZ,IAEzD,GAAIsY,EAAyB,CAC3B,IAAM8X,GAAqBhX,EAAcE,WAEzCC,EAAOlQ,GAAOiQ,WAAa8W,EAC3BD,EAAgBE,eAAiBD,CACnC,CAEApb,EAAUuE,GACV6B,EAAyB+U,EAC3B,GAAG,CAAC1kB,EAAQuJ,EAAWoG,EAA0B9C,IAE3CuG,GAAY5f,EAAAA,EAAAA,cAAY,SAACwX,GACd,UAAXA,EAAGlT,MACLmY,EAAQ,GACR0T,EAAW,CACTG,MAAO,IAGb,GAAG,CAAC7T,EAAS0T,IAEPwI,GAAsB34B,EAAAA,EAAAA,cAAY,SAAC44B,GACvC,IAAMC,EAAuB5kB,KAAKC,UAAU0kB,GAExCC,IAAyBjc,IAC3BY,EAAUob,GACV/b,EAA2Bgc,GAC3Bpc,EAAQ,GACR0T,EAAW,CACTK,OAAQoI,EACRtI,MAAO,IAGb,GAAG,CAAC9S,EAAWX,EAA4BsT,EAAYvT,EAAyBH,IAE1Eqc,GAAmBz2B,EAAAA,EAAAA,UAAQ,iBAAO,CACtCqqB,KAAM,CACJqM,aAAc,EACdh6B,gBAAiB,WAEpB,GAAG,IAIJ2H,GAAsDC,EAAAA,EAAAA,UAAS,MAAKC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAA7DsyB,EAAmBpyB,EAAA,GAAEqyB,EAAsBryB,EAAA,GAE5CsyB,GACJl5B,EAAAA,EAAAA,cAAY,SAAAm5B,GAAI,OAAIF,EAAuBE,EAAK,GAAE,CAACF,IAErD,OACEr4B,EAAAA,EAAAA,MAAA,OAAKC,UAAWgf,IAAW,mBAAoBuY,GAAgBz3B,SAAA,EAC7DC,EAAAA,EAAAA,MAAA,OAAKC,UAAWgf,IAAWqQ,EAAmBJ,UAAW,yBAAyBnvB,SAAA,EAChFJ,EAAAA,EAAAA,KAACwf,EAAAA,UAAS,CACR3gB,MAAO+d,EACP8C,SAAU,SAACzI,EAAI6H,GAAQ,OAAKjC,EAAeiC,EAAS,EACpDO,UAAWA,EACXyR,YAAa3xB,EAAKW,UAAUlB,kDAC5B+gB,OAAQ,CACNwM,KAAM,CACJjY,MAAO,MACP5V,QAAS,oBAIf0B,EAAAA,EAAAA,KAAC+wB,EAAAA,WAAU,CACTtR,UAAW,CAAElE,SAAU,UACvBjb,UAAU,gBACVmoB,QAAS,WACPvM,EAAQ,GACR0T,EAAW,CACTG,MAAO,GAEX,QAGJ/vB,EAAAA,EAAAA,KAAC64B,EAAAA,EAAgB,CACfC,WAAYhB,EACZM,oBAAqBA,EACrBR,iBAAkBa,KAEpBz4B,EAAAA,EAAAA,KAAA,OACE+4B,IAAKJ,EACLr4B,UAAWs3B,KAEb53B,EAAAA,EAAAA,KAACg5B,EAAAA,WAAU,CACTC,eAAgBjoB,EAAAA,eAAekoB,KAC/BvZ,OAAQ4Y,EAAiBn4B,SAExBjB,EAAKW,UAAUlB,iGAElByB,EAAAA,EAAAA,MAAC24B,EAAAA,WAAU,CACTC,eAAgBjoB,EAAAA,eAAekoB,KAC/BvZ,OAAQ4Y,EAAiBn4B,SAAA,CAExBjB,EAAKW,UAAUlB,mGAChBoB,EAAAA,EAAAA,KAACgiB,EAAAA,GAAa,CACZC,SAAU9iB,EAAKW,UAAUlB,cACzBsjB,MAAM,gBAIRpK,GAAqB9X,EAAAA,EAAAA,KAAC6f,EAAAA,EAAmB,CAACC,eAAa,KACvD9f,EAAAA,EAAAA,KAACigB,EAAAA,EAAiB,CAChB3f,UAAU,qBACV2L,OAAQA,EACRyM,SA5LQ,GA6LRwH,eAAgBnI,EAChBkB,cAAeA,EACfkH,cAAe5J,EACfuE,eAAgBA,EAChBC,gBAAiBA,MAK3B,EAwBAmC,EAAelC,aAAe,CAC5BlC,yBAAyB,EACzBgC,oBAAgB9W,EAChB+W,qBAAiB/W,E,uMC7PNm1B,EAA6B,CACxChN,KAAM,CACJ7tB,QAAS,eACT4V,MAAO,IACPiQ,WAAY,EACZnE,UAAW,IAEboZ,MAAO,CACLC,aAAc,EACdC,YAAa,KAIJC,EAAgC,CAC3Che,SAAU,SACVoE,OAAQ,CACNwM,KAAM,CACJqN,KAAM,EACNC,MAAO,KAKAC,EAA4B,CACvCvN,KAAM,CACJ7tB,QAAS,cACT4V,MAAO,GACPiQ,WAAY,GACZnE,UAAW,IAEb9d,MAAO,CACLgS,MAAO,KAIEylB,EAAuB,WAAH,MAAU,CACzCC,gBAAiB,CACf5Z,UAAW,GACX1hB,QAAS,eACT6lB,WAAY,IACZ0V,SAAU,GACVC,WAAY,OACZ,QAAS,CACP3V,WAAY,IACZqU,aAAc,IAEhB,8BAA+B,CAC7BxY,UAAW,GACX+Z,MAAO,QAGZ,ECnDYC,EAAyB,WAAH,MAAU,CAC3CC,gBAAiB,CACfja,UAAW,GACXwY,aAAc,GACd,aAAc,CACZl6B,QAAS,eACT6lB,WAAY,GACZD,YAAa,GACb2V,SAAU,GACVC,WAAY,SAGhBI,gBAAiB,CACf57B,QAAS,QACT67B,OAAQ,IAEVC,cAAe,CACb97B,QAAS,OACTgf,cAAe,SACfC,SAAU,GAEb,EAEY8c,EAAuC,CAClDlO,KAAM,CACJ7tB,QAAS,eACT4V,MAAO,KAETklB,MAAO,CACLC,aAAc,EACdC,YAAa,KAIJgB,EAA0C,CACrD/e,SAAU,SACVoE,OAAQ,CACNwM,KAAM,CACJqN,KAAM,EACNC,MAAO,KAKAc,EAAwC,CACnDpO,KAAM,CACJ7tB,QAAS,eACT4V,MAAO,M,iCC7BLsmB,EAAmB,CACvB,CAAEz2B,IAAK,WAAYwT,KAAM,YACzB,CAAExT,IAAK,UAAWwT,KAAM,YAKbgI,EAAkB,SAAHvgB,GAKrB,IAJLmY,EAAiBnY,EAAjBmY,kBACAwB,EAAQ3Z,EAAR2Z,SACAtB,EAAgBrY,EAAhBqY,iBACAojB,EAAez7B,EAAfy7B,gBAEAt0B,GAA8CC,EAAAA,EAAAA,UARxB,YAQiDC,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAhEu0B,EAAer0B,EAAA,GAAEs0B,EAAkBt0B,EAAA,GAC1CI,GAAwCL,EAAAA,EAAAA,WAAS,GAAMM,GAAAJ,EAAAA,EAAAA,GAAAG,EAAA,GAAhDm0B,EAAYl0B,EAAA,GAAEm0B,EAAen0B,EAAA,GACpCmJ,GAAuBzJ,EAAAA,EAAAA,UAASq0B,GAAzBK,GAAyCx0B,EAAAA,EAAAA,GAAAuJ,EAAA,GAA7B,GAEbkrB,GAAwBj5B,EAAAA,EAAAA,UAAQ,WACpC,OAAIg5B,GACKE,EAAAA,EAAAA,WAAUF,GAEZ,IACT,GAAG,CAACA,KAEJz5B,EAAAA,EAAAA,YAAU,WACJy5B,KAAiB3c,EAAAA,EAAAA,YAAW2c,IAC9BD,GAAgB,EAEpB,GAAG,CAACC,EAAcD,IAElB,IAAM17B,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAClBC,GAAUC,EAAAA,EAAAA,kBAAiBo6B,GAE3BsB,GAAqCn5B,EAAAA,EAAAA,UACzC,kBAAM6W,GAAYtB,CAAgB,GAChC,CAACsB,EAAUtB,IAGT6jB,GAAkBp5B,EAAAA,EAAAA,UAAQ,kBAAM6W,GAAY+hB,CAAe,GAAE,CACjE/hB,EACA+hB,IAGIS,GAAqB17B,EAAAA,EAAAA,cAAY,SAAC6X,EAAaL,GAC/CgkB,EACF5jB,EAAiBC,EAAaL,GAE9B0jB,EAAmBrjB,EAEvB,GAAG,CAAC2jB,EAAoC5jB,EAAkBsjB,IAEpDS,GAAmB37B,EAAAA,EAAAA,cAAY,SAACwX,EAAIokB,GACxCF,EAAmBE,EAAU9jB,KAAMN,EACrC,GAAG,CAACkkB,IAEEG,GAAY77B,EAAAA,EAAAA,cAAY,SAACwX,GAC7B,IAAMG,EAASH,GAAMA,EAAGQ,QAAUR,EAAGQ,OAAO5Y,MACtC08B,EAAkB,GAAA9nB,OAAMynB,GAAeznB,OAAG2D,IAE5C+G,EAAAA,EAAAA,YAAWod,IACbV,GAAgB,GAChB1jB,EAAkBokB,EAAoBtkB,IAEtC4jB,GAAgB,EAEpB,GAAG,CAACA,EAAiB1jB,EAAmB+jB,IAElC7b,GAAY5f,EAAAA,EAAAA,cAAY,SAACwX,GACd,UAAXA,EAAGlT,KACLu3B,EAAUrkB,EAEd,GAAG,CAACqkB,IAEJ,OACEj7B,EAAAA,EAAAA,MAAA,OAAKC,UAAWgf,IAAW,wBAAyBhgB,EAAQs6B,iBAAiBx5B,SAAA,EAC3EJ,EAAAA,EAAAA,KAAA,OAAKof,IFxCqB,q0KEwCEoc,IAAI,MAChCn7B,EAAAA,EAAAA,MAAA,OAAKC,UAAU,kBAAiBF,SAAA,CAAC,IAAEjB,EAAKW,UAAUlB,mFAA+E,QACjIoB,EAAAA,EAAAA,KAACS,EAAAA,SAAQ,CACPg7B,QAASjB,EACTkB,YAAaR,EACbxb,SAAU0b,EACVhyB,KAAK,0BACLuyB,UAAWx8B,EAAKW,UAAUlB,qBAC1B+gB,OAAQ+Z,KAEV15B,EAAAA,EAAAA,KAACwf,EAAAA,UAAS,CACRlf,UAAU,YACVye,OAAQuc,EACRxK,YAAa3xB,EAAKW,UAAUlB,qBAC5B+gB,OAAQwZ,EACR1Z,UAAW8Z,EACXla,UAAWA,EACXuc,aAAcb,IAEfH,IACC56B,EAAAA,EAAAA,KAAA,OAAKM,UAAU,2BAA0BF,SACtCjB,EAAKW,UAAUlB,uEAK1B,EASA2gB,EAAgBvE,aAAe,CAC7BrC,SAAU,KACV8hB,gBAAiB,KACjBpjB,iBAAkBtX,IAAAA,MCxGb,IAAM8a,EAAmB,SAAH7b,GAmBtB,IAlBLiN,EAAMjN,EAANiN,OACA6L,EAAkB9Y,EAAlB8Y,mBACAW,EAASzZ,EAATyZ,UACAlC,EAAOvX,EAAPuX,QACAR,EAAQ/W,EAAR+W,SACAM,EAASrX,EAATqX,UACA0B,EAAY/Y,EAAZ+Y,aACAkB,EAAaja,EAAbia,cACA9B,EAAiBnY,EAAjBmY,kBACAH,EAAiBhY,EAAjBgY,kBACAQ,EAAkBxY,EAAlBwY,mBACAkB,EAAQ1Z,EAAR0Z,SACAC,EAAQ3Z,EAAR2Z,SACAtB,EAAgBrY,EAAhBqY,iBACAuB,EAAmB5Z,EAAnB4Z,oBACAkC,EAAc9b,EAAd8b,eACAC,EAAe/b,EAAf+b,gBACA8gB,EAA4B78B,EAA5B68B,6BAEM3d,GACJpc,EAAAA,EAAAA,UAAQ,kBAAOiU,KAAaoI,EAAAA,EAAAA,YAAWpI,EAAS,GAAE,CAACA,IAE/C+lB,GAAiBh6B,EAAAA,EAAAA,UAAQ,WAC7B,OAAIiU,GACKY,EAAAA,EAAAA,yBAAwBZ,GAE1B,EACT,GAAG,CAACA,IAEE5W,GAAOC,EAAAA,EAAAA,YAAWC,EAAAA,aAClBC,GAAUC,EAAAA,EAAAA,kBAAiBy6B,GAEjC7zB,GAAkDC,EAAAA,EAAAA,UAAS01B,GAAez1B,GAAAC,EAAAA,EAAAA,GAAAH,EAAA,GAAnE41B,EAAiB11B,EAAA,GAAE21B,EAAoB31B,EAAA,IAE9ChF,EAAAA,EAAAA,YAAU,WACJy6B,IAAmBC,GACrBC,EAAqBF,EAEzB,GAAG,CAACA,EAAgB/lB,IAEpB,IAAMkmB,GAAe5oB,EAAAA,EAAAA,UACf6oB,GAAc7oB,EAAAA,EAAAA,UAEd8oB,GAAqB18B,EAAAA,EAAAA,cAAY,SAACwX,GACvB,UAAXA,EAAGlT,MACLyT,EAAmBP,GACfglB,EAAa3oB,SACf2oB,EAAa3oB,QAAQ8oB,OAG3B,GAAG,CAAC5kB,IAEE6kB,GAAoB58B,EAAAA,EAAAA,cAAY,SAACwX,GACrC,GAAe,UAAXA,EAAGlT,IAAiB,CACtB,IAAIu4B,GAAkB3lB,EAAAA,EAAAA,yBAAwBolB,IAEzCQ,EAAAA,EAAAA,aAAYD,KACfA,EAAe,WAAA7oB,OAAc6oB,IAG/BnlB,EAAkBmlB,EAAiBrlB,GAC/BilB,EAAY5oB,SACd4oB,EAAY5oB,QAAQ8oB,MAExB,CACF,GAAG,CAACjlB,EAAmB4kB,IAEjBS,GAAwB/8B,EAAAA,EAAAA,cAAY,SAACwX,EAAI6H,GAC7Ckd,EAAqBld,EACvB,GAAG,CAACkd,IAEES,GAAiBh9B,EAAAA,EAAAA,cAAY,SAACwX,GAClC,IAAIqlB,GAAkB3lB,EAAAA,EAAAA,yBAAwBolB,IAEzCQ,EAAAA,EAAAA,aAAYD,KACfA,EAAe,WAAA7oB,OAAc6oB,IAG/BnlB,EAAkBmlB,EAAiBrlB,EACrC,GAAG,CAAC8kB,EAAmB5kB,IAEvB,OACE9W,EAAAA,EAAAA,MAAA,OAAKC,UAAWgf,IAAW,qBAAsBhgB,EAAQ86B,eAAeh6B,SAAA,CAEpE8d,GACEle,EAAAA,EAAAA,KAACuf,EAAe,CACdpI,kBAAmBA,EACnBwB,SAAUA,EACVtB,iBAAkBA,EAClBojB,gBAAiB1kB,KAEjB1V,EAAAA,EAAAA,MAAA,OAAKC,UAAWgf,IAAW,mBAAoBhgB,EAAQ26B,iBAAiB75B,SAAA,CACrEwY,IACC5Y,EAAAA,EAAAA,KAAA,OAAKM,UAAWgf,IAAWhgB,EAAQ46B,iBAAiB95B,SACjDjB,EAAKW,UAAUlB,2CAGpBoB,EAAAA,EAAAA,KAACwf,EAAAA,UAAS,CACRkd,UAAWb,GAAgCpjB,EAC3CnY,UAAU,YACVzB,MAAOk9B,EACPJ,UAAWx8B,EAAKW,UAAUlB,yBAC1B+gB,OAAQ0a,EACR5a,UAAW6a,EACXjb,UAAWgd,EACXtd,OAAQ0d,EACR/c,SAAU8c,EACVG,aAAcT,KAEhBl8B,EAAAA,EAAAA,KAAA,OAAKM,UAAU,UAASF,SACrB,OAEHJ,EAAAA,EAAAA,KAACwf,EAAAA,UAAS,CACRkd,SAAUjkB,EACVnY,UAAU,YACVwwB,YAAa3xB,EAAKW,UAAUlB,wBAC5B8gB,SAAU1I,EACV+H,OAAQvH,EACR3Y,MAAOwX,EACPsJ,OAAQ4a,EACRlb,UAAW8c,EACXQ,aAAcV,QAMrB/d,IAAoBzF,GAA+B,IAAlBxM,EAAO3E,SACzCjH,EAAAA,EAAAA,MAAA,OAAKC,UAAU,mBAAmB6oB,MAAO,CAAEgR,OAAQ,SAAU/5B,SAAA,EAC3DJ,EAAAA,EAAAA,KAAA,OAAKM,UAAU,iBACfN,EAAAA,EAAAA,KAAA,OAAKM,UAAU,oBAAmBF,SAC/BjB,EAAKW,UAAUlB,6CAKnBsf,IACCpG,GAAqB9X,EAAAA,EAAAA,KAAC6f,EAAAA,EAAmB,CAACC,eAAa,EAACC,YAAa,CAAEC,UAAW,WAClFhgB,EAAAA,EAAAA,KAACigB,EAAAA,EAAiB,CAChBhU,OAAQA,EACRyM,SAAUA,EACVwH,eAAgBnI,EAChBkB,cAAeA,EACfkH,cAAe5J,EACfuE,eAAgBA,EAChBC,gBAAiBA,OAM7B,EAyBAF,EAAiBG,aAAe,CAC9BjF,SAAU,GACVM,UAAW,GACXqC,SAAU,GACVC,SAAU,KACVtB,iBAAkB,KAClBuB,qBAAqB,EACrBkC,oBAAgB9W,EAChB+W,qBAAiB/W,EACjB63B,8BAA8B,E","sources":["../../../node_modules/@bingads-webui-campaign-react/ad-status/src/style.js","../../../node_modules/@bingads-webui-campaign-react/ad-status/src/index.js","../../../node_modules/@bingads-webui-campaign-react/ad-status/src/ad-status-with-validation.js","../../../node_modules/@bingads-webui-campaign-react/ad-status/src/ad-status-section.js","../../../node_modules/@bingads-webui-campaign-react/add-image-hooks/src/legacy-i18n-map.js","../../../node_modules/@bingads-webui-campaign-react/add-image-hooks/src/use-asset-library-image-picker.js","../../../node_modules/@bingads-webui-campaign-react/add-image-hooks/src/use-image-picker.js","../../../node_modules/@bingads-webui-campaign-react/add-image-hooks/src/use-website-suggestion.js","../../../node_modules/@bingads-webui-campaign-react/add-media-panel-crud-ad/src/image-asset/view-config/view-type.js","../../../node_modules/@bingads-webui-campaign-react/add-media-panel-crud-ad/src/image-asset/view-config/website-images-view/index.js","../../../node_modules/@bingads-webui-campaign-react/add-media-panel-crud-ad/src/image-asset/view-config/website-images-view/use-image-experience-adapter.js","../../../node_modules/@bingads-webui-campaign-react/add-media-panel-crud-ad/src/image-asset/view-config/stock-images-view/index.js","../../../node_modules/@bingads-webui-campaign-react/add-social-images-view/src/styles/index.js","../../../node_modules/@bingads-webui-campaign-react/add-social-images-view/src/social-images-view.js","../../../node_modules/@bingads-webui-campaign-react/add-media-panel-crud-ad/src/image-asset/view-config/social-images-view/index.js","../../../node_modules/@bingads-webui-campaign-react/add-media-panel-crud-ad/src/image-asset/view-config/ai-generate-images-view/index.js","../../../node_modules/@bingads-webui-campaign-react/add-media-panel-crud-ad/src/image-asset/view-config/landing-view/landing-page-content/styles.js","../../../node_modules/@bingads-webui-campaign-react/add-media-panel-crud-ad/src/image-asset/view-config/landing-view/landing-page-content/image-delete-confirm-dialog.js","../../../node_modules/@bingads-webui-campaign-react/add-media-panel-crud-ad/src/image-asset/view-config/landing-view/landing-page-content/asset-library-images-view.js","../../../node_modules/@bingads-webui-campaign-react/add-media-panel-crud-ad/src/image-asset/view-config/landing-view/landing-page-content/index.js","../../../node_modules/@bingads-webui-campaign-react/add-media-panel-crud-ad/src/image-asset/view-config/landing-view/index.js","../../../node_modules/@bingads-webui-campaign-react/add-invest-images-view/src/styles/index.js","../../../node_modules/@bingads-webui-campaign-react/add-invest-images-view/src/invest-image-view.js","../../../node_modules/@bingads-webui-campaign-react/add-media-panel-crud-ad/src/image-asset/view-config/invest-images-view/index.js","../../../node_modules/@bingads-webui-campaign-react/add-media-panel-crud-ad/src/image-asset/view-config/index.js","../../../node_modules/@bingads-webui-campaign-react/add-media-panel-crud-ad/src/image-asset/add-image-crud-ad.js","../../../node_modules/@bingads-webui-campaign-react/add-stock-images-view/src/legacy-i18n-map.js","../../../node_modules/@bingads-webui-campaign-react/add-stock-images-view/src/styles/index.js","../../../node_modules/@bingads-webui-campaign-react/add-stock-images-view/src/stock-image-view.js","../../../node_modules/@bingads-webui-campaign-react/add-website-images-view/src/styles/placeholder-view.js","../../../node_modules/@bingads-webui-campaign-react/add-website-images-view/src/styles/website-image.js","../../../node_modules/@bingads-webui-campaign-react/add-website-images-view/src/placeholder-view.js","../../../node_modules/@bingads-webui-campaign-react/add-website-images-view/src/website-images-view.js"],"sourcesContent":["export const getAdStatuStyles = () => ({\r\n dropdown: {\r\n '&.fui-Dropdown': {\r\n borderColor: '#605e5c',\r\n '&:hover': {\r\n borderColor: '#605e5c',\r\n },\r\n },\r\n '&:after': {\r\n display: 'none',\r\n },\r\n },\r\n selectedOption: {\r\n backgroundColor: '#f3f2f1',\r\n },\r\n option: {\r\n '& span': {\r\n display: 'none',\r\n },\r\n },\r\n});\r\n\r\n","import React, { useCallback, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\nimport classNames from 'classnames';\r\nimport {\r\n Dropdown,\r\n Option,\r\n Label,\r\n FluentProvider,\r\n webLightTheme,\r\n} from '@fluentui/react-components';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getAdStatuStyles } from './style';\r\n\r\nconst adStatusOptions = [\r\n {\r\n textKey: _TL_('Active'),\r\n value: 'Active',\r\n },\r\n {\r\n textKey: _TL_('Paused'),\r\n value: 'Paused',\r\n },\r\n];\r\n\r\nconst dropdownId = 'responsiveAdStatusLabel';\r\n\r\nexport const AdStatus = ({ onAdStatusChange, data: value }) => {\r\n const i18n = useContext(I18nContext);\r\n const classes = useDefaultStyles(getAdStatuStyles);\r\n\r\n const handleStatusChange = useCallback(\r\n (e, data) => {\r\n onAdStatusChange(data.optionValue);\r\n },\r\n [onAdStatusChange]\r\n );\r\n\r\n const currentValue = value || 'Active';\r\n const currentText = i18n.getString(_.find(adStatusOptions, option => option.value === currentValue).textKey);\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n {adStatusOptions.map(option => (\r\n \r\n ))}\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nAdStatus.propTypes = {\r\n onAdStatusChange: PropTypes.func.isRequired,\r\n data: PropTypes.string.isRequired,\r\n};\r\n","import React, { useCallback, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withCustomValidation } from '@bingads-webui-react/validation';\r\nimport { AdStatus } from './index';\r\n\r\nexport const AdStatusWithCustomValidation = ({\r\n validationProps, updateValidation,\r\n}) => {\r\n const { data } = validationProps;\r\n const status = data && data.AdStatus;\r\n\r\n const handleStatusChange = useCallback((newData) => {\r\n updateValidation([], { AdStatus: newData });\r\n }, [updateValidation]);\r\n\r\n useEffect(() => {\r\n updateValidation([], { AdStatus: status || 'Active' });\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []); // only run onece\r\n\r\n return ;\r\n};\r\n\r\nAdStatusWithCustomValidation.propTypes = {\r\n validationProps: PropTypes.shape({\r\n data: PropTypes.shape({\r\n AdStatus: PropTypes.string,\r\n }),\r\n }).isRequired,\r\n updateValidation: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const ValidatedAdStatus = withCustomValidation(AdStatusWithCustomValidation);\r\n","import React, { useContext, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n getPanelErrorProps,\r\n TextTitle,\r\n ValidatedPanel,\r\n} from '@bingads-webui-campaign/wizard-jumbo-card';\r\nimport { ValidatedAdStatus } from './ad-status-with-validation';\r\n\r\nconst getStatusSummary = (i18n, status) => (status === 'Active' ? i18n.getString(_TL_('Ad status: Active')) : i18n.getString(_TL_('Ad status: Paused')));\r\n\r\nexport const AdStatusSection = React.memo((props) => {\r\n const {\r\n status, expand, ...rest\r\n } = props;\r\n const i18n = useContext(I18nContext);\r\n const descriptionsCardSummaryDetails = useMemo(() => getStatusSummary(i18n, status), [status, i18n]);\r\n const validationProps = useMemo(() => ({\r\n data: {\r\n AdStatus: status,\r\n },\r\n }), [status]);\r\n\r\n return (\r\n }\r\n attentionBeaconProps={{ getExtraProps: getPanelErrorProps }}\r\n actuationProps={{\r\n expand,\r\n expandKey: 'descriptions',\r\n }}\r\n {...rest}\r\n >\r\n \r\n \r\n );\r\n});\r\n\r\nAdStatusSection.propTypes = {\r\n status: PropTypes.string.isRequired,\r\n onAdStatusChange: PropTypes.func.isRequired,\r\n expand: PropTypes.func.isRequired,\r\n};\r\n","export const assetLibraryLegacyI18nMap = {\r\n ImageExperience_MultipleUpload_SizeValidationFailTemplate: _TL_('One or more images are smaller than the required minimum size ({{width}} x {{height}}).'),\r\n ImageExperience_MultipleUpload_SizeValidationFailTemplate_WithoutDimension: _TL_('One or more images are smaller than the required minimum size.'),\r\n ImageExperience_SizeValidationFailTemplate_WithDetail: _TL_('The resized image is smaller than the required minimum size ({{width}} x {{height}}). The image is resized if the file size is too big.'),\r\n ImageExperience_SizeValidationFailTemplate_WithDetail_WithoutDimension: _TL_('The resized image is smaller than the required minimum size. The image is resized if the file size is too big.'),\r\n ImageExperience_SizeValidationFailTemplate: _TL_('The image is smaller than the required minimum size ({{width}} x {{height}}).'),\r\n ImageExperience_SizeValidationFailTemplate_WithoutDimension: _TL_('The image is smaller than the required minimum size.'),\r\n ImageExperience_Error_AnimatedImageNotAllowed: _TL_('Animated images are not allowed.'),\r\n ImageExperience_Error_ImageLoadError: _TL_('That file type isn’t supported. Please select a different file.'),\r\n ImageExperience_Error_CampaignServiceMediaDataEncodingInvalid: _TL_('Data in one of the media entities is not valid format.'),\r\n ImageExperience_Error_CampaignServiceMediaFormatNotSupported: _TL_(\"That file type isn't supported. Please select a different file.\"),\r\n ImageExperience_Error_InternalError: _TL_(\"We've encountered an error and can't continue.\"),\r\n};\r\n","import Promise from 'bluebird';\r\nimport { useState, useMemo, useCallback, useEffect } from 'react';\r\nimport _ from 'underscore';\r\n\r\nimport {\r\n validateImageSizeAsync,\r\n validateImageWithDimension,\r\n getSmartCroppedImagesAsync,\r\n getImageValidationErrorMessage,\r\n} from '@bingads-webui-campaign/image-experience-utils';\r\nimport { constants, newImageFromMTObject, addCropSettingsToCreativeImage } from '@bingads-webui-campaign-react/image-experience-model';\r\nimport { StockImageDataService } from '@bingads-webui-campaign/stock-image-data-service';\r\nimport { InvestImageDataService } from '@bingads-webui-campaign/invest-image-data-service';\r\nimport { VIEWS } from '@bingads-webui-campaign-react/add-media-panel-crud-ad';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\nimport { isCopilotRegionRestricted } from '@bingads-webui-react/copilot-utils';\r\nimport { notificationApi } from '@bingads-webui-react/notification-center';\r\nimport {\r\n SocialMediaRepository,\r\n SocialMediaDataSource,\r\n ImageRepository,\r\n} from '@bingads-webui-campaign-react/image-experience';\r\nimport { MediaRepository } from '@bingads-webui-campaign/media-repository';\r\nimport { stringifySync, parseSync } from '@bingads-webui/safe-json';\r\n\r\n\r\nimport { assetLibraryLegacyI18nMap } from './legacy-i18n-map';\r\n\r\nconst imageOption = constants.defaultImageOption;\r\n\r\nconst removeNullUndefined = (obj) => {\r\n const newObj = {};\r\n _.keys(obj).forEach((key) => {\r\n const value = obj[key];\r\n if (_.isObject(obj[key])) {\r\n newObj[key] = removeNullUndefined(value);\r\n } else if (value !== null && value !== undefined) {\r\n newObj[key] = value;\r\n }\r\n });\r\n return newObj;\r\n};\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nconst serializeData = (data) => {\r\n const serialized = stringifySync(removeNullUndefined(data));\r\n return serialized.replace(/,/g, encodeURIComponent(','));\r\n};\r\n\r\nconst processNewlyAddedImages = ({\r\n imgObjMT,\r\n imageSource,\r\n optionalCallback,\r\n isDisplayAds,\r\n isPortraitImage,\r\n isAudienceAdSmartCropEnabled,\r\n mediaRepository,\r\n isBrandKit = false,\r\n}) => {\r\n const postValidationError = validateImageWithDimension(\r\n imgObjMT.Width,\r\n imgObjMT.Height,\r\n null,\r\n false,\r\n imageOption,\r\n false,\r\n false,\r\n isDisplayAds,\r\n isPortraitImage,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n false,\r\n isBrandKit\r\n );\r\n\r\n if (postValidationError) {\r\n postValidationError.isDueToResizing = true;\r\n\r\n throw postValidationError;\r\n }\r\n\r\n optionalCallback && optionalCallback(); // eslint-disable-line no-unused-expressions\r\n\r\n const imageObject = newImageFromMTObject(imgObjMT, imageSource);\r\n const croppedImagePlacementsPromise = getSmartCroppedImagesAsync({\r\n mediaRepository,\r\n originalImageToCrop: imageObject,\r\n isMultimediaAd: false,\r\n isMultimediaAdinMSANEnabled: false,\r\n imageOption,\r\n aspectRatioOption: constants.defaultAspectRatioOption,\r\n isDisplayAds,\r\n isPortraitImage,\r\n isAudienceAdSmartCropEnabled,\r\n });\r\n\r\n return croppedImagePlacementsPromise;\r\n};\r\n\r\nconst genericErrorMsg = _TL_('We\\'ve encountered an error and can\\'t continue.');\r\n\r\nexport const useAssetLibraryImagePicker = ({\r\n cid,\r\n aid,\r\n oDataConfig,\r\n onNewImageSelected,\r\n i18n,\r\n permissions,\r\n isDisplayAds,\r\n isPortraitImage,\r\n serverContext,\r\n isAllUploadFlowImageUpscaleEnabled,\r\n isBrandKit = false,\r\n}) => {\r\n const [imagePickerError, setImagePickerError] = useState('');\r\n const [isUploadImageUpscaleEnabled, setIsUploadImageUpscaleEnabled] = useState(false);\r\n\r\n useEffect(() => {\r\n if (isAllUploadFlowImageUpscaleEnabled) {\r\n isCopilotRegionRestricted({\r\n feature: 'AssetLibraryImagePicker',\r\n permissions,\r\n serverContext,\r\n })\r\n .then((isRestricted) => {\r\n if (!isRestricted) {\r\n setIsUploadImageUpscaleEnabled(isAllUploadFlowImageUpscaleEnabled);\r\n }\r\n });\r\n }\r\n }, [isAllUploadFlowImageUpscaleEnabled, permissions, serverContext]);\r\n\r\n const errorValidationI18n = useMemo(\r\n () => buildLegacyI18n(i18n, [assetLibraryLegacyI18nMap])\r\n , [i18n]\r\n );\r\n\r\n const minSize = useMemo(() => constants.getMinimumSizeForImage(null, false, imageOption, false, false, isDisplayAds, isPortraitImage), [isDisplayAds, isPortraitImage]);\r\n\r\n const minUploadSize = useMemo(() => {\r\n if (isUploadImageUpscaleEnabled && minSize.length > 1 && minSize[0] >= 352 && minSize[0] <= 703 && minSize[1] >= 184 && minSize[1] <= 368) {\r\n return [352, 184]; // It's a half of constants.DefaultImageMinimumSize 703x368\r\n }\r\n return [];\r\n }, [isUploadImageUpscaleEnabled, minSize]);\r\n\r\n const supportImageUpscale = useMemo(() => (isUploadImageUpscaleEnabled && !_.isEmpty(minUploadSize)), [isUploadImageUpscaleEnabled, minUploadSize]);\r\n\r\n const setImagePickerErrorWithErrorCodeError = useCallback((e) => {\r\n setImagePickerError(getImageValidationErrorMessage(e, errorValidationI18n) || i18n.getString(genericErrorMsg));\r\n }, [errorValidationI18n, i18n]);\r\n\r\n const clearImagePickerError = useCallback(() => {\r\n setImagePickerError('');\r\n }, []);\r\n\r\n const customMediaSourceConfig = useCallback(({ addMediaConfig }) => {\r\n let mediaSourceConfig = addMediaConfig;\r\n\r\n if (!permissions.IsSocialMediaImagesEnabled) {\r\n mediaSourceConfig = _.omit(mediaSourceConfig, VIEWS.SocialMedia);\r\n }\r\n\r\n return mediaSourceConfig;\r\n }, [\r\n permissions,\r\n ]);\r\n\r\n const imageRepository = useMemo(() => new ImageRepository(cid, aid, oDataConfig), [\r\n cid,\r\n aid,\r\n oDataConfig,\r\n ]);\r\n\r\n const stockImageDataService = useMemo(() => new StockImageDataService({\r\n cid,\r\n aid,\r\n oDataConfig,\r\n controller: 'StockImages',\r\n }), [\r\n cid,\r\n aid,\r\n oDataConfig,\r\n ]);\r\n\r\n const investImageDataService = useMemo(() => new InvestImageDataService({ cid, aid }), [cid, aid]);\r\n\r\n const socialMediaRepository = useMemo(() => new SocialMediaRepository({\r\n cid,\r\n aid,\r\n oDataConfig,\r\n }), [\r\n cid,\r\n aid,\r\n oDataConfig,\r\n ]);\r\n\r\n const socialMediaDataSource = useMemo(() => new SocialMediaDataSource({\r\n repository: socialMediaRepository,\r\n }), [\r\n socialMediaRepository,\r\n ]);\r\n\r\n const mediaRepository = useMemo(() => new MediaRepository({\r\n cid, aid, oDataConfig,\r\n }), [cid, aid, oDataConfig]);\r\n\r\n const isAudienceAdSmartCropEnabled = _.result(permissions.dynamic, 'AudienceAdSmartCrop', false);\r\n\r\n // don't have a great way to test uploading through webdriver right now\r\n // looking into it\r\n /* istanbul ignore next */\r\n const uploadImage = useCallback(({ imageData, updateCurrentProgress, name }) => { // eslint-disable-line arrow-body-style, max-len\r\n return validateImageSizeAsync(imageData, null)\r\n .then(() => imageRepository.uploadImageAsync(\r\n imageData,\r\n null,\r\n updateCurrentProgress,\r\n imageOption,\r\n name\r\n ))\r\n .then((response) => {\r\n if (!response || !response.imageId) {\r\n throw new Error(response && response[0] && response[0].Code);\r\n }\r\n return response;\r\n });\r\n }, [\r\n imageRepository,\r\n ]);\r\n\r\n // don't have a great way to test uploading through webdriver right now\r\n // looking into it\r\n /* istanbul ignore next */\r\n const processUploadedImage = useCallback(({ imageId, index, updateCurrentProgress }) => {\r\n const callback = () => updateCurrentProgress(index, 1);\r\n const imageSource = constants.imageSources.Upload;\r\n\r\n return imageRepository.getImageByIdAsync(imageId)\r\n .then(imgObjMT => processNewlyAddedImages({\r\n imgObjMT,\r\n imageSource,\r\n optionalCallback: callback,\r\n isDisplayAds,\r\n isPortraitImage,\r\n mediaRepository,\r\n isAudienceAdSmartCropEnabled,\r\n isBrandKit,\r\n }))\r\n .then((croppedImagePlacements) => {\r\n onNewImageSelected([croppedImagePlacements]);\r\n if (supportImageUpscale) {\r\n return _.first(croppedImagePlacements);\r\n }\r\n return null;\r\n });\r\n }, [imageRepository, isAudienceAdSmartCropEnabled, isDisplayAds, isPortraitImage, mediaRepository, onNewImageSelected, supportImageUpscale]);\r\n\r\n const onProcessUploadComplete = useCallback((args = []) => {\r\n const upscaledImages = _.filter(args, item => _.result(item, 'isImageUpscaled') === true);\r\n const count = upscaledImages.length;\r\n\r\n if (count === 1) {\r\n const imageName = _.get(upscaledImages, ['0', 'text']);\r\n if (imageName) {\r\n notificationApi.showInfo(i18n.getString(_TL_('We upscaled {{fileName}} to meet the minimum required file size. Please note that you can also upload a higher quality image if needed.'), { fileName: imageName }));\r\n }\r\n } else if (count > 1) {\r\n notificationApi.showInfo(i18n.getString(_TL_('We upscaled {{fileCount}} images to meet the minimum required file size. Please note that you can also upload higher quality images if needed.'), { fileCount: count }));\r\n }\r\n }, [i18n]);\r\n\r\n const addImageByUrl = useCallback((\r\n imageUrl,\r\n imageSource = constants.imageSources.WebsiteCarousel\r\n // eslint-disable-next-line arrow-body-style\r\n ) => {\r\n return validateImageSizeAsync(imageUrl, null, false, imageOption)\r\n .then(() => (\r\n imageRepository.bulkSaveImagesByUrl([{ url: imageUrl }])\r\n .then((ids) => {\r\n if (_.isObject(_.first(ids))) {\r\n throw new Error(ids[0].code);\r\n }\r\n\r\n return ids[0];\r\n })\r\n ))\r\n .then(id => imageRepository.getImageByIdAsync(id))\r\n .then(imgObjMT => processNewlyAddedImages({\r\n imgObjMT,\r\n imageSource,\r\n isDisplayAds,\r\n isPortraitImage,\r\n mediaRepository,\r\n isAudienceAdSmartCropEnabled,\r\n isBrandKit,\r\n }))\r\n .then((croppedImagePlacements) => {\r\n onNewImageSelected([croppedImagePlacements]);\r\n return {\r\n processedImage: croppedImagePlacements,\r\n };\r\n })\r\n .catch((e) => {\r\n setImagePickerErrorWithErrorCodeError(e);\r\n\r\n return {\r\n errorMessage: getImageValidationErrorMessage(e, errorValidationI18n) || i18n.getString(genericErrorMsg),\r\n };\r\n });\r\n }, [imageRepository, isDisplayAds, isPortraitImage, mediaRepository, isAudienceAdSmartCropEnabled, onNewImageSelected, setImagePickerErrorWithErrorCodeError, errorValidationI18n, i18n]);\r\n\r\n\r\n const addCreatives = useCallback(({ creativeData }) => {\r\n const getMTImages = async (ids) => {\r\n const images = await Promise.all(ids.map(id => imageRepository.getImageByIdAsync(id)));\r\n return images;\r\n };\r\n\r\n const getImages = async (imgObjsMT) => {\r\n const images = await Promise.all(imgObjsMT.map(imgObjMT => addCropSettingsToCreativeImage(imgObjMT)));\r\n return images;\r\n };\r\n\r\n // save original image first.\r\n const originalImageUrls = _.map(creativeData, (creative) => {\r\n const { template } = creative || {};\r\n\r\n const { image } = template || {};\r\n\r\n return { url: image.url };\r\n });\r\n\r\n\r\n return imageRepository.bulkSaveImagesByUrl(originalImageUrls)\r\n .then(ids => Promise.all(ids.map(id => imageRepository.getImageByIdAsync(id))))\r\n .then(images => creativeData.map((creative, index) => {\r\n const { template } = creative || {};\r\n\r\n // eslint-disable-next-line no-param-reassign\r\n creative.image = images[index].Url;\r\n template.image.url = images[index].Url;\r\n\r\n return {\r\n url: creative.url,\r\n metadata: serializeData(creative),\r\n baseId: images[index].Id,\r\n sourceType: 'AIGenerated',\r\n };\r\n }))\r\n .then(args => imageRepository.bulkSaveImagesByUrl(args))\r\n .then((ids) => {\r\n const error = _.find(ids, id => _.isObject(id));\r\n if (error) {\r\n throw new Error(error.code);\r\n }\r\n\r\n return ids;\r\n })\r\n .then(getMTImages)\r\n .then(getImages);\r\n }, [imageRepository]);\r\n\r\n const getStockImages = useCallback(args => stockImageDataService.getStockImages(args), [\r\n stockImageDataService,\r\n ]);\r\n\r\n const getInvestImages = useCallback(args => investImageDataService.getInvestAssets(args), [\r\n investImageDataService,\r\n ]);\r\n\r\n const onSelectStockImage = useCallback(({ selectedImageId }) => {\r\n const imageSource = constants.imageSources.Stock;\r\n\r\n return stockImageDataService.saveStockImage({\r\n stockImageId: selectedImageId,\r\n stockImageVendorId: 'ShutterStock',\r\n })\r\n .then(({ value }) => imageRepository.getImageByIdAsync(value))\r\n .then(imgObjMT => processNewlyAddedImages({\r\n imgObjMT,\r\n imageSource,\r\n isDisplayAds,\r\n isPortraitImage,\r\n mediaRepository,\r\n isAudienceAdSmartCropEnabled,\r\n }))\r\n .then((croppedImagePlacements) => {\r\n onNewImageSelected([croppedImagePlacements]);\r\n })\r\n .catch((e) => {\r\n setImagePickerErrorWithErrorCodeError(e);\r\n });\r\n }, [stockImageDataService, imageRepository, isDisplayAds, isPortraitImage, mediaRepository, isAudienceAdSmartCropEnabled, onNewImageSelected, setImagePickerErrorWithErrorCodeError]);\r\n\r\n const onImageSelected = useCallback((image, imageSource = constants.imageSources.Existing) => {\r\n const { id } = image || {};\r\n\r\n if (id) {\r\n return imageRepository.getImageByIdAsync(id)\r\n .then((imgObjMT) => {\r\n const { Metadata } = imgObjMT;\r\n\r\n let uriDecodedMetaData = Metadata;\r\n\r\n // while saving we only replace the ',' symbol with %2C. So we need to replace it back to ','\r\n if (Metadata) {\r\n uriDecodedMetaData = Metadata.replace(/%2C/g, ',');\r\n }\r\n\r\n const decodedMetadata = parseSync(uriDecodedMetaData);\r\n\r\n // if it is a display plus creative return the image\r\n if (decodedMetadata && decodedMetadata.template) {\r\n return {\r\n image: addCropSettingsToCreativeImage(imgObjMT),\r\n creativeData: {\r\n creativeMeta: decodedMetadata,\r\n creativeId: id,\r\n },\r\n };\r\n }\r\n\r\n return processNewlyAddedImages({\r\n imgObjMT,\r\n imageSource,\r\n isDisplayAds,\r\n isPortraitImage,\r\n mediaRepository,\r\n isAudienceAdSmartCropEnabled,\r\n isBrandKit,\r\n });\r\n })\r\n .then((croppedImagePlacements) => {\r\n onNewImageSelected([croppedImagePlacements]);\r\n })\r\n .catch((e) => {\r\n setImagePickerErrorWithErrorCodeError(e);\r\n });\r\n }\r\n\r\n return Promise.resolve();\r\n }, [imageRepository, isAudienceAdSmartCropEnabled, isDisplayAds, isPortraitImage, mediaRepository, onNewImageSelected, setImagePickerErrorWithErrorCodeError]);\r\n\r\n const onImagesSelected = useCallback((imageIds, imageSource = constants.imageSources.Existing) => {\r\n const addImagePromises = [];\r\n\r\n _.each(imageIds, (imageId) => {\r\n addImagePromises.push(imageRepository.getImageByIdAsync(imageId)\r\n .then(((imgObjMT) => {\r\n const { Metadata } = imgObjMT;\r\n\r\n let uriDecodedMetaData = Metadata;\r\n\r\n // while saving we only replace the ',' symbol with %2C. So we need to replace it back to ','\r\n if (Metadata) {\r\n uriDecodedMetaData = Metadata.replace(/%2C/g, ',');\r\n }\r\n\r\n const decodedMetadata = parseSync(uriDecodedMetaData);\r\n\r\n // if it is a display plus creative return the image\r\n if (decodedMetadata && decodedMetadata.template) {\r\n return {\r\n image: addCropSettingsToCreativeImage(imgObjMT),\r\n creativeData: {\r\n creativeMeta: decodedMetadata,\r\n creativeId: imageId,\r\n },\r\n };\r\n }\r\n\r\n return processNewlyAddedImages({\r\n imgObjMT,\r\n imageSource,\r\n isDisplayAds,\r\n isPortraitImage,\r\n mediaRepository,\r\n isAudienceAdSmartCropEnabled,\r\n isBrandKit,\r\n });\r\n })));\r\n });\r\n\r\n return Promise.all(addImagePromises)\r\n .then(processedImages => onNewImageSelected(processedImages))\r\n .catch((e) => {\r\n setImagePickerErrorWithErrorCodeError(e);\r\n });\r\n }, [imageRepository, isAudienceAdSmartCropEnabled, isDisplayAds, isPortraitImage, mediaRepository, onNewImageSelected, setImagePickerErrorWithErrorCodeError]);\r\n\r\n return {\r\n imagePickerError,\r\n setImagePickerError: setImagePickerErrorWithErrorCodeError,\r\n clearImagePickerError,\r\n uploadImage,\r\n processUploadedImage,\r\n onProcessUploadComplete,\r\n minSize,\r\n minUploadSize,\r\n supportImageUpscale,\r\n addImageByUrl,\r\n addCreatives,\r\n getStockImages,\r\n getInvestImages,\r\n onSelectStockImage,\r\n onImageSelected,\r\n socialMediaDataSource,\r\n customMediaSourceConfig,\r\n onImagesSelected,\r\n };\r\n};\r\n","import { useState } from 'react';\r\nimport { VIEWS } from '@bingads-webui-campaign-react/add-media-panel-crud-ad';\r\n\r\nconst WebsiteSuggestionTab = 2;\r\n\r\nexport const useImagePicker = () => {\r\n const [show, setShow] = useState(false);\r\n const [activeImagePickerPillIndex, setActiveImagePillIndex] = useState(0);\r\n const [selectedMediaPanelSource, setSelectedMediaPanelSource] = useState(VIEWS.LandingPage);\r\n\r\n const setDisplayImagePicker = (display) => {\r\n setShow(display);\r\n setActiveImagePillIndex(0);\r\n setSelectedMediaPanelSource(VIEWS.LandingPage);\r\n };\r\n\r\n const displayWebsiteSuggestionTab = () => {\r\n setShow(true);\r\n setActiveImagePillIndex(WebsiteSuggestionTab);\r\n setSelectedMediaPanelSource(VIEWS.WebsiteImage);\r\n };\r\n\r\n return {\r\n displayImagePicker: show,\r\n activeImagePickerPillIndex,\r\n setDisplayImagePicker,\r\n displayWebsiteSuggestionTab,\r\n selectedMediaPanelSource,\r\n setSelectedMediaPanelSource,\r\n };\r\n};\r\n","import { useEffect, useReducer, useCallback, useRef, useState } from 'react';\r\nimport _ from 'underscore';\r\nimport {\r\n SuggestionPoller,\r\n SuggestionStatus,\r\n mapSuggestionResponseToState,\r\n} from '@bingads-webui-campaign/media-repository';\r\nimport { getAdCreatorInstrumentation } from '@bingads-webui-campaign/ad-creator-tools-instrumentation';\r\nimport { constants } from '@bingads-webui-campaign-react/image-experience-model';\r\nimport { MessageBarType } from '@bingads-webui-react/fabric-control';\r\n\r\n// for every request to poll, we use debounce of 1000ms.\r\nconst DebouncedPollWaitMs = 1000;\r\n\r\nconst websiteSuggestionReducer = (state, action) => {\r\n const {\r\n type,\r\n response,\r\n isSubdomainScraping,\r\n error,\r\n selectedIndex,\r\n } = action;\r\n\r\n if (type === SuggestionStatus.SelectSuggestionError) {\r\n return {\r\n ...state,\r\n carousel: {\r\n ...state.carousel,\r\n message: {\r\n type: MessageBarType.error,\r\n message: error.errorMessage,\r\n },\r\n },\r\n };\r\n }\r\n\r\n if (type === SuggestionStatus.SelectSuggestionComplete) {\r\n return {\r\n ...state,\r\n carousel: {\r\n ...state.carousel,\r\n images: _.reject(state.carousel.images, (val, ind) => ind === selectedIndex),\r\n message: undefined,\r\n },\r\n };\r\n }\r\n\r\n const updatedSuggestions = mapSuggestionResponseToState(type, response, isSubdomainScraping);\r\n\r\n // in subdomain scraping case, carousel state isn't updated; keep existing suggestion carousel state\r\n if (!updatedSuggestions.carousel) {\r\n updatedSuggestions.carousel = state.carousel;\r\n }\r\n\r\n return updatedSuggestions;\r\n};\r\n\r\nexport const useWebsiteSuggestion = ({\r\n oDataConfig,\r\n adContext,\r\n instrumentation,\r\n logActivity,\r\n permissions,\r\n fullUrl,\r\n hasErrorInUrl,\r\n headlines,\r\n descriptions,\r\n adCreatorScenario,\r\n customizedGetMinimumSizeForImage = null,\r\n}) => {\r\n const [\r\n suggestionState,\r\n dispatchSuggestionState,\r\n ] = useReducer(\r\n websiteSuggestionReducer,\r\n fullUrl ? {} : mapSuggestionResponseToState(SuggestionStatus.EmptyURL)\r\n );\r\n\r\n const onPollingSuggestionCompleted = (response, isSubdomainScraping) => {\r\n dispatchSuggestionState({\r\n type: response.error ? SuggestionStatus.ServerError : SuggestionStatus.FetchSucceed,\r\n response,\r\n isSubdomainScraping,\r\n });\r\n };\r\n\r\n // could not replace it with useMemo or useRef\r\n // The carousel will be refreshed twice. So still keep this way\r\n const [poller] = useState(() => {\r\n const { websiteSuggestionActivity: logger } =\r\n getAdCreatorInstrumentation(instrumentation, adCreatorScenario, permissions);\r\n\r\n return new SuggestionPoller({\r\n cid: adContext.advertiserCustomerId,\r\n aid: adContext.accountId,\r\n cmpId: adContext.campaignId,\r\n oDataConfig,\r\n jobCompleteCallback: onPollingSuggestionCompleted,\r\n logger,\r\n });\r\n });\r\n\r\n // this is to support API calls directly from suggestionPoller\r\n const pollerWrapperRef = useRef({});\r\n\r\n pollerWrapperRef.current.getLandingPageSuggestions =\r\n useCallback((opts) => {\r\n logActivity(`Under Image extensions: getLandingPageSuggestions: opts: ${JSON.stringify(opts)}`);\r\n\r\n return poller.getLandingPageSuggestions({\r\n ...opts,\r\n headlines,\r\n descriptions,\r\n });\r\n }, [descriptions, headlines, logActivity, poller]);\r\n\r\n pollerWrapperRef.current.getMoreLandingPageSuggestions =\r\n useCallback((opts) => {\r\n logActivity(`Under Image extensions: getMoreLandingPageSuggestions: opts: ${JSON.stringify(opts)}`);\r\n\r\n return poller.getMoreLandingPageSuggestions({\r\n ...opts,\r\n headlines,\r\n descriptions,\r\n });\r\n }, [descriptions, headlines, logActivity, poller]);\r\n\r\n const fetchSuggestionByUrl =\r\n useCallback(_.debounce(\r\n (url, headlinesArg, descriptionsArg, enableOfflinePollingDelay = false) => {\r\n dispatchSuggestionState({ type: SuggestionStatus.FetchInProgress });\r\n\r\n const [width, height] = customizedGetMinimumSizeForImage ? customizedGetMinimumSizeForImage() : constants.getMinimumSizeForImage();\r\n\r\n logActivity(`Under Image extensions: get landing page suggestions: url: ${url}; headlinesArgs: ${headlinesArg}; descriptionsArg: ${descriptionsArg}`);\r\n\r\n poller.getLandingPageSuggestions({\r\n landingPageUrl: url,\r\n headlines: headlinesArg,\r\n descriptions: descriptionsArg,\r\n enableOfflinePollingDelay,\r\n minimumResolution: { width, height },\r\n });\r\n },\r\n DebouncedPollWaitMs\r\n ), [poller]);\r\n\r\n useEffect(() => {\r\n poller.cancel();\r\n\r\n if (_.isEmpty(fullUrl)) {\r\n dispatchSuggestionState({ type: SuggestionStatus.EmptyURL });\r\n } else if (hasErrorInUrl) {\r\n dispatchSuggestionState({ type: SuggestionStatus.InvalidURL });\r\n } else {\r\n fetchSuggestionByUrl(\r\n fullUrl,\r\n headlines,\r\n descriptions\r\n );\r\n }\r\n\r\n return () => {\r\n poller.cancel();\r\n };\r\n }, [descriptions, fetchSuggestionByUrl, fullUrl, hasErrorInUrl, headlines, poller]);\r\n\r\n return {\r\n suggestionState,\r\n suggestionPoller: pollerWrapperRef.current,\r\n dispatchSuggestionState,\r\n };\r\n};\r\n","export const VIEWS = {\r\n WebsiteImage: 'WebsiteImage',\r\n StockImage: 'StockImage',\r\n SocialMedia: 'SocialMedia',\r\n LandingPage: 'LandingPage',\r\n AIGCImage: 'AI-generated',\r\n InvestImage: 'InvestImage',\r\n};\r\n","import Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport React, { useCallback, useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { WebsiteImageView } from '@bingads-webui-campaign-react/add-website-images-view';\r\nimport { ROOT_FOLDER_ID, MaxAddAssetJobInParell } from '@bingads-webui-campaign-react/asset-library-model';\r\nimport { constants } from '@bingads-webui-campaign-react/image-experience-model';\r\nimport { validateImageSizeAsync } from '@bingads-webui-campaign/image-experience-utils';\r\n\r\nimport { useImageExperienceAdapterForWebsiteImages } from './use-image-experience-adapter';\r\nimport { VIEWS } from '../view-type';\r\n\r\nconst ManagedWebsiteImageView = ({\r\n imageExperienceProps,\r\n minSize,\r\n setShowBlocker,\r\n assetLibraryConfig,\r\n assetLibraryDataService,\r\n logger,\r\n maxUploadNum,\r\n triggerAddImagesRef,\r\n setDisableApplyButton,\r\n setShowApplyButton,\r\n setSelectionInfoText,\r\n setErrors,\r\n i18n,\r\n perfMarker,\r\n}) => {\r\n const [images, setImages] = useState([]);\r\n const setMoreImages = useCallback((newImages) => {\r\n setImages(prevImages => [...prevImages, ...newImages]);\r\n }, []);\r\n\r\n const websiteImageConfig = useImageExperienceAdapterForWebsiteImages({\r\n imageExperienceProps,\r\n minSize,\r\n setShowBlocker,\r\n setImages,\r\n setMoreImages,\r\n });\r\n\r\n const { imageOption, isMultimediaAd, isBrandKit } = imageExperienceProps;\r\n\r\n const {\r\n enableWebsiteMultipleSelection: enableMultipleSelection,\r\n onImageSelected,\r\n onImagesSelected,\r\n onImageAddError,\r\n } = assetLibraryConfig || {};\r\n\r\n // single selection mode\r\n const onSelectImage = useCallback((index) => {\r\n setShowBlocker(true);\r\n\r\n const imageUrl = images[index].fullUrl;\r\n\r\n const addImagePromise = validateImageSizeAsync(imageUrl, null, isMultimediaAd, imageOption)\r\n .then(() => assetLibraryDataService.uploadImageByUrl({\r\n imageUrl,\r\n folderId: ROOT_FOLDER_ID,\r\n sourceType: constants.sourceTypes.WebsiteImported,\r\n }))\r\n .then((res) => {\r\n if (_.isArray(res)) {\r\n throw new Error(res[0] && res[0].Code);\r\n }\r\n logger.logTrace('Ad creation flow - selected website image', { imageId: res });\r\n return onImageSelected({ id: res }, constants.imageSources.Website);\r\n })\r\n .catch(e => onImageAddError(e));\r\n\r\n return addImagePromise\r\n .finally(() => {\r\n setShowBlocker(false);\r\n });\r\n }, [setShowBlocker, images, isMultimediaAd, imageOption, assetLibraryDataService, logger, onImageSelected, onImageAddError]);\r\n\r\n // multi selection mode\r\n const onSelectImageForMultiSelection = useCallback((index) => {\r\n const selectedImage = images[index];\r\n const newImage = { ...selectedImage, isSelected: !selectedImage.isSelected };\r\n const newArr = [...images];\r\n newArr[index] = newImage;\r\n setImages(newArr);\r\n }, [images]);\r\n\r\n useEffect(() => {\r\n // init the state for multiple selection\r\n if (enableMultipleSelection) {\r\n setShowApplyButton(false);\r\n setDisableApplyButton(true);\r\n setErrors([]);\r\n setSelectionInfoText(i18n.getString(_TL_('0 of {{limitNumber}} images selected'), { limitNumber: maxUploadNum }));\r\n }\r\n }, [enableMultipleSelection, i18n, maxUploadNum, setDisableApplyButton, setErrors, setSelectionInfoText, setShowApplyButton]);\r\n\r\n useEffect(() => {\r\n const selectedImages = _.filter(images, image => image && image.isSelected) || [];\r\n if (selectedImages.length > maxUploadNum) {\r\n setErrors([i18n.getString(_TL_('You\\'ve exceeded the max. number of assets you can add at a time ({{limitNumber}}). Please try again.'), { limitNumber: maxUploadNum })]);\r\n setDisableApplyButton(true);\r\n } else if (selectedImages.length > 0) {\r\n setErrors([]);\r\n setShowApplyButton(true);\r\n setDisableApplyButton(false);\r\n } else {\r\n setErrors([]);\r\n setShowApplyButton(false);\r\n setDisableApplyButton(true);\r\n }\r\n\r\n const singularImageString = _TL_('{{selectedNumber}} of {{limitNumber}} image selected');\r\n const pluralImagesString = _TL_('{{selectedNumber}} of {{limitNumber}} images selected');\r\n const stringToUse = maxUploadNum > 1 ? pluralImagesString : singularImageString;\r\n setSelectionInfoText(i18n.getString(stringToUse, { selectedNumber: selectedImages.length, limitNumber: maxUploadNum }));\r\n }, [enableMultipleSelection, i18n, images, maxUploadNum, setDisableApplyButton, setErrors, setSelectionInfoText]);\r\n\r\n // only for multiple selection mode\r\n const onApplyButtonClick = useCallback(() => {\r\n const selectedImages = _.filter(images, image => image && image.isSelected) || [];\r\n\r\n setShowBlocker(true);\r\n\r\n const websiteImagePerfMarker = perfMarker.createChild('websiteImagePicker');\r\n websiteImagePerfMarker.willInit();\r\n\r\n Promise.map(\r\n selectedImages,\r\n (img) => {\r\n const { fullUrl } = img || {};\r\n return validateImageSizeAsync(fullUrl, null, isMultimediaAd, imageOption, false, false, false, false, false, false, false, false, false, isBrandKit)\r\n .then(() => assetLibraryDataService.uploadImageByUrl({\r\n imageUrl: fullUrl,\r\n folderId: ROOT_FOLDER_ID,\r\n sourceType: constants.sourceTypes.WebsiteImported,\r\n }))\r\n .then((res) => {\r\n if (_.isArray(res)) {\r\n throw new Error(res[0] && res[0].Code);\r\n }\r\n return res;\r\n });\r\n },\r\n { concurrency: MaxAddAssetJobInParell }\r\n ).then((imageIds) => {\r\n logger.logTrace('Ad creation flow - selected website images', { imageIds });\r\n return onImagesSelected(imageIds, constants.imageSources.Website);\r\n }).catch((err) => {\r\n onImageAddError(err);\r\n }).finally(() => {\r\n setShowBlocker(false);\r\n websiteImagePerfMarker.done();\r\n });\r\n }, [assetLibraryDataService, imageOption, images, isMultimediaAd, logger, onImageAddError, onImagesSelected, perfMarker, setShowBlocker]);\r\n\r\n // listen to the apply button click for multiple selection\r\n // eslint-disable-next-line no-param-reassign\r\n triggerAddImagesRef.current = enableMultipleSelection ? onApplyButtonClick : undefined;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nManagedWebsiteImageView.propTypes = {\r\n imageExperienceProps: PropTypes.shape({\r\n suggestion: PropTypes.shape({\r\n images: PropTypes.arrayOf(PropTypes.shape({\r\n thumbnailUrl: PropTypes.string,\r\n fullUrl: PropTypes.string,\r\n })),\r\n inProgess: PropTypes.bool,\r\n hasMore: PropTypes.bool,\r\n }),\r\n finalUrl: PropTypes.string,\r\n onUpdateFinalUrl: PropTypes.func,\r\n finalUrlProtocol: PropTypes.string,\r\n onUpdateFinalUrlPrefix: PropTypes.func,\r\n suggestionPoller: PropTypes.shape({\r\n getMoreLandingPageSuggestions: PropTypes.func,\r\n getLandingPageSuggestions: PropTypes.func,\r\n }),\r\n }).isRequired,\r\n minSize: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n setShowBlocker: PropTypes.func,\r\n assetLibraryDataService: PropTypes.shape({}).isRequired,\r\n assetLibraryConfig: PropTypes.shape({\r\n onImageSelected: PropTypes.func,\r\n onImagesSelected: PropTypes.func,\r\n onImageAddError: PropTypes.func,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n triggerAddImagesRef: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n setShowApplyButton: PropTypes.func,\r\n setDisableApplyButton: PropTypes.func,\r\n setSelectionInfoText: PropTypes.func,\r\n setErrors: PropTypes.func,\r\n maxUploadNum: PropTypes.number,\r\n};\r\n\r\nManagedWebsiteImageView.defaultProps = {\r\n setShowBlocker: _.noop,\r\n setShowApplyButton: _.noop,\r\n setDisableApplyButton: _.noop,\r\n setSelectionInfoText: _.noop,\r\n setErrors: _.noop,\r\n maxUploadNum: 16,\r\n};\r\n\r\nexport const websiteImageSourceConfig = {\r\n title: _TL_('Website images'),\r\n showBackButton: true,\r\n onRenderContent: props => (\r\n \r\n ),\r\n buttonConfig: {\r\n label: _TL_('Website images'),\r\n view: VIEWS.WebsiteImage,\r\n iconName: 'Link12',\r\n buttonLocator: 'website-images',\r\n },\r\n};\r\n","import { useCallback, useState, useMemo, useEffect, useRef } from 'react';\r\nimport _ from 'underscore';\r\n\r\nimport { extendPath, getUrlProtocolAndDomain } from '@bingads-webui/url-util';\r\n\r\nexport const useImageExperienceAdapterForWebsiteImages = ({\r\n imageExperienceProps,\r\n minSize,\r\n setShowBlocker,\r\n setImages,\r\n setMoreImages,\r\n}) => {\r\n const {\r\n suggestion,\r\n finalUrl,\r\n onUpdateFinalUrl,\r\n finalUrlProtocol,\r\n onUpdateFinalUrlPrefix,\r\n suggestionPoller,\r\n } = imageExperienceProps;\r\n\r\n const [pageNumber, setPageNumber] = useState(1);\r\n const [subdomain, setSubdomain] = useState('');\r\n const [hasMore, setHasMore] = useState(true);\r\n const lastSuggestionImages = useRef([]);\r\n\r\n const finalUrlWithDomain = useMemo(() => getUrlProtocolAndDomain(finalUrl || ''), [\r\n finalUrl,\r\n ]);\r\n\r\n useEffect(() => {\r\n const baseImages = suggestion.images || [];\r\n\r\n if (!suggestion.inProgress && pageNumber === 1 && lastSuggestionImages.current !== baseImages) {\r\n setImages(_.map(baseImages, ({ fullUrl, thumbnailUrl }) => ({\r\n thumbnailSrc: thumbnailUrl,\r\n fullUrl,\r\n })));\r\n setHasMore(suggestion.hasMore);\r\n lastSuggestionImages.current = baseImages;\r\n }\r\n }, [suggestion, setImages, setHasMore, pageNumber]);\r\n\r\n const onSubdomainChange = useCallback((ev, newSubdomain) => {\r\n setSubdomain(newSubdomain);\r\n }, [setSubdomain]);\r\n\r\n const onEnteredFinalUrl = useCallback((newUrl, ev) => {\r\n onUpdateFinalUrl(ev);\r\n }, [onUpdateFinalUrl]);\r\n\r\n const onUpdateProtocol = useCallback((newProtocol, ev) => {\r\n onUpdateFinalUrlPrefix(ev, { text: newProtocol });\r\n }, [onUpdateFinalUrlPrefix]);\r\n\r\n const onSubdomainChanged = useCallback((ev) => {\r\n const newSubdomain = ev && ev.target && ev.target.value;\r\n\r\n if (!_.isNull(newSubdomain) && !_.isUndefined(newSubdomain)) {\r\n const fullUrl = _.isEmpty(newSubdomain.trim()) ?\r\n finalUrl : extendPath(finalUrlWithDomain, newSubdomain);\r\n setShowBlocker(true);\r\n setPageNumber(1);\r\n suggestionPoller.getLandingPageSuggestions({\r\n landingPageUrl: fullUrl,\r\n enableOfflinePollingDelay: false,\r\n forceInternalScrapingService: !!newSubdomain,\r\n minimumResolution: {\r\n width: minSize[0],\r\n height: minSize[1],\r\n },\r\n additionalCallback: () => {\r\n setShowBlocker(false);\r\n },\r\n });\r\n setSubdomain(newSubdomain);\r\n }\r\n }, [finalUrl, finalUrlWithDomain, suggestionPoller, setSubdomain, minSize, setShowBlocker]);\r\n\r\n const isLoadingFirstPage = useMemo(() => suggestion && suggestion.inProgress && pageNumber === 1, [\r\n pageNumber,\r\n suggestion,\r\n ]);\r\n\r\n const loadNextPage = useCallback(() => {\r\n if (hasMore) {\r\n let url = finalUrl;\r\n\r\n if (subdomain) {\r\n url = extendPath(finalUrlWithDomain, subdomain);\r\n }\r\n\r\n const newPageNumber = pageNumber + 1;\r\n setPageNumber(newPageNumber);\r\n suggestionPoller.getMoreLandingPageSuggestions({\r\n landingPageUrl: url,\r\n pageNumber: newPageNumber,\r\n forceInternalScrapingService: !!subdomain,\r\n minimumResolution: {\r\n width: minSize[0],\r\n height: minSize[1],\r\n },\r\n }).then((data) => {\r\n const { TotalCount, PageSize, PageNumber } = data.ImagePaging;\r\n\r\n setHasMore(PageNumber * PageSize < TotalCount);\r\n\r\n setMoreImages(_.map(data.Images, item => ({\r\n thumbnailSrc: item.ThumbnailUrl || item.ImageUrl,\r\n fullUrl: item.ImageUrl,\r\n })));\r\n });\r\n }\r\n }, [\r\n hasMore,\r\n suggestionPoller,\r\n minSize,\r\n subdomain,\r\n pageNumber,\r\n finalUrl,\r\n finalUrlWithDomain,\r\n setMoreImages,\r\n ]);\r\n\r\n const websiteImageConfig = useMemo(() => ({\r\n isLoadingFirstPage: !!isLoadingFirstPage,\r\n isLoading: !!suggestion.inProgress,\r\n hasMore,\r\n finalUrl,\r\n subdomain,\r\n onSubdomainChange,\r\n onSubdomainChanged,\r\n loadNextPage,\r\n onEnteredFinalUrl,\r\n pageSize: 30,\r\n protocol: finalUrlProtocol,\r\n onUpdateProtocol,\r\n showTextAbovePicker: true,\r\n }), [\r\n hasMore,\r\n isLoadingFirstPage,\r\n suggestion,\r\n finalUrl,\r\n subdomain,\r\n onSubdomainChange,\r\n onSubdomainChanged,\r\n loadNextPage,\r\n onEnteredFinalUrl,\r\n finalUrlProtocol,\r\n onUpdateProtocol,\r\n ]);\r\n\r\n return websiteImageConfig;\r\n};\r\n","import Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport React, { useCallback, useEffect, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { StockImageView } from '@bingads-webui-campaign-react/add-stock-images-view';\r\nimport { constants } from '@bingads-webui-campaign-react/image-experience-model';\r\nimport { ROOT_FOLDER_ID, MaxAddAssetJobInParell } from '@bingads-webui-campaign-react/asset-library-model';\r\nimport { VIEWS } from '../view-type';\r\n\r\nconst ManagedStockImageView = ({\r\n stockImageConfig,\r\n setShowBlocker,\r\n perfMarker,\r\n assetLibraryConfig,\r\n assetLibraryDataService,\r\n logger,\r\n maxUploadNum,\r\n setShowApplyButton,\r\n triggerAddImagesRef,\r\n setSelectionInfoText,\r\n setDisableApplyButton,\r\n setErrors,\r\n i18n,\r\n}) => {\r\n const {\r\n onImageSelected,\r\n onImagesSelected,\r\n onImageAddError,\r\n enableStockMultipleSelection: enableMultipleSelection,\r\n } = assetLibraryConfig;\r\n\r\n const onChangeImageIdSelection = useCallback((args) => {\r\n const stockImagePerfMarker = perfMarker.createChild('stockImagePicker');\r\n stockImagePerfMarker.willInit();\r\n\r\n const selectStockImage = assetLibraryDataService.uploadStockImage({\r\n stockImageId: args.selectedImageId,\r\n folderId: ROOT_FOLDER_ID,\r\n })\r\n .then(value => onImageSelected({ id: value }, constants.imageSources.Stock))\r\n .catch(e => onImageAddError(e));\r\n\r\n setShowBlocker(true);\r\n selectStockImage\r\n .tap(() => {\r\n const { selectedImageId: imageId } = args || {};\r\n logger.logTrace('Ad creation flow - selected stock image', { imageId });\r\n })\r\n .finally(() => {\r\n setShowBlocker(false);\r\n stockImagePerfMarker.done();\r\n });\r\n }, [perfMarker, setShowBlocker, assetLibraryDataService, onImageSelected, onImageAddError, logger]);\r\n\r\n const [images, setImages] = useState([]);\r\n const [hasMore, setHasMore] = useState(true);\r\n const [skip, setSkip] = useState(0);\r\n const [serializedFilterForComp, setSerializedFilterForComp] = useState('');\r\n const [isLoadingFirstPage, setIsLoadingFirstPage] = useState(false);\r\n const [searchQuery, setSearchQuery] = useState('');\r\n const [filter, setFilter] = useState({});\r\n\r\n useEffect(() => {\r\n // init the state for multiple selection\r\n if (enableMultipleSelection) {\r\n setShowApplyButton(true);\r\n setDisableApplyButton(true);\r\n setErrors([]);\r\n setSelectionInfoText(i18n.getString(_TL_('0 of {{limitNumber}} images selected'), { limitNumber: maxUploadNum }));\r\n }\r\n }, [enableMultipleSelection, i18n, maxUploadNum, setDisableApplyButton, setErrors, setSelectionInfoText, setShowApplyButton]);\r\n\r\n useEffect(() => {\r\n const selectedImages = _.filter(images, image => image && image.isSelected) || [];\r\n if (selectedImages.length > maxUploadNum) {\r\n setErrors([i18n.getString(_TL_('You\\'ve exceeded the max. number of assets you can add at a time ({{limitNumber}}). Please try again.'), { limitNumber: maxUploadNum })]);\r\n setDisableApplyButton(true);\r\n } else if (selectedImages.length > 0) {\r\n setErrors([]);\r\n setDisableApplyButton(false);\r\n } else {\r\n setErrors([]);\r\n setDisableApplyButton(true);\r\n }\r\n\r\n const singularImageString = _TL_('{{selectedNumber}} of {{limitNumber}} image selected');\r\n const pluralImagesString = _TL_('{{selectedNumber}} of {{limitNumber}} images selected');\r\n const stringToUse = maxUploadNum > 1 ? pluralImagesString : singularImageString;\r\n setSelectionInfoText(i18n.getString(stringToUse, { selectedNumber: selectedImages.length, limitNumber: maxUploadNum }));\r\n }, [enableMultipleSelection, i18n, images, maxUploadNum, setDisableApplyButton, setErrors, setSelectionInfoText]);\r\n\r\n // only for multiple selection mode\r\n const onApplyButtonClick = useCallback(() => {\r\n const selectedImages = _.filter(images, image => image && image.isSelected) || [];\r\n\r\n setShowBlocker(true);\r\n\r\n const stockImagePerfMarker = perfMarker.createChild('stockImagePicker');\r\n stockImagePerfMarker.willInit();\r\n\r\n Promise.map(\r\n selectedImages,\r\n (img) => {\r\n const { id } = img || {};\r\n return assetLibraryDataService.uploadStockImage({ stockImageId: id, folderId: ROOT_FOLDER_ID });\r\n },\r\n { concurrency: MaxAddAssetJobInParell }\r\n )\r\n .then((imageIds) => {\r\n logger.logTrace('Ad creation flow - selected stock images', { imageIds });\r\n return onImagesSelected(imageIds, constants.imageSources.Stock);\r\n })\r\n .catch((err) => {\r\n onImageAddError(err);\r\n })\r\n .finally(() => {\r\n setShowBlocker(false);\r\n stockImagePerfMarker.done();\r\n });\r\n }, [assetLibraryDataService, images, logger, onImageAddError, onImagesSelected, perfMarker, setShowBlocker]);\r\n\r\n // listen to the apply button click for multiple selection\r\n // eslint-disable-next-line no-param-reassign\r\n triggerAddImagesRef.current = enableMultipleSelection ? onApplyButtonClick : undefined;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nManagedStockImageView.propTypes = {\r\n stockImageConfig: PropTypes.shape({\r\n getStockImages: PropTypes.func,\r\n }).isRequired,\r\n setShowBlocker: PropTypes.func,\r\n perfMarker: PropTypes.shape({\r\n willFetchFile: PropTypes.func.isRequired,\r\n willInit: PropTypes.func.isRequired,\r\n willFetchData: PropTypes.func.isRequired,\r\n willRender: PropTypes.func.isRequired,\r\n done: PropTypes.func.isRequired,\r\n createChild: PropTypes.func.isRequired,\r\n }).isRequired,\r\n assetLibraryDataService: PropTypes.shape({}).isRequired,\r\n assetLibraryConfig: PropTypes.shape({\r\n onImageSelected: PropTypes.func,\r\n onImagesSelected: PropTypes.func,\r\n onImageAddError: PropTypes.func,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n triggerAddImagesRef: PropTypes.shape({\r\n current: PropTypes.func,\r\n }).isRequired,\r\n setShowApplyButton: PropTypes.func,\r\n setSelectionInfoText: PropTypes.func,\r\n setDisableApplyButton: PropTypes.func,\r\n setErrors: PropTypes.func,\r\n maxUploadNum: PropTypes.number,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nManagedStockImageView.defaultProps = {\r\n setShowBlocker: _.noop,\r\n setShowApplyButton: _.noop,\r\n setDisableApplyButton: _.noop,\r\n setSelectionInfoText: _.noop,\r\n setErrors: _.noop,\r\n maxUploadNum: 16,\r\n};\r\n\r\nexport const stockImageSourceConfig = {\r\n title: _TL_('Stock images'),\r\n showBackButton: true,\r\n onRenderContent: props => (\r\n \r\n ),\r\n buttonConfig: {\r\n label: _TL_('Stock images'),\r\n view: VIEWS.StockImage,\r\n iconName: 'TripleColumn',\r\n buttonLocator: 'stock-images',\r\n },\r\n};\r\n","export const getSocialMediaStyles = () => ({\r\n socialMediaContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexGrow: 1,\r\n },\r\n textField: {\r\n paddingBottom: 16,\r\n },\r\n socialMediaRoot: {\r\n paddingTop: 22,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexGrow: 1,\r\n },\r\n});\r\n","import React, {\r\n useContext,\r\n useMemo,\r\n useCallback,\r\n useState,\r\n useEffect,\r\n} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { TextField } from '@bingads-webui-react/fabric-control';\r\n\r\nimport { FluentImagePicker } from '@bingads-webui-campaign-react/fluent-image-picker';\r\nimport { AssetLibrarySpinner } from '@bingads-webui-campaign-react/asset-library-spinner';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { isValidUrl } from '@bingads-webui/url-util';\r\nimport { PlaceholderView } from '@bingads-webui-campaign-react/add-website-images-view';\r\nimport _ from 'underscore';\r\n\r\nimport { getSocialMediaStyles } from './styles/index';\r\n\r\nconst twitterReg = new RegExp(/(http:\\/\\/|https:\\/\\/)?(www\\.)?twitter.com\\/(\\w+)\\/?/);\r\n\r\nexport const useSocialMediaRepositoryToSetImages = ({ socialMediaDataSource }) => {\r\n const [images, setImages] = useState([]);\r\n const [socialMediaAccount, setSocialMediaAccount] = useState({ Value: '' });\r\n\r\n socialMediaDataSource.subscribe((newStatus) => {\r\n if (newStatus === 'Done') {\r\n setImages([\r\n ...socialMediaDataSource.data.map(img => ({\r\n ...img,\r\n thumbnailSrc: img.src,\r\n })),\r\n ]);\r\n\r\n const newSocialMediaAccount = socialMediaDataSource.socialMediaAccounts[0];\r\n\r\n if (newSocialMediaAccount) {\r\n setSocialMediaAccount(newSocialMediaAccount);\r\n }\r\n }\r\n });\r\n\r\n return {\r\n images,\r\n socialMediaAccount,\r\n };\r\n};\r\n\r\nexport const SocialImageView = ({\r\n images,\r\n fetchImages,\r\n fetchImageByAccount,\r\n socialMediaAccount,\r\n finalUrl,\r\n onUpdateFinalUrl,\r\n addImageByUrl,\r\n logger,\r\n onUpdateFinalUrlPrefix,\r\n finalUrlProtocol,\r\n}) => {\r\n const showPlaceholder =\r\n useMemo(() => !finalUrl || !isValidUrl(finalUrl), [finalUrl]);\r\n const i18n = useContext(I18nContext);\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [account, setAccount] = useState('');\r\n const [alertMessage, setAlertMessage] = useState('');\r\n const classes = useDefaultStyles(getSocialMediaStyles);\r\n\r\n const setAlertMessageByResult = useCallback((result) => {\r\n if (result === 'NoAccountFound') {\r\n setAlertMessage(i18n.getString(_TL_('No Twitter account found from your URL. Please enter your Twitter account URL manually')));\r\n } else if (result === 'NoImagesFound') {\r\n setAlertMessage(i18n.getString(_TL_('No images posted recently on your Twitter account.')));\r\n } else if (result === 'Done') {\r\n setAlertMessage(i18n.getString(_TL_('We\\'ve found images from your Twitter account.')));\r\n }\r\n }, [setAlertMessage, i18n]);\r\n\r\n const loadSocialImages = useCallback((url) => {\r\n setIsLoading(true);\r\n\r\n fetchImages(url).then((result) => {\r\n setAlertMessageByResult(result);\r\n\r\n logger.logTrace('social media image fetched');\r\n setIsLoading(false);\r\n });\r\n }, [setIsLoading, fetchImages, setAlertMessageByResult, logger]);\r\n\r\n useEffect(() => {\r\n if (!showPlaceholder) {\r\n loadSocialImages(finalUrl);\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n setAccount(`https://twitter.com/${socialMediaAccount.Value}`);\r\n }, [socialMediaAccount.Value]);\r\n\r\n const onAccountChange = useCallback((ev, newValue) => {\r\n setAccount(newValue);\r\n }, [setAccount]);\r\n\r\n const onBlur = useCallback(() => {\r\n const result = account.match(twitterReg);\r\n\r\n /* istanbul ignore next */\r\n if (result && result[3]) {\r\n setAlertMessage('');\r\n setIsLoading(true);\r\n fetchImageByAccount([{ Key: 'Twitter', Value: result[3] }]).then((fetchResult) => {\r\n setAlertMessageByResult(fetchResult);\r\n setIsLoading(false);\r\n });\r\n } else {\r\n setAlertMessage(i18n.getString(_TL_('Please enter the correct Twitter URL, like: https://twitter.com/microsoft')));\r\n }\r\n }, [setAlertMessage, fetchImageByAccount, account, i18n, setAlertMessageByResult]);\r\n\r\n const onSelectImage = useCallback((index) => {\r\n const imageToBeSelected = images[index];\r\n\r\n logger.logTrace('social media image selected');\r\n\r\n addImageByUrl(imageToBeSelected.src);\r\n }, [images, addImageByUrl, logger]);\r\n\r\n const onEnteredFinalUrl = useCallback((newUrl, ev) => {\r\n onUpdateFinalUrl(ev);\r\n loadSocialImages(newUrl);\r\n }, [onUpdateFinalUrl, loadSocialImages]);\r\n\r\n const onKeyDown = useCallback((ev) => {\r\n if (ev.key === 'Enter') {\r\n onBlur(ev);\r\n }\r\n }, [onBlur]);\r\n\r\n return (\r\n
\r\n {\r\n showPlaceholder &&\r\n \r\n }\r\n {\r\n !showPlaceholder &&\r\n
\r\n {\r\n !isLoading && \r\n }\r\n {\r\n isLoading ? :\r\n \r\n }\r\n
\r\n }\r\n
\r\n );\r\n};\r\n\r\nSocialImageView.propTypes = {\r\n images: PropTypes.arrayOf(PropTypes.shape({\r\n thumbnailSrc: PropTypes.string,\r\n })).isRequired,\r\n fetchImages: PropTypes.func.isRequired,\r\n fetchImageByAccount: PropTypes.func.isRequired,\r\n socialMediaAccount: PropTypes.shape({\r\n Value: PropTypes.string,\r\n }),\r\n onUpdateFinalUrl: PropTypes.func.isRequired,\r\n addImageByUrl: PropTypes.func.isRequired,\r\n finalUrl: PropTypes.string,\r\n finalUrlProtocol: PropTypes.string,\r\n onUpdateFinalUrlPrefix: PropTypes.func,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }),\r\n};\r\n\r\nSocialImageView.defaultProps = {\r\n finalUrl: '',\r\n socialMediaAccount: {},\r\n logger: {\r\n logTrace: _.noop,\r\n },\r\n finalUrlProtocol: null,\r\n onUpdateFinalUrlPrefix: null,\r\n};\r\n","import React, { useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { SocialImageView, useSocialMediaRepositoryToSetImages } from '@bingads-webui-campaign-react/add-social-images-view';\r\nimport { constants } from '@bingads-webui-campaign-react/image-experience-model';\r\nimport { ROOT_FOLDER_ID } from '@bingads-webui-campaign-react/asset-library-model';\r\n\r\nimport { validateImageSizeAsync } from '@bingads-webui-campaign/image-experience-utils';\r\n\r\nimport { VIEWS } from '../view-type';\r\n\r\nconst ManagedSocialImageView = ({\r\n socialImageConfig,\r\n setShowBlocker,\r\n imageExperienceProps,\r\n assetLibraryConfig,\r\n assetLibraryDataService,\r\n logger,\r\n}) => {\r\n const { socialMediaDataSource } = socialImageConfig;\r\n const { onImageSelected, onImageAddError } = assetLibraryConfig;\r\n\r\n const {\r\n finalUrl,\r\n onUpdateFinalUrl,\r\n finalUrlProtocol,\r\n onUpdateFinalUrlPrefix,\r\n imageOption,\r\n isMultimediaAd,\r\n } = imageExperienceProps;\r\n\r\n const { images, socialMediaAccount } =\r\n useSocialMediaRepositoryToSetImages({ socialMediaDataSource });\r\n\r\n const fetchImages =\r\n useCallback(url => socialMediaDataSource.fetchImages(url), [socialMediaDataSource]);\r\n\r\n const fetchImageByAccount =\r\n useCallback(acct => socialMediaDataSource.fetchImageByAccount(acct), [socialMediaDataSource]);\r\n\r\n const onSelectImage = useCallback((url) => {\r\n setShowBlocker(true);\r\n\r\n const addImagePromise = validateImageSizeAsync(url, null, isMultimediaAd, imageOption)\r\n .then(() => assetLibraryDataService.uploadImageByUrl({\r\n imageUrl: url,\r\n folderId: ROOT_FOLDER_ID,\r\n sourceType: constants.sourceTypes.TwitterImported,\r\n }))\r\n .then(id => onImageSelected({ id }, constants.imageSources.Social))\r\n .catch(e => onImageAddError(e));\r\n\r\n addImagePromise\r\n .tap((img) => {\r\n if (img && img.errorMessage) {\r\n logger.logTrace(`Ad creation flow - add social image error message: ${img.errorMessage}`);\r\n } else {\r\n const { id: imageId } = img || {};\r\n logger.logTrace('Ad creation flow - selected social image', { imageId });\r\n }\r\n })\r\n .finally(() => {\r\n setShowBlocker(false);\r\n });\r\n }, [setShowBlocker, isMultimediaAd, imageOption, assetLibraryDataService, onImageSelected, onImageAddError, logger]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nManagedSocialImageView.propTypes = {\r\n socialImageConfig: PropTypes.shape({\r\n socialMediaDataSource: PropTypes.shape({\r\n fetchImageByAccount: PropTypes.func,\r\n fetchImages: PropTypes.func,\r\n subscribe: PropTypes.func,\r\n data: PropTypes.arrayOf(PropTypes.shape({\r\n id: PropTypes.number,\r\n src: PropTypes.string,\r\n })),\r\n socialMediaAccounts: PropTypes.arrayOf(PropTypes.string),\r\n }),\r\n }).isRequired,\r\n imageExperienceProps: PropTypes.shape({\r\n finalUrl: PropTypes.string,\r\n onUpdateFinalUrl: PropTypes.func,\r\n finalUrlProtocol: PropTypes.string,\r\n onUpdateFinalUrlPrefix: PropTypes.func,\r\n }).isRequired,\r\n setShowBlocker: PropTypes.func.isRequired,\r\n assetLibraryDataService: PropTypes.shape({}).isRequired,\r\n assetLibraryConfig: PropTypes.shape({\r\n onImageSelected: PropTypes.func,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nManagedSocialImageView.defaultProps = {\r\n};\r\n\r\nexport const socialImageSourceConfig = {\r\n title: _TL_('Social'),\r\n showBackButton: true,\r\n onRenderContent: props => (\r\n \r\n ),\r\n buttonConfig: {\r\n label: _TL_('Social'),\r\n view: VIEWS.SocialMedia,\r\n iconName: 'People',\r\n buttonLocator: 'social-media',\r\n },\r\n};\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport React, { useCallback, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { LearnMoreLink } from '@bingads-webui-campaign-react/help';\r\n// import { validateImageSizeAsync } from '@bingads-webui-campaign/image-experience-utils';\r\nimport { constants } from '@bingads-webui-campaign-react/image-experience-model';\r\n\r\nimport {\r\n handleRealUsedFlag,\r\n RealUsedFlagSuffix,\r\n MaxAddAssetJobInParell,\r\n getImageAssetLimitPerAccount,\r\n AIModelSource,\r\n} from '@bingads-webui-campaign-react/asset-library-model';\r\nimport { AssetLibraryAIGenerateImagesView, useAIGenerateImagesState, AIGCDisclaimer } from '@bingads-webui-campaign-react/asset-library-ai-generate-images-view';\r\n\r\nconst MAX_FOLDER_FETCH_LIMIT = 20;\r\nconst singularImageString = _TL_('{{selectedNumber}} of {{limitNumber}} image selected');\r\nconst pluralImagesString = _TL_('{{selectedNumber}} of {{limitNumber}} images selected');\r\nconst errorExceededMaxCount = _TL_('You\\'ve exceeded the max. number of assets you can add at a time ({{limitNumber}}). Please try again.');\r\n\r\nconst ManagedAIGCImageView = (props) => {\r\n const {\r\n assetLibraryConfig, assetLibraryDataService, triggerAddImagesRef, setShowBlocker,\r\n setShowApplyButton, setDisableApplyButton,\r\n maxUploadNum, setSelectionInfoText, setErrors,\r\n i18n, perfMarker, logger, aid, permissions, eventHandler,\r\n } = props;\r\n const { assetLibraryAccountPreferences } = assetLibraryConfig || {};\r\n\r\n const { selectedImages, prompt, ...restState } = useAIGenerateImagesState({\r\n dataService: assetLibraryDataService, i18n, logger, eventHandler,\r\n });\r\n\r\n // Only supports maximum of adding 20 images at a time in a folder. Please contact MT to raise limit on API first\r\n const boundedMaxUploadNum = maxUploadNum > MAX_FOLDER_FETCH_LIMIT ? MAX_FOLDER_FETCH_LIMIT : maxUploadNum;\r\n\r\n useEffect(() => {\r\n const selectedCount = (selectedImages && selectedImages.length) || 0;\r\n if (selectedCount > boundedMaxUploadNum) {\r\n setErrors([i18n.getString(errorExceededMaxCount, { limitNumber: boundedMaxUploadNum })]);\r\n setDisableApplyButton(true);\r\n setSelectionInfoText('');\r\n } else {\r\n setErrors([]);\r\n setDisableApplyButton(false);\r\n setShowApplyButton(selectedCount > 0);\r\n const stringToUse = boundedMaxUploadNum > 1 ? pluralImagesString : singularImageString;\r\n setSelectionInfoText(i18n.getString(stringToUse, { selectedNumber: selectedCount, limitNumber: boundedMaxUploadNum }));\r\n }\r\n }, [boundedMaxUploadNum, i18n, selectedImages, setDisableApplyButton, setErrors, setSelectionInfoText, setShowApplyButton]);\r\n\r\n const handleJobErrors = useCallback((jobErrors) => {\r\n if (jobErrors.length > 0) {\r\n const assetLimitError = _.find(jobErrors, (err) => {\r\n const errorCode = _.get(err, ['body', 'value', 0, 'Code'], '');\r\n return errorCode === 'ImagesLimitExceededPerAccount';\r\n });\r\n\r\n if (assetLimitError) {\r\n const assetLimit = getImageAssetLimitPerAccount(aid, logger);\r\n setErrors([i18n.getString(_TL_('One or more images failed to upload because your account has exceeded the {{value}}-image asset limit. Please remove assets and try again.'), { value: assetLimit })]);\r\n } else {\r\n const genericError = (\r\n \r\n { i18n.getString(_TL_('One or more assets failed to upload. Please try again')) }\r\n \r\n \r\n );\r\n setErrors([genericError]);\r\n }\r\n }\r\n }, [aid, i18n, logger, setErrors]);\r\n\r\n const onApplySelectedImages = useCallback(() => {\r\n // no selected images, or selected too many (shouldn't happen)\r\n if (_.isEmpty(selectedImages) || selectedImages.length > boundedMaxUploadNum) {\r\n return Promise.resolve();\r\n }\r\n\r\n handleRealUsedFlag(assetLibraryAccountPreferences, RealUsedFlagSuffix.Picker);\r\n logger.logTrace('Selected AI generated images from asset library in ad creation flow', { length: selectedImages.length });\r\n logger.logTrace('Count selected AI images', {\r\n imageUrls: selectedImages.map(x => x.thumbnailSrc).join(','),\r\n count: selectedImages.length,\r\n logForExpand: true,\r\n prompt,\r\n }); // will expand the log to per image id\r\n\r\n setShowBlocker(true);\r\n\r\n const aiGCImagePerfMarker = perfMarker.createChild('AIGCImagePicker');\r\n aiGCImagePerfMarker.willInit();\r\n\r\n const jobErrors = [];\r\n return Promise.map(\r\n selectedImages,\r\n (img) => {\r\n const { thumbnailSrc: imageUrl, modelSource } = img;\r\n\r\n logger.logTrace('AIGC image save', {\r\n imageUrl,\r\n prompt,\r\n modelSource: modelSource || AIModelSource.Dalle,\r\n });\r\n\r\n return assetLibraryDataService.uploadImageByUrl({\r\n imageUrl, sourceType: modelSource === AIModelSource.Recraft ? constants.sourceTypes.AIGeneratedByRecraft : constants.sourceTypes.AIGenerated,\r\n }).catch((err) => {\r\n jobErrors.push(err);\r\n });\r\n },\r\n { concurrency: MaxAddAssetJobInParell }\r\n ).then((values) => {\r\n const imageIds = _.compact(values || []);\r\n if (!_.isEmpty(imageIds)) {\r\n logger.logTrace('Saved AI generated images to folder in ad creation flow');\r\n // use the tag \"logForExpand\" to expand the log to per image id without expanding other logs with imageIds\r\n logger.logTrace('Count AI saved images', {\r\n imageIds: imageIds.join(','),\r\n count: imageIds.length,\r\n logForExpand: true,\r\n prompt,\r\n }); // will expand the log to per image id\r\n if (eventHandler && eventHandler.onAddImagesToAssetLibrary) {\r\n eventHandler.onAddImagesToAssetLibrary({ imageIds, prompt });\r\n }\r\n return assetLibraryConfig.onImagesSelected(imageIds, constants.imageSources.AIGenerated);\r\n }\r\n return Promise.resolve();\r\n }).finally(() => {\r\n setShowBlocker(false);\r\n handleJobErrors(jobErrors);\r\n aiGCImagePerfMarker.done();\r\n });\r\n }, [assetLibraryAccountPreferences, assetLibraryConfig, assetLibraryDataService, boundedMaxUploadNum, handleJobErrors, logger, perfMarker, selectedImages, setShowBlocker, prompt, eventHandler]);\r\n\r\n triggerAddImagesRef.current = onApplySelectedImages;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nManagedAIGCImageView.propTypes = {\r\n assetLibraryConfig: PropTypes.shape({\r\n onImagesSelected: PropTypes.func,\r\n }).isRequired,\r\n assetLibraryDataService: PropTypes.shape({\r\n uploadImageByUrl: PropTypes.func,\r\n }).isRequired,\r\n triggerAddImagesRef: PropTypes.shape({}).isRequired,\r\n setShowBlocker: PropTypes.func,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n perfMarker: PropTypes.shape({}).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n logError: PropTypes.func,\r\n }).isRequired,\r\n setShowApplyButton: PropTypes.func,\r\n setDisableApplyButton: PropTypes.func,\r\n setSelectionInfoText: PropTypes.func,\r\n setErrors: PropTypes.func,\r\n maxUploadNum: PropTypes.number,\r\n aid: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n permissions: PropTypes.shape({}),\r\n eventHandler: PropTypes.shape({\r\n onAddImagesToAssetLibrary: PropTypes.func,\r\n }),\r\n};\r\n\r\nManagedAIGCImageView.defaultProps = {\r\n setShowBlocker: _.noop,\r\n setShowApplyButton: _.noop,\r\n setDisableApplyButton: _.noop,\r\n setSelectionInfoText: _.noop,\r\n setErrors: _.noop,\r\n maxUploadNum: MAX_FOLDER_FETCH_LIMIT,\r\n permissions: {},\r\n eventHandler: null,\r\n};\r\n\r\nexport const aigcImageSourceConfig = {\r\n title: _TL_('Generate images'),\r\n showBackButton: true,\r\n onRenderContent: props => ,\r\n onRenderFooterContent: props => ,\r\n\r\n // don't show the button, instead show a Generate images button in the banner\r\n // buttonConfig: {\r\n // label: _TL_('Generate images'),\r\n // view: VIEWS.AIGCImage,\r\n // iconName: CustomFluentUIIcons.SparkeSVGIcon,\r\n // iconStyles: {\r\n // root: {\r\n // position: 'relative',\r\n // top: -3,\r\n // left: 1,\r\n // },\r\n // },\r\n // buttonLocator: 'aigc-images',\r\n // },\r\n};\r\n","export const getLandingPageStyles = () => ({\r\n landingContent: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexGrow: 1,\r\n paddingTop: 24,\r\n },\r\n assetLibraryGridContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexGrow: 1,\r\n flexBasis: 0,\r\n overflowX: 'hidden',\r\n overflowY: 'auto',\r\n marginTop: 20,\r\n\r\n '& .asset-library-grid-container .tiles-grid-cell .tiles-grid-cell-content': {\r\n padding: 8,\r\n },\r\n },\r\n});\r\n\r\nexport const getAssetLibraryStyles = () => ({\r\n '@global': {\r\n '.asset-library-custom-drop-down-list': {\r\n '& .dropdown-value-input': {\r\n maxWidth: 120,\r\n },\r\n },\r\n },\r\n injectedContentContainer: {\r\n '& .asset-library-page-header': {\r\n marginRight: 8,\r\n marginLeft: 8,\r\n marginTop: 0,\r\n\r\n '& .asset-library-search': {\r\n width: 210,\r\n },\r\n\r\n '& .asset-library-image-size-filter': {\r\n minWidth: 100,\r\n },\r\n\r\n '& .asset-library-date-added-filter': {\r\n minWidth: 100,\r\n },\r\n '& .asset-library-import-source-filter': {\r\n minWidth: 120,\r\n },\r\n\r\n '& .asset-library-asset-source-filter': {\r\n minWidth: 120,\r\n maxWidth: 200,\r\n },\r\n\r\n '& .search-location-filter': {\r\n maxWidth: 130,\r\n },\r\n '& .asset-library-sort': {\r\n maxWidth: 160,\r\n },\r\n },\r\n '& .asset-library-grid-container': {\r\n marginTop: 12,\r\n position: 'relative',\r\n },\r\n },\r\n});\r\n","import _ from 'underscore';\r\nimport Promise from 'bluebird';\r\nimport React, { useState, useRef, useCallback } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { ConfirmDialog } from '@bingads-webui-campaign-react/confirm-dialog';\r\n\r\nconst DeleteConfirmDialog = ({\r\n showConfirmDialog,\r\n setShowConfirmDialog,\r\n deleteAssetApi,\r\n onSuccess,\r\n i18n,\r\n}) => {\r\n const [showUIBlocker, setShowUIBlocker] = useState(false);\r\n const [errorMessage, setErrorMessage] = useState('');\r\n\r\n const closeConfirmDialog = () => {\r\n setErrorMessage('');\r\n setShowConfirmDialog(false);\r\n setShowUIBlocker(false);\r\n };\r\n\r\n const onDelete = () => {\r\n setShowUIBlocker(true);\r\n deleteAssetApi().then(() => {\r\n onSuccess();\r\n closeConfirmDialog();\r\n }).catch((response) => {\r\n const { errors } = response || {};\r\n const err = _.first(errors) || {};\r\n if (err.Code === 'AssetIsUsed') {\r\n setErrorMessage(i18n.getString(_TL_(\"You can't delete this image because it's being used by other campaigns, ads, or image extensions.\")));\r\n } else {\r\n setErrorMessage(i18n.getString(_TL_('Your image couldn\\'t be deleted. Please try again or contact support.')));\r\n }\r\n }).finally(() => {\r\n setShowUIBlocker(false);\r\n });\r\n };\r\n\r\n const onCancel = () => {\r\n closeConfirmDialog();\r\n };\r\n\r\n return showConfirmDialog ? (\r\n \r\n ) : null;\r\n};\r\n\r\nDeleteConfirmDialog.propTypes = {\r\n showConfirmDialog: PropTypes.bool.isRequired,\r\n setShowConfirmDialog: PropTypes.func.isRequired,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n deleteAssetApi: PropTypes.func.isRequired,\r\n onSuccess: PropTypes.func.isRequired,\r\n};\r\n\r\nexport const useImageDeleteConfirmDialog = ({ dataService, i18n, onDeleted }) => {\r\n const [showConfirmDialog, setShowConfirmDialog] = useState(false);\r\n const itemToDeleteRef = useRef(null);\r\n\r\n const open = (item) => {\r\n itemToDeleteRef.current = item;\r\n setShowConfirmDialog(true);\r\n };\r\n\r\n const render = useCallback(() => {\r\n const deleteImageAsync = () => {\r\n if (itemToDeleteRef.current) {\r\n const { id: assetId, folderAssetType } = itemToDeleteRef.current || {};\r\n return dataService.deleteAsset({ assetId, folderAssetType });\r\n }\r\n return Promise.resolve();\r\n };\r\n\r\n const onSuccessCallback = () => {\r\n if (onDeleted) {\r\n onDeleted(itemToDeleteRef.current);\r\n }\r\n };\r\n\r\n return ();\r\n }, [dataService, i18n, onDeleted, showConfirmDialog]);\r\n\r\n return {\r\n open,\r\n render,\r\n };\r\n};\r\n","import React, { useCallback, useState, useEffect, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'underscore';\r\n\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { keyCode } from '@bingads-webui/keycode';\r\n\r\nimport {\r\n AssetLibraryLandingPageContent,\r\n AssetLibraryImageAssetsGridCellBase,\r\n AssetLibraryFoldersGridCell,\r\n} from '@bingads-webui-campaign-react/asset-library-landing-page-content';\r\nimport {\r\n GridSectionName,\r\n keyDownHandlerForListItem,\r\n RealUsedFlagSuffix,\r\n handleRealUsedFlag,\r\n addAssetLibrarySurveyTriggerFlag,\r\n AssetLibrarySurveyTriggerFlag,\r\n} from '@bingads-webui-campaign-react/asset-library-model';\r\n\r\nimport { useImageDeleteConfirmDialog } from './image-delete-confirm-dialog';\r\n\r\nimport { getAssetLibraryStyles } from './styles';\r\n\r\nconst filterTokens = { childrenGap: '4 12' };\r\n\r\nconst MAX_FOLDER_FETCH_LIMIT = 20;\r\n\r\nexport const AssetLibraryImagesView = (props) => {\r\n const {\r\n ianaTimeZone,\r\n assetLibraryUserPreferences,\r\n assetLibraryAccountPreferences,\r\n logger,\r\n dateFormat,\r\n i18n,\r\n onImageSelected,\r\n onFailedToLoadImages,\r\n multiSelectionEnabled,\r\n dataService,\r\n setShowApplyButton,\r\n onImagesSelected,\r\n triggerAddImagesRef,\r\n maxUploadNum,\r\n setErrors,\r\n setDisableApplyButton,\r\n setSelectionInfoText,\r\n allowedAssetType,\r\n enableImageDeleting,\r\n isAssetLibraryAIGCMVPEnabled,\r\n isClickableOutsideFocusTrap,\r\n disabledAssetSources,\r\n } = props;\r\n\r\n // Only supports maximum of adding 20 images at a time in a folder. Please contact MT to raise limit on API first\r\n const boundedMaxUploadNum = maxUploadNum > MAX_FOLDER_FETCH_LIMIT ? MAX_FOLDER_FETCH_LIMIT : maxUploadNum;\r\n\r\n // show counter at 0 to start\r\n useEffect(() => {\r\n setSelectionInfoText(i18n.getString(_TL_('0 of {{limitNumber}} images selected'), { limitNumber: boundedMaxUploadNum }));\r\n }, [i18n, boundedMaxUploadNum, setSelectionInfoText]);\r\n\r\n const classes = useDefaultStyles(getAssetLibraryStyles);\r\n const [selectedImages, setSelectedImages] = useState([]);\r\n const [selectedFolders, setSelectedFolders] = useState([]);\r\n const [selectedCount, setSelectedCount] = useState(0);\r\n const [dataLoadedOnce, setDataLoadedOnce] = useState(false);\r\n\r\n useEffect(() => {\r\n if (dataLoadedOnce) {\r\n addAssetLibrarySurveyTriggerFlag(assetLibraryAccountPreferences, AssetLibrarySurveyTriggerFlag.Picker, RealUsedFlagSuffix.Picker);\r\n }\r\n }, [assetLibraryAccountPreferences, dataLoadedOnce]);\r\n\r\n const dataLoaded = useCallback(() => {\r\n setDataLoadedOnce(() => true);\r\n }, []);\r\n\r\n const onApplyImages = useCallback(() => {\r\n if (selectedCount <= boundedMaxUploadNum) {\r\n const imagesFromFolders = _.flatten(_.map(selectedFolders, folder => folder.assets));\r\n const imagesIdsFromFolders = _.map(imagesFromFolders, ({ id }) => id);\r\n const selectedImageIds = _.map(selectedImages, ({ id }) => id);\r\n const selectedImagePerformanceLabels = _.map(selectedImages, ({ performanceLabel }) => performanceLabel);\r\n const imagesToSelect = [\r\n ...imagesIdsFromFolders,\r\n ...selectedImageIds,\r\n ];\r\n\r\n onImagesSelected(imagesToSelect);\r\n logger.logTrace(\r\n 'Select images from asset library in ad creation flow',\r\n { imageIds: imagesToSelect.join(','), imagePerformanceLabels: selectedImagePerformanceLabels.join(','), length: imagesToSelect.length }\r\n );\r\n handleRealUsedFlag(assetLibraryAccountPreferences, RealUsedFlagSuffix.Picker);\r\n }\r\n }, [selectedFolders, selectedImages, onImagesSelected, selectedCount, boundedMaxUploadNum, logger, assetLibraryAccountPreferences]);\r\n\r\n triggerAddImagesRef.current = onApplyImages;\r\n\r\n const [reload, setReload] = useState(undefined);\r\n const forceToReload = useCallback(() => setReload({}), []);\r\n const imageDeleteConfirmDialog = useImageDeleteConfirmDialog({\r\n dataService, i18n, onDeleted: forceToReload,\r\n });\r\n\r\n const renderImageGridCell = useCallback(({ item, searchText }) => {\r\n const onClick = () => {\r\n logger.logTrace('Selected Asset Library images', { imageId: item && item.id });\r\n if (onImageSelected) {\r\n onImageSelected(item);\r\n }\r\n };\r\n\r\n const onKeyDown = (event) => {\r\n if (event.keyCode === keyCode.Enter) {\r\n onClick();\r\n }\r\n };\r\n const renderCellContent = defaultContent => (\r\n
\r\n {defaultContent}\r\n
\r\n );\r\n return (\r\n \r\n );\r\n }, [enableImageDeleting, i18n, imageDeleteConfirmDialog.open, logger, onImageSelected]);\r\n\r\n // reset selection state when changing folders\r\n const resetSelectionState = useCallback(() => {\r\n setSelectedFolders([]);\r\n setSelectedImages([]);\r\n setSelectedCount(0);\r\n setShowApplyButton(false);\r\n setErrors([]);\r\n setSelectionInfoText(i18n.getString(_TL_('0 of {{limitNumber}} images selected'), { limitNumber: boundedMaxUploadNum }));\r\n setDisableApplyButton(false);\r\n }, [setShowApplyButton, setErrors, setSelectionInfoText, setDisableApplyButton, i18n, boundedMaxUploadNum]);\r\n\r\n const {\r\n navigateIntoFolder,\r\n } = dataService;\r\n\r\n const renderMultiSelectionGridCell = useCallback(({\r\n item, selected, selectItem, searchText, sectionName, index,\r\n }) => {\r\n const onClick = () => {\r\n selectItem(!selected);\r\n };\r\n\r\n const openFolder = (folderItem) => {\r\n const { folderId } = folderItem || {};\r\n if (folderId) {\r\n resetSelectionState();\r\n navigateIntoFolder({ id: folderId });\r\n logger.logTrace('Navigate into folder in ad creation flow', { folderId });\r\n }\r\n };\r\n const assetCells = document.querySelectorAll('.tiles-grid-cell-container');\r\n\r\n let cell = null;\r\n if (sectionName === GridSectionName.Folder) { // folder cell\r\n cell = (\r\n \r\n );\r\n } else { // image cell\r\n const customTabHandler = (shiftKeyPressed) => {\r\n const apply = document.querySelector('.apply-button');\r\n const cancel = document.querySelector('.cancel-button');\r\n const sortBy = document.querySelector('.asset-library-sort .ms-Dropdown');\r\n // move focus backforward if shift key is pressed\r\n const target = shiftKeyPressed ? sortBy : (apply || cancel);\r\n if (target) {\r\n target.focus();\r\n }\r\n };\r\n const onKeyDown = (event, i) => {\r\n keyDownHandlerForListItem(event, i, assetCells, undefined, onClick, onClick, customTabHandler);\r\n };\r\n\r\n cell = (\r\n { onKeyDown(event, index); }}\r\n style={{ width: '100%', height: '100%' }}\r\n data-is-focusable\r\n role=\"checkbox\"\r\n aria-checked={selected}\r\n tabIndex={-1}\r\n >\r\n \r\n \r\n );\r\n }\r\n return cell;\r\n }, [allowedAssetType, enableImageDeleting, i18n, imageDeleteConfirmDialog.open, logger, navigateIntoFolder, resetSelectionState]);\r\n\r\n const onSelectionChange = useCallback(({\r\n sectionName, selectedItems,\r\n }) => {\r\n let newCount = 0;\r\n\r\n if (sectionName === GridSectionName.Folder) {\r\n setSelectedFolders([\r\n ...selectedItems,\r\n ]);\r\n newCount = selectedImages.length + _.reduce(selectedItems, (memo, { itemCount }) => memo + itemCount.ImageAssetsCount, 0);\r\n } else if (sectionName === GridSectionName.Asset) {\r\n setSelectedImages([\r\n ...selectedItems,\r\n ]);\r\n newCount = selectedItems.length + _.reduce(selectedFolders, (memo, { itemCount }) => memo + itemCount.ImageAssetsCount, 0);\r\n }\r\n\r\n if (newCount > boundedMaxUploadNum) {\r\n setErrors([i18n.getString(_TL_('You\\'ve exceeded the max. number of assets you can add at a time ({{limitNumber}}). Please try again.'), { limitNumber: boundedMaxUploadNum })]);\r\n setDisableApplyButton(true);\r\n } else {\r\n setErrors([]);\r\n setDisableApplyButton(false);\r\n }\r\n\r\n const singularImageString = _TL_('{{selectedNumber}} of {{limitNumber}} image selected');\r\n const pluralImagesString = _TL_('{{selectedNumber}} of {{limitNumber}} images selected');\r\n const stringToUse = boundedMaxUploadNum > 1 ? pluralImagesString : singularImageString;\r\n setSelectionInfoText(i18n.getString(stringToUse, { selectedNumber: newCount, limitNumber: boundedMaxUploadNum }));\r\n\r\n setSelectedCount(newCount);\r\n setShowApplyButton(newCount > 0);\r\n }, [\r\n setShowApplyButton,\r\n selectedImages,\r\n selectedFolders,\r\n boundedMaxUploadNum,\r\n i18n,\r\n setErrors,\r\n setDisableApplyButton,\r\n setSelectionInfoText,\r\n ]);\r\n\r\n const sectionSelectedItems = useMemo(() => ({\r\n [GridSectionName.Asset]: selectedImages,\r\n [GridSectionName.Folder]: selectedFolders,\r\n }), [selectedFolders, selectedImages]);\r\n\r\n return (\r\n <>\r\n \r\n {imageDeleteConfirmDialog.render()}\r\n \r\n );\r\n};\r\n\r\nAssetLibraryImagesView.propTypes = {\r\n ianaTimeZone: PropTypes.string.isRequired,\r\n dateFormat: PropTypes.string.isRequired,\r\n assetLibraryUserPreferences: PropTypes.shape({}).isRequired,\r\n assetLibraryAccountPreferences: PropTypes.shape({}),\r\n logger: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n onImageSelected: PropTypes.func,\r\n onFailedToLoadImages: PropTypes.func,\r\n multiSelectionEnabled: PropTypes.bool,\r\n dataService: PropTypes.shape({\r\n navigateIntoFolder: PropTypes.func,\r\n }).isRequired,\r\n setShowApplyButton: PropTypes.func.isRequired,\r\n onImagesSelected: PropTypes.func.isRequired,\r\n triggerAddImagesRef: PropTypes.shape({}).isRequired,\r\n maxUploadNum: PropTypes.number.isRequired,\r\n setErrors: PropTypes.func.isRequired,\r\n setDisableApplyButton: PropTypes.func.isRequired,\r\n setSelectionInfoText: PropTypes.func.isRequired,\r\n allowedAssetType: PropTypes.string,\r\n enableImageDeleting: PropTypes.bool,\r\n isAssetLibraryAIGCMVPEnabled: PropTypes.bool,\r\n isClickableOutsideFocusTrap: PropTypes.bool,\r\n disabledAssetSources: PropTypes.arrayOf(PropTypes.string),\r\n};\r\n\r\nAssetLibraryImagesView.defaultProps = {\r\n onImageSelected: undefined,\r\n onFailedToLoadImages: undefined,\r\n multiSelectionEnabled: false,\r\n allowedAssetType: null,\r\n enableImageDeleting: false,\r\n assetLibraryAccountPreferences: null,\r\n isAssetLibraryAIGCMVPEnabled: false,\r\n isClickableOutsideFocusTrap: false,\r\n disabledAssetSources: [],\r\n};\r\n","import React, { useCallback, useState, useMemo } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Promise from 'bluebird';\r\n\r\nimport { Overlay } from '@bingads-webui-react/fabric-control';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { UploadPreview } from '@bingads-webui-campaign-react/upload-file-picker';\r\nimport { AssetLibrarySpinner } from '@bingads-webui-campaign-react/asset-library-spinner';\r\nimport { AddMediaSourcesContainer } from '@bingads-webui-campaign-react/asset-library-shared-add-media-layout';\r\nimport { validateImageSizeAsync } from '@bingads-webui-campaign/image-experience-utils';\r\nimport { ROOT_FOLDER_ID, FolderAssetType } from '@bingads-webui-campaign-react/asset-library-model';\r\nimport {\r\n AssetLibraryAIGCPromotionBanner,\r\n AssetLibraryNewFeatureBanner,\r\n} from '@bingads-webui-campaign-react/asset-library-components';\r\nimport { constants } from '@bingads-webui-campaign-react/image-experience-model';\r\n\r\nimport { getLandingPageStyles } from './styles';\r\nimport { AssetLibraryImagesView } from './asset-library-images-view';\r\nimport { VIEWS } from '../../view-type';\r\n\r\nconst overlayStyles = {\r\n root: { zIndex: 2 },\r\n};\r\n\r\nexport const AddMediaLandingPage = ({\r\n goToView,\r\n setHideSubtitle,\r\n maxUploadNum,\r\n minSize,\r\n processUploadedImage,\r\n onProcessUploadComplete,\r\n buttonConfig,\r\n assetLibraryConfig,\r\n setErrors,\r\n i18n,\r\n perfMarker,\r\n setShowApplyButton,\r\n setDisableApplyButton,\r\n triggerAddImagesRef,\r\n assetLibraryDataService,\r\n imageExperienceProps,\r\n imageType,\r\n setSelectionInfoText,\r\n allowedAssetType,\r\n isAssetLibraryAIGCMVPEnabled,\r\n logger,\r\n isClickableOutsideFocusTrap,\r\n disabledAssetSources,\r\n eventHandler,\r\n supportImageUpscale,\r\n minUploadSize,\r\n showPromotionBanner,\r\n isAdStudioEnabled,\r\n}) => {\r\n const classes = useDefaultStyles(getLandingPageStyles);\r\n const [uploadPreviewImageArr, setUploadPreviewImageArr] = useState([]);\r\n const [showUploadPreview, setShowUploadPreview] = useState(false);\r\n const [isSpinnerVisible, showSpinner] = useState(false);\r\n\r\n const {\r\n onImageSelected: onImgSelected,\r\n onImagesSelected: onImgsSelected,\r\n ...restConfig\r\n } = assetLibraryConfig;\r\n\r\n const {\r\n isMultimediaAd, imageOption, isBrandKit, isMMAV2Enabled, isDisplayAds, isPortraitImage, isStoreAppProng, isStoreAppSpotLight, isStoreAppTransparentLogo,\r\n } = imageExperienceProps;\r\n\r\n // tie only to enable folders for now, may disable if MT API dependency integration\r\n // causes issues\r\n const enableMultiSelection = true;\r\n\r\n // show spinner when image is selected\r\n const onImageSelected = useCallback((image) => {\r\n if (onImgSelected) {\r\n const imageSelectPerfMarker = perfMarker.createChild('existingImageSelect');\r\n imageSelectPerfMarker.willInit();\r\n\r\n showSpinner(true);\r\n onImgSelected(image).finally((imgObj) => {\r\n let imagePerfMarkerData;\r\n\r\n if (imgObj) {\r\n imagePerfMarkerData = {\r\n imageWidth: imgObj.Width,\r\n imageHeight: imgObj.Height,\r\n };\r\n }\r\n\r\n showSpinner(false);\r\n imageSelectPerfMarker.done(imagePerfMarkerData);\r\n });\r\n }\r\n }, [onImgSelected, perfMarker]);\r\n\r\n const onImagesSelected = useCallback((imageIds) => {\r\n if (onImgsSelected) {\r\n const imageSelectPerfMarker = perfMarker.createChild('existingImageSelect');\r\n imageSelectPerfMarker.willInit();\r\n\r\n showSpinner(true);\r\n onImgsSelected(imageIds).finally(() => {\r\n let imagePerfMarkerData;\r\n\r\n showSpinner(false);\r\n imageSelectPerfMarker.done(imagePerfMarkerData);\r\n });\r\n }\r\n }, [onImgsSelected, perfMarker]);\r\n\r\n const onFailedToLoadAssetLibraryImages = useCallback(() => {\r\n // tdo: show user error message\r\n }, []);\r\n\r\n const uploadMediaConfig = useMemo(() => {\r\n const config = {\r\n maxUploadNum,\r\n minSize,\r\n minUploadSize,\r\n processUploadedMedia: processUploadedImage,\r\n onProcessUploadComplete,\r\n // eslint-disable-next-line arrow-body-style\r\n uploadMedia: ({ imageData, updateCurrentProgress, name }) => {\r\n const isPortraitImageEnabled = isPortraitImage || imageOption === constants.imageOptionKeys.Portrait;\r\n\r\n const validateAsync = supportImageUpscale ? Promise.resolve() : validateImageSizeAsync(\r\n imageData,\r\n imageType,\r\n isMultimediaAd,\r\n imageOption,\r\n isMMAV2Enabled,\r\n false,\r\n isDisplayAds,\r\n isPortraitImageEnabled,\r\n isStoreAppProng,\r\n isStoreAppSpotLight,\r\n isStoreAppTransparentLogo,\r\n false,\r\n false,\r\n isBrandKit\r\n );\r\n\r\n return validateAsync\r\n .then(() => assetLibraryDataService.uploadImage({\r\n imageData,\r\n updateCurrentProgress,\r\n name,\r\n folderId: ROOT_FOLDER_ID,\r\n supportUpscale: supportImageUpscale ? true : undefined,\r\n }))\r\n .then((imageId) => {\r\n if (eventHandler && eventHandler.onUploadImage) {\r\n eventHandler.onUploadImage(imageId);\r\n }\r\n return { imageId };\r\n });\r\n },\r\n };\r\n\r\n return config;\r\n }, [maxUploadNum, minSize, minUploadSize, processUploadedImage, onProcessUploadComplete, isPortraitImage, imageOption, imageType, isMultimediaAd, isMMAV2Enabled, isDisplayAds, isStoreAppProng, isStoreAppSpotLight, isStoreAppTransparentLogo, assetLibraryDataService, supportImageUpscale, eventHandler]);\r\n\r\n const onGenerateImagesClick = useCallback(() => {\r\n logger.logTrace('Generate images button in banner is clicked.');\r\n goToView(VIEWS.AIGCImage);\r\n }, [goToView, logger]);\r\n\r\n return (\r\n
\r\n {\r\n isSpinnerVisible &&\r\n \r\n \r\n \r\n }\r\n {\r\n showUploadPreview ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n {isAssetLibraryAIGCMVPEnabled && showPromotionBanner && (\r\n \r\n )}\r\n {!isAssetLibraryAIGCMVPEnabled && (\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\nAddMediaLandingPage.propTypes = {\r\n goToView: PropTypes.func.isRequired,\r\n setHideSubtitle: PropTypes.func.isRequired,\r\n maxUploadNum: PropTypes.number.isRequired,\r\n minSize: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n processUploadedImage: PropTypes.func.isRequired,\r\n onProcessUploadComplete: PropTypes.func.isRequired,\r\n buttonConfig: PropTypes.arrayOf(PropTypes.shape({\r\n label: PropTypes.string,\r\n })).isRequired,\r\n assetLibraryConfig: PropTypes.shape({\r\n aid: PropTypes.string,\r\n cid: PropTypes.string,\r\n dateFormat: PropTypes.string,\r\n timeZone: PropTypes.number,\r\n oDataConfig: PropTypes.shape({}),\r\n preferencesService: PropTypes.shape({}),\r\n onImageSelected: PropTypes.func,\r\n onImagesSelected: PropTypes.func,\r\n }).isRequired,\r\n showPromotionBanner: PropTypes.bool,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n setErrors: PropTypes.func.isRequired,\r\n perfMarker: PropTypes.shape({\r\n willFetchFile: PropTypes.func.isRequired,\r\n willInit: PropTypes.func.isRequired,\r\n willFetchData: PropTypes.func.isRequired,\r\n willRender: PropTypes.func.isRequired,\r\n done: PropTypes.func.isRequired,\r\n createChild: PropTypes.func.isRequired,\r\n }).isRequired,\r\n setShowApplyButton: PropTypes.func.isRequired,\r\n triggerAddImagesRef: PropTypes.shape({}).isRequired,\r\n setDisableApplyButton: PropTypes.func.isRequired,\r\n assetLibraryDataService: PropTypes.shape({}).isRequired,\r\n imageExperienceProps: PropTypes.shape({}).isRequired,\r\n imageType: PropTypes.string.isRequired,\r\n setSelectionInfoText: PropTypes.func.isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n allowedAssetType: PropTypes.string,\r\n isAssetLibraryAIGCMVPEnabled: PropTypes.bool,\r\n isClickableOutsideFocusTrap: PropTypes.bool,\r\n disabledAssetSources: PropTypes.arrayOf(PropTypes.string),\r\n eventHandler: PropTypes.shape({}),\r\n supportImageUpscale: PropTypes.bool,\r\n minUploadSize: PropTypes.arrayOf(PropTypes.number),\r\n};\r\n\r\nAddMediaLandingPage.defaultProps = {\r\n allowedAssetType: FolderAssetType.Image,\r\n isAssetLibraryAIGCMVPEnabled: false,\r\n isClickableOutsideFocusTrap: false,\r\n disabledAssetSources: [],\r\n eventHandler: null,\r\n showPromotionBanner: true,\r\n supportImageUpscale: false,\r\n minUploadSize: [],\r\n};\r\n","import React, { useMemo, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport _ from 'underscore';\r\n\r\nimport { FolderAssetType } from '@bingads-webui-campaign-react/asset-library-model';\r\nimport { AddMediaLandingPage } from './landing-page-content';\r\n\r\nconst ManagedLandingView = ({\r\n addMediaConfig,\r\n customMediaSourceConfig,\r\n maxUploadNum,\r\n minSize,\r\n processUploadedImage,\r\n onProcessUploadComplete,\r\n goToView,\r\n setHideSubtitle,\r\n assetLibraryConfig,\r\n setErrors,\r\n i18n,\r\n perfMarker,\r\n setShowApplyButton,\r\n setDisableApplyButton,\r\n triggerAddImagesRef,\r\n assetLibraryDataService,\r\n imageExperienceProps,\r\n imageType,\r\n setSelectionInfoText,\r\n allowedAssetType,\r\n isAssetLibraryAIGCMVPEnabled,\r\n logger,\r\n isClickableOutsideFocusTrap,\r\n preDefinedAssetSources,\r\n disabledAssetSources,\r\n eventHandler,\r\n supportImageUpscale,\r\n minUploadSize,\r\n showPromotionBanner,\r\n isAdStudioEnabled,\r\n}) => {\r\n const finalConfig = useMemo(\r\n () => {\r\n if (_.isFunction(customMediaSourceConfig)) {\r\n return customMediaSourceConfig({ addMediaConfig });\r\n }\r\n\r\n return customMediaSourceConfig || addMediaConfig;\r\n },\r\n [addMediaConfig, customMediaSourceConfig]\r\n );\r\n const landingPageButtonConfig =\r\n _.compact(_.pluck(_.values(finalConfig), 'buttonConfig'));\r\n\r\n useEffect(() => {\r\n // set default state\r\n setShowApplyButton(false);\r\n setDisableApplyButton(true);\r\n setErrors([]);\r\n }, [setDisableApplyButton, setErrors, setShowApplyButton]);\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nManagedLandingView.propTypes = {\r\n addMediaConfig: PropTypes.shape({}).isRequired,\r\n maxUploadNum: PropTypes.number.isRequired,\r\n minSize: PropTypes.arrayOf(PropTypes.number).isRequired,\r\n assetLibraryConfig: PropTypes.shape({}).isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n processUploadedImage: PropTypes.func.isRequired,\r\n onProcessUploadComplete: PropTypes.func,\r\n perfMarker: PropTypes.shape({\r\n willFetchFile: PropTypes.func.isRequired,\r\n willInit: PropTypes.func.isRequired,\r\n willFetchData: PropTypes.func.isRequired,\r\n willRender: PropTypes.func.isRequired,\r\n done: PropTypes.func.isRequired,\r\n createChild: PropTypes.func.isRequired,\r\n }).isRequired,\r\n showPromotionBanner: PropTypes.bool,\r\n customMediaSourceConfig: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({})]),\r\n goToView: PropTypes.func.isRequired,\r\n setHideSubtitle: PropTypes.func.isRequired,\r\n setErrors: PropTypes.func,\r\n setShowApplyButton: PropTypes.func.isRequired,\r\n setDisableApplyButton: PropTypes.func.isRequired,\r\n triggerAddImagesRef: PropTypes.shape({}).isRequired,\r\n assetLibraryDataService: PropTypes.shape({}).isRequired,\r\n imageExperienceProps: PropTypes.shape({}).isRequired,\r\n imageType: PropTypes.string,\r\n setSelectionInfoText: PropTypes.func.isRequired,\r\n allowedAssetType: PropTypes.string,\r\n isAssetLibraryAIGCMVPEnabled: PropTypes.bool,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n isClickableOutsideFocusTrap: PropTypes.bool,\r\n preDefinedAssetSources: PropTypes.arrayOf(PropTypes.shape({})),\r\n disabledAssetSources: PropTypes.arrayOf(PropTypes.string),\r\n eventHandler: PropTypes.shape({}),\r\n supportImageUpscale: PropTypes.bool,\r\n minUploadSize: PropTypes.arrayOf(PropTypes.number),\r\n};\r\n\r\nManagedLandingView.defaultProps = {\r\n customMediaSourceConfig: null,\r\n setErrors: _.noop,\r\n imageType: null,\r\n allowedAssetType: FolderAssetType.Image,\r\n isAssetLibraryAIGCMVPEnabled: false,\r\n onProcessUploadComplete: _.noop,\r\n isClickableOutsideFocusTrap: false,\r\n preDefinedAssetSources: [],\r\n disabledAssetSources: [],\r\n eventHandler: null,\r\n supportImageUpscale: false,\r\n showPromotionBanner: true,\r\n minUploadSize: [],\r\n};\r\n\r\nexport const getLandingPageConfig = (isAssetLibraryAIGCMVPEnabled, isLiteLandingPageEnabled, isAdStudioEnabled, showPromotionBanner, panelTitle, panelSubtitle) => {\r\n let title = _TL_('Asset library');\r\n let subTitle = '';\r\n if (panelTitle) {\r\n title = panelTitle;\r\n } else if (isLiteLandingPageEnabled) {\r\n title = _TL_('Add image');\r\n } else if (isAdStudioEnabled) {\r\n title = _TL_('Ads Studio');\r\n }\r\n\r\n if (panelSubtitle) {\r\n subTitle = panelSubtitle;\r\n } else if (isLiteLandingPageEnabled) {\r\n subTitle = _TL_('Choose an image from our recommendation, or browse to add a new one.');\r\n }\r\n\r\n return ({\r\n title,\r\n onRenderSubtitle: ({\r\n subtitleClass,\r\n i18n,\r\n aid,\r\n cid,\r\n onAssetLibraryLinkClick,\r\n }) => ( // eslint-disable-line react/prop-types\r\n
\r\n {subTitle ? (\r\n i18n.getString(subTitle)\r\n ) : (\r\n \r\n {isAssetLibraryAIGCMVPEnabled\r\n ? i18n.getString(_TL_('You can create assets, choose assets you\\'ve already uploaded to '))\r\n : i18n.getString(_TL_('Choose assets you\\'ve already uploaded to '))}\r\n { onAssetLibraryLinkClick(isAdStudioEnabled); } : _.noop}\r\n >\r\n {isAdStudioEnabled ? i18n.getString(_TL_('Ads Studio')) : i18n.getString(_TL_('Asset Library'))}\r\n \r\n {i18n.getString(_TL_(' or browse to add a new file.'))}\r\n \r\n )}\r\n
\r\n ),\r\n showBackButton: false,\r\n onRenderContent: props => (\r\n \r\n ),\r\n });\r\n};\r\n","export const getFilterStyle = () => ({\r\n popoverContainer: {\r\n position: 'relative',\r\n },\r\n});\r\n\r\nexport const getSearchFieldStyle = () => ({\r\n container: {\r\n paddingTop: 22,\r\n display: 'flex',\r\n paddingBottom: 15,\r\n },\r\n});\r\n\r\nexport const getRootStyles = () => ({\r\n investImageRoot: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexGrow: 1,\r\n },\r\n});\r\n","import React, {\r\n useCallback,\r\n useContext,\r\n useEffect,\r\n} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { map, extend } from 'underscore';\r\nimport classnames from 'classnames';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n IconButton,\r\n TextField,\r\n} from '@bingads-webui-react/fabric-control';\r\nimport { FluentImagePicker } from '@bingads-webui-campaign-react/fluent-image-picker';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { AssetLibrarySpinner } from '@bingads-webui-campaign-react/asset-library-spinner';\r\n\r\nimport { getSearchFieldStyle, getRootStyles } from './styles/index';\r\n\r\nconst PAGE_SIZE = 20;\r\nconst ASSET_TYPE_IMAGES = 1;\r\n\r\nexport const InvestImageView = ({\r\n getInvestImages,\r\n onChangeImageIdSelection,\r\n enableMultipleSelection,\r\n imageCellWidth,\r\n imageCellHeight,\r\n images,\r\n setImages,\r\n hasMore,\r\n setHasMore,\r\n skip,\r\n setSkip,\r\n isLoadingFirstPage,\r\n setIsLoadingFirstPage,\r\n searchQuery,\r\n setSearchQuery,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const searchFieldClasses = useDefaultStyles(getSearchFieldStyle);\r\n const { investImageRoot } = useDefaultStyles(getRootStyles);\r\n\r\n const loadImages = useCallback(({ creativeId = searchQuery, $skip = skip, $query = {} }) => {\r\n if ($skip === 0) {\r\n setIsLoadingFirstPage(true);\r\n }\r\n const queryParams = {\r\n appName: 'CampaignUI',\r\n assetTypeId: ASSET_TYPE_IMAGES,\r\n $skip,\r\n $top: PAGE_SIZE,\r\n };\r\n if (creativeId) {\r\n queryParams.creativeId = creativeId;\r\n }\r\n getInvestImages({\r\n customQueries: extend(queryParams, $query),\r\n }).then((data) => {\r\n setHasMore(data['@odata.count'] > data.value.length + $skip);\r\n setImages([\r\n ...($skip > 0 ? images : []),\r\n ...map(data.value, (item) => {\r\n const image = {\r\n thumbnailSrc: item.Url,\r\n id: item.XandrAssetId,\r\n imageSrc: item.Url,\r\n isSelected: false,\r\n };\r\n\r\n return image;\r\n }),\r\n ]);\r\n\r\n if ($skip === 0) {\r\n setIsLoadingFirstPage(false);\r\n }\r\n });\r\n }, [\r\n images, setImages, searchQuery, skip, setHasMore, setIsLoadingFirstPage, getInvestImages,\r\n ]);\r\n\r\n const loadNextPage = useCallback(() => {\r\n if (hasMore) {\r\n const newSkip = skip + PAGE_SIZE;\r\n setSkip(newSkip);\r\n loadImages({ $skip: newSkip });\r\n }\r\n }, [skip, setSkip, loadImages, hasMore]);\r\n\r\n const onSelectImage = useCallback((index) => {\r\n const newArr = [...images];\r\n const selectedImage = newArr[index];\r\n\r\n const selectionChange = { selectedImageId: selectedImage.id };\r\n\r\n if (enableMultipleSelection) {\r\n const newSelectionState = !selectedImage.isSelected;\r\n\r\n newArr[index].isSelected = newSelectionState;\r\n selectionChange.selectionState = newSelectionState;\r\n }\r\n\r\n setImages(newArr);\r\n onChangeImageIdSelection(selectionChange);\r\n }, [images, setImages, onChangeImageIdSelection, enableMultipleSelection]);\r\n\r\n const onKeyDown = useCallback((ev) => {\r\n if (ev.key === 'Enter') {\r\n setSkip(0);\r\n loadImages({\r\n $skip: 0,\r\n });\r\n }\r\n }, [setSkip, loadImages]);\r\n\r\n\r\n useEffect(() => {\r\n setSkip(0);\r\n loadImages({ $skip: 0 });\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n return (\r\n
\r\n
\r\n setSearchQuery(newValue)}\r\n onKeyDown={onKeyDown}\r\n placeholder={i18n.getString(_TL_('Search by Invest creative Id'))}\r\n styles={{\r\n root: {\r\n width: '50%',\r\n display: 'inline-block',\r\n },\r\n }}\r\n />\r\n {\r\n setSkip(0);\r\n loadImages({\r\n $skip: 0,\r\n });\r\n }}\r\n />\r\n
\r\n {\r\n isLoadingFirstPage ? :\r\n \r\n }\r\n
\r\n );\r\n};\r\n\r\nInvestImageView.propTypes = {\r\n getInvestImages: PropTypes.func.isRequired,\r\n onChangeImageIdSelection: PropTypes.func.isRequired,\r\n enableMultipleSelection: PropTypes.bool,\r\n imageCellWidth: PropTypes.number,\r\n imageCellHeight: PropTypes.number,\r\n images: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n setImages: PropTypes.func.isRequired,\r\n hasMore: PropTypes.bool.isRequired,\r\n setHasMore: PropTypes.func.isRequired,\r\n skip: PropTypes.number.isRequired,\r\n setSkip: PropTypes.func.isRequired,\r\n isLoadingFirstPage: PropTypes.bool.isRequired,\r\n setIsLoadingFirstPage: PropTypes.func.isRequired,\r\n searchQuery: PropTypes.string.isRequired,\r\n setSearchQuery: PropTypes.func.isRequired,\r\n};\r\n\r\nInvestImageView.defaultProps = {\r\n enableMultipleSelection: true,\r\n imageCellWidth: undefined,\r\n imageCellHeight: undefined,\r\n};\r\n","import Promise from 'bluebird';\r\nimport _ from 'underscore';\r\nimport React, { useCallback, useEffect, useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { InvestImageView } from '@bingads-webui-campaign-react/add-invest-images-view';\r\nimport { constants } from '@bingads-webui-campaign-react/image-experience-model';\r\nimport { MaxAddAssetJobInParell, ROOT_FOLDER_ID } from '@bingads-webui-campaign-react/asset-library-model';\r\nimport { VIEWS } from '../view-type';\r\n\r\nconst ManagedInvestImageView = ({\r\n investImageConfig,\r\n setShowBlocker,\r\n perfMarker,\r\n assetLibraryConfig,\r\n assetLibraryDataService,\r\n logger,\r\n maxUploadNum,\r\n setShowApplyButton,\r\n triggerAddImagesRef,\r\n setSelectionInfoText,\r\n setDisableApplyButton,\r\n setErrors,\r\n i18n,\r\n}) => {\r\n const {\r\n onImageSelected,\r\n onImagesSelected,\r\n onImageAddError,\r\n enableInvestMultipleSelection: enableMultipleSelection,\r\n } = assetLibraryConfig;\r\n\r\n const onChangeImageIdSelection = useCallback((args) => {\r\n const investImagePerfMarker = perfMarker.createChild('investImagePicker');\r\n investImagePerfMarker.willInit();\r\n\r\n const selectInvestImage = assetLibraryDataService.uploadInvestImage({\r\n investImageId: args.selectedImageId,\r\n imageSrc: args.imageSrc,\r\n folderId: ROOT_FOLDER_ID,\r\n })\r\n .then(value => onImageSelected({ id: value }, constants.imageSources.Invest))\r\n .catch(e => onImageAddError(e));\r\n\r\n setShowBlocker(true);\r\n selectInvestImage\r\n .tap(() => {\r\n const { selectedImageId: imageId } = args || {};\r\n logger.logTrace('Ad creation flow - selected invest image', { imageId });\r\n })\r\n .finally(() => {\r\n setShowBlocker(false);\r\n investImagePerfMarker.done();\r\n });\r\n }, [perfMarker, assetLibraryDataService, setShowBlocker, onImageSelected, onImageAddError, logger]);\r\n\r\n const [images, setImages] = useState([]);\r\n const [hasMore, setHasMore] = useState(true);\r\n const [skip, setSkip] = useState(0);\r\n const [isLoadingFirstPage, setIsLoadingFirstPage] = useState(false);\r\n const [searchQuery, setSearchQuery] = useState('');\r\n\r\n useEffect(() => {\r\n // init the state for multiple selection\r\n if (enableMultipleSelection) {\r\n setShowApplyButton(true);\r\n setDisableApplyButton(true);\r\n setErrors([]);\r\n setSelectionInfoText(i18n.getString(_TL_('0 of {{limitNumber}} images selected'), { limitNumber: maxUploadNum }));\r\n }\r\n }, [enableMultipleSelection, i18n, maxUploadNum, setDisableApplyButton, setErrors, setSelectionInfoText, setShowApplyButton]);\r\n\r\n useEffect(() => {\r\n const selectedImages = _.filter(images, image => image && image.isSelected) || [];\r\n if (selectedImages.length > maxUploadNum) {\r\n setErrors([i18n.getString(_TL_('You\\'ve exceeded the max. number of assets you can add at a time ({{limitNumber}}). Please try again.'), { limitNumber: maxUploadNum })]);\r\n setDisableApplyButton(true);\r\n } else if (selectedImages.length > 0) {\r\n setErrors([]);\r\n setDisableApplyButton(false);\r\n } else {\r\n setErrors([]);\r\n setDisableApplyButton(true);\r\n }\r\n\r\n const singularImageString = _TL_('{{selectedNumber}} of {{limitNumber}} image selected');\r\n const pluralImagesString = _TL_('{{selectedNumber}} of {{limitNumber}} images selected');\r\n const stringToUse = maxUploadNum > 1 ? pluralImagesString : singularImageString;\r\n setSelectionInfoText(i18n.getString(stringToUse, { selectedNumber: selectedImages.length, limitNumber: maxUploadNum }));\r\n }, [enableMultipleSelection, i18n, images, maxUploadNum, setDisableApplyButton, setErrors, setSelectionInfoText]);\r\n\r\n // only for multiple selection mode\r\n const onApplyButtonClick = useCallback(() => {\r\n const selectedImages = _.filter(images, image => image && image.isSelected) || [];\r\n\r\n setShowBlocker(true);\r\n\r\n const investImagePerfMarker = perfMarker.createChild('investImagePicker');\r\n investImagePerfMarker.willInit();\r\n\r\n Promise.map(\r\n selectedImages,\r\n (img) => {\r\n const { id, imageSrc } = img || {};\r\n return assetLibraryDataService.uploadInvestImage({ investImageId: id, imageSrc, folderId: ROOT_FOLDER_ID });\r\n },\r\n { concurrency: MaxAddAssetJobInParell }\r\n )\r\n .then((imageIds) => {\r\n logger.logTrace('Ad creation flow - selected invest images', { imageIds });\r\n return onImagesSelected(imageIds, constants.imageSources.Invest);\r\n })\r\n .catch((err) => {\r\n onImageAddError(err);\r\n })\r\n .finally(() => {\r\n setShowBlocker(false);\r\n investImagePerfMarker.done();\r\n });\r\n }, [assetLibraryDataService, images, logger, onImageAddError, onImagesSelected, perfMarker, setShowBlocker]);\r\n\r\n // listen to the apply button click for multiple selection\r\n // eslint-disable-next-line no-param-reassign\r\n triggerAddImagesRef.current = enableMultipleSelection ? onApplyButtonClick : undefined;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nManagedInvestImageView.propTypes = {\r\n investImageConfig: PropTypes.shape({\r\n getInvestImages: PropTypes.func,\r\n }),\r\n setShowBlocker: PropTypes.func,\r\n perfMarker: PropTypes.shape({\r\n willFetchFile: PropTypes.func.isRequired,\r\n willInit: PropTypes.func.isRequired,\r\n willFetchData: PropTypes.func.isRequired,\r\n willRender: PropTypes.func.isRequired,\r\n done: PropTypes.func.isRequired,\r\n createChild: PropTypes.func.isRequired,\r\n }).isRequired,\r\n assetLibraryDataService: PropTypes.shape({\r\n uploadInvestImage: PropTypes.func,\r\n }).isRequired,\r\n assetLibraryConfig: PropTypes.shape({\r\n onImageSelected: PropTypes.func,\r\n onImagesSelected: PropTypes.func,\r\n onImageAddError: PropTypes.func,\r\n enableInvestMultipleSelection: PropTypes.bool,\r\n }).isRequired,\r\n logger: PropTypes.shape({\r\n logTrace: PropTypes.func,\r\n }).isRequired,\r\n triggerAddImagesRef: PropTypes.shape({\r\n current: PropTypes.func,\r\n }).isRequired,\r\n setShowApplyButton: PropTypes.func,\r\n setSelectionInfoText: PropTypes.func,\r\n setDisableApplyButton: PropTypes.func,\r\n setErrors: PropTypes.func,\r\n maxUploadNum: PropTypes.number,\r\n i18n: PropTypes.shape({\r\n getString: PropTypes.func,\r\n }).isRequired,\r\n};\r\n\r\nManagedInvestImageView.defaultProps = {\r\n investImageConfig: {\r\n getInvestImages: _.noop,\r\n },\r\n setShowBlocker: _.noop,\r\n setShowApplyButton: _.noop,\r\n setDisableApplyButton: _.noop,\r\n setSelectionInfoText: _.noop,\r\n setErrors: _.noop,\r\n maxUploadNum: 16,\r\n};\r\n\r\nexport const investImageSourceConfig = {\r\n title: _TL_('Images from Microsft Invest'),\r\n showBackButton: true,\r\n onRenderContent: props => (\r\n \r\n ),\r\n buttonConfig: {\r\n label: _TL_('Microsoft Invest'),\r\n view: VIEWS.InvestImage,\r\n iconName: 'ShareMultipleRegular',\r\n buttonLocator: 'invest-images',\r\n },\r\n};\r\n","import _ from 'underscore';\r\nimport { websiteImageSourceConfig } from './website-images-view';\r\nimport { stockImageSourceConfig } from './stock-images-view';\r\nimport { socialImageSourceConfig } from './social-images-view';\r\nimport { aigcImageSourceConfig } from './ai-generate-images-view';\r\nimport { getLandingPageConfig } from './landing-view';\r\nimport { investImageSourceConfig } from './invest-images-view';\r\n\r\nimport { VIEWS } from './view-type';\r\n\r\nexport { VIEWS };\r\n\r\nexport const getAddImageConfig = ({\r\n isAssetLibraryAIGCMVPEnabled,\r\n isLiteLandingPageEnabled,\r\n hideStockImage,\r\n isAdStudioEnabled,\r\n showPromotionBanner,\r\n panelTitle,\r\n panelSubtitle,\r\n isXandrIntegrationEnabled,\r\n}) => {\r\n let config = {\r\n [VIEWS.WebsiteImage]: websiteImageSourceConfig,\r\n [VIEWS.StockImage]: stockImageSourceConfig,\r\n [VIEWS.SocialMedia]: socialImageSourceConfig,\r\n [VIEWS.LandingPage]: getLandingPageConfig(isAssetLibraryAIGCMVPEnabled, isLiteLandingPageEnabled, isAdStudioEnabled, showPromotionBanner, panelTitle, panelSubtitle),\r\n };\r\n if (isAssetLibraryAIGCMVPEnabled) {\r\n config = {\r\n [VIEWS.AIGCImage]: aigcImageSourceConfig,\r\n ...config,\r\n };\r\n }\r\n if (hideStockImage) {\r\n config = _.omit(config, VIEWS.StockImage);\r\n }\r\n\r\n if (isXandrIntegrationEnabled) {\r\n config = {\r\n ...config,\r\n [VIEWS.InvestImage]: investImageSourceConfig,\r\n };\r\n }\r\n\r\n return config;\r\n};\r\n\r\n","import React, { useEffect, useMemo, useState } from 'react';\r\nimport _ from 'underscore';\r\nimport PropTypes from 'prop-types';\r\nimport { isCopilotRegionRestricted } from '@bingads-webui-react/copilot-utils';\r\nimport { AddMediaPanel } from '@bingads-webui-campaign-react/asset-library-shared-add-media-layout';\r\nimport { setClarityTag } from '@bingads-webui-universal/clarity';\r\n\r\nimport {\r\n withAssetLibraryServicesLoaded\r\n} from '@bingads-webui-campaign-react/asset-library-services';\r\n\r\nimport { FolderAssetType, removeAssetLibrarySurveyTriggerFlag, AssetLibrarySurveyTriggerFlag } from '@bingads-webui-campaign-react/asset-library-model';\r\nimport { AssetLibraryCreativeEditor } from '@bingads-webui-campaign-react/asset-library-creative-editor';\r\n\r\nimport { getAddImageConfig, VIEWS } from './view-config';\r\n\r\nconst DEFAULT_VIEW = VIEWS.LandingPage;\r\n\r\nconst AddImageCrudAdComponentInternal = (props) => {\r\n const {\r\n dataService,\r\n ianaTimeZone,\r\n assetLibraryUserPreferences,\r\n assetLibraryAccountPreferences,\r\n logger,\r\n assetLibraryConfig,\r\n isAssetLibraryAIGCMVPEnabled,\r\n isLiteLandingPageEnabled,\r\n isStockImageEnabled,\r\n isAdStudioEnabled,\r\n creativeEditorProps,\r\n eventHandler,\r\n showPromotionBanner,\r\n panelTitle,\r\n panelSubtitle,\r\n isXandrIntegrationEnabled,\r\n ...rest\r\n } = props;\r\n\r\n const [hasLoggedEnterAssetLibrary, setHasLoggedEnterAssetLibrary] = useState(false);\r\n\r\n useEffect(() => () => {\r\n removeAssetLibrarySurveyTriggerFlag(AssetLibrarySurveyTriggerFlag.Picker);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (isAssetLibraryAIGCMVPEnabled) {\r\n setClarityTag({ AssetLibraryCopilot: 'true' });\r\n }\r\n }, [isAssetLibraryAIGCMVPEnabled]);\r\n\r\n useEffect(() => {\r\n if (rest.isOpen && !hasLoggedEnterAssetLibrary && eventHandler && _.isFunction(eventHandler.onEnterAssetLibrary)) {\r\n eventHandler.onEnterAssetLibrary();\r\n setHasLoggedEnterAssetLibrary(true);\r\n }\r\n }, [rest.isOpen, eventHandler, hasLoggedEnterAssetLibrary]);\r\n\r\n assetLibraryConfig.assetLibraryUserPreferences = assetLibraryUserPreferences;\r\n assetLibraryConfig.assetLibraryAccountPreferences = assetLibraryAccountPreferences;\r\n assetLibraryConfig.logger = logger;\r\n assetLibraryConfig.ianaTimeZone = ianaTimeZone;\r\n\r\n return (\r\n rest.isOpen && creativeEditorProps ?\r\n :\r\n \r\n );\r\n};\r\n\r\nAddImageCrudAdComponentInternal.propTypes = {\r\n dataService: PropTypes.shape({}).isRequired,\r\n creativeEditorProps: PropTypes.shape({}),\r\n eventHandler: PropTypes.shape({\r\n onEnterAssetLibrary: PropTypes.func,\r\n }),\r\n panelTitle: PropTypes.string,\r\n panelSubtitle: PropTypes.string,\r\n showPromotionBanner: PropTypes.bool,\r\n isStockImageEnabled: PropTypes.bool,\r\n isXandrIntegrationEnabled: PropTypes.bool,\r\n};\r\n\r\nAddImageCrudAdComponentInternal.defaultProps = {\r\n creativeEditorProps: null,\r\n eventHandler: null,\r\n panelTitle: '',\r\n panelSubtitle: '',\r\n showPromotionBanner: true,\r\n isStockImageEnabled: true,\r\n isXandrIntegrationEnabled: false,\r\n};\r\n\r\nconst AddImageCrudAdComponentInternalWithServices = withAssetLibraryServicesLoaded(AddImageCrudAdComponentInternal, { loggerTag: 'Asset Library Tab' });\r\nexport const AddImageCrudAdComponent = (props) => {\r\n const {\r\n assetLibraryConfig, i18n, permissions, isAADUser, isLiteLandingPageEnabled, isAssetLibraryAIGCMVPEnabled, eventHandler, serverContext, ...rest\r\n } = props;\r\n const [isAssetLibraryAIGCEnabled, setIsAssetLibraryAIGCEnabled] = useState(false);\r\n const [copilotRegionRestrictedCalled, setCopilotRegionRestrictedCalled] = useState(false);\r\n\r\n // todo: don't pilot AAD user for now, remove this check after the feature is GAed\r\n const isAssetLibraryAIGCEnabledInner = isAssetLibraryAIGCMVPEnabled === undefined ? !isAADUser : isAssetLibraryAIGCMVPEnabled;\r\n\r\n const isAdStudioEnabled = useMemo(() => _.get(permissions, ['dynamic', 'AdsStudioMVP'], false), [permissions]);\r\n const isXandrIntegrationEnabled = useMemo(() => _.get(permissions, ['dynamic', 'XandrIntegrationEnabled'], false), [permissions]);\r\n\r\n const { cid, aid } = assetLibraryConfig;\r\n\r\n useEffect(() => {\r\n if (copilotRegionRestrictedCalled && !isAssetLibraryAIGCEnabledInner) {\r\n return;\r\n }\r\n isCopilotRegionRestricted({\r\n feature: 'AssetLibrary',\r\n permissions,\r\n serverContext,\r\n }).then((isRestricted) => {\r\n if (!isRestricted) {\r\n setIsAssetLibraryAIGCEnabled(isAssetLibraryAIGCEnabledInner);\r\n }\r\n setCopilotRegionRestrictedCalled(true);\r\n });\r\n }, [aid, cid, copilotRegionRestrictedCalled, isAssetLibraryAIGCEnabledInner, permissions, serverContext]);\r\n\r\n const {\r\n timeZone,\r\n preferencesService,\r\n activityLogger,\r\n oDataConfig,\r\n dateFormat,\r\n } = assetLibraryConfig;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nAddImageCrudAdComponent.propTypes = {\r\n assetLibraryConfig: PropTypes.shape({\r\n timeZone: PropTypes.number,\r\n preferencesService: PropTypes.shape({}),\r\n activityLogger: PropTypes.shape({}),\r\n oDataConfig: PropTypes.shape({}),\r\n dateFormat: PropTypes.string,\r\n }).isRequired,\r\n i18n: PropTypes.shape({}).isRequired,\r\n permissions: PropTypes.shape({}).isRequired,\r\n eventHandler: PropTypes.shape({\r\n onEnterAssetLibrary: PropTypes.func,\r\n }),\r\n isAADUser: PropTypes.bool,\r\n};\r\n\r\nAddImageCrudAdComponent.defaultProps = {\r\n eventHandler: null,\r\n isAADUser: false,\r\n};\r\n","export const stockImageFilterLegacyI18nMap = {\r\n ShutterStock_Filter_People_Model_Released: _TL_('People'),\r\n ShutterStock_Filter_People_Model_Released_True: _TL_('With a signed model release'),\r\n ShutterStock_Filter_People_Model_Released_False: _TL_('Without a signed model release'),\r\n ShutterStock_Filter_People_Ethnicity: _TL_('Ethnicity'),\r\n ShutterStock_Filter_People_Ethnicity_African: _TL_('African'),\r\n ShutterStock_Filter_People_Ethnicity_African_American: _TL_('African American'),\r\n ShutterStock_Filter_People_Ethnicity_Black: _TL_('Black'),\r\n ShutterStock_Filter_People_Ethnicity_Brazilian: _TL_('Brazilian'),\r\n ShutterStock_Filter_People_Ethnicity_Chinese: _TL_('Chinese'),\r\n ShutterStock_Filter_People_Ethnicity_Caucasian: _TL_('Caucasian'),\r\n ShutterStock_Filter_People_Ethnicity_East_Asian: _TL_('East Asian'),\r\n ShutterStock_Filter_People_Ethnicity_Hispanic: _TL_('Hispanic'),\r\n ShutterStock_Filter_People_Ethnicity_Japanese: _TL_('Japanese'),\r\n ShutterStock_Filter_People_Ethnicity_Middle_Eastern: _TL_('Middle Eastern'),\r\n ShutterStock_Filter_People_Ethnicity_Native_American: _TL_('Native American'),\r\n ShutterStock_Filter_People_Ethnicity_Pacific_Islander: _TL_('Pacific Islander'),\r\n ShutterStock_Filter_People_Ethnicity_South_Asian: _TL_('South Asian'),\r\n ShutterStock_Filter_People_Ethnicity_Southeast_Asian: _TL_('Southeast Asian'),\r\n ShutterStock_Filter_People_Ethnicity_Other: _TL_('Other'),\r\n ShutterStock_Filter_People_Gender: _TL_('Gender'),\r\n ShutterStock_Filter_People_Male: _TL_('Male'),\r\n ShutterStock_Filter_People_Female: _TL_('Female'),\r\n ShutterStock_Filter_People_Both: _TL_('Both'),\r\n ShutterStock_Filter_People_Age: _TL_('Age'),\r\n ShutterStock_Filter_People_Age_Infants: _TL_('Infants'),\r\n ShutterStock_Filter_People_Age_Children: _TL_('Children'),\r\n ShutterStock_Filter_People_Age_Teenagers: _TL_('Teenagers'),\r\n ShutterStock_Filter_People_Age_20s: _TL_('20s'),\r\n ShutterStock_Filter_People_Age_30s: _TL_('30s'),\r\n ShutterStock_Filter_People_Age_40s: _TL_('40s'),\r\n ShutterStock_Filter_People_Age_50s: _TL_('50s'),\r\n ShutterStock_Filter_People_Age_60s: _TL_('60s'),\r\n ShutterStock_Filter_People_Age_Older: _TL_('Older'),\r\n ShutterStock_Filter_People_Number: _TL_('Number of people'),\r\n ShutterStock_Filter_Filter: _TL_('Filter'),\r\n ShutterStock_Filter_Reset: _TL_('Reset'),\r\n ShutterStock_Filter_Apply: _TL_('Apply'),\r\n Filter_PredicateList_New: _TL_('Add another'),\r\n Filter_Validation_Common_Required: _TL_('Required field'),\r\n Filter_Validation_Common_Number: _TL_('Only numeric values allowed'),\r\n Filter_Validation_Common_Number_Range: _TL_('Numeric value out of allowed range'),\r\n Filter_Validation_Common_Integer: _TL_('Only integer values allowed'),\r\n Filter_Validation_EnumSelectionRequired: _TL_('Select at least one option'),\r\n Filter_Validation_Common_Date: _TL_('Incorrect date format'),\r\n ShutterStock_Filter_Operator_Eq: _TL_('is'),\r\n ShutterStock_Filter_People_Age_Children_X: _TL_('Children ', { comment: 'kids, not adults; This is one of people age options on UI; please note there is a space trail' }),\r\n ShutterStock_Filter_People_Age_20s_X: _TL_('20s ', { comment: 'a person about 20 years old; This is one of people age options on UI; please note there is a space trail' }),\r\n ShutterStock_Filter_People_Age_30s_X: _TL_('30s ', { comment: 'a person about 30 years old; This is one of people age options on UI; please note there is a space trail' }),\r\n ShutterStock_Filter_People_Age_40s_X: _TL_('40s ', { comment: 'a person about 40 years old; This is one of people age options on UI; please note there is a space trail' }),\r\n ShutterStock_Filter_People_Age_50s_X: _TL_('50s ', { comment: 'a person about 50 years old; This is one of people age options on UI; please note there is a space trail' }),\r\n ShutterStock_Filter_People_Age_60s_X: _TL_('60s ', { comment: 'a person about 60 years old; This is one of people age options on UI; please note there is a space trail' }),\r\n ShutterStock_Filter_People_Age_Older_X: _TL_('Older ', { comment: 'a more older person, maybe > 60 years old; This is one of people age options on UI; please note there is a space trail' }),\r\n};\r\n","export const getFilterStyle = () => ({\r\n popoverContainer: {\r\n position: 'relative',\r\n },\r\n});\r\n\r\nexport const getSearchFieldStyle = () => ({\r\n container: {\r\n paddingTop: 22,\r\n display: 'flex',\r\n },\r\n});\r\n\r\nexport const getRootStyles = () => ({\r\n stockImageRoot: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexGrow: 1,\r\n },\r\n});\r\n","import React, {\r\n useState,\r\n useCallback,\r\n useContext,\r\n useMemo,\r\n} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { extend, map } from 'underscore';\r\nimport classnames from 'classnames';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport {\r\n IconButton,\r\n TextField,\r\n MessageBar,\r\n MessageBarType,\r\n} from '@bingads-webui-react/fabric-control';\r\nimport { buildLegacyI18n } from '@bingads-webui/build-legacy-i18n';\r\n\r\nimport { FluentImagePicker } from '@bingads-webui-campaign-react/fluent-image-picker';\r\nimport { StockImageFilter } from '@bingads-webui-campaign-react/stock-image-filter';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { AssetLibrarySpinner } from '@bingads-webui-campaign-react/asset-library-spinner';\r\nimport { LearnMoreLink } from '@bingads-webui-campaign-react/help';\r\n\r\nimport { stockImageFilterLegacyI18nMap } from './legacy-i18n-map';\r\nimport { getFilterStyle, getSearchFieldStyle, getRootStyles } from './styles/index';\r\n\r\nconst PAGE_SIZE = 20;\r\n\r\nexport const StockImageView = ({\r\n getStockImages,\r\n onChangeImageIdSelection,\r\n enableMultipleSelection,\r\n imageCellWidth,\r\n imageCellHeight,\r\n images,\r\n setImages,\r\n hasMore,\r\n setHasMore,\r\n skip,\r\n setSkip,\r\n serializedFilterForComp,\r\n setSerializedFilterForComp,\r\n isLoadingFirstPage,\r\n setIsLoadingFirstPage,\r\n searchQuery,\r\n setSearchQuery,\r\n filter,\r\n setFilter,\r\n}) => {\r\n const i18n = useContext(I18nContext);\r\n const { popoverContainer } = useDefaultStyles(getFilterStyle);\r\n const searchFieldClasses = useDefaultStyles(getSearchFieldStyle);\r\n const { stockImageRoot } = useDefaultStyles(getRootStyles);\r\n\r\n const filterI18n = useMemo(() => buildLegacyI18n(i18n, [stockImageFilterLegacyI18nMap]), [i18n]);\r\n\r\n const loadImages = useCallback(({ $search = searchQuery, $skip = skip, $query = filter }) => {\r\n if ($search) {\r\n if ($skip === 0) {\r\n setIsLoadingFirstPage(true);\r\n }\r\n\r\n getStockImages({\r\n customQueries: extend({\r\n appName: 'CampaignUI',\r\n $search,\r\n $skip,\r\n $top: PAGE_SIZE,\r\n language: 'en',\r\n includevertical: true,\r\n }, $query),\r\n }).then((data) => {\r\n setHasMore(data['@odata.count'] > data.value.length + $skip);\r\n\r\n setImages([\r\n ...($skip > 0 ? images : []),\r\n ...map(data.value, (item) => {\r\n const image = {\r\n thumbnailSrc: item.Preview.Url,\r\n id: item.Id,\r\n isSelected: false,\r\n };\r\n\r\n return image;\r\n }),\r\n ]);\r\n\r\n if ($skip === 0) {\r\n setIsLoadingFirstPage(false);\r\n }\r\n });\r\n }\r\n }, [\r\n images, setImages, getStockImages, searchQuery, skip, filter, setHasMore, setIsLoadingFirstPage,\r\n ]);\r\n\r\n const loadNextPage = useCallback(() => {\r\n if (hasMore) {\r\n const newSkip = skip + PAGE_SIZE;\r\n setSkip(newSkip);\r\n loadImages({ $skip: newSkip });\r\n }\r\n }, [skip, setSkip, loadImages, hasMore]);\r\n\r\n const onSelectImage = useCallback((index) => {\r\n const newArr = [...images];\r\n const selectedImage = newArr[index];\r\n\r\n const selectionChange = { selectedImageId: selectedImage.id };\r\n\r\n if (enableMultipleSelection) {\r\n const newSelectionState = !selectedImage.isSelected;\r\n\r\n newArr[index].isSelected = newSelectionState;\r\n selectionChange.selectionState = newSelectionState;\r\n }\r\n\r\n setImages(newArr);\r\n onChangeImageIdSelection(selectionChange);\r\n }, [images, setImages, onChangeImageIdSelection, enableMultipleSelection]);\r\n\r\n const onKeyDown = useCallback((ev) => {\r\n if (ev.key === 'Enter') {\r\n setSkip(0);\r\n loadImages({\r\n $skip: 0,\r\n });\r\n }\r\n }, [setSkip, loadImages]);\r\n\r\n const onFilterQueryChange = useCallback((newFilterQuery) => {\r\n const newFilterQueryString = JSON.stringify(newFilterQuery);\r\n\r\n if (newFilterQueryString !== serializedFilterForComp) {\r\n setFilter(newFilterQuery);\r\n setSerializedFilterForComp(newFilterQueryString);\r\n setSkip(0);\r\n loadImages({\r\n $query: newFilterQuery,\r\n $skip: 0,\r\n });\r\n }\r\n }, [setFilter, setSerializedFilterForComp, loadImages, serializedFilterForComp, setSkip]);\r\n\r\n const messageBarStyles = useMemo(() => ({\r\n root: {\r\n marginBottom: 4,\r\n backgroundColor: '#EFF6FC',\r\n },\r\n }), []);\r\n\r\n // use a callback ref so that the filter popover container gets updated\r\n // reference to the popover container when it renders\r\n const [popoverContainerRef, setPopoverContainerRef] = useState(null);\r\n\r\n const popoverContainerCallbackRef =\r\n useCallback(node => setPopoverContainerRef(node), [setPopoverContainerRef]);\r\n\r\n return (\r\n
\r\n
\r\n setSearchQuery(newValue)}\r\n onKeyDown={onKeyDown}\r\n placeholder={i18n.getString(_TL_('Search stock images (provided by Shutterstock)'))}\r\n styles={{\r\n root: {\r\n width: '50%',\r\n display: 'inline-block',\r\n },\r\n }}\r\n />\r\n {\r\n setSkip(0);\r\n loadImages({\r\n $skip: 0,\r\n });\r\n }}\r\n />\r\n
\r\n \r\n \r\n \r\n {i18n.getString(_TL_('The Shutterstock watermark appearing on the stock images below will not appear in your ad.'))}\r\n \r\n \r\n {i18n.getString(_TL_('There may be images provided by Shutterstock that do not adhere to the Microsoft image policy.'))}\r\n \r\n \r\n {\r\n isLoadingFirstPage ? :\r\n \r\n }\r\n
\r\n );\r\n};\r\n\r\nStockImageView.propTypes = {\r\n getStockImages: PropTypes.func.isRequired,\r\n onChangeImageIdSelection: PropTypes.func.isRequired,\r\n enableMultipleSelection: PropTypes.bool,\r\n imageCellWidth: PropTypes.number,\r\n imageCellHeight: PropTypes.number,\r\n images: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\r\n setImages: PropTypes.func.isRequired,\r\n hasMore: PropTypes.bool.isRequired,\r\n setHasMore: PropTypes.func.isRequired,\r\n skip: PropTypes.number.isRequired,\r\n setSkip: PropTypes.func.isRequired,\r\n serializedFilterForComp: PropTypes.string.isRequired,\r\n setSerializedFilterForComp: PropTypes.func.isRequired,\r\n isLoadingFirstPage: PropTypes.bool.isRequired,\r\n setIsLoadingFirstPage: PropTypes.func.isRequired,\r\n searchQuery: PropTypes.string.isRequired,\r\n setSearchQuery: PropTypes.func.isRequired,\r\n filter: PropTypes.shape({}).isRequired,\r\n setFilter: PropTypes.func.isRequired,\r\n};\r\n\r\nStockImageView.defaultProps = {\r\n enableMultipleSelection: true,\r\n imageCellWidth: undefined,\r\n imageCellHeight: undefined,\r\n};\r\n","export const placeholderTextFieldStyles = {\r\n root: {\r\n display: 'inline-block',\r\n width: 300,\r\n marginLeft: 6,\r\n marginTop: 16,\r\n },\r\n field: {\r\n paddingRight: 8,\r\n paddingLeft: 32,\r\n },\r\n};\r\n\r\nexport const placeholderTextFieldIconProps = {\r\n iconName: 'Search',\r\n styles: {\r\n root: {\r\n left: 8,\r\n right: 0,\r\n },\r\n },\r\n};\r\n\r\nexport const placeholderDropdownStyles = {\r\n root: {\r\n display: 'inline-flex',\r\n width: 88,\r\n marginLeft: 25,\r\n marginTop: 16,\r\n },\r\n title: {\r\n width: 88,\r\n },\r\n};\r\n\r\nexport const getPlaceholderStyles = () => ({\r\n placeholderView: {\r\n marginTop: 16,\r\n display: 'inline-block',\r\n marginLeft: 271,\r\n fontSize: 14,\r\n lineHeight: '20px',\r\n '& img': {\r\n marginLeft: 129,\r\n marginBottom: 24,\r\n },\r\n '& .suggestion-error-invalid': {\r\n marginTop: 16,\r\n color: 'red',\r\n },\r\n },\r\n});\r\n\r\nexport const placeholderImage = \"data:image/svg+xml,%3Csvg width='160' height='160' viewBox='0 0 160 160' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M149.8 23.9999C149.7 22.5999 148.5 21.2999 147.2 21.0999C122.6 17.4999 98.2001 13.9999 74 10.6999C72.7 10.4999 71.6 11.4999 71.7 12.7999C72.9001 37.4999 70.3 62.5999 64.1 87.3999C63.8 88.6999 64.6 89.9999 66 90.2999C90.6 94.6999 115.3 99.2999 140.1 104C141.5 104.3 142.9 103.3 143.2 101.9C149.2 76.0999 151.4 49.8999 149.8 23.9999Z' fill='%23EFEFEF'/%3E%3Cpath d='M143.9 26.8C121.7 23.4 99.6 20.1 77.6 17C78.1 32.1 77.3 47.4 75 62.7C83.1 50.6 90.2 38.3 96.2 26C102.6 41.5 107.9 57.2 111.9 73C119 62.5 125.4 51.8 130.9 41.1C135.1 52.1 138.7 63.1 141.7 74.3C144 58.4 144.7 42.5 143.9 26.8Z' fill='%2328C2D1'/%3E%3Cpath d='M112.1 72.8999C113.8 79.5999 115.3 86.2999 116.6 92.9999C123.7 94.2999 130.7 95.5999 137.8 96.9999C139.5 89.3999 140.8 81.6999 141.8 74.0999C138.8 62.9999 135.2 51.8999 131 40.8999C125.6 51.6999 119.2 62.3999 112.1 72.8999Z' fill='%2328C2D1'/%3E%3Cpath d='M112.1 72.8999C113.8 79.5999 115.3 86.2999 116.6 92.9999C123.7 94.2999 130.7 95.5999 137.8 96.9999C139.5 89.3999 140.8 81.6999 141.8 74.0999C138.8 62.9999 135.2 51.8999 131 40.8999C125.6 51.6999 119.2 62.3999 112.1 72.8999Z' fill='url(%23paint0_radial_4115_133383)'/%3E%3Cpath d='M99.8999 89.8999C104.2 84.2999 108.3 78.5999 112.1 72.8999C108 57.0999 102.8 41.2999 96.3999 25.8999C90.3999 38.1999 83.2999 50.4999 75.1999 62.5999C73.9999 69.9999 72.5999 77.2999 70.8999 84.6999C80.5999 86.3999 90.1999 88.1999 99.8999 89.8999Z' fill='%237BDDEF'/%3E%3Cpath d='M95.1001 89C100.6 90.2 111 92.1 116.6 93.1C115.3 86.4 113.8 79.7 112.1 73C108.2 78.6 99.4001 83.3 95.1001 89Z' fill='%237BDDEF'/%3E%3Cpath d='M27 42C36.3888 42 44 34.3888 44 25C44 15.6112 36.3888 8 27 8C17.6112 8 10 15.6112 10 25C10 34.3888 17.6112 42 27 42Z' fill='%23E1DFDD'/%3E%3Cpath d='M132.8 151.7C140.532 151.7 146.8 145.432 146.8 137.7C146.8 129.968 140.532 123.7 132.8 123.7C125.068 123.7 118.8 129.968 118.8 137.7C118.8 145.432 125.068 151.7 132.8 151.7Z' fill='%23E1DFDD'/%3E%3Cpath d='M115.9 141.8C122.527 141.8 127.9 136.427 127.9 129.8C127.9 123.172 122.527 117.8 115.9 117.8C109.272 117.8 103.9 123.172 103.9 129.8C103.9 136.427 109.272 141.8 115.9 141.8Z' fill='%23E1DFDD'/%3E%3Cpath d='M118.8 137.7C118.8 138.9 119 140.1 119.3 141.3C124.2 139.8 127.8 135.2 127.8 129.8C127.8 128.1 127.5 126.5 126.8 125.1C122.1 127.3 118.8 132.1 118.8 137.7Z' fill='%23C8C6C4'/%3E%3Cpath d='M69.2999 91.6002L66.2999 91.1002L60.2999 90.1002L57.1999 89.6002L60.0999 72.7002C58.3999 73.2002 56.6999 74.0002 55.1999 74.9002C54.0999 75.6002 53.1999 76.3002 52.2999 77.1002L49.5999 92.8002C49.2999 94.4002 50.3999 95.9002 51.9999 96.2002L84.4999 101.7C85.5999 99.5002 86.3999 97.1002 86.5999 94.7002L69.2999 91.6002Z' fill='%23EFEFEF'/%3E%3Cpath d='M83.6 81.3C83.3 80.8 82.9 80.3 82.5 79.8C81.8 78.9 81.1001 78.2 80.4001 77.4C77.4001 74.6 73.8001 72.7 69.9001 72.1C69.0001 71.9 68.1 71.8 67.2001 71.8C64.9001 71.7 62.5001 72 60.2001 72.7L57.3 89.6L60.4001 90.1L66.4001 91.1L69.4001 91.6L86.7 94.6C87.1 90.1 86.2 85.4 83.6 81.3Z' fill='%237BDDEF'/%3E%3Cpath d='M43.2001 110.3L36.1001 117.7L41.9001 123.3L49.0001 115.9C46.9001 114.3 44.9001 112.5 43.2001 110.3Z' fill='url(%23paint1_linear_4115_133383)'/%3E%3Cpath d='M42.8145 122.6L37.0145 117L36.0145 116L18.5145 134.3C16.4145 136.5 16.5145 139.9 18.7145 141.9C20.9145 143.9 24.3145 143.9 26.3145 141.7L43.8145 123.5L42.8145 122.6Z' fill='%232B88D8'/%3E%3Cpath d='M90.8999 77.6962C82.2999 63.9962 64.1999 59.8962 50.5999 68.4962C36.9999 77.0962 32.8999 95.0962 41.4999 108.796C42.0999 109.696 42.6999 110.496 43.2999 111.296C44.9999 113.496 46.9999 115.296 49.0999 116.896C58.4999 123.696 71.3999 124.496 81.7999 117.896C95.3999 109.296 99.3999 91.2962 90.8999 77.6962ZM86.5999 95.5962C86.2999 97.9962 85.5999 100.396 84.4999 102.596C82.8999 105.796 80.3999 108.596 77.1999 110.596C72.0999 113.796 66.1999 114.496 60.7999 112.996C55.9999 111.696 51.5999 108.696 48.7999 104.096C43.3999 95.4962 45.0999 84.4962 52.2999 77.9962C53.1999 77.1962 54.1999 76.3962 55.1999 75.7962C56.7999 74.7962 58.3999 74.0962 60.0999 73.5962C62.3999 72.8962 64.7999 72.5962 67.0999 72.6962C67.9999 72.6962 68.8999 72.7962 69.7999 72.9962C73.6999 73.6962 77.3999 75.4962 80.2999 78.2962C81.0999 78.9962 81.7999 79.7962 82.3999 80.6962C82.7999 81.1962 83.1999 81.6962 83.4999 82.1962C86.1999 86.3962 87.0999 91.0962 86.5999 95.5962Z' fill='url(%23paint2_linear_4115_133383)'/%3E%3Cpath d='M117.8 30.5C114.1 29.2 110.5 31.1 109.8 34.7C109 38.3 111.3 42.4 114.9 43.7C118.6 45 122.3 43.2 123.1 39.5C123.9 35.9 121.5 31.9 117.8 30.5Z' fill='%23C3F2F4'/%3E%3Cdefs%3E%3CradialGradient id='paint0_radial_4115_133383' cx='0' cy='0' r='1' gradientUnits='userSpaceOnUse' gradientTransform='translate(96.7276 59.5763) rotate(2.19167) scale(29.9137)'%3E%3Cstop offset='0.000449151' stop-color='%2328C2D1'/%3E%3Cstop offset='1' stop-color='%237BDDEF'/%3E%3C/radialGradient%3E%3ClinearGradient id='paint1_linear_4115_133383' x1='35.5361' y1='123.503' x2='46.1786' y2='112.282' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%23106EBE'/%3E%3Cstop offset='1' stop-color='%232B88D8'/%3E%3C/linearGradient%3E%3ClinearGradient id='paint2_linear_4115_133383' x1='191.384' y1='363.281' x2='73.301' y2='108.664' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%23106EBE'/%3E%3Cstop offset='1' stop-color='%232B88D8'/%3E%3C/linearGradient%3E%3C/defs%3E%3C/svg%3E%0A\";\r\n","export const getWebsiteImagesStyles = () => ({\r\n subdomainFields: {\r\n marginTop: 16,\r\n marginBottom: 16,\r\n '& .divider': {\r\n display: 'inline-block',\r\n marginLeft: 10,\r\n marginRight: 10,\r\n fontSize: 14,\r\n lineHeight: '20px',\r\n },\r\n },\r\n textAbovePicker: {\r\n display: 'block',\r\n margin: 12,\r\n },\r\n rootContainer: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n flexGrow: 1,\r\n },\r\n});\r\n\r\nexport const websiteImagesFinalUrlTextFieldStyles = {\r\n root: {\r\n display: 'inline-block',\r\n width: 260,\r\n },\r\n field: {\r\n paddingRight: 8,\r\n paddingLeft: 32,\r\n },\r\n};\r\n\r\nexport const websiteImagesFinalUrlTextFieldIconProps = {\r\n iconName: 'Search',\r\n styles: {\r\n root: {\r\n left: 8,\r\n right: 0,\r\n },\r\n },\r\n};\r\n\r\nexport const websiteImagesSubdomainTextFieldStyles = {\r\n root: {\r\n display: 'inline-block',\r\n width: 260,\r\n },\r\n};\r\n","import React, { useState, useContext, useCallback, useMemo, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport _ from 'underscore';\r\n\r\nimport { TextField, Dropdown } from '@bingads-webui-react/fabric-control';\r\nimport { isValidUrl, getDomain } from '@bingads-webui/url-util';\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\n\r\nimport {\r\n placeholderImage,\r\n getPlaceholderStyles,\r\n placeholderTextFieldStyles,\r\n placeholderTextFieldIconProps,\r\n placeholderDropdownStyles,\r\n} from './styles/index';\r\n\r\nconst urlPrefixOptions = [\r\n { key: 'https://', text: 'https://' },\r\n { key: 'http://', text: 'http://' },\r\n];\r\n\r\nconst defaultProtocol = 'https://';\r\n\r\nexport const PlaceholderView = ({\r\n onEnteredFinalUrl,\r\n protocol,\r\n onUpdateProtocol,\r\n initialFinalUrl,\r\n}) => {\r\n const [managedProtocol, setManagedProtocol] = useState(defaultProtocol);\r\n const [isInvalidUrl, setIsInvalidUrl] = useState(false);\r\n const [initialValue] = useState(initialFinalUrl);\r\n\r\n const initialTextFieldValue = useMemo(() => {\r\n if (initialValue) {\r\n return getDomain(initialValue);\r\n }\r\n return null;\r\n }, [initialValue]);\r\n\r\n useEffect(() => {\r\n if (initialValue && !isValidUrl(initialValue)) {\r\n setIsInvalidUrl(true);\r\n }\r\n }, [initialValue, setIsInvalidUrl]);\r\n\r\n const i18n = useContext(I18nContext);\r\n const classes = useDefaultStyles(getPlaceholderStyles);\r\n\r\n const shouldUseExternallyManagedProtocol = useMemo(\r\n () => protocol && onUpdateProtocol\r\n , [protocol, onUpdateProtocol]\r\n );\r\n\r\n const currentProtocol = useMemo(() => protocol || managedProtocol, [\r\n protocol,\r\n managedProtocol,\r\n ]);\r\n\r\n const setCurrentProtocol = useCallback((newProtocol, ev) => {\r\n if (shouldUseExternallyManagedProtocol) {\r\n onUpdateProtocol(newProtocol, ev);\r\n } else {\r\n setManagedProtocol(newProtocol);\r\n }\r\n }, [shouldUseExternallyManagedProtocol, onUpdateProtocol, setManagedProtocol]);\r\n\r\n const onChangeProtocol = useCallback((ev, newPrefix) => {\r\n setCurrentProtocol(newPrefix.text, ev);\r\n }, [setCurrentProtocol]);\r\n\r\n const onBlurUrl = useCallback((ev) => {\r\n const newUrl = ev && ev.target && ev.target.value;\r\n const newUrlWithProtocol = `${currentProtocol}${newUrl}`;\r\n\r\n if (isValidUrl(newUrlWithProtocol)) {\r\n setIsInvalidUrl(false);\r\n onEnteredFinalUrl(newUrlWithProtocol, ev);\r\n } else {\r\n setIsInvalidUrl(true);\r\n }\r\n }, [setIsInvalidUrl, onEnteredFinalUrl, currentProtocol]);\r\n\r\n const onKeyDown = useCallback((ev) => {\r\n if (ev.key === 'Enter') {\r\n onBlurUrl(ev);\r\n }\r\n }, [onBlurUrl]);\r\n\r\n return (\r\n
\r\n \"\"\r\n
{i18n.getString(_TL_('Please enter your website’s URL. We’ll pull images from your website.'))}
\r\n \r\n \r\n {isInvalidUrl &&\r\n
\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\nPlaceholderView.propTypes = {\r\n onEnteredFinalUrl: PropTypes.func.isRequired,\r\n protocol: PropTypes.string,\r\n onUpdateProtocol: PropTypes.func,\r\n initialFinalUrl: PropTypes.string,\r\n};\r\n\r\nPlaceholderView.defaultProps = {\r\n protocol: null,\r\n initialFinalUrl: null,\r\n onUpdateProtocol: _.noop,\r\n};\r\n","import React, {\r\n useContext,\r\n useMemo,\r\n useCallback,\r\n useRef,\r\n useState,\r\n useEffect,\r\n} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\n\r\nimport { I18nContext } from '@bingads-webui-react/i18n-context';\r\nimport { TextField } from '@bingads-webui-react/fabric-control';\r\n\r\nimport { FluentImagePicker } from '@bingads-webui-campaign-react/fluent-image-picker';\r\nimport { AssetLibrarySpinner } from '@bingads-webui-campaign-react/asset-library-spinner';\r\nimport { useDefaultStyles } from '@bingads-webui-react/with-default-styles';\r\nimport { getUrlProtocolAndDomain, hasProtocol, isValidUrl } from '@bingads-webui/url-util';\r\n\r\nimport {\r\n getWebsiteImagesStyles,\r\n websiteImagesFinalUrlTextFieldStyles,\r\n websiteImagesFinalUrlTextFieldIconProps,\r\n websiteImagesSubdomainTextFieldStyles,\r\n} from './styles/index';\r\nimport { PlaceholderView } from './placeholder-view';\r\n\r\nexport const WebsiteImageView = ({\r\n images,\r\n isLoadingFirstPage,\r\n isLoading,\r\n hasMore,\r\n finalUrl,\r\n subdomain,\r\n loadNextPage,\r\n onSelectImage,\r\n onEnteredFinalUrl,\r\n onSubdomainChange,\r\n onSubdomainChanged,\r\n pageSize,\r\n protocol,\r\n onUpdateProtocol,\r\n showTextAbovePicker,\r\n imageCellWidth,\r\n imageCellHeight,\r\n enableEditFinalUrlInListMode,\r\n}) => {\r\n const showPlaceholder =\r\n 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 i18n = useContext(I18nContext);\r\n const classes = useDefaultStyles(getWebsiteImagesStyles);\r\n\r\n const [temporaryFinalUrl, setTemporaryFinalUrl] = useState(finalUrlDomain);\r\n\r\n useEffect(() => {\r\n if (finalUrlDomain !== temporaryFinalUrl) {\r\n setTemporaryFinalUrl(finalUrlDomain);\r\n }\r\n }, [finalUrlDomain, finalUrl]);\r\n\r\n const subdomainRef = useRef();\r\n const finalUrlRef = useRef();\r\n\r\n const onKeyDownSubdomain = useCallback((ev) => {\r\n if (ev.key === 'Enter') {\r\n onSubdomainChanged(ev);\r\n if (subdomainRef.current) {\r\n subdomainRef.current.blur();\r\n }\r\n }\r\n }, [onSubdomainChanged]);\r\n\r\n const onKeyDownFinalUrl = useCallback((ev) => {\r\n if (ev.key === 'Enter') {\r\n let updatedFinalUrl = getUrlProtocolAndDomain(temporaryFinalUrl);\r\n\r\n if (!hasProtocol(updatedFinalUrl)) {\r\n updatedFinalUrl = `https://${updatedFinalUrl}`;\r\n }\r\n\r\n onEnteredFinalUrl(updatedFinalUrl, ev);\r\n if (finalUrlRef.current) {\r\n finalUrlRef.current.blur();\r\n }\r\n }\r\n }, [onEnteredFinalUrl, temporaryFinalUrl]);\r\n\r\n const onFinalUrlFieldChange = useCallback((ev, newValue) => {\r\n setTemporaryFinalUrl(newValue);\r\n }, [setTemporaryFinalUrl]);\r\n\r\n const onFinalUrlBlur = useCallback((ev) => {\r\n let updatedFinalUrl = getUrlProtocolAndDomain(temporaryFinalUrl);\r\n\r\n if (!hasProtocol(updatedFinalUrl)) {\r\n updatedFinalUrl = `https://${updatedFinalUrl}`;\r\n }\r\n\r\n onEnteredFinalUrl(updatedFinalUrl, ev);\r\n }, [temporaryFinalUrl, onEnteredFinalUrl]);\r\n\r\n return (\r\n
\r\n {\r\n showPlaceholder ?\r\n : (\r\n
\r\n {showTextAbovePicker && (\r\n
\r\n {i18n.getString(_TL_('We found images from your Final URL:'))}\r\n
\r\n )}\r\n \r\n
\r\n {'/'}\r\n
\r\n \r\n
\r\n )\r\n }\r\n {\r\n !showPlaceholder && !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 !showPlaceholder && (\r\n isLoadingFirstPage ? :\r\n \r\n )\r\n }\r\n
\r\n );\r\n};\r\n\r\nWebsiteImageView.propTypes = {\r\n images: PropTypes.arrayOf(PropTypes.shape({\r\n thumbnailSrc: PropTypes.string,\r\n })).isRequired,\r\n isLoadingFirstPage: PropTypes.bool.isRequired,\r\n isLoading: PropTypes.bool.isRequired,\r\n hasMore: PropTypes.bool.isRequired,\r\n loadNextPage: PropTypes.func.isRequired,\r\n onSelectImage: PropTypes.func.isRequired,\r\n onEnteredFinalUrl: PropTypes.func.isRequired,\r\n onSubdomainChange: PropTypes.func.isRequired,\r\n onSubdomainChanged: PropTypes.func.isRequired,\r\n pageSize: PropTypes.number,\r\n finalUrl: PropTypes.string,\r\n subdomain: PropTypes.string,\r\n protocol: PropTypes.string,\r\n onUpdateProtocol: PropTypes.func,\r\n showTextAbovePicker: PropTypes.bool,\r\n imageCellWidth: PropTypes.number,\r\n imageCellHeight: PropTypes.number,\r\n enableEditFinalUrlInListMode: PropTypes.bool,\r\n};\r\n\r\nWebsiteImageView.defaultProps = {\r\n finalUrl: '',\r\n subdomain: '',\r\n pageSize: 30,\r\n protocol: null,\r\n onUpdateProtocol: null,\r\n showTextAbovePicker: false,\r\n imageCellWidth: undefined,\r\n imageCellHeight: undefined,\r\n enableEditFinalUrlInListMode: false,\r\n};\r\n"],"names":["getAdStatuStyles","dropdown","borderColor","display","selectedOption","backgroundColor","option","adStatusOptions","textKey","_TL_","value","dropdownId","AdStatus","_ref","onAdStatusChange","data","i18n","useContext","I18nContext","classes","useDefaultStyles","handleStatusChange","useCallback","e","optionValue","currentValue","currentText","getString","_","_jsx","FluentProvider","theme","webLightTheme","children","_jsxs","className","Label","id","Dropdown","onOptionSelect","selectedOptions","map","Option","classNames","ValidatedAdStatus","withCustomValidation","validationProps","updateValidation","status","newData","useEffect","AdStatusSection","React","props","expand","rest","_objectWithoutProperties","_excluded","descriptionsCardSummaryDetails","useMemo","getStatusSummary","ValidatedPanel","_objectSpread","title","TextTitle","titleKey","iconAltText","details","attentionBeaconProps","getExtraProps","getPanelErrorProps","actuationProps","expandKey","assetLibraryLegacyI18nMap","ImageExperience_MultipleUpload_SizeValidationFailTemplate","ImageExperience_MultipleUpload_SizeValidationFailTemplate_WithoutDimension","ImageExperience_SizeValidationFailTemplate_WithDetail","ImageExperience_SizeValidationFailTemplate_WithDetail_WithoutDimension","ImageExperience_SizeValidationFailTemplate","ImageExperience_SizeValidationFailTemplate_WithoutDimension","ImageExperience_Error_AnimatedImageNotAllowed","ImageExperience_Error_ImageLoadError","ImageExperience_Error_CampaignServiceMediaDataEncodingInvalid","ImageExperience_Error_CampaignServiceMediaFormatNotSupported","ImageExperience_Error_InternalError","imageOption","constants","defaultImageOption","removeNullUndefined","obj","newObj","forEach","key","undefined","processNewlyAddedImages","imgObjMT","imageSource","optionalCallback","isDisplayAds","isPortraitImage","isAudienceAdSmartCropEnabled","mediaRepository","_ref$isBrandKit","isBrandKit","postValidationError","validateImageWithDimension","Width","Height","isDueToResizing","imageObject","newImageFromMTObject","getSmartCroppedImagesAsync","originalImageToCrop","isMultimediaAd","isMultimediaAdinMSANEnabled","aspectRatioOption","defaultAspectRatioOption","genericErrorMsg","useAssetLibraryImagePicker","_ref2","cid","aid","oDataConfig","onNewImageSelected","permissions","serverContext","isAllUploadFlowImageUpscaleEnabled","_ref2$isBrandKit","_useState","useState","_useState2","_slicedToArray","imagePickerError","setImagePickerError","_useState3","_useState4","isUploadImageUpscaleEnabled","setIsUploadImageUpscaleEnabled","isCopilotRegionRestricted","feature","then","isRestricted","errorValidationI18n","buildLegacyI18n","minSize","getMinimumSizeForImage","minUploadSize","length","supportImageUpscale","setImagePickerErrorWithErrorCodeError","getImageValidationErrorMessage","clearImagePickerError","customMediaSourceConfig","_ref3","mediaSourceConfig","addMediaConfig","IsSocialMediaImagesEnabled","VIEWS","SocialMedia","imageRepository","ImageRepository","stockImageDataService","StockImageDataService","controller","investImageDataService","InvestImageDataService","socialMediaRepository","SocialMediaRepository","socialMediaDataSource","SocialMediaDataSource","repository","MediaRepository","dynamic","uploadImage","_ref4","imageData","updateCurrentProgress","name","validateImageSizeAsync","uploadImageAsync","response","imageId","Error","Code","processUploadedImage","_ref5","index","callback","imageSources","Upload","getImageByIdAsync","croppedImagePlacements","onProcessUploadComplete","args","arguments","upscaledImages","item","count","imageName","notificationApi","showInfo","fileName","fileCount","addImageByUrl","imageUrl","WebsiteCarousel","bulkSaveImagesByUrl","url","ids","code","processedImage","catch","errorMessage","addCreatives","_ref6","creativeData","getMTImages","_ref7","_asyncToGenerator","_regeneratorRuntime","mark","_callee","images","wrap","_context","prev","next","Promise","sent","abrupt","stop","_x","apply","getImages","_ref8","_callee2","imgObjsMT","_context2","addCropSettingsToCreativeImage","_x2","originalImageUrls","creative","template","image","Url","metadata","stringifySync","replace","encodeURIComponent","baseId","Id","sourceType","error","getStockImages","getInvestImages","getInvestAssets","onSelectStockImage","_ref12","selectedImageId","Stock","saveStockImage","stockImageId","stockImageVendorId","_ref13","onImageSelected","Existing","Metadata","uriDecodedMetaData","decodedMetadata","parseSync","creativeMeta","creativeId","onImagesSelected","imageIds","addImagePromises","push","processedImages","useImagePicker","show","setShow","activeImagePickerPillIndex","setActiveImagePillIndex","_useState5","LandingPage","_useState6","selectedMediaPanelSource","setSelectedMediaPanelSource","displayImagePicker","setDisplayImagePicker","displayWebsiteSuggestionTab","WebsiteImage","websiteSuggestionReducer","state","action","type","isSubdomainScraping","selectedIndex","SuggestionStatus","SelectSuggestionError","carousel","message","MessageBarType","SelectSuggestionComplete","val","ind","updatedSuggestions","mapSuggestionResponseToState","useWebsiteSuggestion","adContext","instrumentation","logActivity","fullUrl","hasErrorInUrl","headlines","descriptions","adCreatorScenario","_ref$customizedGetMin","customizedGetMinimumSizeForImage","_useReducer","useReducer","EmptyURL","_useReducer2","suggestionState","dispatchSuggestionState","onPollingSuggestionCompleted","ServerError","FetchSucceed","logger","getAdCreatorInstrumentation","websiteSuggestionActivity","SuggestionPoller","advertiserCustomerId","accountId","cmpId","campaignId","jobCompleteCallback","poller","pollerWrapperRef","useRef","current","getLandingPageSuggestions","opts","concat","JSON","stringify","getMoreLandingPageSuggestions","fetchSuggestionByUrl","headlinesArg","descriptionsArg","enableOfflinePollingDelay","FetchInProgress","width","height","landingPageUrl","minimumResolution","cancel","InvalidURL","suggestionPoller","StockImage","AIGCImage","InvestImage","ManagedWebsiteImageView","imageExperienceProps","setShowBlocker","assetLibraryConfig","assetLibraryDataService","maxUploadNum","triggerAddImagesRef","setDisableApplyButton","setShowApplyButton","setSelectionInfoText","setErrors","perfMarker","setImages","setMoreImages","newImages","prevImages","_toConsumableArray","websiteImageConfig","suggestion","finalUrl","onUpdateFinalUrl","finalUrlProtocol","onUpdateFinalUrlPrefix","pageNumber","setPageNumber","subdomain","setSubdomain","hasMore","setHasMore","lastSuggestionImages","finalUrlWithDomain","getUrlProtocolAndDomain","baseImages","inProgress","thumbnailSrc","thumbnailUrl","onSubdomainChange","ev","newSubdomain","onEnteredFinalUrl","newUrl","onUpdateProtocol","newProtocol","text","onSubdomainChanged","target","trim","extendPath","forceInternalScrapingService","additionalCallback","isLoadingFirstPage","loadNextPage","newPageNumber","_data$ImagePaging","ImagePaging","TotalCount","PageSize","PageNumber","Images","ThumbnailUrl","ImageUrl","isLoading","pageSize","protocol","showTextAbovePicker","useImageExperienceAdapterForWebsiteImages","enableMultipleSelection","enableWebsiteMultipleSelection","onImageAddError","onSelectImage","uploadImageByUrl","folderId","ROOT_FOLDER_ID","sourceTypes","WebsiteImported","res","logTrace","Website","finally","onSelectImageForMultiSelection","selectedImage","newImage","isSelected","newArr","limitNumber","selectedImages","stringToUse","selectedNumber","onApplyButtonClick","websiteImagePerfMarker","createChild","willInit","img","concurrency","MaxAddAssetJobInParell","err","done","WebsiteImageView","imageCellWidth","imageCellHeight","defaultProps","websiteImageSourceConfig","showBackButton","onRenderContent","buttonConfig","label","view","iconName","buttonLocator","ManagedStockImageView","stockImageConfig","enableStockMultipleSelection","onChangeImageIdSelection","stockImagePerfMarker","selectStockImage","uploadStockImage","tap","skip","setSkip","_useState7","_useState8","serializedFilterForComp","setSerializedFilterForComp","_useState9","_useState10","setIsLoadingFirstPage","_useState11","_useState12","searchQuery","setSearchQuery","_useState13","_useState14","filter","setFilter","StockImageView","stockImageSourceConfig","getSocialMediaStyles","socialMediaContainer","flexDirection","flexGrow","textField","paddingBottom","socialMediaRoot","paddingTop","twitterReg","RegExp","SocialImageView","fetchImages","fetchImageByAccount","socialMediaAccount","showPlaceholder","isValidUrl","setIsLoading","account","setAccount","alertMessage","setAlertMessage","setAlertMessageByResult","result","loadSocialImages","Value","onAccountChange","newValue","onBlur","match","Key","fetchResult","imageToBeSelected","src","onKeyDown","classnames","PlaceholderView","TextField","iconProps","onChange","styles","fieldGroup","AssetLibrarySpinner","useCustomSize","customStyle","marginTop","FluentImagePicker","loadMoreImages","hasMoreImages","ManagedSocialImageView","socialImageConfig","_useSocialMediaReposi","setSocialMediaAccount","subscribe","newStatus","newSocialMediaAccount","socialMediaAccounts","useSocialMediaRepositoryToSetImages","acct","TwitterImported","Social","socialImageSourceConfig","ManagedAIGCImageView","eventHandler","assetLibraryAccountPreferences","_useAIGenerateImagesS","useAIGenerateImagesState","dataService","prompt","restState","boundedMaxUploadNum","selectedCount","handleJobErrors","jobErrors","assetLimit","getImageAssetLimitPerAccount","genericError","LearnMoreLink","linkText","topic","onApplySelectedImages","handleRealUsedFlag","RealUsedFlagSuffix","Picker","imageUrls","x","join","logForExpand","aiGCImagePerfMarker","modelSource","AIModelSource","Dalle","Recraft","AIGeneratedByRecraft","AIGenerated","values","onAddImagesToAssetLibrary","AssetLibraryAIGenerateImagesView","aigcImageSourceConfig","onRenderFooterContent","AIGCDisclaimer","getLandingPageStyles","landingContent","assetLibraryGridContainer","flexBasis","overflowX","overflowY","padding","getAssetLibraryStyles","maxWidth","injectedContentContainer","marginRight","marginLeft","minWidth","position","DeleteConfirmDialog","showConfirmDialog","setShowConfirmDialog","deleteAssetApi","onSuccess","showUIBlocker","setShowUIBlocker","setErrorMessage","closeConfirmDialog","ConfirmDialog","isDisplayed","errorText","confirmString","cancelString","onClickConfirm","errors","onClickCancel","isUiBlocked","zIndex","background","overflowWrap","filterTokens","childrenGap","AssetLibraryImagesView","ianaTimeZone","assetLibraryUserPreferences","dateFormat","onFailedToLoadImages","multiSelectionEnabled","allowedAssetType","enableImageDeleting","isAssetLibraryAIGCMVPEnabled","isClickableOutsideFocusTrap","disabledAssetSources","setSelectedImages","selectedFolders","setSelectedFolders","setSelectedCount","dataLoadedOnce","setDataLoadedOnce","addAssetLibrarySurveyTriggerFlag","AssetLibrarySurveyTriggerFlag","dataLoaded","onApplyImages","imagesFromFolders","folder","assets","imagesIdsFromFolders","selectedImageIds","selectedImagePerformanceLabels","performanceLabel","imagesToSelect","imagePerformanceLabels","reload","setReload","forceToReload","imageDeleteConfirmDialog","onDeleted","itemToDeleteRef","open","render","assetId","folderAssetType","deleteAsset","useImageDeleteConfirmDialog","renderImageGridCell","searchText","onClick","event","keyCode","Enter","AssetLibraryImageAssetsGridCellBase","highlightedText","renderCellContent","defaultContent","role","tabIndex","style","deletable","onDelete","resetSelectionState","navigateIntoFolder","renderMultiSelectionGridCell","selected","selectItem","sectionName","assetCells","document","querySelectorAll","cell","GridSectionName","Folder","AssetLibraryFoldersGridCell","selectable","onSelect","onFolderClick","folderItem","customTabHandler","shiftKeyPressed","querySelector","sortBy","focus","i","keyDownHandlerForListItem","onSelectionChange","selectedItems","newCount","memo","itemCount","ImageAssetsCount","Asset","_ref9","sectionSelectedItems","_defineProperty","_Fragment","AssetLibraryLandingPageContent","renderGridCell","dropdownWidth","tokens","onFailedToLoadData","displayFolderPath","assetsToLoadForSubfolders","onFolderNavigationChange","realUsedFlagSuffix","overlayStyles","root","AddMediaLandingPage","goToView","setHideSubtitle","imageType","showPromotionBanner","isAdStudioEnabled","uploadPreviewImageArr","setUploadPreviewImageArr","showUploadPreview","setShowUploadPreview","isSpinnerVisible","showSpinner","onImgSelected","onImgsSelected","restConfig","isMMAV2Enabled","isStoreAppProng","isStoreAppSpotLight","isStoreAppTransparentLogo","imageSelectPerfMarker","imgObj","imagePerfMarkerData","imageWidth","imageHeight","onFailedToLoadAssetLibraryImages","uploadMediaConfig","processUploadedMedia","uploadMedia","isPortraitImageEnabled","imageOptionKeys","Portrait","supportUpscale","onUploadImage","onGenerateImagesClick","Overlay","isDarkThemed","UploadPreview","assetList","AssetLibraryAIGCPromotionBanner","AssetLibraryNewFeatureBanner","content","AddMediaSourcesContainer","setUploadPreviewMediaArr","setUploadErrors","FolderAssetType","Image","ManagedLandingView","preDefinedAssetSources","finalConfig","landingPageButtonConfig","getSearchFieldStyle","container","getRootStyles","investImageRoot","InvestImageView","searchFieldClasses","loadImages","_ref2$creativeId","_ref2$$skip","$skip","_ref2$$query","$query","queryParams","appName","assetTypeId","$top","customQueries","extend","XandrAssetId","imageSrc","newSkip","selectionChange","newSelectionState","selectionState","placeholder","IconButton","ManagedInvestImageView","investImageConfig","enableInvestMultipleSelection","investImagePerfMarker","selectInvestImage","uploadInvestImage","investImageId","Invest","investImageSourceConfig","getAddImageConfig","isLiteLandingPageEnabled","hideStockImage","panelTitle","panelSubtitle","isXandrIntegrationEnabled","config","subTitle","onRenderSubtitle","subtitleClass","onAssetLibraryLinkClick","href","rel","getLandingPageConfig","DEFAULT_VIEW","AddImageCrudAdComponentInternal","isStockImageEnabled","creativeEditorProps","hasLoggedEnterAssetLibrary","setHasLoggedEnterAssetLibrary","removeAssetLibrarySurveyTriggerFlag","setClarityTag","AssetLibraryCopilot","isOpen","onEnterAssetLibrary","AssetLibraryCreativeEditor","initialView","AddMediaPanel","AddImageCrudAdComponentInternalWithServices","withAssetLibraryServicesLoaded","loggerTag","AddImageCrudAdComponent","isAADUser","_excluded2","isAssetLibraryAIGCEnabled","setIsAssetLibraryAIGCEnabled","copilotRegionRestrictedCalled","setCopilotRegionRestrictedCalled","isAssetLibraryAIGCEnabledInner","timeZone","preferencesService","activityLogger","accountTimeZone","preferenceService","activity","stockImageFilterLegacyI18nMap","ShutterStock_Filter_People_Model_Released","ShutterStock_Filter_People_Model_Released_True","ShutterStock_Filter_People_Model_Released_False","ShutterStock_Filter_People_Ethnicity","ShutterStock_Filter_People_Ethnicity_African","ShutterStock_Filter_People_Ethnicity_African_American","ShutterStock_Filter_People_Ethnicity_Black","ShutterStock_Filter_People_Ethnicity_Brazilian","ShutterStock_Filter_People_Ethnicity_Chinese","ShutterStock_Filter_People_Ethnicity_Caucasian","ShutterStock_Filter_People_Ethnicity_East_Asian","ShutterStock_Filter_People_Ethnicity_Hispanic","ShutterStock_Filter_People_Ethnicity_Japanese","ShutterStock_Filter_People_Ethnicity_Middle_Eastern","ShutterStock_Filter_People_Ethnicity_Native_American","ShutterStock_Filter_People_Ethnicity_Pacific_Islander","ShutterStock_Filter_People_Ethnicity_South_Asian","ShutterStock_Filter_People_Ethnicity_Southeast_Asian","ShutterStock_Filter_People_Ethnicity_Other","ShutterStock_Filter_People_Gender","ShutterStock_Filter_People_Male","ShutterStock_Filter_People_Female","ShutterStock_Filter_People_Both","ShutterStock_Filter_People_Age","ShutterStock_Filter_People_Age_Infants","ShutterStock_Filter_People_Age_Children","ShutterStock_Filter_People_Age_Teenagers","ShutterStock_Filter_People_Age_20s","ShutterStock_Filter_People_Age_30s","ShutterStock_Filter_People_Age_40s","ShutterStock_Filter_People_Age_50s","ShutterStock_Filter_People_Age_60s","ShutterStock_Filter_People_Age_Older","ShutterStock_Filter_People_Number","ShutterStock_Filter_Filter","ShutterStock_Filter_Reset","ShutterStock_Filter_Apply","Filter_PredicateList_New","Filter_Validation_Common_Required","Filter_Validation_Common_Number","Filter_Validation_Common_Number_Range","Filter_Validation_Common_Integer","Filter_Validation_EnumSelectionRequired","Filter_Validation_Common_Date","ShutterStock_Filter_Operator_Eq","ShutterStock_Filter_People_Age_Children_X","ShutterStock_Filter_People_Age_20s_X","ShutterStock_Filter_People_Age_30s_X","ShutterStock_Filter_People_Age_40s_X","ShutterStock_Filter_People_Age_50s_X","ShutterStock_Filter_People_Age_60s_X","ShutterStock_Filter_People_Age_Older_X","getFilterStyle","popoverContainer","stockImageRoot","filterI18n","_ref2$$search","$search","language","includevertical","Preview","onFilterQueryChange","newFilterQuery","newFilterQueryString","messageBarStyles","marginBottom","popoverContainerRef","setPopoverContainerRef","popoverContainerCallbackRef","node","StockImageFilter","i18nLegacy","ref","MessageBar","messageBarType","info","placeholderTextFieldStyles","field","paddingRight","paddingLeft","placeholderTextFieldIconProps","left","right","placeholderDropdownStyles","getPlaceholderStyles","placeholderView","fontSize","lineHeight","color","getWebsiteImagesStyles","subdomainFields","textAbovePicker","margin","rootContainer","websiteImagesFinalUrlTextFieldStyles","websiteImagesFinalUrlTextFieldIconProps","websiteImagesSubdomainTextFieldStyles","urlPrefixOptions","initialFinalUrl","managedProtocol","setManagedProtocol","isInvalidUrl","setIsInvalidUrl","initialValue","initialTextFieldValue","getDomain","shouldUseExternallyManagedProtocol","currentProtocol","setCurrentProtocol","onChangeProtocol","newPrefix","onBlurUrl","newUrlWithProtocol","alt","options","selectedKey","ariaLabel","defaultValue","enableEditFinalUrlInListMode","finalUrlDomain","temporaryFinalUrl","setTemporaryFinalUrl","subdomainRef","finalUrlRef","onKeyDownSubdomain","blur","onKeyDownFinalUrl","updatedFinalUrl","hasProtocol","onFinalUrlFieldChange","onFinalUrlBlur","disabled","componentRef"],"sourceRoot":""}