{"version":3,"mappings":"qlFAkBO,SAASA,GAAUC,EAAoC,CACtD,MAAE,MAAAC,EAAO,mBAAAC,CAAuB,EAAAF,EAEtC,IAAIG,EAAS,GACTC,EAAU,GAEV,UAAOH,GAAU,SACTG,EAAAH,MACL,CACL,MAAMI,EAASJ,EACf,GAAI,SAAUI,EAAQ,CACpB,MAAMC,EAAOL,EACHG,EAAAE,EAAK,OAAS,IAAM,KAAK,UAAUA,EAAK,IAAI,EAAE,QAAQ,MAAO,EAAE,MAErE,WAAYD,IACdF,EAAS,IAAOE,EAAO,QAErB,YAAaA,IACfD,EAAWC,EAAO,QAGxB,CAEA,cACGE,EAAU,IAAI,CAAE,UAAW,MAC1B,YAAAC,EAAA,IAACC,EAAY,IACbC,OAACH,EAAU,UAAS,KAClB,UAAAG,EAAA,KAACC,EAAA,CACC,QAAQ,KACR,MAAM,SACN,aAAY,GACZ,GAAI,CACF,SAAU,QACV,WAAY,IACZ,OAAQ,GACR,WAAY,CACV,WAAY,GACd,CACF,EAGA,UAAAD,OAAC,SAAO,mBAAMP,CAAA,EAAO,EAAS,KAAGC,CAAA,EACnC,EACCF,GAAsBM,MAACI,EAAM,WAAU,MAAM,eAAe,SAC3D,SAACJ,MAAAK,GAAA,CAAO,QAAQ,WAAW,QAASX,EAAoB,gBAAK,GAC/D,GACF,CACF,GAEJ,CChEO,KAAM,CAAE,WAAAY,EAAW,EAAIC,GAAiB,CAAE,SAAAC,GAAU,ECE9CC,GAAiB,IAAMC,KACvBC,EAAkDC,GAElDC,GAAmB,CAACC,EAAeC,EAA0D,KAAO,CACzG,MAAAC,EAAMC,SAAO,SAAS,KAAK,EAC3B,CAAE,iBAAAC,EAAkB,KAAAC,CAAS,EAAAJ,EAEnCK,YAAU,IAAM,CACd,GAAI,CAAAD,IAGJ,SAAS,MAAQL,EACbI,GAAkB,CACpB,MAAMG,EAAgBL,EAAI,QAC1B,MAAO,IAAM,CAEX,SAAS,MAAQK,CAAA,CAErB,CACC,GAAEP,EAAOI,EAAkBC,CAAI,CAAC,CACrC,ECjBY,IAAAG,OAEVA,IAAA,oBAAsB,IAAtB,wBAGAA,IAAA,oBAAsB,IAAtB,wBACAA,IAAA,oBAAsB,GAAtB,wBACAA,IAAA,kBAAoB,EAApB,sBAGAA,IAAA,KAAO,CAAP,SACAA,IAAA,MAAQ,CAAR,UAXUA,OAAA,IAcAC,OACVA,IAAA,IAAM,CAAN,QACAA,IAAA,IAAM,CAAN,QAFUA,OAAA,ICtBAC,OAEVA,EAAA,2BAA6B,6BAFnBA,OAAA,IAOC,MAAAC,GAAiB,OAAO,OAAOD,CAAU,ECP1C,IAAAE,OAEVA,IAAA,UAAY,CAAZ,cACAA,IAAA,KAAY,CAAZ,SACAA,IAAA,UAAY,CAAZ,cACAA,IAAA,QAAY,CAAZ,YACAA,IAAA,MAAY,EAAZ,UACAA,IAAA,OAAY,EAAZ,WACAA,IAAA,OAAY,EAAZ,WACAA,IAAA,OAAY,GAAZ,WACAA,IAAA,OAAY,IAAZ,WACAA,IAAA,OAAY,IAAZ,WAXUA,OAAA,IAcAC,QAEVA,IAAA,QAAU,CAAV,YACAA,IAAA,QAAU,IAAV,YAHUA,QAAA,ICUZ,MAAMC,EAA0B,CAC9B,YAAa,CAAC,EACd,OAAQ,CAAC,EACT,SAAU,CAAC,EACX,YAAa,CAAC,EACd,MAAO,CACT,EAEaC,EAAYC,GAAY,CACnC,KAAM,OACN,aAAAF,EACA,SAAU,CACR,eAAgB,CACdG,EACA,CAAE,QAAAC,KACC,CACHD,EAAM,YAAcC,EAAU,CAC5B,UAAWA,EAAQ,WACnB,YAAaA,EAAQ,cACnBJ,EAAa,YACjBG,EAAM,OAASC,EAAUC,GAAmCD,EAAQ,YAAY,EAAIJ,EAAa,OAC3FG,EAAA,SAAWA,EAAM,OAASG,GAAmBH,EAAM,OAAO,MAAM,CAAmB,EAAIH,EAAa,SAC1GG,EAAM,YAAcA,EAAM,OAASI,GAAsBJ,EAAM,MAAoB,EAAIH,EAAa,YAC9FG,EAAA,MAAQA,EAAM,OAASK,GAAgBL,EAAM,OAAsBA,EAAM,OAAO,MAAM,CAAmB,EAAIH,EAAa,KAClI,CACF,CACF,CAAC,EAEY,CACX,eAAAS,EACF,EAAIR,EAAU,QAEd,SAASM,GAAsBG,EAAkC,CACzD,MAAAC,GAAMD,GAAA,YAAAA,EAAQ,MAAO,GACrBE,EAA2B,GACjC,IAAIC,EAAkB,GAClB,GAAAH,GAAUA,EAAO,IACnB,UAAWI,KAASJ,EAAO,IAAI,MAAM,GAAG,EAClCb,GAAe,SAASiB,CAAmB,IAC7CF,EAAY,KAAKE,CAAmB,EAClBD,EAAA,IAIxB,GAAIF,GAAO,GACLA,EAAMb,EAAc,UACtB,GAAI,CAACe,EACSD,EAAA,KAAKhB,EAAW,0BAA0B,MACjD,CAEL,MAAMmB,EAAIH,EAAY,QAAQhB,EAAW,2BAA4B,CAAC,EAClEmB,EAAI,IACMH,EAAA,OAAOG,EAAG,CAAC,CAE3B,CAGG,OAAAH,CACT,CAEA,SAASJ,GAAgBE,EAAqBM,EAAkD,CAC1F,IAAAL,GAAMD,GAAA,YAAAA,EAAQ,MAAO,KACrBO,EAAsB,EAC1B,OAAIN,IAAQ,OAKNA,GAAO,IAETM,GAAOvB,EAAK,MAERiB,EAAA,KAAK,IAAIA,CAAG,EACdA,EAAMb,EAAc,SACtBmB,GAAOvB,EAAK,qBAEViB,EAAMb,EAAc,SACtBmB,GAAOvB,EAAK,qBAEViB,EAAMb,EAAc,SACtBmB,GAAOvB,EAAK,qBAEViB,EAAMb,EAAc,SACtBmB,GAAOvB,EAAK,oBAGZsB,GAAkBA,EAAe,KACnCC,GAAOvB,EAAK,OAEPuB,CACT,CAEA,SAASX,GAAmBI,EAAoC,OACvD,OACL,GAAIA,GAAA,YAAAA,EAAQ,GACZ,kBAAmBA,GAAA,YAAAA,EAAQ,GAC3B,QAAQQ,EAAAR,GAAA,YAAAA,EAAQ,KAAR,YAAAQ,EAAY,MAAM,KAAK,MAC/B,aAAc,OAElB,CAIO,MAAMC,GAA4BhB,GAA+CA,EAAM,KAAK,YAEtFiB,GAA4BjB,GAA+CA,EAAM,KAAK,YAEtFkB,GAAsBlB,GAAyCA,EAAM,KAAK,MAE1EmB,GAAyBnB,GAA4CA,EAAM,KAAK,SC5HhFoB,GAAiB,IAAmBxC,EAAeqC,EAAwB,EAElFI,GAAmBC,GACvBJ,GACCK,IAA2B,CAC1B,MAAAA,EACA,QAAS,CAACC,EAAuBC,EAAKjC,EAAU,MAAiB,CAC/D,MAAMkC,EAAQH,EAAQC,EAClB,OAAAC,IAAOjC,EAAU,IAEZkC,IAAU,EAGVA,IAAUF,CAErB,GAEJ,EAEaG,EAAW,IAAM/C,EAAeyC,EAAgB,EAEhDO,GAAc,IAAiBhD,EAAeuC,EAAqB,EAEnEU,GAAkBC,GAAyB,CAChD,MAAAC,EAAc7C,SAAO,EAAK,EAEhCG,YAAU,KACH0C,EAAY,SACND,IAEJ,IAAM,CACXC,EAAY,QAAU,KAEvB,CAAED,CAAS,CAAC,CACjB,ECFaE,EAAyB,CACpC,WAAY,GACZ,MAAO,CAAC,CACV,EAEaC,EAAUC,gBAAwBF,CAAY,ECrC9CG,GAA0B,CAAC,CACtC,SAAAC,EACA,MAAAC,CACF,IAAa,CACX,KAAM,CAAEC,EAAYC,CAAc,EAAIC,WAAkBR,EAAa,UAAU,EACzE,CAAES,EAAcC,CAAgB,EAAIF,WAAgCR,EAAa,YAAY,EAE7FW,EAAeC,cAAY,IAAM,CACrCL,EAAc,CAACD,CAAU,GACxB,CAAEC,EAAeD,CAAW,CAAC,EAE1BO,EAAsBD,cAAaE,GAAmB,CAExDJ,EADEI,EACc,IAAMA,EAEN,MAFQ,CAG1B,EACC,CAAEJ,CAAgB,CAAC,EAGpB,OAAAzE,EAAA,IAACgE,EAAQ,SAAR,CACC,MAAO,CACL,WAAAK,EACA,aAAAK,EACA,aAAAF,EACA,gBAAiBI,EACjB,MAAOR,GAASL,EAAa,KAC/B,EAEC,SAAAI,CAAA,EAGP,EClCO,SAASW,IAAoB,CAC5B,MAAAC,EAAUC,aAAWhB,CAAO,EAC5B,CAAE,QAAAiB,GAAYvB,IAGdwB,EAAkBD,EACtB3D,EAAK,oBACLA,EAAK,oBACLA,EAAK,oBACLA,EAAK,kBACLA,EAAK,MAGP,OAAO6D,UAAQ,IAAM,CACnB,KAAM,CAAE,MAAAf,EAAO,GAAGgB,CAAA,EAAUL,EAErB,OACL,MAAOG,EAAkBd,EAAQ,CAAC,EAClC,GAAGgB,CAAA,CACL,EACC,CAAEL,EAASG,CAAgB,CAAC,CACjC,CCdO,MAAMnB,EAAyB,CACpC,OAAQ,CAAC,EACT,SAAU,EACZ,EAEaC,GAAUC,gBAAwBF,CAAY,ECT9CsB,GAA4B,CAAC,CACxC,SAAAlB,EACA,OAAAmB,EACA,SAAAC,CACF,IAGIvF,EAAA,IAACgE,GAAQ,SAAR,CACC,MAAO,CACL,OAAQsB,GAAUvB,EAAa,OAC/B,SAAUwB,GAAYxB,EAAa,QACrC,EAEC,SAAAI,CAAA,GChBA,SAASqB,IAA0B,CACxC,OAAOR,aAAWhB,EAAO,CAC3B,CAEO,SAASyB,IAA8C,CAC5D,KAAM,CAAE,OAAAH,EAAQ,SAAAC,CAAS,EAAIP,aAAWhB,EAAO,EACxC,OAAA0B,GAAcJ,EAAyBC,CAAQ,CACxD,CCDA,SAASI,GAAcnG,EAAqBwB,EAAgD,CAC1F,KAAM,CAAE,SAAU4E,CAAS,EAAIJ,GAAc,EAEvC,CAAE,GAAIK,EAAQ,GAAGT,GAAU5F,EAE7B,IAAAsG,EAAKD,EAAO,WAChB,OAAIC,IAAO,OAEJA,EAAA,KAEHA,EAAG,OAAO,CAAC,IAAM,MACdA,EAAA,GAAGF,CAAQ,GAAGE,CAAE,IAGf9F,MAAA+F,GAAA,CAAQ,IAAA/E,EAAU,GAAA8E,EAAS,GAAGV,CAAM,EAC9C,CAEa,MAAAY,GAAWC,EAAM,WAA4CN,EAAa,EAE1EO,GAAOF,GAMdG,GAAkB,CAAC3G,EAAwBwB,IAAmDhB,EAAA,IAACoG,IAAQ,IAAApF,EAAW,GAAGxB,EAAO,UAAWwG,EAAS,GAEzIK,EAAaJ,EAAM,WAA+CE,EAAe,EChCjFpC,EAAyB,CACpC,QAAS,OAAO,SAAS,SAAW,KAClC,OAAO,SAAS,KAAO,OAAO,SAAS,SAAS,QAAQ,MAAO,EAAE,EACnE,KAAM,CAGJ,IAAK,GAAgB,sBAAwB,GAC7C,SAAU,GAAgB,4BAA8B,GACxD,SAAU,GAAgB,2BAA6B,SAAS,GAAgB,2BAA4B,EAAE,EAAI,CACpH,EACA,MAAO,CACL,KAAM,qBACR,CACF,EAEauC,GAAgBrC,gBAAwBF,CAAY,ECrB3DwC,GAAYC,GAAe,CAC/B,QAAS,EACX,CAAC,EAEDC,EAAeC,GAAU,CACvB,YAAa,mBACbH,GACA,UAAW,KAAO,GACpB,CAAC,ECNYI,GAAYC,EAAK,gBAAgB,CAC5C,UAAYC,IAAW,CACrB,UAAWA,EAAM,MAAuB,CACtC,MAAQC,IAAY,CAClB,IAAK,GAAGA,CAAM,IAChB,CACD,IAEH,iBAAkB,EACpB,CAAC,EAEY,CACX,kBAAAC,EACF,EAAIJ,GCPEK,GAAuB,IAA0B,OACrD,MAAMC,GAAgBnE,EAAA,SAAS,cAAc,sCAAsC,IAA7D,YAAAA,EAAgE,aAAa,QACnG,OAAOmE,GAAgC,MACzC,EAEMC,GAAsBJ,GACrBA,EAGEK,GAAgB,CACrB,YAAa,GACd,EAAEpD,EAAc+C,CAAkB,EAJ1B/C,EASEqD,GAA4B,CAAC,CACxC,SAAAjD,CACF,IAAa,OACX,MAAM8C,EAAgB9B,UAAQ6B,GAAsB,CAAE,GAChD,CAAE,KAAMF,EAAQ,UAAAO,EAAW,QAAAC,CAAQ,EAAIP,GAAkBE,EAAyB,CACtF,KAAM,CAACA,CAAA,CACR,EAEKM,EAAkBpC,UAAQ,IACvB+B,GAAmBJ,CAAM,EAC/B,CAAEA,CAAO,CAAC,EAEPU,IAAY1E,EAAAyE,GAAA,YAAAA,EAAiB,QAAjB,YAAAzE,EAAwB,OAAQ,GAMlD,OALAjC,GAAiB2G,EAAW,CAC1B,iBAAkB,GAClB,KAAM,CAACA,CAAA,CACR,EAEGH,EACK,KACEC,EACFtH,EAAA,IAAC,OAAI,SAAqC,gDAIhDgE,GAAQ,SAAR,CAAiB,MAAOuD,EACtB,SAAApD,CACH,EAEJ,EC/CO,SAASsD,IAAsB,CACpC,OAAOzC,aAAWhB,EAAO,CAC3B,CCVA,MAAe0D,GAAA,yDCMR,SAASC,GAAKnI,EAA+H,SAClJ,MAAMsH,EAASW,KAETG,IAAM9E,EAAAgE,EAAO,QAAP,YAAAhE,EAAc,OAAQ,GAC5B+E,IAAMC,EAAAhB,EAAO,OAAP,YAAAgB,EAAa,MAAOJ,GAEzB,OAAA1H,EAAA,IAAC,OACN,IAAA4H,EACA,IAAAC,EACC,GAAGrI,CAAA,EAER,CCSO,MAAMuE,GAAyB,CACpC,OAAQ,MAAOgE,EAAqB,CAAO,OAC3C,aAAc,MAAOA,EAA2B,KAAO,KACvD,QAAS,MAAOA,EAAsB,CAAO,OAC7C,WAAY,SAAY,GACxB,YAAa,MAAOC,GAAqB,GACzC,gBAAiB,IAAM,GACvB,UAAW,IAAM,GACjB,sBAAuB,SAAY,KACnC,4BAA6B,SAAY,GACzC,uBAAwB,SAAY,GACpC,KAAM,IACR,EAEahE,GAAUC,gBAAwBF,EAAY,ECVpD,MAAMkE,EAAyB,CAkDpC,YAAYnB,EAAiBoB,EAAuC,CAjDnDC,EAAA,qBACTA,EAAA,cACAA,EAAA,gBAAW,IACXA,EAAA,aAAQ,IACRA,EAAA,cAAS,IAEVA,EAAA,qBAiJGA,EAAA,eAAU,SACX,MAAM,KAAK,aAAa,WAO1BA,EAAA,cAAS,MAAOC,EAAoB,KAAsB,CAC/D,GAAI,MAAK,SAGT,CAAI,KAAK,QACC,cAAM,qBAAsBA,CAAI,EAE1C,KAAK,SAAW,GACZ,IACI,WAAK,aAAa,eAAeA,CAAI,QACrCC,EAAQ,CACd,WAAK,SAAW,GACR,cAAM,4BAA4BA,CAAM,EAAE,EAC5CA,CACR,KAGKF,EAAA,oBAAe,MAAOC,EAA0B,KAA6B,CAClF,GAAI,KAAK,UAAY,CAAC,KAAK,MAClB,YAEL,KAAK,QACC,cAAM,4BAA6BA,CAAI,EAE7C,IACF,OAAO,MAAM,KAAK,aAAa,aAAaA,CAAI,QAC1CC,EAAQ,CACN,oBAAM,yBAAyBA,CAAM,EAAE,EACzCA,CACR,IAGKF,EAAA,eAAU,MAAOC,EAAqB,KAAsB,CAIjE,GAHI,KAAK,QACC,cAAM,sBAAuBA,CAAI,EAEvC,MAAK,SAGT,MAAK,SAAW,GACZ,IACI,WAAK,aAAa,gBAAgBA,CAAI,QACtCC,EAAQ,CACd,WAAK,SAAW,GACR,cAAM,4BAA4BA,CAAM,EAAE,EAC5CA,CACR,KAGKF,EAAA,kBAAa,IACX,KAAK,aAAa,cAGpBA,EAAA,mBAAc,MAAOG,GAAmC,CAC7D,MAAM,KAAK,aACX,KAAK,aAAa,SAAS,iBAAiB,QAAaA,CAAA,GAGpDH,EAAA,uBAAkB,IAChB,CAAC,CAAC,KAAK,OAGTA,EAAA,iBAAY,IACV,CAAC,CAAC,KAAK,UAGTA,EAAA,6BAAwB,SAEtB,MAAM,KAAK,aAAa,0BAG1BA,EAAA,mCAA8B,SAA2B,CAExD,WAAK,aAAa,sBAAqB,GAGxCA,EAAA,8BAAyB,SAA8B,CAE5D,KAAK,MAAQ,GAIb,MAAMI,EAAM,OAAO,SAAS,SAAW,KAAO,OAAO,SAAS,KAAO,OAAO,SAAS,SAAW,IAAM,OAAO,SAAS,OAAO,UAAU,CAAC,EAIxI,OAHiB,MAAM,KAAK,aAAa,wBAAwBA,CAAG,GAGpD,kBAnMhB,KAAK,aAAe,IAAIC,GAAYP,GAAK,mBAAmBnB,EAAQoB,CAAe,CAAC,EACpF,KAAK,MAAQ,KAEb,KAAK,aAAa,kBAEZ,MAAAO,IAAW3F,EAAAgE,GAAA,YAAAA,EAAQ,OAAR,YAAAhE,EAAc,YAAa,OAAYgE,EAAO,KAAK,SAAW4B,EAAI,KACnFA,EAAI,UAAU,OAAO,EACrBA,EAAI,SAASD,CAAQ,EAChB,YAASA,EAAWC,EAAI,KAExB,kBAAa,OAAO,uBAAuB,IAAM,CAChD,KAAK,QACP,QAAQ,MAAM,qBAAqB,CACrC,CACD,EAEI,kBAAa,OAAO,sBAAsB,IAAM,CAC/C,KAAK,QACP,QAAQ,MAAM,oBAAoB,EAEpC,KAAK,aAAa,YAAW,CAC9B,EAED,KAAK,aAAa,OAAO,cAAeC,GAAS,CAC3C,KAAK,QACC,cAAM,mBAAoBA,CAAI,EAExC,MAAMC,EAAU,KAAK,MACrB,GAAIA,GAAWA,EAAQ,QAAQ,MAAQD,EAAK,QAAQ,IAAK,CAGvD,QAAQ,KAAK,0CAA0C,EACvD,KAAK,MAAQ,GACb,KAAK,aAAa,aAClB,MACF,CACA,KAAK,MAAQ,GACb,KAAK,OAAOA,CAAY,EACzB,EAEI,kBAAa,OAAO,gBAAgB,IAAM,CACzC,KAAK,QACP,QAAQ,MAAM,oBAAoB,EAEpC,OAAO,KAAK,aAAa,SAAS,iBAAiB,QACnD,KAAK,OAAO,IAAI,EACjB,EAED,KAAK,aAAa,OAAO,oBAAqBlJ,GAAU,CAEtD,MAAM4I,EAAU5I,EAAc,MAE9B,OADQ,aAAK,0BAA2B4I,CAAM,EACtCA,EAAQ,CACd,IAAK,uBACL,IAAK,iBACH,KAAK,MAAQ,GACb,KAAK,aAAa,aAClB,MAGJ,CAEA,WAAW,IAAM,CACV,KAAK,QAGN,KAAK,QACP,QAAQ,MAAM,4BAA4B,EAE5C,KAAK,aAAa,QAAU,OAAaM,GAAA,CACnC,KAAK,QACC,cAAM,qCAAsCA,CAAI,EAEtDA,GAAS,CAACA,EAAK,SACjB,KAAK,aAAa,kBAClB,KAAK,aAAa,qBAElB,QAAQ,KAAK,8DAA8D,EAC3E,KAAK,aAAa,aACpB,CACD,IACA,GAAI,EACR,EAEI,kBAAa,OAAO,iBAAiB,IAAM,CAC1C,KAAK,QACP,QAAQ,MAAM,sBAAsB,EAEtC,KAAK,MAAQ,GACb,KAAK,OAAO,IAAI,EACjB,CACH,CArIA,OAAe,mBAAmB7B,EAAiBoB,EAA4D,CACvG,MAAAW,EAAa/B,EAASA,EAAO,QAAU,GACvCgC,EAAgCZ,EAAkB,CAAE,GAAGA,GAAoB,CAC/E,UAAW,GACX,UAAW,GACX,MAAO,0CACP,aAAc,GAAGW,CAAU,8BAC3B,yBAA0B,GAAGA,CAAU,iCACvC,oBAAqB,GAAGA,CAAU,4BAClC,cAAe,OACf,cAAe,WACf,aAAc,GACd,6CAA8C,IAC9C,qBAAsB,GACtB,yBAA0B,GAC1B,4BAA6B,GAC7B,eAAgB,GAChB,iBAAkB,CAAC,EACnB,iBAAkB,CAAC,GAGrB,GAAI/B,GAAA,MAAAA,EAAQ,KAAM,CAChB,KAAM,CAAE,IAAKiC,EAAW,SAAUC,GAAclC,EAAO,KACvD,OAAO,OAAOgC,EAAU,CACtB,UAAAC,EACA,UAAAC,CAAA,CACD,CACH,CAGI,OAACF,EAAS,YAEHA,EAAA,UAAY,WAAa,OAAO,SAAS,MAE/CA,EAAS,YACHA,EAAA,UAAY,cAAgB,UAAUD,CAAU,GAGpDC,CACT,CAgGU,OAAOH,EAAyB,CACxC,MAAMM,EAAM,KAAK,MACjB,KAAK,MAAQN,EACT,KAAK,cACF,kBAAaA,EAAMM,CAAG,CAE/B,CAMA,IAAW,MAAoB,CAC7B,OAAO,KAAK,KACd,CA0FF,CC5QA,MAAMC,EAA6D,CAInE,EAMaC,GAA0B,CAAC,CACtC,SAAAhF,EACA,SAAA2E,CACF,IAAa,CACX,MAAMhC,EAASW,KACT2B,EAAOjE,UAAQ,MACf,CAAC+D,EAAU,MAAQA,EAAU,WAAaJ,KAC5CI,EAAU,KAAO,IAAIjB,GAAKnB,EAAQgC,CAAQ,EAC1CI,EAAU,SAAWJ,GAEhBI,EAAU,MAChB,CAAEpC,EAAQgC,CAAS,CAAC,EAEjBO,EAAW5I,KAEX,CAAE6I,EAAOC,CAAS,EAAIhF,WAAS,CAAC,GAAG6E,EAAM,KAAMA,EAAK,KAAK,EAE/DhI,mBAAU,IAAM,CACbgI,EAAc,aAAe,MAAOT,GAAS,CACxCA,IAASW,EAAM,OAGVC,EAAA,CACP,GAAGH,EACH,KAAAT,CAAA,CACD,EACQU,EAAAhH,GAAesG,EAAO,CAAE,WAAYA,EAAK,WAAY,aAAcA,EAAK,cAAiB,IAAI,CAAC,KAExG,CAAEW,EAAOF,EAAMC,EAAUE,CAAS,CAAC,EAGpCvJ,EAAA,IAACgE,GAAQ,SAAR,CACC,MAAAsF,EAEC,SAAAnF,CAAA,EAGP,EClDO,SAASqF,IAAoB,CAClC,OAAOxE,aAAWhB,EAAO,CAC3B,CCFA,MAAMuC,GAAYC,GAAe,CAC/B,QAAS,UACT,eAAgB,CAACiD,EAAS,CAAE,SAAAC,KAAe,CACnC,MAAAC,EAAc5G,GAAyB2G,EAAA,CAAuB,EACpE,OAAIC,EAAY,aAAeA,EAAY,YAAc,UAC/CF,EAAA,IAAI,gBAAiB,GAAGE,EAAY,SAAS,IAAIA,EAAY,WAAW,EAAE,EAG7EF,CACT,CACF,CAAC,EAED7C,EAAeF,GAAU,CACvB,YAAa,SACb,UAAAH,GACA,SAAU,CACR,UACA,QACA,gBACA,WACA,cACA,gBACA,eACA,gBACA,iBACA,+BACA,oCACA,SACA,eACA,2BACF,EACA,0BAA2B,GAC3B,UAAW,KAAO,GACpB,CAAC,EA+BYqD,GAAyB,CAACC,EAA2BC,IAA+E,CAC/I,GAAI,CAACA,EACI,OAAAD,EAEH,MAAE,SAAUE,EAAW,KAAMC,EAAO,YAAaC,EAAc,MAAOC,EAAQ,GAAGC,CAAA,EAASL,EAC1FM,EAA+B,GACjC,OAAAN,EAAW,WAAa,SAC1BM,EAAK,KAAUN,EAAW,SAAS,SAAS,EACxCA,EAAW,OAAS,SACtBM,EAAK,OAAYN,EAAW,SAAWA,EAAW,MAAM,aAGxDA,EAAW,cAAgB,SAC7BM,EAAK,aAAkBN,EAAW,YAAY,SAAS,GAErDA,EAAW,QACbM,EAAK,OAAY,QAEZ,CACL,aAAgB,KAChB,GAAGP,EACH,GAAGM,EACH,GAAGC,CAAA,CAEP,EAGA,SAASC,GAAa5K,EAA0C,CAC9D,MAAI,UAAOA,GAAU,UAAYA,GAAS,MAAQ,UAAWA,GACvDA,EAAM,OAASA,EAAM,MAAM,OAAS,aAK5C,CAEa,MAAA6K,GAA6B,MAA6BC,EAAmCC,IAAyM,CAC3S,MAAE,iBAAAC,EAAkB,eAAAC,CAAmB,EAAAF,EACzC,IAEF,GAAI,CAAE,KAAAG,EAAM,KAAAC,CAAK,EAAI,MAAMF,EACrB,MAAAG,EAAa,IAAI,gBACjBC,EAASD,EAAW,OACnB,KAAAF,EAAK,iBAAiB,GAAG,CAC1B,GAAAC,GAAA,MAAAA,EAAM,QAAQ,OAAO,QAAS,CAEhCC,EAAW,MAAM,EACjBJ,EAAkBM,GAAU,CAC1BA,EAAM,YAAc,GACpBA,EAAM,eAAiB,KACvBA,EAAM,iBAAmB,GAC1B,EACD,MACF,CACI,IACF,MAAMC,EAAW,MAAMzE,GAAUoE,EAAK,iBAAiB,EAAG,CACxD,GAAGH,EACH,OAAAM,CACF,EAAG,CAAE,GACL,GAAIE,EAAS,MACX,MAAMA,EAAS,MAEjBL,EAAO,MAAMK,EAAS,KACtB,MAAMC,EAAQN,EAAK,MACnBF,EAAkBM,GAAU,CACzBA,EAAM,MAA4B,KAAK,GAAGE,CAAK,EAChDF,EAAM,YAAc,GACpBA,EAAM,eAAiB,KACxB,QACKG,EAAY,CACbb,GAAaa,CAAC,GACT,cAAM,kCAAmCA,CAAC,EAEpDT,EAAkBM,GAAU,CAC1BA,EAAM,YAAc,GACpBA,EAAM,eAAiBG,CAAA,CACxB,EACD,MACF,CACF,CACAT,EAAkBM,GAAU,CAC1BA,EAAM,YAAc,GACrB,QACKG,EAAY,CACbb,GAAaa,CAAC,GACT,cAAM,kBAAmBA,CAAC,EAEpCT,EAAkBM,GAAW,CACvBA,IACFA,EAAM,YAAc,GACpBA,EAAM,eAAiBG,EACzB,CACD,EACD,MACF,CACF,EClKaC,GAAQvE,EAAK,gBAAgB,CACxC,UAAYC,IAAW,CACrB,eAAgBA,EAAM,SAAoC,CACxD,MAAQ8D,IAAU,CAChB,IAAK,qBACL,OAAQ,OACR,KAAMA,CAAA,EACR,CACD,EACD,gBAAiB9D,EAAM,MAAoC,CACzD,MAAQuE,IAAU,CAChB,IAAKA,EAAO,cAAcA,CAAI,UAAY,mBAC1C,eAAiBJ,GACR,CAAC,IAAK,GAAG,EAAE,SAASA,EAAS,MAAM,EAE5C,gBAAiB,MAAOA,GAAa,CAC/B,GAAAA,EAAS,SAAW,IACf,YAEH,MAAAK,EAAI,MAAML,EAAS,OAClB,WAAI,gBAAgBK,CAAC,CAC9B,EACA,aAAc,CAAC,CAAE,KAAM,eAAgB,GAAID,GAAQ,CAAE,KAAM,eAAgB,GAAI,OAAQ,IAEzF,MAAM,kBACJA,EACA,CAAE,gBAAAE,EAAiB,kBAAAC,GACnB,CACM,MAAE,KAAAZ,GAAS,MAAMW,EACnBX,IACI,MAAAY,EACN,IAAI,gBAAgBZ,CAAI,EAE5B,EACD,EACD,mBAAoB9D,EAAM,SAAqB,CAC7C,MAAQ2E,IAAU,CAChB,IAAK,mBACL,OAAQ,MACR,QAAS,CACP,eAAgBA,EAAK,IACvB,EACA,KAAMA,EACN,gBAAiB,SAAY,GAC7B,gBAAiB,CAAC,CAAE,KAAM,eAAgB,GAAI,OAAQ,GACxD,CACD,IAEH,iBAAkB,EACpB,CAAC,EAEY,CACX,0BAAAC,GACA,wBAAAC,GACA,4BAAAC,GACA,8BAAAC,EACF,EAAIT,GC1CSU,GAAc,IAA0B,CACnD,KAAM,CAAE,KAAAlD,EAAM,QAAAmD,CAAQ,EAAItC,GAAQ,EAC5B,CAAE,QAAAvE,GAAYvB,IACdqI,EAAWC,KACX,CAAEC,EAAUC,CAAY,EAAIjG,EAAM,SAAmC,IAAI,EAEzE,CAAE,KAAMkG,GAAiBT,GAAwB,KAAM,CAC3D,KAAM,CAAC/C,GAAQ,CAAC1D,EAAQ3D,EAAK,IAAI,EAClC,EAEK8K,EAAazH,cAAa0H,GAA+C,CAC7EH,EAAYG,EAAM,aAAa,CACjC,EAAG,CAAE,GAEL,GAAI,CAAC1D,GAAQ,CAACA,EAAK,QAAQ,mBAClB,YAGH,MAAA2D,EAAeC,GAAgB,IAAM,CACzC,OAAQA,EAAI,CACV,IAAK,UACHR,EAAS,UAAU,EACnB,MACF,IAAK,UACKD,IACR,KAEJ,CAEAI,EAAY,IAAI,GAGZM,EAAU7D,EAAK,QAErB,cAAS,MACP,WAAA3I,EAAA,IAACyM,EAAA,CACC,KAAK,QACL,gBAAc,OACd,QAASL,EAET,SAAApM,EAAA,IAAC0M,GAAA,CACC,GAAI,CACF,MAAO,GACP,OAAQ,EACV,EACA,IAAKP,GAA8B,OACnC,IAAKK,EAAQ,KACf,EACF,EACAtM,EAAA,KAACyM,GAAA,CACC,SAAAV,EACA,aAAc,CACZ,SAAU,SACV,WAAY,OACd,EACA,YAAW,GACX,gBAAiB,CACf,SAAU,MACV,WAAY,OACd,EACA,KAAM,EAAQA,EACd,QAASK,EAAY,EACrB,GAAI,CAAE,GAAI,EAAI,EACd,cAAe,CACb,MAAO,EACT,EACA,WAAY,CACV,UAAW,EACX,GAAI,CACF,SAAU,UACV,OAAQ,4CACR,GAAI,IACJ,oBAAqB,CACnB,MAAO,GACP,OAAQ,GACR,GAAI,IACJ,GAAI,CACN,EACA,WAAY,CACV,QAAS,KACT,QAAS,QACT,SAAU,WACV,IAAK,EACL,MAAO,GACP,MAAO,GACP,OAAQ,GACR,QAAS,mBACT,UAAW,iCACX,OAAQ,CACV,CACF,CACF,EAEA,UAAAtM,EAAA,IAAC4M,GAAS,SAASN,EAAY,SAAS,EACtC,SAAAtM,EAAA,IAAC6M,GAAa,SAASL,EAAQ,KAAM,UAAWA,EAAQ,kBAAoB,GAC9E,QACCM,EAAO,UACPF,GAAS,SAASN,EAAY,SAAS,EAAG,SAAQ,cACrD,CACF,GACF,EC9DMS,GAAS,CAAC,CACd,WAAYC,EACZ,MAAAC,EACA,SAAAC,EACA,MAAA1N,CACF,IAKsB,CACpB,MAAM2N,EAAiB,CACrB,MAAAF,EACA,SAAAC,EACA,IAAKD,EAAM,SACX,GAAIzN,GAAS,CAAC,GAGT,OACL,GAAG2N,EACH,WACE,OAAOH,GAAe,eACnB5G,GAAQ,WAAWF,GAAM,UAAU,QAAQ,MAAM,UAAU,GAAI,CAAC,WAAY+G,EAAM,WAAaC,EAAS,SAAW,IAAM,MAAO,GAAID,EAAM,SAAoC,mBAAUD,CAAU,GAAzCG,EAAe,GAA4B,EAEpMnN,EAAA,IAAAgN,EAAA,CAAY,GAAGG,EAAe,EAGvC,EAEMC,GAAqB,CAAC,CAC1B,eAAAC,EACA,SAAAH,EACA,YAAAI,EACA,OAAAhI,CACF,IAK6B,CACvB,IAAAiI,EA2BJ,OAzBAjI,EAAO,KAAK,CAAC,CAAE,WAAYkI,EAAwB,cAAAC,EAAe,KAAAC,KAAW,CAC3E,GAAI,CAACA,EACI,SAGT,MAAMT,EAAQU,GAAU,CACtB,cAAAF,EACA,KAAAC,GACCJ,CAAW,EAEd,OAAIL,GACEO,IAA2B,OAG/BD,EAAaR,GAAO,CAClB,WAAYS,GAA0BH,EACtC,MAAAJ,EACA,SAAAC,CAAA,CACD,GACM,IAGF,GACR,EAEIK,GACI,IAGX,EAEaK,GAAiB,CAAC,CAC7B,OAAAtI,EACA,SAAA4H,CACF,IAGwB,CACtB,MAAMW,EAA4B,GAC5B,CAAE,SAAAC,CAAa,EAAAZ,EAErB,OAAAY,EACC,MAAM,GAAG,EAAE,CAAC,EAEZ,MAAM,GAAG,EAET,OACC,CAACC,EAAyBV,EAAwBW,IAAkB,CAIlE,MAAMV,EAAeD,EAEjB,GAAGU,CAAe,IAAIV,CAAc,GADpC,IAIA,GAAAC,IAAgB,KAAOU,IAAU,EAC5B,SAGT,MAAMT,EAAaH,GAAmB,CACpC,eAAAC,EACA,SAAAH,EACA,YAAAI,EACA,OAAAhI,CAAA,CACD,EACD,OAAIiI,GACFM,EAAQ,KAAKN,CAAU,EAGlBD,IAAgB,IAAM,GAAKA,CACtC,GAEOO,CACT,EAEMI,GAAgB,CAAC3I,EAAkC4I,EAAW,KAAiC5I,EAClG,OAAO,CAAC6I,EAAKC,IAA4D,CACxE,MAAMC,EAAI,CACR,GAAGD,EACH,KAAM,GAAGF,CAAQ,IAAIE,EAAM,IAAI,IAEjC,OAAIC,EAAE,SACGF,EAAI,OAAO,CAACE,EAAG,GAAGJ,GAAcI,EAAE,SAAUA,EAAE,IAAI,CAAC,CAAC,EAEtDF,EAAI,OAAOE,CAAC,CACrB,EAAG,CAA8B,GAEtBC,GAAiB,IAAwB,CACpD,MAAMpB,EAAWqB,IACX,CAAE,OAAAjJ,GAAWE,KACZ,OAAAL,UAAQ,IAAOyI,GAAe,CACnC,OAAQK,GAAc3I,GAAU,EAAE,EAClC,SAAA4H,CACD,GAAI,CAAC5H,EAAQ4H,CAAQ,CAAC,CACzB,EAEO,SAASsB,GAAYhP,EAAsC,CAChE,MAAMiP,EAAcH,KAGlB,OAAAtO,EAAA,IAAC0O,GAAgB,IAAGlP,EAAQ,SAAAiP,EAAY,IAAI,CAAC,CAAE,WAAAlB,CAAA,IAAiBA,CAAU,CAAE,EAEhF,CCvKA,MAAMoB,EAAc,IAUdC,GAAMC,GAAOC,EAAQ,EAAE,CAC3B,0BAA2B,CACzB,SAAU,EACZ,EACA,2BAA4B,CAC1B,YAAa,EACf,CACF,CAAC,EAMKC,GAAWvP,GAAwB,OACjC,MACJ,KAAAwP,EACA,MAAA/B,EACA,SAAAC,EACA,OAAA+B,EACA,GAAG7J,CACD,EAAA5F,EAEE,CAAE,aAAAgF,CAAA,EAAiBQ,EAAA,WAAWkK,CAAW,EACzC1M,EAAcW,KACd,CAAE,QAAA8B,GAAYvB,IACdyL,EAAgBlC,EAAM,WAAa,KAAOhI,EAAQ3D,EAAK,oBAAsBA,EAAK,mBAAmB,EAGzG,OAAAtB,EAAA,IAAC4O,GAAA,CAAI,MAAK,GAAE,GAAGxJ,EACb,UAAW4J,EAAK,SAAW,CAACC,GAAU/O,EAAA,KAACkP,GAAA,CACrC,eAAc,GACd,GAAI,CACF,WAAY,IACZ,GAAI,GACJ,GAAI,GACJ,GAAI,GACJ,QAAS,QACT,WAAY,SACZ,aAAc,WACd,SAAU,SACV,QAAS,CAAE,MAAO,SAAS,CAC7B,EAEC,UAAgBD,EAAAnP,EAAA,IAACyM,EAAA,CAChB,KAAK,QACL,KAAK,QACL,UAAWpG,EACX,GAAIgJ,GAAY,KAAMpC,EAAM,QAAQ,EAAE,SACtC,GAAI,CACF,QAAS,GACT,UAAW,CAAE,QAAS,CAAE,CAC1B,EACA,MAAM,cAEN,SAAAjN,EAAA,IAACsP,GAAA,CACC,SAAS,QACT,GAAI,CACF,UAAW,eACX,GAAI,EACN,EACF,UACeC,EAAI,WAAU,OAAO,GAAI,CAAC,GAAG,GAAI,QACjDlJ,EAAW,WAAU,OAAO,GAAI,IAAImJ,EAAaR,EAAK,KAAgB/B,EAAM,MAAM,CAAC,GAAI,MAAO+B,EAAK,QAAU,WAAK,QAAQ,GAC7H,EAEC,UAAKlM,EAAAkM,EAAA,uBAAAlM,EAAU,IAAK2M,GAAS,CAI5B,GAHIA,EAAK,cAAgB,CAACxK,EAAQwK,EAAK,YAAY,GAG/CA,EAAK,oBAAsB,CAACjN,EAAY,SAASiN,EAAK,kBAAkB,EACnE,YAET,MAAMC,EAAWlL,GAAgB,CAACA,EAAaiL,CAAI,EAC7C3J,EAAK,IAAI0J,EAAaC,EAAK,KAAgBxC,EAAM,MAAM,CAAC,GAC9D,IAAI0C,EAAmBzC,EAAS,SAC5B0C,EAAa9J,EACZ2J,EAAK,gBACRE,EAAmBA,EAAiB,cACpCC,EAAaA,EAAW,eAE1B,MAAMC,GAAWD,IAAeD,EAC1BG,EAASD,IAAa,CAACZ,GAAUU,EAAiB,WAAWC,CAAU,GAAKD,EAAiB,OAAOC,EAAW,MAAM,IAAM,IACzH,OACN1P,EAAA,KAAC6P,GAAA,CAEC,UAAW/J,GACX,GAAAF,EACA,SAAA4J,EACC,GAAGD,EAAK,MACT,SAAUR,GAAUY,GAEnB,UAAAJ,EAAK,MAAQzP,MAACgQ,GACZ,UAAAP,EAAK,KACR,EACAzP,MAAC6M,IAAa,MAAO,CAAC4C,EAAK,KAAM,uBAAwB,CAAC,GAAI,CAAC,WAAYK,EAAS,OAAS,KAAM,MAAOA,EAAS,eAAiB,IAAI,GAAK,SAAAL,EAAK,QAAQ,EACzJA,EAAK,iBAAoBzP,EAAA,IAAAiQ,GAAA,CACxB,SAACjQ,MAAAyP,EAAK,gBAAL,CAAqB,KAAMA,EAAK,KAAM,MAAAxC,EAAc,SAAAC,CAAmB,GAC1E,IAbKuC,EAAK,IAcZ,EACAK,GAAUL,EAAK,UAAYzP,MAAC+O,IAA8B,KAAMU,EAAM,MAAAxC,EAAc,SAAAC,EAAoB,eAAc,GAAC,OAAM,EAApF,EAAAuC,EAAK,KAAO,GAAwE,EAC/H,EACD,EAGP,EAEMS,GAAqB,CAAC,CACxB,eAAA7C,EACA,SAAAH,EACA,YAAAI,EACA,MAAAlJ,CACJ,IAK6B,CAC3B,IAAI4K,EAA8B,KAC5B,OAAA5K,EAAA,KAAK,CAAC,CAAE,QAAS+L,EAAoB,cAAA1C,EAAe,KAAAC,EAAM,GAAGtI,KAAY,CAC7E,GAAI,CAACsI,EACI,SAGT,MAAMT,EAAQU,GAAU,CACtB,cAAAF,EACA,KAAAC,EACA,IAAK,IACJJ,CAAW,EAEd,OAAIL,EACEA,EAAM,SAAS,SAAS,MAAM,GAAK,CAACK,EAAY,SAAS,MAAM,EAE1D,GAGL6C,IAAuB,KAClB,IAGFnB,EAAA,CACL,MAAA/B,EACA,SAAAC,EACA,IAAKD,EAAM,SACX,KAAM,CACJ,QAASkD,EAAqBX,EAAaW,EAAoBlD,EAAM,MAAM,EAAII,EAC/E,cAAAI,EACA,KAAAC,EACA,GAAGtI,CACL,GAEK,IAGF,GACR,EAEM4J,CACT,EAEaoB,GAAgB,CAAC,CAC5B,MAAAhM,EACA,SAAA8I,CACF,IAGuB,CACf,MAAE,SAAAY,CAAa,EAAAZ,EACrB,IAAI8B,EAA8B,KAkClC,OAhCAlB,EACC,MAAM,GAAG,EAAE,CAAC,EAEZ,MAAM,GAAG,EAET,OACC,CAACC,EAAyBV,EAAwBW,IAAkB,CAIlE,MAAMV,EAAeD,EAEjB,GAAGU,CAAe,IAAIV,CAAc,GADpC,IAIA,GAAAC,IAAgB,KAAOU,IAAU,EAC5B,SAGT,MAAMf,EAAQiD,GAAmB,CAC/B,eAAA7C,EACA,SAAAH,EACA,YAAAI,EACA,MAAAlJ,CAAA,CACD,EACD,OAAI6I,IACK+B,EAAA/B,GAGFK,IAAgB,IAAM,GAAKA,CACtC,GAEI0B,IAAS,KACJ,KAEFhP,EAAA,IAAC+O,GAAS,IAAIC,CAAwB,EAC/C,EAEaqB,GACXjM,GACoB,CACpB,MAAM8I,EAAWqB,IACV,OAAApJ,UAAQ,IAAOiL,GAAc,CAClC,MAAOhM,GAAS,CAAC,EACjB,SAAA8I,CACD,GAAI,CAAC9I,EAAO8I,CAAQ,CAAC,CACxB,EAIO,SAASoD,GAAO9Q,EAAiC,CACtD,KAAM,CAAE,WAAA6E,EAAY,aAAAK,EAAc,MAAAN,GAAUU,GAAQ,EAC9C,CAAE,SAAAgJ,GAAaS,IACfgC,EAASF,GAAcjM,CAAK,EAElChD,YAAU,IAED,IAAM,CACPiD,GAAcK,GACHA,GACf,EAED,CAACoJ,EAAUzJ,EAAYK,CAAY,CAAC,EAEvC,MAAM8L,EAAqB,IAAM,CAC3B9L,GACWA,GACf,EAIA,OAAAxE,EAAA,KAACqP,EAAA,CACC,UAAU,MACT,GAAG/P,EACJ,GAAI,CACF,MAAO,CAAE,GAAImP,CAAY,EACzB,WAAY,CAAE,GAAI,CAAE,EACpB,GAAGnP,EAAM,EACX,EAEA,UAAAQ,EAAA,IAACyQ,GAAA,CACC,QAAQ,YACR,KAAMpM,EACN,QAASmM,EACT,WAAY,CACV,YAAa,GACb,cAAe,CACb,GAAI,CACF,IAAK,EACP,CACF,CACF,EACA,GAAI,CACF,QAAS,CAAE,GAAI,QAAS,GAAI,MAAO,EACnC,qBAAsB,CAAE,UAAW,aAAc,MAAO7B,CAAY,CACtE,EACA,WAAY,CACV,UAAW,EACX,GAAI,CACF,IAAK,EACP,CACF,EAEC,SAAA4B,CAAA,CACH,EACAvQ,EAAA,IAACyQ,GAAA,CACC,QAAQ,YACR,GAAI,CACF,QAAS,CAAE,GAAI,OAAQ,GAAI,OAAQ,EACnC,qBAAsB,CAAE,UAAW,aAAc,MAAO9B,CAAY,CACtE,EACA,WAAY,CACV,GAAI,CACF,IAAM+B,GAAWA,EAAM,OAAO,QAAQ,0BAA0B,EAAoB,SACtF,CACF,EACA,KAAI,GAEJ,gBAAC,MACC,WAAA1Q,EAAA,IAAC8M,EAAO,IACPyD,CAAA,EACH,EACF,IAGN,CC1UO,SAASI,GAAgBnR,EAA0C,CAClE,MAAE,SAAA2E,CAAa,EAAA3E,EACfoR,EAAUC,GAAiB,CAC/B,kBAAmB,GACnB,UAAW,EACZ,EAEM,OAAA5K,EAAM,aAAa9B,EAAU,CAClC,UAAWyM,EAAU,EAAI,EAC1B,CACH,CCNO,SAASE,GAAUtR,EAAoC,CACtD,MAAE,SAAA2E,CAAa,EAAA3E,EAEfoR,EAAUC,GAAiB,CAC/B,kBAAmB,GACnB,UAAW,IACZ,EAEKvE,EAAeD,GAAsC,CACzD,MAAM0E,GAAW1E,EAAM,OAAuB,eAAiB,UAAU,cACvE,uBAGE0E,GACFA,EAAO,eAAe,CACpB,SAAU,SACV,MAAO,SACR,CACH,EAIA,OAAA/Q,MAACgR,GAAK,IAAIJ,EACR,SAAA5Q,EAAA,IAACuP,EAAA,CACC,QAASjD,EACT,KAAK,eACL,GAAI,CAAE,SAAU,QAAS,OAAQ,GAAI,MAAO,EAAG,EAE9C,SAAAnI,CAAA,CAEL,GAEJ,CCXA,MAAM8M,GAAY3Q,GAAW,EAC1BoQ,IAAW,CACV,KAAM,CACJ,MAAO,OACP,UAAW,QACX,SAAU,IACV,cAAeA,EAAM,QAAQ,CAAC,EAC9B,QAAS,OACT,cAAe,QACjB,EACA,OAAQ,CACN,WAAYA,EAAM,YAAY,OAAO,CAAC,QAAS,QAAQ,EAAG,CACxD,OAAQA,EAAM,YAAY,OAAO,MACjC,SAAUA,EAAM,YAAY,SAAS,cACtC,EACD,UAAW,EACb,EACA,KAAM,CACJ,cAAe,SACf,OAAQ,EACV,EACA,QAAS,CACP,WAAY,SACZ,eAAgB,WAChB,GAAGA,EAAM,OAAO,OAClB,EACA,QAAS,CACP,OAAQ,EACR,UAAW,GACX,OAAQA,EAAM,OAAO,OAAO,CAC9B,EACA,QAAS,CACP,KAAM,EACN,QAAS,MACX,GAEJ,EAcO,SAASQ,GAAK1R,EAA+B,CAC5C,MACJ,SAAA2E,EAEA,UAAAgN,EACA,WAAAC,EACA,UAAA/J,EAEA,WAAAgK,EACA,gBAAAC,EACA,YAAaC,CACX,EAAA/R,EAEE,CAAE,QAAAgS,GAAYP,KACd,CAAE,aAAAvM,EAAc,MAAAN,CAAM,EAAIU,GAAQ,EAElC0L,EAAqB7L,cAAY,IAAM,CACvCD,GACWA,GACf,EACC,CAAEA,CAAa,CAAC,EAEnB,OACGxE,OAAAqP,EAAA,CAAI,UAAWiC,EAAQ,KACtB,UAAAxR,MAAC2Q,GACC,UAAAzQ,EAAA,KAACuR,GAAA,CACC,MAAM,UACN,UAAW,EACX,UAAWD,EAAQ,OAEnB,UAAAtR,OAACwR,GACC,WAAA1R,EAAA,IAACK,GAAA,CACC,UAAWgG,EACX,GAAG,IACH,GAAI,CAAC,GAAI,CAAE,GAAI,GAAI,GAAI,GAAI,EAE3B,SAACrG,EAAA,IAAA2H,GAAA,CAAK,UAAW6J,EAAQ,KAAK,EAChC,EACCxR,EAAA,IAAAG,EAAA,CAAW,QAAQ,KAAK,UAAU,MAAM,GAAI,CAAE,SAAU,GAAK,MAAM,UAAU,OAAM,GACjF,SACHgR,EAAA,QACCQ,GAAiB,KACpB,EACA3R,EAAA,IAAC4R,GAAA,CACC,GAAIR,GAAc/J,EAClB,MAAO,CACL,gBAAkB+J,GAAc/J,EAAa,QAAU,KACzD,EACA,cAAa,GAEb,SAACrH,EAAA,IAAA6R,GAAA,CAAe,UAAWL,EAAQ,QAAQ,EAC7C,KAEJ,QACC,MAAI,WAAWA,EAAQ,QAAS,GAAG,qBAAoB,EACvDtR,EAAA,YAAI,UAAWsR,EAAQ,QACrB,UAAcH,GAAArR,MAACsQ,GAAQ,IAAGiB,CAAY,UACtCxR,EAAU,UAAS,KAAK,UAAU,OAAO,GAAI,CAAE,MAAO,OAAQ,SAAU,EAAG,QAAS,OAAQ,cAAe,QACzG,YAAmBuR,GAAApR,EAAA,KAACE,EAAA,CACnB,UAAU,MACV,QAAS,EAET,UAAAF,EAAA,KAACE,EAAA,CACC,UAAU,MACV,GAAI,CAAE,QAAS,CAAE,GAAI,QAAU,GAAI,EAAG,GAAI,GAAI,EAC9C,QAASJ,MAAC8M,EAAQ,aAAY,WAAW,QAAQ,SAAS,SAAQ,GAAC,GAAI,CAAE,GAAI,GAAM,IAElF,UAAA1I,EAAM,QAAUpE,EAAA,IAACyM,EAAA,CAChB,QAAS+D,EACT,KAAK,QAEL,eAACsB,GAAQ,IACX,QACC,MAAI,KACP,EACA9R,MAACwO,GAAY,IAAI,CAAC,GAAI,EAAG,GAAI,GAAI,WAAY,SAAW,KAC1D,EAEC,CAACnH,GAAalD,CAAA,EACjB,GACF,EACCnE,MAAA8Q,GAAA,CAAW,GAAGtR,EACb,eAACuS,GAAI,OAAM,YAAY,KAAK,QAAQ,aAAW,qBAC7C,SAAC/R,EAAA,IAAAgS,GAAA,EAAoB,CACvB,GACF,CACF,GAEJ,CAEAd,GAAK,aAAe,CAClB,YAAa,GAEb,gBAAiB,GACjB,WAAY,EACd,EC9KO,SAASe,IAA2B,CACzC,aACGf,GAAK,WAAS,GAAC,gBAAiB,GAAO,WAAY,EAAM,EAE9D,CCcO,MAAM9M,GAAuB,CAClC,CACE,KAAM,IACN,QAAS,SACT,SAAU,CACR,CACE,KAAM,UACN,QAAS,gBACT,WAAO8N,GAAW,IAClB,aAAc5Q,EAAK,oBAAoBA,EAAK,mBAC9C,EACA,CACE,KAAM,gBACN,QAAS,gBACT,WAAO6Q,GAAiB,IACxB,aAAc7Q,EAAK,mBACrB,EACA,CACE,KAAM,YACN,QAAS,YACT,WAAO8Q,GAAe,IACtB,aAAc9Q,EAAK,mBACrB,EACA,CACE,KAAM,UACN,QAAS,UACT,WAAO+Q,GAAW,IAClB,aAAc/Q,EAAK,mBACrB,EACA,CACE,KAAM,UACN,QAAS,UACT,WAAOgR,GAAW,IAClB,aAAchR,EAAK,oBAAoBA,EAAK,mBAC9C,EACA,CACE,KAAM,UACN,QAAS,aACT,WAAOiR,GAAa,IACpB,aAAcjR,EAAK,IACrB,CACF,CACF,EACA,CACE,KAAM,cACN,QAAS,IACX,EACA,CACE,KAAM,oBACN,QAAS,YACT,SAAU,CACR,CAAE,KAAM,6BAA8B,WAAO4Q,GAAW,IAAI,QAAS,UAAW,EAChF,CACE,KAAM,0BACN,QAAS,QACT,WAAOM,GAAS,GAClB,EACA,CACE,KAAM,2BACN,QAAS,SACT,WAAOC,GAAU,GACnB,EACA,CACE,KAAM,4BACN,QAAS,UACT,WAAOC,GAAS,IAChB,SAAU,CACR,CAAE,KAAM,iCAAkC,QAAS,MAAO,EAC1D,CACE,KAAM,mCACN,QAAS,SACT,aAAcpR,EAAK,mBACrB,CACF,CACF,EACA,CAAE,KAAM,yBAA0B,WAAOqR,EAAiB,IAAI,QAAS,eAAgB,EACvF,CAAE,KAAM,2BAA4B,WAAOC,EAAU,IAAI,QAAS,QAAS,CAC7E,CACF,EACA,CACE,KAAM,gCACN,QAAS,IACX,EACA,CACE,KAAM,8BACN,QAAS,IACX,EACA,CACE,KAAM,kCACN,QAAS,UACT,SAAU,CACR,CAAE,KAAM,2CAA4C,WAAOC,GAAW,IAAI,QAAS,UAAW,EAC9F,CAAE,KAAM,0CAA2C,WAAOC,GAAQ,IAAI,QAAS,SAAU,EACzF,CAAE,KAAM,uCAAwC,WAAOH,EAAiB,IAAI,QAAS,eAAgB,EACrG,CAAE,KAAM,2CAA4C,WAAOI,GAAY,IAAI,QAAS,UAAW,EAC/F,CAAE,KAAM,yCAA0C,WAAOH,EAAU,IAAI,QAAS,QAAS,CAC3F,CACF,EACA,CACE,KAAM,+BACN,QAAS,IACX,EACA,CACE,KAAM,oCACN,QAAS,WACT,SAAU,CACR,CAAE,KAAM,6CAA8C,WAAOC,GAAW,IAAI,QAAS,UAAW,EAChG,CAAE,KAAM,yCAA0C,WAAOF,EAAiB,IAAI,QAAS,eAAgB,EACvG,CAAE,KAAM,2CAA4C,WAAOC,EAAU,IAAI,QAAS,QAAS,CAC7F,CACF,EACA,CACE,KAAM,oBACN,QAAS,IACX,EACA,CACE,KAAM,gCACN,QAAS,kBACT,SAAU,CACR,CAAE,KAAM,yCAA0C,WAAOT,GAAiB,IAAI,QAAS,UAAW,EAClG,CAAE,KAAM,qCAAsC,WAAOQ,EAAiB,IAAI,QAAS,eAAgB,EACnG,CACE,KAAM,wCACN,WAAOL,GAAW,IAClB,QAAS,UACT,aAAchR,EAAK,mBACrB,EACA,CAAE,KAAM,uCAAwC,WAAOsR,EAAU,IAAI,QAAS,QAAS,CACzF,CACF,EACA,CACE,KAAM,UACN,QAAS,aACT,SAAU,CACR,CAAE,KAAM,mBAAoB,WAAOL,GAAa,IAAI,QAAS,UAAW,EACxE,CACE,KAAM,mBACN,WAAOQ,GAAY,IACnB,QAAS,WACT,mBAAoBvR,EAAW,0BACjC,CACF,CACF,EACA,CACE,KAAM,YACN,QAAS,YACT,SAAU,CACR,CAAE,KAAM,6BAA8B,WAAOwR,GAAa,IAAI,QAAS,iBAAkB,CAC3F,CACF,EACA,CACE,KAAM,iCACN,QAAS,IACX,EACA,CACE,KAAM,yCACN,QAAS,cACT,SAAU,CACR,CAAE,KAAM,kDAAmD,WAAOA,GAAa,IAAI,QAAS,UAAW,EACvG,CAAE,KAAM,kDAAmD,WAAOL,EAAiB,IAAI,QAAS,UAAW,EAC3G,CAAE,KAAM,gDAAiD,WAAOC,EAAU,IAAI,QAAS,QAAS,CAClG,CACF,CACF,EC/KO,SAASK,GAAOzT,EAAsD,CACrE,MAAE,SAAA2E,CAAa,EAAA3E,EAGnB,OAAAQ,MAACmJ,GACC,UAAAnJ,MAACkE,GAAa,OAAAE,GACZ,eAAC8O,WAAS,UAAWlT,MAAAiS,GAAA,CAAW,GAC9B,SAAAjS,EAAA,IAACmT,GAAA,CACC,SAAU,EACV,aAAc,CACZ,SAAU,MACV,WAAY,QACd,EAEC,SAAAhP,CAAA,GAEL,EACF,CACF,EAEJ,CClBO,SAASiP,GAAY5T,EAAsC,CAC1D,MAAE,QAAAI,CAAY,EAAAJ,EAEpB,cACGO,EAAU,IAAI,CAAE,UAAW,MAC1B,YAAAC,EAAA,IAACC,EAAY,IACbD,MAACD,EAAU,UAAS,KAClB,SAAAC,EAAA,IAACG,EAAA,CACC,QAAQ,KACR,MAAM,SACN,aAAY,GACZ,GAAI,CACF,SAAU,QACV,WAAY,GACd,EAEC,SAAAP,CAAA,GAEL,CACF,GAEJ,CC7BO,SAASyT,IAAwB,CAC/B,OAAArT,EAAA,IAACoT,GAAY,SAAQ,aAAa,EAC3C,CCIO,MAAME,GAAY,IAAmB,CAC1C,KAAM,CAAE,gBAAAC,EAAiB,aAAAC,CAAa,EAAIhK,GAAQ,EAC5CiK,EAAgBF,IAChB,CAAE,MAAAjQ,GAAUI,IAEZ,CAAEgQ,EAASC,CAAW,EAAIpP,WAAS,CAACkP,CAAa,EAUvD,GARA7P,GAAe,IAAM,CACd6P,GACHD,IAAe,MAAM,IAAM,IAAI,EAAE,KAAK,IAAM,CAC1CG,EAAW,EAAK,EACjB,CACH,CACD,EAEGD,EACF,aAAQL,GAAQ,IAIlB,MAAMO,EAAwB,CAC5B,GAAKtQ,IAAUhC,EAAK,MAAQgC,IAAUhC,EAAK,MAAS,UAAY,UAChE,QAAS,IAEX,OAAKmS,IAEHG,EAAO,GAAK,kBACZA,EAAO,MAAQ,CACb,IAAK,KAIF5T,EAAA,IAAC6T,EAAU,IAAGD,CAAO,EAC9B,ECvCO,SAASE,GAAYC,EAAoB,CAC1C,IAAAC,EACJ,OAAQD,EAAM,CACZ,KAAKzS,EAAK,oBACD0S,EAAA,uBACP,MACF,KAAK1S,EAAK,oBACD0S,EAAA,uBACP,MACF,KAAK1S,EAAK,oBACD0S,EAAA,uBACP,MACF,KAAK1S,EAAK,kBACD0S,EAAA,qBACP,MACF,KAAK1S,EAAK,KACD0S,EAAA,OACP,MACF,KAAK1S,EAAK,MACD0S,EAAA,QACP,MACF,QACSA,EAAA,SACX,CACO,OAAAA,CACT,CAEO,SAASC,GAAaF,EAAYvQ,EAAgBjC,EAAU,IAAa,CAC9E,MAAM2S,EAAkB,GAExB,SAAW,CAACC,EAAO7K,CAAK,IAAK,OAAO,QAAQhI,CAAI,EAC1CyS,EAAQzK,GACJ4K,EAAA,KAAKJ,GAAYxK,CAAa,CAAC,EAIzC,IAAI8K,EAAM,KACV,OAAQ5Q,EAAI,CACV,KAAKjC,EAAU,IACP6S,EAAA,OACN,MACF,KAAK7S,EAAU,IACP6S,EAAA,QACN,KACJ,CACO,OAAAF,EAAM,KAAKE,CAAG,CACvB,CCjCa,MAAAC,EAAiB7U,GAAkD,CACxE,MAAE,aAAA+D,EAAc,eAAA+Q,CAAmB,EAAA9U,EACnC,CAAE,gBAAA+T,EAAiB,UAAAgB,EAAW,KAAA5L,GAASa,GAAQ,EAC/C0D,EAAWqB,IACX,CAAE,MAAAjL,EAAO,QAAA2B,CAAQ,EAAIvB,EAAS,EAC9B+P,EAAgBF,IAEtB,GAAIgB,IACF,aAAQlB,GAAQ,IAGlB,MAAMtR,EAAgB,GAChByS,EAAetH,EAAS,MAE9B,GAAIuG,EAAe,CACjB,MAAMhU,EAAQ,CAACwF,EAAQ1B,EAAc+Q,CAAc,EACnD,GAAI,CAAC7U,EACH,aAAQgV,GAAM,IAGV,MAAAC,EAAK/L,GAAA,MAAAA,EAAM,QAAQ,mBAAqB,OAAOA,EAAK,QAAQ,kBAAkB,KAAO,GAE3F5G,EAAM,MAAQtC,EACdsC,EAAM,QAAU,UAAU2S,CAAE,gBAAgBT,GAAa1Q,EAAc+Q,CAAc,CAAC,sBACtF,QAAQ,MAAMvS,EAAM,QAASuB,EAAO4J,EAAS,QAAQ,UAEjDsH,GAAgBA,EAAa,SACxB,OAAAxU,EAAA,IAAC6T,EAAA,CACN,GAAIW,EAAa,SACjB,QAAS,KAMf,OAAAzS,EAAM,SAAW,CACf,SAAUmL,EAAS,SACnB,OAAQA,EAAS,OACjB,KAAMA,EAAS,MAIbsH,GAAgBA,EAAa,MAC/BzS,EAAM,IAAMyS,EAAa,KAGpBxU,EAAA,IAAC6T,EAAA,CACN,GAAG,mBACH,QAAS,GACT,MAAA9R,CAAA,EAEJ,EAEAsS,EAAc,aAAe,CAC3B,aAAc/S,EAAK,oBACnB,eAAgBC,EAAU,GAC5B,EChEa,MAAAoT,GAAiBnV,GAA2C,CACvE,MAAM0N,EAAWqB,IAEX,CAAE,MAAOiG,CAAiB,EAAAtH,EAChC,MAAI,CAACsH,GAAgB,CAAEA,EAAwB,SACtCxU,EAAA,IAACoT,GAAY,SAAQ,gCAAgC,GAGvDpT,EAAA,IAACqU,EAAe,IAAG7U,CAAM,EAClC,ECLMoV,GAAeC,OAAK,IAAMC,EAAA,WAA0C,4BAAkC,iiBAAC,EACvGC,GAAYF,OAAK,IAAMC,EAAA,WAA0C,yBAA+B,+ZAAC,EACjGE,GAAeH,OAAK,IAAMC,EAAA,WAA0C,4BAAkC,ggBAAC,EACvGG,GAAiBJ,OAAK,IAAMC,EAAA,WAA0C,8BAAoC,OAAAI,KAAA,oZAAC,EAC3GC,GAAaN,OAAK,IAAMC,EAAA,WAA0C,0BAAgC,gZAAC,EACnGM,GAAeP,OAAK,IAAMC,EAAA,WAA0C,4BAAkC,+LAAC,EACvGO,GAAaR,OAAK,IAAMC,EAAA,WAA0C,0BAAgC,mmBAAC,EACnGQ,GAAUT,OAAK,IAAMC,EAAA,WAA0C,uBAA6B,ggBAAC,EAC7FS,GAAaV,OAAK,IAAMC,EAAA,WAA0C,0BAAgC,6gBAAC,EACnGU,GAAeX,OAAK,IAAMC,EAAA,WAA0C,4BAAkC,udAAC,EACvGW,GAAeZ,OAAK,IAAMC,EAAA,WAA0C,4BAAkC,uWAAC,EACvGY,GAAcb,OAAK,IAAMC,EAAA,WAA2C,2BAAiC,OAAAI,KAAA,6PAAC,EACtGS,GAAWd,OAAK,IAAMC,EAAA,WAA0C,wBAA8B,siBAAC,EAC/Fc,GAAcf,OAAK,IAAMC,EAAA,WAA0C,2BAAiC,oVAAC,EACrGe,GAAWhB,OAAK,IAAMC,EAAA,WAA0C,wBAA8B,sUAAC,EAC/FgB,GAAcjB,OAAK,IAAMC,EAAA,WAA0C,2BAAiC,mcAAC,EACrGiB,GAAgBlB,OAAK,IAAMC,EAAA,WAA0C,6BAAmC,kXAAC,EACzGkB,GAAYnB,OAAK,IAAMC,EAAA,WAA0C,yBAA+B,kYAAC,EAEjGmB,GAAkBpB,OAAK,IAAMC,EAAA,WAA0C,+BAAqC,yLAAC,EAC7GoB,GAAkBrB,OAAK,IAAMC,EAAA,WAA0C,+BAAqC,kTAAC,EAE7GqB,GAAqBtB,OAAK,IAAMC,EAAA,WAA0C,kCAA8C,sWAAC,EACzHsB,GAAkBvB,OAAK,IAAMC,EAAA,WAA0C,+BAA2C,qSAAC,EACnHuB,GAAqBxB,OAAK,IAAMC,EAAA,WAA0C,kCAA8C,uTAAC,EACzHwB,GAAuBzB,OAAK,IAAMC,EAAA,WAA0C,oCAAgD,+NAAC,EAC7HyB,GAAmB1B,OAAK,IAAMC,EAAA,WAA0C,gCAA4C,6TAAC,EACrH0B,GAA4B3B,OAAK,IAAMC,EAAA,WAA2C,6BAAyC,scAAC,EAE5H2B,GAAgB5B,OAAK,IAAMC,EAAA,WAA0C,6BAAoC,qUAAC,EAE1G4B,GAAmB7B,OAAK,IAAMC,EAAA,WAA0C,gCAAsC,yXAAC,EAC/G6B,GAAe9B,OAAK,IAAMC,EAAA,WAA2C,4BAAkC,kYAAC,EACxG8B,GAAqB/B,OAAK,IAAMC,EAAA,WAA0C,kCAAwC,6XAAC,EACnH+B,GAAiBhC,OAAK,IAAMC,EAAA,WAA2C,8BAAoC,8WAAC,EAE5GgC,GAAiBjC,OAAK,IAAMC,EAAA,WAA4C,8BAAiC,gKAAC,EAC1GiC,GAAoBlC,OAAK,IAAMC,EAAA,WAA4C,iCAAoC,mKAAC,EAChHkC,GAAqBnC,OAAK,IAAMC,EAAA,WAA4C,kCAAqC,oKAAC,EAClHmC,GAAwBpC,OAAK,IAAMC,EAAA,WAA4C,qCAAwC,uKAAC,EACxHoC,GAAarC,OAAK,IAAMC,EAAA,WAA4C,0BAA6B,4JAAC,EAElGqC,GAAkBtC,OAAK,IAAMC,EAAA,WAA4C,+BAAkC,iKAAC,EAC5GsC,GAAoBvC,OAAK,IAAMC,EAAA,WAA2C,kCAAwC,8WAAC,EAEnHuC,GAAYxC,OAAK,IAAMC,EAAA,WAAyC,yBAA2B,2JAAC,EAE5FwC,GAAgBzC,OAAK,IAAMC,EAAA,WAA0C,6BAAoC,4TAAC,EAE1GyC,GAAwB1C,OAAK,IAAMC,EAAA,WAAO,qCAAoD,EAAC,4YAC/F0C,GAAoC3C,OAAK,IAAMC,EAAA,WAAO,iDAAgE,EAAC,8TACvH2C,GAA+B5C,OAAK,IAAMC,EAAA,WAAO,4CAA2D,EAAC,ujBAC7G4C,GAAkC7C,OAAK,IAAMC,EAAA,WAAO,+CAA8D,EAAC,8bACnH6C,GAAoC9C,OAAK,IAAMC,EAAA,WAAO,iDAAgE,EAAC,4gBAUtH,SAAS8C,IAAoB,CAClC,MAAM/N,EAASgO,KAER,OACL,SAAUhO,EAAO,UAAY,GAC7B,OAAQA,EAAO,QAAU,GACzB,QAASA,EAAO,SAAW,GAC3B,eAAgBA,EAAO,gBAAkB,GACzC,WAAYA,EAAO,YAAc,GAErC,CAEO,MAAMvE,GAAyB,CACpC,CACE,KAAM,IACN,QAAStF,MAACiT,GAAO,UAAAjT,MAACyU,IAAM,GAAE,EAC1B,SAAU,CACR,CACE,KAAM,IACN,cAAUnB,GAAS,GACrB,EACA,CACE,KAAM,UACN,WAAY,UACZ,QAAUtT,MAAAqU,EAAA,CAAc,aAAc/S,EAAK,oBAAoBA,EAAK,oBAAoB,EACxF,SAAU,CACR,CAAE,MAAO,GAAM,QAAStB,MAAC4U,KAAY,CAAG,EACxC,CAAE,KAAM,MAAO,cAAUG,GAAS,IAAI,WAAY,KAAM,EACxD,CACE,KAAM,YACN,cAAUK,GAAY,IACtB,SAAU,CACR,CAAE,MAAO,GAAM,cAAUvB,EAAS,IAAG,WAAW,QAAO,EAAG,IAC1D,CAAE,KAAM,WAAY,cAAUoB,GAAc,IAAI,WAAY,IAAK,EACjE,CAAE,KAAM,SAAU,cAAUD,GAAY,IAAI,WAAY,QAAS,EACjE,CAAE,KAAM,OAAQ,cAAUG,GAAU,IAAI,WAAY,eAAgB,EACpE,CACE,KAAM,QACN,WAAY,QACZ,SAAU,CACR,CAAE,MAAO,GAAM,QAASnV,MAACqV,KAAU,CAAG,EACtC,CAAE,KAAM,MAAO,cAAUC,GAAO,IAAI,WAAY,KAAM,EACtD,CACE,KAAM,UACN,SAAU,CACR,CAAE,MAAO,GAAM,cAAUzB,EAAS,IAAG,WAAW,QAAO,EAAG,IAC1D,CAAE,KAAM,WAAY,cAAU2B,GAAY,IAAI,WAAY,IAAK,EAC/D,CAAE,KAAM,SAAU,cAAUD,GAAU,IAAI,WAAY,QAAS,EAC/D,CAAE,KAAM,WAAY,cAAUE,GAAY,IAAI,WAAY,UAAW,EACrE,CAAE,KAAM,UAAW,cAAUC,GAAW,IAAI,WAAY,SAAU,EAClE,CAAE,KAAM,OAAQ,cAAUC,GAAQ,IAAI,WAAY,eAAgB,CACpE,CACF,CACF,CACF,EACA,CACE,KAAM,SACN,WAAY,SACZ,SAAU,CACR,CAAE,MAAO,GAAM,QAAS3V,MAAC4V,KAAW,CAAG,EACvC,CAAE,KAAM,MAAO,cAAUC,GAAQ,IAAI,WAAY,KAAM,EACvD,CACE,KAAM,WACN,SAAU,CACR,CAAE,MAAO,GAAM,cAAUhC,EAAS,IAAG,WAAW,QAAO,EAAG,IAC1D,CAAE,KAAM,WAAY,cAAUkC,GAAa,IAAI,WAAY,IAAK,EAChE,CAAE,KAAM,SAAU,cAAUD,GAAW,IAAI,WAAY,QAAS,EAChE,CAAE,KAAM,OAAQ,cAAUE,GAAS,IAAI,WAAY,eAAgB,CACrE,CACF,CACF,CACF,EACA,CACE,KAAM,UACN,WAAY,UACZ,SAAU,CACR,CAAE,MAAO,GAAM,cAAUnC,EAAS,IAAG,OAAO,QAAO,EAAG,IACtD,CACE,KAAM,OACN,WAAY,OACZ,SAAU,CACR,CAAE,MAAO,GAAM,QAAS7T,MAAC0W,KAAgB,CAAG,EAC5C,CAAE,KAAM,MAAO,cAAUC,GAAY,IAAI,WAAY,KAAM,CAC7D,CACF,EACA,CACE,KAAM,SACN,WAAY,SACZ,SAAU,CACR,CAAE,MAAO,GAAM,QAAS3W,MAAC4W,KAAkB,CAAG,EAC9C,CAAE,KAAM,MAAO,cAAUC,GAAc,IAAI,WAAY,KAAM,CAC/D,CACF,CACF,CACF,CACF,CACF,CACF,CACF,EACA,CACE,KAAM,UACN,WAAY,aACZ,QAAS7W,EAAA,IAACqU,EAAc,cAAc/S,EAAK,KAAK,EAChD,SAAU,CACR,CAAE,MAAO,GAAM,cAAUuS,EAAS,IAAG,WAAW,QAAO,EAAG,IAC1D,CAAE,KAAM,WAAY,WAAY,WAAY,QAAS7T,EAAA,IAACiW,KAAe,CAAG,EACxE,CAAE,KAAM,WAAY,WAAY,WAAY,QAASjW,EAAA,IAACkW,KAAe,CAAG,CAC1E,CACF,EACA,CACE,KAAM,gBACN,WAAY,gBACZ,QAASlW,EAAA,IAACqU,EAAc,cAAc/S,EAAK,oBAAoB,EAC/D,SAAU,CACR,CAAE,MAAO,GAAM,QAAStB,MAACmW,KAAkB,CAAG,EAC9C,CAAE,KAAM,MAAO,cAAUC,GAAe,IAAI,WAAY,KAAM,EAC9D,CACE,KAAM,kBACN,SAAU,CACR,CAAE,MAAO,GAAM,cAAUvC,EAAS,IAAG,WAAW,QAAO,EAAG,IAC1D,CAAE,KAAM,WAAY,cAAUyC,GAAoB,IAAI,WAAY,IAAK,EACvE,CAAE,KAAM,SAAU,cAAUD,GAAkB,IAAI,WAAY,QAAS,EACvE,CAAE,KAAM,OAAQ,cAAUE,GAAgB,IAAI,WAAY,eAAgB,EAC1E,CAAE,KAAM,UAAW,cAAUC,GAAyB,IAAI,WAAY,SAAU,CAClF,CACF,CACF,CACF,EACA,CACE,KAAM,YACN,WAAY,YACZ,QAASxW,EAAA,IAACqU,EAAc,cAAc/S,EAAK,oBAAoB,EAC/D,SAAU,CACR,CAAE,MAAO,GAAM,cAAUuS,EAAS,IAAG,mBAAmB,QAAO,EAAG,IAClE,CACE,KAAM,mBACN,WAAY,kBACZ,SAAU,CACR,CAAE,MAAO,GAAM,QAAS7T,MAACuX,KAAqB,CAAG,EACjD,CAAE,KAAM,MAAO,cAAUE,GAA4B,IAAI,WAAY,KAAM,EAC3E,CACE,KAAM,cACN,SAAU,CACR,CAAE,MAAO,GAAM,cAAU5D,EAAS,IAAG,WAAW,QAAO,EAAG,IAC1D,CAAE,KAAM,WAAY,cAAU2D,GAAiC,IAAI,WAAY,IAAK,EACpF,CAAE,KAAM,SAAU,cAAUE,GAA+B,IAAI,WAAY,QAAS,EACpF,CAAE,KAAM,WAAY,cAAUC,GAAiC,IAAI,WAAY,UAAW,CAC5F,CACF,CACF,CACF,CACF,CACF,EACA,CACE,KAAM,UACN,WAAY,UACZ,QAAS3X,EAAA,IAACqU,EAAc,cAAc/S,EAAK,oBAAoB,EAC/D,SAAU,CACR,CAAE,MAAO,GAAM,QAAStB,MAACyW,KAAa,CAAG,CAC3C,CACF,EACA,CACE,KAAM,UACN,WAAY,UACZ,QAAUzW,MAAAqU,EAAA,CAAc,aAAc/S,EAAK,oBAAoBA,EAAK,oBAAoB,EACxF,SAAU,CACR,CAAE,MAAO,GAAM,QAAStB,MAACsX,KAAa,CAAG,CAC3C,CACF,EACA,CACE,KAAM,OACN,SAAU,CACR,CAAE,KAAM,qBAAsB,QAAStX,MAAC+W,KAAiB,CAAG,EAC5D,CAAE,KAAM,mBAAoB,QAAS/W,MAACmX,KAAe,CAAG,CAC1D,CACF,EACA,CACE,KAAM,aACN,QAASnX,EAAA,IAAC2U,GAAc,cAAcrT,EAAK,MAAM,EACjD,WAAY,KACZ,SAAU,CACR,CACE,KAAM,aACN,WAAY,KACZ,SAAU,CACR,CAAE,KAAM,eAAgB,WAAY,KAAM,QAAStB,EAAA,IAACoX,KAAkB,CAAG,CAC3E,CACF,CACF,CACF,EACA,CACE,KAAM,MACN,cAAUC,GAAU,IACpB,WAAY,IACd,EACA,CACE,KAAM,kBACN,cAAUH,GAAU,GACtB,CACF,CACF,EACA,CACE,KAAM,IACN,SAAU,CACR,CACE,KAAM,OACN,cAAUJ,GAAc,IACxB,SAAU,CACR,CAAE,KAAM,iBAAkB,QAAS9W,MAACiX,KAAqB,CAAG,EAC5D,CAAE,KAAM,sBAAuB,QAASjX,MAACgX,KAAkB,CAAG,CAChE,CACF,CACF,CACF,EACA,CAAE,KAAM,IAAK,cAAUc,GAAS,OAAO,CAAC,KAAM,YAAa,QAAS,+CAAgD,OAAQ,KAAc,CAAG,CAC/I,ECjSMpH,GAAQqH,GAAY,CACxB,WAAY,CACV,UAAW,CACT,eAAgB,CACd,KAAM,CACF,cAAe,MACnB,CACF,CACF,EACA,OAAQ,CACN,eAAgB,CACd,KAAM,CACF,cAAe,MACnB,CACF,CACF,CACF,EACA,WAAY,CACV,MAAO,CACL,SAAU,QACZ,CACF,CACF,CAAC,ECjBDC,EAAM,OAAOC,EAAe,EAC5BD,EAAM,OAAOE,EAAG,EAChBF,EAAM,OAAOG,EAAQ,EACrBH,EAAM,OAAO,OAAO,ECNpB,MAAMI,GAAqC5Y,GAAyD,CAC5F,MAAE,SAAA2E,CAAa,EAAA3E,EAEf,CAAE,aAAA6Y,GAAkBC,KAEpBC,EAAyB5T,cAAa0H,GAAiC,CACnE,cAAM,mCAAoCA,CAAK,EACvDA,EAAM,eAAe,EAEjB,UAAWA,EAAM,QAAU,OAAOA,EAAM,OAAO,OAAU,SAC9CgM,EAAAhM,EAAM,OAAO,KAAc,EAExCgM,EAAahM,EAAM,MAAe,CACpC,EACC,CAAEgM,CAAa,CAAC,EAEnBjX,mBAAU,KACD,wBAAiB,qBAAsBmX,CAAsB,EAC7D,IAAM,CACJ,2BAAoB,qBAAsBA,CAAsB,IAExE,CAAEA,CAAuB,CAAC,EAErBvY,EAAA,IAAAiG,EAAM,SAAN,CAAgB,SAAA9B,CAAS,EACnC,EAEaqU,GAAiBhZ,GAAwF,CACpH,KAAM,CAAE,SAAA2E,EAAU,GAAGiB,CAAA,EAAU5F,EAE/B,aACGiZ,GAAmB,IAAGrT,EACrB,SAACpF,EAAA,IAAAoY,GAAA,CACE,SAAAjU,CACH,EACF,EAEJ,EChBA,SAASuU,IAAsB,CAC7B,MAAMC,EAAUlT,KAEhB,OAAQzF,MAAAiG,EAAM,SAAN,CAAgB,SAAQ0S,CAAA,EAClC,CAEO,SAASC,IAAmB,CACjC,MAAMC,EAAiBlU,EAAA,YACrB,CAAClF,EAAcqZ,IAAgC,CAC7C,QAAQ,MAAM,CAAC,MAAArZ,EAAO,KAAAqZ,CAAK,EAC7B,EACA,CAAC,GAID,OAAA9Y,MAACoH,GACC,UAAApH,MAAC+Y,GAAc,OAAArI,GACb,eAACsI,GAAqB,aAAaC,GACjC,SAAA/Y,OAACgZ,GACC,WAAAlZ,EAAA,IAACC,EAAY,IACbD,EAAA,IAACwY,GAAA,CACC,kBAAmBjZ,GACnB,QAASsZ,EAET,SAAC7Y,EAAA,IAAAqF,GAAA,CAAe,OAAAC,GACd,SAAAtF,EAAA,IAACkT,YAAS,SAAUlT,MAACqT,GAAQ,IAC3B,eAAC8F,GACC,UAAAnZ,MAAC0Y,GAAM,IACT,EACF,CACF,GACF,CACF,GACF,GACF,CACF,EAEJ,CCtDO,MAAMU,GAAQC,GAAe,CAClC,QAAS,CACP,CAACC,EAAU,WAAW,EAAGA,EAAU,QACnC,CAAC3S,EAAU,WAAW,EAAGA,EAAU,QACnC,CAAC9E,EAAU,IAAI,EAAGA,EAAU,OAC9B,EAEA,WAAa0X,GACXA,IAAuB,OAAOD,EAAU,WAAY3S,EAAU,UAAU,CAC5E,CAAC,EAED6S,GAAeJ,GAAM,QAAQ,ECJ7B,MAAMK,GAAW,IAA0B,OACzC,MAAMC,GAAQ5W,EAAA,SAAS,cAAc,4BAA4B,IAAnD,YAAAA,EAAsD,aAAa,WACjF,OAAO4W,GAAgB,MACzB,EAEMC,GAAQC,GAAY,CACxB,IAAK,MACL,MAAOH,GAAS,EAChB,QAAS,EACX,CAAC,EAEKI,GAAY,SAAS,eAAe,MAAM,EAC1CC,GAAOC,GAAWF,EAAS,EACjCC,GAAK,OACF9Z,MAAAiG,EAAM,WAAN,CACC,eAAC+T,GAAc,OAAOL,GACpB,SAAA3Z,EAAA,IAACia,IAAS,MAAAb,GACR,SAAApZ,EAAA,IAAC4Y,GAAG,IACN,CACF,GACF,CACF","names":["ErrorPage","props","error","resetErrorBoundary","prefix","message","record","fbqe","Container","jsx","CssBaseline","jsxs","Typography","Stack","Button","makeStyles","createMakeStyles","useTheme","useAppDispatch","useDispatch","useAppSelector","useSelector","useDocumentTitle","title","options","ref","useRef","restoreOnUnmount","skip","useEffect","previousTitle","Role","HasRoleOp","Permission","AllPermissions","UserPrivilege","DomainPrivilege","initialState","authSlice","createSlice","state","payload","jwtDecode","identityFromClaims","permissionsFromClaims","rolesFromClaims","setCredentials","claims","upb","permissions","withPermissions","scope","i","identityClaims","crs","_a","selectCurrentCredentials","selectCurrentPermissions","selectCurrentRoles","selectCurrentIdentity","usePermissions","useRolesSelector","createSelector","roles","requiredRole","op","check","useRoles","useIdentity","useExactlyOnce","callback","isTriggered","defaultState","Context","createContext","MenuProvider","children","menus","mobileOpen","setMobileOpen","useState","checkContext","setCheckContext","toggleDrawer","useCallback","setCheckContextFunc","cf","useMenu","context","useContext","hasRole","hasRequiredRole","useMemo","other","RoutesProvider","routes","basename","useRoutesData","useRoutes","useRoutesBase","BaseLinkInner","basepath","baseTo","to","RRDLink","BaseLink","React","Link","RouterLinkInner","MuiLink","RouterLink","ConfigContext","baseQuery","fetchBaseQuery","configAPI$1","createApi","configAPI","http","build","config","useGetConfigQuery","getRuntimeConfigPath","runtimeConfig","mergeRuntimeConfig","deepmergeCustom","ConfigProvider","isLoading","isError","effectiveConfig","baseTitle","useConfig","logo","Logo","alt","src","_b","_args","_request","Auth","defaultSettings","__publicField","args","reason","request","url","UserManager","logLevel","Log","user","oldUser","appBaseURL","settings","authority","client_id","old","singleton","AuthProvider","auth","dispatch","value","setValue","useAuth","headers","getState","credentials","injectPaginationParams","params","pagination","_pageSize","_page","_maxPageSize","_count","rest","more","isAbortError","continueServerDrivenPaging","arg","api","updateCachedData","queryFulfilled","data","meta","controller","signal","draft","response","extra","e","meAPI","size","b","cacheDataLoaded","cacheEntryRemoved","file","useChangePasswordMutation","useGetProfilePhotoQuery","useLazyGetProfilePhotoQuery","useUpdateProfilePhotoMutation","AccountMenu","signout","navigate","useNavigate","anchorEl","setAnchorEl","profilePhoto","handleOpen","event","handleClick","id","profile","IconButton","Avatar","Menu","MenuItem","ListItemText","Divider","render","Breadcrumb","match","location","componentProps","getBreadcrumbMatch","currentSection","pathSection","breadcrumb","userProvidedBreadcrumb","caseSensitive","path","matchPath","getBreadcrumbs","matches","pathname","previousSection","index","flattenRoutes","basePath","arr","route","r","useBreadcrumbs","useLocation","Breadcrumbs","breadcrumbs","MuiBreadcrumbs","drawerWidth","Nav","styled","MenuList","MenuNav","menu","nested","MenuContext","canNavigateUp","ListSubheader","resolvePath","SubdirectoryArrowLeftIcon","Box","generatePath","item","disabled","locationPathname","toPathname","selected","active","ListItemButton","ListItemIcon","ListItemSecondaryAction","getDrawerMenuMatch","userProvidedDrawer","getDrawerMenu","useDrawerMenu","Drawer","drawer","handleDrawerToggle","MuiDrawer","theme","ElevationScroll","trigger","useScrollTrigger","ScrollTop","anchor","Zoom","useStyles","Page","pageTitle","isFetching","withDrawer","withBreadcrumbs","drawerProps","classes","AppBar","Toolbar","AccountMenuButton","Fade","LinearProgress","MenuIcon","Fab","KeyboardArrowUpIcon","LoadingPage","DomainsIcon","OrganizationsIcon","AccountTreeIcon","StorageIcon","LoyaltyIcon","MyAccountIcon","UsersIcon","GroupsIcon","AliasIcon","ConfigurationIcon","DeleteIcon","ProfileIcon","EditIcon","PasswordIcon","CloudSyncIcon","BaseUI","Suspense","SnackbarProvider","MessagePage","LoadPage","IndexPage","isAuthenticated","signinSilent","authenticated","loading","setLoading","target","Navigate","getRoleName","role","name","getRoleNames","names","_name","sep","PrivateOutlet","requiredRoleOp","isBlocked","currentState","Outlet","as","RequestOutlet","DomainsIndex","lazy","__vitePreload","NewDomain","DeleteDomain","DomainOverview","n","DomainConf","DomainOutlet","UsersIndex","NewUser","DeleteUser","UserOverview","UserPassword","UserProfile","UserConf","GroupsIndex","NewGroup","DeleteGroup","GroupOverview","GroupConf","AccountOverview","AccountPassword","OrganizationsIndex","NewOrganization","DeleteOrganization","OrganizationOverview","OrganizationConf","OrganizationLicensesIndex","StoragesIndex","UserAliasesIndex","NewUserAlias","DomainAliasesIndex","NewDomainAlias","CallbackOutlet","AuthorizeCallback","EndsessionCallback","SilentRefreshCallback","SigninPage","RequestCallback","RequestSetPassword","ECPOutlet","LicensesIndex","SynchronizationsIndex","OnPremisesSynchronizationOverview","NewOnPremisesSynchronization","DeleteOnPremisesSynchronization","OnPremisesSynchronizationSettings","useParams","useParamsBase","NotFound","createTheme","dayjs","localizedFormat","utc","timezone","UnhandledPromiseRejectionBoundary","showBoundary","useErrorBoundary","handlePromiseRejection","ErrorBoundary","BaseErrorBoundary","Routes","element","App","onErrorHandler","info","ThemeProvider","LocalizationProvider","AdapterDayjs","ConfirmProvider","Router","store","configureStore","manageAPI","getDefaultMiddleware","setupListeners","getNonce","nonce","cache","createCache","container","root","createRoot","CacheProvider","Provider"],"sources":["../../../src/components/ErrorPage.tsx","../../../src/app/makeStyles.ts","../../../src/app/hooks.ts","../../../src/features/auth/types/Roles.ts","../../../src/features/auth/types/Permissions.ts","../../../src/features/auth/types/Privilege.ts","../../../src/features/auth/authSlice.ts","../../../src/features/auth/hooks.ts","../../../src/providers/Menu/Context.tsx","../../../src/providers/Menu/Provider.tsx","../../../src/providers/Menu/index.ts","../../../src/providers/Routes/Context.tsx","../../../src/providers/Routes/Provider.tsx","../../../src/providers/Routes/index.ts","../../../src/components/Link.tsx","../../../src/providers/Config/Context.tsx","../../../src/features/httpConfig.ts","../../../src/features/config/configAPI.ts","../../../src/providers/Config/Provider.tsx","../../../src/providers/Config/index.ts","../../../src/e4a-logo.svg","../../../src/components/Logo.tsx","../../../src/providers/Auth/Context.tsx","../../../src/providers/Auth/Auth.ts","../../../src/providers/Auth/Provider.tsx","../../../src/providers/Auth/index.ts","../../../src/features/httpManage.ts","../../../src/features/account/meAPI.ts","../../../src/features/account/AccountMenu.tsx","../../../src/containers/Page/Breadcrumbs.tsx","../../../src/containers/Page/Drawer.tsx","../../../src/containers/Page/ElevationScroll.tsx","../../../src/containers/Page/ScrollTop.tsx","../../../src/containers/Page/Page.tsx","../../../src/containers/Page/LoadingPage.tsx","../../../src/containers/BaseUI/menus.tsx","../../../src/containers/BaseUI/BaseUI.tsx","../../../src/components/MessagePage.tsx","../../../src/components/LoadPage.tsx","../../../src/features/auth/IndexPage.tsx","../../../src/features/auth/RoleName.tsx","../../../src/features/auth/PrivateOutlet.tsx","../../../src/features/auth/RequestOutlet.tsx","../../../src/app/routes.tsx","../../../src/app/theme.ts","../../../src/app/dayjs.ts","../../../src/components/ErrorBoundary.tsx","../../../src/App.tsx","../../../src/app/store.ts","../../../src/index.tsx"],"sourcesContent":["import React from 'react';\n\nimport {\n Button,\n Container,\n CssBaseline,\n Stack,\n Typography,\n} from \"@mui/material\";\nimport {\n FetchBaseQueryError,\n} from '@reduxjs/toolkit/query'\n\nexport type ErrorPageProps = {\n error: unknown;\n resetErrorBoundary?: () => void;\n};\n\nexport function ErrorPage(props: ErrorPageProps): JSX.Element {\n const { error, resetErrorBoundary } = props;\n\n let prefix = '';\n let message = '';\n\n if (typeof error === 'string') {\n message = error;\n } else {\n const record = error as Record;\n if ('data' in record) {\n const fbqe = error as FetchBaseQueryError;\n message = fbqe.status + ' ' + JSON.stringify(fbqe.data).replace('\\\\n', '');\n } else {\n if ('status' in record) {\n prefix = ' ' + (record.status as string);\n }\n if ('message' in record) {\n message = (record.message as string);\n }\n }\n }\n\n return (\n \n \n \n \n {/* eslint-disable-next-line @typescript-eslint/no-explicit-any */}\n Error{prefix}: {message}\n \n {resetErrorBoundary && \n \n }\n \n \n );\n}\n","import { createMakeStyles } from \"tss-react\";\nimport { useTheme } from \"@mui/material/styles\";\n\nexport const { makeStyles } = createMakeStyles({ useTheme });\n","import { useRef, useEffect } from 'react';\nimport { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux';\nimport type { RootState, AppDispatch } from './store';\n\n// Use throughout your app instead of plain `useDispatch` and `useSelector`.\nexport const useAppDispatch = () => useDispatch(); /* eslint-disable-line @typescript-eslint/explicit-module-boundary-types */\nexport const useAppSelector: TypedUseSelectorHook = useSelector;\n\nexport const useDocumentTitle = (title: string, options: { skip?: boolean, restoreOnUnmount?: boolean } = {}) => {\n const ref = useRef(document.title);\n const { restoreOnUnmount, skip } = options;\n\n useEffect(() => {\n if (skip) {\n return;\n }\n document.title = title;\n if (restoreOnUnmount) {\n const previousTitle = ref.current;\n return () => {\n // Set previous title when component leaves screen.\n document.title = previousTitle;\n };\n }\n }, [ title, restoreOnUnmount, skip]);\n}\n","/*\n- System Administrator : system level - can do everything\n- Global Administrator : organization level (own organization)\n- Domain Administrator : domain level (own organization)\n- User Administrator : user level (own organization)\n- User : user level (own user)\n*/\n\nexport enum Role {\n // System level.\n SystemAdministrator = 1 << 12,\n\n // Organization level.\n GlobalAdministrator = 1 << 10,\n DomainAdministrator = 1 << 8,\n UserAdministrator = 1 << 6,\n\n // Other level.\n User = 1 << 1,\n Guest = 1 << 0,\n}\n\nexport enum HasRoleOp {\n Any = 0,\n All = 1,\n}\n\nexport type Roles = Role[];\n\nexport type RoleSet = number;\n\nexport type CurrentRoleSet = RoleSet;\n","export enum Permission {\n // Directory level.\n Directory_AccessAsUser_All = \"Directory.AccessAsUser.All\", // Access directory as the signed-in user.\n}\n\nexport type Permissions = Permission[];\n\nexport const AllPermissions = Object.values(Permission);\n","export enum UserPrivilege {\n // Keep in sync with e4a-system/doc/privilege_bits.md.\n POP3_IMAP = 1 << 0,\n SMTP = 1 << 1,\n CHGPASSWD = 1 << 2,\n NO_MAPI = 1 << 3,\n NO_AS = 1 << 4,\n NO_WEB = 1 << 5,\n USRADM = 1 << 6,\n DOMADM = 1 << 8,\n ORGADM = 1 << 10,\n SYSADM = 1 << 12,\n}\n\nexport enum DomainPrivilege {\n // Keep in sync with e4a-system/doc/privilege_bits.md.\n VERYFYD = 1 << 2,\n SUBROOT = 1 << 10,\n}\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\n\nimport jwtDecode from \"jwt-decode\";\n\nimport { RootState } from '../../app/store';\nimport { User } from '../../providers/Auth';\n\nimport { Permissions, Permission, AllPermissions } from './types/Permissions';\nimport { Role, CurrentRoleSet } from './types/Roles';\nimport { AuthClaims, IdentityClaims } from './types/Claims';\nimport { UserPrivilege } from './types/Privilege';\nimport { IIdentity } from './types/Identity';\n\nexport interface AuthState {\n credentials: {\n accessToken?: string,\n tokenType?: string,\n },\n identity: IIdentity,\n claims: Record,\n permissions: Permissions,\n roles: CurrentRoleSet,\n}\n\nconst initialState: AuthState = {\n credentials: {},\n claims: {},\n identity: {},\n permissions: [],\n roles: 0,\n};\n\nexport const authSlice = createSlice({\n name: 'auth',\n initialState,\n reducers: {\n setCredentials: (\n state,\n { payload }: PayloadAction | null>,\n ) => {\n state.credentials = payload ? {\n tokenType: payload.token_type,\n accessToken: payload.access_token,\n } : initialState.credentials;\n state.claims = payload ? jwtDecode>(payload.access_token) : initialState.claims;\n state.identity = state.claims ? identityFromClaims(state.claims[\"lg.i\"] as IdentityClaims) : initialState.identity;\n state.permissions = state.claims ? permissionsFromClaims(state.claims as AuthClaims) : initialState.permissions;\n state.roles = state.claims ? rolesFromClaims(state.claims as AuthClaims, state.claims[\"lg.i\"] as IdentityClaims) : initialState.roles;\n },\n },\n});\n\nexport const {\n setCredentials,\n} = authSlice.actions;\n\nfunction permissionsFromClaims(claims?: AuthClaims): Permissions {\n const upb = claims?.upb || -1;\n const permissions: Permissions = [];\n let withPermissions = false;\n if (claims && claims.scp) {\n for (const scope of claims.scp.split(' ')) {\n if (AllPermissions.includes(scope as Permission)) {\n permissions.push(scope as Permission)\n withPermissions = true;\n }\n }\n }\n if (upb >= 0) {\n if (upb & UserPrivilege.CHGPASSWD) {\n if (!withPermissions) {\n permissions.push(Permission.Directory_AccessAsUser_All);\n } else {\n // Remove permission, if the user does not have the required flag.\n const i = permissions.indexOf(Permission.Directory_AccessAsUser_All, 0);\n if (i > -1) {\n permissions.splice(i, 1);\n }\n }\n }\n }\n return permissions;\n}\n\nfunction rolesFromClaims(claims?: AuthClaims, identityClaims?: IdentityClaims): CurrentRoleSet {\n let upb = claims?.upb || null;\n let crs: CurrentRoleSet = 0;\n if (upb !== null) {\n // NOTE(longsleep): Support two different modes here. When the upb value\n // is 0 or a positive value, the User role is added implicitly. If it is a\n // negative value, the User role is not added implicitly. This allows great\n // flexibility for various use cases.\n if (upb >= 0) {\n // Everyone has the user role.\n crs |= Role.User;\n }\n upb = Math.abs(upb);\n if (upb & UserPrivilege.SYSADM) {\n crs |= Role.SystemAdministrator\n }\n if (upb & UserPrivilege.ORGADM) {\n crs |= Role.GlobalAdministrator;\n }\n if (upb & UserPrivilege.DOMADM) {\n crs |= Role.DomainAdministrator;\n }\n if (upb & UserPrivilege.USRADM) {\n crs |= Role.UserAdministrator;\n }\n }\n if (identityClaims && identityClaims.gu) {\n crs |= Role.Guest;\n }\n return crs;\n}\n\nfunction identityFromClaims(claims?: IdentityClaims): IIdentity {\n return {\n id: claims?.id,\n userPrincipalName: claims?.un,\n domain: claims?.un?.split('@').pop(),\n organization: undefined, // TODO(longsleep): Get own organization somehow.\n };\n}\n\nexport default authSlice.reducer;\n\nexport const selectCurrentCredentials = (state: RootState): AuthState[\"credentials\"] => state.auth.credentials;\n\nexport const selectCurrentPermissions = (state: RootState): AuthState[\"permissions\"] => state.auth.permissions;\n\nexport const selectCurrentRoles = (state: RootState): AuthState[\"roles\"] => state.auth.roles;\n\nexport const selectCurrentIdentity = (state: RootState): AuthState[\"identity\"] => state.auth.identity;\n","import { useEffect, useRef } from 'react';\nimport { createSelector } from '@reduxjs/toolkit'\nimport { useAppSelector } from '../../app/hooks';\n\nimport { Permissions } from './types/Permissions';\nimport { RoleSet, CurrentRoleSet, HasRoleOp } from './types/Roles';\nimport { IIdentity } from './types/Identity';\nimport { selectCurrentPermissions, selectCurrentRoles, selectCurrentIdentity } from './authSlice';\n\nexport const usePermissions = (): Permissions => useAppSelector(selectCurrentPermissions);\n\nconst useRolesSelector = createSelector(\n selectCurrentRoles,\n (roles: CurrentRoleSet) => ({\n roles,\n hasRole: (requiredRole: RoleSet, op = HasRoleOp.Any): boolean => {\n const check = roles & requiredRole;\n if (op === HasRoleOp.Any) {\n // Any bit is good for us.\n return check !== 0;\n } else {\n // All bits must match.\n return check === requiredRole;\n }\n },\n })\n)\n\nexport const useRoles = () => useAppSelector(useRolesSelector);\n\nexport const useIdentity = (): IIdentity => useAppSelector(selectCurrentIdentity);\n\nexport const useExactlyOnce = (callback: () => void) => {\n const isTriggered = useRef(false);\n\n useEffect(() => {\n if (!isTriggered.current) {\n callback();\n }\n return () => {\n isTriggered.current = true;\n }\n }, [ callback ]);\n}\n\nexport { Permission } from './types/Permissions';\n\nexport { Role } from './types/Roles';\n","import React, { createContext } from 'react';\n\nimport {\n useLocation,\n} from 'react-router-dom';\nimport { PathRouteProps, PathMatch } from 'react-router';\nimport {\n ListItemButtonProps,\n} from '@mui/material';\n\nimport { Permission } from '../../features/auth/types/Permissions';\nimport { RoleSet } from '../../features/auth/types/Roles';\n\ntype Location = ReturnType;\n\nexport interface SecondaryActionWithItemProps extends Pick {\n match: PathMatch,\n location: Location,\n}\n\nexport interface IMenuObject extends Omit {\n primary?: string | null,\n to?: string,\n icon?: React.ReactNode,\n props?: Partial,\n children?: IMenuObject[],\n secondaryAction?: React.ComponentType,\n requiredPermission?: Permission,\n requiredRole?: RoleSet,\n}\n\nexport type CheckFunc = (item: IMenuObject) => boolean;\n\nexport interface IContext {\n mobileOpen: boolean;\n toggleDrawer?: () => void;\n checkContext?: CheckFunc;\n setCheckContext?: (checkFunc: CheckFunc) => void;\n menus: IMenuObject[];\n}\n\nexport const defaultState: IContext = {\n mobileOpen: false,\n menus: [],\n};\n\nexport const Context = createContext(defaultState);\n\nexport default Context;\n","import React, { useState, useCallback, FC } from 'react';\n\nimport Context, { defaultState, IMenuObject, CheckFunc } from './Context';\n\nexport interface Props {\n children: React.ReactNode;\n menus?: IMenuObject[];\n}\n\nexport const MenuProvider: FC = ({\n children,\n menus,\n}: Props) => {\n const [ mobileOpen, setMobileOpen ] = useState(defaultState.mobileOpen);\n const [ checkContext, setCheckContext ] = useState(defaultState.checkContext);\n\n const toggleDrawer = useCallback(() => {\n setMobileOpen(!mobileOpen);\n }, [ setMobileOpen, mobileOpen ]);\n\n const setCheckContextFunc = useCallback((cf?: CheckFunc) => {\n if (cf) {\n setCheckContext(() => cf);\n } else {\n setCheckContext(undefined);\n }\n }, [ setCheckContext ]);\n\n return (\n \n {children}\n \n );\n}\n\nexport default MenuProvider;\n","import { useContext, useMemo } from 'react';\n\nimport { useRoles, Role } from '../../features/auth/hooks';\n\nimport Context, { IContext } from './Context';\nexport { default as Provider } from './Provider';\n\nexport function useMenu(): IContext {\n const context = useContext(Context);\n const { hasRole } = useRoles();\n\n // Menu requires to have certain roles.\n const hasRequiredRole = hasRole(\n Role.SystemAdministrator |\n Role.GlobalAdministrator |\n Role.DomainAdministrator |\n Role.UserAdministrator |\n Role.User\n );\n\n return useMemo(() => {\n const { menus, ...other } = context;\n\n return {\n menus: hasRequiredRole ? menus : [],\n ...other,\n };\n }, [ context, hasRequiredRole ]);\n}\n","import React, { createContext } from 'react';\n\nimport { RouteProps } from 'react-router';\n\nexport interface IRouteObject extends Omit {\n breadcrumb?: React.ComponentType | React.ElementType | string | null,\n children?: IRouteObject[],\n}\n\nexport interface IContext {\n routes: IRouteObject[];\n basename?: string;\n}\n\nexport const defaultState: IContext = {\n routes: [],\n basename: '',\n};\n\nexport const Context = createContext(defaultState);\n\nexport default Context;\n","import React, { FC } from 'react';\n\nimport Context, { defaultState, IRouteObject } from './Context';\n\nexport interface Props {\n children: React.ReactNode;\n routes?: IRouteObject[];\n basename?: string;\n}\n\nexport const RoutesProvider: FC = ({\n children,\n routes,\n basename,\n}: Props) => {\n\n return (\n \n {children}\n \n );\n}\n\nexport default RoutesProvider;\n","import { useContext } from 'react';\n\nimport { useRoutes as useRoutesBase, RouteObject } from 'react-router-dom';\n\nimport Context, { IContext } from './Context';\nexport { default as Provider } from './Provider';\n\nexport function useRoutesData(): IContext {\n return useContext(Context);\n}\n\nexport function useRoutes(): ReturnType {\n const { routes, basename } = useContext(Context)\n return useRoutesBase(routes as RouteObject[], basename);\n}\n","import React from 'react';\n\nimport {\n Link as MuiLink,\n LinkProps as MuiLinkProps,\n} from '@mui/material';\nimport {\n Link as RRDLink,\n LinkProps as RRDLinkProps,\n} from 'react-router-dom';\n\nimport { useRoutesData } from '../providers/Routes';\n\nfunction BaseLinkInner(props: RRDLinkProps, ref: React.Ref): JSX.Element {\n const { basename: basepath } = useRoutesData();\n\n const { to: baseTo, ...other } = props\n\n let to = baseTo.toString();\n if (to === '//') {\n // Not elegant, but for now fixes the double slash top route.\n to = '/';\n }\n if (to.charAt(0) === '/') {\n to = `${basepath}${to}`;\n }\n\n return \n}\n\nexport const BaseLink = React.forwardRef(BaseLinkInner);\n\nexport const Link = BaseLink;\n\nexport default BaseLink;\n\nexport type RouterLinkProps = MuiLinkProps & RRDLinkProps;\n\nconst RouterLinkInner = (props: RouterLinkProps, ref: React.Ref): JSX.Element => ;\n\nexport const RouterLink = React.forwardRef(RouterLinkInner);\n","import { createContext } from 'react';\n\nimport { IConfig } from '../../features/config/types/Config';\n\nexport interface IContext extends IConfig {\n baseURL: string,\n}\n\nexport const defaultState: IContext = {\n baseURL: window.location.protocol + '//' +\n window.location.host + window.location.pathname.replace(/\\/$/, ''),\n oidc: {\n // NOTE(longsleep): Support defaults from build environment, mostly useful\n // during development.\n iss: import.meta.env.VITE_CONFIG_OIDC_ISS || '',\n clientID: import.meta.env.VITE_CONFIG_OIDC_CLIENT_ID || '',\n logLevel: import.meta.env.VITE_CONFIG_OIDC_LOG_LEVEL ? parseInt(import.meta.env.VITE_CONFIG_OIDC_LOG_LEVEL, 10) : 2,\n },\n title: {\n base: 'Exchange4all Manage',\n },\n};\n\nexport const ConfigContext = createContext(defaultState);\n\nexport default ConfigContext;\n","import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';\n\nconst baseQuery = fetchBaseQuery({\n baseUrl: '',\n});\n\nexport default createApi({\n reducerPath: 'config',\n baseQuery,\n endpoints: () => ({}),\n});\n","import http from '../httpConfig';\n\nimport { IConfig } from './types/Config';\n\nexport const configAPI = http.injectEndpoints({\n endpoints: (build) => ({\n getConfig: build.query({\n query: (config) => ({\n url: `${config}`,\n }),\n })\n }),\n overrideExisting: false,\n})\n\nexport const {\n useGetConfigQuery,\n} = configAPI;\n\nexport default configAPI;\n","import React, { FC, useMemo } from 'react';\n\nimport { deepmergeCustom } from \"deepmerge-ts\";\n\nimport { useGetConfigQuery } from '../../features/config/configAPI';\nimport { IConfig } from '../../features/config/types/Config';\nimport { useDocumentTitle } from '../../app/hooks';\n\nimport Context, { IContext, defaultState } from './Context';\n\nconst getRuntimeConfigPath = (): string | undefined => {\n const runtimeConfig = document.querySelector('link[data-property=\"runtime-config\"]')?.getAttribute('href');\n return runtimeConfig ? runtimeConfig : undefined;\n}\n\nconst mergeRuntimeConfig = (config?: IConfig): IContext => {\n if (!config) {\n return defaultState;\n }\n return deepmergeCustom({\n mergeArrays: false,\n })(defaultState, config as IContext);\n}\n\nexport type Props = React.PropsWithChildren\n\nexport const ConfigProvider: FC = ({\n children,\n}: Props) => {\n const runtimeConfig = useMemo(getRuntimeConfigPath, []);\n const { data: config, isLoading, isError } = useGetConfigQuery(runtimeConfig as string, {\n skip: !runtimeConfig,\n });\n\n const effectiveConfig = useMemo(() => {\n return mergeRuntimeConfig(config);\n }, [ config ])\n\n const baseTitle = effectiveConfig?.title?.base || '';\n useDocumentTitle(baseTitle, {\n restoreOnUnmount: false,\n skip: !baseTitle,\n });\n\n if (isLoading) {\n return null;\n } else if (isError) {\n return
Failed to load runtime configuration.
;\n }\n\n return (\n \n {children}\n \n )\n};\n\nexport default ConfigProvider;\n","import { useContext } from 'react';\n\nimport Context, { IContext } from './Context';\n\nexport { default as Provider } from './Provider';\n\nexport type Config = IContext;\n\nexport function useConfig(): IContext {\n return useContext(Context);\n}\n","export default \"__VITE_ASSET__bdca88fd__\"","import React from 'react';\n\nimport { useConfig } from '../providers/Config';\n\nimport logo from '../e4a-logo.svg';\n\nexport function Logo(props: Omit, HTMLImageElement>, 'src' | 'alt'>): JSX.Element {\n const config = useConfig()\n\n const alt = config.title?.base || '';\n const src = config.logo?.url || logo;\n\n return \n}\n\nexport default Logo;\n","import { createContext } from 'react';\n\nimport { CreateSigninRequestArgs, CreateSignoutRequestArgs } from 'oidc-client-ts';\n\nimport { User } from './Auth';\n\nexport type ISigninArgs = Pick;\n\nexport type ISigninSilentArgs = Omit;\n\nexport type ISignoutArgs = Pick;\n\nexport interface IContext {\n signin: (args?: ISigninArgs) => Promise\n signinSilent: (args?: ISigninSilentArgs) => Promise\n signout: (args?: ISignoutArgs) => Promise\n removeUser: () => Promise\n withRequest: (request: string) => Promise\n isAuthenticated: () => boolean\n isBlocked: () => boolean\n processSigninResponse: () => Promise\n processSigninSilentResponse: () => Promise\n processSignoutResponse: () => Promise\n user: User | null\n}\n\nexport const defaultState: IContext = {\n signin: async (_args: ISigninArgs = {}) => undefined,\n signinSilent: async (_args: ISigninSilentArgs = {}) => null,\n signout: async (_args: ISignoutArgs = {}) => undefined,\n removeUser: async () => undefined,\n withRequest: async (_request: string) => undefined,\n isAuthenticated: () => false,\n isBlocked: () => false,\n processSigninResponse: async () => null,\n processSigninSilentResponse: async () => undefined,\n processSignoutResponse: async () => undefined,\n user: null,\n};\n\nexport const Context = createContext(defaultState);\n\nexport default Context;\n","import {\n UserManager,\n UserManagerSettings,\n Log,\n User as BaseUser,\n} from 'oidc-client-ts';\n\nimport { Config } from '../Config';\n\nimport { IContext, ISigninArgs, ISigninSilentArgs, ISignoutArgs } from './Context';\n\nexport enum CALLBACK_PATH {\n AUTHORIZE_NORMAL = \"/oidc/authorize-callback\",\n ENDSESSION_NORMAL = \"/_/oidc/endsession-callback\",\n SILENT_REFRESH = \"/_/oidc/silent-refresh\",\n}\n\nexport type User = BaseUser & {\n profile: BaseUser[\"profile\"] & {\n name: string,\n preferred_username: string,\n email: string,\n email_verified: boolean,\n },\n};\n\nexport type {\n UserManagerSettings,\n};\n\nexport class Auth implements IContext {\n private readonly _userManager: UserManager;\n private _user: User | null;\n private _blocked = false;\n private _auto = true;\n private _debug = false;\n\n public onUserChange?: (user: User | null, old: User | null) => void;\n\n private static getDefaultSettings(config?: Config, defaultSettings?: UserManagerSettings): UserManagerSettings {\n const appBaseURL = config ? config.baseURL : '';\n const settings: UserManagerSettings = defaultSettings ? { ...defaultSettings } : {\n authority: '',\n client_id: '',\n scope: 'openid profile email E4A.Manage.Default',\n redirect_uri: `${appBaseURL}/#${CALLBACK_PATH.AUTHORIZE_NORMAL}?`,\n post_logout_redirect_uri: `${appBaseURL}/#${CALLBACK_PATH.ENDSESSION_NORMAL}?`,\n silent_redirect_uri: `${appBaseURL}/#${CALLBACK_PATH.SILENT_REFRESH}?`,\n response_type: 'code',\n response_mode: 'fragment',\n loadUserInfo: true,\n accessTokenExpiringNotificationTimeInSeconds: 120,\n automaticSilentRenew: true,\n validateSubOnSilentRenew: true,\n includeIdTokenInSilentRenew: true,\n monitorSession: true,\n extraQueryParams: {},\n extraTokenParams: {},\n };\n\n if (config?.oidc) {\n const { iss: authority, clientID: client_id } = config.oidc;\n Object.assign(settings, {\n authority,\n client_id,\n });\n }\n\n // Add essential defaults when they missing.\n if (!settings.authority) {\n // Auto generate issuer with current host.\n settings.authority = 'https://' + window.location.host;\n }\n if (!settings.client_id) {\n settings.client_id = 'e4a-manage-' + encodeURI(appBaseURL);\n }\n\n return settings;\n }\n\n constructor(config?: Config, defaultSettings?: UserManagerSettings) {\n this._userManager = new UserManager(Auth.getDefaultSettings(config, defaultSettings));\n this._user = null;\n\n this._userManager.clearStaleState();\n\n const logLevel = config?.oidc?.logLevel !== undefined ? config.oidc.logLevel : Log.WARN;\n Log.setLogger(console);\n Log.setLevel(logLevel);\n this._debug = logLevel > Log.WARN;\n\n this._userManager.events.addAccessTokenExpiring(() => {\n if (this._debug) {\n console.debug('oidc token expiring');\n }\n });\n\n this._userManager.events.addAccessTokenExpired(() => {\n if (this._debug) {\n console.debug('oidc token expired');\n }\n this._userManager.removeUser();\n });\n\n this._userManager.events.addUserLoaded((user) => {\n if (this._debug) {\n console.debug('oidc user loaded', user);\n }\n const oldUser = this._user;\n if (oldUser && oldUser.profile.sub !== user.profile.sub) {\n // Huh we received another user, this should not happen so lets clear\n // our local stuff and pretend nothing happened.\n console.warn('oidc remove user as the user has changed');\n this._auto = false;\n this._userManager.removeUser();\n return;\n }\n this._auto = true;\n this.onUser(user as User);\n });\n\n this._userManager.events.addUserUnloaded(() => {\n if (this._debug) {\n console.debug('oidc user unloaded');\n }\n delete this._userManager.settings.extraQueryParams['request'];\n this.onUser(null);\n });\n\n this._userManager.events.addSilentRenewError((error) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const reason = (error as any).error as string;\n console.warn('oidc silent renew error', reason);\n switch (reason) {\n case 'interaction_required':\n case 'login_required':\n this._auto = false;\n this._userManager.removeUser();\n return;\n default:\n break;\n }\n\n setTimeout(() => {\n if (!this._auto) {\n return;\n }\n if (this._debug) {\n console.debug('oidc retrying silent renew');\n }\n this._userManager.getUser().then(user => {\n if (this._debug) {\n console.debug('oidc retrying silent renew of user', user);\n }\n if (user && (!user.expired)) {\n this._userManager.stopSilentRenew();\n this._userManager.startSilentRenew();\n } else {\n console.warn('oidc remove user as silent renew has failed to renew in time');\n this._userManager.removeUser();\n }\n });\n }, 5000);\n });\n\n this._userManager.events.addUserSignedOut(() => {\n if (this._debug) {\n console.debug('oidc user signed out');\n }\n this._auto = false;\n this.onUser(null);\n });\n }\n\n protected onUser(user: User | null): void {\n const old = this._user;\n this._user = user;\n if (this.onUserChange) {\n this.onUserChange(user, old);\n }\n }\n\n protected getUser = async (): Promise => {\n return await this._userManager.getUser() as User;\n }\n\n public get user(): User | null {\n return this._user;\n }\n\n public signin = async (args: ISigninArgs = {}): Promise => {\n if (this._blocked) {\n return;\n }\n if (this._debug) {\n console.debug('oidc signin called', args);\n }\n this._blocked = true;\n try {\n await this._userManager.signinRedirect(args);\n } catch(reason) {\n this._blocked = false;\n console.debug(`signin redirect failed : ${reason}`);\n throw reason;\n }\n }\n\n public signinSilent = async (args: ISigninSilentArgs = {}): Promise => {\n if (this._blocked || !this._auto) {\n return null;\n }\n if (this._debug) {\n console.debug('oidc signin silent called', args);\n }\n try {\n return await this._userManager.signinSilent(args) as User;\n } catch(reason) {\n console.debug(`signin silent failed: ${reason}`);\n throw reason;\n }\n }\n\n public signout = async (args: ISignoutArgs = {}): Promise => {\n if (this._debug) {\n console.debug('oidc signout called', args);\n }\n if (this._blocked) {\n return;\n }\n this._blocked = true;\n try {\n await this._userManager.signoutRedirect(args);\n } catch(reason) {\n this._blocked = false;\n console.debug(`signout redirect failed: ${reason}`);\n throw reason;\n }\n }\n\n public removeUser = (): Promise => {\n return this._userManager.removeUser();\n }\n\n public withRequest = async (request: string): Promise => {\n await this.removeUser();\n this._userManager.settings.extraQueryParams['request'] = request;\n }\n\n public isAuthenticated = (): boolean => {\n return !!this._user;\n }\n\n public isBlocked = (): boolean => {\n return !!this._blocked;\n }\n\n public processSigninResponse = async (): Promise => {\n //console.debug('oidc processSigninResponse called', window.location.href);\n return await this._userManager.signinRedirectCallback() as User;\n }\n\n public processSigninSilentResponse = async (): Promise => {\n //console.debug('oidc processSigninSilentResponse called', window.location.href);\n await this._userManager.signinSilentCallback();\n }\n\n public processSignoutResponse = async (): Promise => {\n //console.debug('oidc processSignoutResponse called', window.location.href);\n this._auto = false;\n // NOTE(longsleep): The endsession state is always returned as query, but\n // oidc-client-ts expects it to use whatever we have set in the settings. As\n // that is fragment for us, we have to fake it.\n const url = window.location.protocol + '//' + window.location.host + window.location.pathname + '#' + window.location.search.substring(1);\n const response = await this._userManager.signoutRedirectCallback(url);\n // TODO(longsleep): Investigate if we should do anything with the error fields\n // in response. Is there a standard for those?\n return response.userState;\n }\n}\n\nexport default Auth;\n","import React, { FC, useState, useEffect, useMemo } from 'react';\n\nimport { useAppDispatch } from '../../app/hooks';\nimport { setCredentials } from '../../features/auth/authSlice';\n\nimport { useConfig } from '../Config';\n\nimport Context from './Context';\nimport Auth, { UserManagerSettings } from './Auth';\n\nconst singleton: { auth?: Auth, settings?: UserManagerSettings } = {\n // NOTE(longsleep): Only initialize a single Auth per settings, ever. This\n // avoids double create when running in development mode as React triggers\n // useMemo twice in strict development mode to detect side effects.\n};\n\nexport type Props = React.PropsWithChildren<{\n settings?: UserManagerSettings,\n}>\n\nexport const AuthProvider: FC = ({\n children,\n settings,\n}: Props) => {\n const config = useConfig();\n const auth = useMemo(() => {\n if (!singleton.auth || singleton.settings !== settings) {\n singleton.auth = new Auth(config, settings);\n singleton.settings = settings;\n }\n return singleton.auth;\n }, [ config, settings ]);\n\n const dispatch = useAppDispatch();\n\n const [ value, setValue ] = useState({...auth, user: auth.user})\n\n useEffect(() => {\n (auth as Auth).onUserChange = async (user) => {\n if (user === value.user) {\n return;\n }\n setValue({\n ...auth,\n user,\n });\n dispatch(setCredentials(user ? { token_type: user.token_type, access_token: user.access_token } : null));\n };\n }, [ value, auth, dispatch, setValue ]);\n\n return (\n \n {children}\n \n )\n}\n\nexport default AuthProvider;\n","import { useContext } from 'react';\n\nimport Context, { IContext } from './Context';\nexport { default as Provider } from './Provider';\nexport type { User, UserManagerSettings } from './Auth';\n\n\nexport function useAuth(): IContext {\n return useContext(Context)\n}\n","import { BaseQueryApi } from '@reduxjs/toolkit/dist/query/baseQueryTypes';\nimport { QueryLifecycleApi } from '@reduxjs/toolkit/dist/query/endpointDefinitions';\nimport { createApi, fetchBaseQuery, FetchBaseQueryError, skipToken } from '@reduxjs/toolkit/query/react';\n\nimport { RootState } from '../app/store';\nimport { selectCurrentCredentials } from '../features/auth/authSlice';\n\nconst baseQuery = fetchBaseQuery({\n baseUrl: '/api/v1',\n prepareHeaders: (headers, { getState }) => {\n const credentials = selectCurrentCredentials(getState() as RootState);\n if (credentials.accessToken && credentials.tokenType === 'Bearer') {\n headers.set('Authorization', `${credentials.tokenType} ${credentials.accessToken}`);\n }\n\n return headers;\n },\n});\n\nexport default createApi({\n reducerPath: 'manage',\n baseQuery,\n tagTypes: [\n 'Domains',\n 'Users',\n 'Organizations',\n 'Storages',\n 'UserAliases',\n 'DomainAliases',\n 'ProfilePhoto',\n 'ProfilePhotos',\n 'SubscribedSKUs',\n 'DomainVerificationDnsRecords',\n 'DomainServiceConfigurationRecords',\n 'Groups',\n 'GroupMembers',\n 'OnPremisesSynchronization',\n ],\n refetchOnMountOrArgChange: 30,\n endpoints: () => ({}),\n});\n\nexport interface IODataValue {\n value: T,\n '@odata.count'?: number,\n}\n\nexport interface IWithNextLink {\n '@odata.nextLink'?: string,\n isStreaming: boolean,\n streamingError: Error | null,\n streamingAborted?: boolean,\n}\n\nexport interface IBaseParams {\n id: string,\n}\n\nexport interface IODataQueryParams {\n '$select'?: string,\n '$filter'?: string,\n '$search'?: string,\n}\n\nexport interface IPaginationParams {\n maxPageSize?: number,\n page?: number,\n pageSize?: number,\n count?: boolean,\n}\n\nexport const injectPaginationParams = (params: IODataQueryParams, pagination?: IPaginationParams & IODataQueryParams): Record => {\n if (!pagination) {\n return params as Record;\n }\n const { pageSize: _pageSize, page: _page, maxPageSize: _maxPageSize, count: _count, ...rest } = pagination;\n const more: Record = {};\n if (pagination.pageSize !== undefined) {\n more['$top'] = pagination.pageSize.toString();\n if (pagination.page !== undefined) {\n more['$skip'] = (pagination.pageSize * pagination.page).toString()\n }\n }\n if (pagination.maxPageSize !== undefined) {\n more['$maxpagesize'] = pagination.maxPageSize.toString();\n }\n if (pagination.count) {\n more['$count'] = 'true';\n }\n return {\n '$maxpagesize': '25',\n ...params,\n ...rest,\n ...more,\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction isAbortError(error: any): error is FetchBaseQueryError {\n if (typeof error === 'object' && error != null && 'error' in error ) {\n if (error.error && error.error.name === 'AbortError') {\n return true;\n }\n }\n return false;\n}\n\nexport const continueServerDrivenPaging = async (arg: QueryArg & IPaginationParams, api: QueryLifecycleApi, IODataValue> & IWithNextLink, string> & BaseQueryApi): Promise => {\n const { updateCachedData, queryFulfilled } = api;\n try {\n // eslint-disable-next-line no-var\n var { data, meta } = await queryFulfilled;\n const controller = new AbortController()\n const signal = controller.signal;\n while (data['@odata.nextLink']) {\n if (meta?.request.signal.aborted) {\n // Abort, when initial request is aborted.\n controller.abort();\n updateCachedData((draft) => {\n draft.isStreaming = false;\n draft.streamingError = null;\n draft.streamingAborted = true;\n });\n return;\n }\n try {\n const response = await baseQuery(data['@odata.nextLink'], {\n ...api,\n signal,\n }, {});\n if (response.error) {\n throw response.error;\n }\n data = await response.data as IODataValue> & IWithNextLink;\n const extra = data.value;\n updateCachedData((draft) => {\n (draft.value as Array).push(...extra);\n draft.isStreaming = true;\n draft.streamingError = null;\n });\n } catch(e: unknown) {\n if (!isAbortError(e)) {\n console.error('failed to fetch @odata.nextLink', e);\n }\n updateCachedData((draft) => {\n draft.isStreaming = false;\n draft.streamingError = e as Error;\n });\n return;\n }\n }\n updateCachedData((draft) => {\n draft.isStreaming = false;\n });\n } catch(e: unknown) {\n if (!isAbortError(e)) {\n console.error('failed to fetch', e)\n }\n updateCachedData((draft?) => {\n if (draft) {\n draft.isStreaming = false;\n draft.streamingError = e as Error;\n }\n });\n return;\n }\n}\n\nexport {\n skipToken,\n}\n","import http from '../httpManage';\n\nimport { IChangePasswordData } from './types/Me';\n\nexport const meAPI = http.injectEndpoints({\n endpoints: (build) => ({\n changePassword: build.mutation({\n query: (data) => ({\n url: `/me/changePassword`,\n method: 'POST',\n body: data,\n }),\n }),\n getProfilePhoto: build.query({\n query: (size) => ({\n url: size ? `/me/photos/${size}/$value` : `/me/photo/$value`,\n validateStatus: (response) => {\n return [200, 404].includes(response.status);\n },\n responseHandler: async (response) => {\n if (response.status === 404) {\n return null;\n }\n const b = await response.blob();\n return URL.createObjectURL(b);\n },\n providesTags: [{ type: 'ProfilePhoto', id: size }, { type: 'ProfilePhoto', id: 'LIST' }],\n }),\n async onCacheEntryAdded(\n size,\n { cacheDataLoaded, cacheEntryRemoved }\n ) {\n const { data } = await cacheDataLoaded;\n if (data) {\n await cacheEntryRemoved;\n URL.revokeObjectURL(data);\n }\n },\n }),\n updateProfilePhoto: build.mutation({\n query: (file) => ({\n url: `/me/photo/$value`,\n method: 'PUT',\n headers: {\n 'Content-Type': file.type,\n },\n body: file,\n responseHandler: async () => undefined,\n invalidatesTags: [{ type: 'ProfilePhoto', id: 'LIST' }],\n }),\n }),\n }),\n overrideExisting: false,\n})\n\nexport const {\n useChangePasswordMutation,\n useGetProfilePhotoQuery,\n useLazyGetProfilePhotoQuery,\n useUpdateProfilePhotoMutation,\n} = meAPI;\n\nexport default meAPI;\n","import React, { useCallback } from 'react';\n\nimport {\n Avatar,\n IconButton,\n Menu,\n MenuItem,\n Divider,\n ListItemText,\n} from '@mui/material';\n\nimport { useNavigate } from 'react-router-dom';\n\nimport { useAuth } from '../../providers/Auth';\nimport { useRoles, Role } from '../auth/hooks';\n\nimport { useGetProfilePhotoQuery } from '../account/meAPI';\n\nexport const AccountMenu = (): JSX.Element | null => {\n const { user, signout } = useAuth();\n const { hasRole } = useRoles();\n const navigate = useNavigate();\n const [ anchorEl, setAnchorEl ] = React.useState(null);\n\n const { data: profilePhoto } = useGetProfilePhotoQuery(null, {\n skip: !user || !hasRole(Role.User),\n });\n\n const handleOpen = useCallback((event: React.MouseEvent) => {\n setAnchorEl(event.currentTarget);\n }, []);\n\n if (!user || !user.profile.preferred_username) {\n return null;\n }\n\n const handleClick = (id?: string) => () => {\n switch (id) {\n case 'account':\n navigate('/account');\n break;\n case 'signout':\n signout();\n break;\n default:\n }\n\n setAnchorEl(null);\n }\n\n const profile = user.profile;\n\n return (
\n \n \n \n \n \n \n \n \n Sign out\n \n
);\n}\n\nexport default AccountMenu;\n","/**\n * Based on https://github.com/icd2k3/use-react-router-breadcrumbs\n *\n * MIT License\n *\n * Copyright (c) 2018 Justin Schrader\n * Copyright (c) 2021 Kopano b.v.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n */\n\nimport React, { useMemo } from 'react';\n\nimport {\n Breadcrumbs as MuiBreadcrumbs,\n BreadcrumbsProps,\n Link as MuiLink,\n} from '@mui/material';\nimport {\n useLocation,\n matchPath,\n} from 'react-router-dom';\nimport { PathMatch } from 'react-router';\n\nimport { useRoutesData } from '../../providers/Routes';\nimport { IRouteObject } from '../../providers/Routes/Context';\nimport { Link } from '../../components/Link';\n\ntype Location = ReturnType;\n\nexport type BreadcrumbsRouteObject = IRouteObject;\n\nexport interface BreadcrumbData {\n match: PathMatch,\n location: Location,\n key: string,\n breadcrumb: React.ReactNode,\n}\n\nconst render = ({\n breadcrumb: Breadcrumb,\n match,\n location,\n props,\n}: {\n breadcrumb: React.ComponentType | string,\n match: PathMatch,\n location: Location,\n props?: { [x: string]: unknown },\n}): BreadcrumbData => {\n const componentProps = {\n match,\n location,\n key: match.pathname,\n ...(props || {}),\n };\n\n return {\n ...componentProps,\n breadcrumb:\n typeof Breadcrumb === 'string' ? (\n {decodeURI(Breadcrumb)}\n ) : (\n \n ),\n };\n}\n\nconst getBreadcrumbMatch = ({\n currentSection,\n location,\n pathSection,\n routes,\n}: {\n currentSection: string,\n location: Location,\n pathSection: string,\n routes: BreadcrumbsRouteObject[],\n}): BreadcrumbData | null => {\n let breadcrumb: BreadcrumbData | undefined;\n\n routes.some(({ breadcrumb: userProvidedBreadcrumb, caseSensitive, path }) => {\n if (!path) {\n return false;\n }\n\n const match = matchPath({\n caseSensitive,\n path,\n }, pathSection)\n\n if (match) {\n if (userProvidedBreadcrumb === null) {\n return true;\n }\n breadcrumb = render({\n breadcrumb: userProvidedBreadcrumb || currentSection,\n match,\n location,\n })\n return true;\n }\n\n return false;\n });\n\n if (!breadcrumb) {\n return null;\n }\n return breadcrumb;\n}\n\nexport const getBreadcrumbs = ({\n routes,\n location,\n}: {\n routes: BreadcrumbsRouteObject[],\n location: Location,\n}): BreadcrumbData[] => {\n const matches: BreadcrumbData[] = [];\n const { pathname } = location;\n\n pathname\n .split('?')[0]\n // Split pathname into sections.\n .split('/')\n // Reduce over the sections and call `getBreadcrumbMatch()` for each section.\n .reduce(\n (previousSection: string, currentSection: string, index: number) => {\n // Combine the last route section with the currentSection.\n // For example, `pathname = /1/2/3` results in match checks for\n // `/1`, `/1/2`, `/1/2/3`.\n const pathSection = !currentSection\n ? '/'\n : `${previousSection}/${currentSection}`;\n\n // Ignore trailing slash or double slashes in the URL\n if (pathSection === '/' && index !== 0) {\n return '';\n }\n\n const breadcrumb = getBreadcrumbMatch({\n currentSection,\n location,\n pathSection,\n routes,\n });\n if (breadcrumb) {\n matches.push(breadcrumb);\n }\n\n return pathSection === '/' ? '' : pathSection;\n });\n\n return matches;\n}\n\nconst flattenRoutes = (routes: BreadcrumbsRouteObject[], basePath = ''): BreadcrumbsRouteObject[] => routes\n .reduce((arr, route: BreadcrumbsRouteObject): BreadcrumbsRouteObject[] => {\n const r = {\n ...route,\n path: `${basePath}/${route.path}`,\n }\n if (r.children) {\n return arr.concat([r, ...flattenRoutes(r.children, r.path)]);\n }\n return arr.concat(r);\n }, [] as BreadcrumbsRouteObject[]);\n\nexport const useBreadcrumbs = (): BreadcrumbData[] => {\n const location = useLocation();\n const { routes } = useRoutesData();\n return useMemo(() => (getBreadcrumbs({\n routes: flattenRoutes(routes || []),\n location,\n })), [routes, location]);\n};\n\nexport function Breadcrumbs(props: BreadcrumbsProps): JSX.Element {\n const breadcrumbs = useBreadcrumbs();\n\n return (\n {breadcrumbs.map(({ breadcrumb }) => breadcrumb)}\n )\n}\n\nexport default Breadcrumbs;\n","import React, { useMemo, useEffect, useContext, CSSProperties } from 'react';\n\nimport {\n Box,\n BoxProps,\n Divider,\n Drawer as MuiDrawer,\n IconButton,\n MenuList,\n MenuListProps,\n ListItemButton,\n ListItemIcon,\n ListItemSecondaryAction,\n ListItemText,\n ListSubheader,\n} from '@mui/material';\nimport { styled } from '@mui/material/styles';\nimport SubdirectoryArrowLeftIcon from '@mui/icons-material/SubdirectoryArrowLeft';\n\nimport {\n useLocation,\n matchPath,\n} from 'react-router-dom';\nimport { PathMatch, generatePath, resolvePath } from 'react-router';\n\nimport { BaseLink, RouterLink } from '../../components/Link';\nimport { useMenu } from '../../providers/Menu';\nimport { IMenuObject, Context as MenuContext } from '../../providers/Menu/Context';\nimport { usePermissions, useRoles, Role } from '../../features/auth/hooks';\n\ntype Location = ReturnType;\n\nexport type DrawerMenuObject = IMenuObject;\n\nconst drawerWidth = 220;\n\n\nexport interface DrawerMenuData {\n match: PathMatch,\n location: Location,\n key: string | null,\n menu: DrawerMenuObject,\n}\n\nconst Nav = styled(MenuList)({\n '& .MuiListItemIcon-root': {\n minWidth: 36,\n },\n '& .MuiListItemText-inset': {\n paddingLeft: 36,\n },\n});\n\ninterface MenuNavProps extends Omit, Omit {\n nested?: boolean,\n}\n\nconst MenuNav = (props: MenuNavProps) => {\n const {\n menu,\n match,\n location,\n nested,\n ...other\n } = props;\n\n const { checkContext } = useContext(MenuContext);\n const permissions = usePermissions();\n const { hasRole } = useRoles();\n const canNavigateUp = match.pathname !== '/' && hasRole(Role.GlobalAdministrator | Role.SystemAdministrator);\n\n return (\n \n );\n}\n\nconst getDrawerMenuMatch = ({\n currentSection,\n location,\n pathSection,\n menus,\n}: {\n currentSection: string,\n location: Location,\n pathSection: string,\n menus: DrawerMenuObject[],\n}): DrawerMenuData | null => {\n let menu: DrawerMenuData | null = null;\n menus.some(({ primary: userProvidedDrawer, caseSensitive, path, ...other }) => {\n if (!path) {\n return false;\n }\n\n const match = matchPath({\n caseSensitive,\n path,\n end: false,\n }, pathSection);\n\n if (match) {\n if (match.pathname.endsWith('/new') && !pathSection.endsWith('/new')) {\n // Skip premature match for /new locations when the actual requested path is not ending with /new.\n return false;\n }\n\n if (userProvidedDrawer === null) {\n return true;\n }\n\n menu = {\n match,\n location,\n key: match.pathname,\n menu: {\n primary: userProvidedDrawer ? generatePath(userProvidedDrawer, match.params) : currentSection,\n caseSensitive,\n path,\n ...other,\n },\n };\n return false;\n }\n\n return false;\n });\n\n return menu;\n}\n\nexport const getDrawerMenu = ({\n menus,\n location,\n}: {\n menus: DrawerMenuObject[],\n location: Location,\n}): React.ReactNode => {\n const { pathname } = location;\n let menu: DrawerMenuData | null = null;\n\n pathname\n .split('?')[0]\n // Split pathname into sections.\n .split('/')\n // Reduce over the sections and call `getBreadcrumbMatch()` for each section.\n .reduce(\n (previousSection: string, currentSection: string, index: number) => {\n // Combine the last route section with the currentSection.\n // For example, `pathname = /1/2/3` results in match checks for\n // `/1`, `/1/2`, `/1/2/3`.\n const pathSection = !currentSection\n ? '/'\n : `${previousSection}/${currentSection}`;\n\n // Ignore trailing slash or double slashes in the URL\n if (pathSection === '/' && index !== 0) {\n return '';\n }\n\n const match = getDrawerMenuMatch({\n currentSection,\n location,\n pathSection,\n menus,\n });\n if (match) {\n menu = match;\n }\n\n return pathSection === '/' ? '' : pathSection;\n });\n\n if (menu === null) {\n return null;\n }\n return ;\n}\n\nexport const useDrawerMenu = (\n menus?: DrawerMenuObject[],\n): React.ReactNode => {\n const location = useLocation();\n return useMemo(() => (getDrawerMenu({\n menus: menus || [],\n location,\n })), [menus, location]);\n}\n\nexport type DrawerProps = BoxProps;\n\nexport function Drawer(props: DrawerProps): JSX.Element {\n const { mobileOpen, toggleDrawer, menus } = useMenu();\n const { pathname } = useLocation();\n const drawer = useDrawerMenu(menus);\n\n useEffect(() => {\n // Auto close mobile drawer after navigation.\n return () => {\n if (mobileOpen && toggleDrawer) {\n toggleDrawer();\n }\n }\n }, [pathname, mobileOpen, toggleDrawer])\n\n const handleDrawerToggle = () => {\n if (toggleDrawer) {\n toggleDrawer();\n }\n }\n\n return (\n \n \n {drawer}\n \n (theme.mixins.toolbar['@media (min-width:600px)'] as CSSProperties).minHeight,\n },\n }}\n open\n >\n
\n \n {drawer}\n
\n \n \n )\n}\n\nexport default Drawer;\n","import React from 'react';\n\nimport useScrollTrigger from '@mui/material/useScrollTrigger';\n\nexport type ElevationScrollProps = {\n children: React.ReactElement;\n};\n\nexport function ElevationScroll(props: ElevationScrollProps): JSX.Element {\n const { children } = props;\n const trigger = useScrollTrigger({\n disableHysteresis: true,\n threshold: 0,\n });\n\n return React.cloneElement(children, {\n elevation: trigger ? 2 : 0,\n });\n}\n\nexport default ElevationScroll;\n","import React, { MouseEvent } from 'react';\n\nimport {\n Box,\n Zoom,\n} from '@mui/material';\nimport useScrollTrigger from '@mui/material/useScrollTrigger';\n\nexport type ScrollTopProps = {\n children: React.ReactElement;\n};\n\nexport function ScrollTop(props: ScrollTopProps): JSX.Element {\n const { children } = props;\n\n const trigger = useScrollTrigger({\n disableHysteresis: true,\n threshold: 100,\n });\n\n const handleClick = (event: MouseEvent) => {\n const anchor = ((event.target as HTMLElement).ownerDocument || document).querySelector(\n '#back-to-top-anchor',\n );\n\n if (anchor) {\n anchor.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n });\n }\n };\n\n return (\n \n \n {children}\n \n \n );\n}\n\nexport default ScrollTop;\n","import React, { useCallback } from 'react';\n\nimport {\n AppBar,\n Box,\n Button,\n Container,\n Divider,\n Fab,\n Fade,\n IconButton,\n LinearProgress,\n Stack,\n Toolbar,\n Typography,\n} from '@mui/material';\nimport KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp';\nimport MenuIcon from '@mui/icons-material/Menu';\n\nimport { makeStyles } from '../../app/makeStyles';\n\nimport { useMenu } from '../../providers/Menu';\n\nimport { RouterLink } from '../../components/Link';\nimport Logo from '../../components/Logo';\n\nimport { AccountMenu as AccountMenuButton } from '../../features/account/AccountMenu';\n\nimport { Breadcrumbs } from './Breadcrumbs';\nimport { Drawer, DrawerProps } from './Drawer';\nimport { ElevationScroll } from './ElevationScroll';\nimport { ScrollTop } from './ScrollTop';\n\nconst useStyles = makeStyles()(\n (theme) => ({\n root: {\n width: '100%',\n minHeight: '100vh',\n minWidth: 360,\n paddingBottom: theme.spacing(6),\n display: 'flex',\n flexDirection: 'column',\n },\n appBar: {\n transition: theme.transitions.create(['width', 'margin'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n maxHeight: 64,\n },\n logo: {\n verticalAlign: 'middle',\n height: 28,\n },\n toolbar: {\n alignItems: 'center',\n justifyContent: 'flex-end',\n ...theme.mixins.toolbar as Record,\n },\n loading: {\n height: 1,\n marginTop: -1,\n zIndex: theme.zIndex.drawer+2,\n },\n content: {\n flex: 1,\n display: 'flex',\n },\n }),\n);\n\nexport type PageProps = {\n children?: React.ReactNode;\n\n pageTitle?: string;\n isFetching?: boolean;\n isLoading?: boolean;\n\n withDrawer?: boolean;\n withBreadcrumbs?: boolean;\n DrawerProps?: DrawerProps;\n};\n\nexport function Page(props: PageProps): JSX.Element {\n const {\n children,\n\n pageTitle,\n isFetching,\n isLoading,\n\n withDrawer,\n withBreadcrumbs,\n DrawerProps: drawerProps,\n } = props;\n\n const { classes } = useStyles();\n const { toggleDrawer, menus } = useMenu();\n\n const handleDrawerToggle = useCallback(() => {\n if (toggleDrawer) {\n toggleDrawer();\n }\n }, [ toggleDrawer ]);\n\n return (\n \n \n \n \n \n \n \n \n {pageTitle}\n \n \n \n \n \n \n \n \n
\n
\n {withDrawer && }\n \n {withBreadcrumbs && \n }\n >\n {menus.length && \n \n }\n
\n \n \n }\n\n {!isLoading && children}\n
\n
\n \n \n \n \n \n \n )\n}\n\nPage.defaultProps = {\n headerTitle: '',\n\n withBreadcrumbs: true,\n withDrawer: true,\n}\n\nexport default Page;\n","import React from 'react';\n\nimport { Page } from './Page';\n\nexport function LoadingPage(): JSX.Element {\n return (\n \n )\n}\n\nexport default LoadingPage;\n","import React from \"react\";\n\nimport DomainsIcon from '@mui/icons-material/AlternateEmail';\nimport OrganizationsIcon from '@mui/icons-material/Business';\nimport MyAccountIcon from '@mui/icons-material/ManageAccounts';\nimport UsersIcon from '@mui/icons-material/PeopleOutlineOutlined';\nimport ConfigurationIcon from '@mui/icons-material/SettingsApplicationsOutlined';\nimport DeleteIcon from '@mui/icons-material/DeleteOutline';\nimport PasswordIcon from '@mui/icons-material/Password';\nimport ProfileIcon from '@mui/icons-material/AccountBoxOutlined';\nimport EditIcon from '@mui/icons-material/EditOutlined';\nimport StorageIcon from '@mui/icons-material/Storage';\nimport AliasIcon from '@mui/icons-material/MailOutline';\nimport LoyaltyIcon from '@mui/icons-material/Loyalty';\nimport GroupsIcon from '@mui/icons-material/GroupsOutlined';\nimport AccountTreeIcon from '@mui/icons-material/AccountTree';\nimport CloudSyncIcon from '@mui/icons-material/CloudSync';\n\nimport { IMenuObject } from '../../providers/Menu/Context';\nimport { Permission } from \"../../features/auth/types/Permissions\";\nimport { Role } from \"../../features/auth/types/Roles\";\n\nexport const menus: IMenuObject[] = [\n {\n path: \"/\",\n primary: \"System\",\n children: [\n {\n path: \"domains\",\n primary: \"Email domains\",\n icon: ,\n requiredRole: Role.SystemAdministrator|Role.GlobalAdministrator,\n },\n {\n path: \"organizations\",\n primary: \"Organizations\",\n icon: ,\n requiredRole: Role.SystemAdministrator,\n },\n {\n path: \"directory\",\n primary: \"Directory\",\n icon: ,\n requiredRole: Role.SystemAdministrator,\n },\n {\n path: \"storage\",\n primary: \"Storage\",\n icon: ,\n requiredRole: Role.SystemAdministrator,\n },\n {\n path: \"license\",\n primary: \"License\",\n icon: ,\n requiredRole: Role.SystemAdministrator|Role.GlobalAdministrator,\n },\n {\n path: \"account\",\n primary: \"My account\",\n icon: ,\n requiredRole: Role.User,\n },\n ],\n },\n {\n path: \"domains/new\",\n primary: null,\n },\n {\n path: \"domains/:domainID\",\n primary: \":domainID\",\n children: [\n { path: \"domains/:domainID/overview\", icon: , primary: \"Overview\" },\n {\n path: \"domains/:domainID/users\",\n primary: \"Users\",\n icon: ,\n },\n {\n path: \"domains/:domainID/groups\",\n primary: \"Groups\",\n icon: ,\n },\n {\n path: \"domains/:domainID/aliases\",\n primary: \"Aliases\",\n icon: ,\n children: [\n { path: \"domains/:domainID/aliases/user\", primary: \"User\" },\n {\n path: \"domains/:domainID/aliases/domain\",\n primary: \"Domain\",\n requiredRole: Role.SystemAdministrator, // TODO(longsleep): Make available for global admins once backend supports it.\n },\n ],\n },\n { path: \"domains/:domainID/conf\", icon: , primary: \"Configuration\" },\n { path: \"domains/:domainID/delete\", icon: , primary: \"Delete\" },\n ],\n },\n {\n path: \"domains/:domainID/aliases/new\",\n primary: null,\n },\n {\n path: \"domains/:domainID/users/new\",\n primary: null,\n },\n {\n path: \"domains/:domainID/users/:userID\",\n primary: \":userID\",\n children: [\n { path: \"domains/:domainID/users/:userID/overview\", icon: , primary: \"Overview\" },\n { path: \"domains/:domainID/users/:userID/profile\", icon: , primary: \"Profile\" },\n { path: \"domains/:domainID/users/:userID/conf\", icon: , primary: \"Configuration\" },\n { path: \"domains/:domainID/users/:userID/password\", icon: , primary: \"Password\" },\n { path: \"domains/:domainID/users/:userID/delete\", icon: , primary: \"Delete\" },\n ],\n },\n {\n path: \"domains/:domainID/groups/new\",\n primary: null,\n },\n {\n path: \"domains/:domainID/groups/:groupID\",\n primary: \":groupID\",\n children: [\n { path: \"domains/:domainID/groups/:groupID/overview\", icon: , primary: \"Overview\" },\n { path: \"domains/:domainID/groups/:groupID/conf\", icon: , primary: \"Configuration\" },\n { path: \"domains/:domainID/groups/:groupID/delete\", icon: , primary: \"Delete\" },\n ],\n },\n {\n path: \"organizations/new\",\n primary: null,\n },\n {\n path: \"organizations/:organizationID\",\n primary: \":organizationID\",\n children: [\n { path: \"organizations/:organizationID/overview\", icon: , primary: \"Overview\" },\n { path: \"organizations/:organizationID/conf\", icon: , primary: \"Configuration\" },\n {\n path: \"organizations/:organizationID/license\",\n icon: ,\n primary: \"License\",\n requiredRole: Role.SystemAdministrator,\n },\n { path: \"organizations/:organizationID/delete\", icon: , primary: \"Delete\" },\n ],\n },\n {\n path: \"account\",\n primary: \"My account\",\n children: [\n { path: \"account/overview\", icon: , primary: \"Overview\" },\n {\n path: \"account/password\",\n icon: ,\n primary: \"Password\",\n requiredPermission: Permission.Directory_AccessAsUser_All,\n },\n ],\n },\n {\n path: \"directory\",\n primary: \"Directory\",\n children: [\n { path: \"directory/synchronizations\", icon: , primary: \"Synchronization\" },\n ],\n },\n {\n path: \"directory/synchronizations/new\",\n primary: null,\n },\n {\n path: \"directory/synchronizations/:providerID\",\n primary: \":providerID\",\n children: [\n { path: \"directory/synchronizations/:providerID/overview\", icon: , primary: \"Overview\" },\n { path: \"directory/synchronizations/:providerID/settings\", icon: , primary: \"Settings\" },\n { path: \"directory/synchronizations/:providerID/delete\", icon: , primary: \"Delete\" },\n ],\n },\n];\n\nexport default menus;\n","import React, { Suspense } from \"react\";\n\nimport { SnackbarProvider } from 'notistack';\n\nimport { LoadingPage } from '../Page/LoadingPage';\nimport { Provider as MenuProvider } from '../../providers/Menu';\nimport { Provider as AuthProvider } from '../../providers/Auth';\n\nimport menus from './menus';\n\nexport function BaseUI(props: React.PropsWithChildren): JSX.Element {\n const { children } = props;\n\n return (\n \n \n }>\n \n {children}\n \n \n \n \n );\n}\n\nexport default BaseUI;\n","import React from 'react';\n\nimport {\n Container,\n CssBaseline,\n Typography,\n} from \"@mui/material\";\n\nexport type MessagePageProps = {\n message: string;\n};\n\nexport function MessagePage(props: MessagePageProps): JSX.Element {\n const { message } = props;\n\n return (\n \n \n \n \n {message}\n \n \n \n );\n}\n\nexport default MessagePage;\n","import React from 'react';\n\nimport MessagePage from './MessagePage';\n\nexport function LoadPage(): JSX.Element {\n return ;\n}\n\nexport default LoadPage;\n","import React, { useState } from 'react';\n\nimport { Navigate, NavigateProps } from 'react-router-dom';\n\nimport { useAuth } from '../../providers/Auth';\nimport { LoadPage } from '../../components/LoadPage';\n\nimport { Role } from './types/Roles';\nimport { useRoles, useExactlyOnce } from './hooks';\n\nexport const IndexPage = (): JSX.Element => {\n const { isAuthenticated, signinSilent } = useAuth();\n const authenticated = isAuthenticated();\n const { roles } = useRoles();\n\n const [ loading, setLoading ] = useState(!authenticated);\n\n useExactlyOnce(() => {\n if (!authenticated) {\n signinSilent().catch(() => null).then(() => {\n setLoading(false);\n });\n }\n });\n\n if (loading) {\n return ;\n }\n\n // Redirect based on authentication and roles.\n const target: NavigateProps = {\n to: (roles === Role.User || roles === Role.Guest) ? 'account' : 'domains',\n replace: true,\n }\n if (!authenticated) {\n // Over\n target.to = 'signin-required';\n target.state = {\n end: true,\n };\n }\n\n return ;\n}\n\nexport default IndexPage;\n","import React from 'react';\n\nimport { Role, HasRoleOp } from './types/Roles';\n\nexport function getRoleName(role: Role): string {\n let name;\n switch (role) {\n case Role.SystemAdministrator:\n name = \"System Administrator\";\n break;\n case Role.GlobalAdministrator:\n name = \"Global Administrator\";\n break;\n case Role.DomainAdministrator:\n name = \"Domain Administrator\";\n break;\n case Role.UserAdministrator:\n name = \"User Administrator\";\n break;\n case Role.User:\n name = \"User\";\n break;\n case Role.Guest:\n name = \"Guest\";\n break;\n default:\n name = \"Unknown\";\n }\n return name;\n}\n\nexport function getRoleNames(role: Role, op: HasRoleOp = HasRoleOp.Any): string {\n const names: string[] = [];\n\n for (const [_name, value] of Object.entries(Role)) {\n if (role & (value as Role)) {\n names.push(getRoleName(value as Role));\n }\n }\n\n let sep = ', ';\n switch (op) {\n case HasRoleOp.Any:\n sep = ' or ';\n break;\n case HasRoleOp.All:\n sep = ' and ';\n break;\n }\n return names.join(sep);\n}\n\nexport const RoleName = (role: Role, op?: HasRoleOp): JSX.Element => {\n const name = getRoleNames(role, op);\n return {name};\n}\n\nexport default RoleName;\n","import React from 'react';\n\nimport { Outlet, Navigate, useLocation } from 'react-router-dom';\n\nimport { useAuth } from '../../providers/Auth';\nimport { LoadPage } from '../../components/LoadPage';\n\nimport { IState } from './types/State';\nimport { Role, HasRoleOp } from './types/Roles';\nimport { useRoles } from './hooks';\nimport { getRoleNames } from './RoleName';\n\nexport type PrivateOutletProps = {\n requiredRole: Role,\n requiredRoleOp?: HasRoleOp,\n}\n\nexport const PrivateOutlet = (props: PrivateOutletProps): JSX.Element | null => {\n const { requiredRole, requiredRoleOp } = props;\n const { isAuthenticated, isBlocked, user } = useAuth();\n const location = useLocation();\n const { roles, hasRole } = useRoles();\n const authenticated = isAuthenticated();\n\n if (isBlocked()) {\n return ;\n }\n\n const state: IState = {};\n const currentState = location.state as IState;\n\n if (authenticated) {\n const error = !hasRole(requiredRole, requiredRoleOp);\n if (!error) {\n return ;\n }\n\n const as = user?.profile.preferred_username ? `as \"${user.profile.preferred_username}\" ` : '';\n\n state.error = error;\n state.message = `Access ${as}denied. The \"${getRoleNames(requiredRole, requiredRoleOp)}\" role is required.`;\n console.debug(state.message, roles, location.pathname);\n } else {\n if (currentState && currentState.continue) {\n return \n }\n }\n\n // Inject continue information.\n state.continue = {\n pathname: location.pathname,\n search: location.search,\n hash: location.hash,\n };\n\n // Inject end information if any.\n if (currentState && currentState.end) {\n state.end = currentState.end;\n }\n\n return ;\n}\n\nPrivateOutlet.defaultProps = {\n requiredRole: Role.SystemAdministrator,\n requiredRoleOp: HasRoleOp.Any,\n};\n\nexport default PrivateOutlet;\n","import React from 'react';\n\nimport { useLocation } from 'react-router-dom';\n\nimport MessagePage from '../../components/MessagePage';\n\nimport { IState } from './types/State';\nimport PrivateOutlet, { PrivateOutletProps } from './PrivateOutlet';\n\nexport const RequestOutlet = (props: PrivateOutletProps): JSX.Element => {\n const location = useLocation();\n\n const { state: currentState } = location;\n if (!currentState || !(currentState as IState).continue) {\n return ;\n }\n\n return ;\n}\n\nexport default RequestOutlet;\n","import React, { lazy } from \"react\";\n\nimport { Navigate, Outlet, useParams as useParamsBase } from 'react-router-dom';\n\nimport { ErrorPage as NotFound } from '../components/ErrorPage';\n\nimport { BaseUI } from '../containers/BaseUI/BaseUI';\nimport { IRouteObject } from '../providers/Routes/Context';\nimport { IndexPage } from '../features/auth/IndexPage';\nimport { PrivateOutlet } from '../features/auth/PrivateOutlet';\nimport { RequestOutlet } from '../features/auth/RequestOutlet';\nimport { Role } from '../features/auth/types/Roles';\n\nconst DomainsIndex = lazy(() => import(/* webpackChunkName: \"f-d-didx\" */ '../features/domains/DomainsIndex'));\nconst NewDomain = lazy(() => import(/* webpackChunkName: \"f-d-newd\" */ '../features/domains/NewDomain'));\nconst DeleteDomain = lazy(() => import(/* webpackChunkName: \"f-d-deld\" */ '../features/domains/DeleteDomain'));\nconst DomainOverview = lazy(() => import(/* webpackChunkName: \"f-d-dovv\" */ '../features/domains/DomainOverview'));\nconst DomainConf = lazy(() => import(/* webpackChunkName: \"f-d-dcnf\" */ '../features/domains/DomainConf'));\nconst DomainOutlet = lazy(() => import(/* webpackChunkName: \"f-d-dolt\" */ '../features/domains/DomainOutlet'));\nconst UsersIndex = lazy(() => import(/* webpackChunkName: \"f-d-uidx\" */ '../features/domains/UsersIndex'));\nconst NewUser = lazy(() => import(/* webpackChunkName: \"f-d-newu\" */ '../features/domains/NewUser'));\nconst DeleteUser = lazy(() => import(/* webpackChunkName: \"f-d-delu\" */ '../features/domains/DeleteUser'));\nconst UserOverview = lazy(() => import(/* webpackChunkName: \"f-d-uovv\" */ '../features/domains/UserOverview'));\nconst UserPassword = lazy(() => import(/* webpackChunkName: \"f-d-upwd\" */ '../features/domains/UserPassword'));\nconst UserProfile = lazy(() => import(/* webpackChunkName: \"f-d-uprof\" */ '../features/domains/UserProfile'));\nconst UserConf = lazy(() => import(/* webpackChunkName: \"f-d-ucnf\" */ '../features/domains/UserConf'));\nconst GroupsIndex = lazy(() => import(/* webpackChunkName: \"f-d-gidx\" */ '../features/domains/GroupsIndex'));\nconst NewGroup = lazy(() => import(/* webpackChunkName: \"f-d-newg\" */ '../features/domains/NewGroup'));\nconst DeleteGroup = lazy(() => import(/* webpackChunkName: \"f-d-delg\" */ '../features/domains/DeleteGroup'));\nconst GroupOverview = lazy(() => import(/* webpackChunkName: \"f-d-govv\" */ '../features/domains/GroupOverview'));\nconst GroupConf = lazy(() => import(/* webpackChunkName: \"f-d-gcnf\" */ '../features/domains/GroupConf'));\n\nconst AccountOverview = lazy(() => import(/* webpackChunkName: \"f-a-aovv\" */ '../features/account/AccountOverview'));\nconst AccountPassword = lazy(() => import(/* webpackChunkName: \"f-a-apwd\" */ '../features/account/AccountPassword'));\n\nconst OrganizationsIndex = lazy(() => import(/* webpackChunkName: \"f-o-oidx\" */ '../features/organizations/OrganizationsIndex'));\nconst NewOrganization = lazy(() => import(/* webpackChunkName: \"f-o-newo\" */ '../features/organizations/NewOrganization'));\nconst DeleteOrganization = lazy(() => import(/* webpackChunkName: \"f-o-newo\" */ '../features/organizations/DeleteOrganization'));\nconst OrganizationOverview = lazy(() => import(/* webpackChunkName: \"f-o-oovv\" */ '../features/organizations/OrganizationOverview'));\nconst OrganizationConf = lazy(() => import(/* webpackChunkName: \"f-o-ocnf\" */ '../features/organizations/OrganizationConf'));\nconst OrganizationLicensesIndex = lazy(() => import(/* webpackChunkName: \"f-o-osidx\" */ '../features/organizations/LicensesIndex'));\n\nconst StoragesIndex = lazy(() => import(/* webpackChunkName: \"f-s-sidx\" */ '../features/storages/StoragesIndex'));\n\nconst UserAliasesIndex = lazy(() => import(/* webpackChunkName: \"f-a-uidx\" */ '../features/aliases/UserAliasesIndex'));\nconst NewUserAlias = lazy(() => import(/* webpackChunkName: \"f-a-newua\" */ '../features/aliases/NewUserAlias'));\nconst DomainAliasesIndex = lazy(() => import(/* webpackChunkName: \"f-a-uidx\" */ '../features/aliases/DomainAliasesIndex'));\nconst NewDomainAlias = lazy(() => import(/* webpackChunkName: \"f-a-newua\" */ '../features/aliases/NewDomainAlias'));\n\nconst CallbackOutlet = lazy(() => import(/* webpackChunkName: \"f-auth-cbo\" */ '../features/auth/CallbackOutlet'));\nconst AuthorizeCallback = lazy(() => import(/* webpackChunkName: \"f-auth-acb\" */ '../features/auth/AuthorizeCallback'));\nconst EndsessionCallback = lazy(() => import(/* webpackChunkName: \"f-auth-ecb\" */ '../features/auth/EndsessionCallback'));\nconst SilentRefreshCallback = lazy(() => import(/* webpackChunkName: \"f-auth-scb\" */ '../features/auth/SilentRefreshCallback'));\nconst SigninPage = lazy(() => import(/* webpackChunkName: \"f-auth-sip\" */ '../features/auth/SigninPage'));\n\nconst RequestCallback = lazy(() => import(/* webpackChunkName: \"f-auth-rcb\" */ '../features/auth/RequestCallback'));\nconst RequestSetPassword =lazy(() => import(/* webpackChunkName: \"f-a-rspwd\" */ '../features/account/RequestSetPassword'));\n\nconst ECPOutlet = lazy(() => import(/* webpackChunkName: \"f-ecp-o\" */ '../features/ecp/ECPOutlet'));\n\nconst LicensesIndex = lazy(() => import(/* webpackChunkName: \"f-s-lidx\" */ '../features/licenses/LicensesIndex'));\n\nconst SynchronizationsIndex = lazy(() => import('../features/synchronizations/SynchronizationsIndex'));\nconst OnPremisesSynchronizationOverview = lazy(() => import('../features/synchronizations/OnPremisesSynchronizationOverview'));\nconst NewOnPremisesSynchronization = lazy(() => import('../features/synchronizations/NewOnPremisesSynchronization'));\nconst DeleteOnPremisesSynchronization = lazy(() => import('../features/synchronizations/DeleteOnPremisesSynchronization'));\nconst OnPremisesSynchronizationSettings = lazy(() => import('../features/synchronizations/OnPremisesSynchronizationSettings'));\n\nexport type Params = {\n domainID: string,\n userID: string,\n groupID: string,\n organizationID: string,\n providerID: string,\n}\n\nexport function useParams(): Params {\n const params = useParamsBase();\n\n return {\n domainID: params.domainID || '',\n userID: params.userID || '',\n groupID: params.groupID || '',\n organizationID: params.organizationID || '',\n providerID: params.providerID || '',\n }\n}\n\nexport const routes: IRouteObject[] = [\n {\n path: \"/\",\n element: ,\n children: [\n {\n path: \"/\",\n element: ,\n },\n {\n path: \"domains\",\n breadcrumb: \"Domains\",\n element: ,\n children: [\n { index: true, element: },\n { path: \"new\", element: , breadcrumb: \"New\" },\n {\n path: \":domainID\",\n element: ,\n children: [\n { index: true, element: },\n { path: \"overview\", element: , breadcrumb: null },\n { path: \"delete\", element: , breadcrumb: \"Delete\" },\n { path: \"conf\", element: , breadcrumb: \"Configuration\" },\n {\n path: \"users\",\n breadcrumb: \"Users\",\n children: [\n { index: true, element: },\n { path: \"new\", element: , breadcrumb: \"New\" },\n {\n path: \":userID\",\n children: [\n { index: true, element: },\n { path: \"overview\", element: , breadcrumb: null },\n { path: \"delete\", element: , breadcrumb: \"Delete\" },\n { path: \"password\", element: , breadcrumb: \"Password\" },\n { path: \"profile\", element: , breadcrumb: \"Profile\" },\n { path: \"conf\", element: , breadcrumb: \"Configuration\" },\n ],\n },\n ],\n },\n {\n path: \"groups\",\n breadcrumb: \"Groups\",\n children: [\n { index: true, element: },\n { path: \"new\", element: , breadcrumb: \"New\" },\n {\n path: \":groupID\",\n children: [\n { index: true, element: },\n { path: \"overview\", element: , breadcrumb: null },\n { path: \"delete\", element: , breadcrumb: \"Delete\" },\n { path: \"conf\", element: , breadcrumb: \"Configuration\" },\n ],\n },\n ],\n },\n {\n path: \"aliases\",\n breadcrumb: \"Aliases\",\n children: [\n { index: true, element: },\n {\n path: \"user\",\n breadcrumb: \"User\",\n children: [\n { index: true, element: },\n { path: \"new\", element: , breadcrumb: \"New\" },\n ]\n },\n {\n path: \"domain\",\n breadcrumb: \"Domain\",\n children: [\n { index: true, element: },\n { path: \"new\", element: , breadcrumb: \"New\" },\n ]\n },\n ],\n },\n ],\n },\n ],\n },\n {\n path: \"account\",\n breadcrumb: \"My Account\",\n element: ,\n children: [\n { index: true, element: },\n { path: \"overview\", breadcrumb: \"Overview\", element: },\n { path: \"password\", breadcrumb: \"Password\", element: },\n ],\n },\n {\n path: \"organizations\",\n breadcrumb: \"Organizations\",\n element: ,\n children: [\n { index: true, element: },\n { path: \"new\", element: , breadcrumb: \"New\" },\n {\n path: \":organizationID\",\n children: [\n { index: true, element: },\n { path: \"overview\", element: , breadcrumb: null },\n { path: \"delete\", element: , breadcrumb: \"Delete\" },\n { path: \"conf\", element: , breadcrumb: \"Configuration\" },\n { path: \"license\", element: , breadcrumb: \"License\" },\n ]\n },\n ],\n },\n {\n path: \"directory\",\n breadcrumb: \"Directory\",\n element: ,\n children: [\n { index: true, element: },\n {\n path: \"synchronizations\",\n breadcrumb: \"Synchronization\",\n children: [\n { index: true, element: },\n { path: \"new\", element: , breadcrumb: \"New\" },\n {\n path: \":providerID\",\n children: [\n { index: true, element: },\n { path: \"overview\", element: , breadcrumb: null },\n { path: \"delete\", element: , breadcrumb: \"Delete\" },\n { path: \"settings\", element: , breadcrumb: \"Settings\" },\n ]\n },\n ],\n }\n ],\n },\n {\n path: \"storage\",\n breadcrumb: \"Storage\",\n element: ,\n children: [\n { index: true, element: },\n ],\n },\n {\n path: \"license\",\n breadcrumb: \"License\",\n element: ,\n children: [\n { index: true, element: },\n ],\n },\n {\n path: \"oidc\",\n children: [\n { path: \"authorize-callback\", element: },\n { path: \"request-callback\", element: },\n ],\n },\n {\n path: \"by-request\",\n element: ,\n breadcrumb: null,\n children: [\n {\n path: \":requestID\",\n breadcrumb: null,\n children: [\n { path: \"set-password\", breadcrumb: null, element: },\n ],\n },\n ],\n },\n {\n path: \"ecp\",\n element: ,\n breadcrumb: null,\n },\n {\n path: \"signin-required\",\n element: ,\n },\n ],\n },\n {\n path: \"_\",\n children: [\n {\n path: \"oidc\",\n element: ,\n children: [\n { path: \"silent-refresh\", element: },\n { path: \"endsession-callback\", element: },\n ],\n },\n ],\n },\n { path: \"*\", element: },\n];\n\nexport default routes;\n","import { createTheme } from '@mui/material/styles';\n\nconst theme = createTheme({\n components: {\n MuiButton: {\n styleOverrides: {\n root: {\n textTransform: 'none'\n },\n },\n },\n MuiTab: {\n styleOverrides: {\n root: {\n textTransform: 'none'\n },\n },\n },\n },\n typography: {\n body1: {\n fontSize: '0.9rem',\n },\n },\n});\n\nexport default theme;\n","import dayjs from 'dayjs';\nimport localizedFormat from 'dayjs/plugin/localizedFormat';\nimport utc from 'dayjs/plugin/utc';\nimport timezone from 'dayjs/plugin/timezone';\n\nimport 'dayjs/locale/en-gb';\n\ndayjs.extend(localizedFormat);\ndayjs.extend(utc);\ndayjs.extend(timezone);\ndayjs.locale('en-gb');\n\nexport default dayjs;\n","import React, { useEffect, useCallback } from 'react';\n\nimport { ErrorBoundary as BaseErrorBoundary, useErrorBoundary, ErrorBoundaryProps } from 'react-error-boundary'\n\nconst UnhandledPromiseRejectionBoundary = (props: React.PropsWithChildren): JSX.Element => {\n const { children } = props;\n\n const { showBoundary } = useErrorBoundary();\n\n const handlePromiseRejection = useCallback((event: PromiseRejectionEvent) => {\n console.debug('error boundary promise rejection', event);\n event.preventDefault();\n\n if ('error' in event.reason && typeof event.reason.error !== 'string') {\n showBoundary(event.reason.error as Error);\n } else {\n showBoundary(event.reason as Error);\n }\n }, [ showBoundary ]);\n\n useEffect(() => {\n window.addEventListener('unhandledrejection', handlePromiseRejection)\n return () => {\n window.removeEventListener('unhandledrejection', handlePromiseRejection);\n };\n }, [ handlePromiseRejection ]);\n\n return {children};\n}\n\nexport const ErrorBoundary = (props: React.PropsWithRef>): JSX.Element => {\n const { children, ...other } = props;\n\n return (\n \n \n {children}\n \n \n );\n}\n\nexport default ErrorBoundary;\n","import React, { Suspense, useCallback } from 'react';\n\nimport { HashRouter as Router } from 'react-router-dom';\nimport { ConfirmProvider } from \"material-ui-confirm\";\n\nimport CssBaseline from '@mui/material/CssBaseline';\nimport { ThemeProvider } from '@mui/material/styles';\nimport { LocalizationProvider } from '@mui/x-date-pickers';\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\n\nimport routes from './app/routes';\nimport theme from './app/theme';\n\nimport './app/dayjs';\n\nimport { LoadPage } from './components/LoadPage';\nimport { ErrorBoundary } from './components/ErrorBoundary';\nimport { ErrorPage } from './components/ErrorPage';\n\nimport { Provider as ConfigProvider } from './providers/Config';\nimport { Provider as RoutesProvider, useRoutes } from './providers/Routes';\n\nimport './app/app.css';\n\nfunction Routes(): JSX.Element {\n const element = useRoutes();\n\n return {element};\n}\n\nexport function App(): JSX.Element {\n const onErrorHandler = useCallback(\n (error: Error, info: React.ErrorInfo): void => {\n console.error({error, info});\n },\n [],\n );\n\n return (\n \n \n \n \n \n \n \n }>\n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default App;\n","import { configureStore, ThunkAction, Action } from '@reduxjs/toolkit';\nimport { setupListeners } from '@reduxjs/toolkit/query'\n\nimport manageAPI from '../features/httpManage';\nimport configAPI from '../features/httpConfig';\nimport { authSlice } from '../features/auth/authSlice';\n\nexport const store = configureStore({\n reducer: {\n [manageAPI.reducerPath]: manageAPI.reducer,\n [configAPI.reducerPath]: configAPI.reducer,\n [authSlice.name]: authSlice.reducer,\n },\n\n middleware: (getDefaultMiddleware) =>\n getDefaultMiddleware().concat(manageAPI.middleware, configAPI.middleware),\n});\n\nsetupListeners(store.dispatch);\n\nexport type AppDispatch = typeof store.dispatch;\nexport type RootState = ReturnType;\nexport type AppThunk = ThunkAction<\n ReturnType,\n RootState,\n unknown,\n Action\n>;\n","import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { Provider } from 'react-redux';\nimport { CacheProvider } from \"@emotion/react\";\nimport createCache from \"@emotion/cache\";\n\nimport '@fontsource/roboto/300.css';\nimport '@fontsource/roboto/400.css';\nimport '@fontsource/roboto/500.css';\nimport '@fontsource/roboto/700.css';\n\nimport { App } from './App';\nimport { store } from './app/store';\n\nconst getNonce = (): string | undefined => {\n const nonce = document.querySelector('meta[property=\"csp-nonce\"]')?.getAttribute('content');\n return nonce ? nonce : undefined;\n}\n\nconst cache = createCache({\n key: 'mui',\n nonce: getNonce(),\n prepend: true,\n});\n\nconst container = document.getElementById('root') as HTMLElement;\nconst root = createRoot(container);\nroot.render(\n \n \n \n \n \n \n \n);\n"],"file":"static/assets/index-ab7cc5c5.js"}