{"version":3,"file":"main.1034bba86b6a8e438283.js","mappings":"qJAQO,MAIMA,EAAiB,eAcjBC,EAAmB,mBAUnBC,EAAWA,CAACC,EAAOC,EAAMC,EAAQC,KAC1C,QAAYC,IAATH,GAA+B,OAATA,EAAc,CAEnC,IAAII,EAAMJ,EAAKK,QAAOD,GAAOA,EAAIE,QAAQC,MAAKC,GAAcA,IAAeP,MAASQ,MAAKL,GAG9EA,EAAIL,MAAMW,KAAIC,GACG,kBAATA,EACAA,EAEAA,EAAKT,KAGjBK,MAAKI,IAAiC,IAAzBZ,EAAMa,QAAQD,OAIlC,QAAYR,IAARC,GAA6B,OAARA,EAErB,MAAuB,UAAhBA,EAAIS,OAEnB,CAEA,OAAO,CAAK,EAKHC,EAAUA,CAACf,EAAOC,KAC3B,IAAIe,EAAQ,GACRC,EAAa,GA+BjB,OA5BAjB,EAAMkB,SAAQN,IACVX,EAAKiB,SAAQb,IACNA,EAAIL,MAAMmB,SAASP,KAEdI,EAAMG,SAASd,EAAIe,gBAA8BhB,IAAjBC,EAAIe,UAA2C,OAAjBf,EAAIe,UAClEJ,EAAMK,KAAKhB,EAAIe,UAEvB,GACF,IAKFH,EADDD,EAAMG,SAAS,SACD,QACPH,EAAMG,SAAS,qBACR,oBACNH,EAAMG,SAAS,aACT,YACNH,EAAMG,SAAS,iBACT,eACNH,EAAMG,SAAS,gBACT,cACNH,EAAMG,SAAS,QACT,SAEAH,EAGVC,CAAU,EA4HRK,EAAmBA,KAC5B,IAAIC,EAASC,EAAAA,GACTC,GAAQC,EAAAA,EAAAA,MAERC,GAAgB,EAapB,OAZc,MAAVJ,GAC0B,MAAtBA,EAAOK,aACHL,EAAOK,YAAYC,OAAS,IAC5BF,GAAgB,GAKxBA,GAAgC,MAAfG,EAAAA,KACjBC,EAAAA,EAAAA,IAAoBN,GAGjBE,CAAa,EAIXK,EAAeA,KACxB,IAAIT,EAASC,EAAAA,GACTC,GAAQC,EAAAA,EAAAA,MAIZ,OAFc3B,EAAS0B,EAAMzB,MAAOuB,EAAOtB,KAAM,QAEnC,EAILgC,EAAqBA,KAC9B,IAAIV,EAASC,EAAAA,GACTC,GAAQC,EAAAA,EAAAA,MAERQ,EAAUnC,EAAS0B,EAAMzB,MAAOuB,EAAOtB,KAAM,SAE7CkC,EAAS,GAiBb,OAhBc,MAAVZ,GAC0B,MAAtBA,EAAOK,aACHL,EAAOK,YAAYC,OAAS,IACxBK,GACAX,EAAOK,YAAYjB,KAAKyB,GAAmBD,EAAS,IAAIA,KAAWC,EAAMD,UACzEA,EAAS,IAAI,IAAIE,IAAIF,MAErBA,EAASL,EAAAA,GACK,MAAVK,IACAA,EAAS,MAOtBA,CAAM,C,sMChRV,MAAMG,EAAYA,CAACtC,EAAOC,KACxBF,EAAAA,EAAAA,IAASC,EAAOC,EAAM,SAIlBsC,EAAkBA,CAACvC,EAAOC,KAC9BF,EAAAA,EAAAA,IAASC,EAAOC,EAAM,oBAIlBuC,EAAiBA,CAACxC,EAAOC,KAC7BF,EAAAA,EAAAA,IAASC,EAAOC,EAAM,gBAIlBwC,EAAYA,CAACzC,EAAOC,KACxBF,EAAAA,EAAAA,IAASC,EAAOC,EAAM,UAIlByC,EAAYA,CAAC1C,EAAOC,KACxBF,EAAAA,EAAAA,IAASC,EAAOC,EAAM,UAGlB0C,EAAYA,CAAC3C,EAAOC,KACxBF,EAAAA,EAAAA,IAASC,EAAOC,EAAM,UAGlB2C,EAAkBA,CAAC5C,EAAOC,KAC9BF,EAAAA,EAAAA,IAASC,EAAOC,EAAM,uBAGlB4C,EAAoBA,CAAC7C,EAAOC,KAChCF,EAAAA,EAAAA,IAASC,EAAOC,EAAM,yBAGlB6C,EAAcA,CAAC9C,EAAOC,KAC1BF,EAAAA,EAAAA,IAASC,EAAOC,EAAM,YAGlB8C,EAAsBA,CAAC/C,EAAOC,KAClCF,EAAAA,EAAAA,IAASC,EAAOC,EAAM,2BAGlB+C,EAAoBA,CAAChD,EAAOC,KAChCF,EAAAA,EAAAA,IAASC,EAAOC,EAAM,oBAGlBgD,EAAgBA,CAACjD,EAAOC,KAC5BF,EAAAA,EAAAA,IAASC,EAAOC,EAAM,eAGlBiD,EAAkBA,CAAClD,EAAOC,KAC9BF,EAAAA,EAAAA,IAASC,EAAOC,EAAM,iBAIlBkD,EAAiBA,CAACnD,EAAOC,KAC7BF,EAAAA,EAAAA,IAASC,EAAOC,EAAM,gBAGlBmD,EAAiBA,CAACpD,EAAOC,KAC7BF,EAAAA,EAAAA,IAASC,EAAOC,EAAM,gBAGlBoD,EAAoBA,CAACrD,EAAOC,KAChCF,EAAAA,EAAAA,IAASC,EAAOC,EAAM,kB,gJClExB,MASMqD,EAAUA,KACrB,IAAI7B,EAAQ8B,aAAaC,QAAQ,KACjC,OAAI/B,EACKgC,KAAKC,OAAMC,EAAAA,EAAAA,IAAuBlC,IAEpC,IAAI,E,0BCbb,MAAMmC,GAAMC,EAAAA,EAAAA,OAAK,IAAM,qEAYvB,EAVsBC,KAElBC,EAAAA,EAAAA,MAACC,EAAAA,GAAM,CAAAC,SAAA,EACLC,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACC,OAAK,EAACC,KAAK,IAAIC,SAASJ,EAAAA,EAAAA,KAACN,EAAG,OACnCM,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,UAAUC,SAASJ,EAAAA,EAAAA,KAACN,EAAG,OACnCM,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,aAAaC,SAASJ,EAAAA,EAAAA,KAACN,EAAG,OACtCM,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,IAAIC,SAASJ,EAAAA,EAAAA,KAACK,EAAAA,GAAQ,CAACC,SAAO,EAACC,GAAG,W,eCJpD,MAAMb,GAAMC,EAAAA,EAAAA,OAAK,IAAM,qEACjBa,GAAUb,EAAAA,EAAAA,OAAK,IAAM,+EACrBc,GAAUd,EAAAA,EAAAA,OAAK,IAAM,0QACrBe,GAASf,EAAAA,EAAAA,OAAK,IAAM,gLACpBgB,GAAYhB,EAAAA,EAAAA,OAAK,IAAM,yLACvBiB,GAAQjB,EAAAA,EAAAA,OAAK,IAAM,wPACnBkB,GAAUlB,EAAAA,EAAAA,OAAK,IAAM,ySACrBmB,GAAenB,EAAAA,EAAAA,OAAK,IAAM,6OAC1BoB,GAAepB,EAAAA,EAAAA,OAAK,IAAM,0SAC1BqB,GAASrB,EAAAA,EAAAA,OAAK,IAAM,4LACpBsB,GAAStB,EAAAA,EAAAA,OAAK,IAAM,mJACpBuB,GAAMvB,EAAAA,EAAAA,OAAK,IAAM,+EACjBwB,GAAWxB,EAAAA,EAAAA,OAAK,IAAM,+EACtByB,GAAiBzB,EAAAA,EAAAA,OAAK,IAAM,kCAG5B0B,GAAiB1B,EAAAA,EAAAA,OAAK,IAAM,+EAC5B2B,GAAQ3B,EAAAA,EAAAA,OAAK,IAAM,8JACnB4B,GAAO5B,EAAAA,EAAAA,OAAK,IAAM,8EAClB6B,GAAc7B,EAAAA,EAAAA,OAAK,IAAM,qEACzB8B,GAAU9B,EAAAA,EAAAA,OAAK,IAAM,qEACrB+B,GAAa/B,EAAAA,EAAAA,OAAK,IAAM,0DACxBgC,GAAchC,EAAAA,EAAAA,OAAK,IAAM,qEACzBiC,GAAUjC,EAAAA,EAAAA,OAAK,IAAM,2IACrBkC,GAAelC,EAAAA,EAAAA,OAAK,IAAM,+EAC1BmC,GAAcnC,EAAAA,EAAAA,OAAK,IAAM,+EACzBoC,GAAapC,EAAAA,EAAAA,OAAK,IAAM,qEACxBqC,GAAcrC,EAAAA,EAAAA,OAAK,IAAM,2DACzBsC,GAAYtC,EAAAA,EAAAA,OAAK,IAAM,qEACvBuC,GAAcvC,EAAAA,EAAAA,OAAK,IAAM,qMACzBwC,GAAWxC,EAAAA,EAAAA,OAAK,IAAM,0IACtByC,GAAOzC,EAAAA,EAAAA,OAAK,IAAM,yFAClB0C,GAAM1C,EAAAA,EAAAA,OAAK,IAAM,0IACjB2C,GAAS3C,EAAAA,EAAAA,OAAK,IAAM,8EACpB4C,GAAY5C,EAAAA,EAAAA,OAAK,IAAM,sHACvB6C,GAAiB7C,EAAAA,EAAAA,OAAK,IAAM,uHAC5B8C,GAAS9C,EAAAA,EAAAA,OAAK,IAAM,kLACpB+C,IAAa/C,EAAAA,EAAAA,OAAK,IAAM,4LACxBgD,IAAehD,EAAAA,EAAAA,OAAK,IAAM,2LAC1BiD,IAAgBjD,EAAAA,EAAAA,OAAK,IAAM,4LAC3BkD,IAAqBlD,EAAAA,EAAAA,OAAK,IAAM,4LAChCmD,IAAYnD,EAAAA,EAAAA,OAAK,IAAM,4LACvBoD,IAAYpD,EAAAA,EAAAA,OAAK,IAAM,4LACvBqD,IAAcrD,EAAAA,EAAAA,OAAK,IAAM,4LACzBsD,IAAgBtD,EAAAA,EAAAA,OAAK,IAAM,2LAC3BuD,IAAiBvD,EAAAA,EAAAA,OAAK,IAAM,mJAC5BwD,IAAcxD,EAAAA,EAAAA,OAAK,IAAM,wFACzB/B,IAAc+B,EAAAA,EAAAA,OAAK,IAAM,kGACzByD,IAAkBzD,EAAAA,EAAAA,OAAK,IAAM,qEAC7B0D,IAAe1D,EAAAA,EAAAA,OAAK,IAAM,qEAC1B2D,IAAM3D,EAAAA,EAAAA,OAAK,IAAM,+EACjB4D,IAAM5D,EAAAA,EAAAA,OAAK,IAAM,+EACjB6D,IAAW7D,EAAAA,EAAAA,OAAK,IAAM,iIACtB8D,IAAgB9D,EAAAA,EAAAA,OAAK,IAAM,qEAC3B+D,IAAO/D,EAAAA,EAAAA,OAAK,IAAM,qEAClBgE,IAAqBhE,EAAAA,EAAAA,OAAK,IAAM,qEAChCiE,IAASjE,EAAAA,EAAAA,OAAK,IAAM,0CAEpBkE,IAAoBlE,EAAAA,EAAAA,OAAK,IAAM,4LAC/BmE,IAAyBnE,EAAAA,EAAAA,OAAK,IAAM,qEACpCoE,IAAgBpE,EAAAA,EAAAA,OAAK,IAAM,2LAC3BqE,IAAgBrE,EAAAA,EAAAA,OAAK,IAAM,4LAC3BsE,IAAkBtE,EAAAA,EAAAA,OAAK,IAAM,2LAC7BuE,IAAoBvE,EAAAA,EAAAA,OAAK,IAAM,4LAC/BwE,IAAiBxE,EAAAA,EAAAA,OAAK,IAAM,kCAG5ByE,IAAazE,EAAAA,EAAAA,OAAK,IAAM,kCACxB0E,IAAc1E,EAAAA,EAAAA,OAAK,IAAM,wFACzB2E,IAAa3E,EAAAA,EAAAA,OAAK,IAAM,qMACxB4E,IAAmB5E,EAAAA,EAAAA,OAAK,IAAM,gIAC9B6E,IAAiB7E,EAAAA,EAAAA,OAAK,IAAM,0LAC5B8E,IAAkB9E,EAAAA,EAAAA,OAAK,IAAM,oMAC7B+E,IAAkB/E,EAAAA,EAAAA,OAAK,IAAM,oMAC7BgF,IAAYhF,EAAAA,EAAAA,OAAK,IAAM,sMACvBiF,IAAcjF,EAAAA,EAAAA,OAAK,IAAM,qHACzBkF,IAAUlF,EAAAA,EAAAA,OAAK,IAAM,4GA6O3B,GA1OkBmF,KAChB,MAAMvH,EAAQ6B,IACd,IAAI/B,EAASC,EAAAA,GAEb,MAAMyH,EAAiB,OAALxH,QAAK,IAALA,OAAK,EAALA,EAAOzB,MACnBkJ,EAAkB,OAAN3H,QAAM,IAANA,OAAM,EAANA,EAAQtB,MAEpB,YAAEkJ,EAAW,YAAEC,EAAW,kBAAEC,EAAiB,iBAAEC,EAAgB,YAAEC,EAAW,kBAAEC,IAAsBC,EAAAA,EAAAA,UAAQ,KAChH,MAAMN,GAAc7G,EAAAA,EAAAA,IAAU2G,EAAWC,GACnCQ,GAAmBlH,EAAAA,EAAAA,IAAeyG,EAAWC,GAC7CK,GAAc7G,EAAAA,EAAAA,IAAUuG,EAAWC,GAMzC,MAAO,CAAEC,cAAaO,mBAAkBN,aALpB3G,EAAAA,EAAAA,IAAUwG,EAAWC,GAKYG,mBAJ3B9G,EAAAA,EAAAA,IAAgB0G,EAAWC,GAImBI,iBAH/CI,GAAoBP,EAG6CI,cAAaC,mBAF7EtG,EAAAA,EAAAA,IAAgB+F,EAAWC,GAEqE,GACzH,CAACD,EAAWC,IAETS,EAAyBA,KAC7B,MAAM,GAAEC,IAAOC,EAAAA,EAAAA,KAEf,OAAY,IADAC,SAASF,EAAI,SAEHxJ,IAAhBqB,EAAMzB,OAAuC,OAAhByB,EAAMzB,YAAyCI,IAAvBqB,EAAMzB,MAAM6B,QAAwB2H,GACpFtF,EAAAA,EAAAA,KAACe,EAAY,KAEbf,EAAAA,EAAAA,KAACK,EAAAA,GAAQ,CAACC,SAAO,EAACC,GAAG,aAGvBP,EAAAA,EAAAA,KAACe,EAAY,GACtB,EAGI8E,GAAeN,EAAAA,EAAAA,UAAQ,KAC3B1F,EAAAA,EAAAA,MAAAiG,EAAAA,SAAA,CAAA/F,SAAA,EACEC,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACC,OAAK,EAACC,KAAK,IAAIC,SAASJ,EAAAA,EAAAA,KAACN,EAAG,OACnCM,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,UAAUC,SAASJ,EAAAA,EAAAA,KAACN,EAAG,OACnCM,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,WAAWC,SAASJ,EAAAA,EAAAA,KAACQ,EAAO,OAExCR,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,oBAAoBC,SAASJ,EAAAA,EAAAA,KAACe,EAAY,OACtDf,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,cAAcC,SAASJ,EAAAA,EAAAA,KAACyF,EAAsB,OAC1DzF,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,UAAUC,SAASJ,EAAAA,EAAAA,KAACgB,EAAM,OAEtChB,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,iBAAiBC,SAASJ,EAAAA,EAAAA,KAACoB,EAAc,UAEtD,IAEG2E,GAAcR,EAAAA,EAAAA,UAAQ,SACNrJ,IAAhBqB,EAAMzB,OAAuC,OAAhByB,EAAMzB,YAAyCI,IAAvBqB,EAAMzB,MAAM6B,QAAwB0H,GAEzFxF,EAAAA,EAAAA,MAAAiG,EAAAA,SAAA,CAAA/F,SAAA,EACEC,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,OAAOC,SAASJ,EAAAA,EAAAA,KAACkB,EAAG,OAChClB,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,YAAYC,SAASJ,EAAAA,EAAAA,KAACmB,EAAQ,UAK9CtB,EAAAA,EAAAA,MAAAiG,EAAAA,SAAA,CAAA/F,SAAA,EACEC,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,OAAOC,SAASJ,EAAAA,EAAAA,KAACK,EAAAA,GAAQ,CAACC,SAAO,EAACC,GAAG,gBACjDP,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,YAAYC,SAASJ,EAAAA,EAAAA,KAACK,EAAAA,GAAQ,CAACC,SAAO,EAACC,GAAG,mBAGzD,CAAC8E,EAAa9H,EAAMzB,QAEjBkK,IAAuBT,EAAAA,EAAAA,UAAQ,SACfrJ,IAAhBqB,EAAMzB,OAAuC,OAAhByB,EAAMzB,YAAyCI,IAAvBqB,EAAMzB,MAAM6B,QAAwByH,GAEzFvF,EAAAA,EAAAA,MAAAiG,EAAAA,SAAA,CAAA/F,SAAA,EACEC,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,WAAWC,SAASJ,EAAAA,EAAAA,KAACS,EAAO,OACxCT,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,gBAAgBC,SAASJ,EAAAA,EAAAA,KAACc,EAAY,OAClDd,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,oBAAoBC,SAASJ,EAAAA,EAAAA,KAACa,EAAO,OACjDb,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,UAAUC,SAASJ,EAAAA,EAAAA,KAACU,EAAM,OACtCV,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,aAAaC,SAASJ,EAAAA,EAAAA,KAACW,EAAS,OAC5CX,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,gBAAgBC,SAASJ,EAAAA,EAAAA,KAACY,EAAK,UAK/Cf,EAAAA,EAAAA,MAAAiG,EAAAA,SAAA,CAAA/F,SAAA,EACEC,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,WAAWC,SAASJ,EAAAA,EAAAA,KAACK,EAAAA,GAAQ,CAACC,SAAO,EAACC,GAAG,gBACrDP,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,gBAAgBC,SAASJ,EAAAA,EAAAA,KAACK,EAAAA,GAAQ,CAACC,SAAO,EAACC,GAAG,gBAC1DP,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,oBAAoBC,SAASJ,EAAAA,EAAAA,KAACK,EAAAA,GAAQ,CAACC,SAAO,EAACC,GAAG,gBAC9DP,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,UAAUC,SAASJ,EAAAA,EAAAA,KAACK,EAAAA,GAAQ,CAACC,SAAO,EAACC,GAAG,gBACpDP,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,gBAAgBC,SAASJ,EAAAA,EAAAA,KAACK,EAAAA,GAAQ,CAACC,SAAO,EAACC,GAAG,mBAG7D,CAAC6E,EAAkB7H,EAAMzB,QAGtBmK,IAAcV,EAAAA,EAAAA,UAAQ,SACNrJ,IAAhBqB,EAAMzB,OAAuC,OAAhByB,EAAMzB,YAAyCI,IAAvBqB,EAAMzB,MAAM6B,SAAyBuH,GAAeD,IAAgB1H,EAAM2I,WAC7H7I,EAAO8I,SAEPnG,EAAAA,EAAAA,KAAA8F,EAAAA,SAAA,CAAA/F,UACEC,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,UAAUC,SAASJ,EAAAA,EAAAA,KAACiB,EAAM,UAY5CjB,EAAAA,EAAAA,KAAA8F,EAAAA,SAAA,CAAA/F,UACEC,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,UAAUC,SAASJ,EAAAA,EAAAA,KAACK,EAAAA,GAAQ,CAACC,SAAO,EAACC,GAAG,kBAGvD,CAAChD,EAAMzB,MAAOuB,EAAO8I,QAASjB,EAAaD,EAAa1H,EAAM2I,YAM3DE,IAAcb,EAAAA,EAAAA,UAAQ,KAC1B1F,EAAAA,EAAAA,MAAAiG,EAAAA,SAAA,CAAA/F,SAAA,EACEC,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,kBAAkBC,SAASJ,EAAAA,EAAAA,KAACqB,EAAc,OACtDrB,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,YAAYC,SAASJ,EAAAA,EAAAA,KAACwD,GAAQ,OAC1CxD,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,QAAQC,SAASJ,EAAAA,EAAAA,KAAC0D,GAAI,OAClC1D,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,sBAAsBC,SAASJ,EAAAA,EAAAA,KAAC2D,GAAkB,OAC9D3D,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,iBAAiBC,SAASJ,EAAAA,EAAAA,KAACyD,GAAa,OACpDzD,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,eAAeC,SAASJ,EAAAA,EAAAA,KAACkC,EAAW,OAChDlC,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,YAAYC,SAASJ,EAAAA,EAAAA,KAACmC,EAAQ,OAC1CnC,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,QAAQC,SAASJ,EAAAA,EAAAA,KAACoC,EAAI,OAClCpC,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,OAAOC,SAASJ,EAAAA,EAAAA,KAACqC,EAAG,OAChCrC,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,UAAUC,SAASJ,EAAAA,EAAAA,KAACsC,EAAM,OACtCtC,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,kBAAkBC,SAASJ,EAAAA,EAAAA,KAACkD,GAAc,OACtDlD,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,eAAeC,SAASJ,EAAAA,EAAAA,KAACmD,GAAW,OAChDnD,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,eAAeC,SAASJ,EAAAA,EAAAA,KAACpC,GAAW,OAChDoC,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,mBAAmBC,SAASJ,EAAAA,EAAAA,KAACoD,GAAe,OACxDpD,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,gBAAgBC,SAASJ,EAAAA,EAAAA,KAACqD,GAAY,OAClDrD,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,OAAOC,SAASJ,EAAAA,EAAAA,KAACsD,GAAG,OAChCtD,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,QAAQC,SAASJ,EAAAA,EAAAA,KAACuD,GAAG,OACjCvD,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,gBAAgBC,SAASJ,EAAAA,EAAAA,KAAC4B,EAAO,OAC7C5B,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,gBAAgBC,SAASJ,EAAAA,EAAAA,KAAC6B,EAAY,OAClD7B,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,cAAcC,SAASJ,EAAAA,EAAAA,KAAC+B,EAAU,OAC9C/B,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,eAAeC,SAASJ,EAAAA,EAAAA,KAACgC,EAAW,OAChDhC,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,aAAaC,SAASJ,EAAAA,EAAAA,KAACiC,EAAS,OAC5CjC,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,qBAAqBC,SAASJ,EAAAA,EAAAA,KAAC8B,EAAW,OACtD9B,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,gBAAgBC,SAASJ,EAAAA,EAAAA,KAACyC,EAAM,OAC5CzC,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,aAAaC,SAASJ,EAAAA,EAAAA,KAAC8C,GAAS,OAC5C9C,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,aAAaC,SAASJ,EAAAA,EAAAA,KAAC+C,GAAS,OAC5C/C,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,cAAcC,SAASJ,EAAAA,EAAAA,KAAC0C,GAAU,OAC9C1C,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,eAAeC,SAASJ,EAAAA,EAAAA,KAACgD,GAAW,OAChDhD,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,4BAA4BC,SAASJ,EAAAA,EAAAA,KAAC4C,GAAa,OAC/D5C,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,iBAAiBC,SAASJ,EAAAA,EAAAA,KAACiD,GAAa,OACpDjD,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,gBAAgBC,SAASJ,EAAAA,EAAAA,KAAC2C,GAAY,OAClD3C,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,sBAAsBC,SAASJ,EAAAA,EAAAA,KAAC6C,GAAkB,OAC9D7C,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,SAASC,SAASJ,EAAAA,EAAAA,KAACsB,EAAK,OACpCtB,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,QAAQC,SAASJ,EAAAA,EAAAA,KAACuB,EAAI,OAClCvB,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,oBAAoBC,SAASJ,EAAAA,EAAAA,KAAC0B,EAAU,OACpD1B,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,eAAeC,SAASJ,EAAAA,EAAAA,KAACwB,EAAW,OAChDxB,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,WAAWC,SAASJ,EAAAA,EAAAA,KAACyB,EAAO,OACxCzB,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,WAAWC,SAASJ,EAAAA,EAAAA,KAAC2B,EAAW,OAC5C3B,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,aAAaC,SAASJ,EAAAA,EAAAA,KAACuC,EAAS,OAC5CvC,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,kBAAkBC,SAASJ,EAAAA,EAAAA,KAACwC,EAAc,OACtDxC,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,UAAUC,SAASJ,EAAAA,EAAAA,KAAC4D,GAAM,OAEtC5D,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,0BAA0BC,SAASJ,EAAAA,EAAAA,KAAC8D,GAAsB,OACtE9D,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,iBAAiBC,SAASJ,EAAAA,EAAAA,KAAC+D,GAAa,OACpD/D,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,iBAAiBC,SAASJ,EAAAA,EAAAA,KAACgE,GAAa,OACpDhE,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,mBAAmBC,SAASJ,EAAAA,EAAAA,KAACiE,GAAe,OACxDjE,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,gCAAgCC,SAASJ,EAAAA,EAAAA,KAAC6D,GAAiB,OACvE7D,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,qBAAqBC,SAASJ,EAAAA,EAAAA,KAACkE,GAAiB,OAC5DlE,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,kBAAkBC,SAASJ,EAAAA,EAAAA,KAACmE,GAAc,UAGvD,IAEGkC,IAAsBd,EAAAA,EAAAA,UAAQ,IAC3BN,EAAcmB,GAAc,MAClC,CAACnB,EAAamB,KAGXE,IAAef,EAAAA,EAAAA,UAAQ,KAC3B1F,EAAAA,EAAAA,MAAAiG,EAAAA,SAAA,CAAA/F,SAAA,EACEC,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,cAAcC,SAASJ,EAAAA,EAAAA,KAACoE,GAAU,OAC9CpE,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,mBAAmBC,SAASJ,EAAAA,EAAAA,KAACqE,GAAW,OACpDrE,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,mBAAmBC,SAASJ,EAAAA,EAAAA,KAACsE,GAAU,OACnDtE,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,UAAUC,SAASJ,EAAAA,EAAAA,KAACuE,GAAgB,OAChDvE,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,kBAAkBC,SAASJ,EAAAA,EAAAA,KAACwE,GAAc,OACtDxE,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,mBAAmBC,SAASJ,EAAAA,EAAAA,KAACyE,GAAe,OACxDzE,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,mBAAmBC,SAASJ,EAAAA,EAAAA,KAAC0E,GAAe,OACxD1E,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,aAAaC,SAASJ,EAAAA,EAAAA,KAAC2E,GAAS,OAC5C3E,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,cAAcC,SAASJ,EAAAA,EAAAA,KAAC4E,GAAW,OAC/C5E,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,WAAWC,SAASJ,EAAAA,EAAAA,KAAC6E,GAAO,UAEzC,IAEG0B,IAAkBhB,EAAAA,EAAAA,UAAQ,KAC9B1F,EAAAA,EAAAA,MAAAiG,EAAAA,SAAA,CAAA/F,SAAA,EACEC,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACC,OAAK,EAACC,KAAK,cAAcC,SAASJ,EAAAA,EAAAA,KAACK,EAAAA,GAAQ,CAACC,SAAO,EAACC,GAAG,sBAC9DP,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACC,OAAK,EAACC,KAAK,mBAAmBC,SAASJ,EAAAA,EAAAA,KAACK,EAAAA,GAAQ,CAACC,SAAO,EAACC,GAAG,sBACnEP,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACC,OAAK,EAACC,KAAK,mBAAmBC,SAASJ,EAAAA,EAAAA,KAACK,EAAAA,GAAQ,CAACC,SAAO,EAACC,GAAG,sBACnEP,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACC,OAAK,EAACC,KAAK,UAAUC,SAASJ,EAAAA,EAAAA,KAACK,EAAAA,GAAQ,CAACC,SAAO,EAACC,GAAG,sBAC1DP,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACC,OAAK,EAACC,KAAK,kBAAkBC,SAASJ,EAAAA,EAAAA,KAACK,EAAAA,GAAQ,CAACC,SAAO,EAACC,GAAG,sBAClEP,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACC,OAAK,EAACC,KAAK,mBAAmBC,SAASJ,EAAAA,EAAAA,KAACK,EAAAA,GAAQ,CAACC,SAAO,EAACC,GAAG,sBACnEP,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACC,OAAK,EAACC,KAAK,mBAAmBC,SAASJ,EAAAA,EAAAA,KAACK,EAAAA,GAAQ,CAACC,SAAO,EAACC,GAAG,sBACnEP,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACC,OAAK,EAACC,KAAK,aAAaC,SAASJ,EAAAA,EAAAA,KAACK,EAAAA,GAAQ,CAACC,SAAO,EAACC,GAAG,sBAC7DP,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACC,OAAK,EAACC,KAAK,cAAcC,SAASJ,EAAAA,EAAAA,KAACK,EAAAA,GAAQ,CAACC,SAAO,EAACC,GAAG,sBAC9DP,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACC,OAAK,EAACC,KAAK,WAAWC,SAASJ,EAAAA,EAAAA,KAACK,EAAAA,GAAQ,CAACC,SAAO,EAACC,GAAG,yBAE5D,IAEGiG,IAAoBjB,EAAAA,EAAAA,UAAQ,KAC5BN,GAAeE,IACV9H,EAAOoJ,aAAeH,GAExBC,IACN,CAACD,GAAcC,GAAiBlJ,EAAOoJ,aAActB,EAAmBF,IAE3E,OACEpF,EAAAA,EAAAA,MAACC,EAAAA,GAAM,CAAAC,SAAA,CAEJ8F,EAEAG,GAEAC,GAEAF,EAEAM,GAEAG,IAEDxG,EAAAA,EAAAA,KAACC,EAAAA,GAAK,CAACE,KAAK,IAAIC,SAASJ,EAAAA,EAAAA,KAACK,EAAAA,GAAQ,CAACE,GAAG,WAAWD,SAAO,QAEjD,E,kBCrSb,MAAMoG,GAAgBA,KACpB,MAAOC,EAAcC,IAAmBC,EAAAA,EAAAA,WAAS,IAC1CC,EAAaC,IAAkBF,EAAAA,EAAAA,WAAS,IACxCG,EAAOC,IAAYJ,EAAAA,EAAAA,UAAS,OAC5BtJ,EAAO2J,IAAYL,EAAAA,EAAAA,UAAS,OAC5BM,EAAOC,IAAYP,EAAAA,EAAAA,UAAS,MACnC,IAAIxJ,EAASC,EAAAA,GA4Bb,IA1BA+J,EAAAA,EAAAA,YAAU,KACcC,iBAEdC,EAAAA,EAAAA,MACNN,EHjCiBO,MACrB,IAAIR,EAAQ3H,aAAaC,QAAQ,KACjC,OAAI0H,GACKvH,EAAAA,EAAAA,IAAuBuH,GAEzB,IAAI,EG4BEQ,IACTN,EAAS9H,KACTgI,EHhBG/H,aAAaC,QAAQ,UGiBxBsH,GAAgB,EAAK,EAGvBa,GAGIC,SAASC,IAAIC,MAAM,UACrBC,MAAMH,SAASC,KAAKG,MAAKC,GAAQA,EAAKC,UAGpCN,SAASC,IAAIC,MAAM,gBAAkBF,SAASC,IAAIC,MAAM,QAC1DK,EAAAA,EAAAA,OAGFC,EAAAA,EAAAA,iBAAgB,GAEf,SAGWhM,IAAVqB,GAAiC,OAAVA,QAA6BrB,IAAXmB,GAAmC,OAAXA,EAAiB,CAU/EyJ,GATqBQ,iBAElBa,EAAAA,EAAAA,OACNC,EAAAA,EAAAA,OACAC,EAAAA,EAAAA,OACAC,EAAAA,EAAAA,OACAC,EAAAA,EAAAA,MACAxB,GAAe,EAAK,EAGpByB,EAEJ,CAGA,IAAK7B,EACH,OAAO3G,EAAAA,EAAAA,KAAA,UAYT,MATqByI,MACnB,MAAMC,EAAe1B,GAAmB,UAAVG,QAA+BjL,IAAViL,GAAiC,cAAVA,EACpEwB,EAAepL,QAAyBrB,IAAhBqB,EAAMzB,MAGpC,OAAO4M,GAAgBC,IAFU,OAAXtL,QAA8BnB,IAAXmB,EAEW,EAIlDoL,IACOzI,EAAAA,EAAAA,KAAC8E,GAAS,KAEV9E,EAAAA,EAAAA,KAACJ,EAAa,GACzB,EAKWgJ,EAAAA,WAAoBlB,SAASmB,eAAe,SACpDC,QACH9I,EAAAA,EAAAA,KAAC+I,EAAAA,GAAa,CAAAhJ,UACZC,EAAAA,EAAAA,KAACgJ,EAAAA,SAAQ,CAACC,UAAUjJ,EAAAA,EAAAA,KAAA,OAAKkJ,UAAU,mBAAkBnJ,UAACC,EAAAA,EAAAA,KAAA,QAAMkJ,UAAU,gBAA0BnJ,UAC9FC,EAAAA,EAAAA,KAAC0G,GAAa,Q,uJC/FTyC,EAAW,GACXC,EAAW,GAItB,MAAMC,EAAU/B,eAAOgC,GAA2D,IAAtDC,EAAMC,UAAA7L,OAAA,QAAAzB,IAAAsN,UAAA,GAAAA,UAAA,GAAG,MAAOC,EAAID,UAAA7L,OAAA,QAAAzB,IAAAsN,UAAA,GAAAA,UAAA,GAAG,KAAME,EAAWF,UAAA7L,OAAA,QAAAzB,IAAAsN,UAAA,IAAAA,UAAA,GAEhE,MAAMG,EAAU,CACZ,eAAgB,mBAChB,mBAHQC,EAAAA,EAAAA,MAIR,gBAAiB,aAGhBF,GAAaG,EAAAA,EAAQC,QAE1B,IACI,MAAMC,QAAiBlC,MAAMyB,EAAK,CAC9BC,SACAI,UACAF,KAAMA,EAAOlK,KAAKyK,UAAUP,GAAQ,OAGlCQ,QAAqBF,EAASG,OAGpC,OAAOD,EAAe1K,KAAKC,MAAMyK,GAAgB,IACrD,CAAE,MAAOE,GAKL,OAJAC,QAAQD,MAAM,aAAcA,QACvBT,GACDG,EAAAA,EAAQ1M,MAAK6C,EAAAA,EAAAA,KAACqK,EAAAA,EAAO,CAACC,KAAK,QAAQC,UAAQ,EAACC,UAAQ,EAAAzK,SAAEoK,EAAMM,SAAW,wBAG/E,CACJ,EAIaC,EAAgBpD,UACzB,IAAKqD,EAAM,OACX,MAAMC,QAAevB,EAAQ,6BAADwB,OAA8BF,IAI1D,OAHa,IAATA,IACAvB,EAAWwB,GAERA,CAAM,EAIVtD,eAAewD,EAAgBH,EAAMI,EAAOC,GAC/C,IAAKL,IAASI,EAAO,OAER,MAATJ,GAAiBK,GACjBnB,EAAAA,EAAQ1M,MAAK6C,EAAAA,EAAAA,KAACqK,EAAAA,EAAO,CAACC,KAAK,OAAOC,UAAQ,EAACC,UAAQ,EAAAzK,SAAC,uBAGxD,MACM6K,EAAS,CAAED,KAAM/E,SAAS+E,GAAOI,eACjC1B,EAFM,uBAEO,SAAUuB,GAEhB,MAATD,GAAiBK,GACjBnB,EAAAA,EAAQ1M,MAAK6C,EAAAA,EAAAA,KAACqK,EAAAA,EAAO,CAACC,KAAK,UAAUC,UAAQ,EAACC,UAAQ,EAAAzK,SAAC,kBAAyB,CAAEkL,SAAU,KAEpG,CAEO3D,eAAe4D,EAAYP,EAAMQ,GACpC,IAAKR,IAASQ,EAAO,OAErB,MAAM7B,EAAG,wBAAAuB,OAA2BF,SACdtB,EAAQC,EAAK,OAAQ6B,IAGvCtB,EAAAA,EAAQ1M,MAAK6C,EAAAA,EAAAA,KAACqK,EAAAA,EAAO,CAACC,KAAK,UAAUC,UAAQ,EAACC,UAAQ,EAAAzK,SAAA,SAAA8K,OAAWM,EAAMC,KAAI,eAAwB,CAAEH,SAAU,KAEvH,CAIO3D,eAAe+D,EAAeC,GACjC,IAAKA,EAAM,OAEX,MAAMhC,EAAG,6BAAAuB,OAAgCS,GACzC,aAAajC,EAAQC,EACzB,CAGOhC,eAAeiE,IAClB,MACMX,QAAevB,EADT,2BAGZ,OAAKuB,GAAWY,MAAMC,QAAQb,GAE9BzB,EAAWyB,EAAOxO,QAAOsP,IAAA,IAAC,KAAEf,EAAI,WAAEgB,EAAU,WAAEC,GAAYF,EAAA,OAC7C,IAATf,GAAuB,IAATA,GAA6B,OAAfgB,KAAyBC,GAA6B,KAAfA,EAAkB,IAH3C,EAMlD,C,mRC9FWC,EAAI,GACR,MAAMC,EAAI,8CAGJC,EAAe,CACxBhQ,KAAM,GACNiQ,WAAY,GACZC,KAAM,CACFC,KAAM,CAAEC,MAAO,cAAeC,UAAW,QACzCC,MAAO,GACPC,OAAQ,CAAC,oBACTC,QAAS,CAAC,UAAW,WAAY,eACjCC,QAAS,GACTC,aAAc,OACdC,aAAc,IAElBC,cAAe,GACfC,aAAc,GACdC,aAAc,GACdC,aAAc,CACVC,iBAAkB,GAClBC,kBAAmB,IAEvBC,MAAO,CAAEC,cAAc,GACvBC,MAAO,kBACPC,eAAgB,GAChBV,aAAc,CAAC,EACfW,WAAY,iBACZC,YAAa,0BACbC,QAAQ,EACRC,QAAQ,EACRC,mBAAoB,GACpBC,eAAgB,CAAC,EACjBC,eAAe,EACfC,qBAAqB,EACrBC,kBAAkB,EAClBC,eAAgB,QAChBC,eAAgB,KAChBC,cAAe,MAGZ,IAAI3Q,EAAS0O,EAgDb,IAAIkC,EA7Cc,CACrBC,OAAQ,CACJ,iBAAoB,CAChBf,MAAO,mBACP7C,KAAM,OACN6D,cAAc,EACdC,gBAAgB,GAEpB,KAAQ,CACJjB,MAAO,OACP7C,KAAM,OACN6D,cAAc,EACdC,gBAAgB,GAEpB,UAAa,CACTjB,MAAO,YACP7C,KAAM,OACN6D,cAAc,EACdC,gBAAgB,GAEpB,KAAQ,CACJjB,MAAO,YACP7C,KAAM,OACN6D,cAAc,EACdC,gBAAgB,GAEpB,aAAgB,CACZjB,MAAO,eACP7C,KAAM,OACN6D,cAAc,EACdC,gBAAgB,GAEpB,GAAM,CACFjB,MAAO,UACP7C,KAAM,OACN6D,cAAc,EACdC,gBAAgB,IAIxBC,OAAQ,CAAE,aAAgB,eAAgB,KAAQ,OAAQ,iBAAoB,mBAAoB,KAAQ,OAAQ,KAAQ,YAAa,UAAa,YAAa,QAAW,UAAW,KAAQ,OAAQ,GAAM,UAAW,oBAAqB,aAAc,qBAAsB,cAAe,sBAAuB,eAAgB,qBAAsB,gBAAiB,mBAAoB,wBAClYlE,MAAO,CAAC,GAUZ,MAAMmE,EAAyBjR,SAEMnB,IAA7BmB,EAAO4O,KAAKS,cAA2D,OAA7BrP,EAAO4O,KAAKS,eACtDrP,EAAO4O,KAAKS,aAAe6B,EAAoBlR,IAInDmR,OAAOC,KAAK1C,EAAaE,MAAMjP,SAAQ0R,SACVxS,IAArBmB,EAAO4O,KAAKyC,IAA2C,OAArBrR,EAAO4O,KAAKyC,KAC9CrR,EAAO4O,KAAKyC,GAAO3C,EAAa2C,GACpC,IAGGrR,GAILkR,EAAuBlR,QACGnB,IAAxBmB,EAAOqP,cAAsD,OAAxBrP,EAAOqP,aACrC8B,OAAOC,KAAKpR,EAAOqP,cAEvB,GAIJpF,eAAeC,IAClB,IAAIwC,QAAiBlC,MAAM,mBAAoB,CAC3C8G,KAAM,UACNhF,QAAS,CACL,eAAgB,mBAChB,OAAU,sBAId5B,QAAagC,EAAS/B,QAC1B3K,EAAS0K,EAAK1K,QACPoJ,aAAesB,EAAKtB,aAC3BpJ,EAAO4O,KAAKS,aAAe6B,EAAoBlR,GAC/CA,EAASiR,EAAsBjR,GAC/B,IAAItB,EAAO,GACPiQ,EAAa,QAEA9P,IAAb6L,EAAK5L,KAAkC,OAAb4L,EAAK5L,MAC/BJ,EAAOgM,EAAK5L,IAAIM,KAAIN,IAChBJ,EAAKD,MAAQK,EAAIL,MAAMW,KAAIC,IACvB,IAAIkS,EAAkBlS,EAEtB,GAAoB,kBAATA,EAAmB,CAC1B,IAAImS,EAAK,qBACLjH,EAAQ,KACRkH,GAAc,EAElB,KAAQlH,EAAQiH,EAAGE,KAAKrS,IACpBoS,GAAc,EACd9C,EAAW7O,KAAKyK,EAAM,IAGtBkH,IACAF,EAAkBI,IAAAA,QAAmBtS,GAE7C,CACA,OAAOkS,CAAe,IAGtBzS,EAAIF,QAAUE,EAAIF,OAAOgT,gBACzBT,OAAOC,KAAKtS,EAAIF,OAAOgT,gBAAgBjS,SAAQkS,GAAOlD,EAAW7O,KAAK+R,KAEnE/S,KAGXkB,EAAOtB,KAAOA,EACdsB,EAAO2O,WAAaA,GAGxB,IAAIC,EAAO1M,KAAKC,MAAMH,aAAaC,QAAQ,MAC9B,OAAT2M,QAA0B/P,IAAT+P,GACjB5M,aAAa8P,QAAQ,IAAK5P,KAAKyK,UAAU3M,EAAO4O,OAYxD,SAAkBmD,GACd,QAAmBlT,IAAfkT,GAA2C,OAAfA,EAAqB,CACjD,IAAIf,EAASJ,EAAWI,OACpBH,EAASkB,EAETlB,EAAmB,aACnBA,EAAmB,WAAEE,gBAAiB,GAG1CI,OAAOC,KAAKP,GAAQlR,SAAS0R,IACrBR,EAAOQ,GAAKvB,QACZkB,EAAOK,GAAOR,EAAOQ,GAAKvB,MAC9B,IAGJc,EAAWC,QAAMmB,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACVpB,EAAWC,QACXA,GAEPD,EAAWI,OAASA,CACxB,CAEJ,CA/BIiB,CAASvH,EAAKmG,OAClB,CAIO,SAASqB,EAAaC,GACzBnS,EAASmS,CACb,CA2BO,MAAMC,EAAUA,KACR,CACP,SAAY,CACR,CACI,KAAQ,eACR,WAAc,CACV,gBAAmB,CAAC,cACpB,aAAe,EACf,cAAgB,GAEpB,UAAa,CACT,KAAQ,uEACR,eAAkB,aAClB,KAAQ,aACR,QAAW,mBAGnB,CACI,KAAQ,UACR,WAAc,CACV,gBAAmB,CAAC,kBACpB,aAAe,GAEnB,UAAa,CACT,eAAkB,eAQ/BnI,eAAec,IAClB,IAAIpB,GAAQ4C,EAAAA,EAAAA,MACZ,aAAa/B,MAAM,cAAe,CAC9B0B,OAAQ,MACRI,QAAS,CAAE,kBAAmB3C,KAC/Bc,MAAK4H,GACGA,EAAI1H,SACZF,MAAKR,SACJuE,QAaDvE,eAAkBqI,GACrB,IAEI,IAAIC,EAAWC,IAAAA,KAAWC,SAAShE,GAGnC8D,EAAWA,EAASG,MAAM,EAAG,IAG7B,MAAMC,EAAiBH,IAAAA,KAAWC,SAASH,GAGrCM,EAAQD,EAAeD,MAAM,EAAG,IAChCG,EAAaF,EAAeD,MAAM,IAAK,IACvCI,EAAMH,EAAeD,OAAO,IAG5BK,EAAWP,IAAAA,OAAaQ,eAAe,UAAWT,GAGlDU,EAAiBT,IAAAA,KAAWU,aAAa,YAAa,QAG5DH,EAASI,MAAM,CACXC,GAAIR,EACJK,eAAgBA,EAChBI,UAAW,IACXP,IAAKN,IAAAA,KAAWU,aAAaJ,KAIjCC,EAASO,OAAOd,IAAAA,KAAWU,aAAaL,IAGxC,IADgBE,EAASQ,SAErB,MAAM,IAAIC,MAAM,mDAMpB,OAFsBT,EAASU,OAAOC,SAAS,QAAQzQ,QAAQ,YAAa,GAGhF,CAAE,MAAO6J,GACL,MAAMA,CACV,CACJ,CA1DkB6G,CAAGpG,IAGrB,CAEOtD,eAAe2J,IAClB,MAAU,KAANpF,QACazD,IAENyD,CAEf,CAiDO,MAAMqF,EAAkBC,IAC3B,MAAMC,EAAmB7R,KAAKC,MAAMH,aAAaC,QAAQ,MACzD,IAAI+R,EAAQ,GAIZ,OAHID,IACAC,EAAQD,EAAiB9E,QAAU,IAEhC+E,EAAMpU,SAASkU,EAAa,EAG1BG,EAAoB,CAC7B,CAAEC,MAAO,QAASC,MAAO,YACzB,CAAED,MAAO,OAAQC,MAAO,WACxB,CAAED,MAAO,QAASC,MAAO,YACzB,CAAED,MAAO,OAAQC,MAAO,WACxB,CAAED,MAAO,UAAWC,MAAO,cAC3B,CAAED,MAAO,QAASC,MAAO,YACzB,CAAED,MAAO,eAAgBC,MAAO,kBAChC,CAAED,MAAO,aAAcC,MAAO,uBAC9B,CAAED,MAAO,UAAWC,MAAO,wBAC3B,CAAED,MAAO,qBAAsBC,MAAO,gBACtC,CAAED,MAAO,cAAeC,MAAO,aAC/B,CAAED,MAAO,aAAcC,MAAO,yBAC9B,CAAED,MAAO,UAAWC,MAAO,qBAC3B,CAAED,MAAO,iBAAkBC,MAAO,oBAClC,CAAED,MAAO,SAAUC,MAAO,oBAC1B,CAAED,MAAO,QAASC,MAAO,mBACzB,CAAED,MAAO,YAAaC,MAAO,uBAC7B,CAAED,MAAO,UAAWC,MAAO,cAC3B,CAAED,MAAO,oBAAqBC,MAAO,kBACrC,CAAED,MAAO,YAAaC,MAAO,gBAC7B,CAAED,MAAO,cAAeC,MAAO,oBAC3BN,EAAe,qBAAuB,CAAC,CAAEK,MAAO,kBAAmBC,MAAO,sBAAyB,GACvG,CAAED,MAAO,OAAQC,MAAO,WACxB,CAAED,MAAO,OAAQC,MAAO,WACxB,CAAED,MAAO,cAAeC,MAAO,eAGtBC,EAAoB,CAC7B,kBAAqB,UACrB,iBAAoB,iBACpB,iBAAoB,SACpB,gBAAmB,QACnB,oBAAuB,YACvB,eAAkB,oBAClB,oBAAuB,aACvB,qBAAwB,UACxB,aAAgB,YAChB,UAAa,cACb,kBAAqB,mBAGZC,EAAkB,CAC3B,CAAEH,MAAO,UAAWC,MAAO,qBAC3B,CAAED,MAAO,iBAAkBC,MAAO,oBAClC,CAAED,MAAO,SAAUC,MAAO,oBAC1B,CAAED,MAAO,QAASC,MAAO,mBACzB,CAAED,MAAO,YAAaC,MAAO,uBAC7B,CAAED,MAAO,UAAWC,MAAO,cAC3B,CAAED,MAAO,oBAAqBC,MAAO,kBACrC,CAAED,MAAO,YAAaC,MAAO,gBAC7B,CAAED,MAAO,cAAeC,MAAO,oBAC3BN,EAAe,qBAAuB,CAAC,CAAEK,MAAO,kBAAmBC,MAAO,sBAAyB,GACvG,CAAED,MAAO,OAAQC,MAAO,WACxB,CAAED,MAAO,OAAQC,MAAO,WACxB,CAAED,MAAO,cAAeC,MAAO,eAGtBG,EAAyBA,KAClC,MAAMP,GAAmBQ,EAAAA,EAAAA,MAczB,QAb8B,OAAhBR,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkB7E,UAAW,IAEL9P,KAAIoV,IAAM,CAAON,MAAOtD,EAAmB,OAAE4D,GAASL,MAAOK,MAElDpV,KAAIqV,GAC7CL,EAAkBK,EAAON,QACzBnC,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,GAAA,GACOyC,GAAM,IACTP,MAAOE,EAAkBK,EAAON,SAGjCM,GAEc,EAGhBC,EAAgBC,IACzB,MAAMZ,GAAmBQ,EAAAA,EAAAA,MAEzB,IAAIK,EAEAA,EADAb,GAGa,CAAC,EAGlBa,EAAWD,UAAYA,EAEvB,MAAME,EAAgC3S,KAAKyK,UAAUiI,GAErD5S,aAAa8P,QAAQ,IAAK+C,EAA8B,EAG/CC,EAAcA,KACvB,MAAMf,GAAmBQ,EAAAA,EAAAA,MACzB,OAAIR,GACOA,EAAiBY,WAErB,SAAS,EAGPI,EAAmBA,KAC5B,MAAMhB,GAAmBQ,EAAAA,EAAAA,MAEzB,IAAIK,EAEAA,EADAb,GAGa,CAAC,EAGlB,MAAMiB,EAAiBJ,EAAWzF,QAElCyF,EAAWK,kBAAoBD,EAE/B,MAAMH,EAAgC3S,KAAKyK,UAAUiI,GAErD5S,aAAa8P,QAAQ,IAAK+C,EAA8B,EAG/CK,EAAmBA,KAC5B,MAAMnB,GAAmBQ,EAAAA,EAAAA,MACzB,OAAIR,GACOA,EAAiBkB,mBAErB,EAAE,EAGAE,EAA2BC,IACpC,MAAMrB,GAAmBQ,EAAAA,EAAAA,MACzB,GAAIR,EAAkB,CAClB,MAGMhV,GAHmBgV,EAAiBkB,mBAAqB,IAG/B9V,MAC5BkW,GAAQA,EAAKC,aAAeF,IAGhC,GAAIrW,EACA,OAAOA,EAAOoV,KAEtB,CACA,OAAO,IAAI,EAGFoB,EAAwBA,CAAC7H,EAAO8H,KACzC,IAAK9H,EACD,OAAO,EAGX,MAAM+H,EAAqB/H,EAAMvO,MAAK8O,GAA4B,yBAApBA,EAAKqH,aAEnD,SAAIG,IAAsBtH,MAAMC,QAAQqH,EAAmBC,cAChDD,EAAmBC,WAAWzW,MAAK0W,GAAaA,EAAUzB,QAAUsB,GAGnE,C,0LCpdLjV,EAAc,KAGzB,SAASqV,IACL,IAAIjM,GAAQ4C,EAAAA,EAAAA,OAGRlC,SAASC,IAAIC,MAAM,WAEZF,SAASC,IAAIC,MAAM,uBAD1BZ,EAAQU,SAASC,IAAIuL,MAAM,WAAW,IAM1C,MAAMC,EAAM,IAAIC,eAChBD,EAAIE,KAAK,MAAO3L,SAAS4L,UAAU,GACnCH,EAAII,KAAK,MAET,MAAMC,EAAcL,EAAIM,kBAAkB,mBAK1C,OAJID,IACAxM,EAAQwM,GAGLxM,GAAS,kCACpB,CAGA,SAAS0M,EAAc1M,GACnB,MAAO,CACH,eAAgB,mBAChB,kBAAmBA,EACnB,OAAU,QAElB,CAGOM,eAAeqM,EAAaC,EAAUC,GACzC,IAAKA,EAGD,OAFAhK,EAAAA,EAAQC,QACRD,EAAAA,EAAQ1M,MAAK6C,EAAAA,EAAAA,KAACqK,EAAAA,EAAO,CAACC,KAAK,QAAQC,UAAQ,EAACC,UAAQ,EAAAzK,SAAC,kCAAyC,CAAEkL,SAAU,MACnG,KAIX,IAAI6I,EAAWC,EAAAA,GAAOC,KAAKH,GAAM9C,SAAS,UAE1C,IACI,MAAMhH,QAAiBlC,MAAM,oCAAqC,CAC9D0B,OAAQ,OACRI,QAAS,CACL,eAAgB,mBAChB,OAAU,mBACV,OAAU,SAEdF,KAAMlK,KAAKyK,UAAU,CAAEoB,KAAMwI,EAAUpC,MAAOsC,EAAUG,OAAQ,YAGpE,OAAwB,MAApBlK,EAASmK,QACTrK,EAAAA,EAAQC,QACRD,EAAAA,EAAQ1M,MAAK6C,EAAAA,EAAAA,KAACqK,EAAAA,EAAO,CAACC,KAAK,QAAOvK,SAAC,qEAA4E,CAAEkL,SAAU,MACpH,MAGJlB,EAAS/B,MACpB,CAAE,MAAOmC,GACL,OAAO,IACX,CACJ,CAGO7C,eAAe6M,IAClB,MAAMnN,EAAQiM,IACRtJ,EAAU+J,EAAc1M,GAE9B,IACI,MAAM+C,QAAiBlC,MAAM,oCAAqC,CAC9D0B,OAAQ,MACRI,YAGEL,EAAMS,EAASJ,QAAQyK,IAAI,YACjC,IAAI9K,GAAiB,qCAAVtC,EAIP,OAAO+C,EAASsK,GAAKtK,EAAS/B,OAAS,KAHvCsM,OAAOhB,SAASiB,QAAO,GACvBD,OAAOhB,SAAShT,QAAQgJ,EAIhC,CAAE,MAAOa,GACL,OAAO,IACX,CACJ,CAGO7C,eAAeW,IAClB,MAAMjB,EAAQiM,IACRtJ,EAAU+J,EAAc1M,GAE9B,IACI,MAAM+C,QAAiBlC,MAAM,oCAAqC,CAC9D0B,OAAQ,MACRI,YAGEL,EAAMS,EAASJ,QAAQyK,IAAI,YACjC,GAAI9K,GAAiB,qCAAVtC,EAGP,OAFAsN,OAAOhB,SAASiB,QAAO,GACvBD,OAAOhB,SAAShT,QAAQgJ,IACjB,EAGX,GAAwB,MAApBS,EAASmK,OACT,OAAO,EAGX,MAAMM,QAAazK,EAAS/B,OAE5B,QAAQ,OAAJwM,QAAI,IAAJA,IAAAA,EAAMC,UACN5W,EAAoB2W,GAahC,SAA2BA,GAEvB,MAAME,EAAU,IAAIC,EAAAA,EACpBtV,aAAa8P,QAAQ,QAAS,QAE9B,IAAIyF,EAAUF,EAAQN,IAAI,KAC1BQ,EAAUA,EAAUrV,KAAKC,OAAMC,EAAAA,EAAAA,IAAuBmV,IAAY,IAAIC,KAAKA,KAAKC,MAAQ,OAExF,MAAMC,GAAmBC,EAAAA,EAAAA,IAAuBzV,KAAKyK,UAAU,IAAI6K,KAAKD,KACxEvV,aAAa8P,QAAQ,KAAK6F,EAAAA,EAAAA,IAAuBzV,KAAKyK,UAAUwK,KAChEnV,aAAa8P,QAAQ,KAAK6F,EAAAA,EAAAA,IAAuBR,EAAKC,SACtDC,EAAQO,IAAI,KAAKD,EAAAA,EAAAA,IAAuBR,EAAKC,QAAS,CAAEtU,KAAM,IAAKyU,QAAS,IAAIC,KAAKD,GAAUM,QAAQ,EAAMC,SAAU,WACvHT,EAAQO,IAAI,IAAKF,EAAkB,CAAE5U,KAAM,IAAKyU,QAAS,IAAIC,KAAKD,GAAUM,QAAQ,EAAMC,SAAU,UACxG,CAzBYC,CAAkBZ,IAClBtM,EAAAA,EAAAA,mBACO,EAIf,CAAE,MAAOiC,GACL,OAAO,CACX,CACJ,CAmBO,SAAStM,EAAoBN,GAChC,IAAIF,EAASC,EAAAA,GACb,MAAM+X,EAAe9X,EAGrB,IAAI1B,EAAAA,EAAAA,IAASwZ,EAAavZ,MAAOuB,EAAOtB,KAAM,SAC1C,MAAO,QAGX,GAAIsB,EAAOK,YAAa,CACpB,MAAMA,EAAcL,EAAOK,YACrB4X,EAAoB5X,EAAYC,OAEtC,GAAI2X,EAAoB,EAAG,CACvB,IAAIrX,EAAS,GAGb,IAAK,IAAIsX,EAAI,EAAGA,EAAID,EAAmBC,IAAK,CACtB7X,EAAY6X,GAAGzZ,MAAMQ,MAAKI,GAAQ2Y,EAAavZ,MAAMmB,SAASP,OAG5EuB,EAASA,EAAO4M,OAAOnN,EAAY6X,GAAGtX,QAE9C,CAMA,OAHAA,EAAS,IAAI,IAAIE,IAAIF,IAErBL,EAAcK,EACPA,CACX,CACJ,CAEA,OAAO,IACX,C,ySCrLO,MAAMuX,EAAkB,CAC3BC,KAAK,EACLtJ,MAAO,GACPuJ,gBAAgB,EAChBC,GAAI,KACJnE,MAAO,IAIEzF,EAAe,CACxB6J,eAAgB,EAAAvG,EAAAA,EAAAA,GAAA,GAAMmG,KAGnB,IAAIK,EAAQ9J,EAGZ,SAAS+J,EAAYzJ,GACxBwJ,EAAQxJ,CACZ,CAEO,MAAM0J,EAAc,IAEpB,IAAIC,OAAY9Z,EACZ+Z,OAAe/Z,EAE1B,MAAMga,EAAgB,8BAGTC,EAAiB9J,GAClB+J,OAAO/J,GACN/L,QAAQ4V,EAAe,QAI9BG,EAAiBA,CAAChZ,EAAQiZ,KAE5B,IAAIC,EAAe,aAEfC,EAA2B,OAANnZ,QAAM,IAANA,OAAM,EAANA,EAAQuP,aAAanQ,KAAIwP,IAE9C,IAAIiC,EAAS,GAiBb,OAfAA,EAASA,EAAOrD,OAAOoB,EAAKwK,cAEHva,IAArB+P,EAAKyK,aAAkD,OAArBzK,EAAKyK,cACvCxI,EAASA,EAAOrD,OAAOoB,EAAKyK,mBAGTxa,IAAnB+P,EAAK0K,WAA8C,OAAnB1K,EAAK0K,YACrCzI,EAASA,EAAOrD,OAAOoB,EAAK0K,iBAGRza,IAApB+P,EAAK2K,YAAgD,OAApB3K,EAAK2K,aACtC1I,EAASA,EAAOrD,OAAOoB,EAAK2K,aAIzB1I,CAAM,IACd2I,QAAO,CAACC,EAAGC,IAAMD,EAAEjM,OAAOkM,IAAI,IAYjC,OAVAP,EAAqBA,EAAmBpa,QAAO+P,QAAgCjQ,IAAvBoa,EAAKpI,OAAO/B,IAA+C,OAAvBmK,EAAKpI,OAAO/B,IAA+C,SAA5BmK,EAAKpI,OAAO/B,GAAO7B,OAAiB7N,KAAI0P,GAASA,EAAQ,OAGpLoK,GAAgB,IAAMC,EAAmBQ,KAAK,UAEjB9a,IAAzBmB,EAAO4Z,eAAwD,OAAzB5Z,EAAO4Z,gBAC7CV,GAAgB,IAAMlZ,EAAO4Z,eAI1BV,CAAY,EAIVW,EAAmBA,CAAC7K,EAAO6B,IAE7B7B,EAAMjQ,QAAO+a,GAAqB,KAAdA,EAAI3F,QAAuC,IAAvB2F,EAAIzB,iBAC9CjZ,KAAK0a,IACF,IAAIC,GAAU/H,EAAAA,EAAAA,GAAA,GAAQ8H,GAEtB,GAA0B,OAAtBjJ,EAAOiJ,EAAIhL,QAA8C,SAA3B+B,EAAOiJ,EAAIhL,OAAO7B,OAA+B,OAAX6M,EAAIxB,IAA0B,OAAXwB,EAAIxB,IAAc,CACzG,IAAI0B,EAAaF,EAAI3F,MACrB,IACI4F,EAAW5F,MAAQ6F,CACvB,CAAE,MAAAC,GACEF,EAAW5F,MAAQ,EACvB,CACJ,CAGA,OAAO4F,CAAU,IAEpBhb,QAAO+a,GAAqB,KAAdA,EAAI3F,QAClB/U,KAAI,CAAC0a,EAAKI,KACP,IAAIC,EAAe,GAEfD,EAAQ,IACRC,GAAgBL,EAAI1B,IAAM,OAAS,OAGvC,IAAInL,EAAOmN,EAAQvJ,EAAOiJ,EAAIhL,QAG9B,QAAkBjQ,IAAdib,EAAIhL,YAAqCjQ,IAAdib,EAAI3F,OAAqC,OAAd2F,EAAIhL,OAAgC,OAAdgL,EAAI3F,MAChF,OAAQ2F,EAAIxB,IACR,QACI,MACJ,IAAK,KAEY,SAATrL,GAAiC,qBAAd6M,EAAIhL,OAAgCgL,EAAIhL,MAC3DqL,GAAY,GAAA3M,OAAOsM,EAAIhL,MAAK,MAAAtB,OAAKsM,EAAI3F,MAAMlR,QAAQ,MAAO,OAAM,KAIpE,MAEJ,IAAK,KACiB,MAAd6W,EAAI3F,OAA0B,WAATlH,IACrB6M,EAAI3F,MAAQ,YAEhB,IACIgG,IAA4C,IAA5BL,EAAI3F,MAAM7U,QAAQ,KAAW,GAAAkO,OAAMsM,EAAIhL,MAAK,KAAAtB,OAAIsM,EAAI3F,OAAK,GAAA3G,OAAQsM,EAAIhL,MAAK,MAAAtB,OAAKsM,EAAI3F,MAAK,IAC5G,CAAE,MAAAkG,GACEF,GAAY,GAAA3M,OAAOsM,EAAIhL,MAAK,KAAAtB,OAAIsM,EAAI3F,MACxC,CACA,MAEJ,IAAK,KAEiB,MAAd2F,EAAI3F,OAA2B,WAATlH,GAA8B,SAATA,IAC3C6M,EAAI3F,MAAQ,YAIhBgG,IAA4C,IAA5BL,EAAI3F,MAAM7U,QAAQ,KAAW,YAAAkO,OAAesM,EAAIhL,MAAK,KAAAtB,OAAIsM,EAAI3F,MAAK,iBAAA3G,OAAkBsM,EAAIhL,MAAK,MAAAtB,OAAKsM,EAAI3F,MAAK,MAC3H,MAEJ,IAAK,KACDgG,GAAY,GAAA3M,OAAOsM,EAAIhL,MAAK,MAAAtB,OAAKsM,EAAI3F,MAAK,UAC1C,MAEJ,IAAK,KACDgG,GAAY,GAAA3M,OAAOsM,EAAIhL,MAAK,WAAAtB,OAAUsM,EAAI3F,MAAK,KAI3D,OAAOgG,CAAY,IAEtBR,KAAK,KAaDW,EAAyB,CAClCzN,KAAM,CAAC,CAAEqH,MAAO,WAAYC,MAAO,MAAQ,CAAED,MAAO,SAAUC,MAAO,MAAQ,CAAED,MAAO,iBAAkBC,MAAO,OAC/GoG,OAAQ,CAAC,CAAErG,MAAO,QAASC,MAAO,MAAQ,CAAED,MAAO,YAAaC,MAAO,OACvEqG,QAAS,CAAC,CAAEtG,MAAO,QAASC,MAAO,OACnCsG,KAAM,CAAC,CAAEvG,MAAO,2BAA4BC,MAAO,MAAQ,CAAED,MAAO,wBAAyBC,MAAO,OACpGuG,OAAQ,CAAC,CAAExG,MAAO,SAAUC,MAAO,MAAQ,CAAED,MAAO,YAAaC,MAAO,MAAQ,CAAED,MAAO,2BAA4BC,MAAO,MAAQ,CAAED,MAAO,wBAAyBC,MAAO,QAIpKiG,EAAWnB,IACpB,IAAI0B,EAAa,OAejB,YAda9b,IAAToa,GAA+B,OAATA,IAClBA,EAAK2B,aAAe3B,EAAK2B,YAAYC,KACrCF,EAAa,SACQ,SAAd1B,EAAKhM,KACZ0N,EAAa,OACQ,YAAd1B,EAAKhM,KACZ0N,EAAa,UACQ,WAAd1B,EAAKhM,MAAmC,SAAdgM,EAAKhM,MAAiC,QAAdgM,EAAKhM,KAC9D0N,EAAa,SACQ,SAAd1B,EAAKhM,OACZ0N,EAAa,SAIdA,CAAU,EAIRG,EAAiBA,CAAC/b,EAAQ8R,KACnC,IAAIgB,EAEA8H,EAAO,OAgBX,YAdoB9a,IAAhBE,EAAOkO,MAAsC,OAAhBlO,EAAOkO,OACpC0M,EAAO,IAAM5a,EAAOkO,KAAO,UAIIpO,IAA9BgS,EAAO9R,EAAOuW,aAAgE,SAAnCzE,EAAO9R,EAAOuW,YAAYrI,MAA0C,OAAtBlO,EAAOuW,YAAwBvW,EAAOoV,MAAM7T,OAAS,GAAyB,OAApBvB,EAAOoV,MAAM,QAC5ItV,IAAjBE,EAAOoV,OAAwC,OAAjBpV,EAAOoV,QACrCtC,EAAG,IAAArE,OAAOzO,EAAOoV,MAAMwF,KAAKA,GAAK,MAIrC9H,EAAG,IAAArE,OAAOzO,EAAOoV,MAAM/U,KAAIyS,GAAG,IAAArE,OAAQsL,EAAcjH,GAAI,OAAK8H,KAAKA,GAAK,KAGrE,SAANnM,OAAgBzO,EAAOuW,WAAU,KAAA9H,OAAIzO,EAAOgc,QAAU,IAAM,KAAGvN,OAAGzO,EAAOuW,WAAU,KAAA9H,OAAIqE,EAAG,EAKjFmJ,EAAanK,GACfM,OAAOC,KAAKP,GAAQrD,OAAO,CAAC,KAAM,OAAQ,OAAQ,UAAW,cAAe,eAAgB,eAAgB,UAAW,kBAI3HvD,eAAegR,EAAgBhO,EAAMiO,EAAc7S,EAAI8S,EAAYC,EAAYC,EAAcC,GAElF,OAATrb,EAAAA,SAAS,IAATA,EAAAA,IAAAA,EAAAA,GAAWsb,aA4ebtR,iBACH,IAAIjK,EAASC,EAAAA,GACT2O,GAAO2F,EAAAA,EAAAA,MACPvF,EAAQhP,EAAO4O,KAAKI,MAAMwM,cAE1B7R,GAAQ4C,EAAAA,EAAAA,MACRD,EAAU,CAAE,eAAgB,mBAAoB,kBAAmB3C,EAAO,gBAAiB,aAE3FwF,EAAU,CAACnP,EAAO+P,gBAElBkJ,EAAOrI,EAAAA,GAEPxE,EAAOlK,KAAKyK,UAAU,CACtB5N,OAAQoQ,IAGZA,EAAUA,EAAQ3B,OAAOoB,EAAKO,QACzBpQ,QAAOA,GAAgC,aAAtBA,EAAOuW,aACxBlW,KAAIL,GAAU+b,EAAe/b,EAAQka,EAAKpI,WAEjC,QAAV7B,IACAA,EAAQ,UAGNxE,MAAM,2HAADgD,OAA4HwB,EAAK,wBAAwB,CAChK9C,OAAQ,OACRI,UACAF,SACD3B,MAAKC,GACGA,EAAKC,SAEXF,MAAK8C,IACF,IACIkO,EADSlO,EAAOmO,aAAaC,aACH,QAG1BJ,EAAc,QACF1c,IAAZ4c,GAAqC,OAAZA,IACzBF,EAAcpK,OAAOC,KAAKqK,IAI9Bxb,EAAAA,GAAUsb,YAAcA,CAAW,IAEpCK,OAAM9O,OAGjB,CA1hBQ+O,GAGJ,IAAI7b,EAASC,EAAAA,GACT2O,GAAO2F,EAAAA,EAAAA,WAGQ1V,IAAfuc,GAA4B,CAAC,WAAY,SAASxb,SAASqN,KAC3D2B,EAAKO,QAAU,IAInB,IAAI2M,EAAM,IAAIC,EAAAA,IAGVC,EAAW,GACf,QAAand,IAAToO,GAA+B,OAATA,IAAkB,CAAC,MAAO,WAAY,SAAU,SAASrN,SAASqN,GAAO,CAC/F,MAAMmO,QAAmB/N,EAAAA,EAAAA,IAAc,GACnC+N,IACU,OAAVA,QAAU,IAAVA,GAAAA,EAAYzb,SAAQsc,GAAOD,EAASlc,KAAKmc,KAEjD,CAEA,IAAIC,EAAmB,IAAIJ,KAAQE,GAGtB,QAAT/O,GAAkBiP,EAAiB5b,OAAS,GAC5CsO,EAAKO,QAAU,GACfP,EAAKO,QAAQrP,KAAK,CAAEwV,WAAY,KAAMnB,MAAO+H,EAAkBnB,SAAS,KACxD,WAAT9N,GAAqBqO,EAAchb,OAAS,IACnDsO,EAAKO,QAAU,GACfP,EAAKO,QAAQrP,KAAK,CAAEwV,WAAY,KAAMnB,MAAO,IAAImH,GAAgBP,SAAS,MAIzE,CAAC,MAAO,WAAY,SAAU,QAAS,cAAcnb,SAASqN,IAASiP,EAAiB5b,OAAS,GAClGsO,EAAKO,QAAQrP,KAAK,CAAEwV,WAAY,KAAMnB,MAAO+H,EAAkBnB,SAAS,IAG5E,IAAI9B,EAAOrI,EAAAA,GAGPuL,EAAY3D,OACE3Z,IADF2Z,GAC6B,OAD7BA,IAEZ2D,EAAYzN,GAIhB,IAAI0N,EAAKC,mBAAmBrB,EAAU/B,EAAKpI,QAAQ8I,KAAK,MAGpD3K,EAAQJ,EAAKI,MACbsN,EAAc,KAAVtN,EAAe,OAAgC,IAAxBA,EAAM1P,QAAQ,KAAc0P,EAAQ8J,EAAc9J,QAEtEnQ,IAAPwJ,GAA2B,OAAPA,IACpBiU,EAAI,OAASjU,EAAK,KAGjB,CAAC,aAAc,WAAY,QAAS,SAAU,UAAUzI,SAASqN,IAClEhC,GAAU,EAAMqR,EAAGtc,EAAQiN,EAAMiP,GAGrC,IAAI/M,EAAU,CAACnP,EAAO+P,gBAElBwM,EAAuB,IAER3N,EAAKS,cAAgB,IAE3B1P,SAAQ6c,SACwB3d,IAArCmB,EAAOqP,aAAamN,IAAmE,OAArCxc,EAAOqP,aAAamN,IACtED,EAAqBzc,KAAKE,EAAOqP,aAAamN,GAClD,IAGJ,IAAI3N,EAAO,GAEPA,EADoB,yBAApBD,EAAKC,KAAKC,MACH,kDAAoDF,EAAKC,KAAKE,UAE9DH,EAAKC,KAAKC,MAAQ,IAAMF,EAAKC,KAAKE,UAG7C,IAAI0N,EAAO,SACU5d,IAAjBqc,GAA+C,OAAjBA,IAC9BuB,EAAOvB,GAIE,UAATjO,GAA6B,QAATA,IACpBwP,EAAO,KAGX,IAAIC,EAAczD,EAAKpI,OACnB8L,EAAe/N,EAAKK,OAGpBA,EAAS0N,EAAa5d,QAAOiV,QAAgCnV,IAAvB6d,EAAY1I,KAAsBjV,QAAOiV,GAAqC,SAA5B0I,EAAY1I,GAAO/G,OAE3G2P,EAAmBD,EAAa5d,QAAOiV,QAAgCnV,IAAvB6d,EAAY1I,KAAsBjV,QAAOiV,GAAqC,SAA5B0I,EAAY1I,GAAO/G,OAGrH4P,EAAoBD,EAAiBxd,IAAIid,oBAAoBjd,KAAI0P,GACjE,CAACA,EAAQ,qBAAsBA,EAAQ,sBAAuBA,EAAQ,uBAAwBA,EAAQ,sBAAuBA,EAAQ,qBAAqB1P,KAAI4P,GAAK,oBAAAxB,OAAwBsB,EAAK,KAAAtB,OAAIwB,KAAS2K,KAAK,OACpNA,KAAK,KAEP,GAAa,UAAT1M,GAA6B,aAATA,EASpB,GARAgC,EAAS0N,EAAa5d,QAAOiV,QAAgCnV,IAAvB6d,EAAY1I,KAE7C/E,EAAOrP,SAAS,0BACjBqP,EAAOnP,KAAK,yBAEhB8c,EAAmBD,EAAa5d,QAAOiV,QAAgCnV,IAAvB6d,EAAY1I,KAC5D6I,EAAoB,QAEDhe,IAAfuc,GAA2C,OAAfA,GAA8C,KAAb,OAAVA,QAAU,IAAVA,OAAU,EAAVA,EAAY9a,QAC/D6O,EAAU,OACP,CACH,IAAI2N,EAAe,CAAC,CAAExH,WAAY,KAAMnB,MAAOiH,EAAYL,SAAS,IACpE5L,EAAUA,EAAQ3B,OAAOsP,EACpB/d,QAAOA,GAAgC,aAAtBA,EAAOuW,YAA6BvW,EAAOoV,MAAM7T,OAAS,IAC3ElB,KAAIL,GAAU+b,EAAe/b,EAAQka,EAAKpI,UAASrD,OAAO+O,EAAqBnd,KAAIL,GAAU+b,EAAe/b,EAAQka,EAAKpI,YAC1HwK,GAAgBA,EAAa/a,OAAS,IACtC6O,EAAU,IAAIA,KAAYkM,GAElC,MAEAlM,EAAUA,EAAQ3B,OAAOoB,EAAKO,QACzBpQ,QAAOA,GAAgC,aAAtBA,EAAOuW,YAA6BvW,EAAOoV,MAAM7T,OAAS,IAC3ElB,KAAIL,GAAU+b,EAAe/b,EAAQka,EAAKpI,UAASrD,OAAO+O,EAAqBnd,KAAIL,GAAU+b,EAAe/b,EAAQka,EAAKpI,YAGlI,IAAIkM,EAAe,gBAAkBrE,EAAc,GAMnD,GAHAvJ,EAAUA,EAAQ3B,OAAOoB,EAAKO,QAAQpQ,QAAOA,GAAgC,aAAtBA,EAAOuW,aAA2BlW,KAAIL,IAAUqP,EAAAA,EAAAA,SAAQrP,EAAOoV,OAASpV,EAAOoV,MAAMwF,KAAK,KAAO5a,EAAOoV,UAGnH,IAAxClF,EAAO3P,QAAQ,oBAA4B,CAC3C,IAAI0d,EAAcpO,EAAKO,QAAQhQ,MAAKJ,GAAgC,qBAAtBA,EAAOuW,aAEjD2H,OAAyBpe,IAAhBme,GAA6B5O,EAAAA,EAAAA,SAAQ4O,EAAY7I,OAAS6I,EAAY7I,MAAMwF,KAAK,KAAOqD,EAAY7I,MAASnU,EAAOgQ,WAEjI+M,GAAgB,uCAChBA,GAAgB,uCAChBA,GAAgB,uCAChBA,GAAgB,oCAAsCV,mBAAmBY,EAC7E,CAEA,IAEI3Q,EAAU,CAAE,eAAgB,mBAAoB,mBAFxCC,EAAAA,EAAAA,MAEkE,gBAAiB,aAE3F2Q,EAAKb,mBAAmBrD,EAAehZ,EAAQiZ,IAC/CjF,EAAQ,CAAC,EAEb/E,EAAOtP,SAAQkS,IAEX,IAAIsL,EAAQzE,EAAc,EAC1B1E,EAAMnC,GAAO,CACT5E,KAAM,QACN6B,MAAO+C,EACPhD,KAAc,YAARgD,EAAoB,kBAAehT,EACzCue,OAAQ,CACJC,YAAaxL,GAEjBsL,QACH,IAGLN,EAA0C,KAAtBA,EAA2B,GAAK,IAAMA,EAE7C,WAAT5P,IACAqP,EAAI,OAIR,IAAIpc,EAAQ8B,aAAaC,QAAQ,KACjC,QAAcpD,IAAVqB,GAAiC,OAAVA,IACvBA,EAAQgC,KAAKC,OAAMC,EAAAA,EAAAA,IAAuBlC,MAErC1B,EAAAA,EAAAA,IAAS0B,EAAMzB,MAAOuB,EAAOtB,KAAM,UAAqB,UAATuO,GAA6B,cAATA,GAAiC,WAATA,GAA8B,eAATA,IAE7GlN,EAAAA,EAAAA,OAAoB,CACpB,IAAIa,GAASF,EAAAA,EAAAA,MAGT4c,EAAQ,GACZ,IAAK,IAAIC,EAAI,EAAGA,EAAI3c,EAAON,OAAQid,IAC3BA,EAAI,IAAM3c,EAAON,OACjBgd,GAAS,sBAAyB1c,EAAO2c,GAAK,IAE9CD,GAAS,sBAAyB1c,EAAO2c,GAAK,QAMlDjB,EADM,KAANA,QAAkBzd,IAANyd,GAAyB,OAANA,GAAoB,QAANA,EACzCgB,EAEA,IAAOhB,EAAI,UAAagB,EAAQ,GAE5C,CAIR,IAAIlR,EAAOlK,KAAKyK,UAAU,CACtBqC,MAAOsN,EACPvd,OAAQoQ,EACR6E,MAAOA,IAIPwJ,EAAW,OACM3e,IAAjBqc,GAA+C,OAAjBA,GAAkC,WAATjO,IACvDuQ,EAAWtC,EAAe,IAC1BuB,EAAO,KAGE,WAATxP,IACAwP,EAAOvB,GAGPsC,EAAW,IACXA,EAAW,GAGf,IAAIjQ,QAAe/C,MAAM,gFAAAgD,OAAgF0P,EAAE,QAAA1P,OAAO0P,EAAE,WAAA1P,OAAUgQ,EAAQ,+DAAAhQ,OAA8DqB,EAAI,QAAArB,OAAO4O,EAAE,UAAA5O,OAASiP,EAAI,iCAAAjP,OAAgCuP,GAAiBF,EAAmB,CAC9R3Q,OAAQ,OACRI,UACAF,SACDwP,OAAM9O,IACLN,EAAAA,EAAQ1M,MAAK6C,EAAAA,EAAAA,KAACqK,EAAAA,EAAO,CAACC,KAAK,QAAQC,UAAQ,EAACC,UAAQ,EAAAzK,SAAEoK,IAAiB,IAS3E,OAJsB,MAAlBS,EAAOsJ,SACP4G,EAAAA,EAAAA,YAGSlQ,EAAO5C,OAAOF,MAAKR,eA8S7BA,eAA6ByC,EAAUO,GAC1C,IAAIyQ,EAAO,GACPC,EAAY,EACZ1O,EAAS,CAAC,EACVqN,EAAI9D,OACE3Z,IAANyd,GAAyB,OAANA,IACnB9D,EAAMD,eAAiB+D,EAAE/D,gBAG7B,GAAI7L,GAAYA,EAASA,SAAU,CAsC/B,GArCIA,EAASA,SAASgR,OAClBA,EAAOhR,EAASA,SAASgR,MAEzBhR,EAASA,SAASkR,WAClBD,EAAYjR,EAASA,SAASkR,UAiC9BlR,EAASuC,QAAU,CAAC,WAAY,SAASrP,SAASqN,GAAO,CAEzD,IAAI4Q,EAAanR,EAASuC,OAE1BkC,OAAOC,KAAKyM,GAAY9e,QAAO8S,GAAe,UAARA,IACjCzS,KAAI4d,IACD,IAAIhJ,EAAQ6J,EAAWb,GAYvB,OAVK/N,EAAO+N,KACR/N,EAAO+N,GAAe,IAG1BhJ,EAAM8J,QAAQne,SAASoe,IACnB9O,EAAO+N,GAAald,KAAK,CACrB+R,IAAKkM,EAAOlM,IAAM,GAClBmM,MAAOD,EAAOC,OAChB,IAEChK,CAAK,IAEpB2E,EAAY1J,CAChB,CAEAuJ,EAAMkF,KAAOA,EACblF,EAAMmF,UAAYA,CACtB,CACA,OAAOnF,CACX,CAvXqByF,CAAcvT,EAAMuC,IAEzC,CAIO,MAAMiR,EAAWjU,UAEpB,IAEIqC,EAAU,CAAE,eAAgB,mBAAoB,mBAFxCC,EAAAA,EAAAA,MAEkE,gBAAiB,aAE3FyC,EAAQ,CAAEA,MAAO,MAAQ3G,GAE7B,aAAamC,MAAM,yCAA0C,CACzD0B,OAAQ,OACRI,QAASA,EACTF,KAAMlK,KAAKyK,UAAUqC,KACtBvE,MAAKC,GAAQA,EAAKC,SAChBF,MAAKiC,GACa,OAARA,QAAQ,IAARA,OAAQ,EAARA,EAAUA,UACnB,EAIHzC,eAAegB,EAAUkT,EAAQC,EAAaC,EAASpR,EAAMiP,GAChE,IAAIlc,EAASC,EAAAA,GACT2O,GAAO2F,EAAAA,EAAAA,MAWX,QATgB1V,IAAZwf,GAAqC,OAAZA,QACZxf,IAAToO,GAA+B,OAATA,GACT,aAATA,IACAjN,EAASqe,GAMjBnC,IAAoC,OAAhBA,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkB5b,QAAS,EAC/CsO,EAAKO,QAAQrP,KAAK,CAAEwV,WAAY,KAAMnB,MAAO+H,EAAkBnB,SAAS,QACrE,CAEH,IAAIe,EAAMC,EAAAA,GAGNC,EAAWjQ,EAAAA,IAAY,GAC3B,SAAclN,IAAToO,GAA+B,OAATA,IAAkB,CAAC,MAAO,WAAY,SAAU,SAASrN,SAASqN,KAA8B,IAApB+O,EAAS1b,OAAc,CAC1H,MAAM8a,QAAmB/N,EAAAA,EAAAA,IAAc,GACnC+N,IACU,OAAVA,QAAU,IAAVA,GAAAA,EAAYzb,SAAQsc,GAAOD,EAASlc,KAAKmc,KAEjD,CAEA,IAAIqC,EAA0B,IAAIxC,KAAQE,GAGtCsC,EAAwBhe,OAAS,GACjCsO,EAAKO,QAAQrP,KAAK,CAAEwV,WAAY,KAAMnB,MAAOmK,EAAyBvD,SAAS,GAEvF,CAEA,IAAI9B,EAAOrI,EAAAA,GACP8L,EAAczD,EAAKpI,OAEnBmD,EAAQ,CAAC,EAGT1H,EAAU,CAAE,eAAgB,mBAAoB,mBAFxCC,EAAAA,EAAAA,MAEkE,gBAAiB,aAE3FyC,EAAQJ,EAAKI,MACbsN,EAAc,KAAVtN,EAAe,OAAgC,IAAxBA,EAAM1P,QAAQ,KAAc0P,EAAQ8J,EAAc9J,QAE7DnQ,IAAhBuf,GAA6C,OAAhBA,GAAwC,KAAhBA,IACrD9B,EAAI8B,GAGR,IAyBIhS,EAzBAuQ,EAAe/N,EAAKK,OAGpBA,EAAS0N,EAAa5d,QAAOiV,QAAgCnV,IAAvB6d,EAAY1I,KAAsBjV,QAAOiV,GAAqC,SAA5B0I,EAAY1I,GAAO/G,OAE3G2P,EAAmBD,EAAa5d,QAAOiV,QAAgCnV,IAAvB6d,EAAY1I,KAAsBjV,QAAOiV,GAAmB,eAAVA,GAAsD,SAA5B0I,EAAY1I,GAAO/G,OAE/I4P,EAAoBD,EAAiBxd,IAAIid,oBAAoBjd,KAAI0P,GACjE,CAACA,EAAQ,qBAAsBA,EAAQ,sBAAuBA,EAAQ,uBAAwBA,EAAQ,sBAAuBA,EAAQ,qBAAqB1P,KAAI4P,GAAK,oBAAAxB,OAAwBsB,EAAK,KAAAtB,OAAIwB,KAAS2K,KAAK,OACpNA,KAAK,KAEP1K,EAAOtP,SAAQkS,IAEX,IAAIsL,EAAQzE,EAAc,EAC1B1E,EAAMnC,GAAO,CACT5E,KAAM,QACN6B,MAAO+C,EACPhD,KAAc,YAARgD,EAAoB,kBAAehT,EACzCue,OAAQ,CACJC,YAAaxL,GAEjBsL,QACH,IAKL,IAAIhO,EAAU,CAACnP,EAAO+P,gBAElBwM,EAAuB,IAGR3N,EAAKS,cAAgB,IAE3B1P,SAAQ6c,IAAgB,IAAD+B,EAAAC,OACH3f,KAAnB,QAAN0f,EAAAve,SAAM,IAAAue,OAAA,EAANA,EAAQlP,eAAuD,QAAnB,QAANmP,EAAAxe,SAAM,IAAAwe,OAAA,EAANA,EAAQnP,oBACLxQ,IAArCmB,EAAOqP,aAAamN,IAAmE,OAArCxc,EAAOqP,aAAamN,IACtED,EAAqBzc,KAAKE,EAAOqP,aAAamN,GAEtD,IAGJrN,EAAUA,EAAQ3B,OAAOoB,EAAKO,QACzBpQ,QAAOA,GAAgC,aAAtBA,EAAOuW,aACxBlW,KAAIL,GAAU+b,EAAe/b,EAAQka,EAAKpI,UAASrD,OAAO+O,EAAqBnd,KAAIL,GAAU+b,EAAe/b,EAAQka,EAAKpI,YAE9H1B,EAAUA,EAAQ3B,OAAOoB,EAAKO,QAAQpQ,QAAOA,GAAgC,aAAtBA,EAAOuW,aAA2BlW,KAAIL,IAAUqP,EAAAA,EAAAA,SAAQrP,EAAOoV,OAASpV,EAAOoV,MAAMwF,KAAK,KAAO5a,EAAOoV,SAG/J,IAAIjU,EAAQ8B,aAAaC,QAAQ,KACjC,QAAcpD,IAAVqB,GAAiC,OAAVA,IACvBA,EAAQgC,KAAKC,OAAMC,EAAAA,EAAAA,IAAuBlC,MACrC1B,EAAAA,EAAAA,IAAS0B,EAAMzB,MAAOuB,EAAOtB,KAAM,UAAqB,UAATuO,GAA6B,cAATA,GAAiC,WAATA,IAExFlN,EAAAA,EAAAA,OAAoB,CACpB,IAAIa,GAASF,EAAAA,EAAAA,MACT4c,EAAQ,GACZ,IAAK,IAAIC,EAAI,EAAGA,EAAI3c,EAAON,OAAQid,IAC3BA,EAAI,IAAM3c,EAAON,OACjBgd,GAAS,sBAAyB1c,EAAO2c,GAAK,IAE9CD,GAAS,sBAAyB1c,EAAO2c,GAAK,QAItDjB,EAAIgB,CACR,CAKJlR,OADYvN,IAAZsQ,GAAqC,OAAZA,EAClBjN,KAAKyK,UAAU,CAClBqC,MAAOsN,EACPvd,OAAQoQ,EACR6E,MAAOA,IAGJ9R,KAAKyK,UAAU,CAClBqC,MAAOsN,IAIf,IAAIY,EAAKb,mBAAmBrD,EAAehZ,EAAQiZ,IAE/CwF,EAAY,CAAC,EACjB5B,EAA0C,KAAtBA,EAA2B,GAAK,IAAMA,QAEpDrS,MAAM,gFAAAgD,OAAgF0P,EAAE,QAAA1P,OAAO0P,EAAE,uFAAwFL,EAAmB,CAC9M3Q,OAAQ,OACRI,QAASA,EACTF,KAAMA,IACP3B,MAAKC,GAAQA,EAAKC,SAChBF,MAAKiC,IAEF,GAAIA,EAASgP,eAELhP,EAASgP,aAAaC,eACtB8C,EAAY/R,EAASgP,aAAaC,cAGlCjP,EAASgP,aAAagD,eAAe,CACrC,IAAIA,EAAgBhS,EAASgP,aAAagD,cAC1CvN,OAAOC,KAAKsN,GACP3f,QAAO4f,GAAeA,EAAYrf,QAAQ,KAAO,IACjDK,SAAQgf,IACL,IAAIC,EAASD,EAAY9I,MAAM,KAI3BmH,EAHoB4B,EAAO,GAGK3b,QAAQ,eAAgB,IAExD4O,EAAM+M,EAAO,GACbZ,EAAQU,EAAcC,GAErBF,EAAUzB,KACXyB,EAAUzB,GAAe,IAG7ByB,EAAUzB,GAAald,KAAK,CAAE+R,MAAKmM,SAAQ,GAEvD,CAIJ,GAAItR,EAASuC,OAAQ,CACjB,IAAI4O,EAAanR,EAASuC,OAC1BkC,OAAOC,KAAKyM,GAAY9e,QAAO8S,GAAe,UAARA,IACjCzS,KAAI4d,IACD,IAAIhJ,EAAQ6J,EAAWb,GAYvB,OAVKyB,EAAUzB,KACXyB,EAAUzB,GAAe,IAG7BhJ,EAAM8J,QAAQne,SAASoe,IACnBU,EAAUzB,GAAald,KAAK,CACxB+R,IAAKkM,EAAOlM,IAAM,GAClBmM,MAAOD,EAAOC,OAChB,IAEChK,CAAK,GAExB,KAG8B,IAAlC7C,OAAOC,KAAKqN,GAAWne,SACvBqY,EAAY8F,EA0BpB,CAmIOxU,eAAe4U,EAAgBpC,EAAMqC,GAGxC,IAAI9e,EAASC,EAAAA,GAET2O,GAAO2F,EAAAA,EAAAA,MACP0E,EAAOrI,EAAAA,GAGPuL,EAAY3D,OACE3Z,IADF2Z,GAC6B,OAD7BA,IAEZ2D,EAAYzN,GAKhB,IAAI0N,EAAKC,mBAAmBrB,EAAU/B,EAAKpI,QAAQ8I,KAAK,MAGpD3K,EAAQJ,EAAKI,MACbsN,EAAc,KAAVtN,EAAe,OAAgC,IAAxBA,EAAM1P,QAAQ,KAAc0P,EAAQ8J,EAAc9J,GAE7EG,EAAU,GAEVoN,EAAuB,GAK3B3N,EAAKO,QAAU,GACfP,EAAKO,QAAQrP,KAAK,CAAEwV,WAAY,iBAAkBnB,MAAO2K,EAAc/D,SAAS,IAChFnM,EAAKO,QAAQrP,KAAK,CAAEwV,WAAY,iBAAkBnB,MAAO,CAAC,WAAY4G,SAAS,IAC/EnM,EAAKO,QAAQrP,KAAK,CAAEwV,WAAY,iBAAkBnB,MAAO,CAAC,mBAAoB4G,SAAS,IANpE,GAQNpb,SAAQ6c,SACwB3d,IAArCmB,EAAOqP,aAAamN,IAAmE,OAArCxc,EAAOqP,aAAamN,IACtED,EAAqBzc,KAAKE,EAAOqP,aAAamN,GAClD,IAGJ,IAAI3N,EAAOD,EAAKC,KAAKC,MAAQ,IAAMF,EAAKC,KAAKE,UAEzC2N,EAAczD,EAAKpI,OACnB8L,EAAe/N,EAAKK,OAGpBA,EAAS0N,EAAa5d,QAAOiV,QAAgCnV,IAAvB6d,EAAY1I,KAAsBjV,QAAOiV,GAAqC,SAA5B0I,EAAY1I,GAAO/G,OAE3G2P,EAAmBD,EAAa5d,QAAOiV,QAAgCnV,IAAvB6d,EAAY1I,KAAsBjV,QAAOiV,GAAqC,SAA5B0I,EAAY1I,GAAO/G,OAGrH4P,EAAoBD,EAAiBxd,IAAIid,oBAAoBjd,KAAI0P,GACjE,CAACA,EAAQ,qBAAsBA,EAAQ,sBAAuBA,EAAQ,uBAAwBA,EAAQ,sBAAuBA,EAAQ,qBAAqB1P,KAAI4P,GAAK,oBAAAxB,OAAwBsB,EAAK,KAAAtB,OAAIwB,KAAS2K,KAAK,OACpNA,KAAK,KAEPxK,EAAUA,EAAQ3B,OAAOoB,EAAKO,QACzBpQ,QAAOA,GAAgC,aAAtBA,EAAOuW,aACxBlW,KAAIL,GAAU+b,EAAe/b,EAAQka,EAAKpI,UAASrD,OAAO+O,EAAqBnd,KAAIL,GAAU+b,EAAe/b,EAAQka,EAAKpI,YAE9H,IAAIkM,EAAe,gBAAkBrE,EAAc,GAKnD,GAHAvJ,EAAUA,EAAQ3B,OAAOoB,EAAKO,QAAQpQ,QAAOA,GAAgC,aAAtBA,EAAOuW,aAA2BlW,KAAIL,IAAUqP,EAAAA,EAAAA,SAAQrP,EAAOoV,OAASpV,EAAOoV,MAAMwF,KAAK,KAAO5a,EAAOoV,UAGnH,IAAxClF,EAAO3P,QAAQ,oBAA4B,CAC3C,IAAI0d,EAAcpO,EAAKO,QAAQhQ,MAAKJ,GAAgC,qBAAtBA,EAAOuW,aAEjD2H,OAAyBpe,IAAhBme,GAA6B5O,EAAAA,EAAAA,SAAQ4O,EAAY7I,OAAS6I,EAAY7I,MAAMwF,KAAK,KAAOqD,EAAY7I,MAASnU,EAAOgQ,WAEjI+M,GAAgB,uCAChBA,GAAgB,uCAChBA,GAAgB,uCAChBA,GAAgB,oCAAsCV,mBAAmBY,EAC7E,CAEA,IACI3Q,EAAU,CAAE,eAAgB,mBAAoB,mBADxCC,EAAAA,EAAAA,MACkE,gBAAiB,aAE3F2Q,EAAKb,mBAAmBrD,EAAehZ,EAAQiZ,IAC/CjF,EAAQ,CAAC,EAEb/E,EAAOtP,SAAQkS,IAEX,IAAIsL,EAAQzE,EAAc,EAC1B1E,EAAMnC,GAAO,CACT5E,KAAM,QACN6B,MAAO+C,EACPhD,KAAc,YAARgD,EAAoB,kBAAehT,EACzCue,OAAQ,CACJC,YAAaxL,GAEjBsL,QACH,IAGLN,EAA0C,KAAtBA,EAA2B,GAAK,IAAMA,EAE1D,IAWIhL,EAXAzF,EAAOlK,KAAKyK,UAAU,CACtBqC,MAAOsN,EACPvd,OAAQoQ,EACR6E,MAAOA,IASX,OANA5H,EAAOlK,KAAKyK,UAAU,CAClB,MAAS,MACT,OAAUwC,UAID3E,MAAM,gFAAAgD,OAAgF0P,EAAE,QAAA1P,OAAO0P,EAAE,+DAAA1P,OAA8DqB,EAAI,QAAArB,OAAO4O,EAAE,UAAA5O,OAASiP,EAAI,iCAAAjP,OAAgCuP,GAAiBF,EAAmB,CACtQ3Q,OAAQ,OACRI,UACAF,SACD3B,MAAKC,GAAQA,EAAKC,SAChBF,MAAKR,UACF4H,EAAML,QAEOK,KAEhB+J,OAAM9O,IACHN,EAAAA,EAAQ1M,MAAK6C,EAAAA,EAAAA,KAACqK,EAAAA,EAAO,CAACC,KAAK,QAAQC,UAAQ,EAACC,UAAQ,EAAAzK,SAAEoK,IAAiB,GAEnF,CAGO7C,eAAe8U,EAAc1W,EAAI4E,GACpC,IAAItD,GAAQ4C,EAAAA,EAAAA,MACRyS,EAAS,IAAIjD,EAAAA,IACjBiD,EAAOlf,KAAKuI,GACZ,IAAIiE,EAAU,CAAE,eAAgB,mBAAoB,kBAAmB3C,EAAO,gBAAiB,aAE3F/I,GAASF,EAAAA,EAAAA,MAGT4c,EAAQ,GACZ,GAAa,gBAATrQ,EACA,IAAK,IAAIsQ,EAAI,EAAGA,EAAI3c,EAAON,OAAQid,IAC3BA,EAAI,IAAM3c,EAAON,OACjBgd,GAAS,sBAAyB1c,EAAO2c,GAAK,IAE9CD,GAAS,sBAAyB1c,EAAO2c,GAAK,aAKtDD,EAAQ,MAGZ,IAAIlR,EAAOlK,KAAKyK,UAAU,CACtBqC,MAAO,iBAAmB3G,EAAK,sBAAwB2W,EAAOrF,KAAK,QAAU,WAAa2D,EAAQ,IAClGve,OAAQ,CAAC,iBAAmBigB,EAAOrF,KAAK,QAAU,IAC9C,mDACA,8DAER,aAAanP,MAAM,sDAAuD,CACtE0B,OAAQ,OACRI,QAASA,EACTF,KAAMA,IACP3B,MAAKC,GAAQA,EAAKC,SAChBF,MAAKR,UACF,QAA0BpL,IAAtB6N,EAASA,UAAgD,OAAtBA,EAASA,SAC5C,OAAOA,EAASA,SAASgR,KAAKpd,MAClC,GAEZ,CAIO2J,eAAeiB,IAClB,IAAIlL,EAASC,EAAAA,GACT2O,GAAO2F,EAAAA,EAAAA,MACX3F,EAAKO,QAAU,GAGf,IAAI2M,EAAMC,EAAAA,GAGNC,EAAWjQ,EAAAA,IAAY,GAC3B,GAAwB,IAApBiQ,EAAS1b,OAAc,CACvB,MAAM8a,QAAmB/N,EAAAA,EAAAA,IAAc,GACnC+N,IACU,OAAVA,QAAU,IAAVA,GAAAA,EAAYzb,SAAQsc,GAAOD,EAASlc,KAAKmc,KAEjD,CAEA,IAAIqC,EAA0B,IAAIxC,KAAQE,GAGtCsC,EAAwBhe,OAAS,GACjCsO,EAAKO,QAAQrP,KAAK,CAAEwV,WAAY,KAAMnB,MAAOmK,EAAyBvD,SAAS,IAGnF,IAmCI3O,EAnCA6M,EAAOrI,EAAAA,GACP8L,EAAczD,EAAKpI,OAEnBmD,EAAQ,CAAC,EAGT1H,EAAU,CAAE,eAAgB,mBAAoB,mBAFxCC,EAAAA,EAAAA,MAEkE,gBAAiB,aAE3F+P,EAAI,MAEJK,EAAe/N,EAAKK,OAGpBA,EAAS0N,EAAa5d,QAAOiV,QAAgCnV,IAAvB6d,EAAY1I,KAAsBjV,QAAOiV,GAAqC,SAA5B0I,EAAY1I,GAAO/G,OAE3G2P,EAAmBD,EAAa5d,QAAOiV,QAAgCnV,IAAvB6d,EAAY1I,KAAsBjV,QAAOiV,GAAmB,eAAVA,GAAsD,SAA5B0I,EAAY1I,GAAO/G,OAE/I4P,EAAoBD,EAAiBxd,IAAIid,oBAAoBjd,KAAI0P,GACjE,CAACA,EAAQ,qBAAsBA,EAAQ,sBAAuBA,EAAQ,uBAAwBA,EAAQ,sBAAuBA,EAAQ,qBAAqB1P,KAAI4P,GAAK,oBAAAxB,OAAwBsB,EAAK,KAAAtB,OAAIwB,KAAS2K,KAAK,OACpNA,KAAK,KAEP1K,EAAOtP,SAAQkS,IAEX,IAAIsL,EAAQzE,EAAc,EAC1B1E,EAAMnC,GAAO,CACT5E,KAAM,QACN6B,MAAO+C,EACPhD,KAAc,YAARgD,EAAoB,kBAAehT,EACzCue,OAAQ,CACJC,YAAaxL,GAEjBsL,QACH,IAKL,IAAIhO,EAAU,CAACnP,EAAO+P,gBAElBwM,EAAuB,IAGR3N,EAAKS,cAAgB,IAE3B1P,SAAQ6c,SACY3d,KAAnB,OAANmB,QAAM,IAANA,OAAM,EAANA,EAAQqP,eAAuD,QAAnB,OAANrP,QAAM,IAANA,OAAM,EAANA,EAAQqP,oBACLxQ,IAArCmB,EAAOqP,aAAamN,IAAmE,OAArCxc,EAAOqP,aAAamN,IACtED,EAAqBzc,KAAKE,EAAOqP,aAAamN,GAEtD,IAGJrN,EAAUA,EAAQ3B,OAAOoB,EAAKO,QACzBpQ,QAAOA,GAAgC,aAAtBA,EAAOuW,aACxBlW,KAAIL,GAAU+b,EAAe/b,EAAQka,EAAKpI,UAASrD,OAAO+O,EAAqBnd,KAAIL,GAAU+b,EAAe/b,EAAQka,EAAKpI,YAE9H1B,EAAUA,EAAQ3B,OAAOoB,EAAKO,QAAQpQ,QAAOA,GAAgC,aAAtBA,EAAOuW,aAA2BlW,KAAIL,IAAUqP,EAAAA,EAAAA,SAAQrP,EAAOoV,OAASpV,EAAOoV,MAAMwF,KAAK,KAAO5a,EAAOoV,SAG/J,IAAIjU,EAAQ8B,aAAaC,QAAQ,KACjC,QAAcpD,IAAVqB,GAAiC,OAAVA,IACvBA,EAAQgC,KAAKC,OAAMC,EAAAA,EAAAA,IAAuBlC,MACrC1B,EAAAA,EAAAA,IAAS0B,EAAMzB,MAAOuB,EAAOtB,KAAM,WAEhCqB,EAAAA,EAAAA,OAAoB,CACpB,IAAIa,GAASF,EAAAA,EAAAA,MACT4c,EAAQ,GACZ,IAAK,IAAIC,EAAI,EAAGA,EAAI3c,EAAON,OAAQid,IAC3BA,EAAI,IAAM3c,EAAON,OACjBgd,GAAS,sBAAyB1c,EAAO2c,GAAK,IAE9CD,GAAS,sBAAyB1c,EAAO2c,GAAK,QAItDjB,EAAIgB,CACR,CAKJlR,OADYvN,IAAZsQ,GAAqC,OAAZA,EAClBjN,KAAKyK,UAAU,CAClBqC,MAAOsN,EACPvd,OAAQoQ,EACR6E,MAAOA,IAGJ9R,KAAKyK,UAAU,CAClBqC,MAAOsN,IAIf,IAAIY,EAAKb,mBAAmBrD,EAAehZ,EAAQiZ,IAE/CwF,EAAY,CAAC,EACjB5B,EAA0C,KAAtBA,EAA2B,GAAK,IAAMA,QAEpDrS,MAAM,gFAAAgD,OAAgF0P,EAAE,QAAA1P,OAAO0P,EAAE,uFAAwFL,EAAmB,CAC9M3Q,OAAQ,OACRI,QAASA,EACTF,KAAMA,IACP3B,MAAKC,GAAQA,EAAKC,SAChBF,MAAKiC,IAEF,GAAIA,EAASgP,eAELhP,EAASgP,aAAaC,eACtB8C,EAAY/R,EAASgP,aAAaC,cAGlCjP,EAASgP,aAAagD,eAAe,CACrC,IAAIA,EAAgBhS,EAASgP,aAAagD,cAC1CvN,OAAOC,KAAKsN,GACP3f,QAAO4f,GAAeA,EAAYrf,QAAQ,KAAO,IACjDK,SAAQgf,IACL,IAAIC,EAASD,EAAY9I,MAAM,KAI3BmH,EAHoB4B,EAAO,GAGK3b,QAAQ,eAAgB,IAExD4O,EAAM+M,EAAO,GACbZ,EAAQU,EAAcC,GAErBF,EAAUzB,KACXyB,EAAUzB,GAAe,IAG7ByB,EAAUzB,GAAald,KAAK,CAAE+R,MAAKmM,SAAQ,GAEvD,CAIJ,GAAItR,EAASuC,OAAQ,CACjB,IAAI4O,EAAanR,EAASuC,OAC1BkC,OAAOC,KAAKyM,GAAY9e,QAAO8S,GAAe,UAARA,IACjCzS,KAAI4d,IACD,IAAIhJ,EAAQ6J,EAAWb,GAYvB,OAVKyB,EAAUzB,KACXyB,EAAUzB,GAAe,IAG7BhJ,EAAM8J,QAAQne,SAASoe,IACnBU,EAAUzB,GAAald,KAAK,CACxB+R,IAAKkM,EAAOlM,IAAM,GAClBmM,MAAOD,EAAOC,OAChB,IAEChK,CAAK,GAExB,KAG8B,IAAlC7C,OAAOC,KAAKqN,GAAWne,SAEvBsY,EAAe6F,EAEvB,C,gKC9qCW1C,EAAQ,GACqB,IAAIjb,IAI5C,SAASyL,IACL,MAAM0S,EAAiBjd,aAAaC,QAAQ,KAC5C,OAAOgd,GAAiB7c,EAAAA,EAAAA,IAAuB6c,GAAkB,IACrE,CAGA,SAASC,IAA8D,IAAnDC,EAAWhT,UAAA7L,OAAA,QAAAzB,IAAAsN,UAAA,GAAAA,UAAA,GAAG,mBAAoBiT,EAAOjT,UAAA7L,OAAA,QAAAzB,IAAAsN,UAAA,GAAAA,UAAA,GAAG,KAC5D,MAAO,CACH,kBAAmBI,IACnB,eAAgB6S,EAAO,GAAA5R,OAAM2R,EAAW,cAAA3R,OAAa4R,GAAYD,EAEzE,CAGA,MAAME,EAAc,SAACjS,GAA4B,IAAnBH,EAAId,UAAA7L,OAAA,QAAAzB,IAAAsN,UAAA,GAAAA,UAAA,GAAG,OACjCK,EAAAA,EAAQC,QACRD,EAAAA,EAAQ1M,MAAK6C,EAAAA,EAAAA,KAACqK,EAAAA,EAAO,CAACC,KAAMA,EAAMC,UAAQ,EAACC,UAAQ,EAAAzK,SAAE0K,IACzD,EAGOnD,eAAeqV,IAClB,IACI,MAAM5S,QAAiBlC,MAAM,oCAAqC,CAAE8B,QAAS4S,MAC7E,GAAwB,MAApBxS,EAASmK,OAET,YADA4G,EAAAA,EAAAA,MAGJ,MAAMlQ,QAAeb,EAAS/B,OAC1B4C,EAAOjN,OAAS,GAAGif,EAAYhS,EACvC,CAAE,MAAOT,GACLC,QAAQD,MAAM,4BAA6BA,EAC/C,CACJ,CAGO7C,eAAea,IAClB,IACI,MAAM4B,QAAiBlC,MAAM,6BAA8B,CAAE8B,QAAS4S,MAEtE,OADAnD,QAAcrP,EAAS/B,MAE3B,CAAE,MAAOmC,GAEL,OADAC,QAAQD,MAAM,2BAA4BA,GACnC,EACX,CACJ,CAEO7C,eAAeuV,IAClB,IAEI,aADuBhV,MAAM,wBAAyB,CAAE8B,QAAS4S,OACjDvU,MACpB,CAAE,MAAOmC,GAEL,OADAC,QAAQD,MAAM,2BAA4BA,GACnC,EACX,CACJ,CAGO7C,eAAewV,EAAeC,GACjC3D,EAAQ,IAAI,IAAIjb,IAAI,IAAIib,KAAU2D,KAClC,UACUlV,MAAM,6BAA8B,CACtC8B,QAAS4S,IACThT,OAAQ,OACRE,KAAMlK,KAAKyK,UAAU+S,IAE7B,CAAE,MAAO5S,GACLC,QAAQD,MAAM,6BAA8BA,EAChD,CACA,OAAOiP,CACX,CAGO9R,eAAe0V,EAAgBjS,GAClCqO,EAAQ,IAAIA,EAAMhd,QAAOsJ,IAAOqF,EAAM9N,SAASyI,MAC/C,IACIgX,EAAY,qBAAsB,eACX7U,MAAM,0BAA2B,CACpD0B,OAAQ,SACRI,QAAS4S,IACT9S,KAAMlK,KAAKyK,UAAUe,MAGZsJ,IACTqI,EAAY3R,EAAMpN,OAAS,EAAI,qBAAuB,gBAAiB,UAE/E,CAAE,MAAOwM,GACLC,QAAQD,MAAM,2BAA4BA,EAC9C,CAAC,QACGN,EAAAA,EAAQC,OACZ,CACJ,CAGOxC,eAAesV,EAAY7R,GAC9BqO,EAAQ,IAAIA,EAAMhd,QAAOsJ,IAAOqF,EAAM9N,SAASyI,MAC/C,IACI,MAAMuX,EAAU,CAAElS,MAAOA,EAAMtO,KAAI6O,IAAI,CAAO5F,GAAI4F,EAAM4R,SAAU,CAAEC,SAAU,YAAaC,WAAY,oBAMvG,WALuBvV,MAAM,mCAAoC,CAC7D0B,OAAQ,SACRI,QAAS4S,EAAW,mBAAoB,SACxC9S,KAAMlK,KAAKyK,UAAUiT,MAEX5I,GACV,KAAM,CAAEgJ,YAAatS,EAE7B,CAAE,MAAOZ,GACL,KAAM,CAAEkT,YAAatS,EACzB,CAAC,QACGlB,EAAAA,EAAQC,OACZ,CACJ,CAGOxC,eAAegW,EAAWhS,GAC7B,IACIoR,EAAY,mBAAoB,QAChC,MAAMO,EAAU,CAAElS,MAAO,CAAC,CAAErF,GAAI4F,EAAM4R,SAAU,CAAEC,SAAU,YAAaC,WAAY,yBAC9DvV,MAAM,mCAAoC,CAC7D0B,OAAQ,SACRI,QAAS4S,IACT9S,KAAMlK,KAAKyK,UAAUiT,MAGZ5I,IACTqI,EAAY,eAAgB,UAEpC,CAAE,MAAOvS,GACLC,QAAQD,MAAM,yBAA0BA,EAC5C,CAAC,QACGN,EAAAA,EAAQC,OACZ,CACJ,C,6XCjIO,MAAM4K,EAAU,IAAIC,EAAAA,EAEd4I,EAAa,IAGbC,EAAYA,CAAC1G,EAAGC,IAAMD,EAAEnZ,SAAWoZ,EAAE0G,MAAQ3G,EAAE4G,OAAMlM,GAASuF,EAAE4G,IAAInM,KAG3EoM,EAAUA,CAACC,EAAaC,KAE1B,IAAItM,OAA0BtV,IAAjB4hB,EAAO3R,MAAuB2R,EAAO3R,MAAMqF,MAAQsM,EAEhE,IAAIrS,EAAAA,EAAAA,SAAQ+F,GACR,OAAOA,EAAMlV,MAAK4S,GAAO0O,EAAQC,EAAa3O,KAC3C,CAEH,IAAIA,EAAMsC,EAAQ,GAElB,QAA0BtV,IAAtB2hB,EAAYrM,OAA6C,OAAtBqM,EAAYrM,MAC/C,OAAOtC,IAAQ2O,EAAYrM,MAG/B,QAA0BtV,IAAtB2hB,EAAYE,OAA6C,OAAtBF,EAAYE,MAAgB,CAI/D,OAFY,IAAIC,OAAOH,EAAYE,MAAME,YAE5BC,KAAKhP,KAAS2O,EAAYE,MAAMI,cACjD,CAEA,OAAO,CAEX,GAMSvU,EAAWA,KACpB,IAAI5C,EAAQ3H,aAAaC,QAAQ,KACjC,YAAcpD,IAAV8K,GAAiC,OAAVA,EAChBvH,EAAuBuH,GAE3BA,CAAK,EAIHoX,EAAaA,KACtB,IAAIxJ,EAAUF,EAAQN,IAAI,KAC1B,YAAgBlY,IAAZ0Y,GAAqC,OAAZA,EAClBrV,KAAKC,MAAMC,EAAuBmV,IAEtC,EAAE,EAIAhD,EAAUA,IACRrS,KAAKC,MAAMH,aAAaC,QAAQ,MAKlC9B,EAAWA,KACpB,IAAID,EAAQ8B,aAAaC,QAAQ,KACjC,YAAcpD,IAAVqB,GAAiC,OAAVA,EAChBgC,KAAKC,MAAMC,EAAuBlC,IAEtCA,CAAK,EAIHgS,EAAgBC,IACzBA,EAAW6O,OAAO,EAAG,GACrB,IAAI9gB,EAAQ8B,aAAaC,QAAQ,KACjC,QAAcpD,IAAVqB,GAAiC,OAAVA,EAAgB,CACvC,IAAI+gB,EAAgB/e,KAAKC,MAAMC,EAAuBlC,IACtD+gB,EAAcC,cAAgB/O,EAC9BnQ,aAAa8P,QAAQ,IAAK6F,EAAuBzV,KAAKyK,UAAUsU,IACpE,GAISE,EAAgBA,IACbhhB,IACC0I,UAGJuY,EAAenX,UACxB,IAAIN,EAAQ4C,IAKZ,MAJa,cAATU,IACAtD,QAAciK,EAAAA,EAAAA,YAGLpJ,MAAM,kCAAmC,CAClD0B,OAAQ,MACRI,QAAS,CAAE,kBAAmB3C,KAC/Bc,MAAK4H,GACGA,EAAI1H,SAEVF,MAAKiC,GACsB,SAApBA,EAASmK,aAAuEhY,IAAlD6N,EAAS2U,eAAe,4BAAmFxiB,IAA5C6N,EAAS2U,eAAe,sBAAkFxiB,IAAjD6N,EAAS2U,eAAe,uBAC9K7U,EAAAA,EAAQ1M,MACJ6C,EAAAA,EAAAA,KAACqK,EAAAA,EAAO,CAACC,KAAK,OAAOC,UAAQ,EAACC,UAAQ,EAAAzK,SAAC,8HACvC,CAAEkL,SAAU,OAET,IAIb,EAGG0T,EAAmBA,CAACC,EAAaC,EAAY3Q,KAEtD,QAA+BhS,IAA3B2iB,EAAWD,aAAwD,OAA3BC,EAAWD,aAC/CA,IAAgBC,EAAWD,YAC3B,OAAO,EAIf,QAA6B1iB,IAAzB2iB,EAAWC,WAAoD,OAAzBD,EAAWC,WAC7CF,IAAgBC,EAAWC,UAC3B,OAAO,EAIf,IAAIC,EAAgBvQ,OAAOC,KAAKP,GAAQ9R,QAAO+P,IAE3C,IAAI+C,EAAMhB,EAAO/B,GAEjB,YAAYjQ,IAARgT,GAA6B,OAARA,SACDhT,IAAfgT,EAAK/C,OAAuC,OAAf+C,EAAK/C,QACnC+C,EAAOA,EAAK/C,MAAMqF,QAElB/F,EAAAA,EAAAA,SAAQyD,GACDA,EAAI5S,MAAK4S,IAAQA,EAAM,IAAIvR,OAAS,KAEnCuR,EAAM,IAAIvR,OAAS,EAIvB,IAGhB,QAAmCzB,IAA/B2iB,EAAWG,iBAAgE,OAA/BH,EAAWG,gBAA0B,CAGjF,GAFyBH,EAAWG,gBAAgB1iB,MAAK6P,IAA2C,IAAlC4S,EAAcpiB,QAAQwP,KAGpF,OAAO,CAEf,CAEA,QAAiCjQ,IAA7B2iB,EAAWI,eAA4D,OAA7BJ,EAAWI,cAAwB,CAI7E,GAFiBJ,EAAWI,cAAc3iB,MAAK6P,IAA2C,IAAlC4S,EAAcpiB,QAAQwP,KAG1E,OAAO,CAEf,CAEA,QAAkCjQ,IAA9B2iB,EAAW5P,gBAA8D,OAA9B4P,EAAW5P,eAAyB,CAC/E,IAAIA,EAAiB4P,EAAW5P,eAchC,GAZ0BT,OAAOC,KAAKQ,GAAgB3S,MAAK6P,IAEvD,QAAsBjQ,IAAlBgS,EAAO/B,IAA0C,OAAlB+B,EAAO/B,GACtC,OAAO,EAGX,IAAI+C,EAAMhB,EAAO/B,GAEjB,OAAQyR,EAAQ3O,EAAe9C,GAAQ+C,EAAI,IAK3C,OAAO,CAEf,CAEA,QAAoChT,IAAhC2iB,EAAWK,kBAAkE,OAAhCL,EAAWK,iBAA2B,CACnF,IAAIA,EAAmBL,EAAWK,iBAWlC,GAVqB1Q,OAAOC,KAAKyQ,GAAkB5iB,MAAK6P,IACpD,QAAsBjQ,IAAlBgS,EAAO/B,IAA0C,OAAlB+B,EAAO/B,GAAiB,CACvD,IAAI+C,EAAMhB,EAAO/B,GAEjB,OAAOyR,EAAQsB,EAAiB/S,GAAQ+C,EAC5C,CAEA,OAAO,CAAK,IAIZ,OAAO,CAEf,CAGA,OAAO,CAAI,EAITiQ,EAAeA,CAACC,EAAU/S,EAAOhP,KACnC,GAAIgP,EAAMC,OAAyB,iBAAG,CAClC,IAAI+S,EAAYhT,EAAMC,OAAyB,iBAC3CgT,EAAY9Q,OAAOC,KAAK4Q,GAG5B,MAAME,EAAepf,GACCA,EAAKG,QAAQjD,EAAOgQ,WAAY,IAAI6F,MAAM,KAKhE,IADA,IAAIpC,EAAS,GACJ0O,EAAI,EAAGA,EAAIF,EAAU3hB,OAAQ6hB,IAAK,CACvC,GAAIF,EAAUE,GAAGC,WAAWpiB,EAAOgQ,YAAa,CAI5C,IAHA,IAAIqS,EAAQH,EAAYD,EAAUE,IAC9BG,EAAe7O,EAEV8O,EAAI,EAAGA,EAAIF,EAAM/hB,OAAQiiB,IAAK,CAKnC,IAJA,IAAIC,EAAcH,EAAME,GAEpBE,EAAYH,EAEPI,EAAI,EAAGA,EAAIJ,EAAahiB,OAAQoiB,IACrC,GAAIJ,EAAaI,GAAGxO,QAAUsO,EAAa,CACvCF,EAAeA,EAAaI,GAAGhN,WAC/B,KACJ,CAKJ,GAAI+M,IAAcH,EAAc,CAC5B,IAAIK,EAAYJ,IAAMF,EAAM/hB,OAAS,EAErC,IAAI+H,EAAK,QAAUga,EAAM3P,MAAM,EAAG6P,EAAI,GAAG5I,KAAK,KAC1CxF,EAAQnU,EAAOgQ,WAAaqS,EAAM3P,MAAM,EAAG6P,EAAI,GAAG5I,KAAK,KACvDiJ,GAAiBjgB,EAAAA,EAAAA,KAAA,WACjBkgB,GAAa,EAEbd,GAAY/hB,EAAO4O,KAAKO,QAAQ2T,WAAU/jB,GAAgC,oBAAtBA,EAAOuW,YAAoCvW,EAAOoV,MAAMlV,MAAK4S,GAAOA,IAAQsC,QAChI0O,GAAa,GAGbF,GAAaX,EAAUC,EAAUE,MACjCS,GAAiBjgB,EAAAA,EAAAA,KAAA,QAAAD,SAAOmgB,EAAab,EAAUC,EAAUM,IAAMP,EAAUC,EAAUE,OAGvF,IAAIY,EAAWT,EAAaI,GAAK,CAC7Bra,GAAIA,EACJ4E,KAAM,QACN8N,SAAS,EACTzF,WAAY,mBACZ0N,KAAM,GACN9O,MAAOsO,EACPI,eAAgBA,EAChBK,YAAY,EACZ9O,MAAOA,EACP0O,WAAYA,EACZnN,WAAY,IAGhB4M,EAAeS,EAASrN,UAC5B,CACJ,CAEA,MAAMwN,EAAejV,IACbA,EAAKyH,YAAczH,EAAKyH,WAAWpV,OAAS,GAC5C2N,EAAKkV,UAAW,EAChBlV,EAAKyH,WAAW/V,SAASsO,GAASiV,EAAYjV,OAE9CA,EAAK+U,KAAqB,gBAAd/U,EAAK+U,KAAyB,eAAiB/U,EAAK+U,KAChE/U,EAAKkV,UAAW,EACpB,EAGJ,OADA1P,EAAO9T,SAASsO,GAASiV,EAAYjV,KAC9BwF,CACX,CACI,MAAO,EAEf,CACJ,GAGS2P,EAAenV,IACxB,IAAItE,EAAQ4C,IAMZ,OAAO/B,MAAM,6BAA+ByD,EAAM,CAC9C3B,QANS,CACT,kBAAmB3C,EACnB,eAAgB,sBAKjBc,MAAKC,GAAQA,EAAKC,SAChBF,MAAK8C,GACKA,GACT,EAGG8V,EAAcpZ,UACvB,IAAI2E,EAAO2F,IACX3F,EAAKO,QAAU,GACfnN,aAAa8P,QAAQ,IAAK5P,KAAKyK,UAAUiC,UACnCqM,EAAAA,EAAAA,IAAgB,eAAexQ,MAAK,KAChC,GACR,EAIO6Y,EAAYC,IAErB,IAAI3U,EAAO2F,IACPtF,EAASL,EAAKK,YAEApQ,IAAd0kB,GAAyC,OAAdA,GAC3BtU,EAAOnP,KAAKyjB,GAGhB,IAAIvU,EAAQ2J,EAAAA,GAKZ,QAJc9Z,IAAVmQ,GAAiC,OAAVA,IACvBA,EAAQ,SAGEnQ,IAAVmQ,GAAiC,OAAVA,EAAgB,CAEvC,IAAIwU,EAAiBxU,EACrB,QAAuBnQ,IAAnB2kB,GAAmD,OAAnBA,EAChC,MAAO,GACJ,CACH,IAAIvK,EAAOrI,EAAAA,GA8JX,OA5JY3B,EAAOlQ,QAAQiV,GAAoC,OAA1BwP,EAAexP,SAA6CnV,IAA1B2kB,EAAexP,KAAsB5U,KAAI,CAAC4U,EAAOkG,KAGpH,IAAI6H,EAAWnT,EAAKO,QAAQlQ,MAAKF,GAAUA,EAAOuW,aAAetB,IAI7DyP,EAFiBzU,EAAMgF,GAIvBtR,EAAW,GAEf,GAAc,qBAAVsR,EACAtR,EAAWof,EAAaC,OACrB,CACH,IAAI2B,EAAeD,EAAQrkB,KAAI2e,GAAUA,EAAOlM,MAE5C8R,GAAU,EAMd,QAA2B9kB,IAAvBoa,EAAKpI,OAAOmD,IAA+C,OAAvBiF,EAAKpI,OAAOmD,GAAiB,CAIjE,GAA8B,MAHbiF,EAAKpI,OAAOmD,GAGd4G,YAAqB,CAChC,IAAIA,EAAc3B,EAAKpI,OAAOmD,GAAO4G,iBACjB/b,IAAhB+b,QAAkD/b,IAArB+b,EAAYC,MAAsC,OAAhBD,GAA6C,OAArBA,EAAYC,OACnG6I,EAAe9I,EAAYC,KAC3B8I,GAAU,EAElB,CACJ,CAGI5B,GACAnT,EAAKO,QAAQpQ,QAAOA,GAAUA,EAAOuW,aAAetB,IAC/CrU,SAAQZ,IACLA,EAAOoV,MAAMxU,SAAQkS,KACkB,IAA/B6R,EAAapkB,QAAQuS,IACrB6R,EAAa5jB,KAAK+R,EACtB,GACF,KAMM,KADF,GAKO,OAAjB6R,QAA0C7kB,IAAjB6kB,IACzBhhB,EAAWghB,EAAatkB,KAAI,CAACwkB,EAAOC,KAEhC,IAQIrH,EAGAzd,EAXAgf,EAAS0F,EAAQtkB,MAAK4e,GAAUA,EAAOlM,MAAQ+R,IAE/C5F,OAAmBnf,IAAXkf,EAAuBA,EAAOC,MAAQ,EAE9C4E,OAA4B/jB,IAAXkf,GAAwB4F,GAAUnhB,EAAAA,EAAAA,MAAA,QAAAE,SAAA,CAAOsb,EAAM,YAAWnf,EAE3EgkB,GAAa,EACb9H,GAAU,EAMV+I,EAAqBlV,EAAKS,cAAgB,GAE1C0U,EAAO5S,OAAOsS,QAAQ7U,EAAKS,cAActQ,QAAO8S,GAAOiS,EAAmB7kB,MAAK8kB,GAAQA,IAASlS,EAAI,OAAK1S,MAAK0S,GAAOA,EAAI,GAAGyD,aAAetB,GAASnC,EAAI,GAAGsC,MAAMlV,MAAK4S,GAAOA,IAAQ+R,WAE5K/kB,IAATklB,GAA+B,OAATA,IACtBvH,EAAcuH,EAAK,GACnBhlB,EAASglB,EAAK,SAGHllB,IAAXE,GAAmC,OAAXA,IACxBA,EAAS6P,EAAKO,QAAQhQ,MAAKJ,GAAUA,EAAOuW,aAAetB,GAASjV,EAAOoV,MAAMlV,MAAK4S,GAAOA,IAAQ+R,YAG1F/kB,IAAXE,GAAmC,OAAXA,IACxBgc,EAAUhc,EAAOgc,QACjB8H,GAAa,GAGjB,IAEI3O,EAFA8P,EAAc/K,EAAKjI,OAAO4S,IAAUA,EAKpCK,GAAoBthB,EAAAA,EAAAA,KAACuhB,EAAAA,EAAO,CAAAxhB,SAC3BshB,IAID9P,EADU,aAAVF,GAAkC,YAAVA,GAAiC,aAAVA,GAAkC,eAAVA,GAAoC,aAAVA,GAAkC,eAAVA,GAAoC,mBAAVA,GAC3IrR,EAAAA,EAAAA,KAACwhB,EAAAA,EAAO,CAACC,UAAU,SAASC,QAAQ,QAAQC,QAASL,EAAkBvhB,UAC3EF,EAAAA,EAAAA,MAAA,QAAMqJ,UAAU,yBAAwBnJ,SAAA,EAEpCC,EAAAA,EAAAA,KAAA,QAAAD,SAAOshB,KAAmBrhB,EAAAA,EAAAA,KAAC4hB,EAAAA,EAAG,CAAC1Y,UAAU,+CAA+C2Y,MAAM,OAAM9hB,SAAEsb,UAKtGxb,EAAAA,EAAAA,MAAA,QAAMqJ,UAAU,yBAAwBnJ,SAAA,EAACC,EAAAA,EAAAA,KAAA,QAAAD,SAAOshB,KAAmBrhB,EAAAA,EAAAA,KAAC4hB,EAAAA,EAAG,CAAC1Y,UAAU,+CAA+C2Y,MAAM,OAAM9hB,SAAEsb,OAIvJjD,IAEI7G,EADU,aAAVF,GAAkC,YAAVA,GAAiC,aAAVA,GAAkC,eAAVA,GAAoC,aAAVA,GAAkC,eAAVA,GAAoC,mBAAVA,GAC3IrR,EAAAA,EAAAA,KAACwhB,EAAAA,EAAO,CAACC,UAAU,SAASC,QAAQ,QAAQC,QAASL,EAAkBvhB,UAACF,EAAAA,EAAAA,MAAA,QAAMqJ,UAAU,yBAAwBnJ,SAAA,EAACF,EAAAA,EAAAA,MAAA,QAAMsN,MAAOkU,EAAYthB,SAAA,CAAC,KAAGshB,MAAmBrhB,EAAAA,EAAAA,KAAC4hB,EAAAA,EAAG,CAAC1Y,UAAU,+CAA+C2Y,MAAM,OAAM9hB,SAAEsb,UAE7Oxb,EAAAA,EAAAA,MAAA,QAAMqJ,UAAU,yBAAwBnJ,SAAA,EAACF,EAAAA,EAAAA,MAAA,QAAAE,SAAA,CAAM,KAAGshB,MAAmBrhB,EAAAA,EAAAA,KAAC4hB,EAAAA,EAAG,CAAC1Y,UAAU,+CAA+C2Y,MAAM,OAAM9hB,SAAEsb,QAIjK,IAAIyG,EAAexL,EAAKjI,OAAOgD,IAAUA,EAEzC,MAAO,CACH3L,GAAI2L,EAAQ6P,EACZ5W,KAAM,QACN8N,UACA2J,WAAYxQ,EACZA,MAAO8P,EACPxH,cACA3Q,UAAW,GACXmX,KAAM,GACNJ,eAAgBA,EAChBC,WAAYA,EACZvN,WAAYtB,EACZG,MAAOyP,EACPa,eACH,IAKjB,CAKA,MAAO,CACHpc,GAAI2L,EACJmP,UAAU,EACVF,WANa,MAObJ,WANoCd,EAOpC7N,MAAOF,EACPsB,WAAYtB,EACZgP,KAAM,GACNtN,WAAYhT,EACf,GAKT,CACJ,CACI,MAAO,EACX,EAKSiiB,EAASA,CAACC,EAAO3X,KAE1B,IAMI4X,EANAC,EAAcF,EAAMG,aAAe,IAGnCC,EAAgBJ,EAAMK,aAQtBtb,EAAQ4C,IAYZ,GAVa,aAATU,SACsBpO,IAAlBmmB,GAAiD,OAAlBA,IAC1BA,EAAcplB,SAAS,aAAgBolB,EAAcplB,SAAS,WAAcolB,EAAcplB,SAAS,aAAgBolB,EAAcplB,SAAS,cAI/IilB,EAAO5X,SAIOpO,IAAlBmmB,GAAiD,OAAlBA,GAClB,aAATH,EAAqB,CACrB,IAAIK,EAAMF,EAAclC,WAAU+B,GAAiB,WAATA,GAAqBA,EAAKvlB,QAAQ,UAAY,IAC3E,aAAT2N,IACAiY,EAAMF,EAAclC,WAAU+B,GAAiB,WAATA,GAAqBA,EAAKvlB,QAAQ,SAAW,MAG1E,IAAT4lB,IACAL,EAAOG,EAAcE,GAE7B,CAGS,aAATjY,GAAgC,gBAATA,QAAmCpO,IAAToO,GAA+B,OAATA,IACvE4X,EAAO5X,GAGX,IACIkY,EADAC,EAAe/I,mBAAmB1S,GAStC,YANa9K,IAATgmB,GAA+B,OAATA,IACtBA,EAAO,YAGXM,EAAG,yCAAA3X,OAA4CoX,EAAMvc,GAAE,qBAAAmF,OAAoB4X,EAAY,UAAA5X,OAASqX,EAAI,aAAArX,OAAYsX,GAEzGK,CAAG,EAORE,GAAa3O,EAAAA,EAAAA,IAAO,oBAGpB4O,EAAc,mCAEPC,EAAWpR,IAEpB,MAAMqR,EAASC,EAAQ,OAQvB,OANiBD,EAAOE,IAAIH,QAAQpR,EAAOqR,EAAOG,IAAIC,KAAKzjB,MAAMmjB,GAAc,CAC3ElS,GAAIoS,EAAOG,IAAIC,KAAKzjB,MAAMkjB,GAC1BQ,QAASL,EAAOM,IAAIC,MACpBzU,KAAMkU,EAAOlU,KAAK0U,MACnBtS,UAEc,EAGRuS,EAAW9R,IAEpB,MAAMqR,EAASC,EAAQ,OAQvB,OANaD,EAAOE,IAAIO,QAAQ9R,EAAOqR,EAAOG,IAAIC,KAAKzjB,MAAMmjB,GAAc,CACvElS,GAAIoS,EAAOG,IAAIC,KAAKzjB,MAAMkjB,GAC1BQ,QAASL,EAAOM,IAAIC,MACpBzU,KAAMkU,EAAOlU,KAAK0U,MAGRtS,SAAS8R,EAAOG,IAAIC,KAAK,EAG9BM,EAAejc,UAExB,IAAIN,EAAQ4C,IACRvM,EAASC,EAAAA,GACT2O,EAAO2F,IACPjI,EAAU,CAAE,eAAgB,mBAAoB,kBAAmB3C,EAAO,gBAAiB,kBAGnF9K,IAARgT,GAA6B,OAARA,GAAwB,KAARA,IACrCA,EAAM,OAIV,IAAI1C,EAAU,CAACnP,EAAO+P,gBAGlBkJ,EAAOrI,EAAAA,GAGXhC,EAAKO,QAAU,CAAC,CAAEmG,WAAY,iBAAkBnB,MAAO,CAAC,WAAY4G,SAAS,GAAS,CAAEzF,WAAY,iBAAkBnB,MAAO,CAAC,KAAM4G,SAAS,GAAQ,CAAEzF,WAAY,WAAYnB,MAAO,CAAC,KAAM4G,SAAS,IAGtM5L,EAAUA,EAAQ3B,OAAOoB,EAAKO,QACzBpQ,QAAOA,GAAgC,aAAtBA,EAAOuW,aACxBlW,KAAIL,IAAU+b,EAAAA,EAAAA,IAAe/b,EAAQka,EAAKpI,WAG/C,IAAIzE,EAAOlK,KAAKyK,UAAU,CACtB5N,OAAQoQ,IAIR+N,EAAE,qCAGN,aAAa1S,MAAM,sCAADgD,OAAuCqE,EAAI2J,cAAa,gCAAAhO,OAA+B0P,EAAE,QAAA1P,OAAO0P,EAAE,aAAa,CAC7HhR,OAAQ,OACRI,QAASA,EACTF,KAAMA,IACP3B,MAAKC,GAAQA,EAAKC,SAChBF,MAAKiC,IAGF,QAAiB7N,IAAb6N,GAAuC,OAAbA,EAAmB,CAC7C,IAAIa,EAASb,EAASA,SAClByZ,EAAW,GA6Bf,OA1BAA,EAASrmB,KAAK,CAAEoU,MAAO,UAAWC,MAAO,GAAIlH,UAAMpO,EAAWunB,UAAW,wBAC1DvnB,IAAX0O,GAAmC,OAAXA,QAEJ1O,IAAhB0O,EAAOmQ,MAAsC,OAAhBnQ,EAAOmQ,MAEpCnQ,EAAOmQ,KAAK/d,SAAQsc,IAChB,IAAI9E,EAAO,CACPjD,MAAO+H,EAAIoK,eACXlS,MAAO8H,EAAI5T,GACX4E,KAAMgP,EAAIqK,gBAId,GAFAH,EAASrmB,KAAKqX,QAEYtY,IAAtBod,EAAIsK,eAAqD,OAAtBtK,EAAIsK,cAAwB,CAC/D,IAAIpP,EAAO,CACPjD,MAAO+H,EAAIsK,cAAc,GAAK,gBAC9BpS,MAAO8H,EAAI5T,GACX4E,KAAMgP,EAAIqK,gBAEdH,EAASrmB,KAAKqX,EAClB,KAMLgP,CACX,IAEF,EAiBGxO,EAA0BxD,IACnC,QAActV,IAAVsV,GAAiC,OAAVA,EAAgB,CACvC,MAAMqR,EAASC,EAAQ,OAQvB,OANiBD,EAAOE,IAAIH,QAAQpR,EAAOqR,EAAOG,IAAIC,KAAKzjB,MAAMmjB,GAAc,CAC3ElS,GAAIoS,EAAOG,IAAIC,KAAKzjB,MAAMkjB,GAC1BQ,QAASL,EAAOM,IAAIC,MACpBzU,KAAMkU,EAAOlU,KAAK0U,MACnBtS,UAGP,CACI,OAAO,IACX,EAIStR,EAA0B+R,IACnC,QAActV,IAAVsV,GAAiC,OAAVA,EAAgB,CACvC,MAAMqR,EAASC,EAAQ,OAQvB,OANaD,EAAOE,IAAIO,QAAQ9R,EAAOqR,EAAOG,IAAIC,KAAKzjB,MAAMmjB,GAAc,CACvElS,GAAIoS,EAAOG,IAAIC,KAAKzjB,MAAMkjB,GAC1BQ,QAASL,EAAOM,IAAIC,MACpBzU,KAAMkU,EAAOlU,KAAK0U,MAGRtS,SAAS8R,EAAOG,IAAIC,KACtC,CACI,OAAO,IACX,EAISnI,EAAqBxT,UAE9B,IAAIN,EAAQ4C,IACRgL,EAAUwJ,UAERvW,MAAM,oCAAqC,CAC7C0B,OAAQ,MACRI,QAAS,CACL,eAAgB,mBAChB,kBAAmB3C,EACnB,OAAU,WAEfc,MAAKR,UACe,MAAfoI,EAAIwE,SACA,IAAIW,KAAS,IAAIA,KAAKD,SAChBiP,UAEAC,IAEd,GACF,EAIOC,EAA2Bzc,MAAO0c,EAAM9P,KAEjD,IAAIlN,EAAQ4C,IACRgL,EAAUwJ,IAEV3T,EAAU,cAEC,SAAXyJ,GAAgC,SAAXA,EACR,QAAT8P,EACAvZ,EAAU,sCACM,aAATuZ,EACPvZ,GAAW,qCACK,SAATuZ,EACPvZ,GAAWyJ,EAAS,sBACJ,UAAT8P,EACPvZ,GAAWyJ,EAAS,mBACJ,gBAAT8P,EACPvZ,GAAWyJ,EAAS,wBACJ,WAAT8P,EACPvZ,GAAWyJ,EAAS,kBACJ,SAAT8P,EACPvZ,GAAWyJ,EAAS,oBACJ,UAAT8P,EACPvZ,GAAWyJ,EAAS,yBACJ,eAAT8P,EACPvZ,GAAWyJ,EAAS,sBACJ,YAAT8P,EACPvZ,GAAWyJ,EAAS,+BACJ,YAAT8P,EACPvZ,GAAWyJ,EAAS,mBACJ,gBAAT8P,EACPvZ,GAAWyJ,EAAS,oBACJ,WAAT8P,EACPvZ,GAAWyJ,EAAS,mBACJ,gBAAT8P,EACPvZ,EAAU,kCACM,gBAATuZ,EACPvZ,GAAWyJ,EAAS,gBACJ,kBAAT8P,EACPvZ,GAAWyJ,EAAS,kBACJ,iBAAT8P,EACPvZ,EAAU,sCAEVA,GAAWyJ,EAAS,OAAS8P,EAIjCvZ,GAAWyJ,EAAS,mBAAqB8P,EAI7CvZ,GAAW,sCAEL5C,MAAM,oCAAqC,CAC7C0B,OAAQ,MACRI,QAAS,CACL,eAAgB,mBAChB,kBAAmB3C,EACnB,OAAU,WAEfc,MAAKR,UACe,MAAfoI,EAAIwE,SACJrK,EAAAA,EAAQ1M,MACJ6C,EAAAA,EAAAA,KAACqK,EAAAA,EAAO,CAACC,KAAK,QAAQC,UAAQ,EAACC,UAAQ,EAAAzK,SAAE0K,IACzC,CAAEQ,SAAU,MAEZ,IAAI4J,KAAS,IAAIA,KAAKD,SAChBiP,UAEAC,IAEd,GAEF,EAIAD,EAAgBvc,UAClB,IAAI/J,EAAQC,IACRoX,EAAUwJ,IACV/gB,EAASC,EAAAA,GAEbuM,EAAAA,EAAQ1M,MACJ6C,EAAAA,EAAAA,KAACqK,EAAAA,EAAO,CAACC,KAAK,UAAUC,UAAQ,EAACC,UAAQ,EAAAzK,SAAC,2EAC1C,CAAEkL,SAAU,YAEVgZ,YAAW3c,UACbjI,aAAa6kB,WAAW,KACxB7kB,aAAa6kB,WAAW,KACxBxP,EAAQyP,OAAO,IAAK,CAAEhkB,KAAM,MAC5BuU,EAAQyP,OAAO,IAAK,CAAEhkB,KAAM,YAEtB0H,MAAM,wCAAyC,CACjD0B,OAAQ,OACRoF,KAAM,UACNhF,QAAS,CACL,eAAgB,mBAChB,OAAU,mBACV,OAAU,SAEdF,KAAMlK,KAAKyK,UAAU,CAAEoB,KAAM7N,EAAMqW,SAAUpC,MAAO,GAAIyC,OAAQ,YACjEnM,MAAK4H,GAAOA,EAAI1H,SACdF,MAAKR,eACWpL,IAATsY,GAA+B,OAATA,GAEtBnV,aAAa8P,QAAQ,IAAK6F,EAAuBzV,KAAKyK,UAAUwK,KAChEnV,aAAa8P,QAAQ,IAAK6F,EAAuBR,EAAKC,SACtDC,EAAQO,IAAI,IAAKD,EAAuBR,EAAKC,QAAS,CAAEtU,KAAM,IAAKyU,QAAS,IAAIC,KAAKD,GAAUM,QAAQ,EAAMC,SAAU,WACvHT,EAAQO,IAAI,IAAKD,EAAuBzV,KAAKyK,UAAU,IAAI6K,KAAKD,KAAY,CAAEzU,KAAM,IAAKyU,QAAS,IAAIC,KAAKD,GAAUM,QAAQ,EAAMC,SAAU,aAEzItZ,EAAAA,EAAAA,IAAS2Y,EAAK1Y,MAAOuB,EAAOtB,KAAM,qBAAsBF,EAAAA,EAAAA,IAAS2Y,EAAK1Y,MAAOuB,EAAOtB,KAAM,YAC1FuY,OAAOhB,SAAShT,QAAQoH,SAASC,KACjC2M,OAAOhB,SAASiB,QAAO,KAG3B1K,EAAAA,EAAQ1M,MACJ6C,EAAAA,EAAAA,KAACqK,EAAAA,EAAO,CAACC,KAAK,QAAQC,UAAQ,EAACC,UAAQ,EAAAzK,SAAC,0EAIzCyU,IACT,GACP,IAAM,EAKPsP,EAAoBxc,UACtBuC,EAAAA,EAAQ1M,MACJ6C,EAAAA,EAAAA,KAACqK,EAAAA,EAAO,CAACC,KAAK,QAAQC,UAAQ,EAACC,UAAQ,EAAAzK,SAAC,qFACxC,CAAEkL,SAAU,YAEVgZ,YAAW,KAEbvP,EAAQyP,OAAO,IAAK,CAAEhkB,KAAM,MAC5BuU,EAAQyP,OAAO,IAAK,CAAEhkB,KAAM,MAC5BikB,eAAeta,QACf,IAAIua,EAAQhlB,aAAaC,QAAQ,SACjCD,aAAayK,QACC,OAAVua,QAA4BnoB,IAAVmoB,GAClBhlB,aAAa8P,QAAQ,QAASkV,GAElC/P,OAAOhB,SAAShT,QAAQ,YACxBgU,OAAOhB,SAASiB,QAAO,EAAK,GAC7B,IAAM,EAKA+P,EAAe1D,IAExB,IAAI3U,EAAO2F,IACPtF,EAASL,EAAKK,YAEApQ,IAAd0kB,GAAyC,OAAdA,GAC3BtU,EAAOnP,KAAKyjB,GAGhB,IAAIvU,EAAQ4J,EAAAA,GAKZ,QAJc/Z,IAAVmQ,GAAiC,OAAVA,IACvBA,EAAQ,SAGEnQ,IAAVmQ,GAAiC,OAAVA,EAAgB,CAEvC,IAAIwU,EAAiBxU,EACrB,QAAuBnQ,IAAnB2kB,GAAmD,OAAnBA,EAChC,MAAO,GACJ,CACH,IAAIvK,EAAOrI,EAAAA,GA8JX,OA5JY3B,EAAOlQ,QAAQiV,GAAoC,OAA1BwP,EAAexP,SAA6CnV,IAA1B2kB,EAAexP,KAAsB5U,KAAI,CAAC4U,EAAOkG,KAGpH,IAAI6H,EAAWnT,EAAKO,QAAQlQ,MAAKF,GAAUA,EAAOuW,aAAetB,IAI7DyP,EAFiBzU,EAAMgF,GAIvBtR,EAAW,GAEf,GAAc,qBAAVsR,EACAtR,EAAWof,EAAaC,OACrB,CACH,IAAI2B,EAAeD,EAAQrkB,KAAI2e,GAAUA,EAAOlM,MAE5C8R,GAAU,EAMd,QAA2B9kB,IAAvBoa,EAAKpI,OAAOmD,IAA+C,OAAvBiF,EAAKpI,OAAOmD,GAAiB,CAIjE,GAA8B,MAHbiF,EAAKpI,OAAOmD,GAGd4G,YAAqB,CAChC,IAAIA,EAAc3B,EAAKpI,OAAOmD,GAAO4G,iBACjB/b,IAAhB+b,QAAkD/b,IAArB+b,EAAYC,MAAsC,OAAhBD,GAA6C,OAArBA,EAAYC,OACnG6I,EAAe9I,EAAYC,KAC3B8I,GAAU,EAElB,CACJ,CAGI5B,GACAnT,EAAKO,QAAQpQ,QAAOA,GAAUA,EAAOuW,aAAetB,IAC/CrU,SAAQZ,IACLA,EAAOoV,MAAMxU,SAAQkS,KACkB,IAA/B6R,EAAapkB,QAAQuS,IACrB6R,EAAa5jB,KAAK+R,EACtB,GACF,KAMM,KADF,GAKO,OAAjB6R,QAA0C7kB,IAAjB6kB,IACzBhhB,EAAWghB,EAAatkB,KAAI,CAACwkB,EAAOC,KAEhC,IAQIrH,EAGAzd,EAXAgf,EAAS0F,EAAQtkB,MAAK4e,GAAUA,EAAOlM,MAAQ+R,IAE/C5F,OAAmBnf,IAAXkf,EAAuBA,EAAOC,MAAQ,EAE9C4E,OAA4B/jB,IAAXkf,GAAwB4F,GAAUnhB,EAAAA,EAAAA,MAAA,QAAAE,SAAA,CAAOsb,EAAM,YAAWnf,EAE3EgkB,GAAa,EACb9H,GAAU,EAMV+I,EAAqBlV,EAAKS,cAAgB,GAE1C0U,EAAO5S,OAAOsS,QAAQ7U,EAAKS,cAActQ,QAAO8S,GAAOiS,EAAmB7kB,MAAK8kB,GAAQA,IAASlS,EAAI,OAAK1S,MAAK0S,GAAOA,EAAI,GAAGyD,aAAetB,GAASnC,EAAI,GAAGsC,MAAMlV,MAAK4S,GAAOA,IAAQ+R,WAE5K/kB,IAATklB,GAA+B,OAATA,IACtBvH,EAAcuH,EAAK,GACnBhlB,EAASglB,EAAK,SAGHllB,IAAXE,GAAmC,OAAXA,IACxBA,EAAS6P,EAAKO,QAAQhQ,MAAKJ,GAAUA,EAAOuW,aAAetB,GAASjV,EAAOoV,MAAMlV,MAAK4S,GAAOA,IAAQ+R,YAG1F/kB,IAAXE,GAAmC,OAAXA,IACxBgc,EAAUhc,EAAOgc,QACjB8H,GAAa,GAGjB,IAEI3O,EAFA8P,EAAc/K,EAAKjI,OAAO4S,IAAUA,EAKpCK,GAAoBthB,EAAAA,EAAAA,KAACuhB,EAAAA,EAAO,CAAAxhB,SAC3BshB,IAID9P,EADU,aAAVF,GAAkC,YAAVA,GAAiC,aAAVA,GAAkC,eAAVA,GAAoC,aAAVA,GAAkC,eAAVA,GAAoC,mBAAVA,GAC3IrR,EAAAA,EAAAA,KAACwhB,EAAAA,EAAO,CAACC,UAAU,SAASC,QAAQ,QAAQC,QAASL,EAAkBvhB,UAC3EF,EAAAA,EAAAA,MAAA,QAAMqJ,UAAU,yBAAwBnJ,SAAA,EAEpCC,EAAAA,EAAAA,KAAA,QAAAD,SAAOshB,KAAmBrhB,EAAAA,EAAAA,KAAC4hB,EAAAA,EAAG,CAAC1Y,UAAU,+CAA+C2Y,MAAM,OAAM9hB,SAAEsb,UAKtGxb,EAAAA,EAAAA,MAAA,QAAMqJ,UAAU,yBAAwBnJ,SAAA,EAACC,EAAAA,EAAAA,KAAA,QAAAD,SAAOshB,KAAmBrhB,EAAAA,EAAAA,KAAC4hB,EAAAA,EAAG,CAAC1Y,UAAU,+CAA+C2Y,MAAM,OAAM9hB,SAAEsb,OAIvJjD,IAEI7G,EADU,aAAVF,GAAkC,YAAVA,GAAiC,aAAVA,GAAkC,eAAVA,GAAoC,aAAVA,GAAkC,eAAVA,GAAoC,mBAAVA,GAC3IrR,EAAAA,EAAAA,KAACwhB,EAAAA,EAAO,CAACC,UAAU,SAASC,QAAQ,QAAQC,QAASL,EAAkBvhB,UAACF,EAAAA,EAAAA,MAAA,QAAMqJ,UAAU,yBAAwBnJ,SAAA,EAACF,EAAAA,EAAAA,MAAA,QAAMsN,MAAOkU,EAAYthB,SAAA,CAAC,KAAGshB,MAAmBrhB,EAAAA,EAAAA,KAAC4hB,EAAAA,EAAG,CAAC1Y,UAAU,+CAA+C2Y,MAAM,OAAM9hB,SAAEsb,UAE7Oxb,EAAAA,EAAAA,MAAA,QAAMqJ,UAAU,yBAAwBnJ,SAAA,EAACF,EAAAA,EAAAA,MAAA,QAAAE,SAAA,CAAM,KAAGshB,MAAmBrhB,EAAAA,EAAAA,KAAC4hB,EAAAA,EAAG,CAAC1Y,UAAU,+CAA+C2Y,MAAM,OAAM9hB,SAAEsb,QAIjK,IAAIyG,EAAexL,EAAKjI,OAAOgD,IAAUA,EAEzC,MAAO,CACH3L,GAAI2L,EAAQ6P,EACZ5W,KAAM,QACN8N,UACA2J,WAAYxQ,EACZA,MAAO8P,EACPxH,cACA3Q,UAAW,GACXmX,KAAM,GACNJ,eAAgBA,EAChBC,WAAYA,EACZvN,WAAYtB,EACZG,MAAOyP,EACPa,eACH,IAKjB,CAKA,MAAO,CACHpc,GAAI2L,EACJmP,UAAU,EACVF,WANa,MAObJ,WANoCd,EAOpC7N,MAAOF,EACPsB,WAAYtB,EACZgP,KAAM,GACNtN,WAAYhT,EACf,GAKT,CACJ,CACI,MAAO,EACX,C,8XC/iCJ,MAAMiH,GAAQ4C,EAAAA,EAAAA,MAGPtC,eAAeid,EAAezG,GACjC,IAEI,IAAIlO,EAAWC,IAAAA,KAAWC,SAAShE,EAAAA,GAGnC8D,EAAWA,EAASG,MAAM,EAAG,IAG7B,MAAMyU,EAAa3U,IAAAA,KAAWU,aAAauN,EAAO,QAC5CxN,EAAiBT,IAAAA,KAAWU,aAAa,YAAa,QAGtDN,EAAQJ,IAAAA,OAAa4U,aAAa,IAGlCC,EAAS7U,IAAAA,OAAa8U,aAAa,UAAW/U,GAGpD8U,EAAOlU,MAAM,CACTC,GAAIR,EACJK,eAAgBA,EAChBI,UAAW,MAIfgU,EAAO/T,OAAO6T,GAId,IADgBE,EAAO9T,SAEnB,MAAM,IAAIC,MAAM,sBAIpB,MAAMV,EAAMuU,EAAO/V,KAAKwB,IAAIyU,WAGtBha,EAASiF,IAAAA,KAAWU,eAC1B3F,EAAOia,SAAS5U,GAChBrF,EAAOka,UAAUJ,EAAO5T,QACxBlG,EAAOia,SAAS1U,GAIhB,OADwBN,IAAAA,KAAWkV,SAASna,EAAOga,WAEvD,CAAE,MAAOza,GAEL,MADAC,QAAQD,MAAM,qBAAsBA,GAC9BA,CACV,CACJ,CAEO,IAAI6a,OAAU9oB,EAEd,MAAMmM,EAAYf,eACR2d,IAAand,MAAKC,IAC3Bid,EAAUjd,EACHA,KAKFkd,EAAa3d,UACtB,IAAI4d,QAAUjU,EAAAA,EAAAA,KAEd,OAAOpJ,MAAM,yBAA0B,CACnC8B,QAFU,CAAE,kBAAmBub,KAGhCpd,MAAKC,GAAQA,EAAKC,SAChBF,MAAK8C,GACKA,GACT,EAIJua,EAAoB3T,IACtB,IAAI4T,GAAgB,EAEpB,IAC2B,MAAnB9B,EAAAA,EAAAA,IAAQ9R,KACR4T,GAAgB,EAExB,CAAE,MAAA9N,GACE8N,GAAgB,CACpB,CACA,OAAOA,CAAa,EAGXC,EAAa/d,MAAOge,EAAS9Q,KACtC,IAAIyI,EAAUzI,EAEV7K,GAA6B4b,SAAW,CAAC,GAE7B,aAAZD,IACA3b,EAAQ,gBAAkB,oBAG9BA,EAAQ,mBAAqB3C,EAE7B,IAAIsC,EAAM,mBAAqBgc,EAAU,QAIzC,GAAgB,gBAAZA,EACAhc,EAAM,qCAEL,GAAgB,UAAZgc,EACLhc,EAAM,oCAGF6b,EAAiBlI,EAAQnJ,YACzBmJ,EAAQnJ,UAAW8O,EAAAA,EAAAA,GAAQ3F,EAAQnJ,gBAIjB5X,IAAlB+gB,EAAQjW,OACJme,EAAiBlI,EAAQjW,SACzBiW,EAAQjW,OAAQ4b,EAAAA,EAAAA,GAAQ3F,EAAQjW,aAKZ9K,IAAxB+gB,EAAQuI,aACJL,EAAiBlI,EAAQuI,eACzBvI,EAAQuI,aAAc5C,EAAAA,EAAAA,GAAQ3F,EAAQuI,cAI9CvI,EAAU,CAAE,MAASA,OAEpB,IAAgB,aAAZqI,EAAwB,CAG7B,IAAIxR,EAAWmJ,EAAQnJ,SAGnB2R,EAAa,IAAIF,SAoBrB,OAnBAE,EAAWC,OAAO,WAAYzI,EAAQ0I,UACtCF,EAAWC,OAAO,cAAezI,EAAQ2I,aACzCH,EAAWC,OAAO,WAAY5R,GAC9B2R,EAAWC,OAAO,WAAYzI,EAAQ4I,UACtCJ,EAAWC,OAAO,YAAazI,EAAQ6I,WACvCL,EAAWC,OAAO,UAAWzI,EAAQ8I,SACrCN,EAAWC,OAAO,aAAczI,EAAQ+I,YACxCP,EAAWC,OAAO,oBAAqBzI,EAAQgJ,mBAC/CR,EAAWC,OAAO,iBAAkBzI,EAAQiJ,gBAC5CT,EAAWC,OAAO,cAAezI,EAAQkJ,aACzCV,EAAWC,OAAO,oBAAqBzI,EAAQmJ,mBAC/CX,EAAWC,OAAO,iBAAkBzI,EAAQoJ,gBAC5CZ,EAAWC,OAAO,YAAazI,EAAQqJ,WACvCb,EAAWC,OAAO,gBAAiBzI,EAAQsJ,eAC3Cd,EAAWC,OAAO,kBAAmBzI,EAAQuJ,iBAC7Cf,EAAWC,OAAO,iBAAkBzI,EAAQnP,gBAC5C2X,EAAWC,OAAO,iBAAkBzI,EAAQlP,gBAC5C0X,EAAWC,OAAO,gBAAiBzI,EAAQjP,qBAE9BnG,MAAMyB,EAAK,CACpBC,OAAQ,OACRI,QAASA,EACTF,KAAMgc,IACP3d,MAAKC,IAEgB,MAAhBA,EAAKmM,SACL6P,EAAAA,EAAAA,IAAyBuB,EAAS,QAE/Bvd,EAAKC,UAEXF,MAAK8C,GAEgB6b,EAAc7b,KAGnCqO,OAAM9O,IAEInK,EAAAA,EAAAA,KAAA8F,EAAAA,SAAA,KAEnB,CAAO,GAAgB,gBAAZwf,EAIP,OAFAhc,EAAM,mBAAqBgc,EAAU,IAAMrI,QAE9BpV,MAAMyB,EAAK,CACpBC,OAAQ,MACRI,QAASA,IAER7B,MAAKC,IAEkB,MAAhBA,EAAKmM,SACL6P,EAAAA,EAAAA,IAAyBuB,EAAS,QAE/Bvd,EAAKC,UAEfF,MAAK8C,GACKA,IAGd,GAAgB,iBAAZ0a,EACLhc,EAAM,qCAEL,GAAgB,eAAZgc,EACLhc,EAAM,yCACH,GAAgB,SAAZgc,EAAoB,CAE3B,IAAK,IAAI9F,EAAI,EAAGA,EAAIvC,EAAQtf,OAAQ6hB,IAC5B2F,EAAiBlI,EAAQuC,GAAGkH,eAC5BzJ,EAAQuC,GAAGkH,aAAc9D,EAAAA,EAAAA,GAAQ3F,EAAQuC,GAAGkH,mBAIxBxqB,IAApB+gB,EAAQuC,GAAGtB,MACPiH,EAAiBlI,EAAQuC,GAAGtB,KAAKrK,QACjCoJ,EAAQuC,GAAGtB,KAAKrK,MAAO+O,EAAAA,EAAAA,GAAQ3F,EAAQuC,GAAGtB,KAAKrK,OAI3DoJ,QAAgBsH,EAAehlB,KAAKyK,UAAUiT,GAClD,KAAuB,YAAZqI,SAEcppB,IAAjB+gB,EAAQ0J,MAAuC,OAAjB1J,EAAQ0J,MACZ,cAAtB1J,EAAQ0J,KAAKrc,WAAgDpO,IAAxB+gB,EAAQ0J,KAAKC,QAAgD,OAAxB3J,EAAQ0J,KAAKC,QACnFzB,EAAiBlI,EAAQ0J,KAAKC,UAC9B3J,EAAQ0J,KAAKC,QAAShE,EAAAA,EAAAA,GAAQ3F,EAAQ0J,KAAKC,cAKvB1qB,IAA5B+gB,EAAQ4J,iBAA6D,OAA5B5J,EAAQ4J,iBAC7C1B,EAAiBlI,EAAQ4J,gBAAgBC,eACzC7J,EAAQ4J,gBAAgBC,aAAclE,EAAAA,EAAAA,GAAQ3F,EAAQ4J,gBAAgBC,mBAI/C5qB,IAA3B+gB,EAAQ8J,gBAA2D,OAA3B9J,EAAQ8J,gBAC5C5B,EAAiBlI,EAAQ8J,eAAeH,UACxC3J,EAAQ8J,eAAeH,QAAShE,EAAAA,EAAAA,GAAQ3F,EAAQ8J,eAAeH,SAG3E,CAEA,aAAa/e,MAAMyB,EAAK,CACpBC,OAAQ,OACRI,QAASA,EACTF,KAAMlK,KAAKyK,UAAUiT,KACtBnV,MAAKC,IAEgB,MAAhBA,EAAKmM,SACL6P,EAAAA,EAAAA,IAAyBuB,EAAS,QAE/Bvd,EAAKC,UAEXF,MAAK8C,IAEF,GAAgB,SAAZ0a,EAAoB,CAGpB,OADkB0B,EAAYpc,EAElC,CACK,GAAgB,iBAAZ0a,GAA0C,wBAAZA,EAAmC,CAGtE,OADkB2B,EAAarc,EAEnC,CACK,GAAgB,iBAAZ0a,EACL,OAAO1a,EAKP,OADkB6b,EAAc7b,EAEpC,IAGHqO,OAAMrO,IAEH,GAAgB,iBAAZ0a,GAA0C,wBAAZA,EAAmC,CAGjE,OAFkB2B,EAAarc,EAGnC,CACA,OAAO5K,EAAAA,EAAAA,KAAA8F,EAAAA,SAAA,GAAK,IAEfmT,OAAM9O,IAEInK,EAAAA,EAAAA,KAAA8F,EAAAA,SAAA,KACT,EAIGohB,EAAa5f,MAAOge,EAASrI,KACtC,IAAItT,GAA6B4b,SAAW,CAAC,GAE7B,aAAZD,GAAsC,aAAZA,IAC1B3b,EAAQ,gBAAkB,oBAG9BA,EAAQ,mBAAqB3C,EAE7B,IAAIsC,EAAM,mBAAqBgc,EAAU,QAGzC,GAAgB,YAAZA,OAEqBppB,IAAjB+gB,EAAQ0J,MAAuC,OAAjB1J,EAAQ0J,MACZ,cAAtB1J,EAAQ0J,KAAKrc,WAAgDpO,IAAxB+gB,EAAQ0J,KAAKC,QAAgD,OAAxB3J,EAAQ0J,KAAKC,QACnFzB,EAAiBlI,EAAQ0J,KAAKC,UAC9B3J,EAAQ0J,KAAKC,QAAShE,EAAAA,EAAAA,GAAQ3F,EAAQ0J,KAAKC,cAKvB1qB,IAA5B+gB,EAAQ4J,iBAA6D,OAA5B5J,EAAQ4J,iBAC7C1B,EAAiBlI,EAAQ4J,gBAAgBC,eACzC7J,EAAQ4J,gBAAgBC,aAAclE,EAAAA,EAAAA,GAAQ3F,EAAQ4J,gBAAgBC,mBAI/C5qB,IAA3B+gB,EAAQ8J,gBAA2D,OAA3B9J,EAAQ8J,gBAC5C5B,EAAiBlI,EAAQ8J,eAAeH,UACxC3J,EAAQ8J,eAAeH,QAAShE,EAAAA,EAAAA,GAAQ3F,EAAQ8J,eAAeH,aAItE,IAAgB,aAAZtB,GAAsC,aAAZA,EAAwB,CAGvD,IAAIxR,EAAWmJ,EAAQnJ,SAGnB2R,EAAa,IAAIF,SAoBrB,OAnBAE,EAAWC,OAAO,WAAYzI,EAAQ0I,UACtCF,EAAWC,OAAO,cAAezI,EAAQ2I,aACzCH,EAAWC,OAAO,WAAY5R,GAC9B2R,EAAWC,OAAO,WAAYzI,EAAQ4I,UACtCJ,EAAWC,OAAO,YAAazI,EAAQ6I,WACvCL,EAAWC,OAAO,UAAWzI,EAAQ8I,SACrCN,EAAWC,OAAO,aAAczI,EAAQ+I,YACxCP,EAAWC,OAAO,oBAAqBzI,EAAQgJ,mBAC/CR,EAAWC,OAAO,iBAAkBzI,EAAQiJ,gBAC5CT,EAAWC,OAAO,cAAezI,EAAQkJ,aACzCV,EAAWC,OAAO,oBAAqBzI,EAAQmJ,mBAC/CX,EAAWC,OAAO,iBAAkBzI,EAAQoJ,gBAC5CZ,EAAWC,OAAO,YAAazI,EAAQqJ,WACvCb,EAAWC,OAAO,gBAAiBzI,EAAQsJ,eAC3Cd,EAAWC,OAAO,kBAAmBzI,EAAQuJ,iBAC7Cf,EAAWC,OAAO,iBAAkBzI,EAAQnP,gBAC5C2X,EAAWC,OAAO,iBAAkBzI,EAAQlP,gBAC5C0X,EAAWC,OAAO,gBAAiBzI,EAAQjP,qBAE9BnG,MAAMyB,EAAK,CACpBC,OAAQ,OACRI,QAASA,EACTF,KAAMgc,IACP3d,MAAKC,IAEgB,MAAhBA,EAAKmM,SACL6P,EAAAA,EAAAA,IAAyBuB,EAAS,QAE/Bvd,EAAKC,UAEXF,MAAK8C,GACKA,GAGnB,CACK,GAAgB,SAAZ0a,EACLrI,EAAUA,EAAQlhB,UAIjB,GAAgB,gBAAZupB,EACLhc,EAAM,qCACsBpN,IAAxB+gB,EAAQkK,cACRlK,EAAUA,EAAQkK,kBAGrB,GAAgB,UAAZ7B,EAAqB,CAC1Bhc,EAAM,oCAEN,IAAI8d,GAAc,EAElB5Y,OAAOC,KAAKwO,GAASjgB,SAAQ0R,IACb,UAARA,IACA0Y,GAAc,EAClB,KAGgB,IAAhBA,IACAnK,EAAU,CAAE,MAASA,GAE7B,MACK,GAAgB,UAAZqI,EACLhc,EAAM,OAEL,IAAgB,cAAZgc,EAAyB,CAC9B,IAAIG,EAAa,IAAIF,SAErBE,EAAWC,OAAO,OAAQzI,EAAQ,IAElC,IAAIoK,EAAS,CAAE,kBAAmBrgB,GAElC,aAAaa,MAAMyB,EAAK,CACpBC,OAAQ,OACRI,QAAS0d,EACT5d,KAAMgc,IACP3d,MAAKC,IAEgB,MAAhBA,EAAKmM,SACL6P,EAAAA,EAAAA,IAAyBuB,EAAS,QAE/Bvd,EAAKC,UAEXF,MAAK8C,GACKA,GAEnB,CAAO,GAAgB,SAAZ0a,EAAoB,CAC3B,IAAK,IAAI9F,EAAI,EAAGA,EAAIvC,EAAQtf,OAAQ6hB,IAC5B2F,EAAiBlI,EAAQuC,GAAGkH,eAC5BzJ,EAAQuC,GAAGkH,aAAc9D,EAAAA,EAAAA,GAAQ3F,EAAQuC,GAAGkH,mBAIxBxqB,IAApB+gB,EAAQuC,GAAGtB,MACPiH,EAAiBlI,EAAQuC,GAAGtB,KAAKrK,QACjCoJ,EAAQuC,GAAGtB,KAAKrK,MAAO+O,EAAAA,EAAAA,GAAQ3F,EAAQuC,GAAGtB,KAAKrK,OAI3DoJ,QAAgBsH,EAAehlB,KAAKyK,UAAUiT,GAClD,MAAO,GAAgB,iBAAZqI,GAA0C,gBAAZA,EAA2B,CAChE,IAAIJ,QAAUjU,EAAAA,EAAAA,KACdtH,EAAQ,mBAAqBub,CACjC,GAEA,aAAard,MAAMyB,EAAK,CACpBC,OAAQ,OACRI,QAASA,EACTF,KAAMlK,KAAKyK,UAAUiT,KACtBnV,MAAKC,IAEgB,MAAhBA,EAAKmM,SACL6P,EAAAA,EAAAA,IAAyBuB,EAAS,QAE/Bvd,EAAKC,UAEXF,MAAK8C,IACFvC,IACgB,SAAZid,EAEO,CAAE1a,UAIFA,KAGdqO,OAAM9O,IAEU,CACTmd,KAAKznB,EAAAA,EAAAA,MAAAiG,EAAAA,SAAA,CAAA/F,SAAA,EACDC,EAAAA,EAAAA,KAAA,MAAAD,SAAI,YACJC,EAAAA,EAAAA,KAAA,OAAKkJ,UAAU,MAAKnJ,UAChBC,EAAAA,EAAAA,KAAA,OAAKkJ,UAAU,cAAanJ,UACxBC,EAAAA,EAAAA,KAAA,OAAKkJ,UAAU,wBAGvBrJ,EAAAA,EAAAA,MAAA,KAAGqJ,UAAU,cAAanJ,SAAA,CAAC,UAAQoK,EAAM4G,iBAE7CwW,MAAM,KAGZ,EAGGC,EAAoBA,CAAChW,EAAOiW,KACrC,IAAIC,EAAaD,EAQjB,OANAjZ,OAAOC,KAAK+C,GAAOxU,SAAQ+iB,IACb,iBAANA,IACA2H,EAAW3H,GAAKvO,EAAMuO,GAC1B,IAGG2H,CAAU,EAeRC,EAAuBA,CAACnW,EAAOiW,KACxC,IAAIC,EAAaD,EAQjB,OANAjZ,OAAOC,KAAK+C,GAAOxU,SAAQ+iB,IACb,aAANA,IACA2H,EAAW3H,GAAKhM,EAAAA,GAAOC,KAAKxC,EAAMuO,IAAIhP,SAAS,UACnD,IAGG2W,CAAU,EAKRE,EAAqBA,CAACpW,EAAOiW,KACtC,IAAIC,EAAaD,EAkBjB,OAhBAjZ,OAAOC,KAAK+C,GAAOxU,SAAQ+iB,IACb,SAANA,GAAsB,SAANA,GAAsB,aAANA,GAA0B,mBAANA,GAAgC,mBAANA,GACrE,mBAANA,GAAgC,oBAANA,GAAiC,kBAANA,GAA+B,kBAANA,GACxE,mBAANA,GAAgC,wBAANA,GAAqC,qBAANA,GAAkC,eAANA,GAC/E,YAANA,GAAyB,oBAANA,GAAiC,mBAANA,GAAgC,aAANA,EAC3E2H,EAAW3H,GAAKvO,EAAMuO,GAEX,UAANA,GAAuB,gBAANA,EACtB2H,EAAWG,WAAW9H,GAAKvO,EAAMuO,GAEtB,kBAANA,IACL2H,EAAWI,QAAQ/H,GAAKgI,WAAWvW,EAAMuO,IACzC2H,EAAW3H,GAAKgI,WAAWvW,EAAMuO,IACrC,IAGG2H,CAAU,EAIRM,EAAyBA,CAACxW,EAAOiW,KAC1C,IAAIC,EAAaD,EAkBjB,OAhBAjZ,OAAOC,KAAK+C,GAAOxU,SAAQ+iB,IACb,SAANA,GAAsB,SAANA,GAAsB,aAANA,GAA0B,mBAANA,GAC3C,mBAANA,GAAgC,oBAANA,GAAiC,kBAANA,GAA+B,uBAANA,GACxE,mBAANA,GAAgC,eAANA,GACpB,YAANA,GAAyB,mBAANA,GAAgC,aAANA,GAA0B,eAANA,GAA4B,kBAANA,GAA+B,SAANA,GAAsB,WAANA,EACnI2H,EAAW3H,GAAKvO,EAAMuO,GAEX,UAANA,GAAuB,gBAANA,EACtB2H,EAAWG,WAAW9H,GAAKvO,EAAMuO,GAEtB,kBAANA,IACL2H,EAAWI,QAAQ/H,GAAKgI,WAAWvW,EAAMuO,IACzC2H,EAAW3H,GAAKgI,WAAWvW,EAAMuO,IACrC,IAGG2H,CAAU,EAIRO,EAAqBA,CAACzW,EAAOiW,KACtC,IAAIC,EAAaD,EAWjB,OATAjZ,OAAOC,KAAK+C,GAAOxU,SAAQ+iB,IACb,wBAANA,GAAqC,mBAANA,EAC/B2H,EAAW3H,GAAKvO,EAAMuO,GAEX,yBAANA,GAAsC,iBAANA,IACrC2H,EAAW3H,GAAKna,SAAS4L,EAAMuO,IACnC,IAGG2H,CAAU,EAIRQ,EAAsBA,CAAC1W,EAAOiW,KACvC,IAAIC,EAAaD,EAcjB,OAZAjZ,OAAOC,KAAK+C,GAAOxU,SAAQ+iB,IACb,mBAANA,EACA2H,EAAW3H,GAAKvO,EAAMuO,GAEX,WAANA,GAAwB,aAANA,EACvB2H,EAAW3H,GAAKna,SAAS4L,EAAMuO,IAClB,uBAANA,GAAoC,oBAANA,GAAiC,sBAANA,GACvD,oBAANA,GAAiC,2BAANA,GAAwC,qBAANA,IAChE2H,EAAW3H,GAAKgI,WAAWvW,EAAMuO,IACrC,IAGG2H,CAAU,EAIRS,EAAoBA,CAAC3W,EAAOiW,EAAQlQ,KAC7C,IAAImQ,EAAaD,EA2BjB,OAzBAjZ,OAAOC,KAAK+C,GAAOxU,SAAQ+iB,IACb,iBAANA,GAA8B,mBAANA,GAAgC,kBAANA,EAClD2H,EAAW3H,GAAKvO,EAAMuO,GAEX,sBAANA,EACL2H,EAAWU,cAAcjrB,KAAK,CAC1BwV,WAAYnB,EAAMuO,GAClBvO,MAAO,KAGA,iBAANuO,EACL2H,EAAWW,eAAelrB,KAAKqU,EAAMuO,IAE1B,UAANA,EACL2H,EAAWU,cAAc7Q,GAAOwI,GAAKvO,EAAMuO,GAEhC,SAANA,EACL2H,EAAWW,eAAe9Q,GAAS/F,EAAMuO,GAE9B,oBAANA,GACL2H,EAAWW,eAAehK,OAAO9G,EAAO,EAC5C,IAIGmQ,CAAU,EAKRY,EAAmBA,CAAChe,EAAMkH,EAAO+F,EAAOkQ,KAEjD,IAAIC,EAAaD,EAqCjB,MAnCa,QAATnd,GAA2B,gBAATA,GAAmC,cAATA,GAAiC,oBAATA,GAAuC,mBAATA,GACzF,eAATA,GAAkC,cAATA,GAAiC,mBAATA,GAAsC,eAATA,GAAkC,gBAATA,GAC9F,wBAATA,GAGc,OAATA,EAFLod,EAAWnQ,GAAOjN,GAAQkH,EAKZ,SAATlH,GAA4B,SAATA,EACxBod,EAAWnQ,GAAO2G,KAAK5T,GAAQkH,EAEjB,WAATlH,EACLod,EAAWrJ,OAAO9G,EAAO,GAEX,QAATjN,GACLod,EAAWvqB,KAAK,CACZupB,YAAa,GACb6B,WAAY,sBACZC,gBAAiB,GACjBC,UAAW,QACXC,YAAa,wEACbC,WAAY,OACZC,UAAW,GACXtf,IAAK,GACLuf,GAAI,GACJC,oBAAqB,iBACrBC,eAAgB,GAChBC,eAAgB,GAChB9K,KAAM,CACF+K,KAAM,GACNpV,KAAM,MAKX6T,CAAU,EAIRwB,EAAmBA,CAAC5e,EAAMkH,EAAO+F,EAAOkQ,KACjD,IAAIC,EAAaD,EAyCjB,MAvCa,QAATnd,GAA2B,cAATA,EAClBod,EAAWyB,SAAS5R,GAAOjN,GAAQkH,EAErB,WAATlH,EACLod,EAAWyB,SAAS9K,OAAO9G,EAAO,GAEpB,QAATjN,EACLod,EAAWyB,SAAShsB,KAAK,CACrBmM,IAAK,GACL8f,WAAW,IAGD,aAAT9e,OACqBpO,IAAtBwrB,EAAW2B,QAA8C,OAAtB3B,EAAW2B,OAC9C3B,EAAW2B,OAAS,CAAC,CACjBC,UAAW,GACXC,WAAY,GACZC,WAAY,GACZC,SAAU,GACVC,SAAU,KAGdhC,EAAW2B,OAAS,IAAI7X,GAKd,gBAATlH,EACLod,EAAW2B,OAAOhL,OAAO9G,EAAO,GAGlB,eAATjN,EACLod,EAAW2B,OAAS,GAGN,eAAT/e,UACEod,EAAW2B,OAGf3B,CAAU,EAKRiC,EAAuBA,CAACnY,EAAOiW,KAExC,IAAIC,EAAaD,EA6BjB,OA3BAjZ,OAAOC,KAAK+C,GAAOxU,SAAQ+iB,IACb,aAANA,GAA0B,aAANA,GAA0B,aAANA,GAClC,cAANA,GAA2B,YAANA,GAAyB,eAANA,GAClC,sBAANA,GAAmC,mBAANA,GAAgC,gBAANA,GACjD,sBAANA,GAAmC,cAANA,GAA2B,mBAANA,GAAgC,kBAANA,GAA+B,oBAANA,GACrG2H,EAAW3H,GAAKvO,EAAMuO,GAEZ,aAANA,IACA2H,EAAW5B,UAAY,GACvB4B,EAAW3B,QAAU,GACrB2B,EAAW1B,WAAa,GACxB0B,EAAWzB,kBAAoB,GAC/ByB,EAAWxB,eAAiB,GAC5BwB,EAAWvB,YAAc,GACzBuB,EAAWtB,kBAAoB,GAC/BsB,EAAWpB,UAAY,GACvBoB,EAAWnB,cAAgB,GAC3BmB,EAAWrB,eAAiB,GAC5BqB,EAAWlB,gBAAkB,KAItB,mBAANzG,GAAgC,mBAANA,GAAgC,kBAANA,IACzD2H,EAAW3H,GAAKvO,EAAMuO,GAAGhP,WAC7B,IAGG2W,CAAU,EAIRkC,EAAmBA,CAACrS,EAAOjN,EAAMkH,EAAOiW,EAAQoC,KAEzD,IAAInC,EAAaD,EA+BjB,MA7Ba,YAATnd,GAA+B,YAATA,EACtBod,EAAW3rB,KAAKwb,GAAOjN,GAAQkH,EAEjB,WAATlH,GAA8B,SAATA,GAA4B,YAATA,EAC7Cod,EAAWxJ,KAAK5T,GAAQkH,EAEV,WAATlH,EACLod,EAAW3rB,KAAKsiB,OAAO9G,EAAO,GAEhB,QAATjN,EACLod,EAAW3rB,KAAKoB,KAAK,CACjBrB,MAAO,CAAC,IACRO,QAAS,CAAC,IACVJ,OAAQ,KACRW,QAAS,UAGC,UAAT0N,IACS,QAAVkH,EACAkW,EAAW3rB,KAAKwb,GAAOzb,MAAMqB,KAAK,IAEnB,WAAVqU,EACLkW,EAAW3rB,KAAKwb,GAAOzb,MAAMuiB,OAAOwL,EAAQ,GAG5CnC,EAAW3rB,KAAKwb,GAAOzb,MAAM+tB,GAAUrY,GAIxCkW,CAAU,EAIRoC,EAAkBA,CAACtY,EAAOiW,KAEnC,IAAIC,EAAaD,EA6EjB,OA5EAjZ,OAAOC,KAAK+C,GAAOxU,SAAQ+iB,IACb,SAANA,GAAsB,SAANA,GAAsB,OAANA,GAAoB,aAANA,GACxC,aAANA,GAA0B,SAANA,GAAsB,aAANA,GAC9B,iBAANA,GAA8B,UAANA,GAAuB,iBAANA,GAA8B,QAANA,GAAqB,cAANA,GAA2B,oBAANA,GAC/F,aAANA,GAA0B,WAANA,GAAwB,cAANA,GAA2B,qBAANA,GAAkC,kBAANA,GAA+B,uBAANA,GAAoC,mBAANA,GAAgC,gBAANA,GAA6B,eAANA,IAE/L2H,EAAW3H,GAAKvO,EAAMuO,GAGA,WAAlB2H,EAAW3H,IAAiC,KAAd0H,EAAO1H,KACrC2H,EAAWqC,qBAAuB,KAGF,SAAhCrC,EAA0B,gBAChB,uBAAN3H,IACA2H,EAAWsC,mBAAqBxY,EAAMuO,IAChC,mBAANA,IACA2H,EAAWuC,eAAiBzY,EAAMuO,IAC5B,eAANA,IACA2H,EAAWwC,WAAa1Y,EAAMuO,IACxB,gBAANA,IACA2H,EAAWlC,YAAchU,EAAMuO,IACzB,oBAANA,IACA2H,EAAWyC,gBAAkB3Y,EAAMuO,KAEjC,SAANA,IACA2H,EAAW0C,SAAW,GACtB1C,EAAW2C,iBAAmB,GAC9B3C,EAAW4C,cAAgB,GAC3B5C,EAAW6C,aAAe,GAC1B7C,EAAWsC,mBAAqB,GAChCtC,EAAW8C,SAAW,GACtB9C,EAAW1gB,MAAQ,GACnB0gB,EAAW+C,OAAS,GACpB/C,EAAWgD,UAAY,GACvBhD,EAAWiD,GAAK,GAChBjD,EAAWkD,aAAe,GAC1BlD,EAAWmD,KAAO,GAClBnD,EAAW9T,SAAW,GACtB8T,EAAW5T,SAAW,GACtB4T,EAAWoD,SAAW,GACtBpD,EAAWqD,IAAM,GACjBrD,EAAWsD,UAAY,GACN,eAAbxZ,EAAMuO,IAAoC,SAAbvO,EAAMuO,GACnC2H,EAAWqC,qBAAuB,QAEhB,UAAbvY,EAAMuO,GACX2H,EAAWqC,qBAAuB,OAEhB,WAAbvY,EAAMuO,GACX2H,EAAWqC,qBAAuB,IAEhB,gBAAbvY,EAAMuO,IACX2H,EAAWmD,KAAO,SAClBnD,EAAW9T,SAAW,SACtB8T,EAAW5T,SAAW,SACtB4T,EAAWiD,GAAK,SAChBjD,EAAWkD,aAAe,gBAC1BlD,EAAWoD,SAAW,OACtBpD,EAAWqD,IAAM,0BACjBrD,EAAWqC,qBAAuB,QAEhB,SAAbvY,EAAMuO,IAA8B,YAAbvO,EAAMuO,IAAiC,YAAbvO,EAAMuO,IAAiC,UAAbvO,EAAMuO,KACtF2H,EAAW2C,iBAAmB,QAC9B3C,EAAW4C,cAAgB,QAC3B5C,EAAW9T,SAAW,SACtB8T,EAAW5T,SAAW,SACtB4T,EAAWiD,GAAK,SAChBjD,EAAWoD,SAAW,OACtBpD,EAAWqC,qBAAuB,UAI9C,IAGGrC,CAAU,EAKRuD,EAAkBA,CAACzZ,EAAOiW,KAEnC,IAAIC,EAAaD,EAMjB,OAJAjZ,OAAOC,KAAK+C,GAAOxU,SAAQ+iB,IACvB2H,EAAW3H,GAAKvO,EAAMuO,EAAE,IAGrB2H,CAAU,EAKRwD,EAA0BA,CAAC1Z,EAAOiW,KAE3C,IAAIC,EAAaD,EAQjB,OANAjZ,OAAOC,KAAK+C,GAAOxU,SAAQ+iB,IACb,gBAANA,IACA2H,EAAalW,EAAMuO,GACvB,IAGG2H,CAAU,EAkBRyD,EAAoBA,CAAC3Z,EAAOiW,KAErC,IAAIC,EAAaD,EAMjB,OAJAjZ,OAAOC,KAAK+C,GAAOxU,SAAQ+iB,IACvB2H,EAAW3H,GAAKvO,EAAMuO,EAAE,IAGrB2H,CAAU,EAIR0D,EAAmB9jB,UAE5B,IAAIqC,EAAU,CAAE,eAAgB,oBAGhC,OAFAA,EAAQ,mBAAqB3C,QAEhBa,MAAM,oCAAqC,CACpD0B,OAAQ,OACRI,QAASA,EACTF,KAAMlK,KAAKyK,UAAUiT,KAEpBnV,MAAKC,GAAQA,EAAKC,SAClBF,MAAK8C,IACK5K,EAAAA,EAAAA,KAAA8F,EAAAA,SAAA,MAGVmT,OAAM9O,IACInK,EAAAA,EAAAA,KAAA8F,EAAAA,SAAA,KACT,EAUV,MAAM2gB,EAAiB7b,IACnB,IAAIygB,GAAYrrB,EAAAA,EAAAA,KAAA8F,EAAAA,SAAA,IACZyhB,GAAO,EAEX,QAAerrB,IAAX0O,EAAsB,CACtB,IAAIyQ,EAAQ,EACZgQ,GAAYxrB,EAAAA,EAAAA,MAAAiG,EAAAA,SAAA,CAAA/F,SAAA,EACRC,EAAAA,EAAAA,KAAA,MAAAD,SAAI,cACJC,EAAAA,EAAAA,KAAA,OAAKkJ,UAAU,MAAKnJ,UAChBC,EAAAA,EAAAA,KAAA,OAAKkJ,UAAU,cAAanJ,UACxBC,EAAAA,EAAAA,KAAA,OAAKkJ,UAAU,uBAItB0B,EAAOnO,KAAIiW,IAER2I,IAEA,IAAIiQ,GAAMtrB,EAAAA,EAAAA,KAAA8F,EAAAA,SAAA,SACS5J,IAAfwW,EAAKvI,OAAsC,OAAfuI,EAAKvI,OAAiC,KAAfuI,EAAKvI,QAEpDuI,EAAKvI,MAAMlN,SAAS,6BACpByV,EAAK5B,OAAS,4BACP4B,EAAKvI,MAAMlN,SAAS,uBAC3ByV,EAAK5B,OAAS,oBAEV4B,EAAKtH,KAAKnO,SAAS,UACfyV,EAAKtH,KAAKnO,SAAS,eAAiByV,EAAKtH,KAAKnO,SAAS,oBACvDyV,EAAK5B,OAAS,wBACP4B,EAAKtH,KAAKnO,SAAS,SAC1ByV,EAAK5B,OAAS,8CACP4B,EAAKtH,KAAKnO,SAAS,4BAC1ByV,EAAK5B,OAAS,kDACP4B,EAAKtH,KAAKnO,SAAS,sBAC1ByV,EAAK5B,OAAS,0HACP4B,EAAKtH,KAAKnO,SAAS,gBAC1ByV,EAAK5B,OAAS,0BACP4B,EAAKtH,KAAKnO,SAAS,eAC1ByV,EAAK5B,OAAS,4CACP4B,EAAKtH,KAAKnO,SAAS,eAC1ByV,EAAK5B,OAAS,yBACP4B,EAAKtH,KAAKnO,SAAS,gBAC1ByV,EAAK5B,OAAS,4CAK1Bwa,GAAMzrB,EAAAA,EAAAA,MAAA,KAAGqJ,UAAU,cAAanJ,SAAA,CAAC,UAAQ2S,EAAKvI,UAGlD,IAAIkW,GAAOrgB,EAAAA,EAAAA,KAACurB,EAAAA,EAAe,CAAC1J,MAAM,UAMlC,OALkB,IAAdnP,EAAKmB,OACLwM,GAAOrgB,EAAAA,EAAAA,KAACwrB,EAAAA,EAAe,CAAC3J,MAAM,QAC9B0F,GAAO,IAGJvnB,EAAAA,EAAAA,KAAA,OAAKkJ,UAAU,kBAAiBnJ,UACnCC,EAAAA,EAAAA,KAAA,OAAKkJ,UAAU,YAAWnJ,UACtBC,EAAAA,EAAAA,KAAA,OAAKkJ,UAAU,MAAKnJ,UAChBF,EAAAA,EAAAA,MAAA,OAAKqJ,UAAU,oCAAmCnJ,SAAA,EAC9CF,EAAAA,EAAAA,MAAA,OAAKqJ,UAAU,OAAMnJ,SAAA,EACjBF,EAAAA,EAAAA,MAAA,MAAIqJ,UAAU,iCAAgCnJ,SAAA,CACzCsgB,EAAK,eAAergB,EAAAA,EAAAA,KAAA,QAAMkJ,UAAU,eAAcnJ,UAlE9E0rB,EAkEoFpQ,EAjErFoQ,EAAI,GAAM,IAAMA,EAAE1a,WAAa0a,EAAE1a,cAiEkE,IAAE2B,EAAKtH,SAElFpL,EAAAA,EAAAA,KAAA,OAAKkJ,UAAU,kBAEnBrJ,EAAAA,EAAAA,MAAA,OAAKqJ,UAAU,QAAOnJ,SAAA,EAClBC,EAAAA,EAAAA,KAAA,KAAAD,SAAI2S,EAAKgZ,eACT7rB,EAAAA,EAAAA,MAAA,KAAAE,SAAA,CAAG,UAAMC,EAAAA,EAAAA,KAAA,KAAAD,SAAI2S,EAAKmB,KAAK9C,gBACtB2B,EAAKmB,KAAuB,KAAhBnB,EAAK5B,SAAiBjR,EAAAA,EAAAA,MAAA,KAAAE,SAAA,CAAG,YAAU2S,EAAK5B,UAA8B,KAAhB4B,EAAK5B,SAAiBjR,EAAAA,EAAAA,MAAA,KAAAE,SAAA,CAAG,aAASC,EAAAA,EAAAA,KAAA,KAAG2rB,MAAO,CAAE9J,MAAO,OAAQ9hB,SAAE2S,EAAK5B,YACtIwa,cA1ErC,IAAaG,CA+ES,MAGlB,CAEA,MAAO,CAAEJ,YAAW9D,OAAM,EAIxBP,EAAepc,IACjB,IAAIygB,GAAYrrB,EAAAA,EAAAA,KAAA8F,EAAAA,SAAA,IAuBhB,YApBe5J,IAAX0O,IACAygB,GAAYxrB,EAAAA,EAAAA,MAAAiG,EAAAA,SAAA,CAAA/F,SAAA,EACRC,EAAAA,EAAAA,KAAA,MAAAD,SAAI,8BACJC,EAAAA,EAAAA,KAAA,OAAKkJ,UAAU,MAAKnJ,UAChBC,EAAAA,EAAAA,KAAA,OAAKkJ,UAAU,cAAanJ,UACxBC,EAAAA,EAAAA,KAAA,OAAKkJ,UAAU,wBAIvBrJ,EAAAA,EAAAA,MAAA,OAAAE,SAAA,EACIC,EAAAA,EAAAA,KAAA,MAAIkJ,UAAU,OAAMnJ,SAAC,WACrBC,EAAAA,EAAAA,KAAA,MAAAD,SAAK6K,EAAO9O,MAAMW,KAAI,CAACC,EAAM8iB,KAAMxf,EAAAA,EAAAA,KAAA,MAAAD,SAA2BrD,GAAlB,YAAc8iB,WAG9D3f,EAAAA,EAAAA,MAAA,KAAGqJ,UAAU,iCAAgCnJ,SAAA,EAACC,EAAAA,EAAAA,KAAA,UAAAD,SAAQ,WAAe,KAAG6K,EAAOsT,KAAKliB,WACpF6D,EAAAA,EAAAA,MAAA,KAAGqJ,UAAU,iCAAgCnJ,SAAA,EAACC,EAAAA,EAAAA,KAAA,UAAAD,SAAQ,YAAgB,KAAG6K,EAAOhO,QAAU,QAAU,cAKrG,CAAEyuB,YAAW9D,MAtBT,EAsBe,EAKjBqE,EAAmBtkB,MAAOge,EAASrI,KAC5C,IAAItT,EAAUsT,aAAmBsI,SAAW,CAAC,EAAI,CAAE,eAAgB,oBAEnE5b,EAAQ,mBAAqB3C,EAI7B,aAAaa,MAFH,+BAEc,CACpB0B,OAAQ,MACRI,QAASA,EACT3C,MAAOzH,KAAKyK,UAAUiT,KACvBnV,MAAKC,IAEgB,MAAhBA,EAAKmM,SACL6P,EAAAA,EAAAA,IAAyB,QAAS,YAE/Bhc,EAAKC,UAEXF,MAAK8C,GACgBqc,EAAarc,KAGlCqO,OAAMrO,GACeqc,EAAarc,IAEjC,EAKGihB,EAAyBvkB,MAAOge,EAASrI,KAClD,IAAItT,EAAUsT,aAAmBsI,SAAW,CAAC,EAAI,CAAE,eAAgB,oBAEnE5b,EAAQ,mBAAqB3C,EAI7B,aAAaa,MAFH,sCAEc,CACpB0B,OAAQ,MACRI,QAASA,EACT3C,MAAOzH,KAAKyK,UAAUiT,KACvBnV,MAAKC,IAEgB,MAAhBA,EAAKmM,SACL6P,EAAAA,EAAAA,IAAyB,eAAgB,YAEtChc,EAAKC,UAEXF,MAAK8C,GACgBqc,EAAarc,KAGlCqO,OAAMrO,GACeqc,EAAarc,IAEjC,EAKGkhB,EAAmBlhB,IAC5B,IAAIygB,GAAYrrB,EAAAA,EAAAA,KAAA8F,EAAAA,SAAA,IAEhB,GAAc,MAAV8E,EAEA,QAAyB1O,IAArB0O,EAAOmhB,UAEHnhB,EAAOmhB,YACPV,GAAYrrB,EAAAA,EAAAA,KAAA8F,EAAAA,SAAA,SAEb,CAEH,IAAIkmB,EAAOphB,EAAO6e,SAASwC,UAAU,EAAG,GACpCC,EAAQthB,EAAO6e,SAASwC,UAAU,EAAG,GACrCE,EAAMvhB,EAAO6e,SAASwC,UAAU,EAAG,SAExB/vB,IAAX0O,IACAygB,GAAYrrB,EAAAA,EAAAA,KAAA8F,EAAAA,SAAA,CAAA/F,UACRF,EAAAA,EAAAA,MAAA,KAAGqJ,UAAU,OAAMnJ,SAAA,EAACC,EAAAA,EAAAA,KAAA,UAAAD,SAAQ,gBAAoB,KAAGosB,EAAI,IAAED,EAAM,IAAEF,OAG7E,CAKJ,OAAOX,CAAS,EAKdpE,EAAgBrc,IAClB,IAAIygB,GAAYrrB,EAAAA,EAAAA,KAAA8F,EAAAA,SAAA,IAEhB,QAAe5J,IAAX0O,QAAyC1O,IAAjB0O,EAAOwhB,MAAqB,CACpD,IAAIJ,EAAOphB,EAAO6e,SAASwC,UAAU,EAAG,GACpCC,EAAQthB,EAAO6e,SAASwC,UAAU,EAAG,GACrCE,EAAMvhB,EAAO6e,SAASwC,UAAU,EAAG,IAEvCZ,GAAYxrB,EAAAA,EAAAA,MAAAiG,EAAAA,SAAA,CAAA/F,SAAA,EACRC,EAAAA,EAAAA,KAAA,MAAAD,SAAI,4BACJF,EAAAA,EAAAA,MAAA,KAAGqJ,UAAU,OAAMnJ,SAAA,EAACC,EAAAA,EAAAA,KAAA,UAAAD,SAAQ,gBAAoB,KAAGosB,EAAI,IAAED,EAAM,IAAEF,OAEzE,MAEIX,GAAYxrB,EAAAA,EAAAA,MAAAiG,EAAAA,SAAA,CAAA/F,SAAA,EACRC,EAAAA,EAAAA,KAAA,MAAAD,SAAI,qCACJC,EAAAA,EAAAA,KAAA,KAAGkJ,UAAU,OAAMnJ,SAAC,oFAI5B,MAAO,CAAEsrB,YAAWzgB,SAAQ,EAKnByhB,EAAmB/kB,MAAOge,EAASrI,KAC5C,IAAItT,EAAUsT,aAAmBsI,SAAW,CAAC,EAAI,CAAE,eAAgB,oBAEnE5b,EAAQ,mBAAqB3C,EAE7B,IAEIohB,EAAgB,GAEpB,aAAavgB,MAJH,kHAIc,CACpB0B,OAAQ,OACRI,QAASA,IAER7B,MAAKC,GAAQA,EAAKC,SAClBF,MAAK8C,IAEF,IAAI7C,EAAO6C,EAAOmO,aAAaC,aAAasT,qBAsB5C,MApBa,KAATvkB,QAAwB7L,IAAT6L,GAEfyG,OAAOC,KAAK1G,GAAM/K,SAAQuvB,IACN,KAAZA,GAA8B,MAAZA,EAClBnE,EAAcjrB,KAAK,CACfwV,WAAY,eACZnB,MAAO,KAIX4W,EAAcjrB,KAAK,CACfwV,WAAY4Z,EACZ/a,MAAO,IAEf,IAMD4W,CAAa,GACtB,EAKGoE,EAAcC,IAEvB,IAAIC,EAAM,CACVA,MAAW,GAKX,OAJAA,EAAIpF,KAAMtnB,EAAAA,EAAAA,KAAA8F,EAAAA,SAAA,IACV4mB,EAAID,MAAQA,EAGL5kB,MAAM,mCAAoC,CAC7C0B,OAAQ,MACRI,QAAS,CAAE,kBAAmB3C,KAC/Bc,MAAK4H,GAAOA,EAAI1H,SACdF,MAAKiC,IAMF,GAHA2iB,EAAIC,KAAO5iB,EAAS6iB,SAGK,IAArB7iB,EAAS6iB,QA+HN,CACH,IAAIC,EAAIJ,EAAQ,EAEhB,OADAC,EAAID,MAAQI,EACLH,CACX,CAlII,IAKI,IAAIxH,EAAInb,EAAS+iB,OAAO5Z,MAAM,gBAC1B6Z,EAAQ,GACRC,EAAU,GACVzF,EAAO,GACP0F,EAAY,GACZC,EAAY,GACZC,GAAU,EACdjI,EAAEloB,SAAQkS,IACN,IAAI2d,EAAI3d,EAAIke,OAGZ,GAFAP,EAAEvsB,QAAQ,KAAM,KAEXusB,EAAE5vB,SAAS,UAAW,CACvB,IAAIowB,EAAcR,EAAE3Z,MAAM,MACtBwZ,EAAM,CAAC,EAEXW,EAAYrwB,SAAQkW,IAChB,GAAc,KAAVA,EAAc,CACd,IAAIzE,EAAOyE,EAAMA,MAAM,KACvBwZ,EAAIje,EAAK,GAAG2e,QAAU3e,EAAK,QAEXvS,IAAZuS,EAAK,KACLA,EAAK,GAAK,IAGS,cAAnBA,EAAK,GAAG2e,SACRJ,EAAUve,EAAK,IAGI,WAAnBA,EAAK,GAAG2e,SACR7F,EAAO9Y,EAAK,GACC,IAAT8Y,IACA4F,GAAU,IAKK,qBAAnB1e,EAAK,GAAG2e,SACRF,EAAYze,EAAK,IAGE,mBAAnBA,EAAK,GAAG2e,SACRH,EAAYxe,EAAK,GAEzB,KAEJse,EAAM5vB,KAAKuvB,EACf,KAGJ,IAAIY,GAAUttB,EAAAA,EAAAA,KAAA8F,EAAAA,SAAA,IACd,GAAIqnB,EAAS,CAET,IAAI9R,EAAQ,EACZiS,GAAUztB,EAAAA,EAAAA,MAAAiG,EAAAA,SAAA,CAAA/F,SAAA,EACNF,EAAAA,EAAAA,MAAA,OAAKqJ,UAAU,OAAMnJ,SAAA,EACjBC,EAAAA,EAAAA,KAAA,MAAIkJ,UAAU,iCAAgCnJ,SAAC,kBAG/CC,EAAAA,EAAAA,KAAA,OAAKkJ,UAAU,iBAKf6jB,EAAMtwB,KAAI,CAACiW,EAAMhE,SACOxS,IAAhBwW,EAAK6a,QACsB,UAAvB7a,EAAK6a,OAAOH,QACZ/R,KACOxb,EAAAA,EAAAA,MAAA,OAAKqJ,UAAU,OAAMnJ,SAAA,EACxBF,EAAAA,EAAAA,MAAA,MAAIqJ,UAAU,OAAMnJ,SAAA,CAAC,QAAMsb,EAAM,OAChC7M,OAAOC,KAAKiE,GAAMjW,KAAIyS,IACZrP,EAAAA,EAAAA,MAAA,KAAGqJ,UAAU,cAAanJ,SAAA,CAAEmP,EAAI,MAAIwD,EAAKxD,aAMzDlP,EAAAA,EAAAA,KAAA8F,EAAAA,SAAA,QAIvB,CAiCA,OA7BA4mB,EAAIpF,KAAMznB,EAAAA,EAAAA,MAAAiG,EAAAA,SAAA,CAAA/F,SAAA,EAAEC,EAAAA,EAAAA,KAAA,MAAAD,SAAI,aACZF,EAAAA,EAAAA,MAAA,OAAKqJ,UAAU,MAAKnJ,SAAA,EAChBC,EAAAA,EAAAA,KAAA,OAAKkJ,UAAU,cAAanJ,UACxBC,EAAAA,EAAAA,KAAA,OAAKkJ,UAAU,sBAEnBlJ,EAAAA,EAAAA,KAAA,OAAKkJ,UAAU,kBAAiBnJ,UAC5BC,EAAAA,EAAAA,KAAA,OAAKkJ,UAAU,YAAWnJ,UACtBC,EAAAA,EAAAA,KAAA,OAAKkJ,UAAU,MAAKnJ,UAChBF,EAAAA,EAAAA,MAAA,OAAKqJ,UAAU,oCAAmCnJ,SAAA,EAC9CF,EAAAA,EAAAA,MAAA,OAAKqJ,UAAU,OAAMnJ,SAAA,EACjBC,EAAAA,EAAAA,KAAA,MAAIkJ,UAAU,iCAAgCnJ,SAAC,cAG/CC,EAAAA,EAAAA,KAAA,OAAKkJ,UAAU,kBAEnBrJ,EAAAA,EAAAA,MAAA,OAAKqJ,UAAU,OAAMnJ,SAAA,EACjBF,EAAAA,EAAAA,MAAA,KAAAE,SAAA,CAAG,YAAUitB,MACbntB,EAAAA,EAAAA,MAAA,KAAAE,SAAA,CAAG,WAASwnB,MACZ1nB,EAAAA,EAAAA,MAAA,KAAAE,SAAA,CAAG,qBAAmBmtB,MACtBrtB,EAAAA,EAAAA,MAAA,KAAAE,SAAA,CAAG,eAAaktB,QAEnBK,iBAQlBZ,CACX,CAAE,MAAOpB,GACL,IAAIuB,EAAIJ,EAAQ,EAEhB,OADAC,EAAID,MAAQI,EACLH,CACX,CAOJ,IAEHzT,OAAM9O,IAEHuiB,EAAIC,MAAO,EACJD,IACT,EAGGc,EAAclmB,UAEvB,IAAIolB,EAAM,CACVA,MAAW,GACXA,EAAIpF,KAAMtnB,EAAAA,EAAAA,KAAA8F,EAAAA,SAAA,IACV4mB,EAAID,MAAQA,EAEZ,IAAIvH,QAAUjU,EAAAA,EAAAA,KAEd,OAAOpJ,MAAM,wCAAyC,CAClD0B,OAAQ,MACRI,QAAS,CAAE,kBAAmBub,KAC/Bpd,MAAK4H,GAAOA,EAAI1H,SACdF,MAAKiC,IAMF,GAHA2iB,EAAIC,KAAO5iB,EAAS6iB,SAGK,IAArB7iB,EAAS6iB,QAiIN,CACH,IAAIC,EAAIJ,EAAQ,EAEhB,OADAC,EAAID,MAAQI,EACLH,CACX,CApII,IACIzH,KACA1d,EAAAA,EAAAA,MAKA,IAAI2d,EAAInb,EAAS+iB,OAAO5Z,MAAM,gBAC1B6Z,EAAQ,GACRC,EAAU,GACVzF,EAAO,GACP0F,EAAY,GACZC,EAAY,GACZC,GAAU,EACdjI,EAAEloB,SAAQkS,IACN,IAAI2d,EAAI3d,EAAIke,OAGZ,GAFAP,EAAEvsB,QAAQ,KAAM,KAEXusB,EAAE5vB,SAAS,UAAW,CACvB,IAAIowB,EAAcR,EAAE3Z,MAAM,MACtBwZ,EAAM,CAAC,EAEXW,EAAYrwB,SAAQkW,IAChB,GAAc,KAAVA,EAAc,CACd,IAAIzE,EAAOyE,EAAMA,MAAM,KACvBwZ,EAAIje,EAAK,GAAG2e,QAAU3e,EAAK,QAEXvS,IAAZuS,EAAK,KACLA,EAAK,GAAK,IAGS,cAAnBA,EAAK,GAAG2e,SACRJ,EAAUve,EAAK,IAGI,WAAnBA,EAAK,GAAG2e,SACR7F,EAAO9Y,EAAK,GACC,IAAT8Y,IACA4F,GAAU,IAKK,qBAAnB1e,EAAK,GAAG2e,SACRF,EAAYze,EAAK,IAGE,mBAAnBA,EAAK,GAAG2e,SACRH,EAAYxe,EAAK,GAEzB,KAEJse,EAAM5vB,KAAKuvB,EACf,KAGJ,IAAIY,GAAUttB,EAAAA,EAAAA,KAAA8F,EAAAA,SAAA,IACd,GAAIqnB,EAAS,CAET,IAAI9R,EAAQ,EACZiS,GAAUztB,EAAAA,EAAAA,MAAAiG,EAAAA,SAAA,CAAA/F,SAAA,EACNF,EAAAA,EAAAA,MAAA,OAAKqJ,UAAU,OAAMnJ,SAAA,EACjBC,EAAAA,EAAAA,KAAA,MAAIkJ,UAAU,iCAAgCnJ,SAAC,kBAG/CC,EAAAA,EAAAA,KAAA,OAAKkJ,UAAU,iBAKf6jB,EAAMtwB,KAAI,CAACiW,EAAMhE,SACOxS,IAAhBwW,EAAK6a,QACsB,UAAvB7a,EAAK6a,OAAOH,QACZ/R,KACOxb,EAAAA,EAAAA,MAAA,OAAKqJ,UAAU,OAAMnJ,SAAA,EACxBF,EAAAA,EAAAA,MAAA,MAAIqJ,UAAU,OAAMnJ,SAAA,CAAC,QAAMsb,EAAM,OAChC7M,OAAOC,KAAKiE,GAAMjW,KAAIyS,IACZrP,EAAAA,EAAAA,MAAA,KAAGqJ,UAAU,cAAanJ,SAAA,CAAEmP,EAAI,MAAIwD,EAAKxD,aAMzDlP,EAAAA,EAAAA,KAAA8F,EAAAA,SAAA,QAIvB,CAiCA,OA7BA4mB,EAAIpF,KAAMznB,EAAAA,EAAAA,MAAAiG,EAAAA,SAAA,CAAA/F,SAAA,EAAEC,EAAAA,EAAAA,KAAA,MAAAD,SAAI,aACZF,EAAAA,EAAAA,MAAA,OAAKqJ,UAAU,MAAKnJ,SAAA,EAChBC,EAAAA,EAAAA,KAAA,OAAKkJ,UAAU,cAAanJ,UACxBC,EAAAA,EAAAA,KAAA,OAAKkJ,UAAU,sBAEnBlJ,EAAAA,EAAAA,KAAA,OAAKkJ,UAAU,kBAAiBnJ,UAC5BC,EAAAA,EAAAA,KAAA,OAAKkJ,UAAU,YAAWnJ,UACtBC,EAAAA,EAAAA,KAAA,OAAKkJ,UAAU,MAAKnJ,UAChBF,EAAAA,EAAAA,MAAA,OAAKqJ,UAAU,oCAAmCnJ,SAAA,EAC9CF,EAAAA,EAAAA,MAAA,OAAKqJ,UAAU,OAAMnJ,SAAA,EACjBC,EAAAA,EAAAA,KAAA,MAAIkJ,UAAU,iCAAgCnJ,SAAC,cAG/CC,EAAAA,EAAAA,KAAA,OAAKkJ,UAAU,kBAEnBrJ,EAAAA,EAAAA,MAAA,OAAKqJ,UAAU,OAAMnJ,SAAA,EACjBF,EAAAA,EAAAA,MAAA,KAAAE,SAAA,CAAG,YAAUitB,MACbntB,EAAAA,EAAAA,MAAA,KAAAE,SAAA,CAAG,WAASwnB,MACZ1nB,EAAAA,EAAAA,MAAA,KAAAE,SAAA,CAAG,qBAAmBmtB,MACtBrtB,EAAAA,EAAAA,MAAA,KAAAE,SAAA,CAAG,eAAaktB,QAEnBK,iBAQlBZ,CACX,CAAE,MAAOpB,GACL,IAAIuB,EAAIJ,EAAQ,EAEhB,OADAC,EAAID,MAAQI,EACLH,CACX,CAOJ,IAEHzT,OAAM9O,IAEHuiB,EAAIC,MAAO,EACJD,IACT,C,mFC1gDH,SAASxkB,IAEZ,IAAIlB,GAAQ4C,EAAAA,EAAAA,MAGR6jB,EAAapuB,aAAaC,QAAQ,KAEtC,GAAa,MAAT0H,QAA2B9K,IAAV8K,QAAsC9K,IAAfuxB,GAA0C,MAAdA,EAAoB,CACxFA,EAAaluB,KAAKC,OAAMC,EAAAA,EAAAA,IAAuBguB,IAE/C,IAA2BC,EAAvBC,EAAMrZ,OAAOhB,SAGboa,EADAC,EAAIxQ,SAASlgB,SAAS,SACZ,OAEA,MAGdywB,GAAW,KAAOC,EAAI9C,KACtB6C,GAAW,4BAA8BhU,mBAAmB+T,EAAW7Z,UAEvE,MAAMga,EAAS,IAAIC,UAAUH,GAC7BE,EAAOE,OAAS,SAAUC,GAC1B,EAEAH,EAAOI,UAAY,SAAUC,GACzB,IACI,IAAIxjB,EAAUlL,KAAKC,MAAMyuB,EAAMzZ,WACftY,IAAZuO,GAAqC,OAAZA,QACPvO,IAAduO,EAAQya,GAAiC,OAAdza,EAAQya,IACjB,oBAAdza,EAAQya,GAA4B5Q,OAAOhB,SAAS4a,KAAKjxB,SAAS,YAClEqX,OAAOhB,SAAShT,QAAQ,mBAIxC,CAAE,MAAOgrB,GACLlhB,QAAQD,MAAMmhB,EAClB,CACJ,EAGAsC,EAAOO,QAAU7mB,eAAgB2mB,GAC7BhK,YAAW3c,UACPY,GAAgB,GACjB,IACP,EAEA0lB,EAAOQ,QAAU,SAAUH,GACvB7jB,QAAQD,MAAM,6BAClB,CAEJ,CAEJ,C,0CCvDIkkB,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBryB,IAAjBsyB,EACH,OAAOA,EAAaC,QAGrB,IAAIC,EAASL,EAAyBE,GAAY,CACjD7oB,GAAI6oB,EACJhhB,QAAQ,EACRkhB,QAAS,CAAC,GAUX,OANAE,EAAoBJ,GAAUK,KAAKF,EAAOD,QAASC,EAAQA,EAAOD,QAASH,GAG3EI,EAAOnhB,QAAS,EAGTmhB,EAAOD,OACf,CAGAH,EAAoBO,EAAIF,EC5BxBL,EAAoBQ,KAAO,CAAC,E,MCA5B,IAAIC,EAAW,GACfT,EAAoBU,EAAI,CAACpkB,EAAQqkB,EAAUC,EAAIC,KAC9C,IAAGF,EAAH,CAMA,IAAIG,EAAeC,IACnB,IAAS7P,EAAI,EAAGA,EAAIuP,EAASpxB,OAAQ6hB,IAAK,CACrCyP,EAAWF,EAASvP,GAAG,GACvB0P,EAAKH,EAASvP,GAAG,GACjB2P,EAAWJ,EAASvP,GAAG,GAE3B,IAJA,IAGI8P,GAAY,EACP1P,EAAI,EAAGA,EAAIqP,EAAStxB,OAAQiiB,MACpB,EAAXuP,GAAsBC,GAAgBD,IAAa3gB,OAAOC,KAAK6f,EAAoBU,GAAGtR,OAAOhP,GAAS4f,EAAoBU,EAAEtgB,GAAKugB,EAASrP,MAC9IqP,EAAS5Q,OAAOuB,IAAK,IAErB0P,GAAY,EACTH,EAAWC,IAAcA,EAAeD,IAG7C,GAAGG,EAAW,CACbP,EAAS1Q,OAAOmB,IAAK,GACrB,IAAIqN,EAAIqC,SACEhzB,IAAN2wB,IAAiBjiB,EAASiiB,EAC/B,CACD,CACA,OAAOjiB,CArBP,CAJCukB,EAAWA,GAAY,EACvB,IAAI,IAAI3P,EAAIuP,EAASpxB,OAAQ6hB,EAAI,GAAKuP,EAASvP,EAAI,GAAG,GAAK2P,EAAU3P,IAAKuP,EAASvP,GAAKuP,EAASvP,EAAI,GACrGuP,EAASvP,GAAK,CAACyP,EAAUC,EAAIC,EAuBjB,C,KC3Bdb,EAAoB7C,EAAKiD,IACxB,IAAIa,EAASb,GAAUA,EAAOc,WAC7B,IAAOd,EAAiB,QACxB,IAAM,EAEP,OADAJ,EAAoBmB,EAAEF,EAAQ,CAAEzY,EAAGyY,IAC5BA,CAAM,E,MCNd,IACIG,EADAC,EAAWnhB,OAAOohB,eAAkBlD,GAASle,OAAOohB,eAAelD,GAASA,GAASA,EAAa,UAQtG4B,EAAoBpJ,EAAI,SAAS1T,EAAO7C,GAEvC,GADU,EAAPA,IAAU6C,EAAQqe,KAAKre,IAChB,EAAP7C,EAAU,OAAO6C,EACpB,GAAoB,kBAAVA,GAAsBA,EAAO,CACtC,GAAW,EAAP7C,GAAa6C,EAAMge,WAAY,OAAOhe,EAC1C,GAAW,GAAP7C,GAAoC,oBAAf6C,EAAM1J,KAAqB,OAAO0J,CAC5D,CACA,IAAIse,EAAKthB,OAAOuhB,OAAO,MACvBzB,EAAoBzB,EAAEiD,GACtB,IAAIE,EAAM,CAAC,EACXN,EAAiBA,GAAkB,CAAC,KAAMC,EAAS,CAAC,GAAIA,EAAS,IAAKA,EAASA,IAC/E,IAAI,IAAIM,EAAiB,EAAPthB,GAAY6C,EAAyB,iBAAXye,KAAyBP,EAAe/yB,QAAQszB,GAAUA,EAAUN,EAASM,GACxHzhB,OAAO0hB,oBAAoBD,GAASjzB,SAAS0R,GAASshB,EAAIthB,GAAO,IAAO8C,EAAM9C,KAI/E,OAFAshB,EAAa,QAAI,IAAM,EACvB1B,EAAoBmB,EAAEK,EAAIE,GACnBF,CACR,C,KCxBAxB,EAAoBmB,EAAI,CAAChB,EAAS0B,KACjC,IAAI,IAAIzhB,KAAOyhB,EACX7B,EAAoB8B,EAAED,EAAYzhB,KAAS4f,EAAoB8B,EAAE3B,EAAS/f,IAC5EF,OAAO6hB,eAAe5B,EAAS/f,EAAK,CAAE4hB,YAAY,EAAMlc,IAAK+b,EAAWzhB,IAE1E,ECND4f,EAAoBiC,EAAI,CAAC,EAGzBjC,EAAoBP,EAAKyC,GACjBC,QAAQC,IAAIliB,OAAOC,KAAK6f,EAAoBiC,GAAG1Z,QAAO,CAAC8Z,EAAUjiB,KACvE4f,EAAoBiC,EAAE7hB,GAAK8hB,EAASG,GAC7BA,IACL,KCNJrC,EAAoBsC,EAAKJ,GAEZA,EAAU,IAAM,CAAC,GAAK,uBAAuB,GAAK,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,IAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,uBAAuB,KAAO,wBAAwBA,GAAW,YCF5xIlC,EAAoBuC,SAAYL,GAExB,cAAgBA,EAAU,IAAM,CAAC,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,WAAW,KAAO,YAAYA,GAAW,aCH/RlC,EAAoBwC,EAAI,WACvB,GAA0B,kBAAfC,WAAyB,OAAOA,WAC3C,IACC,OAAOlB,MAAQ,IAAImB,SAAS,cAAb,EAChB,CAAE,MAAOjD,GACR,GAAsB,kBAAXzZ,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBga,EAAoB8B,EAAI,CAAC1D,EAAKuE,IAAUziB,OAAO0iB,UAAUC,eAAevC,KAAKlC,EAAKuE,G,MCAlF,IAAIG,EAAa,CAAC,EACdC,EAAoB,qBAExB/C,EAAoBgD,EAAI,CAAChoB,EAAKioB,EAAM7iB,EAAK8hB,KACxC,GAAGY,EAAW9nB,GAAQ8nB,EAAW9nB,GAAKnM,KAAKo0B,OAA3C,CACA,IAAIC,EAAQC,EACZ,QAAWv1B,IAARwS,EAEF,IADA,IAAIgjB,EAAUhqB,SAASiqB,qBAAqB,UACpCnS,EAAI,EAAGA,EAAIkS,EAAQ/zB,OAAQ6hB,IAAK,CACvC,IAAIoS,EAAIF,EAAQlS,GAChB,GAAGoS,EAAEC,aAAa,QAAUvoB,GAAOsoB,EAAEC,aAAa,iBAAmBR,EAAoB3iB,EAAK,CAAE8iB,EAASI,EAAG,KAAO,CACpH,CAEGJ,IACHC,GAAa,GACbD,EAAS9pB,SAASoqB,cAAc,WAEzBrV,QAAU,QACjB+U,EAAOO,QAAU,IACbzD,EAAoB0D,IACvBR,EAAOS,aAAa,QAAS3D,EAAoB0D,IAElDR,EAAOS,aAAa,eAAgBZ,EAAoB3iB,GAExD8iB,EAAOhP,IAAMlZ,EAC4C,IAArDkoB,EAAOhP,IAAI7lB,QAAQ2X,OAAOhB,SAAS4e,OAAS,OAC/CV,EAAOW,YAAc,aAEtBX,EAAOY,UAAY9D,EAAoB+D,UAAU7B,GACjDgB,EAAOW,YAAc,aAEtBf,EAAW9nB,GAAO,CAACioB,GACnB,IAAIe,EAAmB,CAACC,EAAMtE,KAE7BuD,EAAOpD,QAAUoD,EAAOgB,OAAS,KACjCC,aAAaV,GACb,IAAIW,EAAUtB,EAAW9nB,GAIzB,UAHO8nB,EAAW9nB,GAClBkoB,EAAOmB,YAAcnB,EAAOmB,WAAWC,YAAYpB,GACnDkB,GAAWA,EAAQ11B,SAASkyB,GAAQA,EAAGjB,KACpCsE,EAAM,OAAOA,EAAKtE,EAAM,EAExB8D,EAAU9N,WAAWqO,EAAiBO,KAAK,UAAM32B,EAAW,CAAEoO,KAAM,UAAWwoB,OAAQtB,IAAW,MACtGA,EAAOpD,QAAUkE,EAAiBO,KAAK,KAAMrB,EAAOpD,SACpDoD,EAAOgB,OAASF,EAAiBO,KAAK,KAAMrB,EAAOgB,QACnDf,GAAc/pB,SAASqrB,KAAKC,YAAYxB,EAzCkB,CAyCX,C,KC5ChDlD,EAAoBzB,EAAK4B,IACH,qBAAXwE,QAA0BA,OAAOC,aAC1C1kB,OAAO6hB,eAAe5B,EAASwE,OAAOC,YAAa,CAAE1hB,MAAO,WAE7DhD,OAAO6hB,eAAe5B,EAAS,aAAc,CAAEjd,OAAO,GAAO,ECL9D8c,EAAoB6E,IAAOzE,IAC1BA,EAAO0E,MAAQ,GACV1E,EAAO3uB,WAAU2uB,EAAO3uB,SAAW,IACjC2uB,GCHRJ,EAAoB+E,EAAI,ICCxB/E,EAAoB+D,UAAY,CAAC,GAAK,8HAA8H,GAAK,8HAA8H,IAAM,8HAA8H,IAAM,8HAA8H,IAAM,8HAA8H,IAAM,8HAA8H,IAAM,8HAA8H,IAAM,8HAA8H,IAAM,8HAA8H,IAAM,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,IAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,8HAA8H,KAAO,+H,MCD5ulB,GAAwB,qBAAb3qB,SAAX,CACA,IA+CI4rB,EAAkB9C,GACd,IAAIC,SAAQ,CAAC8C,EAASC,KAC5B,IAAItF,EAAOI,EAAoBuC,SAASL,GACpCiD,EAAWnF,EAAoB+E,EAAInF,EACvC,GAlBmB,EAACA,EAAMuF,KAE3B,IADA,IAAIC,EAAmBhsB,SAASiqB,qBAAqB,QAC7CnS,EAAI,EAAGA,EAAIkU,EAAiB/1B,OAAQ6hB,IAAK,CAChD,IACImU,GADAxjB,EAAMujB,EAAiBlU,IACRqS,aAAa,cAAgB1hB,EAAI0hB,aAAa,QACjE,GAAe,eAAZ1hB,EAAIyjB,MAAyBD,IAAazF,GAAQyF,IAAaF,GAAW,OAAOtjB,CACrF,CACA,IAAI0jB,EAAoBnsB,SAASiqB,qBAAqB,SACtD,IAAQnS,EAAI,EAAGA,EAAIqU,EAAkBl2B,OAAQ6hB,IAAK,CACjD,IAAIrP,EAEJ,IADIwjB,GADAxjB,EAAM0jB,EAAkBrU,IACTqS,aAAa,gBAChB3D,GAAQyF,IAAaF,EAAU,OAAOtjB,CACvD,GAMI2jB,CAAe5F,EAAMuF,GAAW,OAAOF,IAnDrB,EAAC/C,EAASiD,EAAUM,EAAQR,EAASC,KAC3D,IAAIQ,EAAUtsB,SAASoqB,cAAc,QAErCkC,EAAQJ,IAAM,aACdI,EAAQ1pB,KAAO,WAiBf0pB,EAAQ5F,QAAU4F,EAAQxB,OAhBJvE,IAGrB,GADA+F,EAAQ5F,QAAU4F,EAAQxB,OAAS,KAChB,SAAfvE,EAAM3jB,KACTipB,QACM,CACN,IAAIU,EAAYhG,IAAyB,SAAfA,EAAM3jB,KAAkB,UAAY2jB,EAAM3jB,MAChE4pB,EAAWjG,GAASA,EAAM6E,QAAU7E,EAAM6E,OAAO5E,MAAQuF,EACzDnI,EAAM,IAAIza,MAAM,qBAAuB2f,EAAU,cAAgB0D,EAAW,KAChF5I,EAAI6I,KAAO,wBACX7I,EAAIhhB,KAAO2pB,EACX3I,EAAI8I,QAAUF,EACVF,EAAQrB,YAAYqB,EAAQrB,WAAWC,YAAYoB,GACvDR,EAAOlI,EACR,GAGD0I,EAAQ9F,KAAOuF,EAC4C,IAAvDO,EAAQ9F,KAAKvxB,QAAQ2X,OAAOhB,SAAS4e,OAAS,OACjD8B,EAAQ7B,YAAc,aAEnB4B,EACHA,EAAOpB,WAAW0B,aAAaL,EAASD,EAAOO,aAE/C5sB,SAASqrB,KAAKC,YAAYgB,EAEb,EAqBbO,CAAiB/D,EAASiD,EAAU,KAAMF,EAASC,EAAO,IAIxDgB,EAAqB,CACxB,KAAM,GAGPlG,EAAoBiC,EAAEkE,QAAU,CAACjE,EAASG,KAEtC6D,EAAmBhE,GAAUG,EAASxzB,KAAKq3B,EAAmBhE,IACzB,IAAhCgE,EAAmBhE,IAFX,CAAC,KAAO,EAAE,KAAO,EAAE,KAAO,EAAE,KAAO,EAAE,KAAO,EAAE,KAAO,EAAE,KAAO,EAAE,KAAO,EAAE,KAAO,EAAE,KAAO,EAAE,KAAO,EAAE,KAAO,EAAE,KAAO,GAE7EA,IACtDG,EAASxzB,KAAKq3B,EAAmBhE,GAAW8C,EAAe9C,GAAS1oB,MAAK,KACxE0sB,EAAmBhE,GAAW,CAAC,IAC5BzC,IAEH,aADOyG,EAAmBhE,GACpBzC,CAAC,IAET,CAvE0C,C,WCK3C,IAAI2G,EAAkB,CACrB,KAAM,GAGPpG,EAAoBiC,EAAE3Q,EAAI,CAAC4Q,EAASG,KAElC,IAAIgE,EAAqBrG,EAAoB8B,EAAEsE,EAAiBlE,GAAWkE,EAAgBlE,QAAWt0B,EACtG,GAA0B,IAAvBy4B,EAGF,GAAGA,EACFhE,EAASxzB,KAAKw3B,EAAmB,QAC3B,CAGL,IAAIC,EAAU,IAAInE,SAAQ,CAAC8C,EAASC,IAAYmB,EAAqBD,EAAgBlE,GAAW,CAAC+C,EAASC,KAC1G7C,EAASxzB,KAAKw3B,EAAmB,GAAKC,GAGtC,IAAItrB,EAAMglB,EAAoB+E,EAAI/E,EAAoBsC,EAAEJ,GAEpDrmB,EAAQ,IAAI0G,MAgBhByd,EAAoBgD,EAAEhoB,GAfF2kB,IACnB,GAAGK,EAAoB8B,EAAEsE,EAAiBlE,KAEf,KAD1BmE,EAAqBD,EAAgBlE,MACRkE,EAAgBlE,QAAWt0B,GACrDy4B,GAAoB,CACtB,IAAIV,EAAYhG,IAAyB,SAAfA,EAAM3jB,KAAkB,UAAY2jB,EAAM3jB,MAChEuqB,EAAU5G,GAASA,EAAM6E,QAAU7E,EAAM6E,OAAOtQ,IACpDrY,EAAMM,QAAU,iBAAmB+lB,EAAU,cAAgByD,EAAY,KAAOY,EAAU,IAC1F1qB,EAAMiB,KAAO,iBACbjB,EAAMG,KAAO2pB,EACb9pB,EAAMiqB,QAAUS,EAChBF,EAAmB,GAAGxqB,EACvB,CACD,GAEwC,SAAWqmB,EAASA,EAE/D,CACD,EAWFlC,EAAoBU,EAAEpP,EAAK4Q,GAA0C,IAA7BkE,EAAgBlE,GAGxD,IAAIsE,EAAuB,CAACC,EAA4BvgB,KACvD,IAKI+Z,EAAUiC,EALVvB,EAAWza,EAAK,GAChBwgB,EAAcxgB,EAAK,GACnBygB,EAAUzgB,EAAK,GAGIgL,EAAI,EAC3B,GAAGyP,EAAS3yB,MAAMoJ,GAAgC,IAAxBgvB,EAAgBhvB,KAAa,CACtD,IAAI6oB,KAAYyG,EACZ1G,EAAoB8B,EAAE4E,EAAazG,KACrCD,EAAoBO,EAAEN,GAAYyG,EAAYzG,IAGhD,GAAG0G,EAAS,IAAIrqB,EAASqqB,EAAQ3G,EAClC,CAEA,IADGyG,GAA4BA,EAA2BvgB,GACrDgL,EAAIyP,EAAStxB,OAAQ6hB,IACzBgR,EAAUvB,EAASzP,GAChB8O,EAAoB8B,EAAEsE,EAAiBlE,IAAYkE,EAAgBlE,IACrEkE,EAAgBlE,GAAS,KAE1BkE,EAAgBlE,GAAW,EAE5B,OAAOlC,EAAoBU,EAAEpkB,EAAO,EAGjCsqB,EAAqBC,KAAoC,8BAAIA,KAAoC,+BAAK,GAC1GD,EAAmBl4B,QAAQ83B,EAAqBjC,KAAK,KAAM,IAC3DqC,EAAmB/3B,KAAO23B,EAAqBjC,KAAK,KAAMqC,EAAmB/3B,KAAK01B,KAAKqC,G,KCpFvF,IAAIE,EAAsB9G,EAAoBU,OAAE9yB,EAAW,CAAC,OAAO,IAAOoyB,EAAoB,SAC9F8G,EAAsB9G,EAAoBU,EAAEoG,E","sources":["adminressources/ACLHelper.js","components/utils/aclsRoles.js","components/utils/localValues.js","components/routes/DefaultRoutes.js","components/routes/AppRoutes.js","index.js","ressources/functions/AlbumAPIs.js","ressources/functions/Config.js","ressources/functions/Login.js","ressources/functions/Query.js","ressources/functions/Trashcan.js","ressources/functions/helper.js","views/administration/Pillar.js","views/socket.js","../webpack/bootstrap","../webpack/runtime/amd options","../webpack/runtime/chunk loaded","../webpack/runtime/compat get default export","../webpack/runtime/create fake namespace object","../webpack/runtime/define property getters","../webpack/runtime/ensure chunk","../webpack/runtime/get javascript chunk filename","../webpack/runtime/get mini-css chunk filename","../webpack/runtime/global","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/load script","../webpack/runtime/make namespace object","../webpack/runtime/node module decorator","../webpack/runtime/publicPath","../webpack/runtime/compat","../webpack/runtime/css loading","../webpack/runtime/jsonp chunk loading","../webpack/startup"],"sourcesContent":["import { getLogin } from \"../ressources/functions/helper\";\nimport { config as getConfig } from \"../ressources/functions/Config\";\nimport { multicampus_checker, MultiCampus } from \"../ressources/functions/Login\";\n\n/**\n * This Class is to calculate the logged in users ACL permissions. Based on ACL permissions will allow users todo selected functions\n */\n\nexport const aclView = \"VIEW_PROPERTIES\"\nexport const aclDelete = \"DELETE\"\nexport const aclAdmin = \"ADMIN\";\nexport const aclAlbumShare = \"ALBUM_SHARE\";\nexport const aclAlbumCreate = \"ALBUM_CREATE\";\nexport const aclAlbumDelete = \"ALBUM_DELETE\";\nexport const aclAlbumEdit = \"ALBUM_EDIT\";\nexport const aclAlbumUpload = \"ABLUM_UPLOAD\";\nexport const aclAlbumUploadShare = \"ALBUM_UPLOAD_SHARE\";\nexport const aclAlbumDownload = \"ALBUM_DOWNLOAD\";\nexport const aclExternalAdd = \"ALBUM_EXTERNAL_ADD\";\nexport const aclExternalUpload = \"ALBUM_EXTERNAL_UPLOAD\";\nexport const aclExternalDelete = \" ALBUM_EXTERNAL_DELETE\";\nexport const aclExternalView = \"ALBUM_EXTERNAL_VIEW\";\nexport const aclExternalEdit = \"ALBUM_EXTERNAL_EDIT\";\nexport const aclCurationDelete = \"ALBUM_CURATION_DELETE\";\nexport const aclCurationEdit = \"ALBUM_CURATION_EDIT\";\nexport const aclCurationDownload = \"ALBUM_CURATION_DOWNLOAD\";\nexport const aclUploadGallery = \"ALBUM_TO_GALLERY\";\nexport const aclViewCuration = \"VIEW_CURATION\";\n\n// Params: \n// roles: the user role Pillar.acls\n// acls: Comes from the Pillar\n// action: The action to check with, one of albumTypes in Pillar\n// params: No used for now\n//\n\nexport const checkAcl = (roles, acls, action, params) => {\n if(acls !== undefined && acls !== null){\n\n let acl = acls.filter(acl => acl.actions.some(acl_action => acl_action === action)).find(acl => { // Filters and gets a list of ACLS that have that action\n\n // Maps and finds ACL that contains the correct role that search for.\n return acl.roles.map(role => {\n if (typeof role === 'string') {\n return role;\n } else {\n return role(params);\n }\n \n }).some(role => roles.indexOf(role) !== -1);\n \n });\n // Checks to see if ACL has outcome allowed\n if (acl !== undefined && acl !== null) {\n\n return acl.outcome === \"ALLOW\";\n }\n }\n \n return false;\n}\n\n// Method for returning the highest permission level, User friendly name.. e.g \"ADMIN\" or \"Marketing\"\n// This allows Marketing access to selected methods without generating a new acls \nexport const getRole = (roles, acls) => {\n let names = [];\n let permission = \"\";\n\n // Loops through each role the logged in user is part of\n roles.forEach(role => {\n acls.forEach(acl => {\n if(acl.roles.includes(role)){\n // If its not already added and the acl name is not undefined will add it to the list\n if(!names.includes(acl.acl_name) && acl.acl_name !== undefined && acl.acl_name !== null){\n names.push(acl.acl_name);\n }\n }\n });\n })\n\n // If statements that go down the order from highest to lowest permission and returning the Name of your current permission\n if(names.includes(\"Admin\")){\n permission = \"Admin\";\n }else if (names.includes(\"SchoolBench Admin\")){\n permission = \"SchoolBench Admin\"\n } else if (names.includes(\"Marketing\")){\n permission = \"Marketing\";\n } else if (names.includes(\"Collaborators\")){\n permission = \"Collaborator\"\n } else if (names.includes(\"Contributors\")){\n permission = \"Contributor\"\n } else if (names.includes(\"View\")){\n permission = \"Viewer\"\n } else {\n permission = names\n }\n \n return permission;\n}\n\n// Calculates if the fields match using regex expression\nconst matches = (value_match, input) => {\n\n let value = input.field !== undefined && input.field !== null ? input.field.value : input;\n\n if (value) {\n return value.some(val => matches(value_match, val));\n } else {\n\n let val = value + \"\";\n\n if (value_match.value !== undefined && value_match.value !== null) {\n return val === value_match.value;\n }\n\n if (value_match.regex !== undefined && value_match.regex !== null) {\n\n let regex = new RegExp(value_match.regex.expression);\n\n return regex.test(val) === value_match.regex.requires_match;\n }\n\n return true;\n\n }\n\n\n}\n\n// Checks if the conditions match the field requirements, used for updating fields\nexport const conditionMatches = (create_mode, conditions, fields) => {\n\n if (conditions.create_mode !== undefined && conditions.create_mode !== null) {\n if (create_mode !== conditions.create_mode) {\n return false;\n }\n }\n\n if (conditions.edit_mode !== undefined && conditions.edit_mode !== null) {\n if (create_mode === conditions.edit_mode) {\n return false;\n }\n }\n\n let change_fields = Object.keys(fields).filter(field => {\n\n let val = fields[field];\n\n if (val !== undefined && val !== null) {\n if (val.field !== undefined && val.field !== null) {\n val = val.field.value;\n }\n if (val) {\n return val.some(val => (val + \"\").length > 0)\n } else {\n return (val + \"\").length > 0\n }\n }\n\n return false;\n });\n\n if (conditions.required_fields !== undefined && conditions.required_fields !== null) {\n let has_missing_fields = conditions.required_fields.some(field => change_fields.indexOf(field) === -1);\n\n if (has_missing_fields) {\n return false;\n }\n }\n\n if (conditions.absent_fields !== undefined && conditions.absent_fields !== null) {\n\n let has_fields = conditions.absent_fields.some(field => change_fields.indexOf(field) !== -1);\n\n if (has_fields) {\n return false;\n }\n }\n\n if (conditions.matched_values !== undefined && conditions.matched_values !== null) {\n let matched_values = conditions.matched_values;\n\n let has_different_value = Object.keys(matched_values).some(field => {\n\n if (fields[field] === undefined) {\n return true;\n }\n\n let val = fields[field];\n\n return !matches(matched_values[field], val);\n\n });\n\n if (has_different_value) {\n return false;\n }\n }\n\n if (conditions.unmatched_values !== undefined && conditions.unmatched_values !== null) {\n let unmatched_values = conditions.unmatched_values;\n let has_same_value = Object.keys(unmatched_values).some(field => {\n if (fields[field] !== undefined && fields[field] !== null) {\n let val = fields[field];\n\n return matches(unmatched_values[field], val);\n }\n\n return false;\n })\n\n if (has_same_value) {\n return false;\n }\n }\n\n\n return true;\n}\n\n// checking multi campus is on or not\nexport const checkMultiCampus = () => {\n let config = getConfig\n let login = getLogin()\n\n let isMultiCampus = false\n if (config != null) {\n if (config.multicampus != null) {\n if (config.multicampus.length > 0) {\n isMultiCampus = true;\n }\n }\n }\n\n if (isMultiCampus && MultiCampus == null) {\n multicampus_checker(login);\n }\n \n return isMultiCampus\n}\n\n// multi campus admin checker\nexport const AdminChecker = () => {\n let config = getConfig\n let login = getLogin()\n\n let isAdmin = checkAcl(login.roles, config.acls, \"ADMIN\");\n\n return isAdmin\n}\n\n// Get the list of campuses allocated to the user\nexport const getMultiCampuslist = () => {\n let config = getConfig\n let login = getLogin()\n\n let isAdmin = checkAcl(login.roles, config.acls, \"ADMIN\");\n\n let campus = []\n if (config != null) {\n if (config.multicampus != null) {\n if (config.multicampus.length > 0) {\n if (isAdmin){\n config.multicampus.map((items) => { return campus = [...campus, ...items.campus] })\n campus = [...new Set(campus)];\n } else {\n campus = MultiCampus;\n if (campus == null) {\n campus = [];\n }\n }\n }\n }\n }\n \n return campus\n}\n","import { checkAcl } from '../../adminressources/ACLHelper';\n\n// Function to check if the user is an Admin\nexport const roleAdmin = (roles, acls) => {\n return checkAcl(roles, acls, \"ADMIN\");\n};\n\n// Function to check if the user has EVENT_MANAGEMENT permissions\nexport const canManageEvents = (roles, acls) => {\n return checkAcl(roles, acls, \"EVENT_MANAGEMENT\");\n};\n\n// Function if user can view the gallery\nexport const canViewGallery = (roles, acls) => {\n return checkAcl(roles, acls, \"VIEW_GALLERY\");\n};\n\n// Function if user can create\nexport const canCreate = (roles, acls) => {\n return checkAcl(roles, acls, \"CREATE\");\n};\n\n// Function if user can delete\nexport const canDelete = (roles, acls) => {\n return checkAcl(roles, acls, \"DELETE\");\n};\n\nexport const canUpdate = (roles, acls) => {\n return checkAcl(roles, acls, \"UPDATE\");\n};\n\nexport const canEditCuration = (roles, acls) => {\n return checkAcl(roles, acls, \"ALBUM_CURATION_EDIT\");\n};\n\nexport const canDeleteCuration = (roles, acls) => {\n return checkAcl(roles, acls, \"ALBUM_CURATION_DELETE\");\n};\n\nexport const canDownload = (roles, acls) => {\n return checkAcl(roles, acls, \"DOWNLOAD\");\n};\n\nexport const canDownloadCuration = (roles, acls) => {\n return checkAcl(roles, acls, \"ALBUM_CURATION_DOWNLOAD\");\n};\n\nexport const canAlbumToGallery = (roles, acls) => {\n return checkAcl(roles, acls, \"ALBUM_TO_GALLERY\");\n};\n\nexport const canAlbumShare = (roles, acls) => {\n return checkAcl(roles, acls, \"ALBUM_SHARE\");\n};\n\nexport const canViewCuration = (roles, acls) => {\n return checkAcl(roles, acls, \"VIEW_CURATION\");\n};\n\n\nexport const canCreateAlbum = (roles, acls) => {\n return checkAcl(roles, acls, \"ALBUM_CREATE\");\n};\n\nexport const canDeleteAlbum = (roles, acls) => {\n return checkAcl(roles, acls, \"ALBUM_DELETE\");\n};\n\nexport const canViewProperties = (roles, acls) => {\n return checkAcl(roles, acls, \"VIEW_PROPERTIES\");\n};","import { decrypt_storage_values } from '../../ressources/functions/helper';\n\n// Function to return token\nexport const sbToken = () => {\n let token = localStorage.getItem(\"T\");\n if (token) {\n return decrypt_storage_values(token);\n }\n return null; // Return null if token is not found or invalid\n};\n\n// Function to return Login\nexport const sbLogin = () => {\n let login = localStorage.getItem(\"L\");\n if (login) {\n return JSON.parse(decrypt_storage_values(login));\n }\n return null; // Return null if login is not found or invalid\n};\n\n// Function to return valid\nexport const sbValid = () => {\n return localStorage.getItem(\"valid\");\n};\n\n","// src/components/routes/PrivateRoute.js\nimport React, { lazy } from 'react';\nimport { Routes, Route, Navigate } from 'react-router-dom';\n\nconst App = lazy(() => import('../../App'));\n\nconst DefaultRoutes = () => {\n return (\n \n } />\n } />\n } />\n } />\n \n );\n};\nexport default DefaultRoutes;","import React, { lazy, useMemo } from 'react';\nimport { Routes, Route, Navigate, useParams } from 'react-router-dom';\n\nimport { config as getConfig } from '../../ressources/functions/Config';\n\nimport { sbLogin } from '../utils/localValues';\nimport { roleAdmin, canViewGallery, canCreate, canManageEvents, canDelete, canViewCuration } from '../utils/aclsRoles';\n\nconst App = lazy(() => import('../../App'));\nconst Welcome = lazy(() => import('../../views/Welcome'));\nconst Gallery = lazy(() => import('../../views/Gallery'));\nconst Events = lazy(() => import('../../views/events/Eventslist'));\nconst AllEvents = lazy(() => import('../../views/eventslist/allevents'));\nconst Event = lazy(() => import('../../views/events/pages/event'));\nconst Profile = lazy(() => import('../../views/people/profile'));\nconst Studentslist = lazy(() => import('../../views/Studentslist'));\nconst Albumpreview = lazy(() => import('../../views/albums/pages/Albumpreview'));\nconst Albums = lazy(() => import('../../views/albums/Albums'));\nconst Upload = lazy(() => import('../../views/Upload'));\nconst Bin = lazy(() => import('../../views/trashcan/Bin'));\nconst Binempty = lazy(() => import('../../views/trashcan/Binempty'));\nconst PortalPlusInfo = lazy(() => import('../../views/portalplus/PortalPlusInfo'));\n\n// ADMINISTRATION SECTION\nconst Administration = lazy(() => import('../../views/administration/Admin'));\nconst About = lazy(() => import('../../views/administration/pages/About'));\nconst Logs = lazy(() => import('../../views/administration/pages/about/Logs'));\nconst OnlineUsers = lazy(() => import('../../views/administration/pages/about/OnlineUsers'));\nconst Reindex = lazy(() => import('../../views/administration/pages/about/Reindex'));\nconst SystemRess = lazy(() => import('../../views/administration/pages/about/SystemRessources'));\nconst VersionInfo = lazy(() => import('../../views/administration/pages/about/VersionInformation'));\nconst Consent = lazy(() => import('../../views/administration/pages/Consent'));\nconst MediaConsent = lazy(() => import('../../views/administration/pages/consent/MediaConsent'));\nconst Recognition = lazy(() => import('../../views/administration/pages/consent/Recognition'));\nconst Renditions = lazy(() => import('../../views/administration/pages/consent/Renditions'));\nconst SocialMedia = lazy(() => import('../../views/administration/pages/consent/SocialMedia'));\nconst Watermark = lazy(() => import('../../views/administration/pages/consent/Watermark'));\nconst Integration = lazy(() => import('../../views/administration/pages/Integration'));\nconst Calendar = lazy(() => import('../../views/administration/pages/integration/Calendar'));\nconst Ldap = lazy(() => import('../../views/administration/pages/security/Ldap'));\nconst Sis = lazy(() => import('../../views/administration/pages/integration/Sis'));\nconst Webdav = lazy(() => import('../../views/administration/pages/integration/Webdav'));\nconst MobileApp = lazy(() => import('../../views/administration/pages/Mobile'));\nconst Mobilesettings = lazy(() => import('../../views/administration/pages/mobile/Mobilesettings'));\nconst Portal = lazy(() => import('../../views/administration/pages/Portal'));\nconst PortalLogo = lazy(() => import('../../views/administration/pages/portal/PortalLogo'));\nconst PortalOrders = lazy(() => import('../../views/administration/pages/portal/PortalOrders'));\nconst PortalPublish = lazy(() => import('../../views/administration/pages/portal/PortalPublish'));\nconst PortalQuickPublish = lazy(() => import('../../views/administration/pages/portal/PortalQuickPublish'));\nconst PortalSSL = lazy(() => import('../../views/administration/pages/portal/PortalSSL'));\nconst PortalSSO = lazy(() => import('../../views/administration/pages/portal/PortalSSO'));\nconst PortalTerms = lazy(() => import('../../views/administration/pages/portal/PortalTerms'));\nconst PortalWebshop = lazy(() => import('../../views/administration/pages/portal/PortalWebshop'));\nconst AccessSecurity = lazy(() => import('../../views/administration/pages/Security'));\nconst AccessLists = lazy(() => import('../../views/administration/pages/security/AccessLists'));\nconst MultiCampus = lazy(() => import('../../views/administration/pages/security/MultiCampus'));\nconst ImpersonateUser = lazy(() => import('../../views/administration/pages/security/ImpersonateUser'));\nconst RemoteAccess = lazy(() => import('../../views/administration/pages/security/RemoteAccess'));\nconst SSL = lazy(() => import('../../views/administration/pages/security/Ssl'));\nconst SSO = lazy(() => import('../../views/administration/pages/security/Sso'));\nconst Settings = lazy(() => import('../../views/administration/pages/Settings'));\nconst Finishinstall = lazy(() => import('../../views/administration/pages/settings/Finishinstall'));\nconst Logo = lazy(() => import('../../views/administration/pages/settings/Logo'));\nconst Systemregistration = lazy(() => import('../../views/administration/pages/settings/Systemregistration'));\nconst Socket = lazy(() => import('../../views/socket'));\n// Portal Plus Administration\nconst PortalPlusPublish = lazy(() => import('../../views/administration/pages/portalplus/PortalPlusPublish'));\nconst PortalPlusRegistration = lazy(() => import('../../views/administration/pages/portalplus/PortalPlusRegistration'));\nconst PortalPlusSSL = lazy(() => import('../../views/administration/pages/portalplus/PortalPlusSSL'));\nconst PortalPlusSSO = lazy(() => import('../../views/administration/pages/portalplus/PortalPlusSSO'));\nconst PortalPlusTerms = lazy(() => import('../../views/administration/pages/portalplus/PortalPlusTerms'));\nconst PortalPlusWebshop = lazy(() => import('../../views/administration/pages/portalplus/PortalPlusWebshop'));\nconst PortalPlusIcon = lazy(() => import('../../views/administration/pages/portalplus/PPIcon'));\n\n\nconst PortalPlus = lazy(() => import('../../views/portalplus/PortalPlus'));\nconst Collections = lazy(() => import('../../views/portalplus/pages/Collections'));\nconst Collection = lazy(() => import('../../views/portalplus/pages/ViewCollection'));\nconst CreateCollection = lazy(() => import('../../views/portalplus/pages/CreateCollection'));\nconst IDCheckPending = lazy(() => import('../../views/portalplus/pages/IDCheck/Pending'));\nconst IDCheckApproved = lazy(() => import('../../views/portalplus/pages/IDCheck/Approved'));\nconst IDCheckRejected = lazy(() => import('../../views/portalplus/pages/IDCheck/Rejected'));\nconst Customise = lazy(() => import('../../views/portalplus/pages/Customise'));\nconst StatsPortal = lazy(() => import('../../views/portalplus/pages/Stats'));\nconst Webshop = lazy(() => import('../../views/portalplus/pages/Webshop'));\n\n\nconst AppRoutes = () => {\n const login = sbLogin();\n let config = getConfig;\n\n const userRoles = login?.roles;\n const aclConfig = config?.acls;\n\n const { isRoleAdmin, isCanCreate, isCanManageEvents, canAccessGallery, isCanDelete, isCanViewCuration } = useMemo(() => {\n const isRoleAdmin = roleAdmin(userRoles, aclConfig);\n const isCanViewGallery = canViewGallery(userRoles, aclConfig);\n const isCanDelete = canDelete(userRoles, aclConfig);\n const isCanCreate = canCreate(userRoles, aclConfig);\n const isCanManageEvents = canManageEvents(userRoles, aclConfig);\n const canAccessGallery = isCanViewGallery || isRoleAdmin;\n const isCanViewCuration = canViewCuration(userRoles, aclConfig)\n\n return { isRoleAdmin, isCanViewGallery, isCanCreate, isCanManageEvents, canAccessGallery, isCanDelete, isCanViewCuration };\n }, [userRoles, aclConfig]);\n\n const CurationRouteComponent = () => {\n const { id } = useParams();\n const num = parseInt(id, 10)\n if (num === 1) {\n if (login.roles !== undefined && login.roles !== null && login.roles.length !== undefined && isCanViewCuration) {\n return \n } else {\n return \n }\n } else {\n return \n }\n };\n\n const normalRoutes = useMemo(() => (\n <>\n } />\n } />\n } />\n\n } />\n }/>\n } />\n\n } />\n \n ), []);\n\n const DeleteRoute = useMemo(() => {\n if (login.roles !== undefined && login.roles !== null && login.roles.length !== undefined && isCanDelete) {\n return (\n <>\n } />\n } />\n \n );\n }\n return (\n <>\n } />\n } />\n \n );\n }, [isCanDelete, login.roles]);\n\n const galleryprofilesRoute = useMemo(() => {\n if (login.roles !== undefined && login.roles !== null && login.roles.length !== undefined && canAccessGallery) {\n return (\n <>\n } />\n } />\n } />\n } />\n } />\n } />\n \n );\n }\n return (\n <>\n } />\n } />\n } />\n } />\n } />\n \n );\n }, [canAccessGallery, login.roles]);\n\n\n const uploadRoute = useMemo(() => {\n if (login.roles !== undefined && login.roles !== null && login.roles.length !== undefined && (isCanCreate || isRoleAdmin) && login.is_active) {\n if (config.expired !== undefined) {\n return (\n <>\n } />\n \n );\n } else {\n return (\n <>\n } />\n \n );\n }\n }\n return (\n <>\n } />\n \n );\n }, [login.roles, config.expired, isCanCreate, isRoleAdmin, login.is_active]);\n\n\n\n\n\n const adminRoutes = useMemo(() => (\n <>\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n\n \n ), []);\n\n const memoizedAdminRoutes = useMemo(() => {\n return isRoleAdmin ? adminRoutes : null;\n }, [isRoleAdmin, adminRoutes]);\n\n\n const portalRoutes = useMemo(() => (\n <>\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n \n ), []);\n\n const communityRoutes = useMemo(() => (\n <>\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n } />\n \n ), []);\n\n const rolesPortalRoutes = useMemo(() => {\n if (isRoleAdmin || isCanManageEvents) {\n return config.portal_valid ? portalRoutes : communityRoutes;\n }\n return communityRoutes;\n }, [portalRoutes, communityRoutes, config.portal_valid, isCanManageEvents, isRoleAdmin]);\n\n return (\n \n\n {normalRoutes}\n\n {galleryprofilesRoute}\n\n {uploadRoute}\n\n {DeleteRoute}\n\n {memoizedAdminRoutes}\n\n {rolesPortalRoutes}\n\n } />\n\n \n );\n};\n\nexport default AppRoutes;","import React, { Suspense, useEffect, useState } from 'react';\nimport ReactDOM from 'react-dom/client'\nimport { BrowserRouter} from \"react-router-dom\";\n\nimport { check_login_bool } from \"./ressources/functions/Login\";\nimport { loadConfig, config as getConfig, LT } from \"./ressources/functions/Config\";\nimport { WebSocketSetup } from \"./views/socket\";\nimport { getPillar } from \"./views/administration/Pillar\";\nimport { getFacets, getAllFacets } from './ressources/functions/Query';\nimport { loadTrashcan } from './ressources/functions/Trashcan';\nimport { sbToken, sbLogin, sbValid } from './components/utils/localValues';\n\nimport DefaultRoutes from './components/routes/DefaultRoutes';\nimport AppRoutes from './components/routes/AppRoutes';\n\nimport './assets/css/vendor/bootstrap-float-label.min.css';\nimport './assets/css/vendor/bootstrap.css';\nimport './assets/font/iconsmind-s/css/iconsminds.css';\nimport './assets/font/simple-line-icons/css/simple-line-icons.css';\nimport 'rsuite/dist/rsuite.min.css';\nimport './index.css';\nimport './assets/styles/admin.css';\nimport './assets/css/portalplus.css';\n\nconst RootComponent = () => {\n const [configLoaded, setConfigLoaded] = useState(false);\n const [initialized, setInitialized] = useState(false);\n const [token, setToken] = useState(null);\n const [login, setLogin] = useState(null);\n const [valid, setValid] = useState(null);\n let config = getConfig;\n\n useEffect(() => {\n const initializeApp = async () => {\n // Load configuration\n await loadConfig();\n setToken(sbToken());\n setLogin(sbLogin());\n setValid(sbValid());\n setConfigLoaded(true);\n };\n\n initializeApp();\n\n // Check for login status on different URL matches\n if (document.URL.match(\"/sso?\")) {\n fetch(document.URL).then(resp => resp.json());\n }\n\n if (document.URL.match(\"/samllogin/\") || document.URL.match(\"/\")) {\n check_login_bool();\n }\n\n WebSocketSetup();\n\n }, []);\n\n // If login and config are valid, load additional data\n if (login !== undefined && login !== null && config !== undefined && config !== null) {\n const initializeloading = async () => {\n // Load configuration\n await loadTrashcan();\n LT();\n getPillar();\n getFacets();\n getAllFacets();\n setInitialized(true)\n };\n if (!initialized) {\n initializeloading();\n }\n }\n\n // If the config is not yet loaded, show a loading state\n if (!configLoaded) {\n return
;\n }\n\n const isValidState = () => {\n const isTokenValid = token && valid !== 'false' && valid !== undefined && valid !== 'undefined';\n const isLoginValid = login && login.roles !== undefined;\n const isConfigValid = config !== null && config !== undefined;\n\n return isTokenValid && isLoginValid && isConfigValid;\n };\n\n // If no valid subscription or invalid token, render default login screen\n if (isValidState()) {\n return ;\n } else {\n return ;\n }\n\n};\n\n// Rendering the application\nconst root = ReactDOM.createRoot(document.getElementById(\"root\"));\nroot.render(\n \n }>\n \n \n \n);","import { toaster, Message, } from 'rsuite';\nimport { getToken } from './helper';\n\n\n\nexport var MyAlbums = []\nexport var Curation = []\n\n\n// Helper for API calls\nconst apiCall = async (url, method = 'GET', body = null, hideToaster = false) => {\n let token = getToken();\n const headers = { \n 'Content-Type': 'application/json', \n \"Semabench-Token\": token, \n \"Cache-Control\": \"max-age=0\" \n };\n \n if (!hideToaster) toaster.clear();\n \n try {\n const response = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : null,\n });\n \n const responseBody = await response.text();\n \n // Only parse JSON if the response is not empty\n return responseBody ? JSON.parse(responseBody) : null;\n } catch (error) {\n console.error('API Error:', error);\n if (!hideToaster) {\n toaster.push({error.message || \"An error occurred.\"});\n }\n return undefined;\n }\n};\n\n\n// API to get album Nodes\nexport const getAlbumNodes = async (uaid) => {\n if (!uaid) return undefined;\n const result = await apiCall(`../api/v1/albumnodes?uaid=${uaid}`);\n if (uaid === 1) {\n Curation = result;\n }\n return result;\n};\n\n// remove the item from the album\nexport async function removeFromAlbum(uaid, nodes, hide) {\n if (!uaid || !nodes) return;\n\n if (uaid !== \"1\" && !hide) {\n toaster.push(Removing Items...);\n }\n\n const url = \"../api/v1/albumnodes\";\n const result = { uaid: parseInt(uaid), nodes };\n await apiCall(url, \"DELETE\", result);\n\n if (uaid !== \"1\" && !hide) {\n toaster.push(Items Removed, { duration: 3000 });\n }\n}\n\nexport async function updateAlbum(uaid, album) {\n if (!uaid || !album) return;\n\n const url = `../api/v1/album?uaid=${uaid}`;\n const success = await apiCall(url, \"POST\", album);\n\n if (success) {\n toaster.push({`Album ${album.name} Updated.`}, { duration: 4000 });\n }\n}\n\n\n// Calls the api to get the UAIDs that the node belongs in\nexport async function getAlbumByNode(node) {\n if (!node) return undefined;\n\n const url = `../api/v1/album/node?node=${node}`;\n return await apiCall(url);\n}\n\n// Method to call the back and loads the albums.\nexport async function getMyAlbums() {\n const url = \"../api/v1/user/myalbums\";\n const result = await apiCall(url);\n\n if (!result || !Array.isArray(result)) return [];\n\n MyAlbums = result.filter(({ uaid, parameters, continuity }) =>\n uaid !== 1 && uaid !== 2 && parameters === null && (!continuity || continuity === \"\")\n );\n return MyAlbums;\n}\n","import forge from \"node-forge\";\nimport Handlebars from 'handlebars';\nimport { getView } from './helper';\nimport { getToken } from './helper';\n\nexport var M = \"\";\nexport const K = \"WjGJYzSUN9jvIy24O2nNZzVHEyCrpzczH0DV2xiXphB\";\n\n// Inistail state of the config.\nexport const initialState = {\n acls: [],\n acl_fields: [],\n view: {\n sort: { field: \"cm_modified\", direction: \"desc\" },\n query: \"\",\n facets: [\"path_starts_with\"],\n columns: [\"cm_name\", \"cm_title\", \"cm_modified\"],\n filters: [],\n results_view: \"grid\",\n filter_rules: [],\n },\n summary_views: [],\n result_views: [],\n colour_rules: [],\n social_media: {\n facebook_filters: [],\n instagram_filters: []\n },\n media: { allow_social: false },\n title: \"SchoolBench®\",\n default_filter: \"\",\n filter_rules: {},\n path_strip: \"/Company Home/\",\n drop_folder: \"/Company Home/Semabench\",\n loaded: false,\n failed: false,\n suggested_searches: [],\n pipeline_names: {},\n has_watermark: false,\n enable_quick_parent: false,\n enable_community: false,\n enable_timeout: \"false\",\n action_timeout: \"10\",\n popup_timeout: \"30\"\n};\n\nexport var config = initialState;\n\n// initial state of the info and default fields\nconst infoInitialState = {\n fields: {\n \"path_starts_with\": {\n title: \"Path Starts With\",\n type: \"path\",\n is_mandatory: false,\n is_multivalued: false\n },\n \"type\": {\n title: \"Type\",\n type: \"text\",\n is_mandatory: false,\n is_multivalued: false\n },\n \"mime_type\": {\n title: \"Mime type\",\n type: \"text\",\n is_mandatory: false,\n is_multivalued: false\n },\n \"size\": {\n title: \"File size\",\n type: \"long\",\n is_mandatory: false,\n is_multivalued: false\n },\n \"preview_kind\": {\n title: \"Preview Kind\",\n type: \"text\",\n is_mandatory: false,\n is_multivalued: true\n },\n \"id\": {\n title: \"Node ID\",\n type: \"text\",\n is_mandatory: false,\n is_multivalued: false\n }\n },\n // for provide the corresponding labels for fields name coming back from solr or Alfresco\n lookup: { \"preview_kind\": \"Preview Kind\", \"path\": \"Path\", \"path_starts_with\": \"Path Starts With\", \"type\": \"Type\", \"size\": \"File size\", \"mime_type\": \"Mime type\", \"aspects\": \"Aspects\", \"site\": \"Site\", \"id\": \"Node ID\", \"[NOW-1DAY TO NOW]\": \"Last 24hrs\", \"[NOW-7DAYS TO NOW]\": \"Last 7 days\", \"[NOW-1MONTH TO NOW]\": \"Last 31 days\", \"[NOW-1YEAR TO NOW]\": \"Last 365 days\", \"[* TO NOW-1YEAR]\": \"More than a year ago\" },\n error: {}\n};\n\n\nexport var Field_Info = infoInitialState;\n\n/**\n * Take a config and augment with any default values or adjustments that need to be made before\n * loading in the config\n */\nconst populateDefaultValues = (config) => {\n\n if (config.view.filter_rules === undefined || config.view.filter_rules === null) {\n config.view.filter_rules = populateFilterRules(config);\n }\n\n // Populate any missing keys from initialState (eg. user has upgraded and is missing a view key)\n Object.keys(initialState.view).forEach(key => {\n if (config.view[key] === undefined || config.view[key] === null) {\n config.view[key] = initialState[key];\n }\n });\n\n return config;\n}\n\n// populates the default filter rules if undefined\nconst populateFilterRules = (config) => {\n if (config.filter_rules !== undefined && config.filter_rules !== null) {\n return Object.keys(config.filter_rules);\n }\n return [];\n}\n\n// Loads the config from the server\nexport async function loadConfig() {\n let response = await fetch(\"../api/v1/config\", {\n mode: 'no-cors',\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\"\n }\n });\n\n let resp = await response.json();\n config = resp.config;\n config.portal_valid = resp.portal_valid\n config.view.filter_rules = populateFilterRules(config);\n config = populateDefaultValues(config);\n let acls = [];\n let acl_fields = [];\n\n if (resp.acl !== undefined && resp.acl !== null) {\n acls = resp.acl.map(acl => {\n acls.roles = acl.roles.map(role => {\n let transformedRole = role;\n\n if (typeof role === 'string') {\n let re = /{{[{]?(.*?)[}]?}}/g;\n let match = null;\n let is_template = false;\n\n while ((match = re.exec(role))) {\n is_template = true;\n acl_fields.push(match[1]);\n }\n\n if (is_template) {\n transformedRole = Handlebars.compile(role);\n }\n }\n return transformedRole;\n });\n\n if (acl.params && acl.params.matched_values) {\n Object.keys(acl.params.matched_values).forEach(val => acl_fields.push(val));\n }\n return acl;\n });\n\n config.acls = acls;\n config.acl_fields = acl_fields;\n }\n\n let view = JSON.parse(localStorage.getItem(\"V\"));\n if (view === null || view === undefined) {\n localStorage.setItem(\"V\", JSON.stringify(config.view));\n }\n\n loadInfo(resp.fields);\n}\n\n\n// Loads the config from the server\nexport function updateConfig(new_config) {\n config = new_config\n}\n\nfunction loadInfo(field_info) {\n if (field_info !== undefined && field_info !== null) {\n let lookup = Field_Info.lookup;\n let fields = field_info;\n\n if (fields[\"cm_content\"]) {\n fields[\"cm_content\"].is_multivalued = true;\n }\n\n Object.keys(fields).forEach((key) => {\n if (fields[key].title) {\n lookup[key] = fields[key].title;\n }\n });\n\n Field_Info.fields = {\n ...Field_Info.fields,\n ...fields\n }\n Field_Info.lookup = lookup;\n }\n\n}\n\n// Method called to get the form from the local storage\nexport const getForm = () => {\n let form = {\n \"rulesets\": [\n {\n \"name\": \"default_node\",\n \"conditions\": {\n \"required_fields\": [\"cm_content\"],\n \"create_mode\": true,\n \"initial_only\": true\n },\n \"templates\": {\n \"path\": \"/Company Home/Schoolbench/{{substring id 0 2}}/{{substring id 2 4}}/\",\n \"sb_adminStatus\": \"Unverified\",\n \"type\": \"cm_content\",\n \"cm_name\": \"{{{filename}}}\"\n }\n },\n {\n \"name\": \"profile\",\n \"conditions\": {\n \"required_fields\": [\"sb_profileName\"],\n \"create_mode\": true,\n },\n \"templates\": {\n \"sb_adminStatus\": \"Profile\"\n }\n }\n ]\n }\n return form;\n}\n\nexport async function LT() {\n let token = getToken();\n return await fetch(\"../api/v1/m\", {\n method: 'GET',\n headers: { \"semabench-token\": token }\n }).then(res => {\n return res.json()\n }).then(async result => {\n M = await DT(result);\n return M\n })\n}\n\nexport async function T() {\n if (M === \"\") {\n return await LT()\n } else {\n return M\n }\n}\n\nexport async function DT(encryptedInput) {\n try {\n // Decode Base64 key\n let keyBytes = forge.util.decode64(K);\n\n // Truncate the key to 32 bytes if necessary\n keyBytes = keyBytes.slice(0, 32);\n\n // Decode the Base64-encoded input\n const encryptedBytes = forge.util.decode64(encryptedInput);\n\n // Extract the nonce (first 12 bytes), ciphertext (middle), and tag (last 16 bytes)\n const nonce = encryptedBytes.slice(0, 12); // First 12 bytes\n const ciphertext = encryptedBytes.slice(12, -16); // Middle bytes\n const tag = encryptedBytes.slice(-16); // Last 16 bytes\n\n // Create the decipher\n const decipher = forge.cipher.createDecipher(\"AES-GCM\", keyBytes);\n\n // Additional authenticated data\n const additionalData = forge.util.createBuffer(\"semabench\", \"utf8\");\n\n // Start the decipher\n decipher.start({\n iv: nonce, // Nonce\n additionalData: additionalData, // AAD\n tagLength: 128, // Authentication tag length\n tag: forge.util.createBuffer(tag), // Authentication tag\n });\n\n // Decrypt the ciphertext\n decipher.update(forge.util.createBuffer(ciphertext));\n\n const success = decipher.finish();\n if (!success) {\n throw new Error(\"Decryption failed. Authentication tag mismatch.\");\n }\n\n // Get the plaintext\n const decryptedText = decipher.output.toString(\"utf8\").replace(/\\u0000+$/g, \"\"); // Remove trailing null characters\n\n return decryptedText;\n } catch (error) {\n throw error;\n }\n}\n\nexport const checkFacetList = (facetToCheck) => {\n const localStorageData = JSON.parse(localStorage.getItem(\"V\"));\n let facet = [];\n if (localStorageData) {\n facet = localStorageData.facets || [];\n }\n return facet.includes(facetToCheck);\n}\n\nexport const DefaultFilterList = [\n { label: \"Class\", value: \"sb_class\" },\n { label: \"Year\", value: \"sb_year\" },\n { label: \"Event\", value: \"sb_event\" },\n { label: \"Tags\", value: \"sb_tags\" },\n { label: \"Student\", value: \"sb_student\" },\n { label: \"Staff\", value: \"sb_staff\" },\n { label: \"Past Student\", value: \"sb_pastStudent\" },\n { label: \"Year Level\", value: \"sb_studentYearLevel\" },\n { label: \"Consent\", value: \"sb_parentPermissions\" },\n { label: \"Allowed To Publish\", value: \"sb_allowedTo\" },\n { label: \"File Format\", value: \"mime_type\" },\n { label: \"Taken Date\", value: \"exif_dateTimeOriginal\" },\n { label: \"Boarder\", value: \"sb_studentBoarder\" },\n { label: \"Student Campus\", value: \"sb_studentCampus\" },\n { label: \"Cohort\", value: \"sb_studentCohort\" },\n { label: \"House\", value: \"sb_studentHouse\" },\n { label: \"SubSchool\", value: \"sb_studentSubSchool\" },\n { label: \"Visitor\", value: \"sb_visitor\" },\n { label: \"Published History\", value: \"sb_publishedTo\" },\n { label: \"Rendition\", value: \"preview_kind\" },\n { label: \"Other Names\", value: \"sb_otherNames\" },\n ...(checkFacetList(\"sb_uploaderCampus\") ? [{ label: 'Uploader Campus', value: 'sb_uploaderCampus' }] : []),\n { label: 'Week', value: 'sb_week' },\n { label: 'Term', value: 'sb_term' },\n { label: 'Upload Date', value: 'cm_created' }\n];\n\nexport const FilterNameChanges = {\n 'sb_studentBoarder': 'Boarder',\n 'sb_studentCampus': 'Student Campus',\n 'sb_studentCohort': 'Cohort',\n 'sb_studentHouse': 'House',\n 'sb_studentSubSchool': 'SubSchool',\n 'sb_publishedTo': 'Published History',\n 'sb_studentYearLevel': 'Year Level',\n 'sb_parentPermissions': 'Consent',\n 'preview_kind': 'Rendition',\n 'mime_type': 'File Format',\n 'sb_uploaderCampus': 'Uploader Campus'\n};\n\nexport const ArchivedFilters = [\n { label: 'Boarder', value: 'sb_studentBoarder' },\n { label: 'Student Campus', value: 'sb_studentCampus' },\n { label: 'Cohort', value: 'sb_studentCohort' },\n { label: 'House', value: 'sb_studentHouse' },\n { label: 'SubSchool', value: 'sb_studentSubSchool' },\n { label: 'Visitor', value: 'sb_visitor' },\n { label: 'Published History', value: 'sb_publishedTo' },\n { label: 'Rendition', value: 'preview_kind' },\n { label: 'Other Names', value: 'sb_otherNames' },\n ...(checkFacetList(\"sb_uploaderCampus\") ? [{ label: 'Uploader Campus', value: 'sb_uploaderCampus' }] : []),\n { label: 'Week', value: 'sb_week' },\n { label: 'Term', value: 'sb_term' },\n { label: 'Upload Date', value: 'cm_created' }\n];\n\nexport const extendColumnsWithLabel = () => {\n const localStorageData = getView();\n let columns = localStorageData?.columns || [];\n\n const unchangedColumnFields = columns.map(column => ({ label: Field_Info[\"lookup\"][column], value: column }));\n\n const transformedColumns = unchangedColumnFields.map(option => {\n if (FilterNameChanges[option.value]) {\n return {\n ...option,\n label: FilterNameChanges[option.value]\n };\n }\n return option;\n });\n return transformedColumns;\n};\n\nexport const saveViewType = (view_type) => {\n const localStorageData = getView();\n\n let parsedData;\n if (localStorageData) {\n parsedData = localStorageData;\n } else {\n parsedData = {};\n }\n\n parsedData.view_type = view_type;\n\n const updatedLocalStorageDataString = JSON.stringify(parsedData);\n\n localStorage.setItem('V', updatedLocalStorageDataString);\n};\n\nexport const getViewType = () => {\n const localStorageData = getView();\n if (localStorageData) {\n return localStorageData.view_type || 'default';\n }\n return 'default';\n};\n\nexport const saveFilterValues = () => {\n const localStorageData = getView();\n\n let parsedData;\n if (localStorageData) {\n parsedData = localStorageData;\n } else {\n parsedData = {};\n }\n\n const currentFilters = parsedData.filters;\n\n parsedData.persisted_filters = currentFilters;\n\n const updatedLocalStorageDataString = JSON.stringify(parsedData);\n\n localStorage.setItem('V', updatedLocalStorageDataString);\n};\n\nexport const loadFilterValues = () => {\n const localStorageData = getView();\n if (localStorageData) {\n return localStorageData.persisted_filters || [];\n }\n return [];\n};\n\nexport const getPersistedFilterValue = (filterName) => {\n const localStorageData = getView();\n if (localStorageData) {\n const persistedFilters = localStorageData.persisted_filters || [];\n\n // Find the specific filter based on the field_name\n const filter = persistedFilters.find(\n item => item.field_name === filterName\n );\n\n if (filter) {\n return filter.value;\n }\n }\n return null;\n};\n\nexport const checkAvailableConsent = (nodes, consent_to_check) => {\n if (!nodes) {\n return false;\n }\n\n const available_consents = nodes.find(node => node.field_name === 'sb_parentPermissions');\n\n if (available_consents && Array.isArray(available_consents.childNodes)) {\n return available_consents.childNodes.some(childNode => childNode.label === consent_to_check);\n }\n\n return false;\n}\n\n\n","import { toaster, Message } from 'rsuite';\nimport { Buffer } from 'buffer';\nimport { WebSocketSetup } from '../../views/socket';\nimport { checkAcl } from '../../adminressources/ACLHelper.js';\nimport { getToken, decrypt_storage_values, encrypt_storage_values } from './helper';\nimport { config as getConfig } from './Config.js';\nimport Cookies from 'universal-cookie';\n\n\n\nexport var MultiCampus = null;\n\n// Helper function to retrieve token from multiple sources\nfunction retrieveToken() {\n let token = getToken();\n\n // Check token in URL fragments\n if (document.URL.match(\"#token\")) {\n token = document.URL.split(\"#token:\")[1];\n } else if (document.URL.match(\"samllogin/#token\")) {\n token = document.URL.split(\"#token:\")[1];\n }\n\n // Retrieve token from XMLHttpRequest headers if available\n const req = new XMLHttpRequest();\n req.open('GET', document.location, false);\n req.send(null);\n \n const headerToken = req.getResponseHeader(\"Semabench-Token\");\n if (headerToken) {\n token = headerToken;\n }\n\n return token || \"NO TOKEN FOUND IN HEADER OR BODY\";\n}\n\n// Helper function to create headers\nfunction createHeaders(token) {\n return {\n 'Content-Type': 'application/json',\n 'Semabench-Token': token,\n 'Source': 'media'\n };\n}\n\n// Method for when a user submits a password\nexport async function submit_login(username, pass) {\n if (!pass) {\n toaster.clear();\n toaster.push(Please enter a valid password, { duration: 5000 });\n return null;\n }\n\n // Encrypts the pass to base64\n var password = Buffer.from(pass).toString('base64');\n\n try {\n const response = await fetch(\"../api/v1/repo/s/semabench/ticket\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\",\n \"Source\": 'media'\n },\n body: JSON.stringify({ name: username, value: password, source: 'media' })\n });\n\n if (response.status === 401) {\n toaster.clear();\n toaster.push(You do not have View permissions, please contact your IT support, { duration: 5000 });\n return null;\n }\n\n return response.json();\n } catch (error) {\n return null;\n }\n}\n\n// Checks if there is a valid token or logs in on first start\nexport async function check_login() {\n const token = retrieveToken();\n const headers = createHeaders(token);\n\n try {\n const response = await fetch(\"../api/v1/repo/s/semabench/ticket\", {\n method: \"GET\",\n headers\n });\n\n const url = response.headers.get(\"location\");\n if (url && token === \"NO TOKEN FOUND IN HEADER OR BODY\") {\n window.location.reload(true);\n window.location.replace(url);\n } else {\n return response.ok ? response.json() : null;\n }\n } catch (error) {\n return null;\n }\n}\n\n// Checks if login token is valid with boolean return\nexport async function check_login_bool() {\n const token = retrieveToken();\n const headers = createHeaders(token);\n\n try {\n const response = await fetch(\"../api/v1/repo/s/semabench/ticket\", {\n method: \"GET\",\n headers\n });\n\n const url = response.headers.get(\"location\");\n if (url && token === \"NO TOKEN FOUND IN HEADER OR BODY\") {\n window.location.reload(true);\n window.location.replace(url);\n return false;\n }\n\n if (response.status === 401) {\n return false;\n }\n\n const data = await response.json();\n\n if (data?.ticket) {\n multicampus_checker(data);\n storeLoginSession(data); // Store session data if a valid ticket is present\n WebSocketSetup();\n return true;\n } else {\n return false; // No ticket found\n }\n } catch (error) {\n return false;\n }\n}\n\n// Helper function to store session data\nfunction storeLoginSession(data) {\n \n const cookies = new Cookies();\n localStorage.setItem(\"valid\", 'Okay');\n\n let expires = cookies.get('E');\n expires = expires ? JSON.parse(decrypt_storage_values(expires)) : new Date(Date.now() + 1000 * 60 * 60 * 12); // Set default expiration\n\n const encryptedExpires = encrypt_storage_values(JSON.stringify(new Date(expires)));\n localStorage.setItem(\"L\", encrypt_storage_values(JSON.stringify(data)));\n localStorage.setItem(\"T\", encrypt_storage_values(data.ticket));\n cookies.set('T', encrypt_storage_values(data.ticket), { path: '/', expires: new Date(expires), secure: true, sameSite: \"Strict\" });\n cookies.set('E', encryptedExpires, { path: '/', expires: new Date(expires), secure: true, sameSite: \"Strict\" });\n}\n\n// Checks for multi-campus setup on login\nexport function multicampus_checker(login) {\n let config = getConfig;\n const login_detail = login;\n\n // If the user is an admin, skip the process and return 'admin'\n if (checkAcl(login_detail.roles, config.acls, \"ADMIN\")) {\n return 'admin';\n }\n\n if (config.multicampus) {\n const multicampus = config.multicampus;\n const multicampusLength = multicampus.length;\n\n if (multicampusLength > 0) {\n let campus = [];\n\n // Loop through the multicampus array and check roles\n for (let x = 0; x < multicampusLength; x++) {\n const roleFound = multicampus[x].roles.some(role => login_detail.roles.includes(role));\n\n if (roleFound) {\n campus = campus.concat(multicampus[x].campus); // Add campus to the array\n }\n }\n\n // Remove duplicates\n campus = [...new Set(campus)];\n\n MultiCampus = campus;\n return campus;\n }\n }\n\n return null;\n}","import { toaster, Message } from 'rsuite';\nimport { isArray } from 'util';\nimport { getAlbumNodes, Curation } from '../functions/AlbumAPIs.js';\nimport { checkAcl, checkMultiCampus, getMultiCampuslist } from \"../../adminressources/ACLHelper.js\";\nimport { getToken, getView, Check_login_ticket, decrypt_storage_values } from './helper.js';\nimport { MyBin } from './Trashcan.js';\nimport { Field_Info, config as getConfig } from './Config.js';\n\n// Initial state of Advance Query\nexport const defaultAdvanced = {\n and: true,\n field: \"\",\n field_selected: false,\n op: \"~=\",\n value: \"\"\n}\n\n// initial State of the Query object\nexport const initialState = {\n advanced_query: [{ ...defaultAdvanced }],\n};\n\nexport var Query = initialState;\n\n// Loads the config from the server\nexport function updateQuery(query) {\n Query = query\n}\n// Sets the default facet limit to 1000\nexport const FACET_LIMIT = 10000;\n\nexport var FacetData = undefined;\nexport var AllFacetData = undefined;\n// const query_pattern = /([\\!\\*\\+\\-\\=\\<\\>\\&\\|\\(\\)\\[\\]\\{\\}\\^\\~\\?\\:\\\\/\"])/g;\nconst query_pattern = /([!*+-=<>&|()[]{}^~?:\\/\"])/g;\n\n// Sanitise Query method for removing and changing query to yaml readable\nexport const sanitiseQuery = (query) => {\n let q = String(query);\n return q.replace(query_pattern, \"\\\\$1\");\n}\n\n// returns the suggested Query fields and query fields used by solr\nconst getQueryFields = (config, info) => {\n\n let returnFields = \"suggest^10\";\n\n let result_view_fields = config?.result_views.map(view => {\n\n let fields = [];\n\n fields = fields.concat(view.heading);\n\n if (view.sub_heading !== undefined && view.sub_heading !== null) {\n fields = fields.concat(view.sub_heading);\n }\n\n if (view.first_row !== undefined && view.first_row !== null) {\n fields = fields.concat(view.first_row);\n }\n\n if (view.second_row !== undefined && view.second_row !== null) {\n fields = fields.concat(view.second_row);\n }\n\n\n return fields;\n }).reduce((a, b) => a.concat(b), []);\n\n result_view_fields = result_view_fields.filter(field => info.fields[field] !== undefined && info.fields[field] !== null && info.fields[field].type === \"text\").map(field => field + \"_q\");\n\n\n returnFields += \" \" + result_view_fields.join(\" \");\n\n if (config.suggest_field !== undefined && config.suggest_field !== null) {\n returnFields += \" \" + config.suggest_field;\n }\n\n\n return returnFields;\n}\n\n\nexport const convertToLucence = (query, fields) => {\n // For each row (used for advance) returns a solr readable query from user input\n return query.filter(row => row.value !== \"\" && row.field_selected === true)\n .map((row) => {\n let return_row = { ...row };\n // Converts the date to ISO string if the value is a date\n if (fields[row.field] !== null && fields[row.field].type === \"date\" && (row.op === \">=\" || row.op === \"<=\")) {\n let date_value = row.value;\n try {\n return_row.value = date_value\n } catch {\n return_row.value = \"\"\n }\n }\n\n\n return return_row\n })\n .filter(row => row.value !== \"\")\n .map((row, index) => {\n let return_query = \"\";\n\n if (index > 0) {\n return_query += row.and ? \"AND \" : \"OR \";\n }\n\n let type = getType(fields[row.field]);\n\n // Depending on the operator used, will create the query\n if (row.field !== undefined && row.value !== undefined && row.field !== null && row.value !== null) {\n switch (row.op) {\n default:\n break;\n case \"~=\":\n\n if (type === \"text\" && row.field !== \"path_starts_with\" && row.field !== \"path\") {\n return_query += `${row.field}:*${row.value.replace(/\\s/g, \"\\\\ \")}*`\n } else {\n return_query += `${row.field}:*${row.value.replace(/\\s/g, \"\\\\ \")}*`\n }\n break;\n\n case \"==\":\n if (row.value === \"*\" && type === \"number\") {\n row.value = \"[* TO *]\";\n }\n try {\n return_query += row.value.indexOf(\"*\") !== -1 ? `${row.field}:${row.value}` : `${row.field}:\"${row.value}\"`\n } catch {\n return_query += `${row.field}:${row.value}`\n }\n break;\n\n case \"!=\":\n\n if (row.value === \"*\" && (type === \"number\" || type === \"long\")) {\n row.value = \"[* TO *]\";\n }\n\n //Solr automatically expands -field:* to (*:* NOT field:*) but ONLY for the first statement... \n return_query += row.value.indexOf(\"*\") !== -1 ? `(*:* NOT ${row.field}:${row.value})` : `(*:* NOT ${row.field}:\"${row.value}\")`\n break;\n\n case \">=\":\n return_query += `${row.field}:[${row.value} TO *]`\n break;\n\n case \"<=\":\n return_query += `${row.field}:[* TO ${row.value}]`\n break;\n }\n }\n return return_query;\n })\n .join(\" \");\n}\n\n// allowed operator types\nexport const allowed_types = {\n text: ['~=', '==', '!='],\n select: ['==', '!='],\n boolean: ['=='],\n date: ['>=', '<='],\n number: ['==', '!=', '>=', '<=']\n};\n\n// labels for each operator types\nexport const allowed_types_selector = {\n text: [{ label: \"Contains\", value: '~=' }, { label: \"Equals\", value: '==' }, { label: \"Does Not Equal\", value: '!=' }],\n select: [{ label: \"Equal\", value: '==' }, { label: \"Not Equal\", value: '!=' }],\n boolean: [{ label: \"Equal\", value: '==' }],\n date: [{ label: \"Greater Than or Equal To\", value: '>=' }, { label: \"Less Than or Equal To\", value: '<=' }],\n number: [{ label: \"Equals\", value: '==' }, { label: \"Not Equal\", value: '!=' }, { label: \"Greater Than or Equal To\", value: '>=' }, { label: \"Less than or Equal To\", value: '<=' }]\n};\n\n// Gets the type of field and returns the type matched in alfresco\nexport const getType = (info) => {\n let field_type = \"text\";\n if (info !== undefined && info !== null) {\n if (info.constraints && info.constraints.list) {\n field_type = \"select\";\n } else if (info.type === \"path\") {\n field_type = \"text\";\n } else if (info.type === \"boolean\") {\n field_type = \"boolean\";\n } else if (info.type === \"double\" || info.type === \"long\" || info.type === \"int\") {\n field_type = \"number\";\n } else if (info.type === \"date\") {\n field_type = \"date\";\n }\n }\n\n return field_type;\n}\n\n// convert filters to string query\nexport const filterToString = (filter, fields) => {\n let val;\n\n let join = \" OR \";\n\n if (filter.type !== undefined && filter.type !== null) {\n join = \" \" + filter.type + \" \";\n }\n\n // Skip sanitisation rules if field type is \"date\" or field name is \"id\"\n if ((fields[filter.field_name] !== undefined && fields[filter.field_name].type === \"date\") || filter.field_name === \"id\" || (filter.value.length > 0 && filter.value[0] === \".*\")) {\n if (filter.value !== undefined && filter.value !== null) {\n val = `(${filter.value.join(join)})`;\n }\n\n } else {\n val = `(${filter.value.map(val => `\"${sanitiseQuery(val)}\"`).join(join)})`;\n }\n\n return `{!tag=${filter.field_name}}${filter.inverse ? \"-\" : \"+\"}${filter.field_name}:${val}`;\n\n}\n\n// Initial field list\nexport const fieldList = (fields) => {\n return Object.keys(fields).concat([\"id\", \"type\", \"path\", \"cm_name\", \"preview_ref\", \"preview_kind\", \"preview_type\", \"sb_tags\", \"sb_publisedTo\"]);\n}\n\n\nexport async function submitSolrQuery(type, selectedRows, id, resolution, albumNodes, albumFilters, uploadedNodes) {\n // Updates suggestive search everytime a query is applied\n if (!getConfig?.suggestions) {\n updateSearchSuggestions();\n }\n // Loads all the config, info and currenty query\n let config = getConfig;\n let view = getView();\n\n //remove filters if it is albums\n if (albumNodes !== undefined && [\"classify\", \"album\"].includes(type)) {\n view.filters = []\n }\n\n // loads the nodes that are within the bin\n let bin = [...MyBin]\n\n // if not accessing upload, bin or curation. Will add the curation and bin nodes to a filter to ignore them on lookup\n let curation = []\n if (type === undefined || type === null || ![\"bin\", \"classify\", \"upload\", \"album\"].includes(type)) {\n const albumNodes = await getAlbumNodes(1);\n if (albumNodes) {\n albumNodes?.forEach(doc => curation.push(doc));\n }\n }\n\n let bin_and_curation = [...bin, ...curation]\n\n // if accessing the bin, does a search on only the bin nodes\n if (type === \"bin\" && bin_and_curation.length > 0) {\n view.filters = []\n view.filters.push({ field_name: \"id\", value: bin_and_curation, inverse: false })\n } else if (type === \"upload\" && uploadedNodes.length > 0) {\n view.filters = []\n view.filters.push({ field_name: \"id\", value: [...uploadedNodes], inverse: false })\n }\n\n // Add a solr filter if its a bin list\n if (![\"bin\", \"classify\", \"upload\", \"album\", \"collection\"].includes(type) && bin_and_curation.length > 0) {\n view.filters.push({ field_name: \"id\", value: bin_and_curation, inverse: true });\n }\n\n let info = Field_Info;\n\n // Loads the current saved query\n let current_q = Query;\n if (current_q === undefined || current_q === null) {\n current_q = initialState\n }\n\n // adds the field lists into the URL\n let fl = encodeURIComponent(fieldList(info.fields).join(\",\"));\n\n // Gets the Solr query info\n let query = view.query;\n let q = query === \"\" ? \"*:*\" : query.indexOf(\":\") !== -1 ? query : sanitiseQuery(query);\n // excludes bin items\n if (id !== undefined && id !== null) {\n q = \"id:(\" + id + \")\";\n }\n\n if (![\"collection\", \"classify\", \"album\", \"filter\", \"upload\"].includes(type)) {\n getFacets(true, q, config, type, bin_and_curation);\n }\n\n let filters = [config.default_filter];\n\n let applied_filter_rules = [];\n\n let filter_rules = view.filter_rules || [];\n\n filter_rules.forEach(filter_rule => {\n if (config.filter_rules[filter_rule] !== undefined && config.filter_rules[filter_rule] !== null) {\n applied_filter_rules.push(config.filter_rules[filter_rule]);\n }\n });\n\n let sort = \"\"\n if (view.sort.field === \"exif_pixelXDimension\") { // Use for resolution sorting\n sort = \"mul(exif_pixelXDimension,exif_pixelYDimension) \" + view.sort.direction;\n } else {\n sort = view.sort.field + \" \" + view.sort.direction;\n }\n\n let rows = 200;\n if (selectedRows !== undefined && selectedRows !== null) {\n rows = selectedRows;\n }\n\n // Sets the amount of rows by default for bin and event\n if (type === \"event\" || type === \"bin\") {\n rows = 100000;\n }\n\n let fields_info = info.fields;\n let query_facets = view.facets;\n\n // Creates the facet query based on the facets added.\n let facets = query_facets.filter(facet => fields_info[facet] !== undefined).filter(facet => fields_info[facet].type !== \"date\");\n\n let date_type_fields = query_facets.filter(facet => fields_info[facet] !== undefined).filter(facet => fields_info[facet].type === \"date\");\n\n\n let facet_query_field = date_type_fields.map(encodeURIComponent).map(field =>\n [field + \":[NOW-1DAY TO NOW]\", field + \":[NOW-7DAYS TO NOW]\", field + \":[NOW-1MONTH TO NOW]\", field + \":[NOW-1YEAR TO NOW]\", field + \":[* TO NOW-1YEAR]\"].map(query => `facet.query={!ex=${field}}${query}`).join(\"&\")\n ).join(\"&\");\n\n if (type === \"album\" || type === \"classify\") {\n facets = query_facets.filter(facet => fields_info[facet] !== undefined);\n //Here is to add missing facet field for albums on the config.yml\n if (!facets.includes(\"exif_dateTimeOriginal\")) {\n facets.push(\"exif_dateTimeOriginal\")\n }\n date_type_fields = query_facets.filter(facet => fields_info[facet] !== undefined);\n facet_query_field = \"\"\n\n if (albumNodes === undefined || albumNodes === null || albumNodes?.length === 0) {\n filters = []\n } else {\n let album_filter = [{ field_name: \"id\", value: albumNodes, inverse: false }]\n filters = filters.concat(album_filter\n .filter(filter => filter.field_name !== \"Advanced\" && filter.value.length > 0)\n .map(filter => filterToString(filter, info.fields)).concat(applied_filter_rules.map(filter => filterToString(filter, info.fields))));\n if (albumFilters && albumFilters.length > 0) {\n filters = [...filters, ...albumFilters]\n }\n }\n } else {\n filters = filters.concat(view.filters\n .filter(filter => filter.field_name !== \"Advanced\" && filter.value.length > 0)\n .map(filter => filterToString(filter, info.fields)).concat(applied_filter_rules.map(filter => filterToString(filter, info.fields))));\n }\n\n let facetOptions = \"facet.limit=\" + (FACET_LIMIT + 1);\n\n // Update filter to the advanced parameters\n filters = filters.concat(view.filters.filter(filter => filter.field_name === \"Advanced\").map(filter => isArray(filter.value) ? filter.value.join(\" \") : filter.value));\n\n // Options of setting path starts with\n if (facets.indexOf(\"path_starts_with\") !== -1) {\n let facet_field = view.filters.find(filter => filter.field_name === \"path_starts_with\");\n\n let prefix = facet_field !== undefined ? (isArray(facet_field.value) ? facet_field.value.join(\" \") : facet_field.value) : config.path_strip;\n\n facetOptions += \"&f.path_starts_with.facet.limit=1000\";\n facetOptions += \"&f.path_starts_with.facet.mincount=0\";\n facetOptions += \"&f.path_starts_with.facet.sort=index\";\n facetOptions += \"&f.path_starts_with.facet.prefix=\" + encodeURIComponent(prefix);\n }\n\n let token = getToken();\n\n let headers = { 'Content-Type': 'application/json', \"Semabench-Token\": token, \"Cache-Control\": \"max-age=0\" };\n\n let qf = encodeURIComponent(getQueryFields(config, info));\n let facet = {};\n\n facets.forEach(val => {\n\n let limit = FACET_LIMIT + 1;\n facet[val] = {\n type: \"terms\",\n field: val,\n sort: val === \"sb_year\" ? \"index desc\" : undefined,\n domain: {\n excludeTags: val\n },\n limit,\n }\n })\n\n facet_query_field = facet_query_field === \"\" ? \"\" : \"&\" + facet_query_field;\n\n if (type === \"upload\") {\n q = \"*:*\";\n }\n\n //applying solr query based on the identified campus\n let login = localStorage.getItem(\"L\");\n if (login !== undefined && login !== null) {\n login = JSON.parse(decrypt_storage_values(login));\n\n if (!checkAcl(login.roles, config.acls, \"ADMIN\") && type !== \"album\" && type !== \"favourite\" && type !== \"upload\" && type !== \"collection\") {\n // update the solr query\n if (checkMultiCampus()) {\n let campus = getMultiCampuslist();\n\n //create new query with uploaderCampus and update the query\n let new_q = \"\";\n for (let y = 0; y < campus.length; y++) {\n if (y + 1 === campus.length) {\n new_q += \"sb_uploaderCampus:\\\"\" + campus[y] + \"\\\"\"\n } else {\n new_q += \"sb_uploaderCampus:\\\"\" + campus[y] + \"\\\" OR \"\n }\n\n }\n\n if (q === \"\" || q === undefined || q === null || q === \"*:*\") {\n q = new_q\n } else {\n q = \"\\\"\" + q + \"\\\" AND (\" + new_q + \")\"\n }\n }\n }\n }\n\n let body = JSON.stringify({\n query: q,\n filter: filters,\n facet: facet\n })\n\n // Added a start index. More you scroll it creates a offset so the API only ever get 200 items at a time\n let selected = 0;\n if (selectedRows !== undefined && selectedRows !== null && type !== \"upload\") {\n selected = selectedRows - 200\n rows = 200;\n }\n\n if (type === \"upload\") {\n rows = selectedRows\n }\n\n if (selected < 0) {\n selected = 0;\n }\n\n let result = await fetch(`../api/v1/repo/s/semabench/query?q.op=AND&omitHeader=true&defType=edismax&qf=${qf}&pf=${qf}&start=${selected}&df=suggest&indent=true&sow=false&wt=json&json.nl=map&sort=${sort}&fl=${fl}&rows=${rows}&facet=true&facet.mincount=1&${facetOptions}` + facet_query_field, {\n method: \"POST\",\n headers,\n body\n }).catch(error => {\n toaster.push({error});\n })\n\n\n //redirect the users to the login pages if the login token is invalid\n if (result.status === 401) {\n Check_login_ticket()\n }\n\n return await result.json().then(async resp => {\n return await loadingFields(resp, type);\n })\n}\n\n\n//load one image\nexport const loadDocs = async (id) => {\n\n let token = getToken();\n\n let headers = { 'Content-Type': 'application/json', \"Semabench-Token\": token, \"Cache-Control\": \"max-age=0\" };\n\n let query = { query: 'id:' + id }\n\n return await fetch('../api/v1/repo/s/semabench/query?q=*:*', {\n method: 'POST',\n headers: headers,\n body: JSON.stringify(query)\n }).then(resp => resp.json())\n .then(response => {\n return response?.response\n })\n}\n\n// Does a query search to get all the facets, regardless of 200 to fill out search drop downs\nexport async function getFacets(upload, filterQuery, qconfig, type, bin_and_curation) {\n let config = getConfig;\n let view = getView();\n\n if (qconfig !== undefined && qconfig !== null) {\n if (type !== undefined && type !== null) {\n if (type !== \"classify\") {\n config = qconfig;\n }\n }\n }\n\n // if not upload adds all the ids as a filter\n if (bin_and_curation && bin_and_curation?.length > 0) {\n view.filters.push({ field_name: \"id\", value: bin_and_curation, inverse: true })\n } else {\n // loads the nodes that are within the bin\n let bin = MyBin;\n\n // if not accessing upload, bin or curation. Will add the curation and bin nodes to a filter to ignore them on lookup\n let curation = Curation || []\n if ((type === undefined || type === null || ![\"bin\", \"classify\", \"upload\", \"album\"].includes(type)) && curation.length === 0) {\n const albumNodes = await getAlbumNodes(1);\n if (albumNodes) {\n albumNodes?.forEach(doc => curation.push(doc));\n }\n }\n\n let loaded_bin_and_curation = [...bin, ...curation]\n\n // if accessing the bin, does a search on only the bin nodes\n if (loaded_bin_and_curation.length > 0) {\n view.filters.push({ field_name: \"id\", value: loaded_bin_and_curation, inverse: true });\n }\n }\n\n let info = Field_Info;\n let fields_info = info.fields;\n\n let facet = {};\n let token = getToken();\n\n let headers = { 'Content-Type': 'application/json', \"Semabench-Token\": token, \"Cache-Control\": \"max-age=0\" };\n\n let query = view.query;\n let q = query === \"\" ? \"*:*\" : query.indexOf(\":\") !== -1 ? query : sanitiseQuery(query);\n\n if (filterQuery !== undefined && filterQuery !== null && filterQuery !== \"\") {\n q = filterQuery\n }\n\n let query_facets = view.facets;\n\n // Creates the facet query based on the facets added.\n let facets = query_facets.filter(facet => fields_info[facet] !== undefined).filter(facet => fields_info[facet].type !== \"date\");\n\n let date_type_fields = query_facets.filter(facet => fields_info[facet] !== undefined).filter(facet => facet === \"cm_created\" && fields_info[facet].type === \"date\");\n\n let facet_query_field = date_type_fields.map(encodeURIComponent).map(field =>\n [field + \":[NOW-1DAY TO NOW]\", field + \":[NOW-7DAYS TO NOW]\", field + \":[NOW-1MONTH TO NOW]\", field + \":[NOW-1YEAR TO NOW]\", field + \":[* TO NOW-1YEAR]\"].map(query => `facet.query={!ex=${field}}${query}`).join(\"&\")\n ).join(\"&\");\n\n facets.forEach(val => {\n\n let limit = FACET_LIMIT + 1;\n facet[val] = {\n type: \"terms\",\n field: val,\n sort: val === \"sb_year\" ? \"index desc\" : undefined,\n domain: {\n excludeTags: val\n },\n limit,\n }\n })\n\n let body;\n\n let filters = [config.default_filter];\n\n let applied_filter_rules = [];\n\n\n let filter_rules = view.filter_rules || [];\n\n filter_rules.forEach(filter_rule => {\n if (config?.filter_rules !== undefined && config?.filter_rules !== null) {\n if (config.filter_rules[filter_rule] !== undefined && config.filter_rules[filter_rule] !== null) {\n applied_filter_rules.push(config.filter_rules[filter_rule]);\n }\n }\n });\n\n filters = filters.concat(view.filters\n .filter(filter => filter.field_name !== \"Advanced\")\n .map(filter => filterToString(filter, info.fields)).concat(applied_filter_rules.map(filter => filterToString(filter, info.fields))));\n\n filters = filters.concat(view.filters.filter(filter => filter.field_name === \"Advanced\").map(filter => isArray(filter.value) ? filter.value.join(\" \") : filter.value));\n\n //applying solr query based on the identified campus\n let login = localStorage.getItem(\"L\");\n if (login !== undefined && login !== null) {\n login = JSON.parse(decrypt_storage_values(login));\n if (!checkAcl(login.roles, config.acls, \"ADMIN\") && type !== \"album\" && type !== \"favourite\" && type !== \"upload\") {\n //update the solr query\n if (checkMultiCampus()) {\n let campus = getMultiCampuslist()\n let new_q = \"\"\n for (let y = 0; y < campus.length; y++) {\n if (y + 1 === campus.length) {\n new_q += \"sb_uploaderCampus:\\\"\" + campus[y] + \"\\\"\"\n } else {\n new_q += \"sb_uploaderCampus:\\\"\" + campus[y] + \"\\\" OR \"\n }\n\n }\n q = new_q\n }\n }\n }\n\n if (filters !== undefined && filters !== null) {\n body = JSON.stringify({\n query: q,\n filter: filters,\n facet: facet\n })\n } else {\n body = JSON.stringify({\n query: q\n })\n }\n\n let qf = encodeURIComponent(getQueryFields(config, info));\n\n let facetResp = {};\n facet_query_field = facet_query_field === \"\" ? \"\" : \"&\" + facet_query_field;\n\n await fetch(`../api/v1/repo/s/semabench/query?q.op=AND&omitHeader=true&defType=edismax&qf=${qf}&pf=${qf}&df=suggest&indent=true&sow=false&wt=json&json.nl=map&facet=true&rows=0&json.nl=map` + facet_query_field, {\n method: 'POST',\n headers: headers,\n body: body\n }).then(resp => resp.json())\n .then(response => {\n // Depedns on the results if there were filters or not\n if (response.facet_counts) {\n\n if (response.facet_counts.facet_fields) {\n facetResp = response.facet_counts.facet_fields;\n }\n\n if (response.facet_counts.facet_queries) {\n let facet_queries = response.facet_counts.facet_queries;\n Object.keys(facet_queries)\n .filter(facet_query => facet_query.indexOf(\":\") > 0)\n .forEach(facet_query => {\n let splits = facet_query.split(\":\");\n let facet_field_parts = splits[0];\n\n //Filter out our facet tag\n let facet_field = facet_field_parts.replace(/{!ex=[^}]+}/g, \"\");\n\n let val = splits[1];\n let count = facet_queries[facet_query];\n\n if (!facetResp[facet_field]) {\n facetResp[facet_field] = [];\n }\n\n facetResp[facet_field].push({ val, count });\n });\n }\n }\n\n\n if (response.facets) {\n let facet_resp = response.facets;\n Object.keys(facet_resp).filter(val => val !== \"count\")\n .map(facet_field => {\n let facet = facet_resp[facet_field];\n\n if (!facetResp[facet_field]) {\n facetResp[facet_field] = [];\n }\n\n facet.buckets.forEach((bucket) => {\n facetResp[facet_field].push({\n val: bucket.val + \"\",\n count: bucket.count\n });\n });\n return facet\n });\n }\n })\n\n if (Object.keys(facetResp).length !== 0) {\n FacetData = facetResp\n //checking the size of localstorage & sessionstorage\n // var _lsTotal = 0,\n // _xLen, _x;\n // for (_x in sessionStorage) {\n // if (!sessionStorage.hasOwnProperty(_x)) {\n // continue;\n // }\n // _xLen = ((sessionStorage[_x].length + _x.length) * 2);\n // _lsTotal += _xLen;\n // console.log(_x.substr(0, 50) + \" = \" + (_xLen / 1024).toFixed(2) + \" KB\")\n // };\n // console.log(\"sessionStorage Total = \" + (_lsTotal / 1024).toFixed(2) + \" KB\");\n // var _lsTotal = 0,\n // _xLen, _x;\n // for (_x in localStorage) {\n // if (!localStorage.hasOwnProperty(_x)) {\n // continue;\n // }\n // _xLen = ((localStorage[_x].length + _x.length) * 2);\n // _lsTotal += _xLen;\n // console.log(_x.substr(0, 50) + \" = \" + (_xLen / 1024).toFixed(2) + \" KB\")\n // };\n // console.log(\"localStorage Total = \" + (_lsTotal / 1024).toFixed(2) + \" KB\");\n\n }\n}\n\n// Gets called to update search suggestion in dropdown after a suer starts typing\nexport async function updateSearchSuggestions() {\n let config = getConfig;\n let view = getView()\n let query = config.view.query.toLowerCase();\n\n let token = getToken();\n let headers = { 'Content-Type': 'application/json', \"Semabench-Token\": token, \"Cache-Control\": \"max-age=0\" };\n\n let filters = [config.default_filter];\n\n let info = Field_Info\n\n let body = JSON.stringify({\n filter: filters\n })\n\n filters = filters.concat(view.filters\n .filter(filter => filter.field_name !== \"Advanced\")\n .map(filter => filterToString(filter, info.fields)));\n\n if (query === \"*:*\") {\n query = \"\";\n }\n\n await fetch(`../api/v1/repo/s/semabench/query?q=*:*&fl=id&json.nl=map&rows=0&facet.limit=10&facet=true&facet.mincount=1&facet.prefix=${query}&facet.field=suggest`, {\n method: \"POST\",\n headers,\n body\n }).then(resp => {\n return resp.json()\n })\n .then(result => {\n let facets = result.facet_counts.facet_fields\n let suggest = facets[\"suggest\"]\n\n\n let suggestions = []\n if (suggest !== undefined && suggest !== null) {\n suggestions = Object.keys(suggest);\n }\n\n // config.suggestions = suggestions\n getConfig.suggestions = suggestions\n // sessionStorage.setItem(\"C\", JSON.stringify(config));\n }).catch(error => {\n\n })\n}\n\n// Loads the fields and data of each results\nexport async function loadingFields(response, type) {\n let docs = [];\n let num_found = 0;\n let facets = {};\n let q = Query;\n if (q !== undefined && q !== null) {\n Query.advanced_query = q.advanced_query;\n }\n\n if (response && response.response) {\n if (response.response.docs) {\n docs = response.response.docs;\n }\n if (response.response.numFound) {\n num_found = response.response.numFound;\n }\n\n // to receive the facet counts\n // if (response.facet_counts) {\n\n // if (response.facet_counts.facet_fields) {\n // facets = response.facet_counts.facet_fields;\n // }\n\n // if (response.facet_counts.facet_queries) {\n // let facet_queries = response.facet_counts.facet_queries;\n // Object.keys(facet_queries)\n // .filter(facet_query => facet_query.indexOf(\":\") > 0)\n // .forEach(facet_query => {\n // let splits = facet_query.split(\":\");\n // let facet_field_parts = splits[0];\n\n // //Filter out our facet tag\n // let facet_field = facet_field_parts.replace(/{!ex=[^}]+}/g, \"\");\n\n // let val = splits[1];\n // let count = facet_queries[facet_query];\n\n // if (!facets[facet_field]) {\n // facets[facet_field] = [];\n // }\n\n // facets[facet_field].push({ val, count });\n // });\n // }\n // }\n\n if (response.facets && [\"classify\", \"album\"].includes(type)) {\n\n let facet_resp = response.facets;\n\n Object.keys(facet_resp).filter(val => val !== \"count\")\n .map(facet_field => {\n let facet = facet_resp[facet_field];\n\n if (!facets[facet_field]) {\n facets[facet_field] = [];\n }\n\n facet.buckets.forEach((bucket) => {\n facets[facet_field].push({\n val: bucket.val + \"\",\n count: bucket.count\n });\n });\n return facet\n });\n FacetData = facets\n }\n\n Query.docs = docs;\n Query.num_found = num_found;\n }\n return Query;\n}\n\n\n// Function for getting the profiles based on the profile types and max row of profiles needed\nexport async function getProfileQuery(rows, profileTypes) {\n\n // Loads all the config, info and currenty query\n let config = getConfig;\n\n let view = getView();\n let info = Field_Info;\n\n // Loads the current saved query\n let current_q = Query;\n if (current_q === undefined || current_q === null) {\n current_q = initialState\n }\n\n\n // adds the fild lists into the URL\n let fl = encodeURIComponent(fieldList(info.fields).join(\",\"));\n\n // Gets the Solr query info\n let query = view.query;\n let q = query === \"\" ? \"*:*\" : query.indexOf(\":\") !== -1 ? query : sanitiseQuery(query);\n\n let filters = [];\n\n let applied_filter_rules = [];\n\n let filter_rules = [];\n\n // Creates three filters as we need only the profile type and it being a profile\n view.filters = [];\n view.filters.push({ field_name: \"sb_profileType\", value: profileTypes, inverse: false })\n view.filters.push({ field_name: \"sb_adminStatus\", value: [\"Profile\"], inverse: false })\n view.filters.push({ field_name: \"sb_adminStatus\", value: [\"Reference Point\"], inverse: true })\n\n filter_rules.forEach(filter_rule => {\n if (config.filter_rules[filter_rule] !== undefined && config.filter_rules[filter_rule] !== null) {\n applied_filter_rules.push(config.filter_rules[filter_rule]);\n }\n });\n\n let sort = view.sort.field + \" \" + view.sort.direction;\n\n let fields_info = info.fields;\n let query_facets = view.facets;\n\n // Creates the facet query based on the facets added.\n let facets = query_facets.filter(facet => fields_info[facet] !== undefined).filter(facet => fields_info[facet].type !== \"date\");\n\n let date_type_fields = query_facets.filter(facet => fields_info[facet] !== undefined).filter(facet => fields_info[facet].type === \"date\");\n\n\n let facet_query_field = date_type_fields.map(encodeURIComponent).map(field =>\n [field + \":[NOW-1DAY TO NOW]\", field + \":[NOW-7DAYS TO NOW]\", field + \":[NOW-1MONTH TO NOW]\", field + \":[NOW-1YEAR TO NOW]\", field + \":[* TO NOW-1YEAR]\"].map(query => `facet.query={!ex=${field}}${query}`).join(\"&\")\n ).join(\"&\");\n\n filters = filters.concat(view.filters\n .filter(filter => filter.field_name !== \"Advanced\")\n .map(filter => filterToString(filter, info.fields)).concat(applied_filter_rules.map(filter => filterToString(filter, info.fields))));\n\n let facetOptions = \"facet.limit=\" + (FACET_LIMIT + 1);\n\n filters = filters.concat(view.filters.filter(filter => filter.field_name === \"Advanced\").map(filter => isArray(filter.value) ? filter.value.join(\" \") : filter.value));\n\n // Options of setting path starts with\n if (facets.indexOf(\"path_starts_with\") !== -1) {\n let facet_field = view.filters.find(filter => filter.field_name === \"path_starts_with\");\n\n let prefix = facet_field !== undefined ? (isArray(facet_field.value) ? facet_field.value.join(\" \") : facet_field.value) : config.path_strip;\n\n facetOptions += \"&f.path_starts_with.facet.limit=1000\";\n facetOptions += \"&f.path_starts_with.facet.mincount=0\";\n facetOptions += \"&f.path_starts_with.facet.sort=index\";\n facetOptions += \"&f.path_starts_with.facet.prefix=\" + encodeURIComponent(prefix);\n }\n\n let token = getToken();\n let headers = { 'Content-Type': 'application/json', \"Semabench-Token\": token, \"Cache-Control\": \"max-age=0\" };\n\n let qf = encodeURIComponent(getQueryFields(config, info));\n let facet = {};\n\n facets.forEach(val => {\n\n let limit = FACET_LIMIT + 1;\n facet[val] = {\n type: \"terms\",\n field: val,\n sort: val === \"sb_year\" ? \"index desc\" : undefined,\n domain: {\n excludeTags: val\n },\n limit,\n }\n })\n\n facet_query_field = facet_query_field === \"\" ? \"\" : \"&\" + facet_query_field;\n\n let body = JSON.stringify({\n query: q,\n filter: filters,\n facet: facet\n })\n\n body = JSON.stringify({\n \"query\": \"*:*\",\n \"filter\": filters\n })\n\n let val = undefined\n return await fetch(`../api/v1/repo/s/semabench/query?q.op=AND&omitHeader=true&defType=edismax&qf=${qf}&pf=${qf}&df=suggest&indent=true&sow=false&wt=json&json.nl=map&sort=${sort}&fl=${fl}&rows=${rows}&facet=true&facet.mincount=1&${facetOptions}` + facet_query_field, {\n method: \"POST\",\n headers,\n body\n }).then(resp => resp.json())\n .then(async re => {\n val = re;\n\n return await val;\n })\n .catch(error => {\n toaster.push({error});\n })\n}\n\n// Function for getting the profiles based on the profile types and max row of profiles needed\nexport async function getImageCount(id, type) {\n let token = getToken();\n let getBin = [...MyBin]\n getBin.push(id);\n let headers = { 'Content-Type': 'application/json', \"Semabench-Token\": token, \"Cache-Control\": \"max-age=0\" };\n\n let campus = getMultiCampuslist();\n\n //create new query with uploaderCampus and update the query\n let new_q = \"\"\n if (type === \"MultiCampus\") {\n for (let y = 0; y < campus.length; y++) {\n if (y + 1 === campus.length) {\n new_q += \"sb_uploaderCampus:\\\"\" + campus[y] + \"\\\"\"\n } else {\n new_q += \"sb_uploaderCampus:\\\"\" + campus[y] + \"\\\" OR \"\n }\n\n }\n } else {\n new_q = \"*:*\"\n }\n\n let body = JSON.stringify({\n query: 'sb_relatedID:\"' + id + '\" AND (*:* NOT id:\"' + getBin.join(' OR ') + '\") AND (' + new_q + \")\",\n filter: [\"{!tag=id}-id:(\" + getBin.join(\" OR \") + \")\",\n \"{!tag=sb_adminStatus}-sb_adminStatus:(\\\"Profile\\\")\",\n \"{!tag=sb_adminStatus}-sb_adminStatus:(\\\"Reference Point\\\")\"]\n })\n return await fetch('../../api/v1/repo/s/semabench/query?q=*:*&rows=5000', {\n method: 'POST',\n headers: headers,\n body: body\n }).then(resp => resp.json())\n .then(async response => {\n if (response.response !== undefined && response.response !== null) {\n return response.response.docs.length\n }\n });\n}\n\n\n// Does a query search to get all the facets, regardless of 200 to fill out search drop downs\nexport async function getAllFacets() {\n let config = getConfig;\n let view = getView();\n view.filters = []\n\n // loads the nodes that are within the bin\n let bin = MyBin;\n\n // if not accessing upload, bin or curation. Will add the curation and bin nodes to a filter to ignore them on lookup\n let curation = Curation || []\n if (curation.length === 0) {\n const albumNodes = await getAlbumNodes(1);\n if (albumNodes) {\n albumNodes?.forEach(doc => curation.push(doc));\n }\n }\n\n let loaded_bin_and_curation = [...bin, ...curation]\n\n // if accessing the bin, does a search on only the bin nodes\n if (loaded_bin_and_curation.length > 0) {\n view.filters.push({ field_name: \"id\", value: loaded_bin_and_curation, inverse: true });\n }\n\n let info = Field_Info;\n let fields_info = info.fields;\n\n let facet = {};\n let token = getToken();\n\n let headers = { 'Content-Type': 'application/json', \"Semabench-Token\": token, \"Cache-Control\": \"max-age=0\" };\n\n let q = \"*:*\"\n\n let query_facets = view.facets;\n\n // Creates the facet query based on the facets added.\n let facets = query_facets.filter(facet => fields_info[facet] !== undefined).filter(facet => fields_info[facet].type !== \"date\");\n\n let date_type_fields = query_facets.filter(facet => fields_info[facet] !== undefined).filter(facet => facet === \"cm_created\" && fields_info[facet].type === \"date\");\n\n let facet_query_field = date_type_fields.map(encodeURIComponent).map(field =>\n [field + \":[NOW-1DAY TO NOW]\", field + \":[NOW-7DAYS TO NOW]\", field + \":[NOW-1MONTH TO NOW]\", field + \":[NOW-1YEAR TO NOW]\", field + \":[* TO NOW-1YEAR]\"].map(query => `facet.query={!ex=${field}}${query}`).join(\"&\")\n ).join(\"&\");\n\n facets.forEach(val => {\n\n let limit = FACET_LIMIT + 1;\n facet[val] = {\n type: \"terms\",\n field: val,\n sort: val === \"sb_year\" ? \"index desc\" : undefined,\n domain: {\n excludeTags: val\n },\n limit,\n }\n })\n\n let body;\n\n let filters = [config.default_filter];\n\n let applied_filter_rules = [];\n\n\n let filter_rules = view.filter_rules || [];\n\n filter_rules.forEach(filter_rule => {\n if (config?.filter_rules !== undefined && config?.filter_rules !== null) {\n if (config.filter_rules[filter_rule] !== undefined && config.filter_rules[filter_rule] !== null) {\n applied_filter_rules.push(config.filter_rules[filter_rule]);\n }\n }\n });\n\n filters = filters.concat(view.filters\n .filter(filter => filter.field_name !== \"Advanced\")\n .map(filter => filterToString(filter, info.fields)).concat(applied_filter_rules.map(filter => filterToString(filter, info.fields))));\n\n filters = filters.concat(view.filters.filter(filter => filter.field_name === \"Advanced\").map(filter => isArray(filter.value) ? filter.value.join(\" \") : filter.value));\n\n //applying solr query based on the identified campus\n let login = localStorage.getItem(\"L\");\n if (login !== undefined && login !== null) {\n login = JSON.parse(decrypt_storage_values(login));\n if (!checkAcl(login.roles, config.acls, \"ADMIN\")) {\n //update the solr query\n if (checkMultiCampus()) {\n let campus = getMultiCampuslist()\n let new_q = \"\"\n for (let y = 0; y < campus.length; y++) {\n if (y + 1 === campus.length) {\n new_q += \"sb_uploaderCampus:\\\"\" + campus[y] + \"\\\"\"\n } else {\n new_q += \"sb_uploaderCampus:\\\"\" + campus[y] + \"\\\" OR \"\n }\n\n }\n q = new_q\n }\n }\n }\n\n if (filters !== undefined && filters !== null) {\n body = JSON.stringify({\n query: q,\n filter: filters,\n facet: facet\n })\n } else {\n body = JSON.stringify({\n query: q\n })\n }\n\n let qf = encodeURIComponent(getQueryFields(config, info));\n\n let facetResp = {};\n facet_query_field = facet_query_field === \"\" ? \"\" : \"&\" + facet_query_field;\n\n await fetch(`../api/v1/repo/s/semabench/query?q.op=AND&omitHeader=true&defType=edismax&qf=${qf}&pf=${qf}&df=suggest&indent=true&sow=false&wt=json&json.nl=map&facet=true&rows=0&json.nl=map` + facet_query_field, {\n method: 'POST',\n headers: headers,\n body: body\n }).then(resp => resp.json())\n .then(response => {\n // Depedns on the results if there were filters or not\n if (response.facet_counts) {\n\n if (response.facet_counts.facet_fields) {\n facetResp = response.facet_counts.facet_fields;\n }\n\n if (response.facet_counts.facet_queries) {\n let facet_queries = response.facet_counts.facet_queries;\n Object.keys(facet_queries)\n .filter(facet_query => facet_query.indexOf(\":\") > 0)\n .forEach(facet_query => {\n let splits = facet_query.split(\":\");\n let facet_field_parts = splits[0];\n\n //Filter out our facet tag\n let facet_field = facet_field_parts.replace(/{!ex=[^}]+}/g, \"\");\n\n let val = splits[1];\n let count = facet_queries[facet_query];\n\n if (!facetResp[facet_field]) {\n facetResp[facet_field] = [];\n }\n\n facetResp[facet_field].push({ val, count });\n });\n }\n }\n\n\n if (response.facets) {\n let facet_resp = response.facets;\n Object.keys(facet_resp).filter(val => val !== \"count\")\n .map(facet_field => {\n let facet = facet_resp[facet_field];\n\n if (!facetResp[facet_field]) {\n facetResp[facet_field] = [];\n }\n\n facet.buckets.forEach((bucket) => {\n facetResp[facet_field].push({\n val: bucket.val + \"\",\n count: bucket.count\n });\n });\n return facet\n });\n }\n })\n\n if (Object.keys(facetResp).length !== 0) {\n\n AllFacetData = facetResp\n }\n}","import { toaster, Message } from 'rsuite';\nimport { Check_login_ticket, decrypt_storage_values } from './helper';\n\nexport var MyBin = [];\nexport const initialState = { trashcan: new Set() };\nexport var trashcan = initialState;\n\n// Utility to get decrypted token from localStorage\nfunction getToken() {\n const encryptedToken = localStorage.getItem(\"T\");\n return encryptedToken ? decrypt_storage_values(encryptedToken) : null;\n}\n\n// Utility to generate headers for API requests, with optional charset\nfunction getHeaders(contentType = 'application/json', charset = null) {\n return {\n 'Semabench-Token': getToken(),\n 'Content-Type': charset ? `${contentType}; charset=${charset}` : contentType\n };\n}\n\n// Utility for showing messages with toaster\nconst showMessage = (message, type = \"info\") => {\n toaster.clear();\n toaster.push({message});\n};\n\n// Clears the trashcan by making a DELETE request\nexport async function cleanTrashcan() {\n try {\n const response = await fetch(\"../../api/v1/user/trashcan/delete\", { headers: getHeaders() });\n if (response.status === 401) {\n Check_login_ticket();\n return;\n }\n const result = await response.json();\n if (result.length > 0) deleteNodes(result);\n } catch (error) {\n console.error(\"Failed to clean trashcan:\", error);\n }\n}\n\n// Loads items into MyBin\nexport async function loadTrashcan() {\n try {\n const response = await fetch(\"../../api/v1/user/trashcan\", { headers: getHeaders() });\n MyBin = await response.json();\n return MyBin;\n } catch (error) {\n console.error(\"Failed to load trashcan:\", error);\n return [];\n }\n}\n\nexport async function loadDisplayTrashcan() {\n try {\n const response = await fetch(\"../../api/v1/user/bin\", { headers: getHeaders() });\n return response.json();\n } catch (error) {\n console.error(\"Failed to load trashcan:\", error);\n return [];\n }\n}\n\n// Adds items to MyBin and updates the backend\nexport async function updateTrashcan(trashItems) {\n MyBin = [...new Set([...MyBin, ...trashItems])];\n try {\n await fetch(\"../../api/v1/user/trashcan\", {\n headers: getHeaders(),\n method: \"POST\",\n body: JSON.stringify(trashItems)\n });\n } catch (error) {\n console.error(\"Failed to update trashcan:\", error);\n }\n return MyBin;\n}\n\n// Restores items from MyBin to the gallery\nexport async function restoreTrashcan(nodes) {\n MyBin = [...MyBin.filter(id => !nodes.includes(id))]\n try {\n showMessage(\"Restoring Items...\", \"info\");\n const response = await fetch(\"../api/v1/user/trashcan\", {\n method: 'DELETE',\n headers: getHeaders(),\n body: JSON.stringify(nodes)\n });\n\n if (response.ok) {\n showMessage(nodes.length > 1 ? \"All Items Restored\" : \"Item Restored\", \"success\");\n }\n } catch (error) {\n console.error(\"Failed to restore items:\", error);\n } finally {\n toaster.clear();\n }\n}\n\n// Deletes specified nodes from MyBin and backend, with charset set to utf-8\nexport async function deleteNodes(nodes) {\n MyBin = [...MyBin.filter(id => !nodes.includes(id))]\n try {\n const payload = { nodes: nodes.map(node => ({ id: node, storeRef: { protocol: \"workspace\", identifier: \"SpacesStore\" } })) };\n const response = await fetch(\"../api/v1/repo/s/semabench/items\", {\n method: 'DELETE',\n headers: getHeaders('application/json', 'utf-8'),\n body: JSON.stringify(payload)\n });\n if (!response.ok) {\n throw { failedItems: nodes };\n }\n } catch (error) {\n throw { failedItems: nodes };\n } finally {\n toaster.clear();\n }\n}\n\n// Deletes a single node with default charset\nexport async function deleteNode(node) {\n try {\n showMessage(\"Deleting Item...\", \"info\");\n const payload = { nodes: [{ id: node, storeRef: { protocol: \"workspace\", identifier: \"SpacesStore\" } }] };\n const response = await fetch(\"../api/v1/repo/s/semabench/items\", {\n method: 'DELETE',\n headers: getHeaders(),\n body: JSON.stringify(payload)\n });\n\n if (response.ok) {\n showMessage(\"Item Deleted\", \"success\");\n }\n } catch (error) {\n console.error(\"Failed to delete item:\", error);\n } finally {\n toaster.clear();\n }\n}","import React from 'react';\nimport { Buffer } from 'buffer';\nimport { isArray } from 'util';\nimport { submitSolrQuery, filterToString, FacetData, AllFacetData } from './Query.js';\nimport { checkAcl } from '../../adminressources/ACLHelper.js';\nimport { Field_Info, config as getConfig, T } from './Config.js';\n\nimport { Tag, Tooltip, Whisper, toaster, Message } from 'rsuite';\nimport Cookies from 'universal-cookie';\n\nexport const cookies = new Cookies();\n// Sets description limit\nexport const desc_limit = 1000;\n\n// Used by bbox to check if arary set is equal\nexport const setsEqual = (a, b) => a.length === b.size && a.every(value => b.has(value));\n\n// checks if value and input match\nconst matches = (value_match, input) => {\n\n let value = (input).field !== undefined ? (input).field.value : input;\n\n if (isArray(value)) {\n return value.some(val => matches(value_match, val));\n } else {\n\n let val = value + \"\";\n\n if (value_match.value !== undefined && value_match.value !== null) {\n return val === value_match.value;\n }\n\n if (value_match.regex !== undefined && value_match.regex !== null) {\n\n let regex = new RegExp(value_match.regex.expression);\n\n return regex.test(val) === value_match.regex.requires_match;\n }\n\n return true;\n\n }\n\n\n}\n\n// Method called to get the token from the local storage\nexport const getToken = () => {\n let token = localStorage.getItem(\"T\");\n if (token !== undefined && token !== null) {\n return decrypt_storage_values(token);\n }\n return token;\n}\n\n// Method called to get the token from the local storage\nexport const getExpires = () => {\n let expires = cookies.get('E')\n if (expires !== undefined && expires !== null) {\n return JSON.parse(decrypt_storage_values(expires))\n }\n return \"\";\n}\n\n// Method called to get the view from the session storage\nexport const getView = () => {\n let view = JSON.parse(localStorage.getItem(\"V\"));\n return view;\n}\n\n// Method to get the login details\nexport const getLogin = () => {\n let login = localStorage.getItem(\"L\");\n if (login !== undefined && login !== null) {\n return JSON.parse(decrypt_storage_values(login));\n }\n return login;\n}\n\n// Method to get the login details\nexport const updateConfig = (new_config) => {\n new_config.splice(0, 1)\n let login = localStorage.getItem(\"L\");\n if (login !== undefined && login !== null) {\n let current_login = JSON.parse(decrypt_storage_values(login));\n current_login.saved_configs = new_config;\n localStorage.setItem(\"L\", encrypt_storage_values(JSON.stringify(current_login)));\n }\n}\n\n\nexport const getLoginValid = () => {\n let login = getLogin();\n return login.is_active;\n}\n\nexport const checkReindex = async (type) => {\n let token = getToken();\n if (type === \"customise\") {\n token = await T();\n }\n // Api call to return the dataimpoart check.\n return await fetch(\"../admin/api/v1/solr/dataimport\", {\n method: \"GET\",\n headers: { \"Semabench-Token\": token }\n }).then(res => {\n return res.json()\n })\n .then(response => {\n if (response.status === \"busy\" && response.statusMessages[\"Total Rows Fetched\"] !== undefined && response.statusMessages[\"Time Elapsed\"] !== undefined && response.statusMessages[\"Full Dump Started\"] !== undefined) {\n toaster.push(\n SchoolBench is currently running a reindex process. Your requested change cannot be made until this process is completed.,\n { duration: 10000 }\n );\n return true\n } else {\n return false\n }\n })\n}\n\nexport const conditionMatches = (create_mode, conditions, fields) => {\n\n if (conditions.create_mode !== undefined && conditions.create_mode !== null) {\n if (create_mode !== conditions.create_mode) {\n return false;\n }\n }\n\n if (conditions.edit_mode !== undefined && conditions.edit_mode !== null) {\n if (create_mode === conditions.edit_mode) {\n return false;\n }\n }\n\n let change_fields = Object.keys(fields).filter(field => {\n\n let val = fields[field];\n\n if (val !== undefined && val !== null) {\n if ((val).field !== undefined && (val).field !== null) {\n val = (val).field.value;\n }\n if (isArray(val)) {\n return val.some(val => (val + \"\").length > 0)\n } else {\n return (val + \"\").length > 0\n }\n }\n\n return false;\n });\n\n if (conditions.required_fields !== undefined && conditions.required_fields !== null) {\n let has_missing_fields = conditions.required_fields.some(field => change_fields.indexOf(field) === -1);\n\n if (has_missing_fields) {\n return false;\n }\n }\n\n if (conditions.absent_fields !== undefined && conditions.absent_fields !== null) {\n\n let has_fields = conditions.absent_fields.some(field => change_fields.indexOf(field) !== -1);\n\n if (has_fields) {\n return false;\n }\n }\n\n if (conditions.matched_values !== undefined && conditions.matched_values !== null) {\n let matched_values = conditions.matched_values;\n\n let has_different_value = Object.keys(matched_values).some(field => {\n\n if (fields[field] === undefined || fields[field] === null) {\n return true;\n }\n\n let val = fields[field];\n\n return !matches(matched_values[field], val);\n\n });\n\n if (has_different_value) {\n return false;\n }\n }\n\n if (conditions.unmatched_values !== undefined && conditions.unmatched_values !== null) {\n let unmatched_values = conditions.unmatched_values;\n let has_same_value = Object.keys(unmatched_values).some(field => {\n if (fields[field] !== undefined && fields[field] !== null) {\n let val = fields[field];\n\n return matches(unmatched_values[field], val);\n }\n\n return false;\n })\n\n if (has_same_value) {\n return false;\n }\n }\n\n\n return true;\n}\n\n\nconst getPathNodes = (isActive, query, config) => {\n if (query.facets[\"path_starts_with\"]) {\n let raw_paths = query.facets[\"path_starts_with\"];\n let path_keys = Object.keys(raw_paths);\n\n // used to clean any unwanted characters that might be placed.\n const cleanupPath = (path) => {\n let output_path = path.replace(config.path_strip, \"\").split(\"/\");\n return output_path;\n }\n\n var output = [];\n for (var i = 0; i < path_keys.length; i++) {\n if (path_keys[i].startsWith(config.path_strip)) {\n var chain = cleanupPath(path_keys[i]);\n var current_node = output;\n\n for (var j = 0; j < chain.length; j++) {\n var wanted_node = chain[j];\n\n var last_node = current_node;\n\n for (var k = 0; k < current_node.length; k++) {\n if (current_node[k].label === wanted_node) {\n current_node = current_node[k].childNodes;\n break;\n }\n }\n\n // If we couldn't find an item in this list of children\n // that has the right name, create one:\n if (last_node === current_node) {\n var lastChain = j === chain.length - 1;\n\n let id = \"path_\" + chain.slice(0, j + 1).join(\"/\");\n let value = config.path_strip + chain.slice(0, j + 1).join(\"/\");\n let secondaryLabel = ;\n let isSelected = false;\n\n if (isActive && config.view.filters.findIndex(filter => filter.field_name === \"path_start_with\" && filter.value.some(val => val === value))) {\n isSelected = true;\n }\n\n if (lastChain && raw_paths[path_keys[i]]) {\n secondaryLabel = {isSelected ? raw_paths[path_keys[j]] : raw_paths[path_keys[i]]};\n }\n\n var new_node = current_node[k] = {\n id: id,\n type: \"value\",\n inverse: false,\n field_name: \"path_starts_with\",\n icon: \"\",\n label: wanted_node,\n secondaryLabel: secondaryLabel,\n isExpanded: false,\n value: value,\n isSelected: isSelected,\n childNodes: []\n };\n\n current_node = new_node.childNodes;\n }\n }\n\n const removeCaret = (node) => {\n if (node.childNodes && node.childNodes.length > 0) {\n node.hasCaret = true;\n node.childNodes.forEach((node) => removeCaret(node));\n } else {\n node.icon = node.icon === \"folder-open\" ? \"folder-close\" : node.icon;\n node.hasCaret = false;\n }\n }\n output.forEach((node) => removeCaret(node))\n return output;\n } else {\n return [];\n }\n }\n }\n}\n\nexport const getAlbumUid = (node) => {\n let token = getToken();\n let header = {\n 'Semabench-Token': token,\n 'Content-Type': 'application/json'\n }\n\n return fetch(\"../api/v1/album/user?node=\" + node, {\n headers: header\n }).then(resp => resp.json())\n .then(result => {\n return result;\n })\n}\n\nexport const clearFilter = async () => {\n let view = getView();\n view.filters = [];\n localStorage.setItem(\"V\", JSON.stringify(view));\n await submitSolrQuery(\"clean-query\").then(() => {\n return;\n });\n}\n\n\nexport const getNodes = (addedNode) => {\n // loads the config and default system settings from local storage\n let view = getView();\n let facets = view.facets;\n\n if (addedNode !== undefined && addedNode !== null) {\n facets.push(addedNode);\n }\n\n let query = FacetData;\n if (query === undefined || query === null) {\n query = []\n }\n\n if (query !== undefined && query !== null) {\n\n let facet_response = query;\n if (facet_response === undefined || facet_response === null) {\n return [];\n } else {\n let info = Field_Info;\n\n let nodes = facets.filter((facet) => facet_response[facet] !== null && facet_response[facet] !== undefined).map((facet, index) => {\n\n // creates the values that will be used by looking into each node and the values set.\n let isActive = view.filters.some(filter => filter.field_name === facet);\n\n let facet_response = query[facet];\n\n let entries = facet_response;\n\n let children = [];\n\n if (facet === \"path_starts_with\") {\n children = getPathNodes(isActive); //TODO need to check this\n } else {\n let sorted_terms = entries.map(bucket => bucket.val);\n\n let is_list = false;\n\n /*\n Sort based upon the field definition\n */\n\n if (info.fields[facet] !== undefined && info.fields[facet] !== null) {\n let field_info = info.fields[facet];\n\n // Gets mandatory fields that are required to be displayed. e.g Terms\n if (field_info.constraints != null) {\n let constraints = info.fields[facet].constraints;\n if (constraints !== undefined && constraints.list !== undefined && constraints !== null && constraints.list !== null) { // need to check\n sorted_terms = constraints.list;\n is_list = true;\n }\n }\n }\n\n // Add in any applied files as per the filer view if it's not listed (shows up with no count)\n if (isActive) {\n view.filters.filter(filter => filter.field_name === facet)\n .forEach(filter => {\n filter.value.forEach(val => {\n if (sorted_terms.indexOf(val) === -1) {\n sorted_terms.push(val);\n }\n })\n });\n }\n\n // Tree Facet Query is going to be null\n let facet_query = false;\n if (facet_query === true) {\n\n } else {\n // Loops through each facet to find the children nodes. E.g finds years for sb_year (2020,2021)\n if (sorted_terms !== null && sorted_terms !== undefined) {\n children = sorted_terms.map((child, childIndex) => {\n // Gets all the additional info like the count from the inner node\n let bucket = entries.find(bucket => bucket.val === child);\n\n let count = bucket !== undefined ? bucket.count : 0;\n\n let secondaryLabel = bucket !== undefined || is_list ? {count} : undefined;\n // let icon = \"\";\n let isSelected = false;\n let inverse = false;\n let filter_rule = undefined;\n // let isHighlighted = undefined;\n\n let filter = undefined;\n\n let active_filter_rule = view.filter_rules || [];\n\n let rule = Object.entries(view.filter_rules).filter(val => active_filter_rule.some(rule => rule === val[0])).find(val => val[1].field_name === facet && val[1].value.some(val => val === child));\n\n if (rule !== undefined && rule !== null) {\n filter_rule = rule[0];\n filter = rule[1];\n }\n\n if (filter === undefined || filter === null) {\n filter = view.filters.find(filter => filter.field_name === facet && filter.value.some(val => val === child));\n }\n\n if (filter !== undefined && filter !== null) {\n inverse = filter.inverse;\n isSelected = true;\n }\n\n let label_value = info.lookup[child] || child;\n\n let label;\n\n //tool tip wording for grid size\n let tooltipAddToAlbum = \n {label_value}\n \n\n if (facet === \"sb_event\" || facet === \"sb_tags\" || facet === \"sb_class\" || facet === \"sb_student\" || facet === \"sb_staff\" || facet === \"sb_visitor\" || facet === \"sb_pastStudent\") {\n label = \n \n\n {label_value}{count}\n\n \n \n } else {\n label = {label_value}{count}\n }\n\n // If controlled click or invers a \"-\" will appear next to it. \n if (inverse) {\n if (facet === \"sb_event\" || facet === \"sb_tags\" || facet === \"sb_class\" || facet === \"sb_student\" || facet === \"sb_staff\" || facet === \"sb_visitor\" || facet === \"sb_pastStudent\") {\n label = - {label_value}{count}\n } else {\n label = - {label_value}{count}\n }\n }\n\n let readableName = info.lookup[facet] || facet;\n\n return {\n id: facet + childIndex,\n type: \"value\",\n inverse,\n labelExtra: label,\n label: label_value,\n filter_rule,\n className: \"\",\n icon: \"\",\n secondaryLabel: secondaryLabel,\n isSelected: isSelected,\n field_name: facet,\n value: child,\n readableName\n }\n\n });\n }\n }\n }\n\n let isExpanded = false;\n let isSelected = isExpanded === false ? isActive : false;\n // returns a child. with the value and what field_name it belongs too.\n return {\n id: facet,\n hasCaret: true,\n isExpanded: isExpanded,\n isSelected: isSelected,\n label: facet,\n field_name: facet,\n icon: \"\",\n childNodes: children\n }\n\n });\n\n return nodes\n }\n } else {\n return [];\n }\n\n}\n\n// Gets the src of the image\nexport const getSrc = (props, type) => {\n\n let solrVersion = props.cm_modified || \"0\"\n\n\n let preview_kinds = props.preview_kind;\n // let preview_ref = props.preview_ref;\n\n let kind = undefined;\n // let ref = undefined; //ref is just to update if there is a change to the rendition\n\n\n\n let token = getToken();\n\n if (type === \"original\") {\n if (preview_kinds !== undefined && preview_kinds !== null) {\n if (!preview_kinds.includes(\"pdfthumb\") && !preview_kinds.includes(\"xthumb\") && !preview_kinds.includes(\"heifbbox\") && !preview_kinds.includes(\"rawbbox\")) {\n kind = type;\n }\n } else {\n kind = type;\n }\n }\n\n if (preview_kinds !== undefined && preview_kinds !== null) {\n if (kind !== \"original\") {\n let idx = preview_kinds.findIndex(kind => kind === \"doclib\" || kind.indexOf(\"thumb\") >= 0);\n if (type === \"original\") {\n idx = preview_kinds.findIndex(kind => kind === \"doclib\" || kind.indexOf(\"bbox\") >= 0);\n }\n\n if (idx !== -1) {\n kind = preview_kinds[idx];\n }\n }\n }\n\n if (type !== \"original\" && type !== \"betterthumb\" && type !== undefined && type !== null) {\n kind = type\n }\n\n let token_encode = encodeURIComponent(token);\n let src = undefined;\n\n if (kind === undefined || kind === null) {\n kind = \"original\";\n }\n\n src = `../api/v1/repo/s/semabench/preview?id=${props.id}&semabench-token=${token_encode}&kind=${kind}&version=${solrVersion}`;\n\n return src;\n\n}\n\n// const algorithm = \"aes-256-cbc\";\n\n// generate 16 bytes of random data\nconst initVector = Buffer(\"initVector comon\");\n\n// secret key generate 32 bytes of random data\nconst Securitykey = \"This needs to be a long password\";\n\nexport const encrypt = (value) => {\n\n const crypto = require(\"crypto-js\");\n\n let ciphertext = crypto.AES.encrypt(value, crypto.enc.Utf8.parse(Securitykey), {\n iv: crypto.enc.Utf8.parse(initVector), // parse the IV \n padding: crypto.pad.Pkcs7,\n mode: crypto.mode.CBC\n }).toString();\n\n return ciphertext;\n}\n\nexport const decrypt = (value) => {\n\n const crypto = require(\"crypto-js\");\n\n let cipher = crypto.AES.decrypt(value, crypto.enc.Utf8.parse(Securitykey), {\n iv: crypto.enc.Utf8.parse(initVector), // parse the IV ,\n padding: crypto.pad.Pkcs7,\n mode: crypto.mode.CBC\n });\n\n return cipher.toString(crypto.enc.Utf8);\n}\n\nexport const loadProfiles = async (val) => {\n // Gets the users local storage token\n let token = getToken();\n let config = getConfig;\n let view = getView()\n let headers = { 'Content-Type': 'application/json', \"Semabench-Token\": token, \"Cache-Control\": \"max-age=0\" };\n\n // Checks if a value has been parsed, if not its a blank string\n if (val === undefined || val === null || val === \"\") {\n val = \"*:*\"\n };\n\n // Gets the default filters from the config settings\n let filters = [config.default_filter];\n\n // Loads the info (facet) from local storeage\n let info = Field_Info;\n\n // Adds filters, as we are only looking for profiles\n view.filters = [{ field_name: \"sb_adminStatus\", value: [\"Profile\"], inverse: false }, { field_name: \"sb_profileName\", value: [\"*\"], inverse: true }, { field_name: \"sb_smsID\", value: [\"*\"], inverse: true }];\n\n // Adds the custom filters into the filters variable\n filters = filters.concat(view.filters\n .filter(filter => filter.field_name !== \"Advanced\")\n .map(filter => filterToString(filter, info.fields)));\n\n // Creates the json for the filters to send in the body of the fetch command\n let body = JSON.stringify({\n filter: filters\n })\n\n // Sets the names that we will be searching on for the suggestive search\n let qf = `sb_profileName_q^2 sb_otherNames_q`\n\n // Calls the query function to get the results\n return await fetch(`../api/v1/repo/s/semabench/query?q=${val.toLowerCase()}&wt=json&defType=edismax&qf=${qf}&pf=${qf}&rows=100`, {\n method: 'POST',\n headers: headers,\n body: body\n }).then(resp => resp.json())\n .then(response => {\n\n // If there is a response we step into\n if (response !== undefined && response !== null) {\n let result = response.response;\n let profiles = [];\n\n // Pushes \"Unknown\" into the filter if nothing is applied\n profiles.push({ label: \"Unknown\", value: \"\", type: undefined, othername: \"Unknown Uknown\" })\n if (result !== undefined && result !== null) {\n // If there are docs from the response we step into\n if (result.docs !== undefined && result.docs !== null) {\n // For each response we create the drop down element\n result.docs.forEach(doc => {\n let data = {\n label: doc.sb_profileName,\n value: doc.id,\n type: doc.sb_profileType,\n }\n profiles.push(data);\n // Adds an extra placeholder object in the drop down for other name\n if (doc.sb_otherNames !== undefined && doc.sb_otherNames !== null) {\n let data = {\n label: doc.sb_otherNames[0] + \" (Other name)\",\n value: doc.id,\n type: doc.sb_profileType,\n }\n profiles.push(data);\n }\n\n })\n }\n }\n // Sets the list of profiles\n return profiles\n }\n\n })\n}\n\n// Method to check if items already encrypted\nexport const checkDecrypt = (value) => {\n let check_decryption = true\n\n try {\n decrypt(value);\n } catch {\n check_decryption = false;\n }\n\n return check_decryption;\n}\n\n//encrypt the values on storages/cookies\nexport const encrypt_storage_values = (value) => {\n if (value !== undefined && value !== null) {\n const crypto = require(\"crypto-js\");\n\n let ciphertext = crypto.AES.encrypt(value, crypto.enc.Utf8.parse(Securitykey), {\n iv: crypto.enc.Utf8.parse(initVector), // parse the IV \n padding: crypto.pad.Pkcs7,\n mode: crypto.mode.CBC\n }).toString();\n\n return ciphertext;\n } else {\n return null\n }\n}\n\n//decrypt the values on storages/cookies\nexport const decrypt_storage_values = (value) => {\n if (value !== undefined && value !== null) {\n const crypto = require(\"crypto-js\");\n\n let cipher = crypto.AES.decrypt(value, crypto.enc.Utf8.parse(Securitykey), {\n iv: crypto.enc.Utf8.parse(initVector), // parse the IV ,\n padding: crypto.pad.Pkcs7,\n mode: crypto.mode.CBC\n });\n\n return cipher.toString(crypto.enc.Utf8);\n } else {\n return null\n }\n}\n\n//check the current login token\nexport const Check_login_ticket = async () => {\n\n let token = getToken();\n let expires = getExpires();\n\n await fetch(\"../api/v1/repo/s/semabench/ticket\", {\n method: \"GET\",\n headers: {\n 'Content-Type': 'application/json',\n 'Semabench-Token': token,\n 'source': 'media'\n }\n }).then(async res => {\n if (res.status === 401) {\n if (new Date() < new Date(expires)) {\n await refresh_token()\n } else {\n await redirect_to_login()\n }\n }\n })\n}\n\n//check the current login token on the admin pages\nexport const Check_login_ticket_admin = async (page, status) => {\n\n let token = getToken();\n let expires = getExpires();\n\n let message = 'You cannot '\n\n if (status === \"save\" || status === \"test\") {\n if (page === \"vpn\") {\n message = 'You cannot enable the Remote Access'\n } else if (page === \"password\") {\n message += 'disable the default Admin Passowrd'\n } else if (page === \"ldap\") {\n message += status + \" LDAP Configuration\"\n } else if (page === \"sbsms\") {\n message += status + \" SIS Integration\"\n } else if (page === \"schoolbench\") {\n message += status + \" Calendar Integration\"\n } else if (page === \"webdav\") {\n message += status + \" WebDAV Setting\"\n } else if (page === \"acls\") {\n message += status + \" User Permissions\"\n } else if (page === \"media\") {\n message += status + \" Media Consent Mapping\"\n } else if (page === \"renditions\") {\n message += status + \" Rensition Settings\"\n } else if (page === \"facenet\") {\n message += status + \" Facial Recognition Settings\"\n } else if (page === \"pportal\") {\n message += status + \" Portal Settings\"\n } else if (page === \"new_pportal\") {\n message += status + \" Portal+ Settings\"\n } else if (page === \"mobile\") {\n message += status + \" Mobile Settings\"\n } else if (page === \"impersonate\") {\n message = \"You cannot impersonate the user\"\n } else if (page === \"portal logo\") {\n message += status + \" Portal+ Logo\"\n } else if (page === \"portal banner\") {\n message += status + \" Portal+ Banner\"\n } else if (page === \"versioncheck\") {\n message = \"You cannot check the latest version\"\n } else {\n message += status + \" on \" + page\n }\n } else {\n // load\n message += status + \" the changes on \" + page\n\n }\n\n message += \" as your session has expired.\"\n\n await fetch(\"../api/v1/repo/s/semabench/ticket\", {\n method: \"GET\",\n headers: {\n 'Content-Type': 'application/json',\n 'Semabench-Token': token,\n 'source': 'media'\n }\n }).then(async res => {\n if (res.status === 401) {\n toaster.push(\n {message},\n { duration: 10000 }\n );\n if (new Date() < new Date(expires)) {\n await refresh_token()\n } else {\n await redirect_to_login()\n }\n }\n\n })\n}\n\n//regenerate the login token and cookies\nconst refresh_token = async () => {\n let login = getLogin();\n let expires = getExpires();\n let config = getConfig;\n\n toaster.push(\n You session has expired. Please wait while a new session is generated.,\n { duration: 10000 }\n );\n await setTimeout(async () => {\n localStorage.removeItem(\"L\");\n localStorage.removeItem(\"T\");\n cookies.remove(\"T\", { path: \"/\" });\n cookies.remove(\"E\", { path: \"/\" });\n\n await fetch(\"../api/v1/repo/s/semabench/new_ticket\", {\n method: \"POST\",\n mode: 'no-cors',\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\",\n \"Source\": 'media'\n },\n body: JSON.stringify({ name: login.username, value: \"\", source: 'media' })\n }).then(res => res.json())\n .then(async data => {\n if (data !== undefined && data !== null) {\n\n localStorage.setItem(\"L\", encrypt_storage_values(JSON.stringify(data)));\n localStorage.setItem(\"T\", encrypt_storage_values(data.ticket));\n cookies.set('T', encrypt_storage_values(data.ticket), { path: '/', expires: new Date(expires), secure: true, sameSite: \"Strict\" });\n cookies.set('E', encrypt_storage_values(JSON.stringify(new Date(expires))), { path: '/', expires: new Date(expires), secure: true, sameSite: \"Strict\" });\n\n if (checkAcl(data.roles, config.acls, \"VIEW_PROPERTIES\") || checkAcl(data.roles, config.acls, \"ADMIN\")) {\n window.location.replace(document.URL);\n window.location.reload(true);\n }\n } else {\n toaster.push(\n You do not have View Permissions Now, please contact your IT support\n );\n // Maybe show alert as to no view permissions?\n }\n return data;\n })\n }, 10000)\n\n}\n\n//redirect to the login page as the current login token is too old, and can not regenerate it.\nconst redirect_to_login = async () => {\n toaster.push(\n Your session has expired. You are now being redirected to log in again in 10 sec,\n { duration: 10000 }\n );\n await setTimeout(() => {\n\n cookies.remove(\"T\", { path: \"/\" });\n cookies.remove(\"E\", { path: \"/\" });\n sessionStorage.clear();\n let theme = localStorage.getItem(\"theme\");\n localStorage.clear();\n if (theme !== null && theme !== undefined) {\n localStorage.setItem(\"theme\", theme)\n }\n window.location.replace(\"../login\");\n window.location.reload(true);\n }, 10000)\n}\n\n\n\nexport const getAllNodes = (addedNode) => {\n // loads the config and default system settings from local storage\n let view = getView();\n let facets = view.facets;\n\n if (addedNode !== undefined && addedNode !== null) {\n facets.push(addedNode);\n }\n\n let query = AllFacetData;\n if (query === undefined || query === null) {\n query = []\n }\n\n if (query !== undefined && query !== null) {\n\n let facet_response = query;\n if (facet_response === undefined || facet_response === null) {\n return [];\n } else {\n let info = Field_Info;\n\n let nodes = facets.filter((facet) => facet_response[facet] !== null && facet_response[facet] !== undefined).map((facet, index) => {\n\n // creates the values that will be used by looking into each node and the values set.\n let isActive = view.filters.some(filter => filter.field_name === facet);\n\n let facet_response = query[facet];\n\n let entries = facet_response;\n\n let children = [];\n\n if (facet === \"path_starts_with\") {\n children = getPathNodes(isActive); //TODO need to check this\n } else {\n let sorted_terms = entries.map(bucket => bucket.val);\n\n let is_list = false;\n\n /*\n Sort based upon the field definition\n */\n\n if (info.fields[facet] !== undefined && info.fields[facet] !== null) {\n let field_info = info.fields[facet];\n\n // Gets mandatory fields that are required to be displayed. e.g Terms\n if (field_info.constraints != null) {\n let constraints = info.fields[facet].constraints;\n if (constraints !== undefined && constraints.list !== undefined && constraints !== null && constraints.list !== null) { // need to check\n sorted_terms = constraints.list;\n is_list = true;\n }\n }\n }\n\n // Add in any applied files as per the filer view if it's not listed (shows up with no count)\n if (isActive) {\n view.filters.filter(filter => filter.field_name === facet)\n .forEach(filter => {\n filter.value.forEach(val => {\n if (sorted_terms.indexOf(val) === -1) {\n sorted_terms.push(val);\n }\n })\n });\n }\n\n // Tree Facet Query is going to be null\n let facet_query = false;\n if (facet_query === true) {\n\n } else {\n // Loops through each facet to find the children nodes. E.g finds years for sb_year (2020,2021)\n if (sorted_terms !== null && sorted_terms !== undefined) {\n children = sorted_terms.map((child, childIndex) => {\n // Gets all the additional info like the count from the inner node\n let bucket = entries.find(bucket => bucket.val === child);\n\n let count = bucket !== undefined ? bucket.count : 0;\n\n let secondaryLabel = bucket !== undefined || is_list ? {count} : undefined;\n // let icon = \"\";\n let isSelected = false;\n let inverse = false;\n let filter_rule = undefined;\n // let isHighlighted = undefined;\n\n let filter = undefined;\n\n let active_filter_rule = view.filter_rules || [];\n\n let rule = Object.entries(view.filter_rules).filter(val => active_filter_rule.some(rule => rule === val[0])).find(val => val[1].field_name === facet && val[1].value.some(val => val === child));\n\n if (rule !== undefined && rule !== null) {\n filter_rule = rule[0];\n filter = rule[1];\n }\n\n if (filter === undefined || filter === null) {\n filter = view.filters.find(filter => filter.field_name === facet && filter.value.some(val => val === child));\n }\n\n if (filter !== undefined && filter !== null) {\n inverse = filter.inverse;\n isSelected = true;\n }\n\n let label_value = info.lookup[child] || child;\n\n let label;\n\n //tool tip wording for grid size\n let tooltipAddToAlbum = \n {label_value}\n \n\n if (facet === \"sb_event\" || facet === \"sb_tags\" || facet === \"sb_class\" || facet === \"sb_student\" || facet === \"sb_staff\" || facet === \"sb_visitor\" || facet === \"sb_pastStudent\") {\n label = \n \n\n {label_value}{count}\n\n \n \n } else {\n label = {label_value}{count}\n }\n\n // If controlled click or invers a \"-\" will appear next to it. \n if (inverse) {\n if (facet === \"sb_event\" || facet === \"sb_tags\" || facet === \"sb_class\" || facet === \"sb_student\" || facet === \"sb_staff\" || facet === \"sb_visitor\" || facet === \"sb_pastStudent\") {\n label = - {label_value}{count}\n } else {\n label = - {label_value}{count}\n }\n }\n\n let readableName = info.lookup[facet] || facet;\n\n return {\n id: facet + childIndex,\n type: \"value\",\n inverse,\n labelExtra: label,\n label: label_value,\n filter_rule,\n className: \"\",\n icon: \"\",\n secondaryLabel: secondaryLabel,\n isSelected: isSelected,\n field_name: facet,\n value: child,\n readableName\n }\n\n });\n }\n }\n }\n\n let isExpanded = false;\n let isSelected = isExpanded === false ? isActive : false;\n // returns a child. with the value and what field_name it belongs too.\n return {\n id: facet,\n hasCaret: true,\n isExpanded: isExpanded,\n isSelected: isSelected,\n label: facet,\n field_name: facet,\n icon: \"\",\n childNodes: children\n }\n\n });\n\n return nodes\n }\n } else {\n return [];\n }\n\n}","import React from 'react';\nimport forge from \"node-forge\";\nimport { Buffer } from 'buffer';\nimport LegacyCheckIcon from \"@rsuite/icons/legacy/CheckSquareO\";\nimport LegacyCloseIcon from \"@rsuite/icons/legacy/WindowCloseO\";\nimport { loadConfig, T, K } from '../../ressources/functions/Config';\nimport { getToken, encrypt, decrypt, Check_login_ticket_admin } from '../../ressources/functions/helper';\n\nconst token = getToken();\n\n// Web Crypto API-based encryption function with Base64-decoded key\nexport async function payloadencrypt(input) {\n try {\n // Decode the Base64 key\n let keyBytes = forge.util.decode64(K);\n\n // Ensure the key is 32 bytes\n keyBytes = keyBytes.slice(0, 32);\n\n // Encode the input and AAD\n const inputBytes = forge.util.createBuffer(input, \"utf8\");\n const additionalData = forge.util.createBuffer(\"semabench\", \"utf8\");\n\n // Generate a random 12-byte nonce\n const nonce = forge.random.getBytesSync(12);\n\n // Create the cipher\n const cipher = forge.cipher.createCipher(\"AES-GCM\", keyBytes);\n\n // Start the cipher\n cipher.start({\n iv: nonce, // Initialization vector (nonce)\n additionalData: additionalData, // Additional authenticated data\n tagLength: 128, // Authentication tag length in bits\n });\n\n // Encrypt the input\n cipher.update(inputBytes);\n\n // Finalize the encryption\n const success = cipher.finish();\n if (!success) {\n throw new Error(\"Encryption failed.\");\n }\n\n // Extract the authentication tag\n const tag = cipher.mode.tag.getBytes();\n\n // Combine nonce, ciphertext, and tag\n const result = forge.util.createBuffer();\n result.putBytes(nonce); // Prepend nonce\n result.putBuffer(cipher.output); // Add ciphertext\n result.putBytes(tag); // Append tag\n\n // Return Base64-encoded result\n const base64Encrypted = forge.util.encode64(result.getBytes());\n return base64Encrypted;\n } catch (error) {\n console.error(\"Encryption failed:\", error);\n throw error;\n }\n}\n\nexport var pillars = undefined;\n\nexport const getPillar = async () => {\n return await loadPillar().then(resp => {\n pillars = resp\n return resp\n })\n}\n\n// Loads the pillar from the admin panel. Only works if admin\nexport const loadPillar = async () => {\n let t = await T();\n let headers = { \"Semabench-Token\": t }\n return fetch(\"../admin/api/v1/pillar\", {\n headers: headers\n }).then(resp => resp.json())\n .then(result => {\n return result;\n })\n}\n\n// Method to check if items already encrypted\nconst checkEncryptions = (value) => {\n let do_encryption = false\n\n try {\n if (decrypt(value) === \"\") {\n do_encryption = true;\n }\n } catch {\n do_encryption = true;\n }\n return do_encryption;\n}\n\nexport const testPillar = async (section, data) => {\n let payload = data\n\n let headers = payload instanceof FormData ? {} : {}\n\n if (section !== \"sslproxy\") {\n headers[\"Content-Type\"] = 'application/json';\n }\n\n headers[\"Semabench-Token\"] = token;\n\n let url = \"../admin/api/v1/\" + section + \"/test\"\n\n //This if condition is used to change section from 'schoolbench' / sbsms to 'integrations'\n //As ical and sis integration pages used to use 'integrations' name to call the api.\n if (section === \"schoolbench\") {\n url = \"../admin/api/v1/calendar/test\"\n }\n else if (section === \"sbsms\") {\n url = \"../admin/api/v1/integrations/test\"\n\n // Checks if the password is encrypted\n if (checkEncryptions(payload.password)) {\n payload.password = encrypt(payload.password);\n }\n\n // Checks if the token is encrypted\n if (payload.token !== undefined) {\n if (checkEncryptions(payload.token)) {\n payload.token = encrypt(payload.token);\n }\n }\n\n // Checks if the token is encrypted\n if (payload.token_staff !== undefined) {\n if (checkEncryptions(payload.token_staff)) {\n payload.token_staff = encrypt(payload.token_staff);\n }\n }\n\n payload = { \"sbsms\": payload };\n }\n else if (section === \"sslproxy\") {\n\n // Handling the encryption of SSO Password\n let password = payload.password\n\n // Payload for the form data field for SSO\n let newpayload = new FormData();\n newpayload.append(\"hostname\", payload.hostname)\n newpayload.append(\"certificate\", payload.certificate)\n newpayload.append(\"password\", password)\n newpayload.append(\"sso_type\", payload.sso_type)\n newpayload.append(\"krb_realm\", payload.krb_realm)\n newpayload.append(\"krb_kdc\", payload.krb_kdc)\n newpayload.append(\"krb_keytab\", payload.krb_keytab)\n newpayload.append(\"oidc_metadata_url\", payload.oidc_metadata_url)\n newpayload.append(\"oidc_client_id\", payload.oidc_client_id)\n newpayload.append(\"oidc_secret\", payload.oidc_secret)\n newpayload.append(\"saml_metadata_url\", payload.saml_metadata_url)\n newpayload.append(\"saml_login_url\", payload.saml_login_url)\n newpayload.append(\"saml_cert\", payload.saml_cert)\n newpayload.append(\"saml_uid_name\", payload.saml_uid_name)\n newpayload.append(\"saml_group_name\", payload.saml_group_name)\n newpayload.append(\"enable_timeout\", payload.enable_timeout)\n newpayload.append(\"action_timeout\", payload.action_timeout)\n newpayload.append(\"popup_timeout\", payload.popup_timeout)\n\n return await fetch(url, {\n method: \"POST\",\n headers: headers,\n body: newpayload\n }).then(resp => {\n //redirect the users to the login pages if the login token is invalid\n if (resp.status === 401) {\n Check_login_ticket_admin(section, 'test')\n }\n return resp.json()\n })\n .then(result => {\n\n let responseEle = testPillarEle(result);\n return responseEle\n })\n .catch(error => {\n\n return <>\n })\n } else if (section === \"impersonate\") {\n\n url = \"../admin/api/v1/\" + section + \"/\" + payload;\n\n return await fetch(url, {\n method: \"GET\",\n headers: headers\n })\n .then(resp => {\n //redirect the users to the login pages if the login token is invalid\n if (resp.status === 401) {\n Check_login_ticket_admin(section, 'test')\n }\n return resp.json()\n })\n .then(result => {\n return result\n })\n }\n else if (section === \"versioncheck\") {\n url = \"../admin/api/v1/version/check\";\n }\n else if (section === \"listupdate\") {\n url = \"../admin/api/v1/system/listupdate\"\n } else if (section === \"ldap\") {\n\n for (let i = 0; i < payload.length; i++) {\n if (checkEncryptions(payload[i].credentials)) {\n payload[i].credentials = encrypt(payload[i].credentials);\n }\n\n // Adds encryption for test users\n if (payload[i].test !== undefined) {\n if (checkEncryptions(payload[i].test.pass)) {\n payload[i].test.pass = encrypt(payload[i].test.pass);\n }\n }\n }\n payload = await payloadencrypt(JSON.stringify(payload))\n } else if (section === \"pportal\") {\n // Checks and encrypts the auth secret while transfering over the network\n if (payload.auth !== undefined && payload.auth !== null) {\n if (payload.auth.type !== \"schoolbox\" && payload.auth.secret !== undefined && payload.auth.secret !== null) {\n if (checkEncryptions(payload.auth.secret)) {\n payload.auth.secret = encrypt(payload.auth.secret);\n }\n }\n }\n\n if (payload.payment_gateway !== undefined && payload.payment_gateway !== null) {\n if (checkEncryptions(payload.payment_gateway.private_key)) {\n payload.payment_gateway.private_key = encrypt(payload.payment_gateway.private_key);\n }\n }\n\n if (payload.paypal_gateway !== undefined && payload.paypal_gateway !== null) {\n if (checkEncryptions(payload.paypal_gateway.secret)) {\n payload.paypal_gateway.secret = encrypt(payload.paypal_gateway.secret);\n }\n }\n }\n\n return await fetch(url, {\n method: \"POST\",\n headers: headers,\n body: JSON.stringify(payload)\n }).then(resp => {\n //redirect the users to the login pages if the login token is invalid\n if (resp.status === 401) {\n Check_login_ticket_admin(section, 'test')\n }\n return resp.json()\n })\n .then(result => {\n\n if (section === \"acls\") { //\n // This is to display acl testing result as acl api is returning the different test result format \n let responseEle = testAclsEle(result);\n return responseEle\n }\n else if (section === \"subscription\" || section === \"portal_subscription\") {\n // This is to diplay subcrtipion testing result as it is returning the different test result format\n let responseEle = testtokenEle(result);\n return responseEle\n }\n else if (section === \"versioncheck\") {\n return result\n }\n else {\n // Normal testing cases\n let responseEle = testPillarEle(result);\n return responseEle\n }\n\n })\n .catch(result => {\n // This is to diplay failed subcrtipion testing result as it is returning the different test result format\n if (section === \"subscription\" || section === \"portal_subscription\") {\n let responseEle = testtokenEle(result);\n // \n return responseEle\n }\n return <>\n })\n .catch(error => {\n\n return <>\n })\n\n}\n\nexport const savePillar = async (section, payload) => {\n let headers = payload instanceof FormData ? {} : {}\n\n if (section !== \"sslproxy\" && section !== \"ldapsaml\") {\n headers[\"Content-Type\"] = 'application/json';\n }\n\n headers[\"Semabench-Token\"] = token;\n\n let url = \"../admin/api/v1/\" + section + \"/save\";\n\n // Need to cehck saving of the portal\n if (section === \"pportal\") {\n // Checks and encrypts the auth secret while transfering over the network\n if (payload.auth !== undefined && payload.auth !== null) {\n if (payload.auth.type !== \"schoolbox\" && payload.auth.secret !== undefined && payload.auth.secret !== null) {\n if (checkEncryptions(payload.auth.secret)) {\n payload.auth.secret = encrypt(payload.auth.secret);\n }\n }\n }\n\n if (payload.payment_gateway !== undefined && payload.payment_gateway !== null) {\n if (checkEncryptions(payload.payment_gateway.private_key)) {\n payload.payment_gateway.private_key = encrypt(payload.payment_gateway.private_key);\n }\n }\n\n if (payload.paypal_gateway !== undefined && payload.paypal_gateway !== null) {\n if (checkEncryptions(payload.paypal_gateway.secret)) {\n payload.paypal_gateway.secret = encrypt(payload.paypal_gateway.secret);\n }\n }\n }\n else if (section === \"sslproxy\" || section === \"ldapsaml\") {\n\n // Handling the encryption of SSO Password\n let password = payload.password\n\n // Payload for the form data field for SSO\n let newpayload = new FormData();\n newpayload.append(\"hostname\", payload.hostname)\n newpayload.append(\"certificate\", payload.certificate)\n newpayload.append(\"password\", password)\n newpayload.append(\"sso_type\", payload.sso_type)\n newpayload.append(\"krb_realm\", payload.krb_realm)\n newpayload.append(\"krb_kdc\", payload.krb_kdc)\n newpayload.append(\"krb_keytab\", payload.krb_keytab)\n newpayload.append(\"oidc_metadata_url\", payload.oidc_metadata_url)\n newpayload.append(\"oidc_client_id\", payload.oidc_client_id)\n newpayload.append(\"oidc_secret\", payload.oidc_secret)\n newpayload.append(\"saml_metadata_url\", payload.saml_metadata_url)\n newpayload.append(\"saml_login_url\", payload.saml_login_url)\n newpayload.append(\"saml_cert\", payload.saml_cert)\n newpayload.append(\"saml_uid_name\", payload.saml_uid_name)\n newpayload.append(\"saml_group_name\", payload.saml_group_name)\n newpayload.append(\"enable_timeout\", payload.enable_timeout)\n newpayload.append(\"action_timeout\", payload.action_timeout)\n newpayload.append(\"popup_timeout\", payload.popup_timeout)\n\n return await fetch(url, {\n method: \"POST\",\n headers: headers,\n body: newpayload\n }).then(resp => {\n //redirect the users to the login pages if the login token is invalid\n if (resp.status === 401) {\n Check_login_ticket_admin(section, 'save')\n }\n return resp.json()\n })\n .then(result => {\n return result\n })\n\n }\n else if (section === \"acls\") { //acl payload need to exclude test user information when acls\n payload = payload.acls\n }\n //This if condition is used to change section from 'schoolbench' / sbsms to 'integrations'\n //As ical and sis integration pages used to use 'integrations' name to call the api.\n else if (section === \"schoolbench\") {\n url = \"../admin/api/v1/calendar/save\"\n if (payload.schoolbench !== undefined) {\n payload = payload.schoolbench\n }\n }\n else if (section === \"sbsms\") {\n url = \"../admin/api/v1/integrations/save\"\n\n let found_sbsms = false\n // Checks if payload already contains sbsms object\n Object.keys(payload).forEach(key => {\n if (key === \"sbsms\") {\n found_sbsms = true;\n }\n })\n\n if (found_sbsms === false) {\n payload = { \"sbsms\": payload };\n }\n }\n else if (section === \"token\") {\n url = \"\"\n }\n else if (section === \"watermark\") {\n let newpayload = new FormData();\n\n newpayload.append(\"file\", payload[0])\n\n let header = { \"Semabench-Token\": token };\n\n return await fetch(url, {\n method: \"POST\",\n headers: header,\n body: newpayload\n }).then(resp => {\n //redirect the users to the login pages if the login token is invalid\n if (resp.status === 401) {\n Check_login_ticket_admin(section, 'save')\n }\n return resp.json()\n })\n .then(result => {\n return result\n })\n } else if (section === \"ldap\") {\n for (let i = 0; i < payload.length; i++) {\n if (checkEncryptions(payload[i].credentials)) {\n payload[i].credentials = encrypt(payload[i].credentials);\n }\n\n // Adds encryption for test users\n if (payload[i].test !== undefined) {\n if (checkEncryptions(payload[i].test.pass)) {\n payload[i].test.pass = encrypt(payload[i].test.pass);\n }\n }\n }\n payload = await payloadencrypt(JSON.stringify(payload))\n } else if (section === \"multibanners\" || section === \"new_pportal\") {\n let t = await T();\n headers[\"Semabench-Token\"] = t;\n }\n\n return await fetch(url, {\n method: \"POST\",\n headers: headers,\n body: JSON.stringify(payload)\n }).then(resp => {\n //redirect the users to the login pages if the login token is invalid\n if (resp.status === 401) {\n Check_login_ticket_admin(section, 'save')\n }\n return resp.json()\n })\n .then(result => {\n getPillar()\n if (section === \"acls\") { //\n //acl format is not passed as array so, so calling acl testEls\n return { result }\n }\n else {\n //the array format test results \n return result\n }\n })\n .catch(error => {\n\n let result = {\n msg: <>\n

Error:

\n
\n
\n
\n
\n
\n

Error: {error.toString()}

\n ,\n fail: true\n }\n return (result)\n })\n}\n\nexport const mediaPillarHelper = (value, pillar) => {\n let new_pillar = pillar;\n\n Object.keys(value).forEach(k => {\n if (k === \"allow_social\") {\n new_pillar[k] = value[k];\n }\n })\n\n return new_pillar;\n}\n\nexport const renditionPillarHelper = (value, pillar) => {\n let new_pillar = pillar;\n\n Object.keys(value).forEach(k => {\n if (k === \"renditions\") {\n new_pillar[k] = value[k];\n }\n })\n\n return new_pillar;\n}\n\nexport const admin_pwPillarHelper = (value, pillar) => {\n let new_pillar = pillar;\n\n Object.keys(value).forEach(k => {\n if (k === \"admin_pw\") {\n new_pillar[k] = Buffer.from(value[k]).toString('base64');\n }\n })\n\n return new_pillar;\n}\n\n\n// Handles change for the portal Pillar\nexport const portalPillarHelper = (value, pillar) => {\n let new_pillar = pillar\n\n Object.keys(value).forEach(k => {\n if (k === \"logo\" || k === \"auth\" || k === \"hostname\" || k === \"primary_colour\" || k === \"profile_fields\"\n || k === \"rendition_type\" || k === \"profile_filters\" || k === \"photo_filters\" || k === \"parent_filter\"\n || k === \"enable_timeout\" || k === \"enable_quick_parent\" || k === \"enable_community\" || k === \"disclaimer\"\n || k === \"webshop\" || k === \"payment_gateway\" || k === \"paypal_gateway\" || k === \"currency\") {\n new_pillar[k] = value[k];\n }\n else if (k === \"title\" || k === \"description\") {\n new_pillar.disclaimer[k] = value[k];\n }\n else if (k === \"default_price\") {\n new_pillar.pricing[k] = parseFloat(value[k]);\n new_pillar[k] = parseFloat(value[k]);\n }\n })\n\n return new_pillar;\n}\n\n// Handles change for the portal Pillar\nexport const new_portalPillarHelper = (value, pillar) => {\n let new_pillar = pillar\n\n Object.keys(value).forEach(k => {\n if (k === \"logo\" || k === \"auth\" || k === \"hostname\" || k === \"primary_colour\"\n || k === \"rendition_type\" || k === \"profile_filters\" || k === \"photo_filters\" || k === \"collection_filters\"\n || k === \"enable_timeout\" || k === \"disclaimer\"\n || k === \"webshop\" || k === \"paypal_gateway\" || k === \"currency\" || k === \"banner_url\" || k === \"enable_banner\" || k === \"menu\" || k === \"banner\") {\n new_pillar[k] = value[k];\n }\n else if (k === \"title\" || k === \"description\") {\n new_pillar.disclaimer[k] = value[k];\n }\n else if (k === \"default_price\") {\n new_pillar.pricing[k] = parseFloat(value[k]);\n new_pillar[k] = parseFloat(value[k]);\n }\n })\n\n return new_pillar;\n}\n\n// Handles change for the mobile Pillar\nexport const mobilePillarHelper = (value, pillar) => {\n let new_pillar = pillar\n\n Object.keys(value).forEach(k => {\n if (k === \"delete_after_upload\" || k === \"privacy_policy\") {\n new_pillar[k] = value[k];\n }\n else if (k === \"days_before_deletion\" || k === \"lock_timeout\") {\n new_pillar[k] = parseInt(value[k]);\n }\n })\n\n return new_pillar\n}\n\n//Handles change for the facenet Pillar\nexport const FacenetPillarHelper = (value, pillar) => {\n let new_pillar = pillar\n\n Object.keys(value).forEach(k => {\n if (k === \"reverse_lookup\") {\n new_pillar[k] = value[k];\n }\n else if (k === \"resize\" || k === \"num_cpus\") {\n new_pillar[k] = parseInt(value[k]);\n } else if (k === \"verified_threshold\" || k === \"upper_threshold\" || k === \"size_ratio_cutoff\"\n || k === \"size_ratio_step\" || k === \"size_ratio_step_amount\" || k === \"year_step_amount\") {\n new_pillar[k] = parseFloat(value[k]);\n }\n })\n\n return new_pillar\n}\n\n//Handles change for the Media Pillar\nexport const MediaPillarHelper = (value, pillar, index) => {\n let new_pillar = pillar\n\n Object.keys(value).forEach(k => {\n if (k === \"allow_social\" || k === \"checkbox_names\" || k === \"media_consent\") {\n new_pillar[k] = value[k];\n }\n else if (k === \"add_media_consent\") {\n new_pillar.media_consent.push({\n field_name: value[k],\n value: []\n });\n }\n else if (k === \"add_checkbox\") {\n new_pillar.checkbox_names.push(value[k]);\n }\n else if (k === \"value\") {\n new_pillar.media_consent[index][k] = value[k];\n }\n else if (k === \"edit\") {\n new_pillar.checkbox_names[index] = value[k]\n }\n else if (k === \"delete_checkbox\") {\n new_pillar.checkbox_names.splice(index, 1);\n }\n\n })\n\n return new_pillar\n}\n\n\n//Handles change for the ldap Pillar \nexport const LdapPillarHelper = (type, value, index, pillar) => {\n\n let new_pillar = pillar\n\n if (type === \"url\" || type === \"credentials\" || type === \"principal\" || type === \"groupSearchBase\" || type === \"userSearchBase\" ||\n type === \"personType\" || type === \"groupType\" || type === \"userNameFormat\" || type === \"groupQuery\" || type === \"personQuery\" ||\n type === \"userIdAttributeName\") {\n new_pillar[index][type] = value;\n }\n else if (type === \"ca\") {\n new_pillar[index][type] = value;\n }\n else if (type === \"user\" || type === \"pass\") {\n new_pillar[index].test[type] = value;\n }\n else if (type === \"delete\") {\n new_pillar.splice(index, 1);\n }\n else if (type === \"add\") {\n new_pillar.push({\n credentials: \"\",\n groupQuery: \"(objectclass=group)\",\n groupSearchBase: \"\",\n groupType: \"group\",\n personQuery: \"(&(objectclass=user)(userAccountControl:1.2.840.113556.1.4.803:=512))\",\n personType: \"user\",\n principal: \"\",\n url: \"\",\n ca: \"\",\n userIdAttributeName: \"sAMAccountName\",\n userNameFormat: \"\",\n userSearchBase: \"\",\n test: {\n user: \"\",\n pass: \"\"\n }\n })\n }\n\n return new_pillar\n}\n\n//Handles change for the ical Pillar \nexport const icalPillarHelper = (type, value, index, pillar) => {\n let new_pillar = pillar\n\n if (type === \"url\" || type === \"has_terms\") {\n new_pillar.ical_url[index][type] = value\n }\n else if (type === \"delete\") {\n new_pillar.ical_url.splice(index, 1);\n }\n else if (type === \"add\") {\n new_pillar.ical_url.push({\n url: \"\",\n has_terms: false\n })\n }\n else if (type === \"eventAdd\") {\n if (new_pillar.events === undefined || new_pillar.events === null) {\n new_pillar.events = [{\n cal_event: \"\",\n start_date: \"\",\n start_time: \"\",\n end_date: \"\",\n end_time: \"\",\n }];\n } else {\n new_pillar.events = [...value]\n }\n\n }\n\n else if (type === \"eventDelete\") {\n new_pillar.events.splice(index, 1);\n }\n\n else if (type === \"eventClear\") {\n new_pillar.events = [];\n }\n\n else if (type === \"eventFresh\") {\n delete new_pillar.events;\n }\n\n return new_pillar\n}\n\n\n//Handles change for the sslproxy Pillar (SSO, SSL and inactivity)\nexport const SSLproxyPillarHelper = (value, pillar) => {\n\n let new_pillar = pillar\n\n Object.keys(value).forEach(k => {\n if (k === \"hostname\" || k === \"password\" || k === \"sso_type\" ||\n k === \"krb_realm\" || k === \"krb_kdc\" || k === \"krb_keytab\" ||\n k === \"oidc_metadata_url\" || k === \"oidc_client_id\" || k === \"oidc_secret\" ||\n k === \"saml_metadata_url\" || k === \"saml_cert\" || k === \"saml_login_url\" || k === \"saml_uid_name\" || k === \"saml_group_name\") {\n new_pillar[k] = value[k];\n\n if (k === \"sso_type\") {\n new_pillar.krb_realm = \"\";\n new_pillar.krb_kdc = \"\";\n new_pillar.krb_keytab = \"\";\n new_pillar.oidc_metadata_url = \"\";\n new_pillar.oidc_client_id = \"\";\n new_pillar.oidc_secret = \"\";\n new_pillar.saml_metadata_url = \"\";\n new_pillar.saml_cert = \"\";\n new_pillar.saml_uid_name = \"\";\n new_pillar.saml_login_url = \"\";\n new_pillar.saml_group_name = \"\";\n\n }\n }\n else if (k === \"enable_timeout\" || k === \"action_timeout\" || k === \"popup_timeout\") {\n new_pillar[k] = value[k].toString();\n }\n })\n\n return new_pillar\n}\n\n//Handles change for the acls Pillar \nexport const AclsPillarHelper = (index, type, value, pillar, index2) => {\n\n let new_pillar = pillar\n\n if (type === \"actions\" || type === \"outcome\") {\n new_pillar.acls[index][type] = value;\n }\n else if (type === \"action\" || type === \"user\" || type === \"node_id\") {\n new_pillar.test[type] = value;\n }\n else if (type === \"delete\") {\n new_pillar.acls.splice(index, 1);\n }\n else if (type === \"add\") {\n new_pillar.acls.push({\n roles: [\"\"],\n actions: [\"\"],\n params: null,\n outcome: \"ALLOW\"\n })\n }\n else if (type === \"roles\") {\n if (value === \"add\") {\n new_pillar.acls[index].roles.push(\"\");\n }\n else if (value === \"delete\") {\n new_pillar.acls[index].roles.splice(index2, 1);\n }\n else {\n new_pillar.acls[index].roles[index2] = value;\n }\n }\n\n return new_pillar\n}\n\n//Handles change for the sis/integrations Pillar \nexport const SisPillarHelper = (value, pillar) => {\n\n let new_pillar = pillar\n Object.keys(value).forEach(k => {\n if (k === \"type\" || k === \"host\" || k === \"db\" || k === \"username\" ||\n k === \"password\" || k === \"host\" || k === \"instance\" ||\n k === \"photo_folder\" || k === \"token\" || k === \"company_code\" || k === \"csv\" || k === 'area_code' || k === 'area_code_staff' ||\n k === \"app_code\" || k === \"tenant\" || k === \"client_id\" || k === \"include_inactive\" || k === \"include_staff\" || k === \"company_code_staff\" || k === \"app_code_staff\" || k === \"token_staff\" || k === \"host_staff\") {\n\n new_pillar[k] = value[k];\n\n //to setup 'default read from custom' when changing type. \n if (new_pillar[k] === 'custom' && pillar[k] === \"\") {\n new_pillar.read_from_custom_yml = '~'\n }\n\n if (new_pillar[\"include_staff\"] === \"true\") {\n if (k === \"company_code_staff\")\n new_pillar.company_code_staff = value[k];\n if (k === \"app_code_staff\")\n new_pillar.app_code_staff = value[k];\n if (k === \"host_staff\")\n new_pillar.host_staff = value[k];\n if (k === \"token_staff\")\n new_pillar.token_staff = value[k];\n if (k === \"area_code_staff\")\n new_pillar.area_code_staff = value[k];\n }\n if (k === \"type\") {\n new_pillar.instance = \"\";\n new_pillar.include_inactive = \"\";\n new_pillar.include_staff = \"\";\n new_pillar.company_code = \"\";\n new_pillar.company_code_staff = \"\";\n new_pillar.app_code = \"\";\n new_pillar.token = \"\";\n new_pillar.tenant = \"\";\n new_pillar.client_id = \"\";\n new_pillar.db = \"\";\n new_pillar.photo_folder = \"\";\n new_pillar.host = \"\";\n new_pillar.username = \"\";\n new_pillar.password = \"\";\n new_pillar.opt_type = \"\";\n new_pillar.csv = \"\";\n new_pillar.area_code = \"\";\n if (value[k] === \"synergetic\" || value[k] === \"maze\") {\n new_pillar.read_from_custom_yml = \"false\";\n }\n else if (value[k] === \"simon\") {\n new_pillar.read_from_custom_yml = \"true\";\n }\n else if (value[k] === \"custom\") {\n new_pillar.read_from_custom_yml = \"~\";\n }\n else if (value[k] === \"schoolbench\") {\n new_pillar.host = \"pseudo\";\n new_pillar.username = \"pseudo\";\n new_pillar.password = \"pseudo\";\n new_pillar.db = \"pseudo\";\n new_pillar.photo_folder = \"/mnt/profiles\";\n new_pillar.opt_type = \"test\";\n new_pillar.csv = \"/opt/sbsms/template.csv\";\n new_pillar.read_from_custom_yml = \"true\";\n }\n else if (value[k] === \"tass\" || value[k] === \"sentral\" || value[k] === \"edumate\" || value[k] === \"wonde\") {\n new_pillar.include_inactive = \"false\";\n new_pillar.include_staff = \"false\";\n new_pillar.username = \"pseudo\";\n new_pillar.password = \"pseudo\";\n new_pillar.db = \"pseudo\";\n new_pillar.opt_type = \"test\";\n new_pillar.read_from_custom_yml = \"false\";\n }\n }\n\n }\n })\n\n return new_pillar\n}\n\n\n//Handles change for the vpn \nexport const vpnPillarHelper = (value, pillar) => {\n\n let new_pillar = pillar\n\n Object.keys(value).forEach(k => {\n new_pillar[k] = value[k];\n })\n\n return new_pillar\n}\n\n\n//Handles change for the autoupdates \nexport const autoupdatesPillarHelper = (value, pillar) => {\n\n let new_pillar = pillar\n\n Object.keys(value).forEach(k => {\n if (k === \"autoupdates\") {\n new_pillar = value[k];\n }\n })\n\n return new_pillar\n}\n\n//Handles change for the watermark \nexport const WatermarkPillarHelper = (value, pillar) => {\n\n let new_pillar = pillar\n\n Object.keys(value).forEach(k => {\n if (k === \"watermark\") {\n new_pillar = value;\n }\n })\n\n return new_pillar\n}\n\n//Handles change for token \nexport const tokenPillarHelper = (value, pillar) => {\n\n let new_pillar = pillar\n\n Object.keys(value).forEach(k => {\n new_pillar[k] = value[k];\n })\n\n return new_pillar\n}\n\n//Handles removing onlineuser \nexport const OnlineuserHelper = async (payload) => {\n\n let headers = { 'Content-Type': 'application/json' }\n headers[\"Semabench-Token\"] = token;\n\n return await fetch(\"../admin/api/v1/system/listupdate\", {\n method: \"POST\",\n headers: headers,\n body: JSON.stringify(payload)\n })\n .then(resp => resp.json())\n .then(result => {\n return <>\n\n })\n .catch(error => {\n return <>\n })\n\n}\n\n\n// Appends \"0\" to the front of the number\nfunction pad(n) {\n return (n < 10) ? '0' + n.toString() : n.toString();\n}\n\nconst testPillarEle = (result) => {\n let returnEle = <>\n let fail = false;\n\n if (result !== undefined) {\n let count = 0\n returnEle = <>\n

Results:

\n
\n
\n
\n
\n
\n\n {result.map(item => {\n // Count upwards\n count++\n\n let err = <>\n if (item.error !== undefined && item.error !== null && item.error !== \"\") {\n // Only displays Error element if there is an error on ldaps\n if (item.error.includes(\"Can't contact LDAP server\")) {\n item.output = \"Can't contact LDAP server\"\n } else if (item.error.includes(\"Invalid credentials\")) {\n item.output = \"Wrong Credentials\"\n } else {\n if (item.name.includes(\"LDAP\")) {\n if (item.name.includes(\"Test Login\") || item.name.includes(\"Test User Search\")) {\n item.output = \"Cannot find Test User\"\n } else if (item.name.includes(\"Login\")) {\n item.output = \"Check your LDAP URL, Principal and Password\"\n } else if (item.name.includes(\"Certificate Verification\")) {\n item.output = \"Cannot connect LDAP server with the Certificate\"\n } else if (item.name.includes(\"Certificate Orders\")) {\n item.output = \"LDAPs Certificate need to be in this order: (ROOT-CA/CA), (ROOT-CA/CA/others), (CA/others), Single ROOT-CA or Single CA\"\n } else if (item.name.includes(\"Group Search\")) {\n item.output = \"Cannot find LDAP Groups\"\n } else if (item.name.includes(\"Group Class\")) {\n item.output = \"Cannot find LDAP Groups using Group Class\"\n } else if (item.name.includes(\"User Search\")) {\n item.output = \"Cannot find LDAP Users\"\n } else if (item.name.includes(\"User Class\")) {\n item.output = \"Cannot find LDAP Users using User Class\"\n }\n }\n }\n\n err =

Error: {item.error}

\n }\n\n let icon = ;\n if (item.pass === false) {\n icon = ;\n fail = true;\n }\n\n return
\n
\n
\n
\n
\n

\n {icon}     {pad(count)} {item.name}\n

\n
\n
\n
\n

{item.description}

\n

Pass: {item.pass.toString()}

\n {item.pass ? item.output !== \"\" &&

Outcome: {item.output}

: item.output !== \"\" &&

Outcome: {item.output}

}\n {err}\n
\n
\n
\n
\n
\n })}\n \n }\n\n return { returnEle, fail };\n}\n\n//New fuctions to handle acl testing results\nconst testAclsEle = (result) => {\n let returnEle = <>\n let fail = false;\n\n if (result !== undefined) {\n returnEle = <>\n

Access List Test Results

\n
\n
\n
\n
\n
\n\n
\n

Roles

\n
    {result.roles.map((role, i) =>
  • {role}
  • )}
\n
\n\n

Action: {result.test.action}

\n

Outcome: {result.outcome ? \"Allow\" : \"Deny\"}

\n\n \n }\n\n return { returnEle, fail };\n}\n\n\n//to load subscription detail\nexport const loadSubscription = async (section, payload) => {\n let headers = payload instanceof FormData ? {} : { 'Content-Type': 'application/json' }\n\n headers[\"Semabench-Token\"] = token;\n\n let url = \"../admin/api/v1/subscription\"\n\n return await fetch(url, {\n method: \"GET\",\n headers: headers,\n token: JSON.stringify(payload)\n }).then(resp => {\n //redirect the users to the login pages if the login token is invalid\n if (resp.status === 401) {\n Check_login_ticket_admin('Token', 'validate')\n }\n return resp.json()\n })\n .then(result => {\n let responseEle = testtokenEle(result);\n return responseEle\n })\n .catch(result => {\n let responseEle = testtokenEle(result);\n return responseEle\n })\n\n}\n\n//to load subscription detail\nexport const loadPortalSubscription = async (section, payload) => {\n let headers = payload instanceof FormData ? {} : { 'Content-Type': 'application/json' }\n\n headers[\"Semabench-Token\"] = token;\n\n let url = \"../admin/api/v1/portal_subscription\"\n\n return await fetch(url, {\n method: \"GET\",\n headers: headers,\n token: JSON.stringify(payload)\n }).then(resp => {\n //redirect the users to the login pages if the login token is invalid\n if (resp.status === 401) {\n Check_login_ticket_admin('Portal Token', 'validate')\n }\n return resp.json()\n })\n .then(result => {\n let responseEle = testtokenEle(result);\n return responseEle\n })\n .catch(result => {\n let responseEle = testtokenEle(result);\n return responseEle\n })\n\n}\n\n//to display subscription status\nexport const DisplaytokenEle = (result) => {\n let returnEle = <>\n // Checks that the results are not null\n if (result != null) {\n // Checks that the result returns and invalid token\n if (result.not_valid !== undefined) {\n // if Invalid Token returns blank\n if (result.not_valid) {\n returnEle = <>\n }\n } else {\n // If its not invalid, returns the Expiry Date of the token\n let year = result.end_date.substring(0, 4)\n let month = result.end_date.substring(5, 7)\n let day = result.end_date.substring(8, 10)\n\n if (result !== undefined) {\n returnEle = <>\n

Expiry Date: {day}-{month}-{year}

\n \n }\n }\n\n\n }\n\n return returnEle;\n}\n\n\n//handle the token element to diplay \nconst testtokenEle = (result) => {\n let returnEle = <>\n\n if (result !== undefined && result.email !== undefined) {\n let year = result.end_date.substring(0, 4)\n let month = result.end_date.substring(5, 7)\n let day = result.end_date.substring(8, 10)\n\n returnEle = <>\n

Subscription Validated

\n

Expiry Date: {day}-{month}-{year}

\n \n }\n else {\n returnEle = <>\n

Failed to Validate Subscription

\n

Failed to validate the subscription, please check your token and try again.

\n \n }\n\n return { returnEle, result };\n}\n\n\n//to load media consent data\nexport const loadMediaConsent = async (section, payload) => {\n let headers = payload instanceof FormData ? {} : { 'Content-Type': 'application/json' }\n\n headers[\"Semabench-Token\"] = token;\n\n let url = '../api/v1/repo/s/semabench/query?json.nl=map&facet=on&facet.field=sb_parentPermissions&q=sb_parentPermissions:*'\n\n let media_consent = [];\n\n return await fetch(url, {\n method: \"POST\",\n headers: headers\n })\n .then(resp => resp.json())\n .then(result => {\n\n let resp = result.facet_counts.facet_fields.sb_parentPermissions;\n\n if (resp !== \"\" && resp !== undefined) {\n\n Object.keys(resp).forEach(consent => {\n if (consent === \"\" || consent === \" \") {\n media_consent.push({\n field_name: \"Absent Field\",\n value: []\n })\n }\n else {\n media_consent.push({\n field_name: consent,\n value: []\n })\n }\n\n })\n\n }\n\n return media_consent\n })\n\n}\n\n// response and auto logout\nexport const getUpgrade = (retry) => {\n // Created an object that will be returned\n let obj = {}\n obj.save = true;\n obj.msg = <>\n obj.retry = retry;\n\n // Calls the api to get the status update\n return fetch(\"../api/v1/version/upgrade/status\", {\n method: \"GET\",\n headers: { \"Semabench-Token\": token }\n }).then(res => res.json())\n .then(response => {\n\n // If the status has changes, then stop saying its in saving mode\n obj.save = response.running;\n\n // if the status is not running its workout what has passed and what has failed\n if (response.running !== true) {\n try {\n // let changelog = response.stdout\n // changelog = changelog.split(/(?:\\n)/g)\n\n // Splits each test by a new line and 5x -\n let t = response.stdout.split(\"\\n----------\")\n let array = []\n let success = \"\";\n let fail = \"\"\n let totalTime = \"\";\n let statesRun = \"\";\n let hasFail = false\n t.forEach(val => {\n let r = val.trim();\n r.replace(\"\\n\", \"\");\n // Replaces all new lines and formats\n if (!r.includes(\"local:\")) {\n let splitValues = r.split('\\n');\n let obj = {};\n // Creates an object of the summary and any failed items\n splitValues.forEach(split => {\n if (split !== \"\") {\n let keys = split.split(\":\");\n obj[keys[0].trim()] = keys[1];\n\n if (keys[1] === undefined) {\n keys[1] = \"\";\n }\n\n if (keys[0].trim() === \"Succeeded\") {\n success = keys[1]\n }\n\n if (keys[0].trim() === \"Failed\") {\n fail = keys[1]\n if (fail !== 0) {\n hasFail = true;\n }\n\n }\n\n if (keys[0].trim() === \"Total states run\") {\n statesRun = keys[1]\n }\n\n if (keys[0].trim() === \"Total run time\") {\n totalTime = keys[1]\n }\n }\n })\n array.push(obj);\n }\n })\n\n let failEle = <>\n if (hasFail) {\n // If any fails then adds it\n let count = 0\n failEle = <>\n
\n

\n Fail States:\n

\n
\n
\n {\n // Loops over the array and sees if any are false (Failed)\n // If so then will add the Name and response of that failed item highlighted in red\n array.map((item, key) => {\n if (item.Result !== undefined) {\n if (item.Result.trim() === \"False\") {\n count++;\n return
\n

Fail {count}:

\n {Object.keys(item).map(val => {\n return

{val} : {item[val]}

\n })}\n
\n\n }\n }\n return <>\n })\n }\n \n }\n\n // Output message of the response from the server once compelted\n // This is a summary of the results, the run time. Total States and total time\n obj.msg = <>

Output:

\n
\n
\n
\n
\n
\n
\n
\n
\n
\n

\n Summary:\n

\n
\n
\n
\n

Success: {success}

\n

Failed: {fail}

\n

Total states run: {statesRun}

\n

Total Time: {totalTime}

\n
\n {failEle}\n
\n
\n
\n
\n\n
\n \n return obj;\n } catch (err) {\n let r = retry + 1;\n obj.retry = r\n return obj\n }\n\n\n } else {\n let r = retry + 1;\n obj.retry = r\n return obj\n }\n })\n .catch(error => {\n\n obj.save = false\n return obj\n })\n}\n\nexport const getSaveData = async (retry) => {\n // Created an object that will be returned\n let obj = {}\n obj.save = true;\n obj.msg = <>\n obj.retry = retry;\n\n let t = await T();\n // Calls the api to get the status update\n return fetch(\"../admin/api/v1/version/update/status\", {\n method: \"GET\",\n headers: { \"Semabench-Token\": t }\n }).then(res => res.json())\n .then(response => {\n\n // If the status has changes, then stop saying its in saving mode\n obj.save = response.running;\n\n // if the status is not running its workout what has passed and what has failed\n if (response.running !== true) {\n try {\n loadPillar();\n loadConfig();\n // let changelog = response.stdout\n // changelog = changelog.split(/(?:\\n)/g)\n\n // Splits each test by a new line and 5x -\n let t = response.stdout.split(\"\\n----------\")\n let array = []\n let success = \"\";\n let fail = \"\"\n let totalTime = \"\";\n let statesRun = \"\";\n let hasFail = false\n t.forEach(val => {\n let r = val.trim();\n r.replace(\"\\n\", \"\");\n // Replaces all new lines and formats\n if (!r.includes(\"local:\")) {\n let splitValues = r.split('\\n');\n let obj = {};\n // Creates an object of the summary and any failed items\n splitValues.forEach(split => {\n if (split !== \"\") {\n let keys = split.split(\":\");\n obj[keys[0].trim()] = keys[1];\n\n if (keys[1] === undefined) {\n keys[1] = \"\";\n }\n\n if (keys[0].trim() === \"Succeeded\") {\n success = keys[1]\n }\n\n if (keys[0].trim() === \"Failed\") {\n fail = keys[1]\n if (fail !== 0) {\n hasFail = true;\n }\n\n }\n\n if (keys[0].trim() === \"Total states run\") {\n statesRun = keys[1]\n }\n\n if (keys[0].trim() === \"Total run time\") {\n totalTime = keys[1]\n }\n }\n })\n array.push(obj);\n }\n })\n\n let failEle = <>\n if (hasFail) {\n // If any fails then adds it\n let count = 0\n failEle = <>\n
\n

\n Fail States:\n

\n
\n
\n {\n // Loops over the array and sees if any are false (Failed)\n // If so then will add the Name and response of that failed item highlighted in red\n array.map((item, key) => {\n if (item.Result !== undefined) {\n if (item.Result.trim() === \"False\") {\n count++;\n return
\n

Fail {count}:

\n {Object.keys(item).map(val => {\n return

{val} : {item[val]}

\n })}\n
\n\n }\n }\n return <>\n })\n }\n \n }\n\n // Output message of the response from the server once compelted\n // This is a summary of the results, the run time. Total States and total time\n obj.msg = <>

Output:

\n
\n
\n
\n
\n
\n
\n
\n
\n
\n

\n Summary:\n

\n
\n
\n
\n

Success: {success}

\n

Failed: {fail}

\n

Total states run: {statesRun}

\n

Total Time: {totalTime}

\n
\n {failEle}\n
\n
\n
\n
\n\n
\n \n return obj;\n } catch (err) {\n let r = retry + 1;\n obj.retry = r\n return obj\n }\n\n\n } else {\n let r = retry + 1;\n obj.retry = r\n return obj\n }\n })\n .catch(error => {\n\n obj.save = false\n return obj\n })\n} ","import { getToken, decrypt_storage_values } from \"../ressources/functions/helper\";\n\n\nexport function WebSocketSetup() {\n\n let token = getToken();\n\n // let login_info = localStorage.getItem(\"login\")\n let login_info = localStorage.getItem(\"L\");\n\n if (token != null && token !== undefined && login_info !== undefined && login_info != null) {\n login_info = JSON.parse(decrypt_storage_values(login_info));\n\n var loc = window.location, new_uri;\n\n if (loc.protocol.includes(\"https\")) {\n new_uri = \"wss:\";\n } else {\n new_uri = \"ws:\";\n }\n\n new_uri += \"//\" + loc.host;\n new_uri += \"/api/ws/?semabench-token=\" + encodeURIComponent(login_info.username);\n\n const socket = new WebSocket(new_uri);\n socket.onopen = function (e) {\n };\n\n socket.onmessage = function (event) {\n try {\n let message = JSON.parse(event.data);\n if (message !== undefined && message !== null) {\n if (message.t !== undefined && message.t !== null) {\n if (message.t === \"update_complete\" && !window.location.href.includes(\"version\")) {\n window.location.replace(\"/logout?upgrade\");\n }\n }\n }\n } catch (err) {\n console.error(err);\n }\n };\n\n // socket Handler if we loose connection from server\n socket.onclose = async function (event) {\n setTimeout(async () => {\n WebSocketSetup();\n }, 3000)\n };\n\n socket.onerror = function (event) {\n console.error(\"Error Connecting to Socket\");\n }\n\n }\n\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".\" + {\"47\":\"a0cb328d789af0417787\",\"79\":\"03b5051cc78a46ebff54\",\"203\":\"0e8ee5add623295c4139\",\"268\":\"ab6446bf61399eec9547\",\"434\":\"1d054c5cc676328f6bb8\",\"595\":\"be0558e71221d27fc99f\",\"682\":\"43d883e2efe9477fff5d\",\"716\":\"e17b4b6c450337e28d40\",\"808\":\"efe6f9c8dbb83546f9d7\",\"854\":\"236dd23fa04da6dc70b9\",\"1044\":\"92e96fda1d0821247cdb\",\"1133\":\"180c3298482ccd68bd54\",\"1185\":\"eb0c5e9eda652f3e64a6\",\"1245\":\"22c0efa724458b2c26dc\",\"1246\":\"f0e31ee1adc3ee13b5f4\",\"1405\":\"cec9c79c294bc177ef27\",\"1527\":\"a3cc50d0f602b7e5e353\",\"1688\":\"fe0d9698500d351c486c\",\"1795\":\"e624e002b6b95eee3668\",\"1836\":\"4df4db2c217c9b27f834\",\"1897\":\"2c2672437442278133fd\",\"1984\":\"8e08f3fb749b52959550\",\"2087\":\"a401deb6a25712324dc9\",\"2111\":\"7e2284ce16f4aa340dc4\",\"2118\":\"e2269406b7e61d9182dc\",\"2124\":\"9b4f9052266e11868497\",\"2157\":\"f88f45a8a3fe4dfff403\",\"2198\":\"9fec10a7f95e03d459f1\",\"2347\":\"590a0f83ae3996b2b86d\",\"2357\":\"81e4e8c90737fa4e1447\",\"2398\":\"7a65e56001c9d5aad7e8\",\"2402\":\"e272ea0935a8f53f128f\",\"2429\":\"2c24352ddd9c9753e5e3\",\"2481\":\"e21ffff90d8614565def\",\"2550\":\"70ff36db8275e9f36163\",\"2623\":\"f4087fcd8cabe0d364a5\",\"2843\":\"766c27b5acd949282801\",\"2848\":\"e7996e074891df988658\",\"3042\":\"619c94ae1b989e29a525\",\"3083\":\"92cd4881596fb7be94a5\",\"3171\":\"98d7e428369a359e94dd\",\"3217\":\"1ee6a2eee1db984734d5\",\"3320\":\"8047bce0cb83dc2f43ab\",\"3373\":\"d7b9aba2d48dc94dbbf7\",\"3464\":\"c50e444e8f02f1e35bc4\",\"3491\":\"25d56326f7e263859a12\",\"3494\":\"62727f67ffdfe6673248\",\"3557\":\"e44b61f28d83fd6bc81e\",\"3568\":\"69128eebdb73f2094dc1\",\"3575\":\"bf7b1019135b61fd36ac\",\"3620\":\"5200585ab1d710cd999b\",\"3629\":\"9a3dc4be29e59dfa13df\",\"3660\":\"a4edbeaa06a06f0a3fcc\",\"3670\":\"a0c9b363ba7945094d72\",\"3707\":\"cabaef065f5fa85266ca\",\"3783\":\"df7bb542e7414b68eb69\",\"3920\":\"c0ba96ec69e0c77adc74\",\"3979\":\"56ccef510c60d1f0b4b0\",\"4060\":\"62dbf175bedd9243732f\",\"4152\":\"486923f7224f4a2c108b\",\"4188\":\"be458c8579840488325d\",\"4335\":\"8ce422a5f331a44af9ed\",\"4410\":\"b3cc2a08a1af69a69790\",\"4417\":\"e4aaa74615d955b6eb2f\",\"4431\":\"afbffa28d88d1878edb4\",\"4528\":\"140fc85f8645218a3117\",\"4625\":\"80737af41741239d2777\",\"4742\":\"3a3137e2789f0fea8162\",\"4814\":\"639d6aba4186413ea273\",\"4850\":\"081244a7194dd70509a5\",\"4979\":\"59d0a922e63b654eec9e\",\"5065\":\"9ea6097c4fb9405d127d\",\"5073\":\"dee7a6d3808eff017a08\",\"5129\":\"6878864a7f472b56406f\",\"5251\":\"fa8329dbfc3cbe3cd7d9\",\"5321\":\"ad134ad3e9b0629cd56a\",\"5377\":\"0e7970a59197b3543884\",\"5405\":\"a41dc2b39d3560bd8b73\",\"5494\":\"09dabffd194f00e878f6\",\"5512\":\"0d2744b6b1260c683ae2\",\"5680\":\"e5ce4e39e1636eb746e6\",\"5754\":\"7801344b446993038bd7\",\"5913\":\"6bc92ca3f02338250d99\",\"6000\":\"a5db9a70f15526c0df6a\",\"6073\":\"2b9bffd459c6f7a18810\",\"6075\":\"dc98af8ff7173c4cebdf\",\"6085\":\"5db8e5f6b53d78f03643\",\"6108\":\"75e8b9d732db3cde25e1\",\"6111\":\"5a8d6d966aab26b7af9d\",\"6147\":\"a6b87a07b0faf4b7ea29\",\"6178\":\"9a9b2e104ef894f5e81e\",\"6237\":\"1709aad55ca5e7ce4df5\",\"6249\":\"082719a01b9485af9ab2\",\"6303\":\"1237b4f9359898ed1c96\",\"6442\":\"14dffa7c234e77dd283a\",\"6741\":\"3e79beb2f410432062c1\",\"6781\":\"118901bb81af5ee0f8c4\",\"6864\":\"38e907757abb84472412\",\"6942\":\"6738f307bbc51ba42deb\",\"6989\":\"4f0e79189bf15e70fa98\",\"7005\":\"415a7f7eb806f045f5fb\",\"7070\":\"fc1f123801ad5bb2e929\",\"7119\":\"3b3e10bf687c960ed71b\",\"7179\":\"53fb4bd55b740a1176de\",\"7295\":\"34ceafcacaf47e139665\",\"7323\":\"19a690609040bebdf4b6\",\"7353\":\"c63bf96bed33e5f88b3a\",\"7365\":\"daab68d83fbfe64b678e\",\"7410\":\"ed423f7a7dc94b6dba4a\",\"7484\":\"e19bea440e0a79b9ebff\",\"7595\":\"518d891a7766093d7a32\",\"7624\":\"83d20d047abfc8aa44a0\",\"7720\":\"29b653ac8b103c17510c\",\"7795\":\"5d01dbdf3e378eb2d00f\",\"8094\":\"aa6a64b0b6d200e6e909\",\"8171\":\"3494f529c30be738ff27\",\"8234\":\"b17809067a6714420c90\",\"8359\":\"78483ed3bac789903463\",\"8370\":\"1f4b04ac9eb063cff37d\",\"8393\":\"f0ecf34a4777dcf2beb3\",\"8427\":\"28774dbdfd98c87105a7\",\"8481\":\"77de02ff30bdee6b3d4b\",\"8578\":\"74699ef91e13ab9adb6d\",\"8672\":\"ebb020f4454c249a1244\",\"8702\":\"4860442edc9a76266cb7\",\"8847\":\"4d10d8fafdec4a2948ef\",\"8864\":\"b2f7f828ee40bfb4faaf\",\"8871\":\"bedc85e09b76935c7bad\",\"8956\":\"f4099e2cebb58339dabe\",\"9017\":\"3c1aa7744d64c1a12087\",\"9081\":\"46cd7f67afdd6d545a3a\",\"9245\":\"9576e1de73ee96a59599\",\"9259\":\"66646833df1b33cd3e88\",\"9273\":\"f0016d68e752fe5d736c\",\"9277\":\"b8c8aa33723c382b6706\",\"9279\":\"ea910145139c351f9e08\",\"9284\":\"5d7e774d135512afcd35\",\"9290\":\"cc2576f06dadb1e5dee9\",\"9331\":\"9f73baa08eed241d2b1f\",\"9449\":\"58a0486063545c1eed9c\",\"9625\":\"ec08cee13e55f448513a\",\"9701\":\"e9595ba8e6572d0406a0\",\"9739\":\"9025a0a1f825e1f01d9f\",\"9793\":\"6ae541885f0b7eac2121\",\"9949\":\"ed358575499c807b2326\"}[chunkId] + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"static/css/\" + chunkId + \".\" + {\"1133\":\"4695ae6c\",\"3320\":\"0d704582\",\"3620\":\"ea07f062\",\"3629\":\"4695ae6c\",\"4152\":\"fbaf2235\",\"4814\":\"fbaf2235\",\"5065\":\"b7949540\",\"5512\":\"1f02b54d\",\"6073\":\"fbaf2235\",\"7410\":\"05f13fdf\",\"8234\":\"d47c5f15\",\"8702\":\"fbaf2235\",\"8847\":\"1f6d5804\"}[chunkId] + \".chunk.css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"schoolbench-front:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t\tif (script.src.indexOf(window.location.origin + '/') !== 0) {\n\t\t\tscript.crossOrigin = \"anonymous\";\n\t\t}\n\t\tscript.integrity = __webpack_require__.sriHashes[chunkId];\n\t\tscript.crossOrigin = \"anonymous\";\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","\n__webpack_require__.sriHashes = {\"47\":\"*-*-*-CHUNK-SRI-HASH-uB1ezBYcBU0OH3IJUrwvv54OjXVFI= sha384-SdSxsy27BZHI7efJE4GpOTrNNfmP9jU3MaIsx1E1jrXKRyKb2jMC7wjbv3zSumoE\",\"79\":\"*-*-*-CHUNK-SRI-HASH-kahRAN+DZwcKvbQ8v4zRvRyyGT3cU= sha384-fXWY/jVs4Aw79GpfMwCXKpqgiHLsftP6Q+912+r235aYEeXtrZluRWfJ3416zXfZ\",\"203\":\"*-*-*-CHUNK-SRI-HASH-2OD1PjpqF3HNL7YFgXiHBAmEuYuSc= sha384-D2hDGYRNUMAtg0uEyNQu29P4JUpEEPkxO0UFczFAOAGeXkUqSrQuPmVFZq0LQ6OY\",\"268\":\"*-*-*-CHUNK-SRI-HASH-AExHpO6nZUbUSSt0X+fXwj+pduD7M= sha384-FkJULegcT9vjvwuE2mLfE27Qam/Aa215rXbWTTDrsd+kqWk45y9aS0tdGRrk9rn3\",\"434\":\"*-*-*-CHUNK-SRI-HASH-BW8vGjXa7K8hyMZMV+/sBGdl1/6l8= sha384-Ka6eHABxyZJmp0sggf578eLn1HowyVgDBGaToUTyWecey/4vmjW7x2ZJaMVcleD3\",\"595\":\"*-*-*-CHUNK-SRI-HASH-D7AdeACuqFoMm8U9P5uASKg2fM4Ms= sha384-+Prp0D3CBLwFbaUL8u0G08PfQzc2YT3SRcyHaUxUxgM5rpNKlfMqwuSFbPQKHQSd\",\"682\":\"*-*-*-CHUNK-SRI-HASH-GnNrmJAHbCfyAIZ6s2Mej+yBm6rnc= sha384-UBtqdAbNZi66ugqJm0JElQr5azh//g5zcn3o4aAjrVnD9CSejYGzwBeq8X6/WG7M\",\"716\":\"*-*-*-CHUNK-SRI-HASH-2WPh35HvhPNywORlqgJ76fxmLiJd8= sha384-87HoYY319lsT4x7DxlcCDY6C6dcv+/QZrbfKKM+oWY0MYkuur7Ww3Ec5zojPhGge\",\"808\":\"*-*-*-CHUNK-SRI-HASH-GibrlXKV5XsX0aZ8b3Q/dnjlV5vVc= sha384-aKtmSDnwFpq6rASASLPDKj2wJ8qUy9YT0j95ZnPOdVcQvoY4DfLV2GvSRwFyrV4z\",\"854\":\"*-*-*-CHUNK-SRI-HASH-CO8yIHolx/3g3nglKHNgio0QWCR/E= sha384-6bCBPGi14ppXCbbKYuHxnD/4W6JzPUnvct48h6GYhiyJOvRnyh7cjyX9YIqT0H+a\",\"1044\":\"*-*-*-CHUNK-SRI-HASH-HLJcIaXph+2/fzFz+biV7TtKHE0rc= sha384-8XDZRR7oNk7iDZDVc/9ZB4S2y4zgNYJK57bStqM/Gdz6rYO/8o3Zw8Dxipgy+b23\",\"1133\":\"*-*-*-CHUNK-SRI-HASH-W398pN1LM2IDGgsByMvn4kezbKBeg= sha384-usrX1cPD0wkafQ0D1DGAWZZIfz2DizDzjF29mkzn9qvLPzHUeqe55FZmRLYclfQX\",\"1185\":\"*-*-*-CHUNK-SRI-HASH-Q/v7pI+QqrVteMYcn3kAKeZmCXKQ8= sha384-CirLsUDCMnJumpitLdrG3Ahnc8fVocnXZ56+58757t7Nl4BnN6UFrI4E8GsVFS1s\",\"1245\":\"*-*-*-CHUNK-SRI-HASH-9ScXQuMgnzUC3mlgPWlYVFpAbBWwc= sha384-yCHUWyCQAwd4xPm5TmAZ0p5yEHFL1/aYp2C4ZqOzN8WXhUEJOm8/aPjlXB0Yrez1\",\"1246\":\"*-*-*-CHUNK-SRI-HASH-tit8S7Cmt4DwVLUssdnRJ7uyiThDo= sha384-Y/KafGpvoHio0JpzzZP3O8obwnqSeWYuFsWvTk/ZsNZjtCyTAm3pJ0edLdY/Tzwp\",\"1405\":\"*-*-*-CHUNK-SRI-HASH-oONzpycTEcOTKm96GByHh715a1nB0= sha384-EhtaAjkAiZOi9iwRZOUB8helTgDoUHMLeFCRObYfrPENsGdqBd2w8MD0pyEMrmN6\",\"1527\":\"*-*-*-CHUNK-SRI-HASH-UCRkQ9yViIcqi6qQKXZGWitcfmZYM= sha384-GUdsnwGuzkQisAFIgIiOxDFRCzkzTqg/vkYXriLrgdiavlW7QS7uuoYdZagsKNNb\",\"1688\":\"*-*-*-CHUNK-SRI-HASH-BGnenNVYQdkb3qq1CrCbLohRiTeAo= sha384-2kFfxZ9g41+QaGJJOXw/qrjo9hQv3cjZfrmBNCDxC2V+U3ElX+CNPrzonAHbwR6T\",\"1795\":\"*-*-*-CHUNK-SRI-HASH-0FhxsIifqMIBX93R4+zy1uMh3vnrY= sha384-BYuBqs06WrS8uioLsiavFPUd+Vh7o+Gmibqyl3ZPGLpUgKidg5AiHbfH2/Kx9QVm\",\"1836\":\"*-*-*-CHUNK-SRI-HASH-RLgVb75wFbXFXiDM+adVkytni16aw= sha384-lD3zDDfgQQBlJvMd0+75NLW9JuBdUhMbmnJZYsrm0qLCyzzDA14BZndL5EQCZg8W\",\"1897\":\"*-*-*-CHUNK-SRI-HASH-TO1q0cvfCOStcssq+Su1MfDz17ssw= sha384-CxnfC6/I5kZoav0gyM1SMho9nbjetG3ztwyzpGjew/coW2bHoDaFR2n5Ob09Ofa8\",\"1984\":\"*-*-*-CHUNK-SRI-HASH-eDkFUNFMvasKkX1dT0OSNWk0Gyrg4= sha384-8LYqr6KAid7sTAEPDVGKtxHHKyWvELmmfk7runxOX15cXHVxe83AuBybPQh5tm6x\",\"2087\":\"*-*-*-CHUNK-SRI-HASH-hjhOMvM6fEgIlSwRlWZVMBlJw0044= sha384-XlUYP6ByTPPdT+75QqP5qB1G8sOllE8KIZZDrpqbFf5Sl40J/icnWaVWVfVg6wbu\",\"2111\":\"*-*-*-CHUNK-SRI-HASH-KQw0BOqE4kn8/hbha+UUN9LkJuYfU= sha384-OheYNa0xQgHRK+TTxZC+Sme/n3TvPY4hf7nDKVU/nUFeFtZZfhjE9TU6DQqVEwGR\",\"2118\":\"*-*-*-CHUNK-SRI-HASH-7CpbW14vL8WTcKfbEVDTcSXSTaH0E= sha384-ahxYtaHc+vWXVaJm5VTqYyUaBzMQBMgSkH4bKxRu1egVVqBnufPB0vb/vCV9lcSh\",\"2124\":\"*-*-*-CHUNK-SRI-HASH-GJkMB95sE0HItze309UCofpa/Biho= sha384-ukURhuObcV+QrzkDXiMQ6khlaTqeF/oIYwQvZ1Ws3S6k7XmNXC/pG8aPhSeOIfVr\",\"2157\":\"*-*-*-CHUNK-SRI-HASH-Wx1iCBJ8Ll1wx+S2AuvQTnBk1hl40= sha384-I6hf1CITzeOw4fh5VNEGq76UrkJEgXGYB6cqMj4JTCDwDe/N+BChYKQcSJRSvcPc\",\"2198\":\"*-*-*-CHUNK-SRI-HASH-tFcld+KUabLgafDb8aZ7ZrpsZYiY8= sha384-LnalTRSLeWBUXQyQvLircS4MyQswKHJ9yYY1iszHNxgdlQDXgr+UtHt9QPHkxObC\",\"2347\":\"*-*-*-CHUNK-SRI-HASH-yrmZ2gU0vxy1xPtE8WbuIS842S/1c= sha384-7YWo+kI5MeDEXF9Dw30RfyZ2Vq3m/zfrx8Z9YkanxCpmsKrs8+IEcFgUzTxb0awm\",\"2357\":\"*-*-*-CHUNK-SRI-HASH-yK8AVcZpaoZEUfjawmCS6O3HXAb4s= sha384-sQzu+TyBUuCX99VObl1fCeOFhg4EvZcBzrGGMtGbomDnNDzWxuDu/h/HzmzNrEqT\",\"2398\":\"*-*-*-CHUNK-SRI-HASH-RTGDV0Agtv0WLTxL4VbO0K4+gT5Uc= sha384-eGdWs78LHu/6mH0rG05FfYgNqbJMi45M7Lg4EC8htw/49VqmbVaZIr0YoWgMMFTZ\",\"2402\":\"*-*-*-CHUNK-SRI-HASH-cBOCk/2E+DdkwQ7S1kma/6dZPzivE= sha384-SCFMOxV3wvc55DVsLLSGTqbjWVKofFRZCct1hglh87npMjfaAlvOMaL1fsj+wDKQ\",\"2429\":\"*-*-*-CHUNK-SRI-HASH-4xi47m02XY5Zw3a1V2VMdVunXaCR4= sha384-Wveyo7s6D6Y+HpgRrvPfjrEUZOauFQ1VOaRI6HmDL8UhPCRSLQhrZ6Wuzc476Ggs\",\"2481\":\"*-*-*-CHUNK-SRI-HASH-Lo6gk6zqY2hQAjc7OH0hlN8zn3x3s= sha384-wFNFWeMjMcPtp74CMAnws4TWyCwi1xJ2GQconm+iNUysdmZsGY7o3B5mgveW7V9H\",\"2550\":\"*-*-*-CHUNK-SRI-HASH-d2bS9+ytbxY29aczK0szUtFMtgBaU= sha384-j+dBje9Y2PN8cn+AmBcRkTZsk87EVuv8Ojl6D8Vnz7A7uOPPKb03VrSjOZvxCd8x\",\"2623\":\"*-*-*-CHUNK-SRI-HASH-OGLgPVbERk6VF0HWxod5jmPofAOAE= sha384-1rgwD26Yk/q7XpZ1zaZinBuI18FPzUGHYDSS2QxjC1SU/9uGPEpozYE3s5y7osW5\",\"2843\":\"*-*-*-CHUNK-SRI-HASH-LJODDHPt3o2AWu1+lGNUVvPB23Mhs= sha384-X5MXzysyHtK56SHfYzeOoSpQu0X0At0LtyykJkeAFQYQ7DruYokb3gB589ym2X84\",\"2848\":\"*-*-*-CHUNK-SRI-HASH-h93OwBV6ilflhOcwpyqYdiB8A+p4o= sha384-ICAiOMftm9zh/qIYVIlI+IolPJGZ7uSo1JXqiQaYUtGpMUFhYMNHUS8Kp6S6/irN\",\"3042\":\"*-*-*-CHUNK-SRI-HASH-20TrqUp1w4KvWHRqnKUosMMSOyWnw= sha384-pgYSYxYurj1Cx2MlqwO9Le70TQVhjtchai0w1tTika2Gcqyapa/bl4MrAGvRu2Jd\",\"3083\":\"*-*-*-CHUNK-SRI-HASH-4+7yHGCoOO4eol6q3SJWTWqi8RVhY= sha384-NvETbKye1wosSy1j+O+/3p9IMxvkbIrKg9TEvi+IWMUNqCKZsXmrAnJocKvDYdhc\",\"3171\":\"*-*-*-CHUNK-SRI-HASH-12bhm2SbSsvATDyTx9Ipr9hyaxPqc= sha384-Ptx5Z7EI7WjFbUClR0JlUbEmPAqWr3fne4eQ/aPiMM6tRXTAouIOxEQ+Ll2HarBl\",\"3217\":\"*-*-*-CHUNK-SRI-HASH-JfGJHjeq2y3LEypMK100ZEaYipmNY= sha384-EH/j8PDQ3+pdXjups/4d80hoWIG/jSDRhoSgnFfmHC70LCeHBk3kG+V0goGiFn65\",\"3320\":\"*-*-*-CHUNK-SRI-HASH-7BWXw2HUmwZKnE09YMapTMpjhRRDU= sha384-iLCxTcY9GsZWZkhy0nb9WxZ83/IQtsWFtx4gr7wwq33+yj8KStr/uc3NQxTHymIY\",\"3373\":\"*-*-*-CHUNK-SRI-HASH-pm8djJwzWEvUcbF79APph76h/Y7QQ= sha384-7tk6gRSBsppcgH+Z193uKg1SeD+uCLkszd41YAxRWlDqfxOxa5U0kXmGIDyTWmpJ\",\"3464\":\"*-*-*-CHUNK-SRI-HASH-FfHnOL06tKBhgAZGIYwb6U9wvJzSY= sha384-2YzQxpzIHM1GCZQfBsENpw96BsO3XBMvuJDIfo/AiZhAkRivG4ee47dA5zI1m3j/\",\"3491\":\"*-*-*-CHUNK-SRI-HASH-nnkIm/CQkdyr7P5Gp5bHMui3N9pXE= sha384-0L2lNtpgu9Atomwl7i1E+kiOXApLFeq2CDhDzfL+FD41BVz2xiZ5xSbtKjXCvuDS\",\"3494\":\"*-*-*-CHUNK-SRI-HASH-3VuTA4vUTY1sOSJy12LybMlFQ1hfU= sha384-mFetdPCHWyIHUa/zCdxaJxyywK90b9H7OtVyMGGn1z3DYcyjdmEU2/8y6cDamoOw\",\"3557\":\"*-*-*-CHUNK-SRI-HASH-RudwFKyHYH2KKWJu/0dGeOHcNiPyY= sha384-vxSqFBMz0jA9OD1V/3oL9w7ARr3P5MmBF7msaQQznZ2GZAfnQC522hXrkcIr4UkX\",\"3568\":\"*-*-*-CHUNK-SRI-HASH-VNgnHNxm+NM9x0xeIQ3uXgwB4pOKA= sha384-uPLz2YrWJkIGfZRYhGor5lCf6z6dH5AjBuDDY7nMiBmOHCPDEewPb7vsoMzozTbv\",\"3575\":\"*-*-*-CHUNK-SRI-HASH-E5vvu+mnmfxqLjpmYfugbB33OmvUM= sha384-4h7fcL6/67tz/mVkTT+zNx1/95olxCA1uKl11qKvtYvff4/25tYGC/WIQpMF8GDj\",\"3620\":\"*-*-*-CHUNK-SRI-HASH-WyH1CE8Ryf06knD19PYeBwT4bqzHo= sha384-K1V5moYISMpMETtKG8nnlVGzijq7rL9a3cPfMYq4U9lTVGgtzoJTSqgOqeOQGtjU\",\"3629\":\"*-*-*-CHUNK-SRI-HASH-JRq/j0t3DNinXFIqwh9ipfW+WzG7E= sha384-e4uNOvPNeYBYhqBCrXwRFjGDbC2zZk5ze5zDMp95aMYoknq4Pb6ta0pxCZENjtXi\",\"3660\":\"*-*-*-CHUNK-SRI-HASH-NtdJ97y/PjAefslUPg7MjRpg/WQaE= sha384-f1FMGnmEKtuEG6IxDMSdD0AYmI4IB/p9TOY3JXeHyp3wP+aOvfd+piyBW8uPoOUJ\",\"3670\":\"*-*-*-CHUNK-SRI-HASH-6ZiGNu+WLRYQ7RoF6z3lhZlVgwG7Y= sha384-M0ut6xkwOxKLDuN48wAaeBKfcNzznA0IgRBuj5jvjaVh/vmNPmiqiLT4rXwBOHg4\",\"3707\":\"*-*-*-CHUNK-SRI-HASH-G6eDnlSwTLiilN8rf11x4CrTiOOcg= sha384-Ra+R+fkY4c2UCCCA0TjEjlednec1cr3ALbdEPcbsrmr/4WTWVzb4gs6COjVXMSIc\",\"3783\":\"*-*-*-CHUNK-SRI-HASH-/jNSiti7jThVnHF01RAAd5QGKL8lo= sha384-28vBzi5blnovdK9FijnErntKed8VaoOdwP9qSVD2ntBL/LLXzi7iFvswR+zlcUkE\",\"3920\":\"*-*-*-CHUNK-SRI-HASH-b1NdsXQRtiw9WeGCrocStaZzOqwOQ= sha384-ZhAAK06/l/2Tm+G4+i//L45yAEOuS/3YiXic2Q7hSV6WoqSqhuYlO8JyU6nMhJ6Y\",\"3979\":\"*-*-*-CHUNK-SRI-HASH-EarkMngwSzxMg675KbP527w1nFnso= sha384-mZkJ88zFrZt+H0x/OkOOJJLp//4Lxfukos+UOX/0UZF96B0CIHvFdPgJz3/pzpS7\",\"4060\":\"*-*-*-CHUNK-SRI-HASH-k9x7SpCHWlkHwp97cloKIR9BveOdI= sha384-29s0KknHM8huT6AvdJwYxz9c8t+BKagSvjt01rYuaHyfDBue9q9M8unqr8U1vSTh\",\"4152\":\"*-*-*-CHUNK-SRI-HASH-U1673PzqmMyUsiVbRCmYofC8CZ4Vk= sha384-yUQWUUFrBFv2B4XBRg6grhUYTx6vZ6ZWlOTMuzGlETDAMWWTU7hRTzEGBuevCBdV\",\"4188\":\"*-*-*-CHUNK-SRI-HASH-TA4c6fRr27A39MLmh5sUE8h9tY4kE= sha384-cZSj+DqILtxYclFPdHjRGKjrMKbSS5xr+OQWD9D9bEgC1CnEdmM/o9AJO4n74FtO\",\"4335\":\"*-*-*-CHUNK-SRI-HASH-mUMVSxI8DsR8gcnd4cCagOZiM8qGE= sha384-li31wbOkRJIUjQ3zNCwDDHi3T1fM7GEqw8k0t0BxsVcCxs1MDlYRJCoRgt0FCqDp\",\"4410\":\"*-*-*-CHUNK-SRI-HASH-ldg783JY6C7MpcDa6kq+IMZ6eO27E= sha384-SUSLBV5d1qoQni2LtUdNmwTAdFvzt+R3RA9O6giNf6WFBlDxlXVCzzhvHCnWWfKp\",\"4417\":\"*-*-*-CHUNK-SRI-HASH-Y9/l7rEU9bIN8LOfW29HP2QTYivfY= sha384-2sapchw3dFbZKgIfEKycOEOJPM4+jjqo+NqaLczUPOetg52z2JFRI/NPMDVoMTLF\",\"4431\":\"*-*-*-CHUNK-SRI-HASH-XoPt2zCAxnYuNFHk2PH9QNnxjImsk= sha384-C9/Amo/TwIo9Q9beVawOk3bUCXSsv+NbGubUNzFGpANWWcO/emMAwYZDTL9xNOw6\",\"4528\":\"*-*-*-CHUNK-SRI-HASH-MG2tMjtLpQelMiHf2NUbACENbn/9c= sha384-JjEJBt5YxnX+ykCqEYiQpPaYVLH/rDshXtFtWhAIElyIL1WvYM+UUmwcijUGgoRh\",\"4625\":\"*-*-*-CHUNK-SRI-HASH-K1mwLfSUkghn8atyOEBg7qb/6S1GY= sha384-yShkgp244lZwZyqCVNwJRfbPNtDUaS3ryhi4utWQ3ok23nbcvcEmctQ7t9p0gPzO\",\"4742\":\"*-*-*-CHUNK-SRI-HASH-qlUHzPu5+72z5TPqHltdbAtZUttYU= sha384-m8N9ms29AbrR5hZHGz4k/BttFmgd1ycInn/PVAJIlc4CMF1eoGzIpyC7ZiJkdakk\",\"4814\":\"*-*-*-CHUNK-SRI-HASH-MJZ8OXfjip+n5vHIaZ8gFXgOxxMoY= sha384-ZsbQX6VTAUXnreMVRJ9kiFkHYJEkCPjQBYamPzfnSZMIKP+k3rB+RORopoG/W8M3\",\"4850\":\"*-*-*-CHUNK-SRI-HASH-O4qWLWzaN7GR8d6pJwDPHNf1Bk9CQ= sha384-eOdKXOZ+IUXXva4r3s38NwTFLjSToT5Vw0eBSmN6L3dh2eHILN9vR8iaK3eyQqUy\",\"4979\":\"*-*-*-CHUNK-SRI-HASH-ZS3WOSiDiz0jPC1Wkwv96iiQPm/Y8= sha384-oswcSoSdH0MZ37FfelEVX8tgvMWEVs9eiSiHUnNceA7g+m9wBxr+5Zjh6ibfMURc\",\"5065\":\"*-*-*-CHUNK-SRI-HASH-R0TokQxFpdUrzqYbvIsgh4SgBRshQ= sha384-pzbWlT0rocH8uF6kK8nR2B7zrhVGABYLNpFdsKhbo/8QhmgQIKOe43juoDS247hl\",\"5073\":\"*-*-*-CHUNK-SRI-HASH-JjyVxo5UBpX7ErI9ifAOkeC83s4/A= sha384-d6XKyBh8Ax4pS35RPCdwHR6wf/+U1KK6CHpKzQ9ZkQf+iLaTu3oLhBXKk9krkJ8Z\",\"5129\":\"*-*-*-CHUNK-SRI-HASH-Y/Y9zR++xvKQKpNSmHMds/nIrrOrc= sha384-pQfORmKKZBdz3XRtDF5J7P4x5/bX9Q5DZ8YYgIfDtUUS1kb5d70WqhPebVozTtem\",\"5251\":\"*-*-*-CHUNK-SRI-HASH-aI3k7bl6KajbKddBue9v0LpXvT7iQ= sha384-OsiSYRSRGce6b7bmPhNINLBNd+kuUP9ywX0fvcLdDsepMM7txSCk9lG8slnCRdzM\",\"5321\":\"*-*-*-CHUNK-SRI-HASH-kEm4qqsGy+dQ46vVzC6URwl970Hhw= sha384-36LF0F1ZiLpvybN+FAz40BTHBpWMZOTDEJDm6Px40+ASpCcWMU9zObj0WG5DayW4\",\"5377\":\"*-*-*-CHUNK-SRI-HASH-UQHIYJ1QHrrMZ3avkr7XNhXkewtks= sha384-8zf8etZUB7tvN0jI+LiEOoZIQDpFuS0SXQm34NN6y4/0wMuAmhvhLDbxEHvI2qxy\",\"5405\":\"*-*-*-CHUNK-SRI-HASH-3bq+7wD6T8MPexZQG0RsNXNvwuIS4= sha384-9tdVq5VVoalskWLA6RAvYJUp6BA3mlnEKFbn0AVLAdSqwreMJi+Dn1XI3N3D8kGt\",\"5494\":\"*-*-*-CHUNK-SRI-HASH-sKl9STmj0ySFyVTN/C0yfLhUE5YAE= sha384-0TzIDO6W7WON9QxkTRjpx7UJSO/AxslCmUjRDuGpo3tdB3DVwu3/ETOhA4Y7aTnW\",\"5512\":\"*-*-*-CHUNK-SRI-HASH-74ExtAZ1wyvpWfYrJS12K2U25Az6s= sha384-DZBKOEnLYdK5zdvCkkBAXEQ+Nvs6QIriPQPKf7xRG4uj+NhQY1GkS3V11kM0TYRI\",\"5680\":\"*-*-*-CHUNK-SRI-HASH-dhIu2PQzTwxmvdS7g2c2wtL2tZU4Y= sha384-jhog30Nd+8/8hn8xFDkadam1VBs6FwTCbeHaS0M6N6xgo1sAPcl3uJV2sLJQc14Z\",\"5754\":\"*-*-*-CHUNK-SRI-HASH-NM74pd6UdcZ7/l159a5A1oNWRdPTY= sha384-BmFTegEEztRZJ2bnH94mBN74oRAm5QjHePbm7l+zah5EYae8v39B3aAbuBVBUSt7\",\"5913\":\"*-*-*-CHUNK-SRI-HASH-9KepxuEU7Gl9u1oEac2RL0Id7xwro= sha384-FvLODpEQDi0a7ZktzqcKTHjm7dVVZ/6JB61Q/Eu4GXt02EaAIXFKSuNj18YVI9hc\",\"6000\":\"*-*-*-CHUNK-SRI-HASH-RhsvI4aO7U64IaDDUD2Mhi2Uq40us= sha384-YI/o5Z+nrVwtUzCGLI2aDed1ATy5DCI0Sv4sGgLh9UBQjP8Kw49tmMruz4N296E+\",\"6073\":\"*-*-*-CHUNK-SRI-HASH-7O9d/FcUmAsdlYdNU6w1vGR0DZwj0= sha384-jxVId+zDuCgN/F+933mmDKrTJNEpym7V5/J6f1TkUsghsQYJOgLmL9NGlU1i5mUG\",\"6075\":\"*-*-*-CHUNK-SRI-HASH-QVDce2puV2BIObjStTeAwVlPHECjE= sha384-MYlsdZAMUuuk0zQk2n/YY7ITBInAG0blqSRNyt0MJ2ZXrO2lO0/s4xLcBlJM6dP1\",\"6085\":\"*-*-*-CHUNK-SRI-HASH-aIxM6QQ09pEIJZdHDmTOmkUzbwcsI= sha384-8wLJStOFTwKNQjDti4LNpv0F+Lg/aaLaRfHIMrWHBqqXzfZIeu/pTVph0nEU3hiH\",\"6108\":\"*-*-*-CHUNK-SRI-HASH-m1fi+Kw7b901QIzqNrkQjh/FGbGH4= sha384-SFNKqcTuI4EcIlhAoZN0r2eHYH1nEdUASkkG6hT6qULV9CCkHGVxyukMbqYlxDFK\",\"6111\":\"*-*-*-CHUNK-SRI-HASH-qnOj2Y9gAlsonnd3GAzCVCLkOBD4w= sha384-hVKb+FsFqXToX54BujcGsTerpfjZkRnnbPvIFuOTjQDsrD7qq/l8uBYXyQejcNeF\",\"6147\":\"*-*-*-CHUNK-SRI-HASH-cB/OqEpqAbT0EzbyA6/i/eI40UXoA= sha384-jxqqsfcPItNPJ35WfsMGLH7Y4xSWQPwlS4TpjrG43zPwJQkujq1AGQK0+DcOf4OK\",\"6178\":\"*-*-*-CHUNK-SRI-HASH-3c7UxSvmF94bKXo1QptOmy7Rz+iF8= sha384-7h5w2c3JQquDNw6r8al6y6qYTNjJSVuUan8Ay2ZAklJsteOUHWOOyJX2vLcDBNT3\",\"6237\":\"*-*-*-CHUNK-SRI-HASH-v9Ono1ZJ5Irn7y28VuCVD2rMwVFqM= sha384-EfS99Pv2lTDT/ah+Gr5qMkTpOj6pCxVfxy0dc/HigBnOxVikV+aMx8YAncRK6CdZ\",\"6249\":\"*-*-*-CHUNK-SRI-HASH-Hou+Kij0tL8fbKA8u7ATRiW8Be9eY= sha384-5n8EsTJ3+wKuVte8yLJm/QR1oP3syOPl/ROVI/3jR2F0bA8xeg0fZQlRNMAxyS+d\",\"6303\":\"*-*-*-CHUNK-SRI-HASH-WrBKIRnR0cai4mt/tdlcxwMvkXCFk= sha384-4i6b5rI2M8reMOw88oVIYs9L3nJKj3oUiX0iETrpLvtbpWehqMkXyJzWN7btlLV3\",\"6442\":\"*-*-*-CHUNK-SRI-HASH-lYQtb2rZ3JsrqW6ShLSz9eac57OI4= sha384-Z5rcpcY5X1XqVBv17bT9BNzB6MJq9+SKcPBKAFuTStxeD3VpAb+ofOUGjCk+0WVv\",\"6741\":\"*-*-*-CHUNK-SRI-HASH-akEfMNPhQ8KASaMiOvtGUfrXrzvag= sha384-rT6bdh1SpncZFdFV8wmpDoLhk8qGiDd0/1mefnMqo/Yk3Q804QjlNdyVExURSTWM\",\"6781\":\"*-*-*-CHUNK-SRI-HASH-4KOJRPqcLf2k+ApXAnkJTM1F7oPPs= sha384-dAR0JxM4j9qNKax8i28J4q2ZGA/WCiBSha9yZEldR3Ky3IAkWAkk/gDCyV5G32pX\",\"6864\":\"*-*-*-CHUNK-SRI-HASH-m67XfZFbuO4+z8oRsyzgWK5K/0lxk= sha384-ahQrBJAvvGdf6pZPdG05XwY8i/zuHuTjaPjYyDf8OQpb9TzWLA86UEX4BvH3b6gj\",\"6942\":\"*-*-*-CHUNK-SRI-HASH-dIzS39KQ1s7uULrejMUBfAwVCC+0A= sha384-W4ThR6VC2Ff/4GrKPPthXtQGyqslujC6qWxXN0+PFfbivmVZRV2LIxocGmonWQGj\",\"6989\":\"*-*-*-CHUNK-SRI-HASH-3f+zkefTP3FhzFCs8D6XXpWvzfBKk= sha384-6VxE6UYuE0p6z3uAculxeLqK1bqxtK7rOU1UDeOWn/kuZBW6/rkrW2ch+gCReCS1\",\"7005\":\"*-*-*-CHUNK-SRI-HASH-ogy9hhkI7O/VmweA0FsXnjWHPxVcY= sha384-fewZTUk8MihAnMyP0uxdGZlocRahMBc8W1BG0BoNgBe4r+9oK+pcU1zi0uT9+On0\",\"7070\":\"*-*-*-CHUNK-SRI-HASH-Fgq3w6RJyvDd5DMETLMfhAGHxGOVc= sha384-Mld/6gHTDIX5znqpJKa0yU5sFPdGxa1gazGw8DyibgtDHycd1BWN7trooMgvYgjR\",\"7119\":\"*-*-*-CHUNK-SRI-HASH-Fw8ZCr6cvyVuGmN/dBorH3mq9AtWQ= sha384-SdLJG4mumCT9mpZtleM8nHQNv30q7OKvrTji3RSPo60KSUdKeR2KhPCnekcCr33q\",\"7179\":\"*-*-*-CHUNK-SRI-HASH-PS3KeRkf9ZVwNTitAfTAedfLXFoaw= sha384-OG/KZuI8w7knaTkjXIyZ6P+I7EIUwhVMkT5yvGXOQvzPnykzHBIYQFPch9lqGxr8\",\"7295\":\"*-*-*-CHUNK-SRI-HASH-Da3C1XUTiKElahL3feCe2dv4wpqN0= sha384-CxgfwzRnChHA/uIldOWfQxF2006JlktqxDV0zl07wZ+EgwNqG0mtANzv65s3ToYO\",\"7323\":\"*-*-*-CHUNK-SRI-HASH-Qo8guutap1rWdvQ6EcfxZer0n2Pso= sha384-7bosBxkXWSpGETx/jFSsx6CF7+pCSZ2ZM5N9VkqHPAPk3fnJ/1pIR+38axGQ4ZGp\",\"7353\":\"*-*-*-CHUNK-SRI-HASH-Grj51+9y+30BUN2PZBErMoXPJYpAg= sha384-BAahXrqBviw9T4CGtwwEZrmxzmMEcyGGaRfSW1CkQeXBn+M7dtxg2qc3LsCctzu8\",\"7365\":\"*-*-*-CHUNK-SRI-HASH-U76pOY+qEPuunQdvTAWCCkqKjZ9Vo= sha384-w8NRyHEl/ywPwvf4ZFqaM+TBw34RKhGyBjlM5PubxMzEMcNDZbJ6XcUSwxTlNXeX\",\"7410\":\"*-*-*-CHUNK-SRI-HASH-CS0rQ2umBTT113C+0tdZNsV1Bqves= sha384-GR6j4WtDrRznd2OpSsbFtEKKICJqd0iaGbOOFYvegsKhMx8x/fchzUFLYCBDhwye\",\"7484\":\"*-*-*-CHUNK-SRI-HASH-p4oxx7P4OEB3CN9DOFcvaBJrMJrfY= sha384-46UAhEZk7iUesdAYBkUFO19r3qlRksWNWrR2QyItMCLyMswEIC4agib3qw7YNgbs\",\"7595\":\"*-*-*-CHUNK-SRI-HASH-/mdmY/kpmuV06NA4f0zFB4E4V2uYI= sha384-mh8uW6Ti3L8LINBovui6lV/KBepRhM2MVT0Fk6kuriHG8MM5qBqGmH3IhsWK0KXJ\",\"7624\":\"*-*-*-CHUNK-SRI-HASH-Kxs6YRqsuCzjbhnYNLx7/cP3p3RZY= sha384-YoBtFkzezQ8Ed7ryWWfnNwNEVh7nJmN63nTXsOBI6kMKYo8y/g/lc/mReZ0PCaa6\",\"7720\":\"*-*-*-CHUNK-SRI-HASH-teOZgo2eR16oLMf+VbTrPS4p2XRQ8= sha384-p20pNYJQYpgHXqOUDiwuxV9Ge4nrzVAhKu1Ddn0WncSDB44I+QPG2cafZNx1SVqQ\",\"7795\":\"*-*-*-CHUNK-SRI-HASH-Go0olc/6FeUZoUZ34f2UxRM5RW1Iw= sha384-lN3imSAVfUhqI90+yYHJ1Ra5sWlKC9QcDxoMo5P05cAMn9rxrksUP9e3lcX+cXkS\",\"8094\":\"*-*-*-CHUNK-SRI-HASH-EygYNvHGLDgg3syF7Rebn+4IUdyYU= sha384-jwj8okZtS+fLEmu6xgpIc11KODCYtPnR1ob+BySYjP9PKNePdtY0mE48pSOy7KGX\",\"8171\":\"*-*-*-CHUNK-SRI-HASH-yn03348Ns+VxmNqPK3mY98nvNKK5A= sha384-Ey4J2eqlrFtE47PpR1ggbkiRWrZZUV7Cfd7C2cNJzqMRYDlzPqKpboZyrLNGqx5l\",\"8234\":\"*-*-*-CHUNK-SRI-HASH-EieQdfmkOyCQ6BpRk7P0VtOEUtKkY= sha384-FX2Ca8u3pTJqRo+whmpB3s9wFu+vocifp//hZ56IQSpxgwb7ml0BdYOQ7EDeixil\",\"8359\":\"*-*-*-CHUNK-SRI-HASH-FMrTC1Q/ZXNafQ+LG0AOpImf8mUkI= sha384-v6Id7fgwcZyXw3hrqBT4+/8B+AOTnMvJA2mrFvV07L1A5aePJNv6307T7vV1pr8o\",\"8370\":\"*-*-*-CHUNK-SRI-HASH-vnB7rrVn3PA8hoTycX0yWEcn+zTM4= sha384-Jj3oVmZjlkS/ld3nYyGioIr23c00Nq5GNRIC8s91moMVqrjK39ToFeN/eWZzTVfl\",\"8393\":\"*-*-*-CHUNK-SRI-HASH-RY1K56J4Nj6j61eb35khTLKfNev2s= sha384-kRBhvmBl3r9z0/tGQkykebxTpTXTBYRK2NdRv1AQ+hlg7cWgNRjCsy1PcqcNVA3c\",\"8427\":\"*-*-*-CHUNK-SRI-HASH-0G4bG3fdvC7feB2ftL/igNCx2T1n4= sha384-H1Dq+A9CECBjNPnPMmg1WuYaAsmVrm8kYyYaYP+URLf4Wx3qw9Km1FtBK3ilrvqr\",\"8481\":\"*-*-*-CHUNK-SRI-HASH-eXQ5ylf6SrJJYFTHaM5fOBfJQQyGU= sha384-wxr0iU1JH+yqiCl0DilzwayvsdUFbz2AuqV3VPmfilpZHnuUQgnkhYfD9vvWapoC\",\"8578\":\"*-*-*-CHUNK-SRI-HASH-vbiFaA5geTTKelmm8TwNllYPJdBac= sha384-jyb12BynnWEaJMGH6JFNP8za5NH6DwbjfYgp0yV2jUQ0Zts9688cc/65vxf5dnPj\",\"8672\":\"*-*-*-CHUNK-SRI-HASH-nXlamfhUwwufY7t33sidUXHL878xo= sha384-QFTokfnuZWgm680VjU6X1iWwtFjBUdjw7Iry8s+UPZiEJVWEEcLyBVnF/AtrCjY+\",\"8702\":\"*-*-*-CHUNK-SRI-HASH-eH8hJQu6f5OSxAvWnwOfj/bic6B7A= sha384-sD4UnibqrG0DUDueePJ2d/xs6YC+xCLFs+Mq6rgATDsgGp0eGBGOzJZgy3rRAN2J\",\"8847\":\"*-*-*-CHUNK-SRI-HASH-1feDLBRHwgqI/ZUtwxQ24a9l9xYzk= sha384-XG1xF5QD6clZkdFZhJmz1KADTHWFAvY2CxBnUWTIKus25qJqZQwVoPce9TJPgpfN\",\"8864\":\"*-*-*-CHUNK-SRI-HASH-O/Ww7Wszu+k9E6nszZd6J0XtcqYcQ= sha384-94hYbothTqA97sMG5zUSTx3i+eFWVgOSKwidcE8aQ5JFlHbZys3Hw3JBLtQCjj8c\",\"8871\":\"*-*-*-CHUNK-SRI-HASH-NVBzwozbBNMxF7KuG6ZeoSDkmwpSg= sha384-NgEFnKM45tBEFao6Pgr5HAENRLAp41T1xURib49t+omgU9gU1jL+bKFTubAtkeok\",\"8956\":\"*-*-*-CHUNK-SRI-HASH-lEzTf84MlRb6LGYqoDMLSrB59SDys= sha384-SQUQLeQ+XZ3yVzIxjAiLDe4j8zs25/LQKqBqKji6AgEv7s8HYG5GWxZpkaJpbEmk\",\"9017\":\"*-*-*-CHUNK-SRI-HASH-kcrn8BqSBF7QU5eG3tnH2VC0yEND8= sha384-J1pn4nVfgvFWoHf0IF1Oj3HjX4Iof4axwFdSNmpIdMzAByGSSjW2akZWgvsG0UET\",\"9081\":\"*-*-*-CHUNK-SRI-HASH-D8X/3TPjrfj0j4rYJfCXMsKtipccQ= sha384-OvPIMC42NASUL4VBhdfLhQAGJjFd5nlnw8Aa1q8lYBNY+9AhalLlg9jOjhfhHeou\",\"9245\":\"*-*-*-CHUNK-SRI-HASH-NAVzVasQ09MHS5K7tySBWFnZNAJAY= sha384-zOsYDWbO4K1jYcVJuJ+vCbdK4C0HBVwFbJncTNHWYhISbM8NvrANx4vZpiJ4l4MR\",\"9259\":\"*-*-*-CHUNK-SRI-HASH-nKpyJYve57t2Z+6szhtq/Gt8k4svI= sha384-D8uBI4CpweToxRUkPnEYjmNjz5DNwvLxSqvS1lAsed6TzRFHky5R4dQdOMkLPklL\",\"9273\":\"*-*-*-CHUNK-SRI-HASH-1y3FGzuf7h3UeP9oQ1ONvR0+w/8uo= sha384-jbiAYNwBFXWhoFFHIviP9EungJJ1l1C03Au1ha0AopElLuKV4Zyq/Kp1mKL+/G/0\",\"9277\":\"*-*-*-CHUNK-SRI-HASH-UX4mEWLD5cFwPsiT1DDOgs+xMSLS0= sha384-kcoGpkMuUsG5Nq2ncTMqdvnGYWxzZpdlQEktESYkbwnLfnG4FMI08zK3NGgH4bTZ\",\"9279\":\"*-*-*-CHUNK-SRI-HASH-ygrQGmml/4caNPOnqmMD0nGz8WqFk= sha384-9UtiT7egUKWknuK1n5u3yBAGp/KSFdC41/5k/03GpZfjqEq/XhNYYkkRAYG6/utY\",\"9284\":\"*-*-*-CHUNK-SRI-HASH-5vugl0qochHa69WaXl8us69MG41gw= sha384-8R1GZuNQtRT34H8lXYenTGEQvfTZPFyJ7bfgGRvqPlVr6OxEBLrqIx4f1whHDcrr\",\"9290\":\"*-*-*-CHUNK-SRI-HASH-oyU7t/7DvpAiUsiP/XotOM3sbHjD0= sha384-CleSlVUbpHtcofeEnalZOH8ujBC6ZUQYlx+DDgaWsQbnqKWGaWGo86miELKMWMG9\",\"9331\":\"*-*-*-CHUNK-SRI-HASH-IfGFze7WUccNwjkLoA6TqSXGFp9fU= sha384-HJxb4D/5mxFWedQo+6IaStlSuwrf8jj5YQJeEetvY6dhNqCcBsk7lQKsUNqpPgqd\",\"9449\":\"*-*-*-CHUNK-SRI-HASH-YWD8EkkM2RX+E5DO5ojw39t9EvMa4= sha384-BKfGLfsC+Km9TX9D0BdXg65w6uDpLPU4H3lzPnS/7qZMN6i1uio1SAZVKQW9gRaE\",\"9625\":\"*-*-*-CHUNK-SRI-HASH-EfFA02YRCL03JKz+PSyaBYDr7HCb4= sha384-2jbo+X3sWUsl11cOPkZnOcptHo6yMl9YdZ1gScUYW2h9EDNrnzbpQwhT1fpAherS\",\"9701\":\"*-*-*-CHUNK-SRI-HASH-/GN100p4oFb85tIQ9W3815quz076E= sha384-BldbosNSMzkM5Q9rwHUWAe/yKskm48N/P68bASTnwn2RXPc9rPYCxjDT5zKNhSDf\",\"9739\":\"*-*-*-CHUNK-SRI-HASH-IAhjd23abmVOkDr+lali8uV31a2xY= sha384-jp/KZGmNfbLA4vYV/c6nzryQcq87tNdkSR1fL7Vn0JRB8cM1ozi7kcZXJKoVhrpJ\",\"9793\":\"*-*-*-CHUNK-SRI-HASH-2v8WVS2mSf0PA6ZiNYW6LAwJ/f+vU= sha384-QzjA6KtS1KiDpdZFVerg2GX548AO3Enp+F8Sp+OSlbj1H89gcEEE0NoUN5XwzPAN\",\"9949\":\"*-*-*-CHUNK-SRI-HASH-IddwVDIcqsUzJEPhMydtcqcSVONgo= sha384-8lSGrGHVNaU/KuGwR7H63LAIPz0VMbTMSWTA0NExbqvANi7x6pL5T4GO5IXK6LnX\"};","if (typeof document === \"undefined\") return;\nvar createStylesheet = (chunkId, fullhref, oldTag, resolve, reject) => {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = (event) => {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\tif (linkTag.href.indexOf(window.location.origin + '/') !== 0) {\n\t\tlinkTag.crossOrigin = \"anonymous\";\n\t}\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = (href, fullhref) => {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = (chunkId) => {\n\treturn new Promise((resolve, reject) => {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t8792: 0\n};\n\n__webpack_require__.f.miniCss = (chunkId, promises) => {\n\tvar cssChunks = {\"1133\":1,\"3320\":1,\"3620\":1,\"3629\":1,\"4152\":1,\"4814\":1,\"5065\":1,\"5512\":1,\"6073\":1,\"7410\":1,\"8234\":1,\"8702\":1,\"8847\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(() => {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, (e) => {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t8792: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkschoolbench_front\"] = self[\"webpackChunkschoolbench_front\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [3096], () => (__webpack_require__(91010)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["aclAlbumCreate","aclUploadGallery","checkAcl","roles","acls","action","params","undefined","acl","filter","actions","some","acl_action","find","map","role","indexOf","outcome","getRole","names","permission","forEach","includes","acl_name","push","checkMultiCampus","config","getConfig","login","getLogin","isMultiCampus","multicampus","length","MultiCampus","multicampus_checker","AdminChecker","getMultiCampuslist","isAdmin","campus","items","Set","roleAdmin","canManageEvents","canViewGallery","canCreate","canDelete","canUpdate","canEditCuration","canDeleteCuration","canDownload","canDownloadCuration","canAlbumToGallery","canAlbumShare","canViewCuration","canCreateAlbum","canDeleteAlbum","canViewProperties","sbLogin","localStorage","getItem","JSON","parse","decrypt_storage_values","App","lazy","DefaultRoutes","_jsxs","Routes","children","_jsx","Route","exact","path","element","Navigate","replace","to","Welcome","Gallery","Events","AllEvents","Event","Profile","Studentslist","Albumpreview","Albums","Upload","Bin","Binempty","PortalPlusInfo","Administration","About","Logs","OnlineUsers","Reindex","SystemRess","VersionInfo","Consent","MediaConsent","Recognition","Renditions","SocialMedia","Watermark","Integration","Calendar","Ldap","Sis","Webdav","MobileApp","Mobilesettings","Portal","PortalLogo","PortalOrders","PortalPublish","PortalQuickPublish","PortalSSL","PortalSSO","PortalTerms","PortalWebshop","AccessSecurity","AccessLists","ImpersonateUser","RemoteAccess","SSL","SSO","Settings","Finishinstall","Logo","Systemregistration","Socket","PortalPlusPublish","PortalPlusRegistration","PortalPlusSSL","PortalPlusSSO","PortalPlusTerms","PortalPlusWebshop","PortalPlusIcon","PortalPlus","Collections","Collection","CreateCollection","IDCheckPending","IDCheckApproved","IDCheckRejected","Customise","StatsPortal","Webshop","AppRoutes","userRoles","aclConfig","isRoleAdmin","isCanCreate","isCanManageEvents","canAccessGallery","isCanDelete","isCanViewCuration","useMemo","isCanViewGallery","CurationRouteComponent","id","useParams","parseInt","normalRoutes","_Fragment","DeleteRoute","galleryprofilesRoute","uploadRoute","is_active","expired","adminRoutes","memoizedAdminRoutes","portalRoutes","communityRoutes","rolesPortalRoutes","portal_valid","RootComponent","configLoaded","setConfigLoaded","useState","initialized","setInitialized","token","setToken","setLogin","valid","setValid","useEffect","async","loadConfig","sbToken","initializeApp","document","URL","match","fetch","then","resp","json","check_login_bool","WebSocketSetup","loadTrashcan","LT","getPillar","getFacets","getAllFacets","initializeloading","isValidState","isTokenValid","isLoginValid","ReactDOM","getElementById","render","BrowserRouter","Suspense","fallback","className","MyAlbums","Curation","apiCall","url","method","arguments","body","hideToaster","headers","getToken","toaster","clear","response","stringify","responseBody","text","error","console","Message","type","showIcon","closable","message","getAlbumNodes","uaid","result","concat","removeFromAlbum","nodes","hide","duration","updateAlbum","album","name","getAlbumByNode","node","getMyAlbums","Array","isArray","_ref","parameters","continuity","M","K","initialState","acl_fields","view","sort","field","direction","query","facets","columns","filters","results_view","filter_rules","summary_views","result_views","colour_rules","social_media","facebook_filters","instagram_filters","media","allow_social","title","default_filter","path_strip","drop_folder","loaded","failed","suggested_searches","pipeline_names","has_watermark","enable_quick_parent","enable_community","enable_timeout","action_timeout","popup_timeout","Field_Info","fields","is_mandatory","is_multivalued","lookup","populateDefaultValues","populateFilterRules","Object","keys","key","mode","transformedRole","re","is_template","exec","Handlebars","matched_values","val","setItem","field_info","_objectSpread","loadInfo","updateConfig","new_config","getForm","res","encryptedInput","keyBytes","forge","decode64","slice","encryptedBytes","nonce","ciphertext","tag","decipher","createDecipher","additionalData","createBuffer","start","iv","tagLength","update","finish","Error","output","toString","DT","T","checkFacetList","facetToCheck","localStorageData","facet","DefaultFilterList","label","value","FilterNameChanges","ArchivedFilters","extendColumnsWithLabel","getView","column","option","saveViewType","view_type","parsedData","updatedLocalStorageDataString","getViewType","saveFilterValues","currentFilters","persisted_filters","loadFilterValues","getPersistedFilterValue","filterName","item","field_name","checkAvailableConsent","consent_to_check","available_consents","childNodes","childNode","retrieveToken","split","req","XMLHttpRequest","open","location","send","headerToken","getResponseHeader","createHeaders","submit_login","username","pass","password","Buffer","from","source","status","check_login","get","ok","window","reload","data","ticket","cookies","Cookies","expires","Date","now","encryptedExpires","encrypt_storage_values","set","secure","sameSite","storeLoginSession","login_detail","multicampusLength","x","defaultAdvanced","and","field_selected","op","advanced_query","Query","updateQuery","FACET_LIMIT","FacetData","AllFacetData","query_pattern","sanitiseQuery","String","getQueryFields","info","returnFields","result_view_fields","heading","sub_heading","first_row","second_row","reduce","a","b","join","suggest_field","convertToLucence","row","return_row","date_value","_unused","index","return_query","getType","_unused2","allowed_types_selector","select","boolean","date","number","field_type","constraints","list","filterToString","inverse","fieldList","submitSolrQuery","selectedRows","resolution","albumNodes","albumFilters","uploadedNodes","suggestions","toLowerCase","suggest","facet_counts","facet_fields","catch","updateSearchSuggestions","bin","MyBin","curation","doc","bin_and_curation","current_q","fl","encodeURIComponent","q","applied_filter_rules","filter_rule","rows","fields_info","query_facets","date_type_fields","facet_query_field","album_filter","facetOptions","facet_field","prefix","qf","limit","domain","excludeTags","new_q","y","selected","Check_login_ticket","docs","num_found","numFound","facet_resp","buckets","bucket","count","loadingFields","loadDocs","upload","filterQuery","qconfig","loaded_bin_and_curation","_config","_config2","facetResp","facet_queries","facet_query","splits","getProfileQuery","profileTypes","getImageCount","getBin","encryptedToken","getHeaders","contentType","charset","showMessage","cleanTrashcan","deleteNodes","loadDisplayTrashcan","updateTrashcan","trashItems","restoreTrashcan","payload","storeRef","protocol","identifier","failedItems","deleteNode","desc_limit","setsEqual","size","every","has","matches","value_match","input","regex","RegExp","expression","test","requires_match","getExpires","splice","current_login","saved_configs","getLoginValid","checkReindex","statusMessages","conditionMatches","create_mode","conditions","edit_mode","change_fields","required_fields","absent_fields","unmatched_values","getPathNodes","isActive","raw_paths","path_keys","cleanupPath","i","startsWith","chain","current_node","j","wanted_node","last_node","k","lastChain","secondaryLabel","isSelected","findIndex","new_node","icon","isExpanded","removeCaret","hasCaret","getAlbumUid","clearFilter","getNodes","addedNode","facet_response","entries","sorted_terms","is_list","child","childIndex","active_filter_rule","rule","label_value","tooltipAddToAlbum","Tooltip","Whisper","placement","trigger","speaker","Tag","color","readableName","labelExtra","getSrc","props","kind","solrVersion","cm_modified","preview_kinds","preview_kind","idx","src","token_encode","initVector","Securitykey","encrypt","crypto","require","AES","enc","Utf8","padding","pad","Pkcs7","CBC","decrypt","loadProfiles","profiles","othername","sb_profileName","sb_profileType","sb_otherNames","refresh_token","redirect_to_login","Check_login_ticket_admin","page","setTimeout","removeItem","remove","sessionStorage","theme","getAllNodes","payloadencrypt","inputBytes","getBytesSync","cipher","createCipher","getBytes","putBytes","putBuffer","encode64","pillars","loadPillar","t","checkEncryptions","do_encryption","testPillar","section","FormData","token_staff","newpayload","append","hostname","certificate","sso_type","krb_realm","krb_kdc","krb_keytab","oidc_metadata_url","oidc_client_id","oidc_secret","saml_metadata_url","saml_login_url","saml_cert","saml_uid_name","saml_group_name","testPillarEle","credentials","auth","secret","payment_gateway","private_key","paypal_gateway","testAclsEle","testtokenEle","savePillar","schoolbench","found_sbsms","header","msg","fail","mediaPillarHelper","pillar","new_pillar","admin_pwPillarHelper","portalPillarHelper","disclaimer","pricing","parseFloat","new_portalPillarHelper","mobilePillarHelper","FacenetPillarHelper","MediaPillarHelper","media_consent","checkbox_names","LdapPillarHelper","groupQuery","groupSearchBase","groupType","personQuery","personType","principal","ca","userIdAttributeName","userNameFormat","userSearchBase","user","icalPillarHelper","ical_url","has_terms","events","cal_event","start_date","start_time","end_date","end_time","SSLproxyPillarHelper","AclsPillarHelper","index2","SisPillarHelper","read_from_custom_yml","company_code_staff","app_code_staff","host_staff","area_code_staff","instance","include_inactive","include_staff","company_code","app_code","tenant","client_id","db","photo_folder","host","opt_type","csv","area_code","vpnPillarHelper","autoupdatesPillarHelper","tokenPillarHelper","OnlineuserHelper","returnEle","err","LegacyCheckIcon","LegacyCloseIcon","n","description","style","loadSubscription","loadPortalSubscription","DisplaytokenEle","not_valid","year","substring","month","day","email","loadMediaConsent","sb_parentPermissions","consent","getUpgrade","retry","obj","save","running","r","stdout","array","success","totalTime","statesRun","hasFail","trim","splitValues","failEle","Result","getSaveData","login_info","new_uri","loc","socket","WebSocket","onopen","e","onmessage","event","href","onclose","onerror","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","call","m","amdO","deferred","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","getter","__esModule","d","leafPrototypes","getProto","getPrototypeOf","this","ns","create","def","current","getOwnPropertyNames","definition","o","defineProperty","enumerable","f","chunkId","Promise","all","promises","u","miniCssF","g","globalThis","Function","prop","prototype","hasOwnProperty","inProgress","dataWebpackPrefix","l","done","script","needAttach","scripts","getElementsByTagName","s","getAttribute","createElement","timeout","nc","setAttribute","origin","crossOrigin","integrity","sriHashes","onScriptComplete","prev","onload","clearTimeout","doneFns","parentNode","removeChild","bind","target","head","appendChild","Symbol","toStringTag","nmd","paths","p","loadStylesheet","resolve","reject","fullhref","existingLinkTags","dataHref","rel","existingStyleTags","findStylesheet","oldTag","linkTag","errorType","realHref","code","request","insertBefore","nextSibling","createStylesheet","installedCssChunks","miniCss","installedChunks","installedChunkData","promise","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""}