{"version":3,"file":"main.js","mappings":";mMAAqBA,EAAAA,WACjB,0GAAc,SACVC,KAAKC,eAAiB,yBAEtBD,KAAKE,eAAiB,KACtBF,KAAKG,YAAc,KACnBH,KAAKI,aAAe,KACpBJ,KAAKK,eAAiB,KACtBL,KAAKM,WAAa,KAClBN,KAAKO,eAAiB,KACtBP,KAAKQ,OAAS,6CAGlB,WACIR,KAAKE,eAAiBO,SAASC,eAAe,kCAC9CV,KAAKG,YAAcM,SAASC,eAAe,2BAC3CV,KAAKI,aAAeK,SAASC,eAAe,kCAC5CV,KAAKK,eAAiBI,SAASC,eAAe,6BAC9CV,KAAKM,WAAaG,SAASC,eAAe,yBAC1CV,KAAKO,eAAiBE,SAASC,eAAe,4BAC9CV,KAAKQ,OAASC,SAASC,eAAe,8DAG1C,WACQV,KAAKE,gBAAkBF,KAAKG,aAAeH,KAAKI,cAAgBJ,KAAKK,gBAAkBL,KAAKM,YAAcN,KAAKO,iBAC/GP,KAAKW,cACLX,KAAKY,yCAIb,WACI,IAAMC,EAAOb,KAEba,EAAKT,aAAaU,iBAAiB,SAAS,SAAUC,GAAKF,EAAKD,gBAChEC,EAAKR,eAAeS,iBAAiB,UAAU,SAAUC,GAAKF,EAAKD,gBACnEC,EAAKP,WAAWQ,iBAAiB,UAAU,SAAUC,GAAKF,EAAKD,0CAGnE,WAA2B,IAAhBI,EAAgB,uDAAH,EACdH,EAAOb,KAEba,EAAKL,OAAOS,UAAUC,OAAO,QAE7BC,EAAEC,KAAK,CACHC,KAAM,MACNC,IAAKT,EAAKZ,eACVsB,SAAU,OACVC,KAAM,CACFC,cAAeZ,EAAKX,eAAewB,MACnCC,OAAQd,EAAKV,YAAYuB,MACzBE,SAAUf,EAAKR,eAAeqB,MAC9BG,KAAMhB,EAAKP,WAAWoB,MACtBI,KAAMd,KAEXe,MAAK,SAAUC,GACH,MAAPA,IACAnB,EAAKN,eAAe0B,UAAYD,EAAIE,UACpCf,EAAEN,EAAKN,gBAAgB4B,aACvBtB,EAAKuB,iBACyB,IAA1BvB,EAAKV,YAAYuB,OACjBW,OAAOC,UAAUC,KAAK,CAClBC,MAAO,iBACPC,MAAO5B,EAAKV,YAAYuB,YAIrCgB,QAAO,WACN7B,EAAKL,OAAOS,UAAU0B,IAAI,yCAIlC,WACI,IAAM9B,EAAOb,KAEGS,SAASmC,iBAAiB,qDAElCC,SAAQ,SAAUC,GACtBA,EAAOhC,iBAAiB,SAAS,SAAUC,GACvCF,EAAKD,WAAWkC,EAAOC,QAAQjB,wFA9E1B/B,6KCCAiD,EAAAA,WACjB,0GAAc,uDAMd,SAAUC,GACN,IAAIC,EAAS,GAAIC,EAAI1C,SAAS2C,OAAOC,MAAM,KAC3CJ,EAAI,IAAIK,OAAO,QAAUL,EAAI,mBAC7B,IAAK,IAAIM,EAAI,EAAGA,EAAIJ,EAAEK,OAAQD,IAAK,CAC/B,IAAIxC,EAAIoC,EAAEI,GAAGE,MAAMR,GACnBlC,GAAKmC,EAAOX,KAAKxB,EAAE,IAEvB,OAAOmC,EAAO,4BAGlB,SAAUQ,EAAOC,EAAQC,GACrB,IAAIL,EAAI,IAAIM,KACZN,EAAEO,QAAQP,EAAEQ,UAAsB,GAATH,EAAc,GAAK,GAAK,KACjD,IAAII,EAAU,WAAaT,EAAEU,cAC7BxD,SAAS2C,OAASM,EAAQ,IAAMC,EAAS,IAAMK,EAAU,uCAG7D,SAAcE,EAASC,EAASC,GAE5B,IAAMC,EAAO5D,SAAS6D,cAAcJ,GAYpC,OAVIC,GACAA,EAAQI,OAAOlB,MAAM,KAAKR,SAAQ,SAAC2B,GAC/BH,EAAKpD,UAAU0B,IAAI6B,MAKvBJ,GACAC,EAAKI,aAAa,KAAML,GAErBC,mCAIX,SAAkBF,EAASO,EAAUC,EAAaC,EAAWC,EAAMT,EAAIU,GAEnE,IAAMT,EAAOrB,EAAQsB,cAAc,IAAKH,EAASC,GAiBjD,OAfIM,GACAL,EAAKI,aAAa,WAAYC,GAE9BC,IACAN,EAAKM,YAAcA,GAEnBC,IACAP,EAAKO,UAAYA,GAEjBC,GACAR,EAAKI,aAAa,OAAQI,GAE1BC,GACAT,EAAKI,aAAa,SAAUK,GAEzBT,4BAIX,SAAWU,GAEP,IAAIC,EAAMvE,SAAS6D,cAAc,YAEjC,OADAU,EAAI/C,UAAY8C,EACTC,EAAItD,sCAIf,SAAiBwC,GAEb,QAAKA,IAIEA,EAAQe,YAAc,GAAKf,EAAQgB,aAAe,GAAKhB,EAAQiB,iBAAiB3B,OAAS,qCAMpG,SAAmB4B,EAAKC,EAAK3D,GAGzB,IAAI4D,EAAIF,EAAIG,QAAQ,KAChBC,GAAc,IAAPF,EAAW,GAAKF,EAAIK,OAAOH,GACtCF,GAAa,IAAPE,EAAWF,EAAMA,EAAIK,OAAO,EAAGH,GAErC,IAAII,EAAK,IAAIpC,OAAO,SAAW+B,EAAM,YAAa,KAC9CM,GAAkC,IAAtBP,EAAIG,QAAQ,KAAc,IAAM,IA2BhD,OAtBK7D,EAcD0D,EADKA,EAAI3B,MAAMiC,GACTN,EAAIQ,QAAQF,EAAI,KAAOL,EAAM,IAAMQ,mBAAmBnE,GAAS,MAK/D0D,EAAMO,EAAYN,EAAM,IAAMQ,mBAAmBnE,IAhBjC,OADtB0D,EAAMA,EAAIQ,QAAQ,IAAItC,OAAO,UAAY+B,EAAM,SAAU,KAAM,KACvDS,OAAO,KACXV,EAAMA,EAAIU,MAAM,GAAI,KAGE,IAAtBV,EAAIG,QAAQ,OACZH,EAAMA,EAAIQ,QAAQ,IAAK,OAcxBR,EAAMI,4BAGjB,WACI,IAAMhF,EAASC,SAASsF,cAAc,eAClCvF,GACAA,EAAOS,UAAUC,OAAO,kCAIhC,WACI,IAAMV,EAASC,SAASsF,cAAc,eAClCvF,GACAA,EAAOS,UAAU0B,IAAI,mFArIZK,6KCDAgD,EAAAA,WACjB,0GAAc,SACVhG,KAAKiG,sBAAwBxF,SAASmC,iBAAiB,sDACvD5C,KAAKkG,YAAczF,SAASmC,iBAAiB,iDAC7C5C,KAAKmG,aAAe1F,SAASmC,iBAAiB,mDAC9C5C,KAAKoG,UAAY3F,SAASmC,iBAAiB,0CAC3C5C,KAAKqG,yBAA2B5F,SAASmC,iBAAiB,yBAC1D5C,KAAKsG,cAAiB,iBAAkBjE,QAAYkE,UAAUC,eAAiB,GAAOD,UAAUE,iBAAmB,2CAGvH,WAEkBC,IAAIC,WAEZC,yDAMV,WAEI,IAAMC,EAAQH,IAAIC,WAIb9F,KAAKyF,gBAENO,EAAMV,aAAatD,SAAQ,SAAAiE,GACvBD,EAAME,eAAeD,MAGzBD,EAAMT,UAAUvD,SAAQ,SAAAiE,GACpBD,EAAME,eAAeD,OAI7BD,EAAMR,yBAAyBxD,SAAQ,SAAAmE,GAEnCA,EAAOlG,iBAAiB,SAAS,SAAAmG,GAC7BA,EAAIC,iBACJ,IAAM7C,EAAO4C,EAAIE,cAES,SAAtB9C,EAAK+C,aACNP,EAAMQ,qBAAqBhD,EAAKiD,cAAejD,IAE/CwC,EAAMU,2BACNV,EAAMW,qBAAqBnD,EAAKiD,cAAejD,wCAS9D,SAAeyC,GACX,IAAMD,EAAQH,IAAIC,WAElBG,EAAKhG,iBAAiB,aAAa,SAAAmG,GAE/B,IAAM5C,EAAO4C,EAAIE,cACjBN,EAAMU,2BACNV,EAAMW,qBAAqBnD,MAG/ByC,EAAKhG,iBAAiB,YAAY,SAAAmG,GAC9B,IAAM5C,EAAO4C,EAAIE,cACjBN,EAAMQ,qBAAqBhD,8CAInC,WACI,IAAMwC,EAAQH,IAAIC,WAElBE,EAAMT,UAAUvD,SAAQ,SAAAiE,GACpBD,EAAMQ,qBAAqBP,0CAKnC,SAAqBA,EAAMW,GAElBA,IACDA,EAAUX,EAAKf,cAAc,0BAGjCe,EAAK7F,UAAU0B,IAAI,YAEf8E,IACAA,EAAQL,cAAe,uCAK/B,SAAqBN,EAAMW,GAElBA,IACDA,EAAUX,EAAKf,cAAc,0BAGjCe,EAAK7F,UAAUC,OAAO,YAElBuG,IACAA,EAAQL,cAAe,8EAxGdpB,6KCCA0B,EAAAA,WACjB,0GAAc,SACV1H,KAAK2H,OAASlH,SAASsF,cAAc,UACrC/F,KAAKsG,cAAiB,iBAAkBjE,QAAYkE,UAAUC,eAAiB,GAAOD,UAAUE,iBAAmB,EACnHzG,KAAK4H,wBAA0B,EAC/B5H,KAAK6H,SAAU,0DAMnB,WAEI,IAAMhB,EAAQH,IAAIiB,OAIdd,EAAMc,QACNd,EAAMiB,qDAId,WAEI,IAAMjB,EAAQH,IAAIiB,OAElBd,EAAMe,wBAA0BvF,OAAO0F,QACvClB,EAAMmB,sBAENvH,SAASK,iBAAiB,UAAU,SAAAmG,GAChCJ,EAAMe,wBAA0BvF,OAAO0F,QAElClB,EAAMgB,UACPxF,OAAO4F,uBAAsB,WACzBpB,EAAMmB,sBACNnB,EAAMgB,SAAU,KAGpBhB,EAAMgB,SAAU,yCAO5B,WAEI,IAAMhB,EAAQH,IAAIiB,OACMlH,SAASmC,iBAAiB,gCAGlCC,SAAQ,SAAAiE,GACpBJ,IAAIC,WAAWU,qBAAqBP,MAGpCD,EAAMe,wBAA0B,EAChCnH,SAASyH,KAAKjH,UAAU0B,IAAI,qBAE5BlC,SAASyH,KAAKjH,UAAUC,OAAO,gGA1DtBwG,6KCDAS,EAAAA,WAEjB,0GAAc,SACVnI,KAAKoI,gBAAkB3H,SAASC,eAAe,4BAC/CV,KAAKqI,sBAAwB,KAC7BrI,KAAKsI,4BAA8B7H,SAASC,eAAe,mCAC3DV,KAAKuI,8BAAgC9H,SAASC,eAAe,qCAC7DV,KAAKwI,cAAgB/H,SAASC,eAAe,0BAC7CV,KAAKyI,oBAAsB,KAC3BzI,KAAK0I,8BAAgCjI,SAASC,eAAe,4CAC7DV,KAAK2I,oCAAsClI,SAASmC,iBAAiB,uDACrE5C,KAAK4I,oBAAsBnI,SAASC,eAAe,iCACnDV,KAAK6I,2BAA6BpI,SAASC,eAAe,kCAC1DV,KAAK8I,mBAAqBrI,SAASC,eAAe,wFAMtD,WACI,IAAMmG,EAAQH,IAAIqC,aAEblC,EAAMuB,iBAAoBvB,EAAM2B,gBAIjC3B,EAAMuB,kBACNvB,EAAMwB,sBAAwBlH,EAAE0F,EAAMuB,kBAGtCvB,EAAM2B,gBACN3B,EAAM4B,oBAAsBtH,EAAE0F,EAAM2B,gBAIxC3B,EAAMmC,8BAEwC,SAA1CnC,EAAMuB,gBAAgBrF,QAAQkG,SAC9BpC,EAAMwB,sBAAsBlG,WAAW,QAGvC0E,EAAMyB,6BACNzB,EAAMyB,4BAA4BxH,iBAAiB,SAAS,SAAUC,GAClE,IAAMmI,EAAW,IAAIC,IAAI,uBAAwBC,SAASC,QAI1DH,EAASvH,OAAS,IAAI2H,gBAHF,CAChBC,YAAa,MAEkCC,WACnDC,MAAMP,EAAU,CAAEQ,OAAQ,SAAUC,MAAK,SAAAC,GACrC/C,EAAMuB,gBAAgBrF,QAAQkG,SAAU,EACxCpC,EAAMwB,sBAAsBlG,WAAW,SACvC0E,EAAMgD,oCAKdhD,EAAM0B,+BACN1B,EAAM0B,8BAA8BzH,iBAAiB,SAAS,SAAUC,GACpE8F,EAAMwB,sBAAsBlG,WAAW,SACvC0E,EAAM4B,oBAAoBtG,WAAW,QAErC0E,EAAM4B,oBAAoBqB,GAAG,oBAAoB,SAAC/I,GAC9C8F,EAAMwB,sBAAsBlG,WAAW,cAMrB1B,SAASmC,iBAAiB,iCAClCC,SAAQ,SAAAkH,GAC1BA,EAAQjJ,iBAAiB,SAAS,WAC9B+F,EAAM4B,oBAAoBtG,WAAW,cAIzC0E,EAAM6B,+BACN7B,EAAM6B,8BAA8B5H,iBAAiB,UAAU,SAAUC,GACrE8F,EAAM+B,oBAAoB3H,UAAUC,OAAO,SACS,IAAhD2F,EAAM6B,8BAA8BsB,SACpCnD,EAAMiC,mBAAmBpH,MAAQ,IACjCmF,EAAMoD,gCAA+B,KAErCpD,EAAMiC,mBAAmBpH,MAAQ,EACjCmF,EAAMoD,gCAA+B,OAKjDpD,EAAM8B,oCAAoC9F,SAAQ,SAAAqH,GAAU,OAAIA,EAAWpJ,iBAAiB,UAAU,SAAUC,GAC5G8F,EAAM+B,oBAAoB3H,UAAUC,OAAO,SAEM,IAA7C2F,EAAMsD,oCAENtD,EAAM6B,8BAA8BsB,SAAU,EAC9CnD,EAAMiC,mBAAmBpH,MAAQ,IAGjCmF,EAAM6B,8BAA8BsB,SAAU,EAC9CnD,EAAMiC,mBAAmBpH,MAAQ,WAIrCmF,EAAMgC,4BACNhC,EAAMgC,2BAA2B/H,iBAAiB,SAAS,SAAUC,GAEjE,IAAMmI,EAAW,IAAIC,IAAI,uBAAwBC,SAASC,QACpDe,EAAc,CAChBb,YAAac,SAASxD,EAAMiC,mBAAmBpH,QAEnDwH,EAASvH,OAAS,IAAI2H,gBAAgBc,GAAaZ,WACnDC,MAAMP,EAAU,CAAEQ,OAAQ,SAAUC,MAAK,SAAAC,GACrC/C,EAAM4B,oBAAoBtG,WAAW,SACrC0E,EAAMwB,sBAAsBlG,WAAW,SACvC0E,EAAMgD,8BACNhD,EAAM+B,oBAAoB3H,UAAU0B,IAAI,cAKhDkE,EAAM2B,eACN3B,EAAMyD,sEAKd,SAA+BrB,GACbvC,IAAIqC,aACZJ,oCAAoC9F,SAAQ,SAAAqH,GAC9CA,EAAWF,QAAUf,gDAI7B,WACI,IAAMpC,EAAQH,IAAIqC,aACd3F,EAASsD,IAAI6D,QAAQC,UAAU,0CAC9BpH,GAMLA,EAASqH,KAAKC,MAAMtH,GAEpByD,EAAM8B,oCAAoC9F,SAAQ,SAAAqH,GAC1C9G,EAAOuH,eAAeT,EAAWnH,QAAQ6H,aACzCV,EAAWF,QAAU5G,EAAO8G,EAAWnH,QAAQ6H,gBAIN,IAA7C/D,EAAMsD,qCAENtD,EAAM6B,8BAA8BsB,SAAU,EAC9CnD,EAAMiC,mBAAmBpH,MAAQ,IAfjCmF,EAAMgD,yEAmBd,WACI,IAAMgB,EAAY,GACJnE,IAAIqC,aAEZJ,oCAAoC9F,SAAQ,SAAAqH,GAC9CW,EAAUX,EAAWnH,QAAQ6H,WAAaV,EAAWF,WAGzDtD,IAAI6D,QAAQO,UAAU,yCAA0CL,KAAKM,UAAUF,GAAY,qDAG/F,WAGI,IAFA,IAAMhE,EAAQH,IAAIqC,aAETzD,EAAI,EAAGA,EAAIuB,EAAM8B,oCAAoCnF,OAAQ8B,IAClE,IAA6D,IAAzDuB,EAAM8B,oCAAoCrD,GAAG0E,QAC7C,OAAO,EAIf,OAAO,sCAGX,WACI,IAAMnD,EAAQH,IAAIqC,aACZiC,EAAwBnE,EAAM2B,cAAc5F,iBAAiB,0BAE/DoI,GAAyBnE,EAAM6B,+BAE/BsC,EAAsBnI,SAAQ,SAACoI,GAG3BA,EAASnK,iBAAiB,WAAW,SAAU0B,GAC3C,IAAM0I,EAAiB1I,EAAMsC,OAE7B,GAAkB,UAAdtC,EAAM6C,IAEN,GAAI6F,EAAelB,QACXkB,GAAkBrE,EAAM6B,+BACxB7B,EAAMiC,mBAAmBpH,MAAQ,EACjCmF,EAAMoD,gCAA+B,GACrCiB,EAAelB,SAAU,IAEzBkB,EAAelB,SAAU,EACzBnD,EAAM6B,8BAA8BsB,SAAU,QAGlD,GAAIkB,GAAkBrE,EAAM6B,8BACxB7B,EAAMiC,mBAAmBpH,MAAQ,IACjCmF,EAAMoD,gCAA+B,GACrCiB,EAAelB,SAAU,MACtB,CACHkB,EAAelB,SAAU,EAGzB,IACMmB,EADgBC,MAAMC,KAAKL,GAAuBlF,MAAM,GAC7BwF,OAAM,SAAAL,GAAQ,OAAIA,EAASjB,WACxDmB,IACAtE,EAAM6B,8BAA8BsB,SAAU,qFAtN7D7B,GCMrB,SAASoD,EAAQC,GAaf,OATED,EADoB,mBAAXE,QAAoD,iBAApBA,OAAOC,SACtC,SAAUF,GAClB,cAAcA,GAGN,SAAUA,GAClB,OAAOA,GAAyB,mBAAXC,QAAyBD,EAAIG,cAAgBF,QAAUD,IAAQC,OAAOG,UAAY,gBAAkBJ,GAItHD,EAAQC,GAGjB,SAAS,EAAgBK,EAAUC,GACjC,KAAMD,aAAoBC,GACxB,MAAM,IAAIC,UAAU,qCAIxB,SAAS,EAAkBjH,EAAQkH,GACjC,IAAK,IAAI1G,EAAI,EAAGA,EAAI0G,EAAMxI,OAAQ8B,IAAK,CACrC,IAAI2G,EAAaD,EAAM1G,GACvB2G,EAAWC,WAAaD,EAAWC,aAAc,EACjDD,EAAWE,cAAe,EACtB,UAAWF,IAAYA,EAAWG,UAAW,GACjDC,OAAOC,eAAexH,EAAQmH,EAAW5G,IAAK4G,IAIlD,SAAS,EAAaH,EAAaS,EAAYC,GAG7C,OAFID,GAAY,EAAkBT,EAAYF,UAAWW,GACrDC,GAAa,EAAkBV,EAAaU,GACzCV,EAkBT,SAASW,EAAgBC,GAIvB,OAHAD,EAAkBJ,OAAOM,eAAiBN,OAAOO,eAAiB,SAAyBF,GACzF,OAAOA,EAAEG,WAAaR,OAAOO,eAAeF,IAEvCD,EAAgBC,GAGzB,SAASI,EAAgBJ,EAAGK,GAM1B,OALAD,EAAkBT,OAAOM,gBAAkB,SAAyBD,EAAGK,GAErE,OADAL,EAAEG,UAAYE,EACPL,GAGFI,EAAgBJ,EAAGK,GAwB5B,SAASC,EAA2BnM,EAAMoM,GACxC,GAAIA,IAAyB,iBAATA,GAAqC,mBAATA,GAC9C,OAAOA,EACF,QAAa,IAATA,EACT,MAAM,IAAIlB,UAAU,4DAGtB,OAfF,SAAgClL,GAC9B,QAAa,IAATA,EACF,MAAM,IAAIqM,eAAe,6DAG3B,OAAOrM,EAUAsM,CAAuBtM,GAsBhC,SAASuM,EAAeC,EAAQC,GAC9B,MAAQjB,OAAOT,UAAUjB,eAAesC,KAAKI,EAAQC,IAEpC,QADfD,EAASZ,EAAgBY,MAI3B,OAAOA,EAGT,SAASE,IAkBP,OAhBEA,EADqB,oBAAZC,SAA2BA,QAAQC,IACrCD,QAAQC,IAER,SAAc3I,EAAQwI,EAAUI,GACrC,IAAIC,EAAOP,EAAetI,EAAQwI,GAElC,GAAKK,EAAL,CACA,IAAIC,EAAOvB,OAAOwB,yBAAyBF,EAAML,GAEjD,OAAIM,EAAKH,IACAG,EAAKH,IAAIR,KAAKa,UAAUtK,OAAS,EAAIsB,EAAS4I,GAGhDE,EAAKlM,QAIT6L,EAAKQ,MAAM/N,KAAM8N,WAG1B,IAAIE,EAAW,CAUb3M,KAAM,SAON4M,QAAS,EAOTC,QAAS,EAWTC,QAAS,EAOTC,IAAK,GAOLC,UAAU,EAOVC,YAAY,EAOZC,UAAU,EAUVC,OAAO,EAOPC,eAAgB,GAOhBC,cAAe,IAWfC,SAAU,GAOVC,WAAY,GAOZC,WAAY,GAOZC,kBAAmB,IAOnBC,QAAQ,EAORC,eAAgB,IAOhBC,oBAAqB,oCAOrBC,mBAAmB,EAOnBC,SAAU,GAWVC,UAAW,MAcXC,KAAM,EAONC,aAAc,EAWdC,YAAa,GAQbpL,QAAS,CACPqL,UAAW,mBACXC,SAAU,kBACVL,UAAW,CACTM,IAAK,aACLC,IAAK,cAEPtO,KAAM,CACJuO,OAAQ,gBACRC,SAAU,mBAEZC,MAAO,CACLC,MAAO,sBACPC,OAAQ,wBAEVC,MAAO,CACLC,SAAU,0BAEZC,IAAK,CACHH,OAAQ,2BAWd,SAASI,EAAKC,GACZC,QAAQC,MAAM,iBAAiBC,OAAOH,IAUxC,SAASI,EAAM/O,GACb,OAAO2I,SAAS3I,GAoBlB,SAASgP,EAAShP,GAChB,MAAwB,iBAAVA,EAWhB,SAASiP,EAASjP,GAChB,IAAIL,EAAOkK,EAAQ7J,GAEnB,MAAgB,aAATL,GAAgC,WAATA,KAAuBK,EASvD,SAASkP,EAAWlP,GAClB,MAAwB,mBAAVA,EAShB,SAASmP,EAAYnP,GACnB,YAAwB,IAAVA,EAShB,SAASoP,EAAQpP,GACf,OAAOA,EAAMiK,cAAgBP,MAa/B,SAAS2F,EAAMC,EAAOC,EAAYC,GAChC,IAAIC,EAAa,GAEjB,IAAK,IAAIC,KAAQH,EACXL,EAAWK,EAAWG,IACxBD,EAAWC,GAAQH,EAAWG,GAAMJ,EAAOG,EAAYD,GAEvDd,EAAK,gCAIT,IAAK,IAAIiB,KAASF,EACZP,EAAWO,EAAWE,GAAON,QAC/BI,EAAWE,GAAON,QAItB,OAAOI,EAWT,SAAS,EAAO3F,EAAK8F,EAAMC,GACzBlF,OAAOC,eAAed,EAAK8F,EAAMC,GAuBnC,SAASC,EAAaxD,EAAUyD,GAC9B,IAAIC,EAAUrF,OAAOsF,OAAO,GAAI3D,EAAUyD,GAkC1C,OA5BIA,EAAS9G,eAAe,aAC1B+G,EAAQvN,QAAUkI,OAAOsF,OAAO,GAAI3D,EAAS7J,QAASsN,EAAStN,SAE3DsN,EAAStN,QAAQwG,eAAe,eAClC+G,EAAQvN,QAAQiL,UAAY/C,OAAOsF,OAAO,GAAI3D,EAAS7J,QAAQiL,UAAWqC,EAAStN,QAAQiL,YAGzFqC,EAAStN,QAAQwG,eAAe,UAClC+G,EAAQvN,QAAQ9C,KAAOgL,OAAOsF,OAAO,GAAI3D,EAAS7J,QAAQ9C,KAAMoQ,EAAStN,QAAQ9C,OAG/EoQ,EAAStN,QAAQwG,eAAe,WAClC+G,EAAQvN,QAAQ2L,MAAQzD,OAAOsF,OAAO,GAAI3D,EAAS7J,QAAQ2L,MAAO2B,EAAStN,QAAQ2L,QAGjF2B,EAAStN,QAAQwG,eAAe,WAClC+G,EAAQvN,QAAQ8L,MAAQ5D,OAAOsF,OAAO,GAAI3D,EAAS7J,QAAQ8L,MAAOwB,EAAStN,QAAQ8L,QAGjFwB,EAAStN,QAAQwG,eAAe,SAClC+G,EAAQvN,QAAQgM,IAAM9D,OAAOsF,OAAO,GAAI3D,EAAS7J,QAAQgM,IAAKsB,EAAStN,QAAQgM,OAI/EsB,EAAS9G,eAAe,iBAC1B+G,EAAQnC,YAAclD,OAAOsF,OAAO,GAAI3D,EAASuB,YAAakC,EAASlC,cAGlEmC,EAGT,IAAIE,EAAyB,WAM3B,SAASA,IACP,IAAIV,EAASpD,UAAUtK,OAAS,QAAsBqO,IAAjB/D,UAAU,GAAmBA,UAAU,GAAK,GAEjF,EAAgB9N,KAAM4R,GAEtB5R,KAAKkR,OAASA,EACdlR,KAAK8R,IAAMZ,EAAOvG,eAiEpB,OAvDA,EAAaiH,EAAW,CAAC,CACvBvM,IAAK,KACL3D,MAAO,SAAYc,EAAOuP,GACxB,IAAIjB,EAAQtO,GAAZ,CASKxC,KAAK8R,IAAI7E,KAAKjN,KAAKkR,OAAQ1O,KAC9BxC,KAAKkR,OAAO1O,GAAS,IAIvB,IAAIwP,EAAQhS,KAAKkR,OAAO1O,GAAOD,KAAKwP,GAAW,EAE/C,MAAO,CACL7Q,OAAQ,kBACClB,KAAKkR,OAAO1O,GAAOwP,KAjB5B,IAAK,IAAI1M,EAAI,EAAGA,EAAI9C,EAAMgB,OAAQ8B,IAChCtF,KAAK8J,GAAGtH,EAAM8C,GAAIyM,KA2BvB,CACD1M,IAAK,OACL3D,MAAO,SAAcc,EAAOyP,GAC1B,GAAInB,EAAQtO,GACV,IAAK,IAAI8C,EAAI,EAAGA,EAAI9C,EAAMgB,OAAQ8B,IAChCtF,KAAKkS,KAAK1P,EAAM8C,GAAI2M,QAOnBjS,KAAK8R,IAAI7E,KAAKjN,KAAKkR,OAAQ1O,IAKhCxC,KAAKkR,OAAO1O,GAAOK,SAAQ,SAAUiE,GACnCA,EAAKmL,GAAW,WAKfL,EA7EoB,GAgFzBO,EAAuB,WAOzB,SAASC,EAAMC,GACb,IAAIX,EAAU5D,UAAUtK,OAAS,QAAsBqO,IAAjB/D,UAAU,GAAmBA,UAAU,GAAK,GAElF,EAAgB9N,KAAMoS,GAEtBpS,KAAKsS,GAAK,GACVtS,KAAKuS,GAAK,GACVvS,KAAKwS,GAAK,IAAIZ,EACd5R,KAAKkQ,UAAW,EAChBlQ,KAAKqS,SAAWA,EAChBrS,KAAKyR,SAAWD,EAAaxD,EAAU0D,GACvC1R,KAAKgS,MAAQhS,KAAKyR,SAASxD,QAwR7B,OA9QA,EAAamE,EAAO,CAAC,CACnB/M,IAAK,QACL3D,MAAO,WACL,IAAIuP,EAAanD,UAAUtK,OAAS,QAAsBqO,IAAjB/D,UAAU,GAAmBA,UAAU,GAAK,GAYrF,OAVA9N,KAAKwS,GAAGN,KAAK,gBAETvB,EAASM,GACXjR,KAAKsS,GAAKvB,EAAM/Q,KAAMiR,EAAYjR,KAAKwS,IAEvCpC,EAAK,6CAGPpQ,KAAKwS,GAAGN,KAAK,eAENlS,OASR,CACDqF,IAAK,SACL3D,MAAO,WACL,IAAI+Q,EAAe3E,UAAUtK,OAAS,QAAsBqO,IAAjB/D,UAAU,GAAmBA,UAAU,GAAK,GAQvF,OANIgD,EAAQ2B,GACVzS,KAAKuS,GAAKE,EAEVrC,EAAK,6CAGApQ,OASR,CACDqF,IAAK,SACL3D,MAAO,WACL,IAAI+P,EAAW3D,UAAUtK,OAAS,QAAsBqO,IAAjB/D,UAAU,GAAmBA,UAAU,GAAK,GASnF,OARA9N,KAAKyR,SAAWD,EAAaxR,KAAKyR,SAAUA,GAExCA,EAAS9G,eAAe,aAC1B3K,KAAKgS,MAAQP,EAASxD,SAGxBjO,KAAKwS,GAAGN,KAAK,UAENlS,OAgBR,CACDqF,IAAK,KACL3D,MAAO,SAAYgR,GAGjB,OAFA1S,KAAKsS,GAAGK,IAAIC,KAAKF,GAEV1S,OASR,CACDqF,IAAK,OACL3D,MAAO,SAAcmR,GAKnB,OAJA7S,KAAKsS,GAAGQ,WAAWC,UAEnB/S,KAAKsS,GAAGU,KAAKJ,KAAKC,GAEX7S,OAQR,CACDqF,IAAK,UACL3D,MAAO,WAGL,OAFA1B,KAAKwS,GAAGN,KAAK,WAENlS,OASR,CACDqF,IAAK,OACL3D,MAAO,WACL,IAAIuR,EAAWnF,UAAUtK,OAAS,QAAsBqO,IAAjB/D,UAAU,IAAmBA,UAAU,GAQ9E,OANImF,IACFjT,KAAKyR,SAASpD,SAAW4E,GAG3BjT,KAAKwS,GAAGN,KAAK,QAENlS,OAQR,CACDqF,IAAK,QACL3D,MAAO,WAGL,OAFA1B,KAAKwS,GAAGN,KAAK,SAENlS,OAQR,CACDqF,IAAK,UACL3D,MAAO,WAEL,OADA1B,KAAKkQ,UAAW,EACTlQ,OAQR,CACDqF,IAAK,SACL3D,MAAO,WAEL,OADA1B,KAAKkQ,UAAW,EACTlQ,OAUR,CACDqF,IAAK,KACL3D,MAAO,SAAYc,EAAOuP,GAGxB,OAFA/R,KAAKwS,GAAG1I,GAAGtH,EAAOuP,GAEX/R,OASR,CACDqF,IAAK,SACL3D,MAAO,SAAgB0P,GACrB,OAAOpR,KAAKyR,SAASpQ,OAAS+P,IAQ/B,CACD/L,IAAK,WACLoI,IAAK,WACH,OAAOzN,KAAKkT,IASdC,IAAK,SAAazG,GACZiE,EAASjE,GACX1M,KAAKkT,GAAKxG,EAEV0D,EAAK,2CASR,CACD/K,IAAK,QACLoI,IAAK,WACH,OAAOzN,KAAKoT,IAQdD,IAAK,SAAa7N,GAChBtF,KAAKoT,GAAK3C,EAAMnL,KAQjB,CACDD,IAAK,OACLoI,IAAK,WACH,OAAOzN,KAAKyR,SAASpQ,OAQtB,CACDgE,IAAK,WACLoI,IAAK,WACH,OAAOzN,KAAKqT,IAQdF,IAAK,SAAaG,GAChBtT,KAAKqT,KAAOC,MAITlB,EA1SkB,GAmoB3B,SAASmB,IACP,OAAO,IAAI1P,MAAOE,UAepB,SAASoL,EAASqE,EAAMC,EAAM/B,GAC5B,IAAIgC,EAASzB,EAAS0B,EAAMzQ,EACxB0Q,EAAW,EACVlC,IAASA,EAAU,IAExB,IAAImC,EAAQ,WACVD,GAA+B,IAApBlC,EAAQoC,QAAoB,EAAIP,IAC3CG,EAAU,KACVxQ,EAASsQ,EAAKzF,MAAMkE,EAAS0B,GACxBD,IAASzB,EAAU0B,EAAO,OAG7BI,EAAY,WACd,IAAIC,EAAKT,IACJK,IAAgC,IAApBlC,EAAQoC,UAAmBF,EAAWI,GACvD,IAAIC,EAAYR,GAAQO,EAAKJ,GAiB7B,OAhBA3B,EAAUjS,KACV2T,EAAO7F,UAEHmG,GAAa,GAAKA,EAAYR,GAC5BC,IACFQ,aAAaR,GACbA,EAAU,MAGZE,EAAWI,EACX9Q,EAASsQ,EAAKzF,MAAMkE,EAAS0B,GACxBD,IAASzB,EAAU0B,EAAO,OACrBD,IAAgC,IAArBhC,EAAQyC,WAC7BT,EAAUU,WAAWP,EAAOI,IAGvB/Q,GAST,OANA6Q,EAAUM,OAAS,WACjBH,aAAaR,GACbE,EAAW,EACXF,EAAUzB,EAAU0B,EAAO,MAGtBI,EAGT,IAAIO,EAAc,CAChB5E,IAAK,CAAC,aAAc,eACpBC,IAAK,CAAC,cAAe,eAuGvB,SAAS4E,EAASC,GAChB,GAAIA,GAAQA,EAAKC,WAAY,CAI3B,IAHA,IAAIC,EAAIF,EAAKC,WAAWE,WACpBC,EAAU,GAEPF,EAAGA,EAAIA,EAAEG,YACK,IAAfH,EAAEI,UAAkBJ,IAAMF,GAC5BI,EAAQrS,KAAKmS,GAIjB,OAAOE,EAGT,MAAO,GAST,SAASG,EAAMP,GACb,SAAIA,GAAQA,aAAgBnS,OAAO2S,aAOrC,IAAIC,EAAiB,0BA0jBjBC,EAA4B,WAI9B,SAASA,IACP,IAAIC,EAAYrH,UAAUtK,OAAS,QAAsBqO,IAAjB/D,UAAU,GAAmBA,UAAU,GAAK,GAEpF,EAAgB9N,KAAMkV,GAEtBlV,KAAKmV,UAAYA,EA8DnB,OAjDA,EAAaD,EAAc,CAAC,CAC1B7P,IAAK,KACL3D,MAAO,SAAYwP,EAAQkE,EAAIC,GAC7B,IAAIC,EAAUxH,UAAUtK,OAAS,QAAsBqO,IAAjB/D,UAAU,IAAmBA,UAAU,GAEzE4C,EAASQ,KACXA,EAAS,CAACA,IAGZ,IAAK,IAAI5L,EAAI,EAAGA,EAAI4L,EAAO1N,OAAQ8B,IACjCtF,KAAKmV,UAAUjE,EAAO5L,IAAM+P,EAC5BD,EAAGtU,iBAAiBoQ,EAAO5L,GAAItF,KAAKmV,UAAUjE,EAAO5L,IAAKgQ,KAY7D,CACDjQ,IAAK,MACL3D,MAAO,SAAawP,EAAQkE,GAC1B,IAAIE,EAAUxH,UAAUtK,OAAS,QAAsBqO,IAAjB/D,UAAU,IAAmBA,UAAU,GAEzE4C,EAASQ,KACXA,EAAS,CAACA,IAGZ,IAAK,IAAI5L,EAAI,EAAGA,EAAI4L,EAAO1N,OAAQ8B,IACjC8P,EAAGG,oBAAoBrE,EAAO5L,GAAItF,KAAKmV,UAAUjE,EAAO5L,IAAKgQ,KAShE,CACDjQ,IAAK,UACL3D,MAAO,kBACE1B,KAAKmV,cAITD,EAvEuB,GA0H5BM,EAAmB,CAAC,MAAO,OAC3BC,EAAmB,CACrB,IAAK,IACL,IAAK,IACL,IAAK,KAqHP,SAASC,EAAKtD,EAAOuD,GACnB,MAAO,CAOLC,OAAQ,SAAgBC,GACtB,OAAIF,EAAWG,UAAUC,GAAG,QAClBF,EAGHA,IAYb,SAASG,EAAK5D,EAAOuD,GACnB,MAAO,CAOLC,OAAQ,SAAgBC,GACtB,IAAII,EAAaC,KAAKC,MAAMN,EAAYF,EAAWS,MAAMC,YACzD,OAAOR,EAAYF,EAAWW,KAAK5U,MAAQuU,IAYjD,SAASM,EAAMnE,EAAOuD,GACpB,MAAO,CAOLC,OAAQ,SAAgBC,GACtB,OAAOA,EAAYF,EAAWa,OAAOC,KAAO,IAalD,SAASC,EAAStE,EAAOuD,GACvB,MAAO,CAOLC,OAAQ,SAAgBC,GACtB,GAAIzD,EAAMX,SAAStD,SAAW,EAAG,CAC/B,IAAIkB,EAAOsG,EAAWgB,KAAKjV,MAE3B,OAAIiP,EAAStB,GACJwG,EAAYxG,EAAKuH,OAGnBf,EAAYxG,EAGrB,OAAOwG,IAYb,SAASgB,EAAUzE,EAAOuD,GACxB,MAAO,CAOLC,OAAQ,SAAgBC,GACtB,IAAIzH,EAAMuH,EAAWW,KAAK5U,MACtBoV,EAAQnB,EAAWS,MAAMU,MACzB3I,EAAUiE,EAAMX,SAAStD,QACzBkI,EAAaV,EAAWS,MAAMC,WAElC,MAAgB,WAAZlI,EACK0H,GAAaiB,EAAQ,EAAIT,EAAa,GAGxCR,EAAYQ,EAAalI,EAAUC,EAAMD,IA4QtD,IAAI4I,GAAkB,EAEtB,IACE,IAAIC,EAAO3K,OAAOC,eAAe,GAAI,UAAW,CAC9CmB,IAAK,WACHsJ,GAAkB,KAGtB1U,OAAOvB,iBAAiB,cAAe,KAAMkW,GAC7C3U,OAAOkT,oBAAoB,cAAe,KAAMyB,GAChD,MAAOjW,IAET,IAAIkW,EAAoBF,EAEpBG,EAAe,CAAC,aAAc,aAC9BC,EAAc,CAAC,YAAa,aAC5BC,EAAa,CAAC,WAAY,cAAe,UAAW,cACpDC,EAAe,CAAC,YAAa,YAAa,UAAW,cAqdrDC,GAAoB,8BACpBC,GAA6B,GAAG/G,OAAO8G,GAAmB,0BAC1DE,GAAyB,GAAGhH,OAAO8G,GAAmB,0BAoiB1D,SAASG,GAAgBC,GACvB,OAAI/G,EAAS+G,IAvoGGlM,EAwoGEkM,EAvoGXrL,OAAOsL,KAAKnM,GAAK3J,OAAO+V,QAAO,SAAUC,EAAGC,GAEjD,OADAD,EAAEC,GAAKtM,EAAIsM,GACJD,EAAEC,GAAID,IACZ,MAsoGDzH,EAAK,wCAGA,IA7oGT,IAAkB5E,EAquGlB,IAAIuM,GAAa,CAEfC,KA3xEF,SAAe5F,EAAOuD,EAAYsC,GAChC,IAAID,EAAO,CAMTjH,MAAO,WACL/Q,KAAKkY,KAAO9F,EAAMC,SAClBrS,KAAKmY,MAAQnY,KAAKkY,KAAKnS,cAAckP,GACrCjV,KAAKoY,iBAMPA,cAAe,WACbpY,KAAKqY,OAASjN,MAAMQ,UAAU9F,MAAMmH,KAAKjN,KAAKsY,QAAQC,UAAUC,QAAO,SAAU1I,GAC/E,OAAQA,EAAM7O,UAAUwX,SAASrG,EAAMX,SAAStN,QAAQ2L,MAAMC,YAuEpE,OAnEA,EAAOiI,EAAM,OAAQ,CAMnBvK,IAAK,WACH,OAAOuK,EAAKU,IAQdvF,IAAK,SAAa0E,GACZnH,EAASmH,KACXA,EAAIpX,SAASsF,cAAc8R,IAGzB9C,EAAM8C,GACRG,EAAKU,GAAKb,EAEVzH,EAAK,gDAIX,EAAO4H,EAAM,QAAS,CAMpBvK,IAAK,WACH,OAAOuK,EAAKzF,IAQdY,IAAK,SAAawF,GACZ5D,EAAM4D,GACRX,EAAKzF,GAAKoG,EAEVvI,EAAK,4CAA4CI,OAAOyE,EAAgB,mBAI9E,EAAO+C,EAAM,UAAW,CAMtBvK,IAAK,WACH,OAAOuK,EAAKG,MAAMI,SAAS,MAO/BN,EAAOnO,GAAG,UAAU,WAClBkO,EAAKI,mBAEAJ,GAmsEPY,UA70CF,SAAoBxG,EAAOuD,EAAYsC,GACrC,IAAIW,EAAY,CAOdzF,IAAK,SAAazR,GAChB,IAAImX,EAzCV,SAAkBzG,EAAOuD,EAAYsC,GAQnC,IAAIa,EAAe,CAAC9C,EAAKO,EAAMG,EAASG,GAAUrG,OAAO4B,EAAMG,GAAI,CAACmD,IACpE,MAAO,CAOLqD,OAAQ,SAAgBlD,GACtB,IAAK,IAAIvQ,EAAI,EAAGA,EAAIwT,EAAatV,OAAQ8B,IAAK,CAC5C,IAAI0T,EAAcF,EAAaxT,GAE3BsL,EAAWoI,IAAgBpI,EAAWoI,IAAcpD,QACtDC,EAAYmD,EAAY5G,EAAOuD,EAoBnBsD,WApBuCrD,OAAOC,GAE1DzF,EAAK,kFAIT,OAAOyF,IAcSoD,CAAQ7G,EAAOuD,GAAYoD,OAAOrX,GAC9CwX,EAAc,eAAe1I,QAAQ,EAAIqI,EAAW,iBACxDlD,EAAWqC,KAAKM,QAAQa,MAAMC,aAAeF,EAE7CvD,EAAWqC,KAAKM,QAAQa,MAAME,gBAAkBH,EAEhDvD,EAAWqC,KAAKM,QAAQa,MAAMN,UAAYK,GAQ5ChY,OAAQ,WACNyU,EAAWqC,KAAKM,QAAQa,MAAMN,UAAY,IAM5CS,cAAe,WACb,IAAI9V,EAASmS,EAAWS,MAAM5S,OAC1BwO,EAAQI,EAAMJ,MACd9D,EAAUkE,EAAMX,SAASvD,QAE7B,OAAIyH,EAAWhD,IAAI4G,SAAS,MAAQ5D,EAAWhD,IAAI4G,SAAS,MACnD/V,GAAUwO,EAAQ9D,IAInB8D,EAAQ9D,GAAW1K,GAM7BgW,kBAAmB,WACjB,IAAIC,EAAiB9D,EAAWS,MAAMC,WAAajE,EAAMX,SAASvD,QAElE,OAAIyH,EAAWhD,IAAI4G,SAAS,MAAQ5D,EAAWhD,IAAI4G,SAAS,OAEjC,EAAlBE,EAGFA,IA6BX,OApBAxB,EAAOnO,GAAG,QAAQ,SAAUmI,GAC1B,IAAKG,EAAMsH,OAAO,cAAgB/D,EAAWhD,IAAI4G,WAC/C,OAAOX,EAAUzF,IAAIlB,EAAQ0H,UAG/BhE,EAAW7C,WAAW8G,OAAM,WAC1B3B,EAAO/F,KAAK,kBACZ0G,EAAUzF,IAAIwC,EAAWS,MAAMC,WAAajE,EAAMJ,UAEpD,IAAI6H,EAAalE,EAAWS,MAAMC,WAAaV,EAAWiD,UAAUU,gBACpE,OAAOV,EAAUzF,IAAI0G,EAAalE,EAAWiD,UAAUY,wBAOzDvB,EAAOnO,GAAG,WAAW,WACnB8O,EAAU1X,YAEL0X,GA2vCP9F,WAxvCF,SAAqBV,EAAOuD,EAAYsC,GAOtC,IAAI/H,GAAW,EACX4C,EAAa,CAOfgH,QAAS,SAAiBxM,GACxB,IAAImE,EAAWW,EAAMX,SAErB,OAAKvB,EAIE,GAAGM,OAAOlD,EAAU,SAASkD,OAAOiB,EAASxC,qBAH3C,GAAGuB,OAAOlD,EAAU,KAAKkD,OAAOxQ,KAAK+Z,SAAU,OAAOvJ,OAAOiB,EAASxC,sBAYjFkE,IAAK,WACH,IAAI7F,EAAWQ,UAAUtK,OAAS,QAAsBqO,IAAjB/D,UAAU,GAAmBA,UAAU,GAAK,YACnF6H,EAAWqC,KAAKM,QAAQa,MAAMa,WAAaha,KAAK8Z,QAAQxM,IAQ1DpM,OAAQ,WACNyU,EAAWqC,KAAKM,QAAQa,MAAMa,WAAa,IAS7CJ,MAAO,SAAeK,GACpB7F,YAAW,WACT6F,MACCja,KAAK+Z,WAQVG,OAAQ,WACNhK,GAAW,EACXlQ,KAAKmT,OAQPJ,QAAS,WACP7C,GAAW,EACXlQ,KAAKmT,QAsDT,OAnDA,EAAOL,EAAY,WAAY,CAO7BrF,IAAK,WACH,IAAIgE,EAAWW,EAAMX,SAErB,OAAIW,EAAMsH,OAAO,WAAa/D,EAAWhD,IAAIwH,OACpC1I,EAASzC,eAGXyC,EAAS3C,qBAQpBmJ,EAAOnO,GAAG,QAAQ,WAChBgJ,EAAWK,SASb8E,EAAOnO,GAAG,CAAC,eAAgB,SAAU,mBAAmB,WACtDgJ,EAAWC,aAObkF,EAAOnO,GAAG,OAAO,WACfgJ,EAAWoH,YAObjC,EAAOnO,GAAG,WAAW,WACnBgJ,EAAW5R,YAEN4R,GAynCPgD,UArmDF,SAAoB1D,EAAOuD,EAAYsC,GACrC,IAAInC,EAAY,CAMd/E,MAAO,WACL/Q,KAAK0B,MAAQ0Q,EAAMX,SAASrC,WAS9BgL,QAAS,SAAiB1H,GACxB,IAAI2H,EAAQ3H,EAAQ5M,MAAM,EAAG,GAE7B,OAAI9F,KAAK+V,GAAG,OACHrD,EAAQrP,MAAMgX,GAAOC,KAAK7E,EAAiB4E,IAG7C3H,GASTqD,GAAI,SAAY3G,GACd,OAAOpP,KAAK0B,QAAU0N,GAQxBmL,SAAU,WACR5E,EAAWqC,KAAKE,KAAKjX,UAAU0B,IAAIyP,EAAMX,SAAStN,QAAQiL,UAAUpP,KAAK0B,SAQ3E8Y,YAAa,WACX7E,EAAWqC,KAAKE,KAAKjX,UAAUC,OAAOkR,EAAMX,SAAStN,QAAQiL,UAAUpP,KAAK0B,UAqDhF,OAlDA,EAAOoU,EAAW,QAAS,CAMzBrI,IAAK,WACH,OAAOqI,EAAU2E,IASnBtH,IAAK,SAAazR,GACZ8T,EAAiBjQ,QAAQ7D,IAAU,EACrCoU,EAAU2E,GAAK/Y,EAEf0O,EAAK,6CAUX6H,EAAOnO,GAAG,CAAC,UAAW,WAAW,WAC/BgM,EAAU0E,iBAOZvC,EAAOnO,GAAG,UAAU,WAClBgM,EAAU/E,WAQZkH,EAAOnO,GAAG,CAAC,eAAgB,WAAW,WACpCgM,EAAUyE,cAELzE,GA6/CPa,KAnsEF,SAAevE,EAAOuD,EAAYsC,GAChC,IAAItB,EAAO,CAMT5F,MAAO,WACL/Q,KAAK0B,MAAQ0Q,EAAMX,SAASpC,OAuDhC,OApDA,EAAOsH,EAAM,QAAS,CAMpBlJ,IAAK,WACH,OAAOkJ,EAAK8D,IASdtH,IAAK,SAAazR,GACZiP,EAASjP,IACXA,EAAMkV,OAASnG,EAAM/O,EAAMkV,QAC3BlV,EAAMkY,MAAQnJ,EAAM/O,EAAMkY,QAE1BlY,EAAQ+O,EAAM/O,GAGhBiV,EAAK8D,GAAK/Y,KAGd,EAAOiV,EAAM,WAAY,CAMvBlJ,IAAK,WACH,IAAI/L,EAAQiV,EAAKjV,MACbwM,EAAUkE,EAAMX,SAASvD,QAE7B,OAAIyC,EAASjP,GACJA,EAAMkV,OAAS1I,EAAUxM,EAAMkY,MAAQ1L,EAGjC,EAARxM,EAAYwM,KAQvB+J,EAAOnO,GAAG,CAAC,SAAU,WAAW,WAC9B6M,EAAK5F,WAEA4F,GAqoEPP,MAxiEF,SAAgBhE,EAAOuD,EAAYsC,GACjC,IAAI7B,EAAQ,CAMVsE,YAAa,WAIX,IAHA,IAAI5D,EAAQ,GAAGtG,OAAOxQ,KAAKqW,WAAY,MACnCgC,EAAS1C,EAAWqC,KAAKK,OAEpB/S,EAAI,EAAGA,EAAI+S,EAAO7U,OAAQ8B,IACjC+S,EAAO/S,GAAG6T,MAAMrC,MAAQA,GAS5B6D,aAAc,WACZhF,EAAWqC,KAAKM,QAAQa,MAAMrC,MAAQ,GAAGtG,OAAOxQ,KAAK4a,YAAa,OAQpE1Z,OAAQ,WAGN,IAFA,IAAImX,EAAS1C,EAAWqC,KAAKK,OAEpB/S,EAAI,EAAGA,EAAI+S,EAAO7U,OAAQ8B,IACjC+S,EAAO/S,GAAG6T,MAAMrC,MAAQ,GAG1BnB,EAAWqC,KAAKM,QAAQa,MAAMrC,MAAQ,KA8D1C,OA3DA,EAAOV,EAAO,SAAU,CAMtB3I,IAAK,WACH,OAAOkI,EAAWqC,KAAKK,OAAO7U,UAGlC,EAAO4S,EAAO,QAAS,CAMrB3I,IAAK,WACH,OAAOkI,EAAWqC,KAAKG,MAAMlT,eAGjC,EAAOmR,EAAO,cAAe,CAM3B3I,IAAK,WACH,OAAO2I,EAAMC,WAAaD,EAAM5S,OAASmS,EAAWW,KAAKG,KAAOd,EAAWa,OAAOC,QAGtF,EAAOL,EAAO,aAAc,CAM1B3I,IAAK,WACH,OAAO2I,EAAMU,MAAQ1E,EAAMX,SAASvD,QAAUyH,EAAWgB,KAAKkE,SAAWlF,EAAWW,KAAKuE,YAU7F5C,EAAOnO,GAAG,CAAC,eAAgB,SAAU,WAAW,WAC9CsM,EAAMsE,cACNtE,EAAMuE,kBAOR1C,EAAOnO,GAAG,WAAW,WACnBsM,EAAMlV,YAEDkV,GAs8DPE,KAt6EF,SAAelE,EAAOuD,EAAYsC,GAChC,IAAI3B,EAAO,CAQTvI,MAAO,SAAesK,GACpB,IAAK,IAAI/S,EAAI,EAAGwV,EAAMzC,EAAO7U,OAAQ8B,EAAIwV,EAAKxV,IAAK,CACjD,IAAI6T,EAAQd,EAAO/S,GAAG6T,MAClB/J,EAAYuG,EAAWG,UAAUpU,MAGnCyX,EAAM7E,EAAYlF,GAAW,IADrB,IAAN9J,EACiC,GAAGkL,OAAOxQ,KAAK0B,MAAQ,EAAG,MAE1B,GAGjC4D,IAAM+S,EAAO7U,OAAS,EACxB2V,EAAM7E,EAAYlF,GAAW,IAAM,GAAGoB,OAAOxQ,KAAK0B,MAAQ,EAAG,MAE7DyX,EAAM7E,EAAYlF,GAAW,IAAM,KAWzClO,OAAQ,SAAgBmX,GACtB,IAAK,IAAI/S,EAAI,EAAGwV,EAAMzC,EAAO7U,OAAQ8B,EAAIwV,EAAKxV,IAAK,CACjD,IAAI6T,EAAQd,EAAO/S,GAAG6T,MACtBA,EAAM4B,WAAa,GACnB5B,EAAM6B,YAAc,MAsD1B,OAlDA,EAAO1E,EAAM,QAAS,CAMpB7I,IAAK,WACH,OAAOgD,EAAM2B,EAAMX,SAASrD,QAGhC,EAAOkI,EAAM,OAAQ,CAOnB7I,IAAK,WACH,OAAO6I,EAAK5U,MAAQiU,EAAWS,MAAM5S,UAGzC,EAAO8S,EAAM,WAAY,CAOvB7I,IAAK,WACH,IAAIS,EAAUkE,EAAMX,SAASvD,QAC7B,OAAOoI,EAAK5U,OAASwM,EAAU,GAAKA,KASxC+J,EAAOnO,GAAG,CAAC,cAAe,UAAWqF,GAAS,WAC5CmH,EAAKvI,MAAM4H,EAAWqC,KAAKM,QAAQC,YAClC,KAMHN,EAAOnO,GAAG,WAAW,WACnBwM,EAAKpV,OAAOyU,EAAWqC,KAAKM,QAAQC,aAE/BjC,GA20EPtD,KApoEF,SAAeZ,EAAOuD,EAAYsC,GAChC,IAAIjF,EAAO,CAMTjC,MAAO,WACL/Q,KAAKkT,GAAK,GASZN,KAAM,WACJ,IAAIqI,EAAQjb,KAERma,EAASrM,UAAUtK,OAAS,QAAsBqO,IAAjB/D,UAAU,GAAmBA,UAAU,GAAK,EACjF9N,KAAKma,OAASA,EACdlC,EAAO/F,KAAK,OAAQ,CAClByH,SAAU3Z,KAAK0B,QAEjBiU,EAAW7C,WAAW8G,OAAM,WAC1B3B,EAAO/F,KAAK,aAAc,CACxByH,SAAUsB,EAAMvZ,aA4DxB,OAvDA,EAAOsR,EAAM,SAAU,CAMrBvF,IAAK,WACH,OAAOuF,EAAKE,IAQdC,IAAK,SAAazR,GAChBsR,EAAKE,GAAMrC,EAAYnP,GAAwB,EAAf+O,EAAM/O,MAG1C,EAAOsR,EAAM,YAAa,CAMxBvF,IAAK,WACH,OAAOkI,EAAWS,MAAMC,WAAajE,EAAMJ,SAG/C,EAAOgB,EAAM,QAAS,CAMpBvF,IAAK,WACH,IAAI0M,EAASna,KAAKma,OACdtE,EAAY7V,KAAK6V,UAErB,OAAIF,EAAWG,UAAUC,GAAG,OACnBF,EAAYsE,EAGdtE,EAAYsE,KASvBlC,EAAOnO,GAAG,CAAC,eAAgB,QAAQ,WACjCkJ,EAAKJ,UAEAI,GA8iEPwD,OAh3DF,SAAiBpE,EAAOuD,EAAYsC,GAClC,IAAIzB,EAAS,CAIXzF,MAAO,WACL/Q,KAAKkb,MAAQ,GAET9I,EAAMsH,OAAO,cACf1Z,KAAKkb,MAAQlb,KAAKmb,YAStBA,QAAS,WACP,IAAID,EAAQpN,UAAUtK,OAAS,QAAsBqO,IAAjB/D,UAAU,GAAmBA,UAAU,GAAK,GAC5EuK,EAAS1C,EAAWqC,KAAKK,OACzB+C,EAAkBhJ,EAAMX,SACxBvD,EAAUkN,EAAgBlN,QAC1B/J,EAAUiX,EAAgBjX,QAC1BmL,EAAe8L,EAAgB9L,aAEnC,GAAsB,IAAlB+I,EAAO7U,OAMT,IALA,IAAI6X,KAAqBjJ,EAAMX,SAASpC,KACpCiM,EAAapN,EAAUmN,EAAkBnF,KAAKqF,MAAMrN,EAAU,GAC9DsN,EAASnD,EAAOvS,MAAM,EAAGwV,GAAYG,UACrCC,EAAUrD,EAAOvS,OAAoB,EAAdwV,GAElBzD,EAAI,EAAGA,EAAI3B,KAAKyF,IAAIrM,EAAc4G,KAAKC,MAAMjI,EAAUmK,EAAO7U,SAAUqU,IAAK,CACpF,IAAK,IAAIvS,EAAI,EAAGA,EAAIkW,EAAOhY,OAAQ8B,IAAK,CACtC,IAAIyK,EAAQyL,EAAOlW,GAAGsW,WAAU,GAChC7L,EAAM9O,UAAU0B,IAAIwB,EAAQ2L,MAAMC,OAClCmL,EAAM3Y,KAAKwN,GAGb,IAAK,IAAIqD,EAAK,EAAGA,EAAKsI,EAAQlY,OAAQ4P,IAAM,CAC1C,IAAIyI,EAASH,EAAQtI,GAAIwI,WAAU,GAEnCC,EAAO5a,UAAU0B,IAAIwB,EAAQ2L,MAAMC,OAEnCmL,EAAMY,QAAQD,IAKpB,OAAOX,GAQTM,OAAQ,WAUN,IATA,IAAIN,EAAQlb,KAAKkb,MACba,EAAmBpG,EAAWqC,KAC9BM,EAAUyD,EAAiBzD,QAC3BD,EAAS0D,EAAiB1D,OAC1B2D,EAAO9F,KAAKC,MAAM+E,EAAM1X,OAAS,GACjCkY,EAAUR,EAAMpV,MAAM,EAAGkW,GAAMP,UAC/BD,EAASN,EAAMpV,OAAc,EAARkW,GAAWP,UAChC3E,EAAQ,GAAGtG,OAAOmF,EAAWS,MAAMC,WAAY,MAE1C/Q,EAAI,EAAGA,EAAIkW,EAAOhY,OAAQ8B,IACjCgT,EAAQ2D,YAAYT,EAAOlW,IAG7B,IAAK,IAAI4W,EAAM,EAAGA,EAAMR,EAAQlY,OAAQ0Y,IACtC5D,EAAQ6D,aAAaT,EAAQQ,GAAM7D,EAAO,IAG5C,IAAK,IAAI+D,EAAM,EAAGA,EAAMlB,EAAM1X,OAAQ4Y,IACpClB,EAAMkB,GAAKjD,MAAMrC,MAAQA,GAS7B5V,OAAQ,WAGN,IAFA,IAAIga,EAAQlb,KAAKkb,MAER5V,EAAI,EAAGA,EAAI4V,EAAM1X,OAAQ8B,IAChCqQ,EAAWqC,KAAKM,QAAQ+D,YAAYnB,EAAM5V,MA0ChD,OAtCA,EAAOkR,EAAQ,OAAQ,CAMrB/I,IAAK,WACH,OAAQkI,EAAWS,MAAMC,WAAaV,EAAWW,KAAK5U,OAAS8U,EAAO0E,MAAM1X,UAQhFyU,EAAOnO,GAAG,UAAU,WAClB0M,EAAOtV,SACPsV,EAAOzF,QACPyF,EAAOgF,YAOTvD,EAAOnO,GAAG,gBAAgB,WACpBsI,EAAMsH,OAAO,aACflD,EAAOgF,YAQXvD,EAAOnO,GAAG,WAAW,WACnB0M,EAAOtV,YAEFsV,GA8uDP8F,OAjqDF,SAAiBlK,EAAOuD,EAAYsC,GAMlC,IAAIsE,EAAS,IAAIrH,EACboH,EAAS,CAIXvL,MAAO,WACL/Q,KAAKwc,QASPA,KAAM,WACJD,EAAOzS,GAAG,SAAUzH,OAAQ8M,GAAS,WACnC8I,EAAO/F,KAAK,YACXE,EAAMX,SAAStC,YAQpBsN,OAAQ,WACNF,EAAOG,IAAI,SAAUra,UAYzB,OAJA4V,EAAOnO,GAAG,WAAW,WACnBwS,EAAOG,SACPF,EAAOI,aAEFL,GAqnDPM,MAv8DF,SAAgBxK,EAAOuD,EAAYsC,GACjC,IAAI2E,EAAQ,CAOV7L,MAAO,WACLkH,EAAO/F,KAAK,gBACZlS,KAAK6c,YACL7c,KAAK8c,cACL7E,EAAO/F,KAAK,gBAQd2K,UAAW,WACTlH,EAAWqC,KAAKE,KAAKjX,UAAU0B,IAAIyP,EAAMX,SAAStN,QAAQ9C,KAAK+Q,EAAMX,SAASpQ,QAQhFyb,YAAa,WACX,IAAI3Y,EAAUiO,EAAMX,SAAStN,QACzB2L,EAAQ6F,EAAWqC,KAAKK,OAAOjG,EAAMJ,OAErClC,IACFA,EAAM7O,UAAU0B,IAAIwB,EAAQ2L,MAAME,QAClCuE,EAASzE,GAAOjN,SAAQ,SAAUka,GAChCA,EAAQ9b,UAAUC,OAAOiD,EAAQ2L,MAAME,aAU7CgN,cAAe,WACb,IAAIC,EAAwB7K,EAAMX,SAAStN,QACvC9C,EAAO4b,EAAsB5b,KAC7ByO,EAAQmN,EAAsBnN,MAClC6F,EAAWqC,KAAKE,KAAKjX,UAAUC,OAAOG,EAAK+Q,EAAMX,SAASpQ,OAC1DsU,EAAWqC,KAAKK,OAAOxV,SAAQ,SAAUka,GACvCA,EAAQ9b,UAAUC,OAAO4O,EAAME,aA8BrC,OApBAiI,EAAOnO,GAAG,CAAC,UAAW,WAAW,WAC/B8S,EAAMI,mBAQR/E,EAAOnO,GAAG,CAAC,SAAU,WAAW,WAC9B8S,EAAM7L,WAORkH,EAAOnO,GAAG,cAAc,WACtB8S,EAAME,iBAEDF,GAs3DPjK,IAj0FF,SAAcP,EAAOuD,EAAYsC,GAC/B,IAAItF,EAAM,CAMR5B,MAAO,WACL/Q,KAAKkT,IAAK,GAQZN,KAAM,SAAcsK,GAClB,IAAIjC,EAAQjb,KAEPoS,EAAMlC,YACRkC,EAAMX,SAASvC,mBAAqBkD,EAAMW,UAC3C/S,KAAKkd,KAAOA,EACZjF,EAAO/F,KAAK,aAAclS,KAAKkd,MAC/Bld,KAAKmd,YACLlF,EAAO/F,KAAK,MAAOlS,KAAKkd,MACxBvH,EAAW7C,WAAW8G,OAAM,WACtBqB,EAAMmC,WACRnF,EAAO/F,KAAK,YAAa+I,EAAMiC,MAG7BjC,EAAMoC,SACRpF,EAAO/F,KAAK,UAAW+I,EAAMiC,MAG3BjC,EAAM1B,aACR0B,EAAM/H,IAAK,EACX+E,EAAO/F,KAAK,aAAc+I,EAAMiC,OAGlCjF,EAAO/F,KAAK,YAAa+I,EAAMiC,MAC/B9K,EAAM8H,cAUZiD,UAAW,WACT,IAAID,EAAOld,KAAKkd,KACZ1Z,EAASxD,KAAKwD,OACd8Z,EAAQJ,EAAKI,MACblO,EAAY8N,EAAK9N,UAEjBmO,EAAW,EAGf,GAAkB,MAAdnO,EAGF,OAAIgD,EAAMX,SAASjD,OAASiC,EAAM6M,GAAS9Z,OACzC4O,EAAMJ,MAAQxO,QAIhB4O,EAAMJ,MAAQsL,GAMhB,GAAkB,MAAdlO,GAA+B,MAAVkO,EAOzB,GAAkB,MAAdlO,GAA+B,MAAVkO,EAAzB,CAWA,GALkB,MAAdlO,IACFmO,EAAWnL,EAAMX,SAASvD,SAAW,GAIrB,MAAdkB,GAAmC,MAAdA,GAA+B,MAAVkO,EAAe,CAC3D,IAAItL,EAyFV,SAA+BuL,GAC7B,IAAIvL,EAAQI,EAAMJ,MAElB,OAAII,EAAMsH,OAAO,YACR1H,EAAQuL,EAGVvL,GAASuL,EAAWvL,EAAQuL,GAhGnBC,CAAsBD,GAOlC,OALIvL,EAAQxO,IACVxD,KAAKkT,IAAK,QAGZd,EAAMJ,MAsGZ,SAA+BA,EAAOuL,GACpC,IAAI/Z,EAASmP,EAAInP,OAEjB,OAAIwO,GAASxO,EACJwO,EAGLI,EAAMsH,OAAO,YACR1H,GAASxO,EAAS,GAGvB4O,EAAMX,SAAS1C,OAGb4D,EAAI8K,YAAc9K,EAAI0K,QACjB7Z,EAGF,EAGLmP,EAAI8K,UACCja,EAGF0S,KAAKC,MAAM3S,EAAS+Z,GAAYA,EA/HrBG,CAAsB1L,EAAOuL,IAK7C,GAAkB,MAAdnO,GAAmC,MAAdA,GAA+B,MAAVkO,EAAe,CAC3D,IAAIK,EAmIV,SAAgCJ,GAC9B,IAAIvL,EAAQI,EAAMJ,MAElB,OAAII,EAAMsH,OAAO,YACR1H,EAAQuL,GAKNrH,KAAK0H,KAAK5L,EAAQuL,GACd,GAAKA,EA7IHM,CAAuBN,GAOpC,OALII,EAAS,IACX3d,KAAKkT,IAAK,QAGZd,EAAMJ,MAmJZ,SAAgCA,EAAOuL,GACrC,IAAI/Z,EAASmP,EAAInP,OAEjB,OAAIwO,GAAS,EACJA,EAGLI,EAAMsH,OAAO,YACR1H,GAASxO,EAAS,GAGvB4O,EAAMX,SAAS1C,OAGb4D,EAAI8K,WAAa9K,EAAIyK,UAChB5Z,EAGF0S,KAAKC,MAAM3S,EAAS+Z,GAAYA,EAGlC,EAxKWO,CAAuBH,EAAQJ,IAI/CnN,EAAK,8BAA8BI,OAAOpB,GAAWoB,OAAO8M,EAAO,yBAjCjElL,EAAMJ,MAAQ,OAPdI,EAAMJ,MAAQxO,GAgDlB4Z,QAAS,WACP,OAAOhL,EAAMJ,OAAS,GAQxBqL,MAAO,WACL,OAAOjL,EAAMJ,OAAShS,KAAKwD,QAS7B+V,SAAU,WACR,IAAInK,EAAYtB,UAAUtK,OAAS,QAAsBqO,IAAjB/D,UAAU,GAAmBA,UAAU,QAAK+D,EAEpF,OAAKzC,IAIApP,KAAKkT,KAKQ,OAAd9D,EAC6B,MAAxBpP,KAAKkd,KAAK9N,WAAyC,MAApBpP,KAAKkd,KAAKI,MAIhC,OAAdlO,EAC6B,MAAxBpP,KAAKkd,KAAK9N,WAAyC,MAApBpP,KAAKkd,KAAKI,MAG3Ctd,KAAKkd,KAAK9N,YAAcA,GAjBtBpP,KAAKkT,IAyBhBuK,QAAS,WACP,OAAOrL,EAAMsH,OAAO,WAAwC,WAA3BtH,EAAMX,SAAStD,SAAwBiE,EAAMX,SAASjD,QAmK3F,OArDA,EAAOmE,EAAK,OAAQ,CAMlBlF,IAAK,WACH,OAAOzN,KAAK+d,IAQd5K,IAAK,SAAazR,GAChB,IAAIsc,EAAOtc,EAAM+D,OAAO,GACxBzF,KAAK+d,GAAK,CACR3O,UAAW1N,EAAM+D,OAAO,EAAG,GAC3B6X,MAAOU,EAAOvN,EAAMuN,GAAQvN,EAAMuN,GAAQA,EAAO,MAIvD,EAAOrL,EAAK,SAAU,CAOpBlF,IAAK,WACH,IAAIgE,EAAWW,EAAMX,SACjBjO,EAASmS,EAAWqC,KAAKK,OAAO7U,OAIpC,OAAIxD,KAAKyd,UACAja,EAAS,GAAKiN,EAAMgB,EAASvD,SAAW,GAAKuC,EAAMgB,EAAStD,SAG9D3K,EAAS,KAGpB,EAAOmP,EAAK,SAAU,CAMpBlF,IAAK,WACH,OAAOzN,KAAKkT,MAGTP,GAq/EPsL,MAxmCF,SAAgB7L,EAAOuD,EAAYsC,GAMjC,IAAIsE,EAAS,IAAIrH,EACbgJ,EAAW,EACXC,EAAc,EACdC,EAAc,EACdlO,GAAW,EACXoF,IAAU2B,GAAoB,CAChCoH,SAAS,GAEPJ,EAAQ,CAMVlN,MAAO,WACL/Q,KAAKse,kBASPC,MAAO,SAAe/b,GACpB,IAAK0N,IAAakC,EAAMlC,SAAU,CAChClQ,KAAK+S,UACL,IAAIyL,EAAQxe,KAAKye,QAAQjc,GACzB0b,EAAW,KACXC,EAAc1N,EAAM+N,EAAME,OAC1BN,EAAc3N,EAAM+N,EAAMG,OAC1B3e,KAAK4e,gBACL5e,KAAK6e,eACL5G,EAAO/F,KAAK,iBAShBgL,KAAM,SAAc1a,GAClB,IAAK4P,EAAMlC,SAAU,CACnB,IAAIkL,EAAkBhJ,EAAMX,SACxB5C,EAAauM,EAAgBvM,WAC7BD,EAAawM,EAAgBxM,WAC7BzK,EAAUiX,EAAgBjX,QAC1Bqa,EAAQxe,KAAKye,QAAQjc,GACrBsc,EAAUrO,EAAM+N,EAAME,OAASP,EAC/BY,EAAUtO,EAAM+N,EAAMG,OAASP,EAC/BY,EAAQ9I,KAAK+I,IAAIH,GAAW,GAC5BI,EAAQhJ,KAAK+I,IAAIF,GAAW,GAC5BI,EAAkBjJ,KAAKkJ,KAAKJ,EAAQE,GACpCG,EAAgBnJ,KAAKkJ,KAAKF,GAG9B,KAAe,KAFfhB,EAAWhI,KAAKoJ,KAAKD,EAAgBF,IAEhBjJ,KAAKqJ,GAAK1Q,GAM7B,OAAO,EALPrM,EAAMgd,kBACN7J,EAAW3C,KAAKJ,KAAKkM,EAtzEtBW,WAszEwC7Q,IACvC+G,EAAWqC,KAAKE,KAAKjX,UAAU0B,IAAIwB,EAAQsL,UAC3CwI,EAAO/F,KAAK,gBAalBwN,IAAK,SAAald,GAChB,IAAK4P,EAAMlC,SAAU,CACnB,IAAIyP,EAAmBvN,EAAMX,SACzB9C,EAAWgR,EAAiBhR,SAC5BE,EAAa8Q,EAAiB9Q,WAC9B1K,EAAUwb,EAAiBxb,QAC3Bqa,EAAQxe,KAAKye,QAAQjc,GACrBod,EAAY5f,KAAK4f,UAAUpd,GAC3Bqd,EAAgBrB,EAAME,MAAQP,EAC9B2B,EAAsB,IAAX5B,EAAiBhI,KAAKqJ,GACrCvf,KAAKka,SAED2F,EAAgBD,GAAaE,EAAWjR,EAC1C8G,EAAWhD,IAAIC,KAAK+C,EAAWG,UAAUsE,QAAQ,GAAG5J,OAAO7B,EAAU,OAC5DkR,GAAiBD,GAAaE,EAAWjR,EAClD8G,EAAWhD,IAAIC,KAAK+C,EAAWG,UAAUsE,QAAQ,GAAG5J,OAAO7B,EAAU,OAGrEgH,EAAW3C,KAAKJ,OAGlB+C,EAAWqC,KAAKE,KAAKjX,UAAUC,OAAOiD,EAAQsL,UAC9CzP,KAAK+f,kBACL/f,KAAKggB,iBACL/H,EAAO/F,KAAK,eAShBoM,eAAgB,WACd,IAAIrD,EAAQjb,KAERigB,EAAmB7N,EAAMX,SACzBhD,EAAiBwR,EAAiBxR,eAClCC,EAAgBuR,EAAiBvR,cAEjCD,GACF8N,EAAOzS,GAAGoN,EAAa,GAAIvB,EAAWqC,KAAKM,SAAS,SAAU9V,GAC5DyY,EAAMsD,MAAM/b,KACX8S,GAGD5G,GACF6N,EAAOzS,GAAGoN,EAAa,GAAIvB,EAAWqC,KAAKM,SAAS,SAAU9V,GAC5DyY,EAAMsD,MAAM/b,KACX8S,IASP4K,iBAAkB,WAChB3D,EAAOG,IAAIxF,EAAa,GAAIvB,EAAWqC,KAAKM,QAAShD,GACrDiH,EAAOG,IAAIxF,EAAa,GAAIvB,EAAWqC,KAAKM,QAAShD,IAQvDsJ,cAAe,WACb,IAAIuB,EAASngB,KAEbuc,EAAOzS,GAAGqN,EAAaxB,EAAWqC,KAAKM,QAASnJ,GAAS,SAAU3M,GACjE2d,EAAOjD,KAAK1a,KACX4P,EAAMX,SAAStC,UAAWmG,IAQ/ByK,gBAAiB,WACfxD,EAAOG,IAAIvF,EAAaxB,EAAWqC,KAAKM,QAAShD,IAQnDuJ,aAAc,WACZ,IAAIuB,EAASpgB,KAEbuc,EAAOzS,GAAGsN,EAAYzB,EAAWqC,KAAKM,SAAS,SAAU9V,GACvD4d,EAAOV,IAAIld,OASfwd,eAAgB,WACdzD,EAAOG,IAAItF,EAAYzB,EAAWqC,KAAKM,UAQzCmG,QAAS,SAAiBjc,GACxB,OAAI6U,EAAa9R,QAAQ/C,EAAMnB,OAAS,EAC/BmB,EAGFA,EAAMic,QAAQ,IAAMjc,EAAM6d,eAAe,IAQlDT,UAAW,SAAmBpd,GAC5B,IAAIiP,EAAWW,EAAMX,SAErB,OAAI4F,EAAa9R,QAAQ/C,EAAMnB,OAAS,EAC/BoQ,EAAS/C,cAGX+C,EAAShD,gBAQlByL,OAAQ,WAGN,OAFAhK,GAAW,EACXyF,EAAW7C,WAAWoH,SACfla,MAQT+S,QAAS,WAGP,OAFA7C,GAAW,EACXyF,EAAW7C,WAAWC,UACf/S,OAsBX,OAdAiY,EAAOnO,GAAG,eAAe,WACvB6L,EAAWqC,KAAKE,KAAKjX,UAAU0B,IAAIyP,EAAMX,SAAStN,QAAQqL,cAO5DyI,EAAOnO,GAAG,WAAW,WACnBmU,EAAMiC,mBACNjC,EAAM8B,kBACN9B,EAAM+B,iBACNzD,EAAOI,aAEFsB,GAy2BPqC,OAt2BF,SAAiBlO,EAAOuD,EAAYsC,GAMlC,IAAIsE,EAAS,IAAIrH,EACboL,EAAS,CAMXvP,MAAO,WACL/Q,KAAKwc,QAQPA,KAAM,WACJD,EAAOzS,GAAG,YAAa6L,EAAWqC,KAAKM,QAAStY,KAAKugB,YAQvD9D,OAAQ,WACNF,EAAOG,IAAI,YAAa/G,EAAWqC,KAAKM,UAQ1CiI,UAAW,SAAmB/d,GAC5BA,EAAM0E,mBAYV,OAJA+Q,EAAOnO,GAAG,WAAW,WACnBwW,EAAO7D,SACPF,EAAOI,aAEF2D,GAkzBPE,QA/yBF,SAAkBpO,EAAOuD,EAAYsC,GAMnC,IAAIsE,EAAS,IAAIrH,EASbuL,GAAW,EASXC,GAAY,EACZF,EAAU,CAMZzP,MAAO,WAOL/Q,KAAK2gB,GAAKhL,EAAWqC,KAAKM,QAAQ1V,iBAAiB,KACnD5C,KAAKwc,QAQPA,KAAM,WACJD,EAAOzS,GAAG,QAAS6L,EAAWqC,KAAKM,QAAStY,KAAK4gB,QAQnDnE,OAAQ,WACNF,EAAOG,IAAI,QAAS/G,EAAWqC,KAAKM,UAStCsI,MAAO,SAAepe,GAChBke,IACFle,EAAMgd,kBACNhd,EAAM0E,mBASV2Z,OAAQ,WAGN,GAFAH,GAAY,GAEPD,EAAU,CACb,IAAK,IAAInb,EAAI,EAAGA,EAAItF,KAAKkb,MAAM1X,OAAQ8B,IACrCtF,KAAKkb,MAAM5V,GAAGwb,WAAY,EAG5BL,GAAW,EAGb,OAAOzgB,MAQT+gB,OAAQ,WAGN,GAFAL,GAAY,EAERD,EAAU,CACZ,IAAK,IAAInb,EAAI,EAAGA,EAAItF,KAAKkb,MAAM1X,OAAQ8B,IACrCtF,KAAKkb,MAAM5V,GAAGwb,WAAY,EAG5BL,GAAW,EAGb,OAAOzgB,OAyCX,OAtCA,EAAOwgB,EAAS,QAAS,CAMvB/S,IAAK,WACH,OAAO+S,EAAQG,MAQnB1I,EAAOnO,GAAG,cAAc,WACtB0W,EAAQK,YAOV5I,EAAOnO,GAAG,aAAa,WACrB6L,EAAW7C,WAAW8G,OAAM,WAC1B4G,EAAQO,eAQZ9I,EAAOnO,GAAG,WAAW,WACnB0W,EAAQO,SACRP,EAAQ/D,SACRF,EAAOI,aAEF6D,GA2pBPQ,SAppBF,SAAmB5O,EAAOuD,EAAYsC,GAMpC,IAAIsE,EAAS,IAAIrH,EACbI,IAAU2B,GAAoB,CAChCoH,SAAS,GAEP2C,EAAW,CAObjQ,MAAO,WAOL/Q,KAAKihB,GAAKtL,EAAWqC,KAAKE,KAAKtV,iBA5BlB,mCAoCb5C,KAAKsS,GAAKqD,EAAWqC,KAAKE,KAAKtV,iBAAiB0U,IAQhDtX,KAAKkhB,eAAiB,CACpBtN,SAAU+B,EAAWqC,KAAKE,KAAKtV,iBAAiB2U,IAChD4J,KAAMxL,EAAWqC,KAAKE,KAAKtV,iBAAiB4U,KAE9CxX,KAAKohB,eAQPC,UAAW,WACT,IAAK,IAAI/b,EAAI,EAAGA,EAAItF,KAAKihB,GAAGzd,OAAQ8B,IAClCtF,KAAKua,SAASva,KAAKihB,GAAG3b,GAAGiT,WAS7B+I,aAAc,WACZ,IAAK,IAAIhc,EAAI,EAAGA,EAAItF,KAAKihB,GAAGzd,OAAQ8B,IAClCtF,KAAKwa,YAAYxa,KAAKihB,GAAG3b,GAAGiT,WAUhCgC,SAAU,SAAkBgH,GAC1B,IAAI9P,EAAWW,EAAMX,SACjB3K,EAAOya,EAASnP,EAAMJ,OAErBlL,GAIDA,IACFA,EAAK7F,UAAU0B,IAAI8O,EAAStN,QAAQgM,IAAIH,QACxCuE,EAASzN,GAAMjE,SAAQ,SAAUka,GAC/BA,EAAQ9b,UAAUC,OAAOuQ,EAAStN,QAAQgM,IAAIH,aAWpDwK,YAAa,SAAqB+G,GAChC,IAAIza,EAAOya,EAASnP,EAAMJ,OAEtBlL,GACFA,EAAK7F,UAAUC,OAAOkR,EAAMX,SAAStN,QAAQgM,IAAIH,SAOrDwR,cAAe,WACb,IAAIpP,EAAMX,SAAS1C,OAAnB,CAIA,IAAIoS,EAAOH,EAASE,eAAeC,KAC/BvN,EAAWoN,EAASE,eAAetN,SACvC5T,KAAKyhB,gBAAgBN,EAAMvN,GAEP,IAAhBxB,EAAMJ,OACRhS,KAAK0hB,aAAa9N,GAGhBxB,EAAMJ,QAAU2D,EAAWhD,IAAInP,QACjCxD,KAAK0hB,aAAaP,KAStBM,gBAAiB,WAGf,IAFA,IAAIhQ,EAAWW,EAAMX,SAEZkQ,EAAO7T,UAAUtK,OAAQoe,EAAQ,IAAIxW,MAAMuW,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAChFD,EAAMC,GAAQ/T,UAAU+T,GAG1BD,EAAM/e,SAAQ,SAAUif,GACtBA,EAAKjf,SAAQ,SAAUqB,GACrBA,EAAQjD,UAAUC,OAAOuQ,EAAStN,QAAQ8L,MAAMC,iBAUtDwR,aAAc,WAGZ,IAFA,IAAIjQ,EAAWW,EAAMX,SAEZsQ,EAAQjU,UAAUtK,OAAQoe,EAAQ,IAAIxW,MAAM2W,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACrFJ,EAAMI,GAASlU,UAAUkU,GAG3BJ,EAAM/e,SAAQ,SAAUif,GACtBA,EAAKjf,SAAQ,SAAUqB,GACrBA,EAAQjD,UAAU0B,IAAI8O,EAAStN,QAAQ8L,MAAMC,iBAUnDkR,YAAa,WACX,IAAK,IAAI9b,EAAI,EAAGA,EAAItF,KAAKsS,GAAG9O,OAAQ8B,IAClCtF,KAAKwc,KAAKxc,KAAKsS,GAAGhN,GAAGiT,WASzB0J,eAAgB,WACd,IAAK,IAAI3c,EAAI,EAAGA,EAAItF,KAAKsS,GAAG9O,OAAQ8B,IAClCtF,KAAKyc,OAAOzc,KAAKsS,GAAGhN,GAAGiT,WAU3BiE,KAAM,SAAc0F,GAClB,IAAK,IAAI5c,EAAI,EAAGA,EAAI4c,EAAS1e,OAAQ8B,IACnCiX,EAAOzS,GAAG,QAASoY,EAAS5c,GAAItF,KAAK4gB,OACrCrE,EAAOzS,GAAG,aAAcoY,EAAS5c,GAAItF,KAAK4gB,MAAOtL,IAUrDmH,OAAQ,SAAgByF,GACtB,IAAK,IAAI5c,EAAI,EAAGA,EAAI4c,EAAS1e,OAAQ8B,IACnCiX,EAAOG,IAAI,CAAC,QAAS,cAAewF,EAAS5c,KAYjDsb,MAAO,SAAepe,GACfyU,GAAoC,eAAfzU,EAAMnB,MAC9BmB,EAAM0E,iBAGR,IAAIkI,EAAY5M,EAAM2E,cAAcgb,aAAa,kBACjDxM,EAAWhD,IAAIC,KAAK+C,EAAWG,UAAUsE,QAAQhL,MAuCrD,OApCA,EAAO4R,EAAU,QAAS,CAMxBvT,IAAK,WACH,OAAOuT,EAAS1O,MASpB2F,EAAOnO,GAAG,CAAC,cAAe,eAAe,WACvCkX,EAASK,eAMXpJ,EAAOnO,GAAG,CAAC,cAAe,QAAQ,WAChCkX,EAASQ,mBAOXvJ,EAAOnO,GAAG,WAAW,WACnBkX,EAASiB,iBACTjB,EAASM,eACT/E,EAAOI,aAEFqE,GA6YPoB,SA1YF,SAAmBhQ,EAAOuD,EAAYsC,GAMpC,IAAIsE,EAAS,IAAIrH,EACbkN,EAAW,CAMbrR,MAAO,WACDqB,EAAMX,SAASlD,UACjBvO,KAAKwc,QASTA,KAAM,WACJD,EAAOzS,GAAG,QAASrJ,SAAUT,KAAKqiB,QAQpC5F,OAAQ,WACNF,EAAOG,IAAI,QAASjc,WAStB4hB,MAAO,SAAe7f,GACpB,IAAImM,EAAWyD,EAAMX,SAAS9C,SAER,KAAlBnM,EAAM8f,SACR3M,EAAWhD,IAAIC,KAAK+C,EAAWG,UAAUsE,QAAQ,GAAG5J,OAAO7B,EAAU,OAGjD,KAAlBnM,EAAM8f,SACR3M,EAAWhD,IAAIC,KAAK+C,EAAWG,UAAUsE,QAAQ,GAAG5J,OAAO7B,EAAU,SA6B3E,OAnBAsJ,EAAOnO,GAAG,CAAC,UAAW,WAAW,WAC/BsY,EAAS3F,YAOXxE,EAAOnO,GAAG,UAAU,WAClBsY,EAASrR,WAOXkH,EAAOnO,GAAG,WAAW,WACnByS,EAAOI,aAEFyF,GA2TPG,SAxTF,SAAmBnQ,EAAOuD,EAAYsC,GAMpC,IAAIsE,EAAS,IAAIrH,EACbqN,EAAW,CAMbxR,MAAO,WACL/Q,KAAKka,SACLla,KAAKue,QAEDnM,EAAMX,SAASnD,YACjBtO,KAAKwc,QASTtC,OAAQ,WACNla,KAAKwS,IAAK,GAQZO,QAAS,WACP/S,KAAKwS,IAAK,GASZ+L,MAAO,WACL,IAAItD,EAAQjb,KAEPA,KAAKwS,KAIVxS,KAAKka,SAED9H,EAAMX,SAASpD,UACbwC,EAAY7Q,KAAKoT,MACnBpT,KAAKoT,GAAKoP,aAAY,WACpBvH,EAAMwH,OAEN9M,EAAWhD,IAAIC,KAAK,KAEpBqI,EAAMsD,QAENtG,EAAO/F,KAAK,cACXlS,KAAK0iB,SAUdD,KAAM,WACJziB,KAAKoT,GAAKuP,cAAc3iB,KAAKoT,KAQ/BoJ,KAAM,WACJ,IAAI2D,EAASngB,KAEbuc,EAAOzS,GAAG,YAAa6L,EAAWqC,KAAKE,MAAM,WACvCiI,EAAO3N,IACT2N,EAAOsC,UAGXlG,EAAOzS,GAAG,WAAY6L,EAAWqC,KAAKE,MAAM,WACtCiI,EAAO3N,IACT2N,EAAO5B,YAUb9B,OAAQ,WACNF,EAAOG,IAAI,CAAC,YAAa,YAAa/G,EAAWqC,KAAKE,QAkF1D,OA/EA,EAAOqK,EAAU,OAAQ,CAOvB9U,IAAK,WAGH,OACSgD,EAHMkF,EAAWqC,KAAKK,OAAOjG,EAAMJ,OAAOmQ,aAAa,wBAMnD/P,EAAMX,SAASpD,aAShC4J,EAAOnO,GAAG,CAAC,UAAW,WAAW,WAC/ByY,EAAS9F,YAWXxE,EAAOnO,GAAG,CAAC,aAAc,cAAe,WAAW,WACjDyY,EAASE,UAEXxK,EAAOnO,GAAG,CAAC,QAAS,YAAY,WAC9ByY,EAASxP,UACTwP,EAASE,UASXxK,EAAOnO,GAAG,CAAC,YAAa,cAAc,WACpCyY,EAAShE,WASXtG,EAAOnO,GAAG,CAAC,SAAS,WAClByY,EAASrI,SACTqI,EAAShE,WAOXtG,EAAOnO,GAAG,UAAU,WAClByY,EAASxR,WAOXkH,EAAOnO,GAAG,WAAW,WACnByS,EAAOI,aAEF4F,GA8HPK,YA1GF,SAAsBxQ,EAAOuD,EAAYsC,GAMvC,IAAIsE,EAAS,IAAIrH,EAObzD,EAAWW,EAAMX,SASjBiG,EAASD,GAAgBhG,EAASlC,aAOlCvB,EAAW3B,OAAOsF,OAAO,GAAIF,GAC7BmR,EAAc,CAOhBnf,MAAO,SAAeiU,GACpB,QAAiC,IAAtBrV,OAAOwgB,WAChB,IAAK,IAAIC,KAASpL,EAChB,GAAIA,EAAO/M,eAAemY,IACpBzgB,OAAOwgB,WAAW,eAAerS,OAAOsS,EAAO,QAAQC,QACzD,OAAOrL,EAAOoL,GAMtB,OAAO9U,IAkCX,OA1BA3B,OAAOsF,OAAOF,EAAUmR,EAAYnf,MAAMiU,IAM1C6E,EAAOzS,GAAG,SAAUzH,OAAQ8M,GAAS,WACnCiD,EAAMX,SAAWD,EAAaC,EAAUmR,EAAYnf,MAAMiU,MACzDtF,EAAMX,SAAStC,WAMlB8I,EAAOnO,GAAG,UAAU,WAClB4N,EAASD,GAAgBC,GACzB1J,EAAW3B,OAAOsF,OAAO,GAAIF,MAO/BwG,EAAOnO,GAAG,WAAW,WACnByS,EAAOG,IAAI,SAAUra,WAEhBugB,IA2BLxQ,GAAqB,SAAU4Q,IAvtHnC,SAAmBC,EAAUC,GAC3B,GAA0B,mBAAfA,GAA4C,OAAfA,EACtC,MAAM,IAAInX,UAAU,sDAGtBkX,EAASrX,UAAYS,OAAO8W,OAAOD,GAAcA,EAAWtX,UAAW,CACrED,YAAa,CACXjK,MAAOuhB,EACP7W,UAAU,EACVD,cAAc,KAGd+W,GAAYpW,EAAgBmW,EAAUC,GA4sH1CE,CAAUhR,EAAO4Q,GAEjB,IA5pHoBK,EAChBC,EA2pHAC,GA5pHgBF,EA4pHMjR,EA3pHtBkR,EAhCN,WACE,GAAuB,oBAAZ9V,UAA4BA,QAAQgW,UAAW,OAAO,EACjE,GAAIhW,QAAQgW,UAAUC,KAAM,OAAO,EACnC,GAAqB,mBAAVC,MAAsB,OAAO,EAExC,IAEE,OADAC,QAAQ/X,UAAUgY,QAAQ3W,KAAKO,QAAQgW,UAAUG,QAAS,IAAI,iBACvD,EACP,MAAO5iB,GACP,OAAO,GAuBuB8iB,GAEzB,WACL,IACI3gB,EADA4gB,EAAQrX,EAAgB4W,GAG5B,GAAIC,EAA2B,CAC7B,IAAIS,EAAYtX,EAAgBzM,MAAM2L,YAEtCzI,EAASsK,QAAQgW,UAAUM,EAAOhW,UAAWiW,QAE7C7gB,EAAS4gB,EAAM/V,MAAM/N,KAAM8N,WAG7B,OAAOd,EAA2BhN,KAAMkD,KA+oH1C,SAASkP,IAGP,OAFA,EAAgBpS,KAAMoS,GAEfmR,EAAOxV,MAAM/N,KAAM8N,WAW5B,OARA,EAAasE,EAAO,CAAC,CACnB/M,IAAK,QACL3D,MAAO,WACL,IAAIuP,EAAanD,UAAUtK,OAAS,QAAsBqO,IAAjB/D,UAAU,GAAmBA,UAAU,GAAK,GACrF,OAAOP,EAAKd,EAAgB2F,EAAMxG,WAAY,QAAS5L,MAAMiN,KAAKjN,KAAMqM,OAAOsF,OAAO,GAAIoG,GAAY9G,QAInGmB,EAnBgB,CAoBvBD,8KCrxHmB6R,GAAAA,WACjB,0GAAc,SACVhkB,KAAKikB,UAAYxjB,SAASmC,iBAAiB,sFAK/C,WAGI,IAAMiE,EAAQH,IAAIwd,aAEdrd,EAAMod,UAAUzgB,OAAS,GACzBqD,EAAMsd,6CAKd,WAEkBzd,IAAIwd,aAEZD,UAAUphB,SAAQ,SAAAgN,GAENA,EAASjN,iBAAiB,+BAE9BY,OAAS,GACf,IAAI4O,GAAJ,WAAcvC,EAASzL,IAAM,CACzB/C,KAAM,WACNgN,UAAU,EACVD,IAAK,GACLH,QAAS,EACTC,QAAS,EACTqB,YAAa,CACT,IAAK,CACDrB,QAAS,MAGlB6C,uFAtCEiT,8KCFAI,GAAAA,WACjB,0GAAc,SACVpkB,KAAKqkB,iBAAmB,KACxBrkB,KAAKskB,YAAc,KACnBtkB,KAAKukB,aAAe,KACpBvkB,KAAKwkB,WAAa,KAClBxkB,KAAKykB,cAAgB,KAErBzkB,KAAK0kB,cAAgB,CAAEC,IAAK,QAASC,KAAM,YAC3C5kB,KAAK6kB,cAAgB,gsBACrB7kB,KAAK8kB,UAAY,KACjB9kB,KAAK+kB,eAAiB,KACtB/kB,KAAKglB,WAAa,KAElBhlB,KAAKilB,aAAe,4CAGxB,WACIjlB,KAAKqkB,iBAAmB5jB,SAASC,eAAe,mCAChDV,KAAKskB,YAAc7jB,SAASC,eAAe,8BAC3CV,KAAKukB,aAAe9jB,SAASC,eAAe,+BAC5CV,KAAKO,eAAiBE,SAASC,eAAe,yBAC9CV,KAAKwkB,WAAa/jB,SAASC,eAAe,qBAC1CV,KAAKykB,cAAgBhkB,SAASC,eAAe,8BAEzCV,KAAKwkB,YACLxkB,KAAKklB,2DAKb,WACI,IAAIC,EAAS1kB,SAAS6D,cAAc,UACpC6gB,EAAOC,IAAP,sDAA4D/iB,OAAOgjB,YAAYC,cAA/E,yDACAH,EAAOI,OAAQ,EAGf9kB,SAAS+kB,KAAKvJ,YAAYkJ,0BAG9B,WACI,IAAMtkB,EAAOb,KAEba,EAAKikB,UAAY,IAAIW,OAAOC,KAAKC,IAAI9kB,EAAK2jB,WAAY,CAClDoB,OAAQ,IAAIH,OAAOC,KAAKG,OAAOhlB,EAAK6jB,eACpCoB,KAAM,EACNC,kBAAkB,IAGtBllB,EAAKkkB,eAAiB,IAAIU,OAAOC,KAAKM,SAEtC,IAAM9c,EAAW,IAAIC,IAAI,qBAAsBC,SAASC,QACxDI,MAAMP,EAAU,CAAEQ,OAAQ,QACrBC,MAAK,SAAAC,GAAQ,OAAIA,EAASqc,UAC1Btc,MAAK,SAAAnI,GACF,IAAI0kB,EAAU,GAEV1kB,GAAQA,EAAKgC,OAAS,GACtBhC,EAAKqB,SAAQ,SAAAuG,GACT,IAAM+c,EAAa,CACfC,KAAMvlB,EAAKgkB,cACXwB,UAAW,UACXC,YAAa,EACbC,aAAc,EACdC,SAAU,EACVC,MAAO,EACPC,OAAQ,IAAIjB,OAAOC,KAAKiB,MAAM,GAAI,KAGhCC,EAAS,IAAInB,OAAOC,KAAKmB,OAAO,CAClCC,SAAU,IAAIrB,OAAOC,KAAKG,OAAO,CAAElB,IAAKoC,OAAOtH,WAAWrW,EAASub,KAAMC,IAAKmC,OAAOtH,WAAWrW,EAASwb,OACzGoC,KAAMb,EACNc,IAAKpmB,EAAKikB,YAGdoB,EAAQ3jB,KAAKqkB,GAEb,IAAMM,EAAa,IAAIzB,OAAOC,KAAKyB,WAAW,CAC1CC,QAAS,iDAAF,OAAmDhe,EAASie,MAA5D,YAGLC,EAAc7mB,SAASsF,cAAc,sBAAwBqD,EAAShF,GAAK,MACjFvD,EAAKokB,aAAa7b,EAAShF,IAAM,CAC7B4iB,KAAMb,EACNoB,mBAAoBX,EACpBY,aAAcpe,EACdke,YAAaA,EACbJ,WAAYA,GAGhBN,EAAOa,YAAY,SAAS,SAAU1mB,GAClCF,EAAK6mB,sBAAsBte,EAAShF,OAGxCkjB,EAAYxmB,iBAAiB,SAAS,SAAUC,GAC5CF,EAAK6mB,sBAAsBte,EAAShF,aAKnDujB,OAAM,SAAApX,GAAK,OAAID,QAAQsX,IAAIrX,MAEhC1P,EAAKwjB,iBAAiBvjB,iBAAiB,SAAS,SAAUC,GACtDF,EAAKgnB,wBAGThnB,EAAK0jB,aAAazjB,iBAAiB,SAAS,SAAUC,GAClDF,EAAKinB,wDAIb,SAAsBC,GAClB,IAAMlnB,EAAOb,KAEb,IAAK,IAAIqF,KAAOxE,EAAKokB,aAAc,CAC/B,IAAM7b,EAAWvI,EAAKokB,aAAa5f,GAE/BA,EAAImE,aAAeue,EAAWve,WAC9BJ,EAAS8d,WAAWc,KAAK,CACrBtB,OAAQtd,EAASme,mBACjBN,IAAKpmB,EAAKikB,UACVmD,aAAa,IAGjB7e,EAAS8d,WAAWgB,SAIxBrnB,EAAKikB,UAAUqD,YAAqH,IAAxGtnB,EAAKikB,UAAUsD,YAAY3P,SAAS5X,EAAKokB,aAAa8C,GAAYR,mBAAmBc,iBACjHxnB,EAAKynB,iBAAiB,IAAM,CAAE3D,IAAK9jB,EAAKokB,aAAa8C,GAAYP,aAAa7C,IAAKC,IAAK/jB,EAAKokB,aAAa8C,GAAYP,aAAa5C,qCAI3I,YAA8B,IAAZD,EAAY,EAAZA,IAAKC,EAAO,EAAPA,IACb/jB,EAAOb,KAEP8mB,EAAW,IAAIrB,OAAOC,KAAKG,OAAO,CAAElB,IAAKlF,WAAWkF,GAAMC,IAAKnF,WAAWmF,KAE5E2D,EAAY,GACZC,EAAe,IACfC,GAAyB,EAE7B,IAAK,IAAMC,KAAY7nB,EAAKokB,aAAc,CACtC,IAAM0D,EAAS9nB,EAAKokB,aAAayD,GAE3B7V,EAAW4S,OAAOC,KAAKkD,SAASC,UAAUC,uBAAuBhC,EAAU6B,EAAOpB,mBAAmBT,UAC3GyB,EAAUhmB,KAAK,CAAEmmB,SAAUA,EAAU7V,SAAUA,IAE3CA,EAAW,MACX4V,GAAyB,GAIjCF,EAAU1mB,MAAK,SAACoB,EAAG8lB,GAAJ,OAAU9lB,EAAE4P,SAAWkW,EAAElW,YAEnC4V,IACDD,EAAeD,EAAU,GAAG1V,UAIhC0V,EAAU1lB,SAAQ,SAACgQ,EAAUb,GACzBnR,EAAKokB,aAAapS,EAAS6V,UAAUpB,YAAYnO,MAAM6P,MAAQhX,EAAQ,KAG3EnR,EAAKmkB,WAAa,IAAIS,OAAOC,KAAKmB,OAAO,CACrCC,SAAUA,EACVG,IAAKpmB,EAAKikB,YAGdjkB,EAAKynB,iBAAiBE,EAAc,CAAE7D,IAAAA,EAAKC,IAAAA,sCAG/C,WACI,IAAM/jB,EAAOb,KAEba,EAAK4jB,cAAcxjB,UAAU0B,IAAI,QAC7B9B,EAAKmkB,YAAYnkB,EAAKmkB,WAAWiE,OAAO,MAExC1iB,UAAU2iB,YACV3iB,UAAU2iB,YAAYC,oBAAmB,SAAArC,GACrC,IAAMnC,EAAMmC,EAASsC,OAAOC,SACtBzE,EAAMkC,EAASsC,OAAOE,UAC5BzoB,EAAK0oB,gBAAgB,CAAE5E,IAAAA,EAAKC,IAAAA,OAGhC4E,MAAM,0GAId,WACI,IAAM3oB,EAAOb,KAIb,GAFAa,EAAK4jB,cAAcxjB,UAAU0B,IAAI,QAEF,KAA3B9B,EAAKyjB,YAAY5iB,MAAc,CAC/B,IAAMe,EAAQ5B,EAAKyjB,YAAY5iB,MAAM2B,MAAM,KAAKiX,KAAK,KACjDzZ,EAAKmkB,YAAYnkB,EAAKmkB,WAAWiE,OAAO,MAExCpoB,EAAKkkB,eAAe0E,QAAQ,CAAEC,QAASjnB,IAAS,SAACknB,EAASrW,GACtD,GAAe,OAAXA,EAAiB,CACjB,IAAMqR,EAAMgF,EAAQ,GAAGf,SAASxf,SAASub,MACnCC,EAAM+E,EAAQ,GAAGf,SAASxf,SAASwb,MAEzC/jB,EAAK0oB,gBAAgB,CAAE5E,IAAAA,EAAKC,IAAAA,SAE5BtU,QAAQsX,IAAR,+DAAoEtU,IACpEzS,EAAK4jB,cAAcxjB,UAAUC,OAAO,4CAMxD,SAAiB0oB,EAAjB,GAAuC,IAAZjF,EAAY,EAAZA,IAAKC,EAAO,EAAPA,IAGtBkC,EAAW,IAAIrB,OAAOC,KAAKG,OAAO,CAAElB,IAAKlF,WAAWkF,GAAMC,IAAKnF,WAAWmF,KAC1EiF,EAAS,IAAIpE,OAAOC,KAAKoE,OAAO,CAClClE,OAAQkB,EACRR,YAAa,EACbyD,cAAe,EACf9C,IAPSjnB,KAOC8kB,UACV8E,OAAQA,IARC5pB,KAWR8kB,UAAUkF,UAAUH,EAAOzB,YAAa,GAC7CyB,EAAOZ,OAAO,yCAGlB,wFApOiB7E,8KCCA6F,GAAAA,WACjB,0GAAc,2DAMd,WAGI,IAAMC,EAAQzpB,SAASC,eAAe,cAChCY,EAAMoF,IAAI6D,QAAQ4f,mBAAmB9nB,OAAO+G,SAASghB,SAAW/nB,OAAO+G,SAASzH,OAAQ,IAAKuoB,EAAMxoB,OAGzGW,OAAOgoB,QAAQC,aAAa,CAAE,IAAOhpB,GAAO,OAAQA,+EAdvC2oB,8KCDAM,GAAAA,WACjB,0GAAc,SACVvqB,KAAKwqB,WAAa,KAClBxqB,KAAKyqB,MAAQ,8CAGjB,WAGI,IAAM5jB,EAAQH,IAAIgkB,SAIlBroB,OAAOC,UAAYD,OAAOC,WAAa,GAMvCuE,EAAM2jB,WAAarpB,EAAE,oBACjB0F,EAAM2jB,WAAWhnB,OAAS,GAC1BqD,EAAM8jB,kBAQV9jB,EAAM4jB,MAAQtpB,EAAE,8BACZ0F,EAAM4jB,MAAMjnB,OAAS,GACrBqD,EAAM+jB,mBAONxhB,SAASzH,OAAO4D,QAAQ,2CAahC,WAEkBmB,IAAIgkB,SAOZF,WAAWK,MAAK,SAACxlB,EAAKhB,GAExB,IAAMymB,EAAY3pB,EAAEkD,GAGpBymB,EAAUhhB,GAAG,qBAAqB,SAACtH,EAAOuoB,GAEtC,IAAMC,EAAY7pB,EAAE,IAAD,OAAK4pB,EAAc,GAAG5I,aAAa,qBAAsB8I,OAE5E5oB,OAAOC,UAAUC,KAAK,CAClB,MAAS,iBACT,eAAkByoB,EAClB,eAAkB,cAM1BF,EAAUhhB,GAAG,mBAAmB,SAACtH,EAAOuoB,GAEpC,IAAMC,EAAY7pB,EAAE,IAAD,OAAK4pB,EAAc,GAAG5I,aAAa,qBAAsB8I,OAE5E5oB,OAAOC,UAAUC,KAAK,CAClB,MAAS,iBACT,eAAkByoB,EAClB,eAAkB,iDASlC,WAEI,IAAMnkB,EAAQH,IAAIgkB,SAQlB7jB,EAAM4jB,MAAMI,MAAK,SAACxlB,EAAKhB,GAEnB,IAAM6mB,EAAS7mB,EAAKD,GACd+mB,EAAOhqB,EAAEkD,GAGfwC,EAAMukB,gBAAgBD,EAAMD,qCAMpC,SAAgBG,EAAOC,GAGnB,IAAMzkB,EAAQH,IAAIgkB,SAIZa,EAAcF,EAAMG,KAAK,2BACzBC,EAAiBF,EAAY/nB,OAAS,EAE5C6nB,EAAMvhB,GAAG,UAAU,SAAC/I,GAOZ0qB,GACAF,EAAYrqB,SAGhB,IAAMwqB,EAAelJ,aAAY,WAM7B,IAAMmJ,EAASxqB,EAAE,IAAD,OAAKmqB,EAAL,6BAMhB,GALuBnqB,EAAE,2BAKNqC,OAAS,EAAG,CAE3Bmf,cAAc+I,GAKd,IAAME,EAAWN,EAAQjoB,MAAM,KAAK,GAGpChB,OAAOC,UAAUC,KAAK,CAClB,MAAS,eACT,SAAYqpB,SAGTD,EAAOnoB,OAAS,IAGvBmf,cAAc+I,GAKd7kB,EAAMukB,gBAAgBjqB,EAAE,IAAD,OAAKmqB,IAAYA,MAI7C,oFAhLMf,8KCUAsB,GAAAA,WAEjB,0GAAc,SACV7rB,KAAK8rB,iBAAmB,IAAI/rB,EAC5BC,KAAKuK,QAAU,IAAIvH,EACnBhD,KAAK2G,WAAa,IAAIX,EACtBhG,KAAK2H,OAAS,IAAID,EAClB1H,KAAK+I,aAAe,IAAIZ,EACxBnI,KAAKkkB,aAAe,IAAIF,GACxBhkB,KAAK+rB,aAAe,IAAI3H,GACxBpkB,KAAK2B,OAAS,IAAIsoB,GAClBjqB,KAAK0qB,SAAW,IAAIH,kDAIxB,WACI,IAAM1pB,EAAOb,KAMbS,SAASK,iBAAiB,yBAAyB,WAC/CD,EAAKmrB,wBAITvrB,SAASK,iBAAiB,oBAAoB,WACd,gBAAxBL,SAASwrB,YAAwD,aAAxBxrB,SAASwrB,YAClDprB,EAAKmrB,0DAMjB,WAGIhsB,KAAKksB,OAGL/qB,EAAEV,UAAU0B,aAGZnC,KAAKmsB,0CAIT,WACI,IAAK,IAAI7mB,KAAKtF,KACkB,mBAAjBA,KAAKsF,GAAG4mB,MACflsB,KAAKsF,GAAG4mB,0CAMpB,WACI,IAAK,IAAI5mB,KAAKtF,KACiC,mBAAhCA,KAAKsF,GAAG6mB,qBACfnsB,KAAKsF,GAAG6mB,kGA5DHN,GCPrBxpB,OAAOqE,IAAM,IAAImlB,GAGjBxpB,OAAOqE,IAAI0lB","sources":["webpack://onecap/./src/js/app/ResourcesListing.js","webpack://onecap/./src/js/app/tps.utility.js","webpack://onecap/./src/js/app/tps.navigation.js","webpack://onecap/./src/js/app/tps.header.js","webpack://onecap/./src/js/app/tps.cookies-modal.js","webpack://onecap/./node_modules/@glidejs/glide/dist/glide.esm.js","webpack://onecap/./src/js/app/tps.testimonials.js","webpack://onecap/./src/js/app/tps.locations.js","webpack://onecap/./src/js/app/tps.search.js","webpack://onecap/./src/js/app/tps.tracking.js","webpack://onecap/./src/js/app/TPS.js","webpack://onecap/./src/js/app/_main.js"],"sourcesContent":["export default class ResourcesListing {\r\n constructor() {\r\n this.getResourcesWS = \"/api/GetResourcesCards\";\r\n\r\n this.inputNodeAlias = null;\r\n this.inputSearch = null;\r\n this.buttonSearch = null;\r\n this.selectCategory = null;\r\n this.selectSort = null;\r\n this.resultsWrapper = null;\r\n this.loader = null;\r\n }\r\n\r\n init() {\r\n this.inputNodeAlias = document.getElementById('resource-listing-nodealiaspath');\r\n this.inputSearch = document.getElementById('resource-listing-search');\r\n this.buttonSearch = document.getElementById('resource-listing-search-submit');\r\n this.selectCategory = document.getElementById('resource-listing-category');\r\n this.selectSort = document.getElementById('resource-listing-sort');\r\n this.resultsWrapper = document.getElementById('resource-listing-results');\r\n this.loader = document.getElementById('resource-listing-loader');\r\n }\r\n\r\n initAfterFrameworks() {\r\n if (this.inputNodeAlias && this.inputSearch && this.buttonSearch && this.selectCategory && this.selectSort && this.resultsWrapper) {\r\n this.initFilters();\r\n this.getResults();\r\n }\r\n }\r\n\r\n initFilters() {\r\n const self = this;\r\n\r\n self.buttonSearch.addEventListener('click', function (e) { self.getResults() });\r\n self.selectCategory.addEventListener('change', function (e) { self.getResults() });\r\n self.selectSort.addEventListener('change', function (e) { self.getResults() });\r\n }\r\n\r\n getResults(pageNumber = 1) {\r\n const self = this;\r\n\r\n self.loader.classList.remove('hide');\r\n\r\n $.ajax({\r\n type: 'GET',\r\n url: self.getResourcesWS,\r\n dataType: 'json',\r\n data: {\r\n nodeAliasPath: self.inputNodeAlias.value,\r\n search: self.inputSearch.value,\r\n category: self.selectCategory.value,\r\n sort: self.selectSort.value,\r\n page: pageNumber\r\n }\r\n }).done(function (res) {\r\n if (res != null) {\r\n self.resultsWrapper.innerHTML = res.cardsHtml;\r\n $(self.resultsWrapper).foundation();\r\n self.initPagination();\r\n if (self.inputSearch.value != '') {\r\n window.dataLayer.push({\r\n event: \"resourceSearch\",\r\n query: self.inputSearch.value,\r\n });\r\n }\r\n }\r\n }).always(function () {\r\n self.loader.classList.add('hide');\r\n });\r\n }\r\n\r\n initPagination() {\r\n const self = this;\r\n\r\n const buttons = document.querySelectorAll('.tps-resource-listing-page-pagination [data-page]');\r\n\r\n buttons.forEach(function (button) {\r\n button.addEventListener('click', function (e) {\r\n self.getResults(button.dataset.page);\r\n });\r\n });\r\n }\r\n}\r\n","\r\nexport default class Utility {\r\n constructor() {}\r\n\r\n // init() {}\r\n\r\n // initAfterFrameworks() {}\r\n\r\n getCookie(a) {\r\n let result = [], c = document.cookie.split(\";\");\r\n a = new RegExp(\"^\\\\s*\" + a + \"=\\\\s*(.*?)\\\\s*$\");\r\n for (let d = 0; d < c.length; d++) {\r\n let e = c[d].match(a);\r\n e && result.push(e[1]);\r\n }\r\n return result[0];\r\n };\r\n\r\n setCookie(cname, cvalue, exdays) {\r\n let d = new Date();\r\n d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));\r\n let expires = 'expires=' + d.toUTCString();\r\n document.cookie = cname + '=' + cvalue + ';' + expires + ';path=/';\r\n };\r\n\r\n createElement(element, classes, id) {\r\n\r\n const elem = document.createElement(element);\r\n\r\n if (classes) {\r\n classes.trim().split(' ').forEach((classname) => {\r\n elem.classList.add(classname);\r\n });\r\n\r\n }\r\n\r\n if (id)\r\n elem.setAttribute('id', id);\r\n\r\n return elem;\r\n\r\n }\r\n\r\n createLinkElement(classes, tabindex, textContent, ariaLabel, href, id, target) {\r\n\r\n const elem = Utility.createElement('a', classes, id);\r\n\r\n if (tabindex)\r\n elem.setAttribute('tabindex', tabindex);\r\n\r\n if (textContent)\r\n elem.textContent = textContent;\r\n\r\n if (ariaLabel)\r\n elem.ariaLabel = ariaLabel;\r\n\r\n if (href)\r\n elem.setAttribute('href', href);\r\n\r\n if (target)\r\n elem.setAttribute('target', target);\r\n\r\n return elem;\r\n }\r\n\r\n // html decodes a string\r\n decodeHtml(htmlString) {\r\n\r\n var txt = document.createElement(\"textarea\");\r\n txt.innerHTML = htmlString;\r\n return txt.value;\r\n\r\n }\r\n\r\n elementIsVisible(element) {\r\n\r\n if (!element)\r\n return false;\r\n\r\n // check if the element has dimensions\r\n return element.offsetWidth > 0 || element.offsetHeight > 0 || element.getClientRects().length > 0;\r\n\r\n }\r\n\r\n // return an updated version of a provided url, where\r\n // a url parameter is changed (added / value changed / removed)\r\n updateUrlParameter(uri, key, value) {\r\n\r\n // remove the hash part before operating on the uri\r\n var i = uri.indexOf('#');\r\n var hash = i === -1 ? '' : uri.substr(i);\r\n uri = i === -1 ? uri : uri.substr(0, i);\r\n\r\n var re = new RegExp(\"([?&])\" + key + \"=.*?(&|$)\", \"i\");\r\n var separator = uri.indexOf('?') !== -1 ? \"&\" : \"?\";\r\n\r\n // if no value has been provided\r\n // remove the param by key from url\r\n // if it exists\r\n if (!value) {\r\n // remove key-value pair if value is empty\r\n uri = uri.replace(new RegExp(\"([?&]?)\" + key + \"=[^&]*\", \"i\"), '');\r\n if (uri.slice(-1) === '?') {\r\n uri = uri.slice(0, -1);\r\n }\r\n // replace first occurrence of & by ? if no ? is present\r\n if (uri.indexOf('?') === -1) {\r\n uri = uri.replace(/&/, '?')\r\n }\r\n }\r\n // if url CONTAINS param by key, && value exists\r\n // update the value\r\n else if (uri.match(re)) {\r\n uri = uri.replace(re, '$1' + key + \"=\" + encodeURIComponent(value) + '$2');\r\n }\r\n // if url DOES NOT CONTAIN param by key, && value exists\r\n // add the key & value as a new param to the url\r\n else {\r\n uri = uri + separator + key + \"=\" + encodeURIComponent(value);\r\n }\r\n\r\n return uri + hash;\r\n }\r\n\r\n showLoader() {\r\n const loader = document.querySelector('.tps-loader');\r\n if (loader) {\r\n loader.classList.remove('hide');\r\n }\r\n }\r\n\r\n hideLoader() {\r\n const loader = document.querySelector('.tps-loader');\r\n if (loader) {\r\n loader.classList.add('hide');\r\n }\r\n }\r\n \r\n\r\n}\r\n","export default class Navigation {\r\n constructor() {\r\n this.offcanvasUtilityItems = document.querySelectorAll('.tps-site-offcanvas-utility-menu-list-item.level-1');\r\n this.mobileItems = document.querySelectorAll('.tps-site-navigation-mobile-list-item.level-1');\r\n this.utilityItems = document.querySelectorAll('.tps-site-header-utility-menu-list-item.level-1');\r\n this.menuItems = document.querySelectorAll('.tps-site-navigation-list-item.level-1');\r\n this.menuItemsDropdownToggles = document.querySelectorAll('.tps-menu-link-toggle');\r\n this.isTouchDevice = ('ontouchstart' in window) || (navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0);\r\n }\r\n\r\n init() {\r\n\r\n const _self = tps.navigation;\r\n\r\n _self.setupDropdownEvents();\r\n\r\n }\r\n\r\n //initAfterFrameworks() { }\r\n\r\n setupDropdownEvents() {\r\n\r\n const _self = tps.navigation;\r\n\r\n // if its not a touch device\r\n // add the mouse events (mouseover, mouseout)\r\n if (!self.isTouchDevice) {\r\n\r\n _self.utilityItems.forEach(item => {\r\n _self.addMouseEvents(item)\r\n });\r\n\r\n _self.menuItems.forEach(item => {\r\n _self.addMouseEvents(item)\r\n });\r\n }\r\n\r\n _self.menuItemsDropdownToggles.forEach(toggle => {\r\n\r\n toggle.addEventListener('click', evt => {\r\n evt.preventDefault();\r\n const elem = evt.currentTarget;\r\n\r\n if (elem.ariaExpanded === \"true\") {\r\n _self.clearItemActiveState(elem.parentElement, elem);\r\n } else {\r\n _self.clearAllItemActiveStates();\r\n _self.applyItemActiveState(elem.parentElement, elem);\r\n }\r\n\r\n });\r\n\r\n });\r\n\r\n }\r\n\r\n addMouseEvents(item) {\r\n const _self = tps.navigation;\r\n\r\n item.addEventListener(\"mouseover\", evt => {\r\n\r\n const elem = evt.currentTarget;\r\n _self.clearAllItemActiveStates();\r\n _self.applyItemActiveState(elem);\r\n });\r\n\r\n item.addEventListener(\"mouseout\", evt => {\r\n const elem = evt.currentTarget;\r\n _self.clearItemActiveState(elem);\r\n });\r\n }\r\n\r\n clearAllItemActiveStates() {\r\n const _self = tps.navigation;\r\n\r\n _self.menuItems.forEach(item => {\r\n _self.clearItemActiveState(item);\r\n });\r\n\r\n }\r\n\r\n applyItemActiveState(item, toggler) {\r\n\r\n if (!toggler) {\r\n toggler = item.querySelector('.tps-menu-link-toggle');\r\n }\r\n\r\n item.classList.add('expanded');\r\n\r\n if (toggler) {\r\n toggler.ariaExpanded = true\r\n } \r\n\r\n }\r\n\r\n clearItemActiveState(item, toggler) {\r\n\r\n if (!toggler) {\r\n toggler = item.querySelector('.tps-menu-link-toggle');\r\n }\r\n\r\n item.classList.remove('expanded');\r\n\r\n if (toggler) {\r\n toggler.ariaExpanded = false;\r\n }\r\n\r\n }\r\n\r\n\r\n}\r\n","\r\nexport default class Header {\r\n constructor() {\r\n this.header = document.querySelector('header');\r\n this.isTouchDevice = ('ontouchstart' in window) || (navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0);\r\n this.lastKnownScrollPosition = 0;\r\n this.ticking = false;\r\n\r\n }\r\n\r\n // init() {}\r\n\r\n initAfterFrameworks() {\r\n\r\n const _self = tps.header;\r\n\r\n // we only care about the sticky header on\r\n // larger screens\r\n if (_self.header) {\r\n _self.setupScrollEvents();\r\n }\r\n }\r\n\r\n setupScrollEvents() {\r\n\r\n const _self = tps.header;\r\n\r\n _self.lastKnownScrollPosition = window.scrollY;\r\n _self.checkScrollPosition();\r\n\r\n document.addEventListener('scroll', evt => {\r\n _self.lastKnownScrollPosition = window.scrollY;\r\n \r\n if (!_self.ticking) {\r\n window.requestAnimationFrame(function () {\r\n _self.checkScrollPosition();\r\n _self.ticking = false;\r\n });\r\n\r\n _self.ticking = true;\r\n }\r\n });\r\n\r\n\r\n }\r\n\r\n checkScrollPosition() {\r\n\r\n const _self = tps.header;\r\n const activeMenuItems = document.querySelectorAll('.tps-site-header li.expanded');\r\n // reset all the active menu items\r\n // when the menu is scrolling\r\n activeMenuItems.forEach(item => {\r\n tps.navigation.clearItemActiveState(item);\r\n });\r\n\r\n if (_self.lastKnownScrollPosition > 0) {\r\n document.body.classList.add('tps-header-sticky')\r\n } else {\r\n document.body.classList.remove('tps-header-sticky')\r\n }\r\n }\r\n\r\n}\r\n","export default class CookiesModal {\r\n\r\n constructor() {\r\n this.disclaimerModal = document.getElementById('cookies-disclaimer-modal');\r\n this.disclaimerModalReveal = null;\r\n this.disclaimerModalAcceptButton = document.getElementById('cookies-disclaimer-modal-accept');\r\n this.disclaimerModalSettingsButton = document.getElementById('cookies-disclaimer-modal-settings');\r\n this.settingsModal = document.getElementById('cookies-settings-modal');\r\n this.settingsModalReveal = null;\r\n this.settingsModalStatisticsSwitch = document.getElementById('cookies-settings-modal-statistics-switch');\r\n this.settingsModalStatisticsItemSwitches = document.querySelectorAll('[id^=cookies-settings-modal-statistics-switch-item-');\r\n this.settingsModalFooter = document.getElementById('cookies-settings-modal-footer');\r\n this.settingsModalConfirmButton = document.getElementById('cookies-settings-modal-confirm');\r\n this.settingsModalValue = document.getElementById('cookies-settings-modal-value');\r\n \r\n }\r\n\r\n // init() {}\r\n\r\n initAfterFrameworks() {\r\n const _self = tps.cookiesModal;\r\n\r\n if (!_self.disclaimerModal || !_self.settingsModal) {\r\n return;\r\n }\r\n\r\n if (_self.disclaimerModal) {\r\n _self.disclaimerModalReveal = $(_self.disclaimerModal)\r\n }\r\n\r\n if (_self.settingsModal) {\r\n _self.settingsModalReveal = $(_self.settingsModal)\r\n }\r\n\r\n\r\n _self.getIndividualCookieSettings();\r\n\r\n if (_self.disclaimerModal.dataset.enabled === \"true\") {\r\n _self.disclaimerModalReveal.foundation('open');\r\n }\r\n\r\n if (_self.disclaimerModalAcceptButton) {\r\n _self.disclaimerModalAcceptButton.addEventListener('click', function (e) {\r\n const fetchUrl = new URL('/api/cookielevel/set', location.origin);\r\n const fetchParams = {\r\n cookieLevel: 1000\r\n };\r\n fetchUrl.search = new URLSearchParams(fetchParams).toString();\r\n fetch(fetchUrl, { method: 'POST' }).then(response => {\r\n _self.disclaimerModal.dataset.enabled = false;\r\n _self.disclaimerModalReveal.foundation('close');\r\n _self.setIndividualCookieSettings();\r\n });\r\n });\r\n }\r\n\r\n if (_self.disclaimerModalSettingsButton) {\r\n _self.disclaimerModalSettingsButton.addEventListener('click', function (e) {\r\n _self.disclaimerModalReveal.foundation('close');\r\n _self.settingsModalReveal.foundation('open');\r\n\r\n _self.settingsModalReveal.on('closed.zf.reveal', (e) => {\r\n _self.disclaimerModalReveal.foundation('open');\r\n });\r\n });\r\n }\r\n\r\n // \"simple\" triggers - no need to reopen the disclaimer modal\r\n const settingsModalTriggers = document.querySelectorAll('[data-settings-modal-trigger]');\r\n settingsModalTriggers.forEach(trigger => {\r\n trigger.addEventListener('click', function () {\r\n _self.settingsModalReveal.foundation('open');\r\n });\r\n });\r\n\r\n if (_self.settingsModalStatisticsSwitch) {\r\n _self.settingsModalStatisticsSwitch.addEventListener('change', function (e) {\r\n _self.settingsModalFooter.classList.remove('hide');\r\n if (_self.settingsModalStatisticsSwitch.checked === true) {\r\n _self.settingsModalValue.value = 1000;\r\n _self.setStatisticsItemSwitchesState(true);\r\n } else {\r\n _self.settingsModalValue.value = 0;\r\n _self.setStatisticsItemSwitchesState(false);\r\n }\r\n });\r\n }\r\n\r\n _self.settingsModalStatisticsItemSwitches.forEach(switchItem => switchItem.addEventListener('change', function (e) {\r\n _self.settingsModalFooter.classList.remove('hide');\r\n\r\n if (_self.allStatisticsItemCookiesDisabled() === true) {\r\n // Uncheck main statistics switch\r\n _self.settingsModalStatisticsSwitch.checked = false;\r\n _self.settingsModalValue.value = 0;\r\n } else {\r\n // Check main statistics switch\r\n _self.settingsModalStatisticsSwitch.checked = true;\r\n _self.settingsModalValue.value = 1000;\r\n }\r\n }));\r\n\r\n if (_self.settingsModalConfirmButton) {\r\n _self.settingsModalConfirmButton.addEventListener('click', function (e) {\r\n \r\n const fetchUrl = new URL('/api/cookielevel/set', location.origin);\r\n const fetchParams = {\r\n cookieLevel: parseInt(_self.settingsModalValue.value)\r\n };\r\n fetchUrl.search = new URLSearchParams(fetchParams).toString();\r\n fetch(fetchUrl, { method: 'POST' }).then(response => {\r\n _self.settingsModalReveal.foundation('close')\r\n _self.disclaimerModalReveal.foundation('close')\r\n _self.setIndividualCookieSettings();\r\n _self.settingsModalFooter.classList.add('hide');\r\n });\r\n });\r\n }\r\n\r\n if (_self.settingsModal) {\r\n _self.handleKeypressEvents();\r\n }\r\n }\r\n\r\n\r\n setStatisticsItemSwitchesState(enabled) {\r\n const _self = tps.cookiesModal;\r\n _self.settingsModalStatisticsItemSwitches.forEach(switchItem =>{\r\n switchItem.checked = enabled;\r\n });\r\n }\r\n\r\n getIndividualCookieSettings() {\r\n const _self = tps.cookiesModal;\r\n let cookie = tps.utility.getCookie(\"MeridianOneCapIndividualCookieSettings\");\r\n if (!cookie) {\r\n // Set default\r\n _self.setIndividualCookieSettings();\r\n return;\r\n }\r\n\r\n cookie = JSON.parse(cookie);\r\n\r\n _self.settingsModalStatisticsItemSwitches.forEach(switchItem => {\r\n if (cookie.hasOwnProperty(switchItem.dataset.cookieKey)) {\r\n switchItem.checked = cookie[switchItem.dataset.cookieKey];\r\n }\r\n });\r\n\r\n if (_self.allStatisticsItemCookiesDisabled() === true) {\r\n // Uncheck main statistics switch\r\n _self.settingsModalStatisticsSwitch.checked = false;\r\n _self.settingsModalValue.value = 0;\r\n }\r\n }\r\n\r\n setIndividualCookieSettings() {\r\n const cookieObj = {};\r\n const _self = tps.cookiesModal;\r\n\r\n _self.settingsModalStatisticsItemSwitches.forEach(switchItem => {\r\n cookieObj[switchItem.dataset.cookieKey] = switchItem.checked;\r\n });\r\n\r\n tps.utility.setCookie(\"MeridianOneCapIndividualCookieSettings\", JSON.stringify(cookieObj), 365);\r\n }\r\n\r\n allStatisticsItemCookiesDisabled() {\r\n const _self = tps.cookiesModal;\r\n\r\n for (let i = 0; i < _self.settingsModalStatisticsItemSwitches.length; i++) {\r\n if (_self.settingsModalStatisticsItemSwitches[i].checked === true) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n handleKeypressEvents() {\r\n const _self = tps.cookiesModal;\r\n const settingsModalCheckbox = _self.settingsModal.querySelectorAll('input[type=\"checkbox\"]');\r\n\r\n if (settingsModalCheckbox && _self.settingsModalStatisticsSwitch) {\r\n\r\n settingsModalCheckbox.forEach((checkbox) => {\r\n\r\n // change the checked state of a checkbox button when the Enter key is pressed\r\n checkbox.addEventListener('keydown', function (event) {\r\n const targetCheckbox = event.target;\r\n\r\n if (event.key === 'Enter') {\r\n // Toggle the checked state\r\n if (targetCheckbox.checked) {\r\n if (targetCheckbox == _self.settingsModalStatisticsSwitch) {\r\n _self.settingsModalValue.value = 0;\r\n _self.setStatisticsItemSwitchesState(false);\r\n targetCheckbox.checked = false;\r\n } else {\r\n targetCheckbox.checked = false;\r\n _self.settingsModalStatisticsSwitch.checked = false;\r\n }\r\n } else {\r\n if (targetCheckbox == _self.settingsModalStatisticsSwitch) {\r\n _self.settingsModalValue.value = 1000;\r\n _self.setStatisticsItemSwitchesState(true);\r\n targetCheckbox.checked = true;\r\n } else {\r\n targetCheckbox.checked = true;\r\n\r\n // Check if all remaining checkboxes are checked\r\n const checkboxItems = Array.from(settingsModalCheckbox).slice(1);\r\n const allChecked = checkboxItems.every(checkbox => checkbox.checked);\r\n if (allChecked) {\r\n _self.settingsModalStatisticsSwitch.checked = true;\r\n } \r\n }\r\n }\r\n }\r\n });\r\n });\r\n\r\n }\r\n \r\n }\r\n \r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","/*!\n * Glide.js v3.5.2\n * (c) 2013-2021 Jędrzej Chałubek (https://github.com/jedrzejchalubek/)\n * Released under the MIT License.\n */\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nfunction _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = _getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n}\n\nfunction _get() {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n _get = Reflect.get;\n } else {\n _get = function _get(target, property, receiver) {\n var base = _superPropBase(target, property);\n\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(arguments.length < 3 ? target : receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get.apply(this, arguments);\n}\n\nvar defaults = {\n /**\n * Type of the movement.\n *\n * Available types:\n * `slider` - Rewinds slider to the start/end when it reaches the first or last slide.\n * `carousel` - Changes slides without starting over when it reaches the first or last slide.\n *\n * @type {String}\n */\n type: 'slider',\n\n /**\n * Start at specific slide number defined with zero-based index.\n *\n * @type {Number}\n */\n startAt: 0,\n\n /**\n * A number of slides visible on the single viewport.\n *\n * @type {Number}\n */\n perView: 1,\n\n /**\n * Focus currently active slide at a specified position in the track.\n *\n * Available inputs:\n * `center` - Current slide will be always focused at the center of a track.\n * `0,1,2,3...` - Current slide will be focused on the specified zero-based index.\n *\n * @type {String|Number}\n */\n focusAt: 0,\n\n /**\n * A size of the gap added between slides.\n *\n * @type {Number}\n */\n gap: 10,\n\n /**\n * Change slides after a specified interval. Use `false` for turning off autoplay.\n *\n * @type {Number|Boolean}\n */\n autoplay: false,\n\n /**\n * Stop autoplay on mouseover event.\n *\n * @type {Boolean}\n */\n hoverpause: true,\n\n /**\n * Allow for changing slides with left and right keyboard arrows.\n *\n * @type {Boolean}\n */\n keyboard: true,\n\n /**\n * Stop running `perView` number of slides from the end. Use this\n * option if you don't want to have an empty space after\n * a slider. Works only with `slider` type and a\n * non-centered `focusAt` setting.\n *\n * @type {Boolean}\n */\n bound: false,\n\n /**\n * Minimal swipe distance needed to change the slide. Use `false` for turning off a swiping.\n *\n * @type {Number|Boolean}\n */\n swipeThreshold: 80,\n\n /**\n * Minimal mouse drag distance needed to change the slide. Use `false` for turning off a dragging.\n *\n * @type {Number|Boolean}\n */\n dragThreshold: 120,\n\n /**\n * A number of slides moved on single swipe.\n *\n * Available types:\n * `` - Moves slider by one slide per swipe\n * `|` - Moves slider between views per swipe (number of slides defined in `perView` options)\n *\n * @type {String}\n */\n perSwipe: '',\n\n /**\n * Moving distance ratio of the slides on a swiping and dragging.\n *\n * @type {Number}\n */\n touchRatio: 0.5,\n\n /**\n * Angle required to activate slides moving on swiping or dragging.\n *\n * @type {Number}\n */\n touchAngle: 45,\n\n /**\n * Duration of the animation in milliseconds.\n *\n * @type {Number}\n */\n animationDuration: 400,\n\n /**\n * Allows looping the `slider` type. Slider will rewind to the first/last slide when it's at the start/end.\n *\n * @type {Boolean}\n */\n rewind: true,\n\n /**\n * Duration of the rewinding animation of the `slider` type in milliseconds.\n *\n * @type {Number}\n */\n rewindDuration: 800,\n\n /**\n * Easing function for the animation.\n *\n * @type {String}\n */\n animationTimingFunc: 'cubic-bezier(.165, .840, .440, 1)',\n\n /**\n * Wait for the animation to finish until the next user input can be processed\n *\n * @type {boolean}\n */\n waitForTransition: true,\n\n /**\n * Throttle costly events at most once per every wait milliseconds.\n *\n * @type {Number}\n */\n throttle: 10,\n\n /**\n * Moving direction mode.\n *\n * Available inputs:\n * - 'ltr' - left to right movement,\n * - 'rtl' - right to left movement.\n *\n * @type {String}\n */\n direction: 'ltr',\n\n /**\n * The distance value of the next and previous viewports which\n * have to peek in the current view. Accepts number and\n * pixels as a string. Left and right peeking can be\n * set up separately with a directions object.\n *\n * For example:\n * `100` - Peek 100px on the both sides.\n * { before: 100, after: 50 }` - Peek 100px on the left side and 50px on the right side.\n *\n * @type {Number|String|Object}\n */\n peek: 0,\n\n /**\n * Defines how many clones of current viewport will be generated.\n *\n * @type {Number}\n */\n cloningRatio: 1,\n\n /**\n * Collection of options applied at specified media breakpoints.\n * For example: display two slides per view under 800px.\n * `{\n * '800px': {\n * perView: 2\n * }\n * }`\n */\n breakpoints: {},\n\n /**\n * Collection of internally used HTML classes.\n *\n * @todo Refactor `slider` and `carousel` properties to single `type: { slider: '', carousel: '' }` object\n * @type {Object}\n */\n classes: {\n swipeable: 'glide--swipeable',\n dragging: 'glide--dragging',\n direction: {\n ltr: 'glide--ltr',\n rtl: 'glide--rtl'\n },\n type: {\n slider: 'glide--slider',\n carousel: 'glide--carousel'\n },\n slide: {\n clone: 'glide__slide--clone',\n active: 'glide__slide--active'\n },\n arrow: {\n disabled: 'glide__arrow--disabled'\n },\n nav: {\n active: 'glide__bullet--active'\n }\n }\n};\n\n/**\n * Outputs warning message to the bowser console.\n *\n * @param {String} msg\n * @return {Void}\n */\nfunction warn(msg) {\n console.error(\"[Glide warn]: \".concat(msg));\n}\n\n/**\n * Converts value entered as number\n * or string to integer value.\n *\n * @param {String} value\n * @returns {Number}\n */\nfunction toInt(value) {\n return parseInt(value);\n}\n/**\n * Converts value entered as number\n * or string to flat value.\n *\n * @param {String} value\n * @returns {Number}\n */\n\nfunction toFloat(value) {\n return parseFloat(value);\n}\n/**\n * Indicates whether the specified value is a string.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\nfunction isString(value) {\n return typeof value === 'string';\n}\n/**\n * Indicates whether the specified value is an object.\n *\n * @param {*} value\n * @return {Boolean}\n *\n * @see https://github.com/jashkenas/underscore\n */\n\nfunction isObject(value) {\n var type = _typeof(value);\n\n return type === 'function' || type === 'object' && !!value; // eslint-disable-line no-mixed-operators\n}\n/**\n * Indicates whether the specified value is a function.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n/**\n * Indicates whether the specified value is undefined.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\nfunction isUndefined(value) {\n return typeof value === 'undefined';\n}\n/**\n * Indicates whether the specified value is an array.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\nfunction isArray(value) {\n return value.constructor === Array;\n}\n\n/**\n * Creates and initializes specified collection of extensions.\n * Each extension receives access to instance of glide and rest of components.\n *\n * @param {Object} glide\n * @param {Object} extensions\n *\n * @returns {Object}\n */\n\nfunction mount(glide, extensions, events) {\n var components = {};\n\n for (var name in extensions) {\n if (isFunction(extensions[name])) {\n components[name] = extensions[name](glide, components, events);\n } else {\n warn('Extension must be a function');\n }\n }\n\n for (var _name in components) {\n if (isFunction(components[_name].mount)) {\n components[_name].mount();\n }\n }\n\n return components;\n}\n\n/**\n * Defines getter and setter property on the specified object.\n *\n * @param {Object} obj Object where property has to be defined.\n * @param {String} prop Name of the defined property.\n * @param {Object} definition Get and set definitions for the property.\n * @return {Void}\n */\nfunction define(obj, prop, definition) {\n Object.defineProperty(obj, prop, definition);\n}\n/**\n * Sorts aphabetically object keys.\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction sortKeys(obj) {\n return Object.keys(obj).sort().reduce(function (r, k) {\n r[k] = obj[k];\n return r[k], r;\n }, {});\n}\n/**\n * Merges passed settings object with default options.\n *\n * @param {Object} defaults\n * @param {Object} settings\n * @return {Object}\n */\n\nfunction mergeOptions(defaults, settings) {\n var options = Object.assign({}, defaults, settings); // `Object.assign` do not deeply merge objects, so we\n // have to do it manually for every nested object\n // in options. Although it does not look smart,\n // it's smaller and faster than some fancy\n // merging deep-merge algorithm script.\n\n if (settings.hasOwnProperty('classes')) {\n options.classes = Object.assign({}, defaults.classes, settings.classes);\n\n if (settings.classes.hasOwnProperty('direction')) {\n options.classes.direction = Object.assign({}, defaults.classes.direction, settings.classes.direction);\n }\n\n if (settings.classes.hasOwnProperty('type')) {\n options.classes.type = Object.assign({}, defaults.classes.type, settings.classes.type);\n }\n\n if (settings.classes.hasOwnProperty('slide')) {\n options.classes.slide = Object.assign({}, defaults.classes.slide, settings.classes.slide);\n }\n\n if (settings.classes.hasOwnProperty('arrow')) {\n options.classes.arrow = Object.assign({}, defaults.classes.arrow, settings.classes.arrow);\n }\n\n if (settings.classes.hasOwnProperty('nav')) {\n options.classes.nav = Object.assign({}, defaults.classes.nav, settings.classes.nav);\n }\n }\n\n if (settings.hasOwnProperty('breakpoints')) {\n options.breakpoints = Object.assign({}, defaults.breakpoints, settings.breakpoints);\n }\n\n return options;\n}\n\nvar EventsBus = /*#__PURE__*/function () {\n /**\n * Construct a EventBus instance.\n *\n * @param {Object} events\n */\n function EventsBus() {\n var events = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, EventsBus);\n\n this.events = events;\n this.hop = events.hasOwnProperty;\n }\n /**\n * Adds listener to the specifed event.\n *\n * @param {String|Array} event\n * @param {Function} handler\n */\n\n\n _createClass(EventsBus, [{\n key: \"on\",\n value: function on(event, handler) {\n if (isArray(event)) {\n for (var i = 0; i < event.length; i++) {\n this.on(event[i], handler);\n }\n\n return;\n } // Create the event's object if not yet created\n\n\n if (!this.hop.call(this.events, event)) {\n this.events[event] = [];\n } // Add the handler to queue\n\n\n var index = this.events[event].push(handler) - 1; // Provide handle back for removal of event\n\n return {\n remove: function remove() {\n delete this.events[event][index];\n }\n };\n }\n /**\n * Runs registered handlers for specified event.\n *\n * @param {String|Array} event\n * @param {Object=} context\n */\n\n }, {\n key: \"emit\",\n value: function emit(event, context) {\n if (isArray(event)) {\n for (var i = 0; i < event.length; i++) {\n this.emit(event[i], context);\n }\n\n return;\n } // If the event doesn't exist, or there's no handlers in queue, just leave\n\n\n if (!this.hop.call(this.events, event)) {\n return;\n } // Cycle through events queue, fire!\n\n\n this.events[event].forEach(function (item) {\n item(context || {});\n });\n }\n }]);\n\n return EventsBus;\n}();\n\nvar Glide$1 = /*#__PURE__*/function () {\n /**\r\n * Construct glide.\r\n *\r\n * @param {String} selector\r\n * @param {Object} options\r\n */\n function Glide(selector) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Glide);\n\n this._c = {};\n this._t = [];\n this._e = new EventsBus();\n this.disabled = false;\n this.selector = selector;\n this.settings = mergeOptions(defaults, options);\n this.index = this.settings.startAt;\n }\n /**\r\n * Initializes glide.\r\n *\r\n * @param {Object} extensions Collection of extensions to initialize.\r\n * @return {Glide}\r\n */\n\n\n _createClass(Glide, [{\n key: \"mount\",\n value: function mount$1() {\n var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this._e.emit('mount.before');\n\n if (isObject(extensions)) {\n this._c = mount(this, extensions, this._e);\n } else {\n warn('You need to provide a object on `mount()`');\n }\n\n this._e.emit('mount.after');\n\n return this;\n }\n /**\r\n * Collects an instance `translate` transformers.\r\n *\r\n * @param {Array} transformers Collection of transformers.\r\n * @return {Void}\r\n */\n\n }, {\n key: \"mutate\",\n value: function mutate() {\n var transformers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n if (isArray(transformers)) {\n this._t = transformers;\n } else {\n warn('You need to provide a array on `mutate()`');\n }\n\n return this;\n }\n /**\r\n * Updates glide with specified settings.\r\n *\r\n * @param {Object} settings\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"update\",\n value: function update() {\n var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.settings = mergeOptions(this.settings, settings);\n\n if (settings.hasOwnProperty('startAt')) {\n this.index = settings.startAt;\n }\n\n this._e.emit('update');\n\n return this;\n }\n /**\r\n * Change slide with specified pattern. A pattern must be in the special format:\r\n * `>` - Move one forward\r\n * `<` - Move one backward\r\n * `={i}` - Go to {i} zero-based slide (eq. '=1', will go to second slide)\r\n * `>>` - Rewinds to end (last slide)\r\n * `<<` - Rewinds to start (first slide)\r\n * `|>` - Move one viewport forward\r\n * `|<` - Move one viewport backward\r\n *\r\n * @param {String} pattern\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"go\",\n value: function go(pattern) {\n this._c.Run.make(pattern);\n\n return this;\n }\n /**\r\n * Move track by specified distance.\r\n *\r\n * @param {String} distance\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"move\",\n value: function move(distance) {\n this._c.Transition.disable();\n\n this._c.Move.make(distance);\n\n return this;\n }\n /**\r\n * Destroy instance and revert all changes done by this._c.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n this._e.emit('destroy');\n\n return this;\n }\n /**\r\n * Start instance autoplaying.\r\n *\r\n * @param {Boolean|Number} interval Run autoplaying with passed interval regardless of `autoplay` settings\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"play\",\n value: function play() {\n var interval = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n if (interval) {\n this.settings.autoplay = interval;\n }\n\n this._e.emit('play');\n\n return this;\n }\n /**\r\n * Stop instance autoplaying.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"pause\",\n value: function pause() {\n this._e.emit('pause');\n\n return this;\n }\n /**\r\n * Sets glide into a idle status.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"disable\",\n value: function disable() {\n this.disabled = true;\n return this;\n }\n /**\r\n * Sets glide into a active status.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"enable\",\n value: function enable() {\n this.disabled = false;\n return this;\n }\n /**\r\n * Adds cuutom event listener with handler.\r\n *\r\n * @param {String|Array} event\r\n * @param {Function} handler\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"on\",\n value: function on(event, handler) {\n this._e.on(event, handler);\n\n return this;\n }\n /**\r\n * Checks if glide is a precised type.\r\n *\r\n * @param {String} name\r\n * @return {Boolean}\r\n */\n\n }, {\n key: \"isType\",\n value: function isType(name) {\n return this.settings.type === name;\n }\n /**\r\n * Gets value of the core options.\r\n *\r\n * @return {Object}\r\n */\n\n }, {\n key: \"settings\",\n get: function get() {\n return this._o;\n }\n /**\r\n * Sets value of the core options.\r\n *\r\n * @param {Object} o\r\n * @return {Void}\r\n */\n ,\n set: function set(o) {\n if (isObject(o)) {\n this._o = o;\n } else {\n warn('Options must be an `object` instance.');\n }\n }\n /**\r\n * Gets current index of the slider.\r\n *\r\n * @return {Object}\r\n */\n\n }, {\n key: \"index\",\n get: function get() {\n return this._i;\n }\n /**\r\n * Sets current index a slider.\r\n *\r\n * @return {Object}\r\n */\n ,\n set: function set(i) {\n this._i = toInt(i);\n }\n /**\r\n * Gets type name of the slider.\r\n *\r\n * @return {String}\r\n */\n\n }, {\n key: \"type\",\n get: function get() {\n return this.settings.type;\n }\n /**\r\n * Gets value of the idle status.\r\n *\r\n * @return {Boolean}\r\n */\n\n }, {\n key: \"disabled\",\n get: function get() {\n return this._d;\n }\n /**\r\n * Sets value of the idle status.\r\n *\r\n * @return {Boolean}\r\n */\n ,\n set: function set(status) {\n this._d = !!status;\n }\n }]);\n\n return Glide;\n}();\n\nfunction Run (Glide, Components, Events) {\n var Run = {\n /**\n * Initializes autorunning of the glide.\n *\n * @return {Void}\n */\n mount: function mount() {\n this._o = false;\n },\n\n /**\n * Makes glides running based on the passed moving schema.\n *\n * @param {String} move\n */\n make: function make(move) {\n var _this = this;\n\n if (!Glide.disabled) {\n !Glide.settings.waitForTransition || Glide.disable();\n this.move = move;\n Events.emit('run.before', this.move);\n this.calculate();\n Events.emit('run', this.move);\n Components.Transition.after(function () {\n if (_this.isStart()) {\n Events.emit('run.start', _this.move);\n }\n\n if (_this.isEnd()) {\n Events.emit('run.end', _this.move);\n }\n\n if (_this.isOffset()) {\n _this._o = false;\n Events.emit('run.offset', _this.move);\n }\n\n Events.emit('run.after', _this.move);\n Glide.enable();\n });\n }\n },\n\n /**\n * Calculates current index based on defined move.\n *\n * @return {Number|Undefined}\n */\n calculate: function calculate() {\n var move = this.move,\n length = this.length;\n var steps = move.steps,\n direction = move.direction; // By default assume that size of view is equal to one slide\n\n var viewSize = 1; // While direction is `=` we want jump to\n // a specified index described in steps.\n\n if (direction === '=') {\n // Check if bound is true, \n // as we want to avoid whitespaces.\n if (Glide.settings.bound && toInt(steps) > length) {\n Glide.index = length;\n return;\n }\n\n Glide.index = steps;\n return;\n } // When pattern is equal to `>>` we want\n // fast forward to the last slide.\n\n\n if (direction === '>' && steps === '>') {\n Glide.index = length;\n return;\n } // When pattern is equal to `<<` we want\n // fast forward to the first slide.\n\n\n if (direction === '<' && steps === '<') {\n Glide.index = 0;\n return;\n } // pagination movement\n\n\n if (direction === '|') {\n viewSize = Glide.settings.perView || 1;\n } // we are moving forward\n\n\n if (direction === '>' || direction === '|' && steps === '>') {\n var index = calculateForwardIndex(viewSize);\n\n if (index > length) {\n this._o = true;\n }\n\n Glide.index = normalizeForwardIndex(index, viewSize);\n return;\n } // we are moving backward\n\n\n if (direction === '<' || direction === '|' && steps === '<') {\n var _index = calculateBackwardIndex(viewSize);\n\n if (_index < 0) {\n this._o = true;\n }\n\n Glide.index = normalizeBackwardIndex(_index, viewSize);\n return;\n }\n\n warn(\"Invalid direction pattern [\".concat(direction).concat(steps, \"] has been used\"));\n },\n\n /**\n * Checks if we are on the first slide.\n *\n * @return {Boolean}\n */\n isStart: function isStart() {\n return Glide.index <= 0;\n },\n\n /**\n * Checks if we are on the last slide.\n *\n * @return {Boolean}\n */\n isEnd: function isEnd() {\n return Glide.index >= this.length;\n },\n\n /**\n * Checks if we are making a offset run.\n *\n * @param {String} direction\n * @return {Boolean}\n */\n isOffset: function isOffset() {\n var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n\n if (!direction) {\n return this._o;\n }\n\n if (!this._o) {\n return false;\n } // did we view to the right?\n\n\n if (direction === '|>') {\n return this.move.direction === '|' && this.move.steps === '>';\n } // did we view to the left?\n\n\n if (direction === '|<') {\n return this.move.direction === '|' && this.move.steps === '<';\n }\n\n return this.move.direction === direction;\n },\n\n /**\n * Checks if bound mode is active\n *\n * @return {Boolean}\n */\n isBound: function isBound() {\n return Glide.isType('slider') && Glide.settings.focusAt !== 'center' && Glide.settings.bound;\n }\n };\n /**\n * Returns index value to move forward/to the right\n *\n * @param viewSize\n * @returns {Number}\n */\n\n function calculateForwardIndex(viewSize) {\n var index = Glide.index;\n\n if (Glide.isType('carousel')) {\n return index + viewSize;\n }\n\n return index + (viewSize - index % viewSize);\n }\n /**\n * Normalizes the given forward index based on glide settings, preventing it to exceed certain boundaries\n *\n * @param index\n * @param length\n * @param viewSize\n * @returns {Number}\n */\n\n\n function normalizeForwardIndex(index, viewSize) {\n var length = Run.length;\n\n if (index <= length) {\n return index;\n }\n\n if (Glide.isType('carousel')) {\n return index - (length + 1);\n }\n\n if (Glide.settings.rewind) {\n // bound does funny things with the length, therefor we have to be certain\n // that we are on the last possible index value given by bound\n if (Run.isBound() && !Run.isEnd()) {\n return length;\n }\n\n return 0;\n }\n\n if (Run.isBound()) {\n return length;\n }\n\n return Math.floor(length / viewSize) * viewSize;\n }\n /**\n * Calculates index value to move backward/to the left\n *\n * @param viewSize\n * @returns {Number}\n */\n\n\n function calculateBackwardIndex(viewSize) {\n var index = Glide.index;\n\n if (Glide.isType('carousel')) {\n return index - viewSize;\n } // ensure our back navigation results in the same index as a forward navigation\n // to experience a homogeneous paging\n\n\n var view = Math.ceil(index / viewSize);\n return (view - 1) * viewSize;\n }\n /**\n * Normalizes the given backward index based on glide settings, preventing it to exceed certain boundaries\n *\n * @param index\n * @param length\n * @param viewSize\n * @returns {*}\n */\n\n\n function normalizeBackwardIndex(index, viewSize) {\n var length = Run.length;\n\n if (index >= 0) {\n return index;\n }\n\n if (Glide.isType('carousel')) {\n return index + (length + 1);\n }\n\n if (Glide.settings.rewind) {\n // bound does funny things with the length, therefor we have to be certain\n // that we are on first possible index value before we to rewind to the length given by bound\n if (Run.isBound() && Run.isStart()) {\n return length;\n }\n\n return Math.floor(length / viewSize) * viewSize;\n }\n\n return 0;\n }\n\n define(Run, 'move', {\n /**\n * Gets value of the move schema.\n *\n * @returns {Object}\n */\n get: function get() {\n return this._m;\n },\n\n /**\n * Sets value of the move schema.\n *\n * @returns {Object}\n */\n set: function set(value) {\n var step = value.substr(1);\n this._m = {\n direction: value.substr(0, 1),\n steps: step ? toInt(step) ? toInt(step) : step : 0\n };\n }\n });\n define(Run, 'length', {\n /**\n * Gets value of the running distance based\n * on zero-indexing number of slides.\n *\n * @return {Number}\n */\n get: function get() {\n var settings = Glide.settings;\n var length = Components.Html.slides.length; // If the `bound` option is active, a maximum running distance should be\n // reduced by `perView` and `focusAt` settings. Running distance\n // should end before creating an empty space after instance.\n\n if (this.isBound()) {\n return length - 1 - (toInt(settings.perView) - 1) + toInt(settings.focusAt);\n }\n\n return length - 1;\n }\n });\n define(Run, 'offset', {\n /**\n * Gets status of the offsetting flag.\n *\n * @return {Boolean}\n */\n get: function get() {\n return this._o;\n }\n });\n return Run;\n}\n\n/**\n * Returns a current time.\n *\n * @return {Number}\n */\nfunction now() {\n return new Date().getTime();\n}\n\n/**\n * Returns a function, that, when invoked, will only be triggered\n * at most once during a given window of time.\n *\n * @param {Function} func\n * @param {Number} wait\n * @param {Object=} options\n * @return {Function}\n *\n * @see https://github.com/jashkenas/underscore\n */\n\nfunction throttle(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function later() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function throttled() {\n var at = now();\n if (!previous && options.leading === false) previous = at;\n var remaining = wait - (at - previous);\n context = this;\n args = arguments;\n\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n\n previous = at;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n\n return result;\n };\n\n throttled.cancel = function () {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n}\n\nvar MARGIN_TYPE = {\n ltr: ['marginLeft', 'marginRight'],\n rtl: ['marginRight', 'marginLeft']\n};\nfunction Gaps (Glide, Components, Events) {\n var Gaps = {\n /**\n * Applies gaps between slides. First and last\n * slides do not receive it's edge margins.\n *\n * @param {HTMLCollection} slides\n * @return {Void}\n */\n apply: function apply(slides) {\n for (var i = 0, len = slides.length; i < len; i++) {\n var style = slides[i].style;\n var direction = Components.Direction.value;\n\n if (i !== 0) {\n style[MARGIN_TYPE[direction][0]] = \"\".concat(this.value / 2, \"px\");\n } else {\n style[MARGIN_TYPE[direction][0]] = '';\n }\n\n if (i !== slides.length - 1) {\n style[MARGIN_TYPE[direction][1]] = \"\".concat(this.value / 2, \"px\");\n } else {\n style[MARGIN_TYPE[direction][1]] = '';\n }\n }\n },\n\n /**\n * Removes gaps from the slides.\n *\n * @param {HTMLCollection} slides\n * @returns {Void}\n */\n remove: function remove(slides) {\n for (var i = 0, len = slides.length; i < len; i++) {\n var style = slides[i].style;\n style.marginLeft = '';\n style.marginRight = '';\n }\n }\n };\n define(Gaps, 'value', {\n /**\n * Gets value of the gap.\n *\n * @returns {Number}\n */\n get: function get() {\n return toInt(Glide.settings.gap);\n }\n });\n define(Gaps, 'grow', {\n /**\n * Gets additional dimensions value caused by gaps.\n * Used to increase width of the slides wrapper.\n *\n * @returns {Number}\n */\n get: function get() {\n return Gaps.value * Components.Sizes.length;\n }\n });\n define(Gaps, 'reductor', {\n /**\n * Gets reduction value caused by gaps.\n * Used to subtract width of the slides.\n *\n * @returns {Number}\n */\n get: function get() {\n var perView = Glide.settings.perView;\n return Gaps.value * (perView - 1) / perView;\n }\n });\n /**\n * Apply calculated gaps:\n * - after building, so slides (including clones) will receive proper margins\n * - on updating via API, to recalculate gaps with new options\n */\n\n Events.on(['build.after', 'update'], throttle(function () {\n Gaps.apply(Components.Html.wrapper.children);\n }, 30));\n /**\n * Remove gaps:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Gaps.remove(Components.Html.wrapper.children);\n });\n return Gaps;\n}\n\n/**\n * Finds siblings nodes of the passed node.\n *\n * @param {Element} node\n * @return {Array}\n */\nfunction siblings(node) {\n if (node && node.parentNode) {\n var n = node.parentNode.firstChild;\n var matched = [];\n\n for (; n; n = n.nextSibling) {\n if (n.nodeType === 1 && n !== node) {\n matched.push(n);\n }\n }\n\n return matched;\n }\n\n return [];\n}\n/**\n * Checks if passed node exist and is a valid element.\n *\n * @param {Element} node\n * @return {Boolean}\n */\n\nfunction exist(node) {\n if (node && node instanceof window.HTMLElement) {\n return true;\n }\n\n return false;\n}\n\nvar TRACK_SELECTOR = '[data-glide-el=\"track\"]';\nfunction Html (Glide, Components, Events) {\n var Html = {\n /**\n * Setup slider HTML nodes.\n *\n * @param {Glide} glide\n */\n mount: function mount() {\n this.root = Glide.selector;\n this.track = this.root.querySelector(TRACK_SELECTOR);\n this.collectSlides();\n },\n\n /**\n * Collect slides\n */\n collectSlides: function collectSlides() {\n this.slides = Array.prototype.slice.call(this.wrapper.children).filter(function (slide) {\n return !slide.classList.contains(Glide.settings.classes.slide.clone);\n });\n }\n };\n define(Html, 'root', {\n /**\n * Gets node of the glide main element.\n *\n * @return {Object}\n */\n get: function get() {\n return Html._r;\n },\n\n /**\n * Sets node of the glide main element.\n *\n * @return {Object}\n */\n set: function set(r) {\n if (isString(r)) {\n r = document.querySelector(r);\n }\n\n if (exist(r)) {\n Html._r = r;\n } else {\n warn('Root element must be a existing Html node');\n }\n }\n });\n define(Html, 'track', {\n /**\n * Gets node of the glide track with slides.\n *\n * @return {Object}\n */\n get: function get() {\n return Html._t;\n },\n\n /**\n * Sets node of the glide track with slides.\n *\n * @return {Object}\n */\n set: function set(t) {\n if (exist(t)) {\n Html._t = t;\n } else {\n warn(\"Could not find track element. Please use \".concat(TRACK_SELECTOR, \" attribute.\"));\n }\n }\n });\n define(Html, 'wrapper', {\n /**\n * Gets node of the slides wrapper.\n *\n * @return {Object}\n */\n get: function get() {\n return Html.track.children[0];\n }\n });\n /**\n * Add/remove/reorder dynamic slides\n */\n\n Events.on('update', function () {\n Html.collectSlides();\n });\n return Html;\n}\n\nfunction Peek (Glide, Components, Events) {\n var Peek = {\n /**\n * Setups how much to peek based on settings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.value = Glide.settings.peek;\n }\n };\n define(Peek, 'value', {\n /**\n * Gets value of the peek.\n *\n * @returns {Number|Object}\n */\n get: function get() {\n return Peek._v;\n },\n\n /**\n * Sets value of the peek.\n *\n * @param {Number|Object} value\n * @return {Void}\n */\n set: function set(value) {\n if (isObject(value)) {\n value.before = toInt(value.before);\n value.after = toInt(value.after);\n } else {\n value = toInt(value);\n }\n\n Peek._v = value;\n }\n });\n define(Peek, 'reductor', {\n /**\n * Gets reduction value caused by peek.\n *\n * @returns {Number}\n */\n get: function get() {\n var value = Peek.value;\n var perView = Glide.settings.perView;\n\n if (isObject(value)) {\n return value.before / perView + value.after / perView;\n }\n\n return value * 2 / perView;\n }\n });\n /**\n * Recalculate peeking sizes on:\n * - when resizing window to update to proper percents\n */\n\n Events.on(['resize', 'update'], function () {\n Peek.mount();\n });\n return Peek;\n}\n\nfunction Move (Glide, Components, Events) {\n var Move = {\n /**\n * Constructs move component.\n *\n * @returns {Void}\n */\n mount: function mount() {\n this._o = 0;\n },\n\n /**\n * Calculates a movement value based on passed offset and currently active index.\n *\n * @param {Number} offset\n * @return {Void}\n */\n make: function make() {\n var _this = this;\n\n var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n this.offset = offset;\n Events.emit('move', {\n movement: this.value\n });\n Components.Transition.after(function () {\n Events.emit('move.after', {\n movement: _this.value\n });\n });\n }\n };\n define(Move, 'offset', {\n /**\n * Gets an offset value used to modify current translate.\n *\n * @return {Object}\n */\n get: function get() {\n return Move._o;\n },\n\n /**\n * Sets an offset value used to modify current translate.\n *\n * @return {Object}\n */\n set: function set(value) {\n Move._o = !isUndefined(value) ? toInt(value) : 0;\n }\n });\n define(Move, 'translate', {\n /**\n * Gets a raw movement value.\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Sizes.slideWidth * Glide.index;\n }\n });\n define(Move, 'value', {\n /**\n * Gets an actual movement value corrected by offset.\n *\n * @return {Number}\n */\n get: function get() {\n var offset = this.offset;\n var translate = this.translate;\n\n if (Components.Direction.is('rtl')) {\n return translate + offset;\n }\n\n return translate - offset;\n }\n });\n /**\n * Make movement to proper slide on:\n * - before build, so glide will start at `startAt` index\n * - on each standard run to move to newly calculated index\n */\n\n Events.on(['build.before', 'run'], function () {\n Move.make();\n });\n return Move;\n}\n\nfunction Sizes (Glide, Components, Events) {\n var Sizes = {\n /**\n * Setups dimensions of slides.\n *\n * @return {Void}\n */\n setupSlides: function setupSlides() {\n var width = \"\".concat(this.slideWidth, \"px\");\n var slides = Components.Html.slides;\n\n for (var i = 0; i < slides.length; i++) {\n slides[i].style.width = width;\n }\n },\n\n /**\n * Setups dimensions of slides wrapper.\n *\n * @return {Void}\n */\n setupWrapper: function setupWrapper() {\n Components.Html.wrapper.style.width = \"\".concat(this.wrapperSize, \"px\");\n },\n\n /**\n * Removes applied styles from HTML elements.\n *\n * @returns {Void}\n */\n remove: function remove() {\n var slides = Components.Html.slides;\n\n for (var i = 0; i < slides.length; i++) {\n slides[i].style.width = '';\n }\n\n Components.Html.wrapper.style.width = '';\n }\n };\n define(Sizes, 'length', {\n /**\n * Gets count number of the slides.\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Html.slides.length;\n }\n });\n define(Sizes, 'width', {\n /**\n * Gets width value of the slider (visible area).\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Html.track.offsetWidth;\n }\n });\n define(Sizes, 'wrapperSize', {\n /**\n * Gets size of the slides wrapper.\n *\n * @return {Number}\n */\n get: function get() {\n return Sizes.slideWidth * Sizes.length + Components.Gaps.grow + Components.Clones.grow;\n }\n });\n define(Sizes, 'slideWidth', {\n /**\n * Gets width value of a single slide.\n *\n * @return {Number}\n */\n get: function get() {\n return Sizes.width / Glide.settings.perView - Components.Peek.reductor - Components.Gaps.reductor;\n }\n });\n /**\n * Apply calculated glide's dimensions:\n * - before building, so other dimensions (e.g. translate) will be calculated propertly\n * - when resizing window to recalculate sildes dimensions\n * - on updating via API, to calculate dimensions based on new options\n */\n\n Events.on(['build.before', 'resize', 'update'], function () {\n Sizes.setupSlides();\n Sizes.setupWrapper();\n });\n /**\n * Remove calculated glide's dimensions:\n * - on destoting to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Sizes.remove();\n });\n return Sizes;\n}\n\nfunction Build (Glide, Components, Events) {\n var Build = {\n /**\n * Init glide building. Adds classes, sets\n * dimensions and setups initial state.\n *\n * @return {Void}\n */\n mount: function mount() {\n Events.emit('build.before');\n this.typeClass();\n this.activeClass();\n Events.emit('build.after');\n },\n\n /**\n * Adds `type` class to the glide element.\n *\n * @return {Void}\n */\n typeClass: function typeClass() {\n Components.Html.root.classList.add(Glide.settings.classes.type[Glide.settings.type]);\n },\n\n /**\n * Sets active class to current slide.\n *\n * @return {Void}\n */\n activeClass: function activeClass() {\n var classes = Glide.settings.classes;\n var slide = Components.Html.slides[Glide.index];\n\n if (slide) {\n slide.classList.add(classes.slide.active);\n siblings(slide).forEach(function (sibling) {\n sibling.classList.remove(classes.slide.active);\n });\n }\n },\n\n /**\n * Removes HTML classes applied at building.\n *\n * @return {Void}\n */\n removeClasses: function removeClasses() {\n var _Glide$settings$class = Glide.settings.classes,\n type = _Glide$settings$class.type,\n slide = _Glide$settings$class.slide;\n Components.Html.root.classList.remove(type[Glide.settings.type]);\n Components.Html.slides.forEach(function (sibling) {\n sibling.classList.remove(slide.active);\n });\n }\n };\n /**\n * Clear building classes:\n * - on destroying to bring HTML to its initial state\n * - on updating to remove classes before remounting component\n */\n\n Events.on(['destroy', 'update'], function () {\n Build.removeClasses();\n });\n /**\n * Remount component:\n * - on resizing of the window to calculate new dimensions\n * - on updating settings via API\n */\n\n Events.on(['resize', 'update'], function () {\n Build.mount();\n });\n /**\n * Swap active class of current slide:\n * - after each move to the new index\n */\n\n Events.on('move.after', function () {\n Build.activeClass();\n });\n return Build;\n}\n\nfunction Clones (Glide, Components, Events) {\n var Clones = {\n /**\n * Create pattern map and collect slides to be cloned.\n */\n mount: function mount() {\n this.items = [];\n\n if (Glide.isType('carousel')) {\n this.items = this.collect();\n }\n },\n\n /**\n * Collect clones with pattern.\n *\n * @return {[]}\n */\n collect: function collect() {\n var items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var slides = Components.Html.slides;\n var _Glide$settings = Glide.settings,\n perView = _Glide$settings.perView,\n classes = _Glide$settings.classes,\n cloningRatio = _Glide$settings.cloningRatio;\n\n if (slides.length !== 0) {\n var peekIncrementer = +!!Glide.settings.peek;\n var cloneCount = perView + peekIncrementer + Math.round(perView / 2);\n var append = slides.slice(0, cloneCount).reverse();\n var prepend = slides.slice(cloneCount * -1);\n\n for (var r = 0; r < Math.max(cloningRatio, Math.floor(perView / slides.length)); r++) {\n for (var i = 0; i < append.length; i++) {\n var clone = append[i].cloneNode(true);\n clone.classList.add(classes.slide.clone);\n items.push(clone);\n }\n\n for (var _i = 0; _i < prepend.length; _i++) {\n var _clone = prepend[_i].cloneNode(true);\n\n _clone.classList.add(classes.slide.clone);\n\n items.unshift(_clone);\n }\n }\n }\n\n return items;\n },\n\n /**\n * Append cloned slides with generated pattern.\n *\n * @return {Void}\n */\n append: function append() {\n var items = this.items;\n var _Components$Html = Components.Html,\n wrapper = _Components$Html.wrapper,\n slides = _Components$Html.slides;\n var half = Math.floor(items.length / 2);\n var prepend = items.slice(0, half).reverse();\n var append = items.slice(half * -1).reverse();\n var width = \"\".concat(Components.Sizes.slideWidth, \"px\");\n\n for (var i = 0; i < append.length; i++) {\n wrapper.appendChild(append[i]);\n }\n\n for (var _i2 = 0; _i2 < prepend.length; _i2++) {\n wrapper.insertBefore(prepend[_i2], slides[0]);\n }\n\n for (var _i3 = 0; _i3 < items.length; _i3++) {\n items[_i3].style.width = width;\n }\n },\n\n /**\n * Remove all cloned slides.\n *\n * @return {Void}\n */\n remove: function remove() {\n var items = this.items;\n\n for (var i = 0; i < items.length; i++) {\n Components.Html.wrapper.removeChild(items[i]);\n }\n }\n };\n define(Clones, 'grow', {\n /**\n * Gets additional dimensions value caused by clones.\n *\n * @return {Number}\n */\n get: function get() {\n return (Components.Sizes.slideWidth + Components.Gaps.value) * Clones.items.length;\n }\n });\n /**\n * Append additional slide's clones:\n * - while glide's type is `carousel`\n */\n\n Events.on('update', function () {\n Clones.remove();\n Clones.mount();\n Clones.append();\n });\n /**\n * Append additional slide's clones:\n * - while glide's type is `carousel`\n */\n\n Events.on('build.before', function () {\n if (Glide.isType('carousel')) {\n Clones.append();\n }\n });\n /**\n * Remove clones HTMLElements:\n * - on destroying, to bring HTML to its initial state\n */\n\n Events.on('destroy', function () {\n Clones.remove();\n });\n return Clones;\n}\n\nvar EventsBinder = /*#__PURE__*/function () {\n /**\n * Construct a EventsBinder instance.\n */\n function EventsBinder() {\n var listeners = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, EventsBinder);\n\n this.listeners = listeners;\n }\n /**\n * Adds events listeners to arrows HTML elements.\n *\n * @param {String|Array} events\n * @param {Element|Window|Document} el\n * @param {Function} closure\n * @param {Boolean|Object} capture\n * @return {Void}\n */\n\n\n _createClass(EventsBinder, [{\n key: \"on\",\n value: function on(events, el, closure) {\n var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n if (isString(events)) {\n events = [events];\n }\n\n for (var i = 0; i < events.length; i++) {\n this.listeners[events[i]] = closure;\n el.addEventListener(events[i], this.listeners[events[i]], capture);\n }\n }\n /**\n * Removes event listeners from arrows HTML elements.\n *\n * @param {String|Array} events\n * @param {Element|Window|Document} el\n * @param {Boolean|Object} capture\n * @return {Void}\n */\n\n }, {\n key: \"off\",\n value: function off(events, el) {\n var capture = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n if (isString(events)) {\n events = [events];\n }\n\n for (var i = 0; i < events.length; i++) {\n el.removeEventListener(events[i], this.listeners[events[i]], capture);\n }\n }\n /**\n * Destroy collected listeners.\n *\n * @returns {Void}\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n delete this.listeners;\n }\n }]);\n\n return EventsBinder;\n}();\n\nfunction Resize (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Resize = {\n /**\n * Initializes window bindings.\n */\n mount: function mount() {\n this.bind();\n },\n\n /**\n * Binds `rezsize` listener to the window.\n * It's a costly event, so we are debouncing it.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('resize', window, throttle(function () {\n Events.emit('resize');\n }, Glide.settings.throttle));\n },\n\n /**\n * Unbinds listeners from the window.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('resize', window);\n }\n };\n /**\n * Remove bindings from window:\n * - on destroying, to remove added EventListener\n */\n\n Events.on('destroy', function () {\n Resize.unbind();\n Binder.destroy();\n });\n return Resize;\n}\n\nvar VALID_DIRECTIONS = ['ltr', 'rtl'];\nvar FLIPED_MOVEMENTS = {\n '>': '<',\n '<': '>',\n '=': '='\n};\nfunction Direction (Glide, Components, Events) {\n var Direction = {\n /**\n * Setups gap value based on settings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.value = Glide.settings.direction;\n },\n\n /**\n * Resolves pattern based on direction value\n *\n * @param {String} pattern\n * @returns {String}\n */\n resolve: function resolve(pattern) {\n var token = pattern.slice(0, 1);\n\n if (this.is('rtl')) {\n return pattern.split(token).join(FLIPED_MOVEMENTS[token]);\n }\n\n return pattern;\n },\n\n /**\n * Checks value of direction mode.\n *\n * @param {String} direction\n * @returns {Boolean}\n */\n is: function is(direction) {\n return this.value === direction;\n },\n\n /**\n * Applies direction class to the root HTML element.\n *\n * @return {Void}\n */\n addClass: function addClass() {\n Components.Html.root.classList.add(Glide.settings.classes.direction[this.value]);\n },\n\n /**\n * Removes direction class from the root HTML element.\n *\n * @return {Void}\n */\n removeClass: function removeClass() {\n Components.Html.root.classList.remove(Glide.settings.classes.direction[this.value]);\n }\n };\n define(Direction, 'value', {\n /**\n * Gets value of the direction.\n *\n * @returns {Number}\n */\n get: function get() {\n return Direction._v;\n },\n\n /**\n * Sets value of the direction.\n *\n * @param {String} value\n * @return {Void}\n */\n set: function set(value) {\n if (VALID_DIRECTIONS.indexOf(value) > -1) {\n Direction._v = value;\n } else {\n warn('Direction value must be `ltr` or `rtl`');\n }\n }\n });\n /**\n * Clear direction class:\n * - on destroy to bring HTML to its initial state\n * - on update to remove class before reappling bellow\n */\n\n Events.on(['destroy', 'update'], function () {\n Direction.removeClass();\n });\n /**\n * Remount component:\n * - on update to reflect changes in direction value\n */\n\n Events.on('update', function () {\n Direction.mount();\n });\n /**\n * Apply direction class:\n * - before building to apply class for the first time\n * - on updating to reapply direction class that may changed\n */\n\n Events.on(['build.before', 'update'], function () {\n Direction.addClass();\n });\n return Direction;\n}\n\n/**\n * Reflects value of glide movement.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Rtl (Glide, Components) {\n return {\n /**\n * Negates the passed translate if glide is in RTL option.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n if (Components.Direction.is('rtl')) {\n return -translate;\n }\n\n return translate;\n }\n };\n}\n\n/**\n * Updates glide movement with a `gap` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Gap (Glide, Components) {\n return {\n /**\n * Modifies passed translate value with number in the `gap` settings.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n var multiplier = Math.floor(translate / Components.Sizes.slideWidth);\n return translate + Components.Gaps.value * multiplier;\n }\n };\n}\n\n/**\n * Updates glide movement with width of additional clones width.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Grow (Glide, Components) {\n return {\n /**\n * Adds to the passed translate width of the half of clones.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n return translate + Components.Clones.grow / 2;\n }\n };\n}\n\n/**\n * Updates glide movement with a `peek` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\n\nfunction Peeking (Glide, Components) {\n return {\n /**\n * Modifies passed translate value with a `peek` setting.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n if (Glide.settings.focusAt >= 0) {\n var peek = Components.Peek.value;\n\n if (isObject(peek)) {\n return translate - peek.before;\n }\n\n return translate - peek;\n }\n\n return translate;\n }\n };\n}\n\n/**\n * Updates glide movement with a `focusAt` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Focusing (Glide, Components) {\n return {\n /**\n * Modifies passed translate value with index in the `focusAt` setting.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n var gap = Components.Gaps.value;\n var width = Components.Sizes.width;\n var focusAt = Glide.settings.focusAt;\n var slideWidth = Components.Sizes.slideWidth;\n\n if (focusAt === 'center') {\n return translate - (width / 2 - slideWidth / 2);\n }\n\n return translate - slideWidth * focusAt - gap * focusAt;\n }\n };\n}\n\n/**\n * Applies diffrent transformers on translate value.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\n\nfunction mutator (Glide, Components, Events) {\n /**\n * Merge instance transformers with collection of default transformers.\n * It's important that the Rtl component be last on the list,\n * so it reflects all previous transformations.\n *\n * @type {Array}\n */\n var TRANSFORMERS = [Gap, Grow, Peeking, Focusing].concat(Glide._t, [Rtl]);\n return {\n /**\n * Piplines translate value with registered transformers.\n *\n * @param {Number} translate\n * @return {Number}\n */\n mutate: function mutate(translate) {\n for (var i = 0; i < TRANSFORMERS.length; i++) {\n var transformer = TRANSFORMERS[i];\n\n if (isFunction(transformer) && isFunction(transformer().modify)) {\n translate = transformer(Glide, Components, Events).modify(translate);\n } else {\n warn('Transformer should be a function that returns an object with `modify()` method');\n }\n }\n\n return translate;\n }\n };\n}\n\nfunction Translate (Glide, Components, Events) {\n var Translate = {\n /**\n * Sets value of translate on HTML element.\n *\n * @param {Number} value\n * @return {Void}\n */\n set: function set(value) {\n var transform = mutator(Glide, Components).mutate(value);\n var translate3d = \"translate3d(\".concat(-1 * transform, \"px, 0px, 0px)\");\n Components.Html.wrapper.style.mozTransform = translate3d; // needed for supported Firefox 10-15\n\n Components.Html.wrapper.style.webkitTransform = translate3d; // needed for supported Chrome 10-35, Safari 5.1-8, and Opera 15-22\n\n Components.Html.wrapper.style.transform = translate3d;\n },\n\n /**\n * Removes value of translate from HTML element.\n *\n * @return {Void}\n */\n remove: function remove() {\n Components.Html.wrapper.style.transform = '';\n },\n\n /**\n * @return {number}\n */\n getStartIndex: function getStartIndex() {\n var length = Components.Sizes.length;\n var index = Glide.index;\n var perView = Glide.settings.perView;\n\n if (Components.Run.isOffset('>') || Components.Run.isOffset('|>')) {\n return length + (index - perView);\n } // \"modulo length\" converts an index that equals length to zero\n\n\n return (index + perView) % length;\n },\n\n /**\n * @return {number}\n */\n getTravelDistance: function getTravelDistance() {\n var travelDistance = Components.Sizes.slideWidth * Glide.settings.perView;\n\n if (Components.Run.isOffset('>') || Components.Run.isOffset('|>')) {\n // reverse travel distance so that we don't have to change subtract operations\n return travelDistance * -1;\n }\n\n return travelDistance;\n }\n };\n /**\n * Set new translate value:\n * - on move to reflect index change\n * - on updating via API to reflect possible changes in options\n */\n\n Events.on('move', function (context) {\n if (!Glide.isType('carousel') || !Components.Run.isOffset()) {\n return Translate.set(context.movement);\n }\n\n Components.Transition.after(function () {\n Events.emit('translate.jump');\n Translate.set(Components.Sizes.slideWidth * Glide.index);\n });\n var startWidth = Components.Sizes.slideWidth * Components.Translate.getStartIndex();\n return Translate.set(startWidth - Components.Translate.getTravelDistance());\n });\n /**\n * Remove translate:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Translate.remove();\n });\n return Translate;\n}\n\nfunction Transition (Glide, Components, Events) {\n /**\n * Holds inactivity status of transition.\n * When true transition is not applied.\n *\n * @type {Boolean}\n */\n var disabled = false;\n var Transition = {\n /**\n * Composes string of the CSS transition.\n *\n * @param {String} property\n * @return {String}\n */\n compose: function compose(property) {\n var settings = Glide.settings;\n\n if (!disabled) {\n return \"\".concat(property, \" \").concat(this.duration, \"ms \").concat(settings.animationTimingFunc);\n }\n\n return \"\".concat(property, \" 0ms \").concat(settings.animationTimingFunc);\n },\n\n /**\n * Sets value of transition on HTML element.\n *\n * @param {String=} property\n * @return {Void}\n */\n set: function set() {\n var property = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'transform';\n Components.Html.wrapper.style.transition = this.compose(property);\n },\n\n /**\n * Removes value of transition from HTML element.\n *\n * @return {Void}\n */\n remove: function remove() {\n Components.Html.wrapper.style.transition = '';\n },\n\n /**\n * Runs callback after animation.\n *\n * @param {Function} callback\n * @return {Void}\n */\n after: function after(callback) {\n setTimeout(function () {\n callback();\n }, this.duration);\n },\n\n /**\n * Enable transition.\n *\n * @return {Void}\n */\n enable: function enable() {\n disabled = false;\n this.set();\n },\n\n /**\n * Disable transition.\n *\n * @return {Void}\n */\n disable: function disable() {\n disabled = true;\n this.set();\n }\n };\n define(Transition, 'duration', {\n /**\n * Gets duration of the transition based\n * on currently running animation type.\n *\n * @return {Number}\n */\n get: function get() {\n var settings = Glide.settings;\n\n if (Glide.isType('slider') && Components.Run.offset) {\n return settings.rewindDuration;\n }\n\n return settings.animationDuration;\n }\n });\n /**\n * Set transition `style` value:\n * - on each moving, because it may be cleared by offset move\n */\n\n Events.on('move', function () {\n Transition.set();\n });\n /**\n * Disable transition:\n * - before initial build to avoid transitioning from `0` to `startAt` index\n * - while resizing window and recalculating dimensions\n * - on jumping from offset transition at start and end edges in `carousel` type\n */\n\n Events.on(['build.before', 'resize', 'translate.jump'], function () {\n Transition.disable();\n });\n /**\n * Enable transition:\n * - on each running, because it may be disabled by offset move\n */\n\n Events.on('run', function () {\n Transition.enable();\n });\n /**\n * Remove transition:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Transition.remove();\n });\n return Transition;\n}\n\n/**\n * Test via a getter in the options object to see\n * if the passive property is accessed.\n *\n * @see https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection\n */\nvar supportsPassive = false;\n\ntry {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassive = true;\n }\n });\n window.addEventListener('testPassive', null, opts);\n window.removeEventListener('testPassive', null, opts);\n} catch (e) {}\n\nvar supportsPassive$1 = supportsPassive;\n\nvar START_EVENTS = ['touchstart', 'mousedown'];\nvar MOVE_EVENTS = ['touchmove', 'mousemove'];\nvar END_EVENTS = ['touchend', 'touchcancel', 'mouseup', 'mouseleave'];\nvar MOUSE_EVENTS = ['mousedown', 'mousemove', 'mouseup', 'mouseleave'];\nfunction Swipe (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var swipeSin = 0;\n var swipeStartX = 0;\n var swipeStartY = 0;\n var disabled = false;\n var capture = supportsPassive$1 ? {\n passive: true\n } : false;\n var Swipe = {\n /**\n * Initializes swipe bindings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.bindSwipeStart();\n },\n\n /**\n * Handler for `swipestart` event. Calculates entry points of the user's tap.\n *\n * @param {Object} event\n * @return {Void}\n */\n start: function start(event) {\n if (!disabled && !Glide.disabled) {\n this.disable();\n var swipe = this.touches(event);\n swipeSin = null;\n swipeStartX = toInt(swipe.pageX);\n swipeStartY = toInt(swipe.pageY);\n this.bindSwipeMove();\n this.bindSwipeEnd();\n Events.emit('swipe.start');\n }\n },\n\n /**\n * Handler for `swipemove` event. Calculates user's tap angle and distance.\n *\n * @param {Object} event\n */\n move: function move(event) {\n if (!Glide.disabled) {\n var _Glide$settings = Glide.settings,\n touchAngle = _Glide$settings.touchAngle,\n touchRatio = _Glide$settings.touchRatio,\n classes = _Glide$settings.classes;\n var swipe = this.touches(event);\n var subExSx = toInt(swipe.pageX) - swipeStartX;\n var subEySy = toInt(swipe.pageY) - swipeStartY;\n var powEX = Math.abs(subExSx << 2);\n var powEY = Math.abs(subEySy << 2);\n var swipeHypotenuse = Math.sqrt(powEX + powEY);\n var swipeCathetus = Math.sqrt(powEY);\n swipeSin = Math.asin(swipeCathetus / swipeHypotenuse);\n\n if (swipeSin * 180 / Math.PI < touchAngle) {\n event.stopPropagation();\n Components.Move.make(subExSx * toFloat(touchRatio));\n Components.Html.root.classList.add(classes.dragging);\n Events.emit('swipe.move');\n } else {\n return false;\n }\n }\n },\n\n /**\n * Handler for `swipeend` event. Finitializes user's tap and decides about glide move.\n *\n * @param {Object} event\n * @return {Void}\n */\n end: function end(event) {\n if (!Glide.disabled) {\n var _Glide$settings2 = Glide.settings,\n perSwipe = _Glide$settings2.perSwipe,\n touchAngle = _Glide$settings2.touchAngle,\n classes = _Glide$settings2.classes;\n var swipe = this.touches(event);\n var threshold = this.threshold(event);\n var swipeDistance = swipe.pageX - swipeStartX;\n var swipeDeg = swipeSin * 180 / Math.PI;\n this.enable();\n\n if (swipeDistance > threshold && swipeDeg < touchAngle) {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe, \"<\")));\n } else if (swipeDistance < -threshold && swipeDeg < touchAngle) {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe, \">\")));\n } else {\n // While swipe don't reach distance apply previous transform.\n Components.Move.make();\n }\n\n Components.Html.root.classList.remove(classes.dragging);\n this.unbindSwipeMove();\n this.unbindSwipeEnd();\n Events.emit('swipe.end');\n }\n },\n\n /**\n * Binds swipe's starting event.\n *\n * @return {Void}\n */\n bindSwipeStart: function bindSwipeStart() {\n var _this = this;\n\n var _Glide$settings3 = Glide.settings,\n swipeThreshold = _Glide$settings3.swipeThreshold,\n dragThreshold = _Glide$settings3.dragThreshold;\n\n if (swipeThreshold) {\n Binder.on(START_EVENTS[0], Components.Html.wrapper, function (event) {\n _this.start(event);\n }, capture);\n }\n\n if (dragThreshold) {\n Binder.on(START_EVENTS[1], Components.Html.wrapper, function (event) {\n _this.start(event);\n }, capture);\n }\n },\n\n /**\n * Unbinds swipe's starting event.\n *\n * @return {Void}\n */\n unbindSwipeStart: function unbindSwipeStart() {\n Binder.off(START_EVENTS[0], Components.Html.wrapper, capture);\n Binder.off(START_EVENTS[1], Components.Html.wrapper, capture);\n },\n\n /**\n * Binds swipe's moving event.\n *\n * @return {Void}\n */\n bindSwipeMove: function bindSwipeMove() {\n var _this2 = this;\n\n Binder.on(MOVE_EVENTS, Components.Html.wrapper, throttle(function (event) {\n _this2.move(event);\n }, Glide.settings.throttle), capture);\n },\n\n /**\n * Unbinds swipe's moving event.\n *\n * @return {Void}\n */\n unbindSwipeMove: function unbindSwipeMove() {\n Binder.off(MOVE_EVENTS, Components.Html.wrapper, capture);\n },\n\n /**\n * Binds swipe's ending event.\n *\n * @return {Void}\n */\n bindSwipeEnd: function bindSwipeEnd() {\n var _this3 = this;\n\n Binder.on(END_EVENTS, Components.Html.wrapper, function (event) {\n _this3.end(event);\n });\n },\n\n /**\n * Unbinds swipe's ending event.\n *\n * @return {Void}\n */\n unbindSwipeEnd: function unbindSwipeEnd() {\n Binder.off(END_EVENTS, Components.Html.wrapper);\n },\n\n /**\n * Normalizes event touches points accorting to different types.\n *\n * @param {Object} event\n */\n touches: function touches(event) {\n if (MOUSE_EVENTS.indexOf(event.type) > -1) {\n return event;\n }\n\n return event.touches[0] || event.changedTouches[0];\n },\n\n /**\n * Gets value of minimum swipe distance settings based on event type.\n *\n * @return {Number}\n */\n threshold: function threshold(event) {\n var settings = Glide.settings;\n\n if (MOUSE_EVENTS.indexOf(event.type) > -1) {\n return settings.dragThreshold;\n }\n\n return settings.swipeThreshold;\n },\n\n /**\n * Enables swipe event.\n *\n * @return {self}\n */\n enable: function enable() {\n disabled = false;\n Components.Transition.enable();\n return this;\n },\n\n /**\n * Disables swipe event.\n *\n * @return {self}\n */\n disable: function disable() {\n disabled = true;\n Components.Transition.disable();\n return this;\n }\n };\n /**\n * Add component class:\n * - after initial building\n */\n\n Events.on('build.after', function () {\n Components.Html.root.classList.add(Glide.settings.classes.swipeable);\n });\n /**\n * Remove swiping bindings:\n * - on destroying, to remove added EventListeners\n */\n\n Events.on('destroy', function () {\n Swipe.unbindSwipeStart();\n Swipe.unbindSwipeMove();\n Swipe.unbindSwipeEnd();\n Binder.destroy();\n });\n return Swipe;\n}\n\nfunction Images (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Images = {\n /**\n * Binds listener to glide wrapper.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.bind();\n },\n\n /**\n * Binds `dragstart` event on wrapper to prevent dragging images.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('dragstart', Components.Html.wrapper, this.dragstart);\n },\n\n /**\n * Unbinds `dragstart` event on wrapper.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('dragstart', Components.Html.wrapper);\n },\n\n /**\n * Event handler. Prevents dragging.\n *\n * @return {Void}\n */\n dragstart: function dragstart(event) {\n event.preventDefault();\n }\n };\n /**\n * Remove bindings from images:\n * - on destroying, to remove added EventListeners\n */\n\n Events.on('destroy', function () {\n Images.unbind();\n Binder.destroy();\n });\n return Images;\n}\n\nfunction Anchors (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n /**\n * Holds detaching status of anchors.\n * Prevents detaching of already detached anchors.\n *\n * @private\n * @type {Boolean}\n */\n\n var detached = false;\n /**\n * Holds preventing status of anchors.\n * If `true` redirection after click will be disabled.\n *\n * @private\n * @type {Boolean}\n */\n\n var prevented = false;\n var Anchors = {\n /**\n * Setups a initial state of anchors component.\n *\n * @returns {Void}\n */\n mount: function mount() {\n /**\n * Holds collection of anchors elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n this._a = Components.Html.wrapper.querySelectorAll('a');\n this.bind();\n },\n\n /**\n * Binds events to anchors inside a track.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('click', Components.Html.wrapper, this.click);\n },\n\n /**\n * Unbinds events attached to anchors inside a track.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('click', Components.Html.wrapper);\n },\n\n /**\n * Handler for click event. Prevents clicks when glide is in `prevent` status.\n *\n * @param {Object} event\n * @return {Void}\n */\n click: function click(event) {\n if (prevented) {\n event.stopPropagation();\n event.preventDefault();\n }\n },\n\n /**\n * Detaches anchors click event inside glide.\n *\n * @return {self}\n */\n detach: function detach() {\n prevented = true;\n\n if (!detached) {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].draggable = false;\n }\n\n detached = true;\n }\n\n return this;\n },\n\n /**\n * Attaches anchors click events inside glide.\n *\n * @return {self}\n */\n attach: function attach() {\n prevented = false;\n\n if (detached) {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].draggable = true;\n }\n\n detached = false;\n }\n\n return this;\n }\n };\n define(Anchors, 'items', {\n /**\n * Gets collection of the arrows HTML elements.\n *\n * @return {HTMLElement[]}\n */\n get: function get() {\n return Anchors._a;\n }\n });\n /**\n * Detach anchors inside slides:\n * - on swiping, so they won't redirect to its `href` attributes\n */\n\n Events.on('swipe.move', function () {\n Anchors.detach();\n });\n /**\n * Attach anchors inside slides:\n * - after swiping and transitions ends, so they can redirect after click again\n */\n\n Events.on('swipe.end', function () {\n Components.Transition.after(function () {\n Anchors.attach();\n });\n });\n /**\n * Unbind anchors inside slides:\n * - on destroying, to bring anchors to its initial state\n */\n\n Events.on('destroy', function () {\n Anchors.attach();\n Anchors.unbind();\n Binder.destroy();\n });\n return Anchors;\n}\n\nvar NAV_SELECTOR = '[data-glide-el=\"controls[nav]\"]';\nvar CONTROLS_SELECTOR = '[data-glide-el^=\"controls\"]';\nvar PREVIOUS_CONTROLS_SELECTOR = \"\".concat(CONTROLS_SELECTOR, \" [data-glide-dir*=\\\"<\\\"]\");\nvar NEXT_CONTROLS_SELECTOR = \"\".concat(CONTROLS_SELECTOR, \" [data-glide-dir*=\\\">\\\"]\");\nfunction Controls (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var capture = supportsPassive$1 ? {\n passive: true\n } : false;\n var Controls = {\n /**\n * Inits arrows. Binds events listeners\n * to the arrows HTML elements.\n *\n * @return {Void}\n */\n mount: function mount() {\n /**\n * Collection of navigation HTML elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n this._n = Components.Html.root.querySelectorAll(NAV_SELECTOR);\n /**\n * Collection of controls HTML elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n\n this._c = Components.Html.root.querySelectorAll(CONTROLS_SELECTOR);\n /**\n * Collection of arrow control HTML elements.\n *\n * @private\n * @type {Object}\n */\n\n this._arrowControls = {\n previous: Components.Html.root.querySelectorAll(PREVIOUS_CONTROLS_SELECTOR),\n next: Components.Html.root.querySelectorAll(NEXT_CONTROLS_SELECTOR)\n };\n this.addBindings();\n },\n\n /**\n * Sets active class to current slide.\n *\n * @return {Void}\n */\n setActive: function setActive() {\n for (var i = 0; i < this._n.length; i++) {\n this.addClass(this._n[i].children);\n }\n },\n\n /**\n * Removes active class to current slide.\n *\n * @return {Void}\n */\n removeActive: function removeActive() {\n for (var i = 0; i < this._n.length; i++) {\n this.removeClass(this._n[i].children);\n }\n },\n\n /**\n * Toggles active class on items inside navigation.\n *\n * @param {HTMLElement} controls\n * @return {Void}\n */\n addClass: function addClass(controls) {\n var settings = Glide.settings;\n var item = controls[Glide.index];\n\n if (!item) {\n return;\n }\n\n if (item) {\n item.classList.add(settings.classes.nav.active);\n siblings(item).forEach(function (sibling) {\n sibling.classList.remove(settings.classes.nav.active);\n });\n }\n },\n\n /**\n * Removes active class from active control.\n *\n * @param {HTMLElement} controls\n * @return {Void}\n */\n removeClass: function removeClass(controls) {\n var item = controls[Glide.index];\n\n if (item) {\n item.classList.remove(Glide.settings.classes.nav.active);\n }\n },\n\n /**\n * Calculates, removes or adds `Glide.settings.classes.disabledArrow` class on the control arrows\n */\n setArrowState: function setArrowState() {\n if (Glide.settings.rewind) {\n return;\n }\n\n var next = Controls._arrowControls.next;\n var previous = Controls._arrowControls.previous;\n this.resetArrowState(next, previous);\n\n if (Glide.index === 0) {\n this.disableArrow(previous);\n }\n\n if (Glide.index === Components.Run.length) {\n this.disableArrow(next);\n }\n },\n\n /**\n * Removes `Glide.settings.classes.disabledArrow` from given NodeList elements\n *\n * @param {NodeList[]} lists\n */\n resetArrowState: function resetArrowState() {\n var settings = Glide.settings;\n\n for (var _len = arguments.length, lists = new Array(_len), _key = 0; _key < _len; _key++) {\n lists[_key] = arguments[_key];\n }\n\n lists.forEach(function (list) {\n list.forEach(function (element) {\n element.classList.remove(settings.classes.arrow.disabled);\n });\n });\n },\n\n /**\n * Adds `Glide.settings.classes.disabledArrow` to given NodeList elements\n *\n * @param {NodeList[]} lists\n */\n disableArrow: function disableArrow() {\n var settings = Glide.settings;\n\n for (var _len2 = arguments.length, lists = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n lists[_key2] = arguments[_key2];\n }\n\n lists.forEach(function (list) {\n list.forEach(function (element) {\n element.classList.add(settings.classes.arrow.disabled);\n });\n });\n },\n\n /**\n * Adds handles to the each group of controls.\n *\n * @return {Void}\n */\n addBindings: function addBindings() {\n for (var i = 0; i < this._c.length; i++) {\n this.bind(this._c[i].children);\n }\n },\n\n /**\n * Removes handles from the each group of controls.\n *\n * @return {Void}\n */\n removeBindings: function removeBindings() {\n for (var i = 0; i < this._c.length; i++) {\n this.unbind(this._c[i].children);\n }\n },\n\n /**\n * Binds events to arrows HTML elements.\n *\n * @param {HTMLCollection} elements\n * @return {Void}\n */\n bind: function bind(elements) {\n for (var i = 0; i < elements.length; i++) {\n Binder.on('click', elements[i], this.click);\n Binder.on('touchstart', elements[i], this.click, capture);\n }\n },\n\n /**\n * Unbinds events binded to the arrows HTML elements.\n *\n * @param {HTMLCollection} elements\n * @return {Void}\n */\n unbind: function unbind(elements) {\n for (var i = 0; i < elements.length; i++) {\n Binder.off(['click', 'touchstart'], elements[i]);\n }\n },\n\n /**\n * Handles `click` event on the arrows HTML elements.\n * Moves slider in direction given via the\n * `data-glide-dir` attribute.\n *\n * @param {Object} event\n * @return {void}\n */\n click: function click(event) {\n if (!supportsPassive$1 && event.type === 'touchstart') {\n event.preventDefault();\n }\n\n var direction = event.currentTarget.getAttribute('data-glide-dir');\n Components.Run.make(Components.Direction.resolve(direction));\n }\n };\n define(Controls, 'items', {\n /**\n * Gets collection of the controls HTML elements.\n *\n * @return {HTMLElement[]}\n */\n get: function get() {\n return Controls._c;\n }\n });\n /**\n * Swap active class of current navigation item:\n * - after mounting to set it to initial index\n * - after each move to the new index\n */\n\n Events.on(['mount.after', 'move.after'], function () {\n Controls.setActive();\n });\n /**\n * Add or remove disabled class of arrow elements\n */\n\n Events.on(['mount.after', 'run'], function () {\n Controls.setArrowState();\n });\n /**\n * Remove bindings and HTML Classes:\n * - on destroying, to bring markup to its initial state\n */\n\n Events.on('destroy', function () {\n Controls.removeBindings();\n Controls.removeActive();\n Binder.destroy();\n });\n return Controls;\n}\n\nfunction Keyboard (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Keyboard = {\n /**\n * Binds keyboard events on component mount.\n *\n * @return {Void}\n */\n mount: function mount() {\n if (Glide.settings.keyboard) {\n this.bind();\n }\n },\n\n /**\n * Adds keyboard press events.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('keyup', document, this.press);\n },\n\n /**\n * Removes keyboard press events.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('keyup', document);\n },\n\n /**\n * Handles keyboard's arrows press and moving glide foward and backward.\n *\n * @param {Object} event\n * @return {Void}\n */\n press: function press(event) {\n var perSwipe = Glide.settings.perSwipe;\n\n if (event.keyCode === 39) {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe, \">\")));\n }\n\n if (event.keyCode === 37) {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe, \"<\")));\n }\n }\n };\n /**\n * Remove bindings from keyboard:\n * - on destroying to remove added events\n * - on updating to remove events before remounting\n */\n\n Events.on(['destroy', 'update'], function () {\n Keyboard.unbind();\n });\n /**\n * Remount component\n * - on updating to reflect potential changes in settings\n */\n\n Events.on('update', function () {\n Keyboard.mount();\n });\n /**\n * Destroy binder:\n * - on destroying to remove listeners\n */\n\n Events.on('destroy', function () {\n Binder.destroy();\n });\n return Keyboard;\n}\n\nfunction Autoplay (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Autoplay = {\n /**\n * Initializes autoplaying and events.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.enable();\n this.start();\n\n if (Glide.settings.hoverpause) {\n this.bind();\n }\n },\n\n /**\n * Enables autoplaying\n *\n * @returns {Void}\n */\n enable: function enable() {\n this._e = true;\n },\n\n /**\n * Disables autoplaying.\n *\n * @returns {Void}\n */\n disable: function disable() {\n this._e = false;\n },\n\n /**\n * Starts autoplaying in configured interval.\n *\n * @param {Boolean|Number} force Run autoplaying with passed interval regardless of `autoplay` settings\n * @return {Void}\n */\n start: function start() {\n var _this = this;\n\n if (!this._e) {\n return;\n }\n\n this.enable();\n\n if (Glide.settings.autoplay) {\n if (isUndefined(this._i)) {\n this._i = setInterval(function () {\n _this.stop();\n\n Components.Run.make('>');\n\n _this.start();\n\n Events.emit('autoplay');\n }, this.time);\n }\n }\n },\n\n /**\n * Stops autorunning of the glide.\n *\n * @return {Void}\n */\n stop: function stop() {\n this._i = clearInterval(this._i);\n },\n\n /**\n * Stops autoplaying while mouse is over glide's area.\n *\n * @return {Void}\n */\n bind: function bind() {\n var _this2 = this;\n\n Binder.on('mouseover', Components.Html.root, function () {\n if (_this2._e) {\n _this2.stop();\n }\n });\n Binder.on('mouseout', Components.Html.root, function () {\n if (_this2._e) {\n _this2.start();\n }\n });\n },\n\n /**\n * Unbind mouseover events.\n *\n * @returns {Void}\n */\n unbind: function unbind() {\n Binder.off(['mouseover', 'mouseout'], Components.Html.root);\n }\n };\n define(Autoplay, 'time', {\n /**\n * Gets time period value for the autoplay interval. Prioritizes\n * times in `data-glide-autoplay` attrubutes over options.\n *\n * @return {Number}\n */\n get: function get() {\n var autoplay = Components.Html.slides[Glide.index].getAttribute('data-glide-autoplay');\n\n if (autoplay) {\n return toInt(autoplay);\n }\n\n return toInt(Glide.settings.autoplay);\n }\n });\n /**\n * Stop autoplaying and unbind events:\n * - on destroying, to clear defined interval\n * - on updating via API to reset interval that may changed\n */\n\n Events.on(['destroy', 'update'], function () {\n Autoplay.unbind();\n });\n /**\n * Stop autoplaying:\n * - before each run, to restart autoplaying\n * - on pausing via API\n * - on destroying, to clear defined interval\n * - while starting a swipe\n * - on updating via API to reset interval that may changed\n */\n\n Events.on(['run.before', 'swipe.start', 'update'], function () {\n Autoplay.stop();\n });\n Events.on(['pause', 'destroy'], function () {\n Autoplay.disable();\n Autoplay.stop();\n });\n /**\n * Start autoplaying:\n * - after each run, to restart autoplaying\n * - on playing via API\n * - while ending a swipe\n */\n\n Events.on(['run.after', 'swipe.end'], function () {\n Autoplay.start();\n });\n /**\n * Start autoplaying:\n * - after each run, to restart autoplaying\n * - on playing via API\n * - while ending a swipe\n */\n\n Events.on(['play'], function () {\n Autoplay.enable();\n Autoplay.start();\n });\n /**\n * Remount autoplaying:\n * - on updating via API to reset interval that may changed\n */\n\n Events.on('update', function () {\n Autoplay.mount();\n });\n /**\n * Destroy a binder:\n * - on destroying glide instance to clearup listeners\n */\n\n Events.on('destroy', function () {\n Binder.destroy();\n });\n return Autoplay;\n}\n\n/**\n * Sorts keys of breakpoint object so they will be ordered from lower to bigger.\n *\n * @param {Object} points\n * @returns {Object}\n */\n\nfunction sortBreakpoints(points) {\n if (isObject(points)) {\n return sortKeys(points);\n } else {\n warn(\"Breakpoints option must be an object\");\n }\n\n return {};\n}\n\nfunction Breakpoints (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n /**\n * Holds reference to settings.\n *\n * @type {Object}\n */\n\n var settings = Glide.settings;\n /**\n * Holds reference to breakpoints object in settings. Sorts breakpoints\n * from smaller to larger. It is required in order to proper\n * matching currently active breakpoint settings.\n *\n * @type {Object}\n */\n\n var points = sortBreakpoints(settings.breakpoints);\n /**\n * Cache initial settings before overwritting.\n *\n * @type {Object}\n */\n\n var defaults = Object.assign({}, settings);\n var Breakpoints = {\n /**\n * Matches settings for currectly matching media breakpoint.\n *\n * @param {Object} points\n * @returns {Object}\n */\n match: function match(points) {\n if (typeof window.matchMedia !== 'undefined') {\n for (var point in points) {\n if (points.hasOwnProperty(point)) {\n if (window.matchMedia(\"(max-width: \".concat(point, \"px)\")).matches) {\n return points[point];\n }\n }\n }\n }\n\n return defaults;\n }\n };\n /**\n * Overwrite instance settings with currently matching breakpoint settings.\n * This happens right after component initialization.\n */\n\n Object.assign(settings, Breakpoints.match(points));\n /**\n * Update glide with settings of matched brekpoint:\n * - window resize to update slider\n */\n\n Binder.on('resize', window, throttle(function () {\n Glide.settings = mergeOptions(settings, Breakpoints.match(points));\n }, Glide.settings.throttle));\n /**\n * Resort and update default settings:\n * - on reinit via API, so breakpoint matching will be performed with options\n */\n\n Events.on('update', function () {\n points = sortBreakpoints(points);\n defaults = Object.assign({}, settings);\n });\n /**\n * Unbind resize listener:\n * - on destroying, to bring markup to its initial state\n */\n\n Events.on('destroy', function () {\n Binder.off('resize', window);\n });\n return Breakpoints;\n}\n\nvar COMPONENTS = {\n // Required\n Html: Html,\n Translate: Translate,\n Transition: Transition,\n Direction: Direction,\n Peek: Peek,\n Sizes: Sizes,\n Gaps: Gaps,\n Move: Move,\n Clones: Clones,\n Resize: Resize,\n Build: Build,\n Run: Run,\n // Optional\n Swipe: Swipe,\n Images: Images,\n Anchors: Anchors,\n Controls: Controls,\n Keyboard: Keyboard,\n Autoplay: Autoplay,\n Breakpoints: Breakpoints\n};\n\nvar Glide = /*#__PURE__*/function (_Core) {\n _inherits(Glide, _Core);\n\n var _super = _createSuper(Glide);\n\n function Glide() {\n _classCallCheck(this, Glide);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(Glide, [{\n key: \"mount\",\n value: function mount() {\n var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return _get(_getPrototypeOf(Glide.prototype), \"mount\", this).call(this, Object.assign({}, COMPONENTS, extensions));\n }\n }]);\n\n return Glide;\n}(Glide$1);\n\nexport { Glide as default };\n","import Glide from '@glidejs/glide'\r\n\r\nexport default class Testimonials {\r\n constructor() {\r\n this.carousels = document.querySelectorAll('.tps-testimonials-carousel');\r\n }\r\n\r\n // init() {}\r\n\r\n initAfterFrameworks() {\r\n\r\n\r\n const _self = tps.testimonials;\r\n\r\n if (_self.carousels.length > 0) {\r\n _self.initCarousels();\r\n }\r\n\r\n }\r\n\r\n initCarousels() {\r\n\r\n const _self = tps.testimonials;\r\n\r\n _self.carousels.forEach(carousel => {\r\n\r\n const items = carousel.querySelectorAll('.tps-testimonials-list-item');\r\n\r\n if (items.length > 1) {\r\n new Glide(`#${carousel.id}`, {\r\n type: 'carousel',\r\n autoplay: false,\r\n gap: 20,\r\n startAt: 0,\r\n perView: 2,\r\n breakpoints: {\r\n 767: {\r\n perView: 1\r\n }\r\n }\r\n }).mount()\r\n }\r\n\r\n });\r\n\r\n }\r\n\r\n}\r\n","export default class LocationsMap {\r\n constructor() {\r\n this.buttonUseCurrent = null;\r\n this.searchInput = null;\r\n this.searchSubmit = null;\r\n this.mapWrapper = null;\r\n this.searchMessage = null;\r\n\r\n this.startLocation = { lat: 43.6532, lng: -79.3780581 };\r\n this.svgMarkerPath = 'M15.4393 21.6614C11.8891 21.6248 9.04761 18.7099 9.07034 15.1276C9.09307 11.5074 11.9693 8.6115 15.5248 8.62913C19.071 8.64676 21.9593 11.6091 21.9245 15.1914C21.8897 18.8049 18.9894 21.6981 15.4393 21.6614ZM30.1427 11.7516C28.5769 5.43616 23.723 0.964108 17.3568 0.139417C12.7943 -0.453331 8.71064 0.843389 5.34233 4.04178C1.2827 7.89939 -0.292484 12.6698 0.769224 18.2447C1.35891 21.3427 2.66934 24.183 4.09743 26.9595C6.45752 31.5455 9.30033 35.8195 12.3758 39.9376C13.384 41.2872 14.419 42.6151 15.4767 44C15.5997 43.8562 15.6612 43.7911 15.7161 43.7219C19.3946 38.9949 22.8258 34.0956 25.7595 28.8531C27.4015 25.9165 28.8671 22.8958 29.8485 19.654C30.6388 17.0442 30.8019 14.4088 30.1427 11.7516Z';\r\n this.googleMap = null;\r\n this.googleGeocoder = null;\r\n this.userMarker = null;\r\n\r\n this.branchesData = {};\r\n }\r\n\r\n init() {\r\n this.buttonUseCurrent = document.getElementById('find-location-search-usecurrent');\r\n this.searchInput = document.getElementById('find-location-search-input');\r\n this.searchSubmit = document.getElementById('find-location-search-submit');\r\n this.resultsWrapper = document.getElementById('find-location-results');\r\n this.mapWrapper = document.getElementById('find-location-map');\r\n this.searchMessage = document.getElementById('find-location-search-error');\r\n\r\n if (this.mapWrapper) {\r\n this.loadGoogleMapsScript();\r\n \r\n }\r\n }\r\n\r\n loadGoogleMapsScript() {\r\n let script = document.createElement('script');\r\n script.src = `https://maps.googleapis.com/maps/api/js?key=${window.tpsSettings.googleMapsKey}&libraries=geometry&callback=tps.locationsMap.initMap`;\r\n script.async = true;\r\n\r\n // Append the 'script' element to 'head'\r\n document.head.appendChild(script);\r\n }\r\n\r\n initMap() {\r\n const self = this;\r\n\r\n self.googleMap = new google.maps.Map(self.mapWrapper, {\r\n center: new google.maps.LatLng(self.startLocation),\r\n zoom: 8,\r\n disableDefaultUI: true,\r\n });\r\n\r\n self.googleGeocoder = new google.maps.Geocoder();\r\n\r\n const fetchUrl = new URL('/api/locations/get', location.origin);\r\n fetch(fetchUrl, { method: 'GET' })\r\n .then(response => response.json())\r\n .then(data => {\r\n let markers = [];\r\n\r\n if (data && data.length > 0) {\r\n data.forEach(location => {\r\n const customIcon = {\r\n path: self.svgMarkerPath,\r\n fillColor: '#00567D',\r\n fillOpacity: 1.0,\r\n strokeWeight: 0,\r\n rotation: 0,\r\n scale: 1,\r\n anchor: new google.maps.Point(30, 44)\r\n };\r\n\r\n const marker = new google.maps.Marker({\r\n position: new google.maps.LatLng({ lat: Number.parseFloat(location.lat), lng: Number.parseFloat(location.lng) }),\r\n icon: customIcon,\r\n map: self.googleMap\r\n });\r\n\r\n markers.push(marker);\r\n\r\n const infoWindow = new google.maps.InfoWindow({\r\n content: `
${location.title}
`\r\n });\r\n\r\n const listElement = document.querySelector('[data-location-id=\"' + location.id + '\"]');\r\n self.branchesData[location.id] = {\r\n icon: customIcon,\r\n googleMarkerObject: marker,\r\n locationData: location,\r\n listElement: listElement,\r\n infoWindow: infoWindow\r\n };\r\n\r\n marker.addListener('click', function (e) {\r\n self.selectLocationElement(location.id);\r\n });\r\n\r\n listElement.addEventListener('click', function (e) {\r\n self.selectLocationElement(location.id);\r\n });\r\n });\r\n }\r\n })\r\n .catch(error => console.log(error));\r\n\r\n self.buttonUseCurrent.addEventListener('click', function (e) {\r\n self.getCurrentLocation();\r\n });\r\n\r\n self.searchSubmit.addEventListener('click', function (e) {\r\n self.searchByInput();\r\n });\r\n }\r\n\r\n selectLocationElement(locationID) {\r\n const self = this;\r\n\r\n for (let key in self.branchesData) {\r\n const location = self.branchesData[key];\r\n\r\n if (key.toString() === locationID.toString()) {\r\n location.infoWindow.open({\r\n anchor: location.googleMarkerObject,\r\n map: self.googleMap,\r\n shouldFocus: true,\r\n });\r\n } else {\r\n location.infoWindow.close();\r\n }\r\n }\r\n\r\n if (self.googleMap.getZoom() || self.googleMap.getBounds().contains(self.branchesData[locationID].googleMarkerObject.getPosition()) === false) {\r\n self.zoomIntoLocation(1000, { lat: self.branchesData[locationID].locationData.lat, lng: self.branchesData[locationID].locationData.lng });\r\n }\r\n }\r\n\r\n setUserLocation({ lat, lng }) {\r\n const self = this;\r\n\r\n const position = new google.maps.LatLng({ lat: parseFloat(lat), lng: parseFloat(lng) });\r\n\r\n let distances = [];\r\n let resultRadius = 5000; // default 5 km if there are markers\r\n let anyMarkersWithinRadius = false;\r\n\r\n for (const branchID in self.branchesData) {\r\n const branch = self.branchesData[branchID];\r\n\r\n const distance = google.maps.geometry.spherical.computeDistanceBetween(position, branch.googleMarkerObject.position); // in meters\r\n distances.push({ branchID: branchID, distance: distance });\r\n\r\n if (distance < 5000) {\r\n anyMarkersWithinRadius = true;\r\n }\r\n }\r\n\r\n distances.sort((a, b) => a.distance - b.distance);\r\n\r\n if (!anyMarkersWithinRadius) {\r\n resultRadius = distances[0].distance;\r\n }\r\n\r\n // Sort branch list items\r\n distances.forEach((distance, index) => {\r\n self.branchesData[distance.branchID].listElement.style.order = index + 1;\r\n });\r\n\r\n self.userMarker = new google.maps.Marker({\r\n position: position,\r\n map: self.googleMap\r\n });\r\n\r\n self.zoomIntoLocation(resultRadius, { lat, lng });\r\n }\r\n\r\n getCurrentLocation() {\r\n const self = this;\r\n\r\n self.searchMessage.classList.add('hide');\r\n if (self.userMarker) self.userMarker.setMap(null);\r\n\r\n if (navigator.geolocation) {\r\n navigator.geolocation.getCurrentPosition(position => {\r\n const lat = position.coords.latitude;\r\n const lng = position.coords.longitude;\r\n self.setUserLocation({ lat, lng });\r\n });\r\n } else {\r\n alert('Geolocation is not available. Please enable geolocation for this website.');\r\n }\r\n }\r\n\r\n searchByInput() {\r\n const self = this;\r\n\r\n self.searchMessage.classList.add('hide');\r\n\r\n if (self.searchInput.value !== '') {\r\n const query = self.searchInput.value.split(' ').join('+');\r\n if (self.userMarker) self.userMarker.setMap(null);\r\n\r\n self.googleGeocoder.geocode({ address: query }, (results, status) => {\r\n if (status === 'OK') {\r\n const lat = results[0].geometry.location.lat();\r\n const lng = results[0].geometry.location.lng();\r\n\r\n self.setUserLocation({ lat, lng });\r\n } else {\r\n console.log(`Geocode was not successful for the following reason: ${status}`);\r\n self.searchMessage.classList.remove('hide');\r\n }\r\n });\r\n }\r\n }\r\n\r\n zoomIntoLocation(radius, { lat, lng }) {\r\n const self = this;\r\n\r\n const position = new google.maps.LatLng({ lat: parseFloat(lat), lng: parseFloat(lng) });\r\n const circle = new google.maps.Circle({\r\n center: position,\r\n fillOpacity: 0,\r\n strokeOpacity: 0,\r\n map: self.googleMap,\r\n radius: radius // radius is in meters\r\n });\r\n\r\n self.googleMap.fitBounds(circle.getBounds(), 0);\r\n circle.setMap(null);\r\n }\r\n\r\n initAfterFrameworks() {\r\n }\r\n}\r\n","\r\nexport default class Search {\r\n constructor() {}\r\n\r\n // init() {}\r\n\r\n // initAfterFrameworks() {}\r\n\r\n updateHistory() {\r\n\r\n //const _self = tps.search;\r\n const input = document.getElementById('SearchText');\r\n const url = tps.utility.updateUrlParameter(window.location.pathname + window.location.search, 'q', input.value);\r\n\r\n // push the new search query string to the browser history\r\n window.history.replaceState({ 'url': url }, 'page', url); \r\n }\r\n}\r\n","export default class Tracking {\r\n constructor() {\r\n this.accordions = null;\r\n this.forms = null;\r\n }\r\n\r\n init() {\r\n\r\n // unambigious reference to the current class\r\n const _self = tps.tracking;\r\n\r\n // first we will setup the dataylayer object, just in case\r\n // it has not yet been created by GTM\r\n window.dataLayer = window.dataLayer || [];\r\n\r\n // get all the accordions on the page\r\n // the accordions are created using the Foundation FE framework\r\n // https://get.foundation/sites/docs/accordion.html\r\n // so we can find all the accordions using this attribute\r\n _self.accordions = $('[data-accordion]');\r\n if (_self.accordions.length > 0) {\r\n _self.trackAccordions();\r\n }\r\n\r\n // tracking form submits will be done in a different way\r\n // depending on how the form is configured in kentico\r\n // if the form is setup to return a message, or reload\r\n // then we will add an event listenter to the form\r\n // get all the forms on the page\r\n _self.forms = $('form[data-ktc-ajax-update]');\r\n if (_self.forms.length > 0) {\r\n _self.trackFormSubmits();\r\n }\r\n\r\n // if the form is configured to redirect to a thank-you page\r\n // we will need to use a different way to track, b/c we will\r\n // lose the context of the form submit.\r\n // check for the URL parameter on the success page\r\n if (location.search.indexOf('formName') > -1) {\r\n // do something with the URL parameter name\r\n\r\n /*\r\n window.dataLayer.push({\r\n 'event': 'formComplete',\r\n 'formName': `Get the value of the formName URL parameter`\r\n });\r\n */\r\n }\r\n }\r\n\r\n\r\n trackAccordions() {\r\n // unambigious reference to the current class\r\n const _self = tps.tracking;\r\n\r\n // the foundation accordion represents\r\n // the accoridon group, not the individual controls\r\n // but we can use foundation to get the open/close events\r\n // for the accordion\r\n // https://get.foundation/sites/docs/accordion.html#js-events\r\n _self.accordions.each((key, elem) => {\r\n\r\n const accordion = $(elem);\r\n\r\n // add a listener on the open\r\n accordion.on('down.zf.accordion', (event, targetContent) => {\r\n // get the title text of the accordion title element\r\n const titleText = $(`#${targetContent[0].getAttribute('aria-labelledby')}`).text();\r\n\r\n window.dataLayer.push({\r\n 'event': 'accordionClick',\r\n 'accordionTitle': titleText,\r\n 'accordionState': 'opened'\r\n });\r\n\r\n })\r\n\r\n // add a listener on the close\r\n accordion.on('up.zf.accordion', (event, targetContent) => {\r\n // get the title text of the accordion title element\r\n const titleText = $(`#${targetContent[0].getAttribute('aria-labelledby')}`).text();\r\n\r\n window.dataLayer.push({\r\n 'event': 'accordionClick',\r\n 'accordionTitle': titleText,\r\n 'accordionState': 'closed'\r\n });\r\n\r\n })\r\n\r\n })\r\n\r\n }\r\n\r\n trackFormSubmits() {\r\n // unambigious reference to the current class\r\n const _self = tps.tracking;\r\n\r\n // for the form submit, there is no direct way to know when\r\n // the form is submitted. The form is rendered 100% by kentico api,\r\n // and the submit is handled by .net MVC (using jquery unobtrusive)\r\n // https://github.com/aspnet/jquery-validation-unobtrusive\r\n\r\n // we can however listen for the submit action on the form, for example:\r\n _self.forms.each((key, elem) => {\r\n\r\n const formID = elem.id;\r\n const form = $(elem);\r\n\r\n // we can check for the submit event on the form\r\n _self.addFormTracking(form, formID)\r\n\r\n });\r\n\r\n }\r\n\r\n addFormTracking(_form, _formID) {\r\n\r\n // unambigious reference to the current class\r\n const _self = tps.tracking;\r\n\r\n // we need to check if there are visible\r\n // errors already on the form\r\n const _formErrors = _form.find('.field-validation-error');\r\n const _formHasErrors = _formErrors.length > 0;\r\n\r\n _form.on('submit', (e) => {\r\n\r\n\r\n // in cases where there were previous validation errors\r\n // and we are tracking the second form submit\r\n // we need to remove the validation error elements\r\n // so we can check if they exist on the submit response below\r\n if (_formHasErrors) {\r\n _formErrors.remove();\r\n }\r\n\r\n const formInterval = setInterval(() => {\r\n\r\n\r\n // we need to check if there are errors that are visible\r\n // as there could be hidden errors after a validation issue is\r\n // returned but corrected on the second submit\r\n const errors = $(`#${_formID} .field-validation-error`);\r\n const successMessage = $(`.formwidget-submit-text`);\r\n\r\n\r\n\r\n\r\n if (successMessage.length > 0) {\r\n // stop checking for the submit\r\n clearInterval(formInterval);\r\n\r\n // we need to do some work to get the form name\r\n // from the form element by using the id attribute\r\n // which has a format of `id=\"form-
-\"`\r\n const formName = _formID.split('-')[1];\r\n\r\n\r\n window.dataLayer.push({\r\n 'event': 'formComplete',\r\n 'formName': formName\r\n });\r\n\r\n } else if (errors.length > 0) {\r\n // stop checking for the submit\r\n // we need to bind to the form again\r\n clearInterval(formInterval);\r\n\r\n // when the MVC partial view for the form is updated\r\n // the element is replaced in the DOM so\r\n // we need to bind to the form submit event again\r\n _self.addFormTracking($(`#${_formID}`), _formID);\r\n\r\n }\r\n\r\n }, 500);\r\n\r\n });\r\n }\r\n\r\n}\r\n","import ResourcesListing from './ResourcesListing';\r\nimport Utility from './tps.utility';\r\nimport Navigation from './tps.navigation';\r\nimport Header from './tps.header';\r\nimport CookiesModal from './tps.cookies-modal';\r\nimport Testimonials from './tps.testimonials';\r\nimport LocationsMap from './tps.locations';\r\nimport Search from './tps.search';\r\nimport Tracking from './tps.tracking';\r\n\r\nexport default class TPS {\r\n\r\n constructor() {\r\n this.resourcesListing = new ResourcesListing();\r\n this.utility = new Utility();\r\n this.navigation = new Navigation();\r\n this.header = new Header();\r\n this.cookiesModal = new CookiesModal();\r\n this.testimonials = new Testimonials();\r\n this.locationsMap = new LocationsMap();\r\n this.search = new Search();\r\n this.tracking = new Tracking();\r\n }\r\n\r\n // On DOM ready\r\n onDomReady() {\r\n const self = this;\r\n\r\n /* Initialize scripts when sections are mounted. Will fire several times, though.\r\n * TODO: find something elegant without having to run separate inits in layout files. \r\n * Kentico's approach on https://docs.xperience.io/k12sp/developing-websites/page-builder-development/developing-widgets-in-mvc didn't work for me.\r\n */\r\n document.addEventListener('kenticoSectionMounted', function () {\r\n self.onDomReadyCallback();\r\n });\r\n\r\n // On DOM ready\r\n document.addEventListener('DOMContentLoaded', () => {\r\n if (document.readyState === 'interactive' || document.readyState === 'complete') {\r\n self.onDomReadyCallback();\r\n }\r\n });\r\n }\r\n\r\n // On DOM ready (callback)\r\n onDomReadyCallback() {\r\n\r\n // Init before frameworks\r\n this.init();\r\n\r\n // Foundation 6 initialization\r\n $(document).foundation();\r\n\r\n // Init after frameworks\r\n this.initAfterFrameworks();\r\n }\r\n\r\n // Init before frameworks\r\n init() {\r\n for (var i in this) {\r\n if (typeof this[i].init === 'function') {\r\n this[i].init();\r\n }\r\n }\r\n }\r\n\r\n // Init after frameworks\r\n initAfterFrameworks() {\r\n for (var i in this) {\r\n if (typeof this[i].initAfterFrameworks === 'function') {\r\n this[i].initAfterFrameworks();\r\n }\r\n }\r\n }\r\n\r\n}\r\n","import TPS from './TPS';\r\n\r\n// TPS base class\r\nwindow.tps = new TPS();\r\n\r\n// On DOM ready\r\nwindow.tps.onDomReady();\r\n"],"names":["ResourcesListing","this","getResourcesWS","inputNodeAlias","inputSearch","buttonSearch","selectCategory","selectSort","resultsWrapper","loader","document","getElementById","initFilters","getResults","self","addEventListener","e","pageNumber","classList","remove","$","ajax","type","url","dataType","data","nodeAliasPath","value","search","category","sort","page","done","res","innerHTML","cardsHtml","foundation","initPagination","window","dataLayer","push","event","query","always","add","querySelectorAll","forEach","button","dataset","Utility","a","result","c","cookie","split","RegExp","d","length","match","cname","cvalue","exdays","Date","setTime","getTime","expires","toUTCString","element","classes","id","elem","createElement","trim","classname","setAttribute","tabindex","textContent","ariaLabel","href","target","htmlString","txt","offsetWidth","offsetHeight","getClientRects","uri","key","i","indexOf","hash","substr","re","separator","replace","encodeURIComponent","slice","querySelector","Navigation","offcanvasUtilityItems","mobileItems","utilityItems","menuItems","menuItemsDropdownToggles","isTouchDevice","navigator","maxTouchPoints","msMaxTouchPoints","tps","navigation","setupDropdownEvents","_self","item","addMouseEvents","toggle","evt","preventDefault","currentTarget","ariaExpanded","clearItemActiveState","parentElement","clearAllItemActiveStates","applyItemActiveState","toggler","Header","header","lastKnownScrollPosition","ticking","setupScrollEvents","scrollY","checkScrollPosition","requestAnimationFrame","body","CookiesModal","disclaimerModal","disclaimerModalReveal","disclaimerModalAcceptButton","disclaimerModalSettingsButton","settingsModal","settingsModalReveal","settingsModalStatisticsSwitch","settingsModalStatisticsItemSwitches","settingsModalFooter","settingsModalConfirmButton","settingsModalValue","cookiesModal","getIndividualCookieSettings","enabled","fetchUrl","URL","location","origin","URLSearchParams","cookieLevel","toString","fetch","method","then","response","setIndividualCookieSettings","on","trigger","checked","setStatisticsItemSwitchesState","switchItem","allStatisticsItemCookiesDisabled","fetchParams","parseInt","handleKeypressEvents","utility","getCookie","JSON","parse","hasOwnProperty","cookieKey","cookieObj","setCookie","stringify","settingsModalCheckbox","checkbox","targetCheckbox","allChecked","Array","from","every","_typeof","obj","Symbol","iterator","constructor","prototype","instance","Constructor","TypeError","props","descriptor","enumerable","configurable","writable","Object","defineProperty","protoProps","staticProps","_getPrototypeOf","o","setPrototypeOf","getPrototypeOf","__proto__","_setPrototypeOf","p","_possibleConstructorReturn","call","ReferenceError","_assertThisInitialized","_superPropBase","object","property","_get","Reflect","get","receiver","base","desc","getOwnPropertyDescriptor","arguments","apply","defaults","startAt","perView","focusAt","gap","autoplay","hoverpause","keyboard","bound","swipeThreshold","dragThreshold","perSwipe","touchRatio","touchAngle","animationDuration","rewind","rewindDuration","animationTimingFunc","waitForTransition","throttle","direction","peek","cloningRatio","breakpoints","swipeable","dragging","ltr","rtl","slider","carousel","slide","clone","active","arrow","disabled","nav","warn","msg","console","error","concat","toInt","isString","isObject","isFunction","isUndefined","isArray","mount","glide","extensions","events","components","name","_name","prop","definition","mergeOptions","settings","options","assign","EventsBus","undefined","hop","handler","index","context","emit","Glide$1","Glide","selector","_c","_t","_e","transformers","pattern","Run","make","distance","Transition","disable","Move","interval","_o","set","_i","_d","status","now","func","wait","timeout","args","previous","later","leading","throttled","at","remaining","clearTimeout","trailing","setTimeout","cancel","MARGIN_TYPE","siblings","node","parentNode","n","firstChild","matched","nextSibling","nodeType","exist","HTMLElement","TRACK_SELECTOR","EventsBinder","listeners","el","closure","capture","removeEventListener","VALID_DIRECTIONS","FLIPED_MOVEMENTS","Rtl","Components","modify","translate","Direction","is","Gap","multiplier","Math","floor","Sizes","slideWidth","Gaps","Grow","Clones","grow","Peeking","Peek","before","Focusing","width","supportsPassive","opts","supportsPassive$1","START_EVENTS","MOVE_EVENTS","END_EVENTS","MOUSE_EVENTS","CONTROLS_SELECTOR","PREVIOUS_CONTROLS_SELECTOR","NEXT_CONTROLS_SELECTOR","sortBreakpoints","points","keys","reduce","r","k","COMPONENTS","Html","Events","root","track","collectSlides","slides","wrapper","children","filter","contains","_r","t","Translate","transform","TRANSFORMERS","mutate","transformer","mutator","translate3d","style","mozTransform","webkitTransform","getStartIndex","isOffset","getTravelDistance","travelDistance","isType","movement","after","startWidth","compose","duration","transition","callback","enable","offset","resolve","token","join","addClass","removeClass","_v","setupSlides","setupWrapper","wrapperSize","reductor","len","marginLeft","marginRight","_this","items","collect","_Glide$settings","peekIncrementer","cloneCount","round","append","reverse","prepend","max","cloneNode","_clone","unshift","_Components$Html","half","appendChild","_i2","insertBefore","_i3","removeChild","Resize","Binder","bind","unbind","off","destroy","Build","typeClass","activeClass","sibling","removeClasses","_Glide$settings$class","move","calculate","isStart","isEnd","steps","viewSize","calculateForwardIndex","isBound","normalizeForwardIndex","_index","ceil","calculateBackwardIndex","normalizeBackwardIndex","_m","step","Swipe","swipeSin","swipeStartX","swipeStartY","passive","bindSwipeStart","start","swipe","touches","pageX","pageY","bindSwipeMove","bindSwipeEnd","subExSx","subEySy","powEX","abs","powEY","swipeHypotenuse","sqrt","swipeCathetus","asin","PI","stopPropagation","parseFloat","end","_Glide$settings2","threshold","swipeDistance","swipeDeg","unbindSwipeMove","unbindSwipeEnd","_Glide$settings3","unbindSwipeStart","_this2","_this3","changedTouches","Images","dragstart","Anchors","detached","prevented","_a","click","detach","draggable","attach","Controls","_n","_arrowControls","next","addBindings","setActive","removeActive","controls","setArrowState","resetArrowState","disableArrow","_len","lists","_key","list","_len2","_key2","removeBindings","elements","getAttribute","Keyboard","press","keyCode","Autoplay","setInterval","stop","time","clearInterval","Breakpoints","matchMedia","point","matches","_Core","subClass","superClass","create","_inherits","Derived","hasNativeReflectConstruct","_super","construct","sham","Proxy","Boolean","valueOf","_isNativeReflectConstruct","Super","NewTarget","Testimonials","carousels","testimonials","initCarousels","LocationsMap","buttonUseCurrent","searchInput","searchSubmit","mapWrapper","searchMessage","startLocation","lat","lng","svgMarkerPath","googleMap","googleGeocoder","userMarker","branchesData","loadGoogleMapsScript","script","src","tpsSettings","googleMapsKey","async","head","google","maps","Map","center","LatLng","zoom","disableDefaultUI","Geocoder","json","markers","customIcon","path","fillColor","fillOpacity","strokeWeight","rotation","scale","anchor","Point","marker","Marker","position","Number","icon","map","infoWindow","InfoWindow","content","title","listElement","googleMarkerObject","locationData","addListener","selectLocationElement","catch","log","getCurrentLocation","searchByInput","locationID","open","shouldFocus","close","getZoom","getBounds","getPosition","zoomIntoLocation","distances","resultRadius","anyMarkersWithinRadius","branchID","branch","geometry","spherical","computeDistanceBetween","b","order","setMap","geolocation","getCurrentPosition","coords","latitude","longitude","setUserLocation","alert","geocode","address","results","radius","circle","Circle","strokeOpacity","fitBounds","Search","input","updateUrlParameter","pathname","history","replaceState","Tracking","accordions","forms","tracking","trackAccordions","trackFormSubmits","each","accordion","targetContent","titleText","text","formID","form","addFormTracking","_form","_formID","_formErrors","find","_formHasErrors","formInterval","errors","formName","TPS","resourcesListing","locationsMap","onDomReadyCallback","readyState","init","initAfterFrameworks","onDomReady"],"sourceRoot":""}