{"version":3,"file":"/dist/js/site/friesland-boating.js","mappings":";44CA6BA,SAASA,IACL,IAAIC,EAAS,GAQb,OANAC,GAAGC,KACEC,OAAO,qBACPC,YACAC,SAAQ,SAACC,GACNN,EAAS,GAAH,SAAOA,GAAM,EAAKO,EAAyBD,IACrD,IACGN,CACX,CAOA,SAASO,EAAyBD,GAC9B,IAAIN,EAAS,CAACM,GAMd,OALIA,EAAME,eAAe,gBACrBF,EAAMG,YAAYJ,SAAQ,SAACK,GACvBV,EAAS,GAAH,SAAOA,GAAM,EAAKO,EAAyBG,IACrD,IAEGV,CACX,MAjCiBW,IAAbV,GAAGW,OACHX,GAAGW,MAAMC,UAAU,mCAAoC,+BArBnC,SAACC,EAAOC,EAAWC,GACvC,IAAMC,OAAwC,IAApBH,EAAMI,YAA8BJ,EAAMI,UAEpE,MAAuB,cAAnBH,EAAUI,KACHC,OAAOC,OAAOP,EAAO,CACxBI,UAAWD,EAAa,gBAAH,wBAAsCH,EAAMI,aAYlEJ,CACX,SAqCoBH,IAAhBV,GAAGqB,UACHrB,GAAGqB,UAAS,WAMR,GAAyC,oBAA9BC,0BAA2C,CAClD,IAAMC,EAAmBvB,GAAGD,OAAOyB,gBAC7BC,EAAiB3B,IAEvBwB,0BAA0BlB,SAAQ,SAACsB,GAQ/B,QAAuBhB,IANAe,EAAeE,MAAK,SAACtB,GACxC,OAAOA,EAAMa,OAASQ,CAC1B,IAIkC,CAC9B,IAAME,EAASL,EAAiBI,MAAK,SAACtB,GAClC,OAAOA,EAAMa,OAASQ,CAC1B,SACehB,IAAXkB,IACAA,EAAOC,SAAW,aAE1B,MAII7B,GAAGD,OAAO+B,oBAAoBJ,EAEtC,GACJ,CACJ,IAGJK,SAASC,iBACL,oBACA,WACI,IAAK,IAAIC,EAAI,EAAGA,EAAI,GAAIA,IAAK,CACzB,IACiBC,EAD2C,IAA5CH,SAASI,iBAAiB,aAAD,OAAcF,KACtC,IAAjB,IAAK,EAAL,qBAAKG,EAAC,QACFC,OAAOC,OAAOF,EAAG,CAAEG,MAAON,GAC7B,UAAAO,EAAAA,EAAAA,EAAA,SAAAA,EAAAA,GAAA,CACL,CACJ,GACA,CAAEC,SAAS,eCvGfV,SAASC,iBACL,oBACA,WACI,IAAMU,EAAe,SAACC,EAAUC,GAC5B,IAAMC,EAAQd,SAASe,cAAcH,GACrC,GAAIE,EAAO,CACP,IAAME,EAASF,EAAMC,cAAc,sBAC/BC,IACAA,EAAOC,UAAYJ,EACnBG,EAAOE,UAAW,EAE1B,CACJ,EAEAP,EAAa,kCAAmC,eAChDA,EAAa,oCAAqC,iBAClDA,EAAa,mCAAoC,eACrD,GACA,CAAED,SAAS,eCXf,IAAMS,EAAoBnB,SAASe,cAAc,iCAC7CI,GACAA,EACKJ,cAAc,UACdd,iBAAiB,SAAS,SAACmB,GAAC,OAXrC,SAAmBC,EAAOC,EAAQC,GAC9B,IAAMC,EAAI,IAAIC,KACdD,EAAEE,QAAQF,EAAEG,UAAqB,GAATJ,EAAc,GAAK,GAAK,KAChD,IAAMK,EAAU,WAAaJ,EAAEK,cAC/B7B,SAAS8B,OAAST,EAAQ,IAAMC,EAAS,IAAMM,CACnD,CAM0CG,CAAU,qCAAqC,EAAM,EAAE,GAAE,CAAErB,SAAS,kiCCX9GJ,OAAOL,iBACH,QACA,WAEI,GAAIK,OAAON,SAASgC,cAChB,GAAsC,UAAlCC,WAAWC,WAAWC,QAAqB,CAC3C,IAC4BhC,EADkC,IAA9CH,SAASI,iBAAiB,qBACd,IAA5B,IAAK,EAAL,qBAA8B,KAAnBgC,EAAM,QACPC,EAAYD,EAAOE,MAAMD,UACzBE,EAAWH,EAAOI,cAAcC,UAAUC,SAAS,UACrDL,IAAcE,GACdH,EAAOE,MAAMK,aAAa,QAASN,GACnCD,EAAOE,MAAMM,YAAY,aAAc,OAAQ,cACxCP,GAAaE,IACpBH,EAAOE,MAAMK,aAAa,QAAS,QAAF,OAAUN,EAAS,aACpDD,EAAOE,MAAMM,YAAY,aAAc,OAAQ,aAEvD,CAAC,UAAAnC,EAAAA,EAAAA,EAAA,SAAAA,EAAAA,GAAA,CACL,OAEA,GAAsC,UAAlCwB,WAAWC,WAAWC,QAAqB,CAC3C,IAC4BU,EADkC,IAA9C7C,SAASI,iBAAiB,qBACd,IAA5B,IAAK,EAAL,qBAA8B,KAAnBgC,EAAM,QACPC,EAAYD,EAAOE,MAAMD,UACzBE,EAAWH,EAAOI,cAAcC,UAAUC,SAAS,UACrDL,GAAaE,GACbH,EAAOE,MAAMM,YAAY,aAAc,QAAF,OAAUP,EAAS,YAAY,YAE5E,CAAC,UAAAS,EAAAA,EAAAA,EAAA,SAAAA,EAAAA,GAAA,CACL,CAER,GACA,CAAEpC,SAAS,eC7BfV,SAASC,iBACL,oBACA,WACI,SAAS8C,IAEL,IAAIC,EAAYhD,SAASiD,cAAc,OAEvCD,EAAUV,MAAMY,SAAW,SAE3BlD,SAASmD,KAAKC,YAAYJ,GAE1B,IAAIK,EAAiBL,EAAUM,YAAcN,EAAUO,YAEvDvD,SAASmD,KAAKK,YAAYR,GAEpBhD,SAASmD,KAAKM,aAAenD,OAAOoD,cACtCL,EAAiB,GAGE,IAAnBA,GACArD,SAASmD,KAAKV,UAAUkB,IAAI,iBAC5B3D,SAASmD,KAAKR,aAAa,QAAS,iBAAF,OAAmBU,EAAc,QAEnErD,SAASmD,KAAKV,UAAUmB,OAAO,gBAEvC,CAEAb,IACAzC,OAAOL,iBAAiB,SAAU8C,EAAkB,CAAErC,SAAS,IAE/D,IAAMmD,EAAO7D,SAASe,cAAc,4BACpC,GAAa,OAAT8C,EAAe,KACNC,EAAT,WACI,IAAMC,EAAQF,EAAKP,YACnBtD,SAASmD,KAAKR,aAAa,QAAS,mBAAF,OAAqBoB,EAAQ,EAAC,MACpE,EAEAD,IACAxD,OAAOL,iBAAiB,SAAU6D,EAAgB,CAAEpD,SAAS,GACjE,CASJ,GACA,CAAEA,SAAS,gBCpDf,WACI,IAAMsD,EAAUhE,SAASiE,uBAAuB,kBAAkB,GAClE,GAAID,EAAS,KA2CAE,EAAT,WACI,IAAIC,EAAYC,EAAcC,WAAarE,SAASsE,gBAAgBD,UAC/DE,IACDJ,EAAY7D,OAAOkE,SAAWxE,SAASsE,gBAAgBD,WAEvDF,GAAaM,EACbT,EAAQvB,UAAUkB,IAAI,2BAEtBK,EAAQvB,UAAUmB,OAAO,2BAE7Bc,GAAY,CAChB,EAESC,EAAT,SAAkBC,EAAOC,EAAUC,EAAIC,GACnC,IAAMC,EAAUD,GAAYzE,OACxB2E,EAAQD,EAAQX,WAAarE,SAASsE,gBAAgBD,UACtDa,EAAc,KAEbH,IAAUE,EAAQ3E,OAAOkE,SAAWxE,SAASsE,gBAAgBD,WAelE/D,OAAO6E,uBAbe,SAAhBC,EAAiBC,GACdH,IAAaA,EAAcG,GAChC,IAAIC,EAAWD,EAAYH,EACvBI,EAAWT,IAAUS,EAAWT,GACpC,IAAMU,EAAMC,KAAKC,cAAcH,EAAUL,EAAOL,EAAQK,EAAOJ,GAC/DG,EAAQL,SAAS,EAAGY,GAChBD,EAAWT,EACXvE,OAAO6E,sBAAsBC,GAE7BN,GAAMA,GAEd,GAGJ,EA5EMP,EAAcP,EAAQ0B,aAAa,gBACnCtB,EAAgBG,EAAcvE,SAASe,cAAcwD,GAAejE,OAGtEqF,EAAiBC,SAAS5B,EAAQ0B,aAAa,mBAAqB,IAGpEjB,EAAemB,SAAS5B,EAAQ0B,aAAa,iBAAmB,EAEhEhB,GAAY,EAGhBV,EAAQ/D,iBAAiB,SAAS,SAAC4F,GAkEnC,IAAmBb,EAjEfa,EAAMC,iBACDxF,OAAO6E,sBAGRZ,EAAcI,EAAS,EAAGgB,GAAgB,EAAOvB,GAAiBO,EAAS,EAAGgB,GAF9EvB,EAAcO,SAAS,EAAG,IA+DfK,EA1DLhF,SAAS+F,eAAe/B,EAAQ0B,aAAa,QAAQM,QAAQ,IAAK,QA2D9DhB,EAAUhF,SAASiG,qBAAqB,QAAQ,IAC9DjB,EAAQkB,QACJlG,SAASmG,gBAAkBnB,IAC3BA,EAAQrC,aAAa,WAAY,MACjCqC,EAAQkB,QA9DhB,IAGAhC,IACIO,EAAe,GACfL,EAAcnE,iBACV,UACA,SAAC4F,GACQnB,IACDA,GAAY,EACXpE,OAAO6E,sBAIF7E,OAAO6E,sBAAsBjB,GAH7BkC,YAAW,WACPlC,GACJ,GAAG,KAGjB,GACA,CAAExD,SAAS,IAiDnB8E,KAAKC,cAAgB,SAAUY,EAAGC,EAAGjG,EAAGmB,GAEpC,OADA6E,GAAK7E,EAAI,GACD,EAAWnB,EAAI,EAAKgG,EAAIA,EAAIC,GAE3BjG,EAAI,KADbgG,GACwBA,EAAI,GAAK,GAAKC,CAC1C,CACJ,CACH,CAjGD,cC0RIhG,OAAOC,OA5QP,SAAeyE,EAASuB,GACpBA,EAAUA,GAAW,CAAC,EAEtB,IAsBIC,EArBAC,EAAMnG,OACNoG,EAAM,CACFlG,MAAO+F,EAAQ/F,OAAS,EACxBmG,oBACqC,IAA1BJ,EAAQI,gBACTJ,EAAQI,eAElBC,aAAcL,EAAQK,cAAgB,CAAC,IAAK,IAAK,IAAK,IAAK,KAC3DC,QAASN,EAAQM,UAAW,EAC5BC,eAAgBP,EAAQO,gBAAkB,IAC1CC,eAAgBR,EAAQQ,gBAE5BC,EAAMhC,EAAQ1C,MACd2E,EAAejC,EAAQ/D,UACvBiG,OAC4C,IAAjClC,EAAQ1C,MAAM6E,gBACzBC,EAAaV,EAAIlG,MACjB6G,EACID,EAAWE,UACVF,EAAWE,QAAQ,OAAS,GACzBF,EAAWE,QAAQ,OAAS,GAgBxC,SAASC,EAAaC,EAAMC,GAoBxB,OAnBKhB,EAAIiB,mBACLjB,EAAIiB,iBAAmB,SAASC,EAAIC,GAchC,OAbAC,KAAKF,GAAKA,EACVE,KAAKC,iBAAmB,SAASL,GAC7B,IAAIM,EAAK,kBAOT,MANY,SAARN,IAAiBA,EAAO,cACxBM,EAAGC,KAAKP,KACRA,EAAOA,EAAKzB,QAAQ+B,GAAI,WACpB,OAAOE,UAAU,GAAGC,aACxB,KAEGP,EAAGQ,cAAgBR,EAAGQ,aAAaV,GACpCE,EAAGQ,aAAaV,GAChB,IACV,EACOI,IACX,GAGGpB,EAAIiB,iBAAiBF,EAAM,MAAMM,iBAAiBL,EAC7D,CAMA,SAASW,EAAYC,GACjB,IAAIC,EAAcD,GAAUrD,EAAQuD,aAChCC,EAAaC,EAAczD,GAE/B,OAAOQ,KAAKkD,IAAIlD,KAAKmD,MAAML,EAAcE,GAAa,EAC1D,CAcA,SAASC,EAAcjB,GACnB,IAAIoB,EAAKrB,EAAaC,EAAM,eAM5B,MALU,UAANoB,IAGAA,EAAiD,IAA5ChD,SAAS2B,EAAaC,EAAM,eAE9B5B,SAASgD,EACpB,CAnEIlC,EAAIK,kBACJP,EAA0BxG,SAASiD,cAAc,SACzBhC,UAAYyF,EAAIK,gBAoE5C,IAEI8B,EACAC,EAgJAC,EAtKkBC,EAmBlBpC,EAAeF,EAAIE,aAAaqC,MAAM,GACtCC,EAAYtC,EAAa,GAO7B,SAASuC,EAAa3B,GAElB,OAAIA,EAAK4B,UAAUC,UAAY7B,EAAK4B,UAAUC,SAASC,OAAS,EACrDH,EACHI,MAAMC,UAAUP,MAAMQ,KAAKjC,EAAK6B,UAAUK,OAK7ClC,EAAK4B,WACL5B,EAAK4B,UAAUO,WACY,IAA5BnC,EAAK4B,UAAUO,WACfnC,EAAK4B,UAAUO,WAAajD,EAAII,eAOzBU,EAAK4B,WALZ5B,EAAK4B,UAAUQ,WAAWpG,YAAYgE,EAAK4B,WACpCD,EAAanE,GAM5B,CA0GA,SAAS6E,EAAcrC,EAAMsC,GACzBtC,EAAKmC,UAAYG,EAAMpD,EAAII,cAC/B,CAWA,GAPkB,QAAdM,EACAA,EAAagB,IACNf,IACPD,EAAagB,EAAYxC,SAASwB,KAIlCF,GAAuBR,EAAIC,eAC3BK,EAAI9D,SAAW,SACf8D,EAAI+C,aAAe,WACnB/C,EAAIgD,gBAAkB,WACtBhD,EAAIiD,QAAU,cACdjD,EAAIG,gBAAkBC,EAElBC,IACAL,EAAIqB,OAAS3B,EAAIlG,MAAQ,UAE1B,CACH,IAAI6H,GAlLcW,EAkLQ5B,EAjLTqB,EAAczD,GACXgE,GAiLhBX,GAAUrD,EAAQuD,eAClBQ,EA9HR,SAASmB,EAASC,EAAQC,GACtB,GAAKA,EAAL,CAcA,IAAIT,EAAYQ,EAAOR,UAAU3D,QAAQU,EAAII,eAAgB,IA2C7D,GAxCK+B,IAGGK,EADAtC,EAAa0C,OAAS,EACV1C,EAAayD,QAIb,GAGhBxB,EAASc,EAAUW,MAAMpB,IAKzBL,EAAOS,OAAS,GAEhBR,EAAYD,EAAOa,MAEnBG,EAAcM,EAAQtB,EAAO0B,KAAKrB,KAIlCL,EAAS,KAITrC,IACA2D,EAAOR,UAAYQ,EAAOR,UAAU3D,QAChCU,EAAII,eACJ,IAEJ9B,EAAQ/D,UACJkJ,EAAOR,UACP,IACAnD,EAAwBvF,UACxByF,EAAII,gBAIR+B,GAEA,GAAI7D,EAAQuD,cAAgB6B,EAAW,CAEnC,KAAIxD,EAAa0C,QAAU,GAAkB,IAAbJ,GAS5B,OAAOlE,EAAQ/D,UARf4I,EACIM,EACAtB,EAAO0B,KAAKrB,GAAaA,EAAYJ,GAEzCD,EAAS,IAMjB,MAMiB,IAAbK,IACAW,EAAcM,EAAQ,IACtBA,EAAShB,EAAanE,GAxE1B4B,EAAeF,EAAIE,aAAaqC,MAAM,GACtCC,EAAYtC,EAAa,GACzBiC,EAAS,KACTC,EAAY,MA4EhB,IAAIpC,EAAIG,QAQJ,OAAOqD,EAASC,EAAQC,GAPxBhE,YACI,WACI8D,EAASC,EAAQC,EACrB,IACgB,IAAhB1D,EAAIG,QAAmB,GAAKH,EAAIG,QA1FxC,CA+FJ,CA4BsBqD,CAASf,EAAanE,GAAUqD,GAEtD,CAEA,MAAO,CACHmC,SAAUvD,EACVwD,QAAS1B,EAEjB,0wBChRJzI,OAAOL,iBAAiB,QAAQ,WAC5B,IAPK,mBAAmB+H,KAAK0C,UAAUC,WACP,aAAvBD,UAAUC,UAA2BD,UAAUE,eAAiB,KACpEtK,OAAOuK,SAKD,CACP,IAAMC,EAAa9K,SAASI,iBAAiB,0BACzC0K,EAAWxB,QACXyB,EAAID,GAAYzM,SAAQ,SAAC2M,GAAS,OAC9BA,EAAU1I,MAAMM,YAAY,wBAAyB,SAAU,YAAY,GAGvF,CACJ,2PCXA,SAAWqI,EAAG3K,EAAQN,EAAUrB,GAgC5B,SAASuM,EAASlG,EAASuB,GACvB,IAAI4E,EAAOtD,KAEW,UAAlBuD,EAAO7E,YACAA,EAAQ8E,eACR9E,EAAQ+E,OACfL,EAAEM,OAAO1D,KAAMtB,IAGnBsB,KAAK2D,SAAWP,EAAEjG,IAEb6C,KAAK4D,UAAY5D,KAAK2D,SAASE,GAAG,SACnC7D,KAAK4D,SAAW5D,KAAK2D,SAASG,KAAK,QAGvC,IAAIC,GAAa/D,KAAKgE,SAAW,IAAIC,cAAcC,MAAM,SAAW,GA0CpE,GAxCIH,EAAUtC,OAAS,GACnBsC,EAAUI,KAAK,UAEK,GAApBJ,EAAUtC,QACVsC,EAAUI,KAAKJ,EAAU,IAGT,OAAhBA,EAAU,IAA+B,UAAhBA,EAAU,IAAkC,QAAhBA,EAAU,IAAgC,SAAhBA,EAAU,KACzFA,EAAY,CAACA,EAAU,GAAIA,EAAU,KAGrC/D,KAAKoE,YAActN,IAAWiN,EAAU,GAAK/D,KAAKoE,UAAUH,eAC5DjE,KAAKqE,YAAcvN,IAAWiN,EAAU,GAAK/D,KAAKqE,UAAUJ,eAEhEX,EAAKc,UAAYL,EAAU,GAC3BT,EAAKe,UAAYN,EAAU,GAEL,QAAlB/D,KAAKoE,WAAyC,SAAlBpE,KAAKoE,YAC7BE,MAAMvG,SAASiC,KAAKoE,YACpBpE,KAAKoE,UAAY,SAEjBpE,KAAKoE,UAAYrG,SAASiC,KAAKoE,YAIjB,OAAlBpE,KAAKqE,WAAwC,UAAlBrE,KAAKqE,YAC5BC,MAAMvG,SAASiC,KAAKqE,YACpBrE,KAAKqE,UAAY,SAEjBrE,KAAKqE,UAAYtG,SAASiC,KAAKqE,YAIvCrE,KAAKgE,SACDhE,KAAKoE,WACJE,MAAMtE,KAAKoE,WAAa,GAAK,MAC9B,IACApE,KAAKqE,WACJC,MAAMtE,KAAKqE,WAAa,GAAK,MAE9BxB,UAAU0B,UAAUL,MAAM,sBAQ1B,OAPIlE,KAAK4D,UAAY5D,KAAKwE,SAAWxE,KAAK2D,SAASE,GAAG,QAClD7D,KAAK2D,SAASc,IAAI,CACdC,gBAAiB,QAAU1E,KAAK4D,SAAW,KAC3Ce,eAAgB,QAChBC,mBAAoB5E,KAAKgE,WAG1BhE,KAGX,GAAI6C,UAAU0B,UAAUL,MAAM,aAQ1B,OAPIlE,KAAK4D,UAAY5D,KAAK6E,aAAe7E,KAAK2D,SAASE,GAAG,QACtD7D,KAAK2D,SAASc,IAAI,CACdC,gBAAiB,QAAU1E,KAAK4D,SAAW,KAC3Ce,eAAgB,QAChBC,mBAAoB5E,KAAKgE,WAG1BhE,KAGXA,KAAK8E,QAAU1B,EAAE,WAAW2B,UAAU/E,KAAKgF,iBAE3C,IAAIC,EAASjF,KAAK2D,SAAS5L,KAAK,qBAC5BmN,GAAgB,EAEC,GAAjBD,EAAOxD,OAAazB,KAAKmF,QAAU/B,EAAE,WAAW2B,UAAU/E,KAAK8E,UAE/D9E,KAAKmF,QAAUF,EAAOF,UAAU/E,KAAK8E,SACrCI,GAAgB,GAGpBlF,KAAK8E,QAAQM,SAAS,mBAAmBX,IAAI,CACzCY,WAAY,SACZC,OAAQtF,KAAKsF,OACbtB,SAAU,QACVuB,IAAK,EACLC,KAAM,EACNnK,SAAU,WAGd2E,KAAKmF,QAAQC,SAAS,mBAAmBK,IAAI,QAAQ,WAC5CnC,EAAKoC,eAAkBpC,EAAKqC,eAC7BrC,EAAKoC,cAAgB1F,KAAK0F,eAAiB1F,KAAKQ,QAAU,EAC1D8C,EAAKqC,aAAe3F,KAAK2F,cAAgB3F,KAAK9D,OAAS,GAE3DoH,EAAKsC,YAActC,EAAKqC,aAAerC,EAAKoC,cAE5CrC,EAASwC,SAAWxC,EAASyC,QAC7BzC,EAAS0C,QAAQ5B,KAAKb,GACtBD,EAAS2C,SAAU,EACnB3C,EAAS4C,eACb,IAEKf,IAAelF,KAAKmF,QAAQ,GAAGe,IAAMlG,KAAK4D,WAE1C5D,KAAK0F,eAAiB1F,KAAK2F,cAAiB3F,KAAKmF,QAAQ,GAAGgB,UAAYlB,EAAOxD,OAAS,IACzFzB,KAAKmF,QAAQiB,QAAQ,OAE7B,EAjJA,WAGI,IAFA,IAAIC,EAAW,EACXC,EAAU,CAAC,KAAM,MAAO,SAAU,KAC7BC,EAAI,EAAGA,EAAID,EAAQ7E,SAAWhJ,EAAO6E,wBAAyBiJ,EACnE9N,EAAO6E,sBAAwB7E,EAAO6N,EAAQC,GAAK,yBACnD9N,EAAO+N,qBACH/N,EAAO6N,EAAQC,GAAK,yBAA2B9N,EAAO6N,EAAQC,GAAK,+BAGtE9N,EAAO6E,wBACR7E,EAAO6E,sBAAwB,SAAUmJ,GACrC,IAAIC,GAAW,IAAI9M,MAAOE,UACtB6M,EAAahJ,KAAKkD,IAAI,EAAG,IAAM6F,EAAWL,IAC1CO,EAAKnO,EAAO8F,YAAW,WACvBkI,EAASC,EAAWC,EACxB,GAAGA,GAEH,OADAN,EAAWK,EAAWC,EACfC,CACX,GAECnO,EAAO+N,uBACR/N,EAAO+N,qBAAuB,SAAUI,GACpCC,aAAaD,EACjB,EACP,CAxBD,GAqJAxD,EAAEM,OAAOL,EAAS1B,UAAW,CACzBmF,MAAO,GACPC,MAAO,EACPzB,QAAS,IACTd,QAAQ,EACRK,YAAY,EACZb,SAAU,SACVgD,eAAe,EACfhC,gBAAiB,OAEjBxB,QAAS,WACLxD,KAAKiH,SAAWjH,KAAK2D,SAASuD,aAC9BlH,KAAKmH,UAAYnH,KAAK2D,SAASyD,cAA6B,EAAbpH,KAAK+G,MACpD/G,KAAKqH,aAAerH,KAAK2D,SAAS2D,SAAS/B,IAAMvF,KAAK+G,MACtD/G,KAAKuH,cAAgBvH,KAAK2D,SAAS2D,SAAS9B,KAC5CxF,KAAKwH,gBAAkBxH,KAAKqH,aAAerH,KAAKmH,UAEhD,IAMIM,EANAC,EAAYrE,EAASqE,UACrBC,EAAYtE,EAASsE,UACrBC,EAAYjK,KAAKkK,IAAI7H,KAAKqH,aAAcM,EAAYD,GACpDI,EAAYnK,KAAKkD,IAAIb,KAAKqH,aAAerH,KAAKmH,UAAYO,EAAW,GACrEK,EAAkB/H,KAAKmH,WAAaS,EAAYE,IAAc,EAAI9H,KAAK8G,OAAU,EACjFkB,GAAmBhI,KAAKqH,aAAeO,IAAc,EAAI5H,KAAK8G,OAAU,EAGxEiB,EAAiB/H,KAAK4F,aAAe5F,KAAKiH,UAC1CjH,KAAKiI,WAAcF,EAAiB/H,KAAK4F,YAAe,EACxD5F,KAAKkI,YAAcH,EACnB/H,KAAKmI,cAAgBH,EAErBP,EAASzH,KAAKiI,WAAajI,KAAKiH,SAEV,QAAlBjH,KAAKoE,UACLpE,KAAKoI,WAAa,EACO,SAAlBpI,KAAKoE,UACZpE,KAAKoI,YAAcX,EACXnD,MAAMtE,KAAKoE,WAGnBpE,KAAKoI,YAAeX,EAAS,EAAK,EAFlCzH,KAAKoI,WAAazK,KAAKkD,IAAIb,KAAKoE,WAAYqD,KAKhDzH,KAAKiI,WAAajI,KAAKiH,SACvBjH,KAAKkI,YAAelI,KAAKiH,SAAWjH,KAAK4F,YAAe,EACxD5F,KAAKoI,WAAa,EAElBX,EAASzH,KAAKkI,YAAcH,EAEN,OAAlB/H,KAAKqE,UACLrE,KAAKmI,cAAgBH,EACI,UAAlBhI,KAAKqE,UACZrE,KAAKmI,cAAgBH,EAAiBP,EAC9BnD,MAAMtE,KAAKqE,WAGnBrE,KAAKmI,cAAiBH,EAAiBP,EAAS,EAAK,EAFrDzH,KAAKmI,cAAgBH,EAAiBrK,KAAKkD,IAAIb,KAAKqE,WAAYoD,GAK5E,EAEAhE,OAAQ,WACJ,IAAIjH,EAAY6G,EAAS7G,UACrB6L,EAAahF,EAASgF,WACtBC,EAAatI,KAAKgH,cAAgB3D,EAASiF,WAAa,EACxDC,EAAe/L,EAAY6G,EAASqE,UAEpC1H,KAAKwH,gBAAkBhL,GAAawD,KAAKqH,cAAgBkB,GACzDvI,KAAKqF,WAAa,UAClBrF,KAAKwI,UAAYxI,KAAKqH,aAAe7K,EACrCwD,KAAKyI,WAAazI,KAAKuH,cAAgBc,EACvCrI,KAAK0I,UAAY1I,KAAKmI,cAAgBnI,KAAKwI,WAAa,EAAIxI,KAAK8G,QAEjE9G,KAAKqF,WAAa,SAGtBrF,KAAK8E,QAAQL,IAAI,CACbkE,UAAW,eAAiB3I,KAAKyI,WAAa,QAAUzI,KAAKwI,UAAYF,GAAc,WACvFjD,WAAYrF,KAAKqF,WACjB7E,OAAQR,KAAKmH,UACbjL,MAAO8D,KAAKiH,WAGhBjH,KAAKmF,QAAQV,IAAI,CACbkE,UAAW,eAAiB3I,KAAKoI,WAAa,OAASpI,KAAK0I,UAAY,WACxE1E,SAAU,WACVxD,OAAQR,KAAKkI,YACbhM,MAAO8D,KAAKiI,WACZW,SAAU,QAElB,IAKJxF,EAAEM,OAAOL,EAAU,CACf7G,UAAW,EACX6L,WAAY,EACZX,UAAW,EACXmB,SAAU,EACVlB,UAAW,GAAK,GAChBmB,SAAU,GAAK,GACf/C,QAAS,GACTgD,SAAS,EACT/C,SAAS,EACTgD,QAAQ,EAERlD,MAAO,WACH,IAAI9F,KAAK+I,QAAT,CAEA,IAAIzF,EAAOtD,KAEPiJ,EAAO7F,EAAEjL,GACT+Q,EAAO9F,EAAE3K,GAET0Q,EAAiB,WACjB9F,EAASqE,UAAYwB,EAAK1I,SAC1B6C,EAASwF,SAAWK,EAAKhN,QACzBmH,EAASsE,UAAYsB,EAAKzI,SAC1B6C,EAASyF,SAAWG,EAAK/M,OAC7B,EAEIkN,EAAqB,WACrB,IAAIC,EAAeH,EAAK1M,YACpB8M,EAAejG,EAASsE,UAAYtE,EAASqE,UAC7C6B,EAAgBlG,EAASyF,SAAWzF,EAASwF,SACjDxF,EAAS7G,UAAYmB,KAAKkD,IAAI,EAAGlD,KAAKkK,IAAIyB,EAAcD,IACxDhG,EAASgF,WAAa1K,KAAKkD,IAAI,EAAGlD,KAAKkK,IAAI0B,EAAeL,EAAKb,eAC/DhF,EAASiF,WAAa3K,KAAKkD,IAAIwI,EAAeC,EAAc3L,KAAKkK,IAAIwB,EAAc,GACvF,EAEAH,EAAKM,GAAG,uCAAuC,WAC3CL,IACA7F,EAAKE,UACLH,EAAS2C,SAAU,EACnB3C,EAAS4C,eACb,IAAGuD,GAAG,uCAAuC,WACzCJ,IACA/F,EAAS4C,eACb,IAEAkD,IACAC,IAEApJ,KAAK+I,SAAU,EAEf,IAAIU,GAAgB,GAEpB,SAASC,IACL,GAAID,GAAgBhR,EAAOkR,YAGvB,OADAlR,EAAO6E,sBAAsBoM,IACtB,EACJD,EAAehR,EAAOkR,YAE7BrG,EAAKG,SACLhL,EAAO6E,sBAAsBoM,EACjC,CAEAA,EAnDwB,CAoD5B,EAEAE,UAAW,SAAUlL,GACK,UAAlB6E,EAAO7E,YACAA,EAAQ8E,eACR9E,EAAQ+E,OACfL,EAAEM,OAAO1D,KAAK2B,UAAWjD,GAEjC,EAEA8E,QAAS,WACLJ,EAAEyG,KAAK7J,KAAK+F,SAAS,WACjB/F,KAAKwD,SACT,IACAxD,KAAKgG,SAAU,CACnB,EAEAvC,OAAQ,WACJzD,KAAKgG,SAAWhG,KAAKwD,UACrBJ,EAAEyG,KAAK7J,KAAK+F,SAAS,WACjB/F,KAAKyD,QACT,GACJ,EAEAwC,cAAe,WACAjG,KACNyD,SADMzD,KAENgJ,QAAS,CAClB,EACAc,QAAS,SAAUhK,GACf,IAAIzH,EACA0R,EAAkB3G,EAAEtD,GAAIzJ,KAAK,eAEjC,IADA0T,EAAgBjF,QAAQ/I,SACnB1D,EAAI,EAAGA,EAAI2H,KAAK+F,QAAQtE,OAAQpJ,GAAK,EAClC2H,KAAK+F,QAAQ1N,IAAM0R,GACnB/J,KAAK+F,QAAQiE,OAAO3R,EAAG,GAG/B+K,EAAEtD,GAAIzJ,KAAK,eAAe,GACE,IAAxB2J,KAAK+F,QAAQtE,SACb2B,EAAE3K,GAAQwR,IAAI,0DACdjK,KAAK+I,SAAU,EACf1F,EAASwC,SAAU,EAE3B,IA4BJ,IAAIqE,EAAM9G,EAAE+G,GAAGC,SAEfhH,EAAE+G,GAAGC,SAzBL,SAAgBjR,GACZ,OAAO6G,KAAK6J,MAAK,WACb,IAAIQ,EAAQjH,EAAEpD,MACVtB,EAA2B,UAAjB6E,EAAOpK,IAAsBA,EAEvC6G,MAAQvH,GAAUuH,MAAQ7H,GAAYkS,EAAMxG,GAAG,QAC/CR,EAASuG,UAAUlL,GACX2L,EAAMhU,KAAK,eAGK,UAAjBkN,EAAOpK,IACdiK,EAAEM,OAAO2G,EAAMhU,KAAK,eAAgBqI,IAHpCA,EAAU0E,EAAEM,OAAO,CAAC,EAAG2G,EAAMhU,OAAQqI,GACrC2L,EAAMhU,KAAK,cAAe,IAAIgN,EAASrD,KAAMtB,KAI5B,iBAAVvF,IACO,WAAVA,EACAkK,EAASyG,QAAQ9J,MAEjBqD,EAASlK,KAGrB,GACJ,EAKAiK,EAAE+G,GAAGC,SAASE,YAAcjH,EAI5BD,EAAE+G,GAAGC,SAASG,WAAa,WAEvB,OADAnH,EAAE+G,GAAGC,SAAWF,EACTlK,IACX,EAIAoD,GAAE,WACEA,EAAE,4BAA4BgH,UAClC,GACH,CAjZD,SAiZW3R,OAAQN,yiCCvZnBA,SAASC,iBACL,oBACA,WAEI,IAC8BE,EADiD,IAArDH,SAASI,iBAAiB,4BACtB,qBAAzBiS,KAAI,QAEL,IAEsBxP,EAFhByP,EAAWD,KAAKjS,iBAAiB,YACM,IAA3BiS,KAAKjS,iBAAiB,MAClB,qBAAE,MAAnBmS,KAAI,QAEL,IAAMpI,EAAqB,QAAf,EAAGoI,KAAKC,eAAO,aAAZC,EAActI,OAC7BoI,KAAKtS,iBACD,aACA,SAAC4F,GAAU,IACiB6M,EADjB,IACSJ,GAAQ,IAAxB,IAAK,EAAL,qBAA0B,OAArBK,QAAO,SACW,QAAf,EAAAA,QAAQH,eAAO,aAAfI,EAAiBC,WAAY1I,EAC7BwI,QAAQlQ,UAAUmB,OAAO,QAEzB+O,QAAQlQ,UAAUkB,IAAI,OAE9B,CAAC,UAAAmP,EAAAA,EAAAA,EAAA,SAAAA,EAAAA,GAAA,CACL,GACA,CAAEpS,SAAS,GAEnB,EAhBA,IAAK,EAAL,qBAAAqS,GAgBC,UAAAjQ,EAAAA,EAAAA,EAAA,SAAAA,EAAAA,GAAA,CACL,EArBA,IAAK,EAAL,qBAAAkQ,GAqBC,UAAAvS,EAAAA,EAAAA,EAAA,SAAAA,EAAAA,GAAA,CACL,GACA,CAAEC,SAAS,siFC5BfV,SAASC,iBAAiB,oBAEtB,WAII,IAAMgT,EAAcjT,SAASe,cAAc,4CACrCmS,EAAelT,SAASI,iBAAiB,8BACzC+S,EAAoBnT,SAASI,iBAAiB,oCAChD6S,GACAA,EAAYhT,iBACR,UACA,WACI,GAAIiT,EAAc,KACuB/S,EADvB,IACW+S,GAAY,IAArC,IAAK,EAAL,qBAAuC,CAAlB,QACNzQ,UAAU2Q,OAAO,OAChC,CAAC,UAAA3S,EAAAA,EAAAA,EAAA,SAAAA,EAAAA,GAAA,CACL,CACA,GAAI0S,EAAmB,KACuBtQ,EADvB,IACMsQ,GAAiB,IAA1C,IAAK,EAAL,qBAA4C,CAAvB,QACN1Q,UAAU2Q,OAAO,OAChC,CAAC,UAAAtQ,EAAAA,EAAAA,EAAA,SAAAA,EAAAA,GAAA,CACL,CACAb,WAAWoR,OAAO,YACtB,GACA,CAAE3S,SAAS,IAInB,IAAM4S,EAActT,SAASI,iBAAiB,4BAC9C,GAAIkT,EAAa,KACkBZ,EADlB,IACOY,GAAW,qBAAE,IAAtBhV,EAAK,QACNiV,EAAQjV,EAAMyC,cAAc,UAAUyS,YACtCC,EAAWnV,EAAMyC,cAAc,6BAC/B2S,EAAeD,EAAWA,EAASE,UAAOhV,EAC1CiV,EAAStV,EAAMyC,cAAc,mCAC7B8S,EAAaD,EAASA,EAAOD,UAAOhV,EACpCmV,EAAexV,EAAM8B,iBAAiB,wBACxC2T,EAAoB,GACpBC,EAAkB,GACtB,GAAIF,EAAc,KACsCG,EADtC,IACgBH,EAAaI,WAAS,qBAAE,mBAA1CC,EAAK,KAAEnT,EAAM,KACfoT,EAAapT,EAAOwB,cAAcA,cAAcgR,YAAYa,OAC5DC,EAAWtT,EAAOwB,cAAcA,cAAcgQ,QAAQ/D,GACtD8F,EAAiBjW,EAAMyC,cAAc,uCACrCyT,EAAkBlW,EAAMyC,cAAc,wCAC5CC,EAAOf,iBACH,UACA,WACI,IAAMwU,EAAcC,WAAW7M,KAAK2K,QAAQmC,OACtCC,EAAeF,WAAW7M,KAAK2K,QAAQqC,aAE7C,GAAIJ,GAEIF,EAAgB,CAChB,IAAMO,EAAaJ,WACfH,EAAef,YAAYxN,QAAQ,eAAgB,QAEjD+O,EAAoBlN,KAAKmN,QACzBF,EAAaL,EACbK,EAAaL,EACnBF,EAAef,YAAcuB,EACxBE,QAAQ,GACRjP,QAAQ,IAAK,KACbA,QAAQ,MAAO,GACxB,CAGJ,GAAI4O,GAEIJ,EAAiB,CACjB,IAAMK,EAAcH,WAChBF,EAAgBhB,YAAYxN,QAAQ,eAAgB,QAElDkP,EAAkBrN,KAAKmN,QACvBH,EAAcD,EACdC,EAAcD,EACpBJ,EAAgBhB,YAAc0B,EACzBD,QAAQ,GACRjP,QAAQ,IAAK,KACbA,QAAQ,MAAO,GACxB,CAIJ,GAAIuN,GAASK,EAAQ,CAEjB/L,KAAKmN,QACChB,EAAgBnC,OAAOsC,EAAO,EAAGC,GAChCJ,EAAkBA,EAAgBmB,QAAO,SAACC,GAAK,OAAKA,IAAUhB,CAAU,IAO/E,IALA,IAAMiB,EAAS,IAAIC,gBACb/O,EAAUyN,EAAgBzJ,KAAK,OAC/BgL,iWAAY,CAAH,GACK,KAAZhP,GAAkB,CAAE,gBAAiBA,IAE7C,MAAyBnH,OAAO8U,QAAQqB,GAAU,eAAE,CAA/C,gBAAOC,EAAG,KAAEjQ,EAAG,KAChB8P,EAAOI,OAAOD,EAAKjQ,EACvB,CACAqO,EAAOD,KAAOE,EAAawB,EAAOK,UACtC,CAEA,GAAIjC,GAAYa,EAAU,CAEtBzM,KAAKmN,QACCjB,EAAkBlC,OAAOsC,EAAO,EAAGG,GAClCP,EAAoBA,EAAkBoB,QAAO,SAACC,GAAK,OAAKA,IAAUd,CAAQ,IACjF,IAAMqB,EAAgB5B,EAAkBxJ,KAAK,KAC7CkJ,EAASE,KACa,KAAlBgC,EAAuBjC,EAAe,IAAMiC,EAAgBjC,EAChED,EAASjB,QAAQ/D,GAAKgF,EAASE,KAAKrJ,MAAM,KAAK,EACnD,CACJ,GACA,CAAE5J,SAAS,GAEnB,EA1EA,IAAK,EAAL,qBAAAqS,GA0EC,UAAA6C,EAAAA,EAAAA,EAAA,SAAAA,EAAAA,GAAA,CACL,CACJ,EAtFA,IAAK,EAAL,qBAAA5C,GAsFC,UAAAF,EAAAA,EAAAA,EAAA,SAAAA,EAAAA,GAAA,CACL,CACJ,GACA,CAAEpS,SAAS,eCrHf,SAASmV,IACL,IAAM/I,EAAS9M,SAASe,cAAc,kBACtC,GAAI+L,EAAQ,CACR,IAAIvG,EAAUuG,EAAO0F,QAAQsD,cAC7BvP,EAAUwP,KAAKC,MAAMzP,GACA,IAAI0P,OAAO,iBAAkB1P,EACtD,CACJ,CAEAvG,SAASC,iBAAiB,oBAEtB,WACI4V,GACJ,GACA,CAAEnV,SAAS,IAGI,oBAARwV,KACPA,IAAIC,UAAU,wBAAwB,SAAUC,EAAKpX,GACjD6W,GACJ,oBCvBJ,SAQE,SAAUvV,EAAQ+V,GAElB,kBAIiB,0BAAf,KAAe,iCASnB,CAfA,CAeG/V,QAAQ,WACT,aAEA,IAAIgW,EAAgB,WAClB,IAAIC,EAAYjW,OAAOkW,QAAQhN,UAE/B,GAAK+M,EAAUE,QACb,MAAO,UAGT,GAAKF,EAAUG,gBACb,MAAO,kBAKT,IAFA,IAAIC,EAAW,CAAE,SAAU,MAAO,KAAM,KAE9BzW,EAAE,EAAGA,EAAIyW,EAASrN,OAAQpJ,IAAM,CACxC,IACI0W,EADSD,EAASzW,GACA,kBACtB,GAAKqW,EAAWK,GACd,OAAOA,CAEX,CACD,CApBmB,GAsBpB,OAAO,SAA0BpP,EAAM5G,GACrC,OAAO4G,EAAM8O,GAAiB1V,EAChC,CAEF,0BCpDA,QAsBoB,oBAAVN,QAAwBA,YATf,0BAAf,EAS6C,WAEjD,aAEA,SAASuW,IAAa,CAEtB,IAAIC,EAAQD,EAAUrN,UAiFtB,OA/EAsN,EAAMzF,GAAK,SAAU0F,EAAWC,GAC9B,GAAMD,GAAcC,EAApB,CAIA,IAAIC,EAASpP,KAAKqP,QAAUrP,KAAKqP,SAAW,CAAC,EAEzCC,EAAYF,EAAQF,GAAcE,EAAQF,IAAe,GAM7D,OAJuC,GAAlCI,EAAU7P,QAAS0P,IACtBG,EAAUnL,KAAMgL,GAGXnP,IAVP,CAWF,EAEAiP,EAAMM,KAAO,SAAUL,EAAWC,GAChC,GAAMD,GAAcC,EAApB,CAIAnP,KAAKwJ,GAAI0F,EAAWC,GAGpB,IAAIK,EAAaxP,KAAKyP,YAAczP,KAAKyP,aAAe,CAAC,EAMzD,OAJoBD,EAAYN,GAAcM,EAAYN,IAAe,CAAC,GAE3DC,IAAa,EAErBnP,IAXP,CAYF,EAEAiP,EAAMhF,IAAM,SAAUiF,EAAWC,GAC/B,IAAIG,EAAYtP,KAAKqP,SAAWrP,KAAKqP,QAASH,GAC9C,GAAMI,GAAcA,EAAU7N,OAA9B,CAGA,IAAI6K,EAAQgD,EAAU7P,QAAS0P,GAK/B,OAJe,GAAV7C,GACHgD,EAAUtF,OAAQsC,EAAO,GAGpBtM,IANP,CAOF,EAEAiP,EAAMS,UAAY,SAAUR,EAAWS,GACrC,IAAIL,EAAYtP,KAAKqP,SAAWrP,KAAKqP,QAASH,GAC9C,GAAMI,GAAcA,EAAU7N,OAA9B,CAIA6N,EAAYA,EAAUlO,MAAM,GAC5BuO,EAAOA,GAAQ,GAIf,IAFA,IAAIC,EAAgB5P,KAAKyP,aAAezP,KAAKyP,YAAaP,GAEhD7W,EAAE,EAAGA,EAAIiX,EAAU7N,OAAQpJ,IAAM,CACzC,IAAI8W,EAAWG,EAAUjX,GACZuX,GAAiBA,EAAeT,KAI3CnP,KAAKiK,IAAKiF,EAAWC,UAEdS,EAAeT,IAGxBA,EAASU,MAAO7P,KAAM2P,EACxB,CAEA,OAAO3P,IArBP,CAsBF,EAEAiP,EAAMa,OAAS,kBACN9P,KAAKqP,eACLrP,KAAKyP,WACd,EAEOT,CAEP,GAlGmB,kDCbnB,SAOE,SAAUvW,EAAQ+V,GAMhB,EAAQ,CACN,SACC,EAAF,SAAYK,GACX,OAgBK,SAAkBpW,EAAQoW,GAErC,aAEA,IAAIkB,EAAQ,CAKZA,OAAe,SAAUC,EAAGvR,GAC1B,IAAM,IAAImB,KAAQnB,EAChBuR,EAAGpQ,GAASnB,EAAGmB,GAEjB,OAAOoQ,CACT,EAIAD,OAAe,SAAUE,EAAKC,GAC5B,OAAWD,EAAMC,EAAQA,GAAQA,CACnC,GAIIC,EAAazO,MAAMC,UAAUP,MAGjC2O,EAAMK,UAAY,SAAUC,GAC1B,OAAK3O,MAAM4O,QAASD,GAEXA,EAGJA,QACI,GAGuB,iBAAPA,GAAwC,iBAAdA,EAAI5O,OAG9C0O,EAAWvO,KAAMyO,GAInB,CAAEA,EACX,EAIAN,EAAMQ,WAAa,SAAUC,EAAKH,GAChC,IAAI/D,EAAQkE,EAAI/Q,QAAS4Q,IACV,GAAV/D,GACHkE,EAAIxG,OAAQsC,EAAO,EAEvB,EAIAyD,EAAMU,UAAY,SAAU9Q,EAAM5G,GAChC,KAAQ4G,EAAKoC,YAAcpC,GAAQxH,SAASmD,MAE1C,GADAqE,EAAOA,EAAKoC,WACP8M,EAAiBlP,EAAM5G,GAC1B,OAAO4G,CAGb,EAKAoQ,EAAMW,gBAAkB,SAAU/Q,GAChC,MAAoB,iBAARA,EACHxH,SAASe,cAAeyG,GAE1BA,CACT,EAKAoQ,EAAMY,YAAc,SAAU3S,GAC5B,IAAI+Q,EAAS,KAAO/Q,EAAM4S,KACrB5Q,KAAM+O,IACT/O,KAAM+O,GAAU/Q,EAEpB,EAIA+R,EAAMc,mBAAqB,SAAUC,EAAO/X,GAE1C+X,EAAQf,EAAMK,UAAWU,GACzB,IAAIC,EAAU,GAyBd,OAvBAD,EAAMta,SAAS,SAAUmJ,GAEvB,GAAQA,aAAgBqR,YAIxB,GAAMjY,EAAN,CAMK8V,EAAiBlP,EAAM5G,IAC1BgY,EAAQ5M,KAAMxE,GAKhB,IAFA,IAAIsR,EAAatR,EAAKpH,iBAAkBQ,GAE9BV,EAAE,EAAGA,EAAI4Y,EAAWxP,OAAQpJ,IACpC0Y,EAAQ5M,KAAM8M,EAAW5Y,GAV3B,MAFE0Y,EAAQ5M,KAAMxE,EAclB,IAEOoR,CACT,EAIAhB,EAAMmB,eAAiB,SAAUC,EAAQC,EAAYC,GACnDA,EAAYA,GAAa,IAEzB,IAAItC,EAASoC,EAAOxP,UAAWyP,GAC3BE,EAAcF,EAAa,UAE/BD,EAAOxP,UAAWyP,GAAe,WAC/B,IAAIG,EAAUvR,KAAMsR,GACpBzK,aAAc0K,GAEd,IAAI5B,EAAOvP,UACPoR,EAAQxR,KACZA,KAAMsR,GAAgB/S,YAAY,WAChCwQ,EAAOc,MAAO2B,EAAO7B,UACd6B,EAAOF,EAChB,GAAGD,EACL,CACF,EAIAtB,EAAM0B,SAAW,SAAUhL,GACzB,IAAIiL,EAAavZ,SAASuZ,WACP,YAAdA,GAA0C,eAAdA,EAE/BnT,WAAYkI,GAEZtO,SAASC,iBAAkB,mBAAoBqO,EAEnD,EAKAsJ,EAAM4B,SAAW,SAAU1P,GACzB,OAAOA,EAAI9D,QAAS,eAAe,SAAU+F,EAAO0N,EAAIC,GACtD,OAAOD,EAAK,IAAMC,CACpB,IAAG5N,aACL,EAEA,IAAI6N,EAAUrZ,EAAOqZ,QA4CrB,OAtCA/B,EAAMgC,SAAW,SAAUC,EAAaC,GACtClC,EAAM0B,UAAU,WACd,IAAIS,EAAkBnC,EAAM4B,SAAUM,GAClCE,EAAW,QAAUD,EACrBE,EAAgBja,SAASI,iBAAkB,IAAM4Z,EAAW,KAC5DE,EAAcla,SAASI,iBAAkB,OAAS2Z,GAClDpB,EAAQf,EAAMK,UAAWgC,GAC1BE,OAAQvC,EAAMK,UAAWiC,IACxBE,EAAkBJ,EAAW,WAC7BK,EAAS/Z,EAAO+Z,OAEpB1B,EAAMta,SAAS,SAAUmJ,GACvB,IAEIjB,EAFAoF,EAAOnE,EAAK9B,aAAcsU,IAC5BxS,EAAK9B,aAAc0U,GAErB,IACE7T,EAAUoF,GAAQoK,KAAKC,MAAOrK,EAQhC,CAPE,MAAQ2O,GAMR,YAJKX,GACHA,EAAQW,MAAO,iBAAmBN,EAAW,OAASxS,EAAKtI,UAC3D,KAAOob,GAGX,CAEA,IAAIC,EAAW,IAAIV,EAAarS,EAAMjB,GAEjC8T,GACHA,EAAOnc,KAAMsJ,EAAMsS,EAAWS,EAElC,GAEF,GACF,EAIO3C,CAEP,CAhOavB,CAAS/V,EAAQoW,EACzB,sCAeL,CAzBA,CAyBGpW,kBC/BHka,EAAOC,QAAyB,iBAARtP,KAAmBA,KAAKuP,SAAWpa,OAAOoa,yBCDlE,QAsBIpa,YATe,0BAAf,EASQ,WACZ,aAKA,SAASqa,EAAcvF,GACrB,IAAI0C,EAAMpD,WAAYU,GAGtB,OADqC,GAAvBA,EAAM9N,QAAQ,OAAe6E,MAAO2L,IAChCA,CACpB,CAEA,SAAS8C,IAAQ,CAEjB,IAAIC,EAA6B,oBAAXlB,QAAyBiB,EAC7C,SAAUE,GACRnB,QAAQW,MAAOQ,EACjB,EAIEC,EAAe,CACjB,cACA,eACA,aACA,gBACA,aACA,cACA,YACA,eACA,kBACA,mBACA,iBACA,qBAGEC,EAAqBD,EAAazR,OAEtC,SAAS2R,IASP,IARA,IAAIC,EAAO,CACTnX,MAAO,EACPsE,OAAQ,EACR8S,WAAY,EACZzX,YAAa,EACbqL,WAAY,EACZE,YAAa,GAEL/O,EAAE,EAAGA,EAAI8a,EAAoB9a,IAErCgb,EADkBH,EAAa7a,IACT,EAExB,OAAOgb,CACT,CAQA,SAASE,EAAU5T,GACjB,IAAIlF,EAAQoF,iBAAkBF,GAM9B,OALMlF,GACJuY,EAAU,kBAAoBvY,EAApB,6FAILA,CACT,CAIA,IAEI+Y,EAFA3N,GAAU,EASd,SAASC,IAEP,IAAKD,EAAL,CAGAA,GAAU,EAQV,IAAIqK,EAAM/X,SAASiD,cAAc,OACjC8U,EAAIzV,MAAMyB,MAAQ,QAClBgU,EAAIzV,MAAMgZ,QAAU,kBACpBvD,EAAIzV,MAAMiZ,YAAc,QACxBxD,EAAIzV,MAAMkZ,YAAc,kBACxBzD,EAAIzV,MAAMmZ,UAAY,aAEtB,IAAItY,EAAOnD,SAASmD,MAAQnD,SAASsE,gBACrCnB,EAAKC,YAAa2U,GAClB,IAAIzV,EAAQ8Y,EAAUrD,GAEtBsD,EAA8D,KAA7C7V,KAAKkW,MAAOf,EAAcrY,EAAMyB,QACjD4X,EAAQN,eAAiBA,EAEzBlY,EAAKK,YAAauU,EAvBlB,CAwBF,CAIA,SAAS4D,EAASnU,GAShB,GARAmG,IAGoB,iBAARnG,IACVA,EAAOxH,SAASe,cAAeyG,IAI3BA,GAAuB,iBAARA,GAAqBA,EAAKoU,SAA/C,CAIA,IAAItZ,EAAQ8Y,EAAU5T,GAGtB,GAAsB,QAAjBlF,EAAM2H,QACT,OAAOgR,IAGT,IAAIC,EAAO,CAAC,EACZA,EAAKnX,MAAQyD,EAAKlE,YAClB4X,EAAK7S,OAASb,EAAKqU,aAKnB,IAHA,IAAIC,EAAcZ,EAAKY,YAAiC,cAAnBxZ,EAAMmZ,UAGjCvb,EAAE,EAAGA,EAAI8a,EAAoB9a,IAAM,CAC3C,IAAI6b,EAAchB,EAAa7a,GAC3BkV,EAAQ9S,EAAOyZ,GACfjE,EAAMpD,WAAYU,GAEtB8F,EAAMa,GAAiB5P,MAAO2L,GAAc,EAANA,CACxC,CAEA,IAAIkE,EAAed,EAAKe,YAAcf,EAAKgB,aACvCC,EAAgBjB,EAAKkB,WAAalB,EAAKmB,cACvCC,EAAcpB,EAAKqB,WAAarB,EAAKsB,YACrCC,EAAevB,EAAKwB,UAAYxB,EAAKyB,aACrCnB,EAAcN,EAAK0B,gBAAkB1B,EAAK2B,iBAC1CC,EAAe5B,EAAK6B,eAAiB7B,EAAK8B,kBAE1CC,EAAuBnB,GAAeT,EAGtC6B,EAAavC,EAAcrY,EAAMyB,QACjB,IAAfmZ,IACHhC,EAAKnX,MAAQmZ,GAETD,EAAuB,EAAIjB,EAAeR,IAGhD,IAAI2B,EAAcxC,EAAcrY,EAAM+F,QAatC,OAZqB,IAAhB8U,IACHjC,EAAK7S,OAAS8U,GAEVF,EAAuB,EAAId,EAAgBW,IAGjD5B,EAAKC,WAAaD,EAAKnX,OAAUiY,EAAeR,GAChDN,EAAKxX,YAAcwX,EAAK7S,QAAW8T,EAAgBW,GAEnD5B,EAAKnM,WAAamM,EAAKnX,MAAQuY,EAC/BpB,EAAKjM,YAAciM,EAAK7S,OAASoU,EAE1BvB,CAtDP,CAuDF,CAEA,OAAOS,CAEP,GAjMmB,kDCbnB,SAUE,SAAUrb,EAAQ+V,GAKhB,EAAQ,CACJ,QACA,QACA,QACA,QACA,QACA,QAEA,OACA,QACA,SACD,WACS+G,EAAUzB,EAASjF,EAAiBkB,EAAOyF,EAAMC,GACzD,OA8BG,SAAkBhd,EAAQ8c,EAAUzB,EAASjF,EAAiBkB,EACvEyF,EAAMC,GAER,aAIA,IAAIjD,EAAS/Z,EAAO+Z,OAIhBhG,EAAOkJ,OAAO/T,UAAU6K,KAC1B,SAAUvK,GACR,OAAOA,EAAIuK,MACb,EACA,SAAUvK,GACR,OAAOA,EAAI9D,QAAS,aAAc,GACpC,EAKIwX,EAAUJ,EAASK,OAAQ,UAAW,CACxCC,WAAY,UACZC,mBAAmB,EACnBC,eAAe,IAGjBJ,EAAQH,KAAOA,EACfG,EAAQF,WAAaA,EAErB,IAAIxG,EAAQ0G,EAAQhU,UAEpBsN,EAAM+G,QAAU,WAed,IAAM,IAAI1e,KAdV0I,KAAKiW,SAAW,EAEhBjW,KAAKkW,SAAW,CAAC,EACjBlW,KAAKmW,cAELZ,EAAS5T,UAAUqU,QAAQpU,KAAM5B,MAGjCA,KAAKoW,MAAQ,CAAC,EAEdpW,KAAKqW,cAAgBrW,KAAKsW,MAE1BtW,KAAKuW,YAAc,CAAE,kBAEHd,EAAWW,MAC3BpW,KAAKwW,gBAAiBlf,EAE1B,EAEA2X,EAAMwH,YAAc,WAElBzW,KAAKiW,SAAW,EAEhBV,EAAS5T,UAAU8U,YAAY7U,KAAM5B,KACvC,EAEAiP,EAAMyH,SAAW,WAGf,IAFA,IAAIJ,EAAQf,EAAS5T,UAAU+U,SAAS7G,MAAO7P,KAAMI,WAE3C/H,EAAE,EAAGA,EAAIie,EAAM7U,OAAQpJ,IAAM,CAC1Bie,EAAMje,GACZuO,GAAK5G,KAAKiW,UACjB,CAEA,OADAjW,KAAK2W,qBAAsBL,GACpBA,CACT,EAKArH,EAAMuH,gBAAkB,SAAUlf,GAChC,IAAIsf,EAAOnB,EAAWW,MAAO9e,GAGzBuf,EAAc7W,KAAKtB,QAASpH,IAAU,CAAC,EAC3C0I,KAAKtB,QAASpH,GAASsf,EAAKlY,QAC1BqR,EAAMrM,OAAQkT,EAAKlY,QAASmY,GAAgBA,EAE9C7W,KAAKoW,MAAO9e,GAAS,IAAIsf,EAAM5W,KACjC,EAGAiP,EAAM6H,OAAS,WAEP9W,KAAK+W,kBAAmB/W,KAAKgX,WAAW,cAI9ChX,KAAKiX,UAHHjX,KAAKkX,SAIT,EAGAjI,EAAMgI,QAAU,WAEd,IAAIE,EAAYnX,KAAKoX,gBAErBpX,KAAKqX,eACLrX,KAAKsX,gBACLtX,KAAKuX,YAAavX,KAAKqW,cAAec,GAGtCnX,KAAK+W,iBAAkB,CACzB,EAGA9H,EAAMiI,QAAU,SAAUM,GAExBxX,KAAK7G,OAAQqe,GACbxX,KAAKoX,gBAIL,IAAIK,EAAWzX,KAAK0X,QAAS1X,KAAKsW,OAClCtW,KAAKqW,cAAgBoB,EAAS7I,QAE9B5O,KAAK2X,uBAEA3X,KAAK4X,WACR5X,KAAK6X,cAAe7X,KAAK8X,YAAa,CAAEL,IAExCzX,KAAK8X,YAAaL,GAGpBzX,KAAK+X,QACL/X,KAAKiX,SACP,EAEAhI,EAAM+I,MAAQ/I,EAAMiI,QAEpBjI,EAAM6I,YAAc,SAAUL,GAC5BzX,KAAKiY,OAAQR,EAASS,YACtBlY,KAAKmY,KAAMV,EAASW,SACtB,EAKAnJ,EAAMmI,cAAgB,WACpB,IAAIiB,EAAkBrY,KAAKgX,WAAW,iBAClCG,OAAgCrgB,IAApBuhB,EAAgCA,GAC7CrY,KAAK+W,gBAER,OADA/W,KAAK4X,WAAaT,EACXA,CACT,EAIAlI,EAAM0I,qBAAuB,WAE3B,IAAIW,EAAkBC,EAAgBC,EAClChH,EAAQxR,KACZ,SAASyY,IACFH,GAAoBC,GAAkBC,GACzChH,EAAMkH,cAAe,kBAAmB,KAAM,CAAElH,EAAM6E,eAE1D,CACArW,KAAKuP,KAAM,kBAAkB,WAC3B+I,GAAmB,EACnBG,GACF,IACAzY,KAAKuP,KAAM,gBAAgB,WACzBgJ,GAAiB,EACjBE,GACF,IACAzY,KAAKuP,KAAM,kBAAkB,WAC3BiJ,GAAmB,EACnBC,GACF,GACF,EAIAxJ,EAAMyI,QAAU,SAAUpB,GACxB,IAAIhJ,EAAStN,KAAKtB,QAAQ4O,OAC1BA,EAASA,GAAU,IAQnB,IAPA,IAAIsB,EAAU,GACV+J,EAAgB,GAChBC,EAAmB,GAEnBzY,EAAOH,KAAK6Y,eAAgBvL,GAGtBjV,EAAE,EAAGA,EAAIie,EAAM7U,OAAQpJ,IAAM,CACrC,IAAIygB,EAAOxC,EAAMje,GACjB,IAAKygB,EAAKC,UAAV,CAIA,IAAIC,EAAY7Y,EAAM2Y,GAGjBE,GACHpK,EAAQzK,KAAM2U,GAGXE,GAAaF,EAAKG,SACrBN,EAAcxU,KAAM2U,GACTE,GAAcF,EAAKG,UAC9BL,EAAiBzU,KAAM2U,EAZzB,CAcF,CAGA,MAAO,CACLlK,QAASA,EACTsJ,WAAYS,EACZP,SAAUQ,EAEd,EAGA3J,EAAM4J,eAAiB,SAAUvL,GAC/B,OAAKkF,GAAUxS,KAAKtB,QAAQoX,kBAEnB,SAAUgD,GACf,OAAOtG,EAAQsG,EAAK3b,SAAU0G,GAAIyJ,EACpC,EAEoB,mBAAVA,EAEH,SAAUwL,GACf,OAAOxL,EAAQwL,EAAK3b,QACtB,EAGK,SAAU2b,GACf,OAAOjK,EAAiBiK,EAAK3b,QAASmQ,EACxC,CACF,EAQA2B,EAAMiK,eAAiB,SAAUpI,GAE/B,IAAIwF,EACCxF,GACHA,EAAQf,EAAMK,UAAWU,GACzBwF,EAAQtW,KAAKmZ,SAAUrI,IAGvBwF,EAAQtW,KAAKsW,MAGftW,KAAKmW,cACLnW,KAAK2W,qBAAsBL,EAC7B,EAEArH,EAAMkH,YAAc,WAClB,IAAIiD,EAAcpZ,KAAKtB,QAAQ0a,YAC/B,IAAM,IAAIzL,KAAOyL,EAAc,CAC7B,IAAIC,EAASD,EAAazL,GAC1B3N,KAAKkW,SAAUvI,GAAQ2L,EAAaD,EACtC,CACF,EAMApK,EAAM0H,qBAAuB,SAAUL,GAIrC,IAFA,IAAIiD,EAAMjD,GAASA,EAAM7U,OAEfpJ,EAAE,EAAGkhB,GAAOlhB,EAAIkhB,EAAKlhB,IAAM,CACxBie,EAAMje,GACZ6gB,gBACP,CACF,EAMA,IAAII,EAAc,WAMhB,SAASA,EAAaD,GAEpB,GAAsB,iBAAVA,EACV,OAAOA,EAGT,IAAI1J,EAAOnD,EAAM6M,GAAS5W,MAAM,KAC5B+W,EAAQ7J,EAAK,GAEb8J,EAAYD,EAAMtV,MAAO,cAEzBwV,EAAWC,EADJF,GAAaA,EAAU,GACGD,GAEjCI,EAASjE,EAAQkE,gBAAiBlK,EAAK,IAU3C,OARA0J,EAASO,EAAS,SAAUja,GAC1B,OAAOA,GAAQia,EAAQF,EAAU/Z,GACnC,EAEA,SAAUA,GACR,OAAOA,GAAQ+Z,EAAU/Z,EAC3B,CAGF,CAGA,SAASga,EAAgB7V,EAAM0V,GAE7B,OAAK1V,EACI,SAAuBnE,GAC5B,OAAOA,EAAK9B,aAAciG,EAC5B,EAIK,SAAuBnE,GAC5B,IAAIma,EAAQna,EAAKzG,cAAesgB,GAChC,OAAOM,GAASA,EAAMnO,WACxB,CACF,CAEA,OAAO2N,CACR,CAjDiB,GA0FlB,SAASS,EAAeC,EAASC,GAC/B,OAAO,SAAiBC,EAAOC,GAE7B,IAAM,IAAI9hB,EAAI,EAAGA,EAAI2hB,EAAQvY,OAAQpJ,IAAM,CACzC,IAAI+hB,EAASJ,EAAQ3hB,GACjB2X,EAAIkK,EAAMG,SAAUD,GACpB3b,EAAI0b,EAAME,SAAUD,GACxB,GAAKpK,EAAIvR,GAAKuR,EAAIvR,EAIhB,OAASuR,EAAIvR,EAAI,GAAK,UAFkB3H,IAAtBmjB,EAASG,GAAyBH,EAASG,GAAWH,GAC1C,GAAK,EAGvC,CACA,OAAO,CACT,CACF,CAtDAtE,EAAQkE,gBAAkB,CACxB,SAAY,SAAUnc,GACpB,OAAOK,SAAUL,EAAK,GACxB,EACA,WAAc,SAAUA,GACtB,OAAOmP,WAAYnP,EACrB,GAMFuR,EAAM8I,MAAQ,WACZ,GAAM/X,KAAKtB,QAAQ0b,OAAnB,CAIA,IAAIJ,EAAUjK,EAAMK,UAAWpQ,KAAKtB,QAAQ0b,QACtCpa,KAAKsa,iBAAkBN,KAE3Bha,KAAKuW,YAAcyD,EAAQ1H,OAAQtS,KAAKuW,cAG1C,IAAIgE,EAAaR,EAAe/Z,KAAKuW,YAAavW,KAAKtB,QAAQqX,eAC/D/V,KAAKqW,cAAcmE,KAAMD,EATzB,CAUF,EAGAtL,EAAMqL,iBAAmB,SAAUN,GACjC,IAAM,IAAI3hB,EAAE,EAAGA,EAAI2hB,EAAQvY,OAAQpJ,IACjC,GAAK2hB,EAAQ3hB,IAAM2H,KAAKuW,YAAYle,GAClC,OAAO,EAGX,OAAO,CACT,EAwBA4W,EAAMwL,MAAQ,WACZ,IAAI5E,EAAa7V,KAAKtB,QAAQmX,WAC1B6E,EAAO1a,KAAKoW,MAAOP,GACvB,IAAM6E,EAEJ,MAAM,IAAIC,MAAO,mBAAqB9E,GAKxC,OADA6E,EAAKhc,QAAUsB,KAAKtB,QAASmX,GACtB6E,CACT,EAEAzL,EAAMoI,aAAe,WAEnB9B,EAAS5T,UAAU0V,aAAazV,KAAM5B,MACtCA,KAAKya,QAAQpD,cACf,EAEApI,EAAM2L,uBAAyB,SAAU9B,GACvC,OAAO9Y,KAAKya,QAAQG,uBAAwB9B,EAC9C,EAEA7J,EAAM4L,aAAe,SAAUC,GAC7B9a,KAAKya,QAAQI,aAAcC,EAC7B,EAEA7L,EAAM8L,kBAAoB,WACxB,OAAO/a,KAAKya,QAAQM,mBACtB,EAEA9L,EAAM+L,kBAAoB,WACxB,OAAOhb,KAAKya,QAAQO,mBACtB,EAKA/L,EAAMgM,SAAW,SAAUnK,GACzB,IAAIwF,EAAQtW,KAAKkb,SAAUpK,GAC3B,GAAMwF,EAAM7U,OAAZ,CAIA,IAAI4U,EAAgBrW,KAAKmb,mBAAoB7E,GAE7CtW,KAAKqW,cAAgBrW,KAAKqW,cAAc/D,OAAQ+D,EAJhD,CAKF,EAGApH,EAAMmM,UAAY,SAAUtK,GAC1B,IAAIwF,EAAQtW,KAAK0W,SAAU5F,GAC3B,GAAMwF,EAAM7U,OAAZ,CAIAzB,KAAKqX,eACLrX,KAAKsX,gBAEL,IAAIjB,EAAgBrW,KAAKmb,mBAAoB7E,GAE7CtW,KAAKuX,YAAavX,KAAKqW,eAEvBrW,KAAKqW,cAAgBA,EAAc/D,OAAQtS,KAAKqW,eAChDrW,KAAKsW,MAAQA,EAAMhE,OAAQtS,KAAKsW,MAVhC,CAWF,EAEArH,EAAMkM,mBAAqB,SAAU7E,GACnC,IAAImB,EAAWzX,KAAK0X,QAASpB,GAM7B,OALAtW,KAAKmY,KAAMV,EAASW,UAEpBpY,KAAKiY,OAAQR,EAAS7I,SAEtB5O,KAAKuX,YAAaE,EAAS7I,SAAS,GAC7B6I,EAAS7I,OAClB,EAMAK,EAAMoM,OAAS,SAAUvK,GACvB,IAAIwF,EAAQtW,KAAKkb,SAAUpK,GAC3B,GAAMwF,EAAM7U,OAAZ,CAIA,IAAIpJ,EAAGygB,EACHS,EAAMjD,EAAM7U,OAChB,IAAMpJ,EAAE,EAAGA,EAAIkhB,EAAKlhB,IAClBygB,EAAOxC,EAAMje,GACb2H,KAAK7C,QAAQ5B,YAAaud,EAAK3b,SAGjC,IAAIme,EAAsBtb,KAAK0X,QAASpB,GAAQ1H,QAEhD,IAAMvW,EAAE,EAAGA,EAAIkhB,EAAKlhB,IAClBie,EAAMje,GAAGggB,iBAAkB,EAI7B,IAFArY,KAAKkX,UAEC7e,EAAE,EAAGA,EAAIkhB,EAAKlhB,WACXie,EAAMje,GAAGggB,gBAElBrY,KAAKiY,OAAQqD,EAnBb,CAoBF,EAEA,IAAIC,EAAUtM,EAAMlT,OA6DpB,OA5DAkT,EAAMlT,OAAS,SAAU+U,GACvBA,EAAQf,EAAMK,UAAWU,GACzB,IAAI0K,EAAcxb,KAAKmZ,SAAUrI,GAEjCyK,EAAQ3Z,KAAM5B,KAAM8Q,GAIpB,IAFA,IAAIyI,EAAMiC,GAAeA,EAAY/Z,OAE3BpJ,EAAE,EAAGkhB,GAAOlhB,EAAIkhB,EAAKlhB,IAAM,CACnC,IAAIygB,EAAO0C,EAAYnjB,GAEvB0X,EAAMQ,WAAYvQ,KAAKqW,cAAeyC,EACxC,CACF,EAEA7J,EAAMwM,QAAU,WAEd,IAAM,IAAIpjB,EAAE,EAAGA,EAAI2H,KAAKsW,MAAM7U,OAAQpJ,IAAM,CAC/B2H,KAAKsW,MAAMje,GACjBgiB,SAASqB,OAAS/d,KAAK+d,QAC9B,CACA1b,KAAKtB,QAAQ0b,OAAS,SACtBpa,KAAK+X,QACL/X,KAAKiX,SACP,EAUAhI,EAAM4I,cAAgB,SAAU1N,EAAIwF,GAElC,IAAIgM,EAAqB3b,KAAKtB,QAAQid,mBAEtC3b,KAAKtB,QAAQid,mBAAqB,EAElC,IAAIC,EAAczR,EAAG0F,MAAO7P,KAAM2P,GAGlC,OADA3P,KAAKtB,QAAQid,mBAAqBA,EAC3BC,CACT,EAQA3M,EAAM4M,wBAA0B,WAC9B,OAAO7b,KAAKqW,cAAcyF,KAAK,SAAUhD,GACvC,OAAOA,EAAK3b,OACd,GACF,EAIOwY,CAET,CAhlBenH,CAAS/V,EAAQ8c,EAAUzB,EAASjF,EAAiBkB,EAAOyF,EAAMC,EAC1E,sCA6BP,CAhDA,CAgDGhd,wBC1DH,UA0BGA,OAjBC,EAAQ,CACJ,cAEK,0BADN,EAeI,SAAkB8c,GAC7B,aAKA,SAASC,IACPD,EAASC,KAAK3F,MAAO7P,KAAMI,UAC7B,CAEA,IAAI6O,EAAQuG,EAAK7T,UAAYpK,OAAOqe,OAAQL,EAASC,KAAK7T,WAEtDqU,EAAU/G,EAAM+G,QACpB/G,EAAM+G,QAAU,WAEdhW,KAAK4G,GAAK5G,KAAK8W,OAAOb,WACtBD,EAAQpU,KAAM5B,MACdA,KAAKqa,SAAW,CAAC,CACnB,EAEApL,EAAMiK,eAAiB,WACrB,IAAKlZ,KAAK+Y,UAAV,CAIA/Y,KAAKqa,SAASzT,GAAK5G,KAAK4G,GAExB5G,KAAKqa,SAAS,kBAAoBra,KAAK4G,GACvC5G,KAAKqa,SAASqB,OAAS/d,KAAK+d,SAE5B,IAAItC,EAAcpZ,KAAK8W,OAAOpY,QAAQ0a,YAClC2C,EAAU/b,KAAK8W,OAAOZ,SAC1B,IAAM,IAAIvI,KAAOyL,EAAc,CAC7B,IAAIC,EAAS0C,EAASpO,GACtB3N,KAAKqa,SAAU1M,GAAQ0L,EAAQrZ,KAAK7C,QAAS6C,KAC/C,CAZA,CAaF,EAEA,IAAIgc,EAAW/M,EAAMnF,QAUrB,OATAmF,EAAMnF,QAAU,WAEdkS,EAASnM,MAAO7P,KAAMI,WAEtBJ,KAAKyE,IAAI,CACPrC,QAAS,IAEb,EAEOoT,CAEP,GAhEa,+CCZb,UA6BG/c,OApBC,EAAQ,CACJ,QACA,cAEK,0BADN,EAiBI,SAAkBqb,EAASyB,GACpC,aAGA,SAASE,EAAYwG,GACnBjc,KAAKic,QAAUA,EAEVA,IACHjc,KAAKtB,QAAUud,EAAQvd,QAASsB,KAAKiS,WACrCjS,KAAK7C,QAAU8e,EAAQ9e,QACvB6C,KAAKsW,MAAQ2F,EAAQ5F,cACrBrW,KAAKqT,KAAO4I,EAAQ5I,KAExB,CAEA,IAAIpE,EAAQwG,EAAW9T,UA8GvB,MAxGoB,CAClB,eACA,yBACA,eACA,oBACA,oBACA,oBACA,cAGYnL,SAAS,SAAU4a,GAC/BnC,EAAOmC,GAAe,WACpB,OAAOmE,EAAS5T,UAAWyP,GAAavB,MAAO7P,KAAKic,QAAS7b,UAC/D,CACF,IAKA6O,EAAMiN,0BAA4B,WAEhC,IAAI7I,EAAOS,EAAS9T,KAAKic,QAAQ9e,SAIjC,OADe6C,KAAKic,QAAQ5I,MAAQA,GACjBA,EAAKxX,aAAemE,KAAKic,QAAQ5I,KAAKxX,WAC3D,EAIAoT,EAAMkN,gBAAkB,WACtBnc,KAAKic,QAAQE,gBAAgBtM,MAAO7P,KAAMI,UAC5C,EAEA6O,EAAMmN,eAAiB,WACrBpc,KAAKqc,eAAgB,SAAU,QACjC,EAEApN,EAAMqN,aAAe,WACnBtc,KAAKqc,eAAgB,MAAO,SAC9B,EAOApN,EAAMoN,eAAiB,SAAUE,EAASlJ,GACxC,IAAImJ,EAAcD,EAAUlJ,EACxBoJ,EAAY,QAAUpJ,EAI1B,GAFArT,KAAKmc,gBAAiBK,EAAaC,IAE9Bzc,KAAMwc,GAAX,CAIA,IAAIE,EAAgB1c,KAAK2c,mBACzB3c,KAAMwc,GAAgBE,GAAiBA,EAAeD,IAEpDzc,KAAKic,QAAQ5I,KAAM,QAAUA,EAL/B,CAMF,EAEApE,EAAM0N,iBAAmB,WACvB,IAAIC,EAAY5c,KAAKic,QAAQ5F,cAAc,GAC3C,OAAOuG,GAAaA,EAAUzf,SAAW2W,EAAS8I,EAAUzf,QAC9D,EAIA8R,EAAM6H,OAAS,WACb9W,KAAKic,QAAQnF,OAAOjH,MAAO7P,KAAKic,QAAS7b,UAC3C,EAEA6O,EAAM6E,QAAU,WACd9T,KAAKic,QAAQnI,UACb9T,KAAKqT,KAAOrT,KAAKic,QAAQ5I,IAC3B,EAIAoC,EAAWW,MAAQ,CAAC,EAEpBX,EAAWG,OAAS,SAAU3D,EAAWvT,GAEvC,SAASkY,IACPnB,EAAW5F,MAAO7P,KAAMI,UAC1B,CAcA,OAZAwW,EAAKjV,UAAYpK,OAAOqe,OAAQ3G,GAChC2H,EAAKjV,UAAUkb,YAAcjG,EAGxBlY,IACHkY,EAAKlY,QAAUA,GAGjBkY,EAAKjV,UAAUsQ,UAAYA,EAE3BwD,EAAWW,MAAOnE,GAAc2E,EAEzBA,CACT,EAEOnB,CAET,GA/Ia,+CCbb,UAyBGhd,OAhBC,EAAQ,CACJ,cAEK,0BADN,EAcI,SAAkBgd,GAC7B,aAEA,IAAIqH,EAAUrH,EAAWG,OAAO,WAE5B3G,EAAQ6N,EAAQnb,UAmCpB,OAjCAsN,EAAMoI,aAAe,WACnBrX,KAAKuG,EAAI,EACTvG,KAAK+c,EAAI,EACT/c,KAAKgd,KAAO,EACZhd,KAAKmc,gBAAiB,SAAU,aAClC,EAEAlN,EAAM2L,uBAAyB,SAAU9B,GACvCA,EAAKhF,UAEL,IAAImJ,EAAYnE,EAAKzF,KAAKnM,WAAalH,KAAKkd,OAExCC,EAAiBnd,KAAKic,QAAQ5I,KAAKC,WAAatT,KAAKkd,OACzC,IAAXld,KAAKuG,GAAW0W,EAAYjd,KAAKuG,EAAI4W,IACxCnd,KAAKuG,EAAI,EACTvG,KAAK+c,EAAI/c,KAAKgd,MAGhB,IAAIhZ,EAAW,CACbuC,EAAGvG,KAAKuG,EACRwW,EAAG/c,KAAK+c,GAMV,OAHA/c,KAAKgd,KAAOrf,KAAKkD,IAAKb,KAAKgd,KAAMhd,KAAK+c,EAAIjE,EAAKzF,KAAKjM,aACpDpH,KAAKuG,GAAK0W,EAEHjZ,CACT,EAEAiL,EAAM8L,kBAAoB,WACxB,MAAO,CAAEva,OAAQR,KAAKgd,KACxB,EAEOF,CAEP,GAvDa,8CCZb,UA8BGrkB,OAnBC,EAAQ,CACJ,QACA,cAEK,0BADN,EAgBI,SAAkBgd,EAAY2H,GACzC,aAKE,IAAIC,EAAc5H,EAAWG,OAAO,WAEhC3G,EAAQoO,EAAY1b,UAEpB2b,EAAkB,CACpBC,mBAAmB,EACnBzG,QAAQ,EACRqF,iBAAiB,GAInB,IAAM,IAAIpN,KAAUqO,EAAQzb,UAEpB2b,EAAiBvO,KACrBE,EAAOF,GAAWqO,EAAQzb,UAAWoN,IAIzC,IAAIyO,EAAiBvO,EAAMuO,eAC3BvO,EAAMuO,eAAiB,WAErBxd,KAAKsW,MAAQtW,KAAKic,QAAQ5F,cAC1BmH,EAAe5b,KAAM5B,KACvB,EAGA,IAAIgX,EAAa/H,EAAM+H,WASvB,OARA/H,EAAM+H,WAAa,SAAU7d,GAC3B,MAAe,YAAVA,OACgCrC,IAA5BkJ,KAAKtB,QAAQ+e,WAClBzd,KAAKtB,QAAQ+e,WAAazd,KAAKtB,QAAQgf,SAEpC1G,EAAWnH,MAAO7P,KAAKic,QAAS7b,UACzC,EAEOid,CAET,GA1Da,+CCfb,UAyBG5kB,OAhBC,EAAQ,CACJ,cAEK,0BADN,EAcI,SAAkBgd,GAC7B,aAEA,IAAIkI,EAAWlI,EAAWG,OAAQ,WAAY,CAC5CgI,oBAAqB,IAGnB3O,EAAQ0O,EAAShc,UAmBrB,OAjBAsN,EAAMoI,aAAe,WACnBrX,KAAK+c,EAAI,CACX,EAEA9N,EAAM2L,uBAAyB,SAAU9B,GACvCA,EAAKhF,UACL,IAAIvN,GAAMvG,KAAKic,QAAQ5I,KAAKC,WAAawF,EAAKzF,KAAKnM,YACjDlH,KAAKtB,QAAQkf,oBACXb,EAAI/c,KAAK+c,EAEb,OADA/c,KAAK+c,GAAKjE,EAAKzF,KAAKjM,YACb,CAAEb,EAAGA,EAAGwW,EAAGA,EACpB,EAEA9N,EAAM8L,kBAAoB,WACxB,MAAO,CAAEva,OAAQR,KAAK+c,EACxB,EAEOY,CAEP,GAzCa,iDCZuDhL,EAAOC,QAA6E,WAAW,aAAa,SAASpU,EAAEA,EAAEqf,GAAG,IAAItkB,OAAE,EAAO,OAAO,WAAWA,GAAGsN,aAAatN,GAAGA,EAAEgF,WAAWC,EAAEqf,EAAE,CAAC,CAAC,SAASA,EAAErf,EAAEqf,GAAG,IAAI,IAAItkB,EAAEiF,EAAEiD,OAAOqc,EAAEvkB,EAAEwkB,EAAE,GAAGxkB,KAAKwkB,EAAE5Z,KAAK0Z,EAAErf,EAAEsf,EAAEvkB,EAAE,KAAK,OAAOwkB,CAAC,CAAC,SAASxkB,EAAEiF,EAAEqf,GAAG,IAAItkB,EAAE6G,UAAUqB,OAAO,QAAG,IAASrB,UAAU,IAAIA,UAAU,GAAG,GAAG3H,OAAOulB,QAAQ,OAAOC,EAAEzf,EAAEqf,EAAEtkB,GAAGiF,EAAE0f,aAAY,GAAG,EAAG,CAAC,SAASJ,EAAEtf,GAAG,IAAI,IAAIqf,EAAErf,EAAEE,QAAQnF,EAAEiF,EAAE2f,kBAAkBL,EAAEtf,EAAE4f,KAAKL,EAAEvf,EAAEsK,SAASzQ,OAAE,EAAOgmB,EAAE,EAAEA,EAAEP,EAAErc,OAAO4c,IAAI,CAAC,IAAIrO,EAAEjS,SAAS+f,EAAEO,GAAG,IAAIN,GAAG/N,IAAI3X,EAAEwlB,EAAES,QAAQtO,GAAGuO,EAAElmB,EAAEkB,GAAG,CAAC,OAAOA,CAAC,CAAC,SAASwkB,EAAEvf,GAAG,IAAI,IAAIqf,EAAErf,EAAEE,QAAQnF,EAAEiF,EAAE2f,kBAAkBL,EAAEtf,EAAE4f,KAAKL,EAAEvf,EAAEsK,SAASzQ,OAAE,EAAOgmB,EAAEP,EAAErc,OAAO,EAAE4c,GAAG,EAAEA,IAAI,CAAC,IAAIrO,EAAEjS,SAAS+f,EAAEO,GAAG,IAAIN,GAAG/N,IAAI3X,EAAEwlB,EAAES,QAAQtO,GAAGuO,EAAElmB,EAAEkB,GAAG,CAAC,OAAOA,CAAC,CAAC,SAASlB,EAAEmG,GAAG,IAAIqf,EAAErf,EAAEggB,2BAA2BhgB,EAAE2E,UAAUzH,YAAYjD,OAAO6a,WAAW/Z,EAAE,CAACklB,QAAQjgB,EAAEigB,SAAShgB,EAAED,EAAEiJ,QAAQlO,EAAEkO,OAAO,CAAClB,EAAE/H,EAAEiJ,OAAOlB,EAAEwW,EAAEve,EAAEiJ,OAAOsV,GAAGxjB,EAAEkO,OAAO,CAAClB,EAAE/H,EAAEiJ,OAAOsV,EAAEve,EAAEiJ,QAAQ,IAAIpP,EAAEd,OAAO6mB,KAAK5f,EAAE8f,SAAS,OAAO9f,EAAEkgB,YAAYZ,EAAE,CAACpf,QAAQF,EAAE2f,kBAAkB5kB,EAAE6kB,KAAK/lB,EAAEyQ,SAAS+U,IAAIE,EAAE,CAACrf,QAAQF,EAAE2f,kBAAkB5kB,EAAE6kB,KAAK/lB,EAAEyQ,SAAS+U,GAAG,CAAC,SAASQ,EAAE7f,GAAG,OAAOnG,EAAEmG,GAAGigB,OAAO,CAAC,SAASzO,EAAExR,GAAG,OAAOnG,EAAEmG,GAAGiJ,MAAM,CAAC,SAASjP,EAAEgG,GAAG,IAAIqf,IAAIzd,UAAUqB,OAAO,QAAG,IAASrB,UAAU,KAAKA,UAAU,GAAG7G,EAAE8kB,EAAE7f,GAAGsf,EAAE9N,EAAExR,GAAG+H,EAAEwX,EAAE,IAAIxkB,EAAE,IAAIskB,EAAE,OAAOE,EAAE,GAAG,IAAIxkB,EAAE,MAAM,OAAO,IAAIlB,EAAE,KAAK,GAAG,iBAAiBylB,EAAE,CAAC,IAAItlB,EAAEqU,WAAWiR,GAAGzlB,EAAEylB,EAAE3f,QAAQ3F,EAAE,IAAIslB,EAAEtlB,CAAC,CAAC,OAAOslB,GAAGvkB,EAAE,GAAGukB,EAAEvkB,EAAE,MAAMlB,EAAE0lB,EAAED,EAAE,IAAI,QAAQC,EAAE,OAAOD,EAAEzlB,EAAE,GAAG,CAAC,SAASsmB,EAAEngB,EAAEqf,GAAG,IAAItkB,EAAE8kB,EAAE7f,EAAEE,SAASof,EAAE,EAAEC,OAAE,EAAO1lB,OAAE,EAAO,GAAG,KAAMwlB,EAAE,OAAO,EAAmB,IAAIc,EAAE,KAAK,GAAG,iBAA/BtmB,EAAE2X,EAAExR,EAAEE,SAAS6H,GAAmC,CAAC,IAAIqY,EAAE/R,WAAWxU,EAAE,IAAIsmB,EAAEtmB,EAAE8F,QAAQygB,EAAE,IAAIvmB,EAAEumB,CAAC,CAAC,OAAOb,GAAG1lB,GAAGkB,EAAE,GAAGlB,EAAEkB,IAAIskB,EAAE,GAAGC,GAAGtlB,EAAEgG,EAAEE,SAAQ,IAAKmf,EAAE,GAAG,MAAMc,EAAEb,EAAEC,EAAE,IAAI,QAAQD,EAAE,OAAOC,EAAEY,EAAE,GAAG,CAAC,SAASC,EAAEpgB,GAAG,IAAIqf,EAAE,EAAEtkB,EAAEiF,EAAE2E,UAAU2a,EAAEtf,EAAEqgB,KAAKC,EAAEhB,GAAE,SAAStf,GAAGqf,EAAErf,EAAEqf,EAAErf,EAAEqf,CAAC,IAAGtkB,EAAEkB,MAAM+F,OAAOqd,EAAE,IAAI,CAAC,SAASkB,EAAEvgB,EAAEqf,GAAG,IAAItkB,EAAE6G,UAAUqB,OAAO,QAAG,IAASrB,UAAU,IAAIA,UAAU,GAAG0d,IAAI1d,UAAUqB,OAAO,QAAG,IAASrB,UAAU,KAAKA,UAAU,GAAG2d,EAAEM,EAAE7f,EAAEE,SAASrG,EAAE2X,EAAExR,EAAEE,SAASqe,EAAEiC,EAAExgB,EAAEuf,EAAExkB,GAAGulB,EAAEjB,GAAE,SAASA,GAAG,IAAItkB,EAAE,EAAEwkB,EAAEhgB,SAAS8f,EAAE7J,aAAa,IAAI1P,MAAMyZ,KAAKvf,EAAEqgB,KAAKroB,SAAQ,SAASqnB,EAAEC,GAAGD,EAAErf,EAAEqgB,KAAKtlB,KAAKA,EAAEukB,EAAE,IAAGD,EAAEpjB,MAAMuJ,SAAS,WAAW6Z,EAAEpjB,MAAM8K,IAAI/G,EAAEqgB,KAAKtlB,GAAG,KAAKskB,EAAEpjB,MAAM+K,KAAK,GAAGhH,EAAEygB,KAAK1lB,GAAGiF,EAAEqgB,KAAKtlB,IAAI+K,MAAMyZ,GAAG,EAAEA,EAAE1lB,EAAEylB,IAAID,EAAElT,QAAQuU,aAAa,GAAG,IAAGpB,IAAItf,EAAE2gB,QAAQ,MAAMP,EAAEpgB,EAAE,CAAC,SAAS4gB,EAAE5gB,EAAEqf,GAAG,IAAItkB,EAAE6G,UAAUqB,OAAO,QAAG,IAASrB,UAAU,IAAIA,UAAU,GAAG0d,IAAI1d,UAAUqB,OAAO,QAAG,IAASrB,UAAU,KAAKA,UAAU,GAAG2d,EAAEM,EAAE7f,EAAEE,SAASrG,EAAE2X,EAAExR,EAAEE,SAASqe,EAAEiC,EAAExgB,EAAEuf,EAAExkB,GAAGulB,EAAEjB,GAAE,SAASA,GAAGrf,EAAE6gB,UAAUtB,IAAIvf,EAAE6gB,QAAQ,GAAG,IAAI9lB,EAAE+lB,EAAEzB,EAAE,UAAUtkB,EAAEwE,SAAS8f,EAAE7J,aAAa,IAAI1P,MAAM/K,KAAKskB,EAAEpjB,MAAMuJ,SAAS,WAAW6Z,EAAEpjB,MAAM8K,IAAI/G,EAAEqgB,KAAKrgB,EAAE6gB,SAAS,KAAKxB,EAAEpjB,MAAM+K,KAAK,GAAGhH,EAAEygB,KAAKzgB,EAAE6gB,SAAS7gB,EAAEqgB,KAAKrgB,EAAE6gB,UAAU/a,MAAM/K,GAAG,EAAEA,EAAElB,EAAEmG,EAAE6gB,SAAS,EAAEvB,IAAID,EAAElT,QAAQuU,aAAa,GAAG,IAAGpB,IAAItf,EAAE2gB,QAAQ,MAAMP,EAAEpgB,EAAE,CAAC,IAAI+gB,EAAE,SAAS/gB,EAAEqf,EAAEtkB,GAAG,KAAKyG,gBAAgBxB,GAAG,OAAO,IAAIA,EAAEqf,EAAEtkB,GAAG,GAAGskB,GAAGA,EAAE2B,SAAS,OAAO3B,EAAE,GAAGA,EAAEA,EAAE1f,QAAQ,OAAO,IAAIA,QAAQ,OAAO,IAAI5E,EAAE,OAAOyG,KAAKyf,MAAM5B,EAAEtkB,GAAG,IAAI,IAAIukB,KAAK9d,KAAK0f,UAAU,GAAGnmB,EAAEukB,EAAErb,MAAM,KAAK,IAAIkd,OAAOpmB,EAAE,GAAGA,EAAE,IAAI4G,KAAK0d,GAAG,OAAO7d,KAAK0f,UAAU5B,GAAGD,GAAG,OAAO7d,KAAKyf,MAAM5B,EAAE,EAAE0B,EAAE5d,UAAU8d,MAAM,SAASjhB,EAAEqf,GAAG,OAAOA,GAAG1lB,UAAUI,iBAAiBiG,EAAE,EAAE+gB,EAAE5d,UAAU+d,UAAU,CAAC,EAAEH,EAAE5d,UAAU+d,UAAU,eAAe,SAASlhB,GAAG,OAAOrG,SAASiE,uBAAuBoC,EAAEohB,UAAU,GAAG,EAAEL,EAAE5d,UAAU+d,UAAU,SAAS,SAASlhB,GAAG,OAAOrG,SAASiG,qBAAqBI,EAAE,EAAE+gB,EAAE5d,UAAU+d,UAAU,eAAe,SAASlhB,GAAG,OAAOrG,SAAS+F,eAAeM,EAAEohB,UAAU,GAAG,EAAE,IAAId,EAAE,SAAStgB,EAAEqf,GAAG,IAAI,IAAItkB,EAAEiF,EAAEiD,OAAOqc,EAAEvkB,EAAEA,KAAKskB,EAAErf,EAAEsf,EAAEvkB,EAAE,GAAG,EAAEsmB,EAAE,WAAW,IAAIrhB,EAAE4B,UAAUqB,OAAO,QAAG,IAASrB,UAAU,IAAIA,UAAU,GAAGJ,KAAK8f,SAAQ,EAAG9f,KAAKoP,OAAO,GAAGpP,KAAKlE,IAAI0C,EAAE,EAAEqhB,EAAEle,UAAUoe,IAAI,WAAW,IAAI/f,KAAK8f,SAAS9f,KAAKoP,OAAO3N,OAAO,EAAE,CAAC,IAAIjD,EAAEwB,KAAKoP,OAAO5M,QAAQxC,KAAK8f,SAAQ,EAAGthB,IAAIwB,KAAK8f,SAAQ,EAAG9f,KAAK+f,KAAK,CAAC,EAAEF,EAAEle,UAAU7F,IAAI,WAAW,IAAI0C,EAAEwB,KAAK6d,EAAEzd,UAAUqB,OAAO,QAAG,IAASrB,UAAU,IAAIA,UAAU,GAAG,QAAQyd,IAAInc,MAAM4O,QAAQuN,GAAGiB,EAAEjB,GAAE,SAASA,GAAG,OAAOrf,EAAE1C,IAAI+hB,EAAE,KAAI7d,KAAKoP,OAAOjL,KAAK0Z,QAAQ7d,KAAK+f,OAAO,EAAEF,EAAEle,UAAUqe,MAAM,WAAWhgB,KAAKoP,OAAO,EAAE,EAAE,IAAIzV,EAAE,SAAS6E,GAAG,IAAIqf,EAAEzd,UAAUqB,OAAO,QAAG,IAASrB,UAAU,GAAGA,UAAU,GAAG,CAAC,EAAE,OAAOJ,KAAK0S,SAASlU,EAAEwB,KAAK3J,KAAKwnB,EAAE7d,IAAI,EAAE+c,EAAE,WAAW,IAAIve,EAAE4B,UAAUqB,OAAO,QAAG,IAASrB,UAAU,IAAIA,UAAU,GAAGJ,KAAKoP,OAAO,CAAC,EAAEpP,KAAK0S,SAASlU,CAAC,EAAEue,EAAEpb,UAAU6H,GAAG,WAAW,IAAIhL,EAAE4B,UAAUqB,OAAO,QAAG,IAASrB,UAAU,IAAIA,UAAU,GAAGyd,EAAEzd,UAAUqB,OAAO,QAAG,IAASrB,UAAU,IAAIA,UAAU,GAAG,SAAS5B,IAAIqf,KAAKnc,MAAM4O,QAAQtQ,KAAKoP,OAAO5Q,MAAMwB,KAAKoP,OAAO5Q,GAAG,IAAIwB,KAAKoP,OAAO5Q,GAAG2F,KAAK0Z,GAAG,EAAEd,EAAEpb,UAAUse,KAAK,WAAW,IAAIzhB,EAAE4B,UAAUqB,OAAO,QAAG,IAASrB,UAAU,IAAIA,UAAU,GAAGyd,EAAEzd,UAAUqB,OAAO,QAAG,IAASrB,UAAU,GAAGA,UAAU,GAAG,CAAC,EAAE,IAAI5B,IAAIkD,MAAM4O,QAAQtQ,KAAKoP,OAAO5Q,IAAI,OAAM,EAAG,IAAIjF,EAAE,IAAII,EAAEqG,KAAK0S,SAASmL,GAAGiB,EAAE9e,KAAKoP,OAAO5Q,IAAG,SAASA,GAAG,OAAOA,EAAEjF,EAAE,GAAE,EAAE,IAAI2mB,EAAE,SAAS1hB,GAAG,QAAQ,kBAAkBA,GAAGA,EAAEkH,cAAclH,EAAEmH,eAAe,IAAInH,EAAEtC,MAAMsC,EAAEgC,SAAS,CAAC,EAAE2f,EAAE,SAAS3hB,EAAEqf,GAAG,IAAItkB,EAAE6G,UAAUqB,OAAO,QAAG,IAASrB,UAAU,IAAIA,UAAU,GAAG,OAAO,IAAI4d,SAAQ,SAASxf,EAAEjF,GAAG,GAAGskB,EAAE1X,SAAS,OAAO+Z,EAAErC,GAAGrf,EAAEqf,GAAGtkB,EAAEskB,GAAGA,EAAEzlB,iBAAiB,QAAO,WAAW,OAAO8nB,EAAErC,GAAGrf,EAAEqf,GAAGtkB,EAAEskB,EAAE,IAAGA,EAAEzlB,iBAAiB,SAAQ,WAAW,OAAOmB,EAAEskB,EAAE,GAAE,IAAGuC,MAAK,SAASvC,GAAGtkB,GAAGiF,EAAEyhB,KAAKzhB,EAAE6hB,UAAUC,iBAAiB,CAACC,IAAI1C,GAAG,IAAG2C,OAAM,SAAS3C,GAAG,OAAOrf,EAAEyhB,KAAKzhB,EAAE6hB,UAAUI,kBAAkB,CAACF,IAAI1C,GAAG,GAAE,EAAE6C,EAAE,SAASliB,EAAEjF,GAAG,IAAIukB,EAAE1d,UAAUqB,OAAO,QAAG,IAASrB,UAAU,IAAIA,UAAU,GAAG,OAAOyd,EAAEtkB,GAAE,SAASskB,GAAG,OAAOsC,EAAE3hB,EAAEqf,EAAEC,EAAE,GAAE,EAAEG,EAAE,SAASzf,EAAEqf,GAAG,IAAItkB,EAAE6G,UAAUqB,OAAO,QAAG,IAASrB,UAAU,IAAIA,UAAU,GAAG,OAAO4d,QAAQ2C,IAAID,EAAEliB,EAAEqf,EAAEtkB,IAAI6mB,MAAK,WAAW5hB,EAAEyhB,KAAKzhB,EAAE6hB,UAAUO,qBAAqB,GAAE,EAAEC,EAAE,SAAShD,GAAG,OAAOrf,GAAE,WAAWqf,EAAEoC,KAAKpC,EAAEwC,UAAUS,cAAcjD,EAAEkD,MAAMjlB,KAAI,WAAW,OAAO+hB,EAAEK,aAAY,GAAG,EAAG,GAAE,GAAE,IAAI,EAAE8C,EAAE,SAASxiB,GAAG,GAAGA,EAAE2E,UAAUoc,EAAE/gB,EAAEE,QAAQyE,WAAW3E,EAAE2E,qBAAqBoc,IAAI/gB,EAAE2E,UAAU,QAAQ3E,EAAEE,QAAQuiB,OAAOnP,QAAQW,MAAM,8BAA8BjU,EAAE2E,UAAU1B,SAASjD,EAAE2E,UAAU3E,EAAE2E,UAAU,IAAI3E,EAAEE,QAAQyE,UAAU3E,EAAE2E,UAAU3E,EAAE2E,UAAU1I,MAAMuJ,SAAS,UAAU,EAAEkd,EAAE,SAAS1iB,GAAGA,EAAEuiB,MAAM,IAAIlB,EAAErhB,EAAE4Q,OAAO,IAAI2N,EAAEve,GAAGA,EAAEqgB,KAAK,GAAGrgB,EAAE2iB,QAAQN,EAAEriB,EAAE,EAAE4iB,EAAE,SAAS5iB,GAAG,IAAIqf,EAAE0B,EAAE,MAAM/gB,EAAE2E,WAAW1K,OAAOL,iBAAiB,SAASoG,EAAE2iB,SAAS3iB,EAAEgL,GAAGhL,EAAE6hB,UAAUC,kBAAiB,WAAW,OAAO9hB,EAAE0f,aAAY,GAAG,EAAG,IAAG1f,EAAEgL,GAAGhL,EAAE6hB,UAAUO,sBAAqB,WAAW,OAAOpiB,EAAE0f,aAAY,GAAG,EAAG,IAAG1f,EAAEE,QAAQ2iB,mBAAmB9nB,EAAEiF,EAAEqf,GAAGrf,EAAEE,QAAQ4iB,eAAe9iB,EAAEyhB,KAAKzhB,EAAE6hB,UAAUkB,kBAAkB,EAAEC,EAAE,SAAShjB,GAAGwiB,EAAExiB,GAAG0iB,EAAE1iB,GAAG4iB,EAAE5iB,EAAE,EAAEC,EAAE,SAASD,GAAG,OAAOA,IAAIjH,OAAOiH,IAAI,mBAAmBjH,OAAOoK,UAAUkM,SAASjM,KAAKpD,EAAE,EAAE+f,EAAE,SAAS/f,EAAEqf,GAAGpf,EAAED,KAAKqf,EAAEY,QAAQjgB,GAAGC,EAAED,IAAIA,EAAEigB,UAAUZ,EAAEY,QAAQjgB,EAAEigB,SAAShgB,EAAED,IAAIA,EAAEiJ,SAAShJ,EAAED,EAAEiJ,UAAUoW,EAAEpW,OAAO,CAAClB,EAAE/H,EAAEiJ,OAAOsV,EAAEve,EAAEiJ,SAAShJ,EAAED,IAAIA,EAAEiJ,QAAQhJ,EAAED,EAAEiJ,SAASjJ,EAAEiJ,OAAOlB,IAAIsX,EAAEpW,OAAOlB,EAAE/H,EAAEiJ,OAAOlB,GAAG9H,EAAED,IAAIA,EAAEiJ,QAAQhJ,EAAED,EAAEiJ,SAASjJ,EAAEiJ,OAAOsV,IAAIc,EAAEpW,OAAOsV,EAAEve,EAAEiJ,OAAOsV,EAAE,EAAEuC,EAAE,SAAS9gB,EAAEqf,GAAG,OAAOplB,OAAOoH,iBAAiBrB,EAAE,MAAMyB,iBAAiB4d,EAAE,EAAEmB,EAAE,SAASxgB,EAAEqf,GAAG,IAAItkB,EAAE6G,UAAUqB,OAAO,QAAG,IAASrB,UAAU,IAAIA,UAAU,GAAG,GAAG5B,EAAE6gB,UAAU7gB,EAAE6gB,QAAQ,GAAG7gB,EAAEqgB,KAAKpd,OAAO,IAAIlI,GAAE,GAAIA,EAAE,CAACiF,EAAEqgB,KAAK,GAAGrgB,EAAEygB,KAAK,GAAGzgB,EAAE6gB,QAAQ,EAAE,IAAI,IAAIvB,EAAED,EAAE,EAAEC,GAAG,EAAEA,IAAItf,EAAEqgB,KAAKf,GAAG,EAAEtf,EAAEygB,KAAKnB,GAAGa,EAAEngB,EAAEsf,EAAE,MAAM,GAAGtf,EAAE2gB,QAAmB,IAAV3gB,EAAEqgB,KAAK,GAAWf,EAAED,EAAE,EAAEC,GAAG,EAAEA,IAAItf,EAAEqgB,KAAKf,GAAGtf,EAAE2gB,QAAQrB,QAAqB,IAAbtf,EAAE2gB,QAAQ,GAAWrB,EAAED,EAAE,EAAEC,GAAG,EAAEA,IAAItf,EAAE2gB,QAAQrB,GAAGtf,EAAEqgB,KAAKf,EAAG,EAAE2D,EAAE,SAASjjB,GAAG,IAAIqf,EAAEzd,UAAUqB,OAAO,QAAG,IAASrB,UAAU,IAAIA,UAAU,GAAG7G,IAAI6G,UAAUqB,OAAO,QAAG,IAASrB,UAAU,KAAKA,UAAU,GAAG0d,EAAED,EAAErf,EAAE2E,UAAU3B,SAAS+d,EAAE,2CAA2C/gB,EAAE2E,WAAW2a,EAAEpc,MAAMggB,KAAK5D,GAAGxQ,QAAO,SAAS9O,GAAG,OAAO,OAAOA,EAAEmjB,YAAY,IAAG,IAAI5D,EAAEvlB,EAAEgG,EAAEE,SAAS,OAAOogB,EAAEhB,GAAE,SAAStf,GAAGqf,IAAIrf,EAAEmM,QAAQuU,aAAa,GAAG1gB,EAAE/D,MAAMyB,MAAM6hB,CAAC,IAAGvf,EAAEE,QAAQkjB,WAAWxC,EAAE5gB,EAAEsf,EAAED,EAAEtkB,GAAGiF,EAAEyhB,KAAKzhB,EAAE6hB,UAAUwB,sBAAsB9C,EAAEvgB,EAAEsf,EAAED,EAAEtkB,GAAGiF,EAAEyhB,KAAKzhB,EAAE6hB,UAAUwB,oBAAoB,EAAEC,EAAE,WAAW,QAAQrpB,OAAOulB,OAAO,EAAEzX,EAAEhP,OAAOC,QAAQ,SAASgH,GAAG,IAAI,IAAIqf,EAAE,EAAEA,EAAEzd,UAAUqB,OAAOoc,IAAI,CAAC,IAAItkB,EAAE6G,UAAUyd,GAAG,IAAI,IAAIC,KAAKvkB,EAAEhC,OAAOoK,UAAUhL,eAAeiL,KAAKrI,EAAEukB,KAAKtf,EAAEsf,GAAGvkB,EAAEukB,GAAG,CAAC,OAAOtf,CAAC,EAAEkD,MAAMggB,OAAOhgB,MAAMggB,KAAK,SAASljB,GAAG,IAAI,IAAIqf,EAAE,EAAEtkB,EAAE,GAAGskB,EAAErf,EAAEiD,QAAQlI,EAAE4K,KAAK3F,EAAEqf,MAAM,OAAOtkB,CAAC,GAAG,IAAIwoB,EAAE,CAACtD,QAAQ,EAAEhX,OAAO,EAAEma,WAAU,EAAGN,eAAc,EAAGU,gBAAe,EAAG1D,QAAQ,CAAC,EAAE+C,mBAAkB,EAAGY,QAAO,EAAGC,cAAa,EAAG1D,4BAA2B,IAAK,WAAW,IAAIrmB,SAASiD,cAAc,KAAKlC,cAAc,WAAqkB,CAAzjB,MAAMsF,IAAI,WAAW,SAASA,EAAEA,GAAG,OAAO,SAASjF,GAAG,GAAGA,GAAGskB,EAAE1d,KAAK5G,GAAG,CAAC,IAAIukB,EAAE9d,KAAKnC,aAAa,MAAMigB,IAAI9d,KAAK4G,GAAG,IAAIjJ,KAAKmD,MAAM,IAAInD,KAAK+d,UAAU,KAAKtb,UAAU,GAAG7G,EAAE4E,QAAQ0f,EAAE,IAAI7d,KAAK4G,IAAI,IAAImX,EAAEvf,EAAEqR,MAAM7P,KAAKI,WAAW,OAAO,OAAO0d,EAAE9d,KAAKmiB,gBAAgB,MAAMrE,IAAI9d,KAAK4G,GAAGkX,GAAGC,CAAC,CAAC,OAAOvf,EAAEqR,MAAM7P,KAAKI,UAAU,CAAC,CAAC,IAAIyd,EAAE,aAAatkB,EAAEiF,EAAEmQ,QAAQhN,UAAUzI,eAAeyV,QAAQhN,UAAUzI,cAAc,SAASsF,GAAG,OAAOjF,EAAEsW,MAAM7P,KAAKI,UAAU,EAAE,IAAI0d,EAAEtf,EAAEmQ,QAAQhN,UAAUpJ,kBAAkBoW,QAAQhN,UAAUpJ,iBAAiB,SAASiG,GAAG,OAAOsf,EAAEjO,MAAM7P,KAAKI,UAAU,CAAC,CAA5iB,EAA+iB,CAAC,CAA/nB,GAAmoB,IAAIgiB,EAAE,SAAS5jB,IAAI,IAAIqf,EAAEzd,UAAUqB,OAAO,QAAG,IAASrB,UAAU,GAAGA,UAAU,GAAG2hB,EAAE,KAAK/hB,gBAAgBxB,GAAG,OAAO,IAAIA,EAAEqf,GAAG7d,KAAKtB,QAAQ,CAAC,EAAE6H,EAAEvG,KAAKtB,QAAQqjB,EAAElE,GAAG7d,KAAKtB,QAAQwjB,eAAeJ,KAAKN,EAAExhB,KAAK,EAAE,OAAOoiB,EAAEC,KAAK,SAAS7jB,GAAG,OAAOsT,QAAQwQ,KAAK,iHAAiH,IAAIF,EAAE5jB,EAAE,EAAE4jB,EAAEzgB,UAAU4gB,uBAAuB,WAAW,IAAI/jB,EAAE4B,UAAUqB,OAAO,QAAG,IAASrB,UAAU,IAAIA,UAAU,GAAG,OAAO7G,EAAEyG,KAAKuf,EAAE,MAAMvf,KAAKmD,YAAY3E,EAAE,EAAE4jB,EAAEzgB,UAAU6gB,eAAe,SAAShkB,GAAG,IAAIqf,EAAEzd,UAAUqB,OAAO,QAAG,IAASrB,UAAU,IAAIA,UAAU,GAAG0d,EAAEyB,EAAE,MAAMvf,KAAKmD,WAAW,OAAOnD,KAAKwJ,GAAGxJ,KAAKqgB,UAAUO,qBAAqBpiB,GAAGqf,GAAG7d,KAAKwJ,GAAGxJ,KAAKqgB,UAAUC,iBAAiB9hB,GAAGjF,EAAEyG,KAAK8d,EAAED,EAAE,EAAEuE,EAAEzgB,UAAUuc,YAAY,WAAW,IAAI1f,EAAEwB,KAAK6d,EAAEzd,UAAUqB,OAAO,QAAG,IAASrB,UAAU,IAAIA,UAAU,GAAG7G,IAAI6G,UAAUqB,OAAO,QAAG,IAASrB,UAAU,KAAKA,UAAU,GAAG,OAAO7G,GAAGyG,KAAK+gB,MAAMf,QAAQhgB,KAAK+gB,MAAMjlB,KAAI,WAAW,OAAO2lB,EAAEjjB,EAAEqf,EAAEtkB,EAAE,GAAE,EAAE6oB,EAAEzgB,UAAU5F,OAAO,WAAWtD,OAAOgqB,oBAAoB,SAASziB,KAAKmhB,SAASrC,EAAE9e,KAAKmD,UAAU3B,UAAS,SAAShD,GAAGA,EAAE2jB,gBAAgB,sBAAsB3jB,EAAE2jB,gBAAgB,QAAQ,IAAGniB,KAAKmD,UAAUgf,gBAAgB,QAAQ,EAAEC,EAAEzgB,UAAU6J,OAAO,WAAWxL,KAAKke,aAAY,GAAG,GAAIle,KAAKigB,KAAKjgB,KAAKqgB,UAAUkB,mBAAmB9oB,OAAOL,iBAAiB,SAAS4H,KAAKmhB,SAASnhB,KAAKmD,UAAU1I,MAAMuJ,SAAS,UAAU,EAAEoe,EAAEzgB,UAAU6H,GAAG,SAAShL,EAAEqf,GAAG7d,KAAKoP,OAAO5F,GAAGhL,EAAEqf,EAAE,EAAEuE,EAAEzgB,UAAUse,KAAK,SAASzhB,EAAEqf,GAAG7d,KAAKoP,OAAO6Q,KAAKzhB,EAAEqf,EAAE,EAAEuE,EAAE/B,UAAU,CAACkB,kBAAkB,mBAAmBM,mBAAmB,oBAAoBvB,iBAAiB,kBAAkBG,kBAAkB,mBAAmBG,qBAAqB,uBAAuBE,aAAa,eAAesB,EAAEzgB,UAAU0e,UAAU+B,EAAE/B,UAAU+B,CAAC,CAA1yUvE,mBCAnF,UAgCGplB,OAnBC,EAAQ,CACJ,QACA,cAEK,0BADN,EAgBI,SAAkB8c,EAAUzB,GAEvC,aAKE,IAAIsJ,EAAU7H,EAASK,OAAO,WAE9BwH,EAAQsF,cAAchF,SAAW,aAEjC,IAAIzO,EAAQmO,EAAQzb,UAiMpB,OA/LAsN,EAAMoI,aAAe,WACnBrX,KAAK8T,UACL9T,KAAKmc,gBAAiB,cAAe,cACrCnc,KAAKmc,gBAAiB,SAAU,cAChCnc,KAAKwd,iBAGLxd,KAAK2iB,MAAQ,GACb,IAAM,IAAItqB,EAAE,EAAGA,EAAI2H,KAAKif,KAAM5mB,IAC5B2H,KAAK2iB,MAAMxe,KAAM,GAGnBnE,KAAKgd,KAAO,EACZhd,KAAK4iB,mBAAqB,CAC5B,EAEA3T,EAAMuO,eAAiB,WAGrB,GAFAxd,KAAK6iB,qBAEC7iB,KAAK8iB,YAAc,CACvB,IAAIlG,EAAY5c,KAAKsW,MAAM,GACvByM,EAAgBnG,GAAaA,EAAUzf,QAE3C6C,KAAK8iB,YAAcC,GAAiBjP,EAASiP,GAAgB7b,YAE3DlH,KAAKmd,cACT,CAEA,IAAI2F,EAAc9iB,KAAK8iB,aAAe9iB,KAAKkd,OAGvCC,EAAiBnd,KAAKmd,eAAiBnd,KAAKkd,OAC5C+B,EAAO9B,EAAiB2F,EAExBE,EAASF,EAAc3F,EAAiB2F,EAG5C7D,EAAOthB,KADUqlB,GAAUA,EAAS,EAAI,QAAU,SACvB/D,GAC3Bjf,KAAKif,KAAOthB,KAAKkD,IAAKoe,EAAM,EAC9B,EAEAhQ,EAAM4T,kBAAoB,WAExB,IACI1f,EADanD,KAAKgX,WAAW,YACJhX,KAAK7C,QAAQ4E,WAAa/B,KAAK7C,QAGxDkW,EAAOS,EAAS3Q,GACpBnD,KAAKmd,eAAiB9J,GAAQA,EAAKC,UACrC,EAEArE,EAAM2L,uBAAyB,SAAU9B,GACvCA,EAAKhF,UAEL,IAAImP,EAAYnK,EAAKzF,KAAKnM,WAAalH,KAAK8iB,YAGxCI,EAAUvlB,KAFGslB,GAAaA,EAAY,EAAI,QAAU,QAEtBnK,EAAKzF,KAAKnM,WAAalH,KAAK8iB,aAC9DI,EAAUvlB,KAAKkK,IAAKqb,EAASljB,KAAKif,MAalC,IAXA,IAEIkE,EAAcnjB,KAFCA,KAAKtB,QAAQ0kB,gBAC9B,4BAA8B,sBACQF,EAASpK,GAE7C9U,EAAW,CACbuC,EAAGvG,KAAK8iB,YAAcK,EAAYE,IAClCtG,EAAGoG,EAAYpG,GAGbuG,EAAYH,EAAYpG,EAAIjE,EAAKzF,KAAKjM,YACtCmc,EAASL,EAAUC,EAAYE,IACzBhrB,EAAI8qB,EAAYE,IAAKhrB,EAAIkrB,EAAQlrB,IACzC2H,KAAK2iB,MAAMtqB,GAAKirB,EAGlB,OAAOtf,CACT,EAEAiL,EAAMuU,mBAAqB,SAAUN,GACnC,IAAIO,EAAWzjB,KAAK0jB,gBAAiBR,GAEjCS,EAAWhmB,KAAKkK,IAAIgI,MAAOlS,KAAM8lB,GAErC,MAAO,CACLJ,IAAKI,EAAShkB,QAASkkB,GACvB5G,EAAG4G,EAEP,EAMA1U,EAAMyU,gBAAkB,SAAUR,GAChC,GAAKA,EAAU,EAEb,OAAOljB,KAAK2iB,MAOd,IAJA,IAAIc,EAAW,GAEXG,EAAa5jB,KAAKif,KAAO,EAAIiE,EAEvB7qB,EAAI,EAAGA,EAAIurB,EAAYvrB,IAC/BorB,EAASprB,GAAK2H,KAAK6jB,cAAexrB,EAAG6qB,GAEvC,OAAOO,CACT,EAEAxU,EAAM4U,cAAgB,SAAUR,EAAKH,GACnC,GAAKA,EAAU,EACb,OAAOljB,KAAK2iB,MAAOU,GAGrB,IAAIS,EAAa9jB,KAAK2iB,MAAMvhB,MAAOiiB,EAAKA,EAAMH,GAE9C,OAAOvlB,KAAKkD,IAAIgP,MAAOlS,KAAMmmB,EAC/B,EAGA7U,EAAM8U,0BAA4B,SAAUb,EAASpK,GACnD,IAAIuK,EAAMrjB,KAAK4iB,mBAAqB5iB,KAAKif,KAGzCoE,EAFaH,EAAU,GAAKG,EAAMH,EAAUljB,KAAKif,KAElC,EAAIoE,EAEnB,IAAIW,EAAUlL,EAAKzF,KAAKnM,YAAc4R,EAAKzF,KAAKjM,YAGhD,OAFApH,KAAK4iB,mBAAqBoB,EAAUX,EAAMH,EAAUljB,KAAK4iB,mBAElD,CACLS,IAAKA,EACLtG,EAAG/c,KAAK6jB,cAAeR,EAAKH,GAEhC,EAEAjU,EAAM4L,aAAe,SAAUC,GAC7B,IAAImJ,EAAYnQ,EAASgH,GACrBxT,EAAStH,KAAKud,kBAAmBzC,GAGjCoJ,EADelkB,KAAKgX,WAAW,cACP1P,EAAO9B,KAAO8B,EAAO6c,MAC7CC,EAAQF,EAASD,EAAU/c,WAC3Bmd,EAAW1mB,KAAKmD,MAAOojB,EAASlkB,KAAK8iB,aACzCuB,EAAW1mB,KAAKkD,IAAK,EAAGwjB,GACxB,IAAIC,EAAU3mB,KAAKmD,MAAOsjB,EAAQpkB,KAAK8iB,aAEvCwB,GAAWF,EAAQpkB,KAAK8iB,YAAc,EAAI,EAC1CwB,EAAU3mB,KAAKkK,IAAK7H,KAAKif,KAAO,EAAGqF,GAMnC,IAHA,IACIC,GADcvkB,KAAKgX,WAAW,aACF1P,EAAO/B,IAAM+B,EAAOkd,QAClDP,EAAU7c,YACF/O,EAAIgsB,EAAUhsB,GAAKisB,EAASjsB,IACpC2H,KAAK2iB,MAAMtqB,GAAKsF,KAAKkD,IAAK0jB,EAAWvkB,KAAK2iB,MAAMtqB,GAEpD,EAEA4W,EAAM8L,kBAAoB,WACxB/a,KAAKgd,KAAOrf,KAAKkD,IAAIgP,MAAOlS,KAAMqC,KAAK2iB,OACvC,IAAItP,EAAO,CACT7S,OAAQR,KAAKgd,MAOf,OAJKhd,KAAKgX,WAAW,cACnB3D,EAAKnX,MAAQ8D,KAAKykB,yBAGbpR,CACT,EAEApE,EAAMwV,sBAAwB,WAI5B,IAHA,IAAIC,EAAa,EAEbrsB,EAAI2H,KAAKif,OACH5mB,GACe,IAAlB2H,KAAK2iB,MAAMtqB,IAGhBqsB,IAGF,OAAS1kB,KAAKif,KAAOyF,GAAe1kB,KAAK8iB,YAAc9iB,KAAKkd,MAC9D,EAEAjO,EAAM+L,kBAAoB,WACxB,IAAI2J,EAAgB3kB,KAAKmd,eAEzB,OADAnd,KAAK6iB,oBACE8B,GAAiB3kB,KAAKmd,cAC/B,EAEOC,CAET,GA7Na,sDCdb,IAAIwH,EAAM,6BACNC,EAAY,mDACZC,EAA2B,oBAAVC,MAAwB,CAACtqB,MAAO,CAAC,kBAAmB,IAAM,IAAIsqB,MAC/EC,EAAoB,eAAgBF,EAAQrqB,MAC5CwqB,EAAyB,oBAAqBH,EAAQrqB,MACtDyqB,EAAc,oBAAqBJ,EAAQrqB,MAC3C0qB,EAAmD,iBAAvBL,EAAQM,WACpCC,EAAqBP,EAAQjnB,aAC7BynB,EAAqBR,EAAQhqB,aAC7ByqB,GAAkB,EAoCtB,SAASC,EAAejF,EAAKrkB,EAAOsE,GAEnC,IAAIilB,EAnCI,wEAmC4BvpB,GAAS,GAnCwC,cAmCrCsE,GAAU,GAnC8C,iBAsCpG6kB,EAAmBzjB,KAAK2e,EAAK,SAAWkF,GAC3CH,EAAmB1jB,KAAK2e,EAAK,MAAOkF,EAEtC,CAEA,SAASC,EAAanF,EAAK9Z,GAGtB8Z,EAAI5a,aACPc,EAAS8Z,GAEThiB,WAAWmnB,EAAc,IAAKnF,EAAK9Z,EAErC,CAEA,SAASkf,EAAO7lB,GACf,IAAIrF,EA/BL,SAAkBqF,GAIjB,IAHA,IACI8lB,EADAnrB,EAAQoF,iBAAiBC,GAAI+lB,WAE7B5uB,EAAQ,CAAC,EAC+B,QAApC2uB,EAASf,EAAUiB,KAAKrrB,KAC/BxD,EAAM2uB,EAAO,IAAMA,EAAO,GAE3B,OAAO3uB,CACR,CAuBasc,CAASzT,GACjBimB,EAAMjmB,EAAG8kB,GAIb,GAHAnqB,EAAM,cAAgBA,EAAM,eAAiB,QAGxCsrB,EAAIxF,IAAK,CAEb,GAA4B,SAAxB9lB,EAAM,cACT,OAID,IACEsrB,EAAIC,UACLhB,IACCvqB,EAAM,mBAEP,MAEF,CAGA,IAAKsrB,EAAIxF,IAAK,CACbwF,EAAIxF,IAAM,IAAIwE,MAAMjlB,EAAG5D,MAAO4D,EAAGU,QACjCulB,EAAIxF,IAAI0F,OAASZ,EAAmBzjB,KAAK9B,EAAI,oBAAsBA,EAAGmmB,OACtEF,EAAIxF,IAAIra,IAAMmf,EAAmBzjB,KAAK9B,EAAI,iBAAmBA,EAAGoG,IAIhEof,EAAmB1jB,KAAK9B,EAAI,eAAgBA,EAAGoG,KAC3CpG,EAAGmmB,QACNX,EAAmB1jB,KAAK9B,EAAI,kBAAmBA,EAAGmmB,QAGnDT,EAAe1lB,EAAIA,EAAG6F,cAAgB7F,EAAG5D,MAAO4D,EAAG4F,eAAiB5F,EAAGU,QAGnEV,EAAGmmB,SACNnmB,EAAGmmB,OAAS,IAEb,KAiCF,SAAuBnmB,GACtB,IAAIomB,EAAc,CACjBC,IAAK,SAAavmB,GACjB,OAAOE,EAAG8kB,GAAKrE,IAAI3gB,GAAc,MAClC,EACAwmB,IAAK,SAAa7Y,EAAO3N,GAIxB,OAHAE,EAAG8kB,GAAKrE,IAAI3gB,GAAc,OAAS2N,EACnC+X,EAAmB1jB,KAAK9B,EAAK,YAAcF,EAAO2N,GAClDoY,EAAO7lB,GACAyN,CACR,GAEDhW,OAAO8uB,eAAevmB,EAAI,MAAOomB,GACjC3uB,OAAO8uB,eAAevmB,EAAI,aAAc,CACvCqmB,IAAK,WAAc,OAAOD,EAAYC,IAAI,aAAe,IAE1D5uB,OAAO8uB,eAAevmB,EAAI,SAAU,CACnCqmB,IAAK,WAAc,OAAOD,EAAYC,IAAI,SAAW,EACrDC,IAAK,SAAUE,GAAM,OAAOJ,EAAYE,IAAIE,EAAI,SAAW,GAE7D,CApDGC,CAAczmB,EAKf,CAJE,MAAO0mB,GACJ/tB,OAAOqZ,SACVA,QAAQwQ,KAAK,iCAEf,CACD,EAlGD,SAA4BxiB,GAC3B,GAAIA,EAAGmmB,SAAWd,GAAsB1sB,OAAOguB,YAAa,CAC3D,IAAIC,EAAKjuB,OAAOguB,YAAYjF,EAEvB1hB,EAAG4mB,EAAGC,KAAQ7mB,EAAG4mB,EAAGC,IAAIC,QAE5BF,EAAGG,QAAQ/mB,EAAI,CAACgnB,UAAU,IAGtBhnB,EAAG4mB,EAAGC,IAAII,SAEdjnB,EAAG4mB,EAAGC,IAAIK,WAAY,EACtBN,EAAGG,QAAQ/mB,EAAI,CAACgnB,UAAU,KAI3BhnB,EAAGslB,WAAatlB,EAAG4mB,EAAGC,IAAII,QAAUjnB,EAAGoG,GACxC,CACD,CAkFC+gB,CAAmBlB,EAAIxF,KAEvBzgB,EAAGrF,MAAMiK,gBAAkB,SAAaqhB,EAAIxF,IAAI6E,YAAcW,EAAIxF,IAAIra,KAAK/H,QAAQ,KAAM,OAAU,KACnG2B,EAAGrF,MAAMmK,mBAAqBnK,EAAM,oBAAsB,SAC1DqF,EAAGrF,MAAMysB,iBAAmB,YAC5BpnB,EAAGrF,MAAM0sB,iBAAmB,cAExB,aAAahnB,KAAK1F,EAAM,eAC3BirB,EAAaK,EAAIxF,KAAK,WACjBwF,EAAIxF,IAAI5a,aAAe7F,EAAG5D,OAAS6pB,EAAIxF,IAAI7a,cAAgB5F,EAAGU,OACjEV,EAAGrF,MAAMkK,eAAiB,UAE1B7E,EAAGrF,MAAMkK,eAAiB,MAE5B,IAEA7E,EAAGrF,MAAMkK,eAAiBlK,EAAM,cAAc0D,QAAQ,OAAQ,QAAQA,QAAQ,OAAQ,aAGvFunB,EAAaK,EAAIxF,KAAK,SAAUA,GAC/BiF,EAAe1lB,EAAIygB,EAAI5a,aAAc4a,EAAI7a,cAC1C,GACD,CAuCA,SAAS0hB,EAAIC,EAAM7P,GAClB,IAAI8P,GAAiB/B,IAAoB8B,EAIzC,GAHA7P,EAAOA,GAAQ,CAAC,EAChB6P,EAAOA,GAAQ,MAEVpC,IAA2BzN,EAAKwO,WAAcd,EAClD,OAAO,EAIK,QAATmC,EACHA,EAAOlvB,SAASiG,qBAAqB,OACX,iBAATipB,EACjBA,EAAOlvB,SAASI,iBAAiB8uB,GACrB,WAAYA,IACxBA,EAAO,CAACA,IAIT,IAAK,IAAIhvB,EAAI,EAAGA,EAAIgvB,EAAK5lB,OAAQpJ,IAChCgvB,EAAKhvB,GAAGusB,GAAOyC,EAAKhvB,GAAGusB,IAAQ,CAC9BoB,SAAUxO,EAAKwO,UAEhBL,EAAO0B,EAAKhvB,IAGTivB,IACHnvB,SAASmD,KAAKlD,iBAAiB,QAAQ,SAAUmB,GACvB,QAArBA,EAAE+I,OAAOilB,SACZH,EAAI7tB,EAAE+I,OAAQ,CACb0jB,SAAUxO,EAAKwO,UAGlB,IAAG,GACHT,GAAkB,EAClB8B,EAAO,OAIJ7P,EAAKgQ,SACR/uB,OAAOL,iBAAiB,SAAUgvB,EAAIK,KAAK,KAAMJ,EAAM,CACtDrB,SAAUxO,EAAKwO,WAGlB,CAEAoB,EAAIpC,kBAAoBA,EACxBoC,EAAInC,uBAAyBA,EA9D7B,WACC,SAASyC,EAAiB5nB,EAAIxI,GAC7B,OAAOwI,EAAG8kB,IAAQ9kB,EAAG8kB,GAAKrE,MAAiB,QAATjpB,GAA2B,WAATA,GAAqBwI,EAAG8kB,GAAKrE,IAAMzgB,CACxF,CACKmlB,IACJ0C,iBAAiBhmB,UAAU9D,aAAe,SAAUvG,GACnD,OAAO+tB,EAAmBzjB,KAAK8lB,EAAiB1nB,KAAM1I,GAAOA,EAC9D,EAEAqwB,iBAAiBhmB,UAAU7G,aAAe,SAAUxD,EAAMiW,GACzD,OAAO+X,EAAmB1jB,KAAK8lB,EAAiB1nB,KAAM1I,GAAOA,EAAMoe,OAAOnI,GAC3E,EAEF,CAmDAqa,GAEAjV,EAAOC,QAAUwU,iBCtOjB,UA8BG3uB,OArBC,EAAQ,CACJ,QACA,cAEK,0BADN,EAkBI,SAAkBuW,EAAW8E,GACxC,aAIA,SAAS+T,EAAYxX,GACnB,IAAM,IAAIzQ,KAAQyQ,EAChB,OAAO,EAGT,OAAO,CACT,CAKA,IAAIyX,EAAe3vB,SAASsE,gBAAgBhC,MAExCstB,EAAuD,iBAA3BD,EAAaE,WAC3C,aAAe,mBACbC,EAAqD,iBAA1BH,EAAanf,UAC1C,YAAc,kBAEZuf,EAAqB,CACvBC,iBAAkB,sBAClBH,WAAY,iBACXD,GAGCK,EAAmB,CACrBzf,UAAWsf,EACXD,WAAYD,EACZpM,mBAAoBoM,EAAqB,WACzCA,mBAAoBA,EAAqB,WACzCM,gBAAiBN,EAAqB,SAKxC,SAASvS,EAAMrY,EAAS2Z,GAChB3Z,IAIN6C,KAAK7C,QAAUA,EAEf6C,KAAK8W,OAASA,EACd9W,KAAKgE,SAAW,CACduC,EAAG,EACHwW,EAAG,GAGL/c,KAAKgW,UACP,CAGA,IAAI/G,EAAQuG,EAAK7T,UAAYpK,OAAOqe,OAAQ5G,EAAUrN,WA0OtD,SAAS2mB,EAAarmB,GACpB,OAAOA,EAAI9D,QAAS,YAAY,SAAUyT,GACxC,MAAO,IAAMA,EAAG3N,aAClB,GACF,CA7OAgL,EAAM4N,YAAcrH,EAEpBvG,EAAM+G,QAAU,WAEdhW,KAAKuoB,QAAU,CACbC,cAAe,CAAC,EAChBC,MAAO,CAAC,EACRC,MAAO,CAAC,GAGV1oB,KAAKyE,IAAI,CACPT,SAAU,YAEd,EAGAiL,EAAM0B,YAAc,SAAU3S,GAC5B,IAAI+Q,EAAS,KAAO/Q,EAAM4S,KACrB5Q,KAAM+O,IACT/O,KAAM+O,GAAU/Q,EAEpB,EAEAiR,EAAM6E,QAAU,WACd9T,KAAKqT,KAAOS,EAAS9T,KAAK7C,QAC5B,EAMA8R,EAAMxK,IAAM,SAAUhK,GACpB,IAAIkuB,EAAY3oB,KAAK7C,QAAQ1C,MAE7B,IAAM,IAAImF,KAAQnF,EAGhBkuB,EADoBP,EAAkBxoB,IAAUA,GACnBnF,EAAOmF,EAExC,EAGAqP,EAAM2Z,YAAc,WAClB,IAAInuB,EAAQoF,iBAAkBG,KAAK7C,SAC/B0rB,EAAe7oB,KAAK8W,OAAOE,WAAW,cACtC8R,EAAc9oB,KAAK8W,OAAOE,WAAW,aACrC+R,EAAStuB,EAAOouB,EAAe,OAAS,SACxCG,EAASvuB,EAAOquB,EAAc,MAAQ,UACtCviB,EAAIsG,WAAYkc,GAChBhM,EAAIlQ,WAAYmc,GAEhBC,EAAajpB,KAAK8W,OAAOzD,MACA,GAAxB0V,EAAOtpB,QAAQ,OAClB8G,EAAMA,EAAI,IAAQ0iB,EAAW/sB,QAEF,GAAxB8sB,EAAOvpB,QAAQ,OAClBsd,EAAMA,EAAI,IAAQkM,EAAWzoB,QAG/B+F,EAAIjC,MAAOiC,GAAM,EAAIA,EACrBwW,EAAIzY,MAAOyY,GAAM,EAAIA,EAErBxW,GAAKsiB,EAAeI,EAAW7U,YAAc6U,EAAW5U,aACxD0I,GAAK+L,EAAcG,EAAW1U,WAAa0U,EAAWzU,cAEtDxU,KAAKgE,SAASuC,EAAIA,EAClBvG,KAAKgE,SAAS+Y,EAAIA,CACpB,EAGA9N,EAAMia,eAAiB,WACrB,IAAID,EAAajpB,KAAK8W,OAAOzD,KACzB5Y,EAAQ,CAAC,EACTouB,EAAe7oB,KAAK8W,OAAOE,WAAW,cACtC8R,EAAc9oB,KAAK8W,OAAOE,WAAW,aAGrCmS,EAAWN,EAAe,cAAgB,eAC1CO,EAAYP,EAAe,OAAS,QACpCQ,EAAiBR,EAAe,QAAU,OAE1CtiB,EAAIvG,KAAKgE,SAASuC,EAAI0iB,EAAYE,GAEtC1uB,EAAO2uB,GAAcppB,KAAKspB,UAAW/iB,GAErC9L,EAAO4uB,GAAmB,GAG1B,IAAIE,EAAWT,EAAc,aAAe,gBACxCU,EAAYV,EAAc,MAAQ,SAClCW,EAAiBX,EAAc,SAAW,MAE1C/L,EAAI/c,KAAKgE,SAAS+Y,EAAIkM,EAAYM,GAEtC9uB,EAAO+uB,GAAcxpB,KAAK0pB,UAAW3M,GAErCtiB,EAAOgvB,GAAmB,GAE1BzpB,KAAKyE,IAAKhK,GACVuF,KAAK0P,UAAW,SAAU,CAAE1P,MAC9B,EAEAiP,EAAMqa,UAAY,SAAU/iB,GAC1B,IAAIojB,EAAe3pB,KAAK8W,OAAOE,WAAW,cAC1C,OAAOhX,KAAK8W,OAAOpY,QAAQkrB,kBAAoBD,EACzCpjB,EAAIvG,KAAK8W,OAAOzD,KAAKnX,MAAU,IAAQ,IAAMqK,EAAI,IACzD,EAEA0I,EAAMya,UAAY,SAAU3M,GAC1B,IAAI4M,EAAe3pB,KAAK8W,OAAOE,WAAW,cAC1C,OAAOhX,KAAK8W,OAAOpY,QAAQkrB,iBAAmBD,EACxC5M,EAAI/c,KAAK8W,OAAOzD,KAAK7S,OAAW,IAAQ,IAAMuc,EAAI,IAC1D,EAEA9N,EAAM4a,cAAgB,SAAUtjB,EAAGwW,GACjC/c,KAAK4oB,cAEL,IAAIkB,EAAO9pB,KAAKgE,SAASuC,EACrBwjB,EAAO/pB,KAAKgE,SAAS+Y,EAErBiN,EAAazjB,GAAKvG,KAAKgE,SAASuC,GAAKwW,GAAK/c,KAAKgE,SAAS+Y,EAM5D,GAHA/c,KAAKiqB,YAAa1jB,EAAGwW,IAGhBiN,GAAehqB,KAAKkqB,gBAAzB,CAKA,IAAIC,EAAS5jB,EAAIujB,EACbM,EAASrN,EAAIgN,EACbM,EAAkB,CAAC,EACvBA,EAAgB1hB,UAAY3I,KAAKsqB,aAAcH,EAAQC,GAEvDpqB,KAAKgoB,WAAW,CACduC,GAAIF,EACJG,gBAAiB,CACf7hB,UAAW3I,KAAKkpB,gBAElBuB,YAAY,GAZd,MAFEzqB,KAAKkpB,gBAgBT,EAEAja,EAAMqb,aAAe,SAAU/jB,EAAGwW,GAMhC,MAAO,gBAFPxW,EAFmBvG,KAAK8W,OAAOE,WAAW,cAEvBzQ,GAAKA,GAEI,QAD5BwW,EAFkB/c,KAAK8W,OAAOE,WAAW,aAEvB+F,GAAKA,GACkB,QAC3C,EAGA9N,EAAMyb,KAAO,SAAUnkB,EAAGwW,GACxB/c,KAAKiqB,YAAa1jB,EAAGwW,GACrB/c,KAAKkpB,gBACP,EAEAja,EAAM0b,OAAS1b,EAAM4a,cAErB5a,EAAMgb,YAAc,SAAU1jB,EAAGwW,GAC/B/c,KAAKgE,SAASuC,EAAIsG,WAAYtG,GAC9BvG,KAAKgE,SAAS+Y,EAAIlQ,WAAYkQ,EAChC,EAUA9N,EAAM2b,eAAiB,SAAUjb,GAK/B,IAAM,IAAI/P,KAJVI,KAAKyE,IAAKkL,EAAK4a,IACV5a,EAAK8a,YACRzqB,KAAK6qB,cAAelb,EAAK4a,IAET5a,EAAK6a,gBACrB7a,EAAK6a,gBAAiB5qB,GAAOgC,KAAM5B,KAEvC,EAUAiP,EAAM+Y,WAAa,SAAUrY,GAE3B,GAAM9C,WAAY7M,KAAK8W,OAAOpY,QAAQid,oBAAtC,CAKA,IAAImP,EAAc9qB,KAAKuoB,QAEvB,IAAM,IAAI3oB,KAAQ+P,EAAK6a,gBACrBM,EAAYpC,MAAO9oB,GAAS+P,EAAK6a,gBAAiB5qB,GAGpD,IAAMA,KAAQ+P,EAAK4a,GACjBO,EAAYtC,cAAe5oB,IAAS,EAE/B+P,EAAK8a,aACRK,EAAYrC,MAAO7oB,IAAS,GAK3B+P,EAAK+R,OACR1hB,KAAKyE,IAAKkL,EAAK+R,MAEP1hB,KAAK7C,QAAQ6W,cAKvBhU,KAAK+qB,iBAAkBpb,EAAK4a,IAE5BvqB,KAAKyE,IAAKkL,EAAK4a,IAEfvqB,KAAKkqB,iBAAkB,CA7BvB,MAFElqB,KAAK4qB,eAAgBjb,EAiCzB,EAUA,IAAIqb,EAAkB,WAAa1C,EAAaL,GAEhDhZ,EAAM8b,iBAAmB,WAGvB,IAAK/qB,KAAKkqB,gBAAV,CAcA,IAAIltB,EAAWgD,KAAK8W,OAAOpY,QAAQid,mBACnC3e,EAA8B,iBAAZA,EAAuBA,EAAW,KAAOA,EAE3DgD,KAAKyE,IAAI,CACPsjB,mBAAoBiD,EACpBrP,mBAAoB3e,EACpBqrB,gBAAiBroB,KAAKirB,cAAgB,IAGxCjrB,KAAK7C,QAAQ/E,iBAAkB8vB,EAAoBloB,MAAM,EArBzD,CAsBF,EAIAiP,EAAMic,sBAAwB,SAAUltB,GACtCgC,KAAKmrB,gBAAiBntB,EACxB,EAEAiR,EAAMmc,iBAAmB,SAAUptB,GACjCgC,KAAKmrB,gBAAiBntB,EACxB,EAGA,IAAIqtB,EAAyB,CAC3B,oBAAqB,aAGvBpc,EAAMkc,gBAAkB,SAAUntB,GAEhC,GAAKA,EAAMsE,SAAWtC,KAAK7C,QAA3B,CAGA,IAAI2tB,EAAc9qB,KAAKuoB,QAEnB+C,EAAeD,EAAwBrtB,EAAMstB,eAAkBttB,EAAMstB,oBAGlER,EAAYtC,cAAe8C,GAE7BzD,EAAYiD,EAAYtC,gBAE3BxoB,KAAKurB,oBAGFD,KAAgBR,EAAYrC,QAE/BzoB,KAAK7C,QAAQ1C,MAAOuD,EAAMstB,cAAiB,UACpCR,EAAYrC,MAAO6C,IAGvBA,KAAgBR,EAAYpC,QACToC,EAAYpC,MAAO4C,GACzB1pB,KAAM5B,aACf8qB,EAAYpC,MAAO4C,IAG5BtrB,KAAK0P,UAAW,gBAAiB,CAAE1P,MAzBnC,CA0BF,EAEAiP,EAAMsc,kBAAoB,WACxBvrB,KAAKwrB,yBACLxrB,KAAK7C,QAAQslB,oBAAqByF,EAAoBloB,MAAM,GAC5DA,KAAKkqB,iBAAkB,CACzB,EAMAjb,EAAM4b,cAAgB,SAAUpwB,GAE9B,IAAIgxB,EAAa,CAAC,EAClB,IAAM,IAAI7rB,KAAQnF,EAChBgxB,EAAY7rB,GAAS,GAEvBI,KAAKyE,IAAKgnB,EACZ,EAEA,IAAIC,EAAuB,CACzB3D,mBAAoB,GACpBpM,mBAAoB,GACpB0M,gBAAiB,IA6HnB,OA1HApZ,EAAMuc,uBAAyB,WAE7BxrB,KAAKyE,IAAKinB,EACZ,EAIAzc,EAAM0c,QAAU,SAAUC,GACxBA,EAAQtnB,MAAOsnB,GAAU,EAAIA,EAC7B5rB,KAAKirB,aAAeW,EAAQ,IAC9B,EAKA3c,EAAM4c,WAAa,WACjB7rB,KAAK7C,QAAQ4E,WAAWpG,YAAaqE,KAAK7C,SAE1C6C,KAAKyE,IAAI,CAAErC,QAAS,KACpBpC,KAAK0P,UAAW,SAAU,CAAE1P,MAC9B,EAEAiP,EAAMlT,OAAS,WAEPgsB,GAAuBlb,WAAY7M,KAAK8W,OAAOpY,QAAQid,qBAM7D3b,KAAKuP,KAAM,iBAAiB,WAC1BvP,KAAK6rB,YACP,IACA7rB,KAAKmY,QARHnY,KAAK6rB,YAST,EAEA5c,EAAMgJ,OAAS,kBACNjY,KAAKiZ,SAEZjZ,KAAKyE,IAAI,CAAErC,QAAS,KAEpB,IAAI1D,EAAUsB,KAAK8W,OAAOpY,QAEtB8rB,EAAkB,CAAC,EAEvBA,EAD4BxqB,KAAK8rB,mCAAmC,iBACzB9rB,KAAK+rB,sBAEhD/rB,KAAKgoB,WAAW,CACdtG,KAAMhjB,EAAQstB,YACdzB,GAAI7rB,EAAQutB,aACZxB,YAAY,EACZD,gBAAiBA,GAErB,EAEAvb,EAAM8c,sBAAwB,WAGtB/rB,KAAKiZ,UACTjZ,KAAK0P,UAAU,SAEnB,EAOAT,EAAM6c,mCAAqC,SAAUI,GACnD,IAAIC,EAAcnsB,KAAK8W,OAAOpY,QAASwtB,GAEvC,GAAKC,EAAYC,QACf,MAAO,UAGT,IAAM,IAAIxsB,KAAQusB,EAChB,OAAOvsB,CAEX,EAEAqP,EAAMkJ,KAAO,WAEXnY,KAAKiZ,UAAW,EAEhBjZ,KAAKyE,IAAI,CAAErC,QAAS,KAEpB,IAAI1D,EAAUsB,KAAK8W,OAAOpY,QAEtB8rB,EAAkB,CAAC,EAEvBA,EAD4BxqB,KAAK8rB,mCAAmC,gBACzB9rB,KAAKqsB,oBAEhDrsB,KAAKgoB,WAAW,CACdtG,KAAMhjB,EAAQutB,aACd1B,GAAI7rB,EAAQstB,YAEZvB,YAAY,EACZD,gBAAiBA,GAErB,EAEAvb,EAAMod,oBAAsB,WAGrBrsB,KAAKiZ,WACRjZ,KAAKyE,IAAI,CAAErC,QAAS,SACpBpC,KAAK0P,UAAU,QAEnB,EAEAT,EAAMnF,QAAU,WACd9J,KAAKyE,IAAI,CACPT,SAAU,GACVwB,KAAM,GACN2e,MAAO,GACP5e,IAAK,GACLif,OAAQ,GACRwD,WAAY,GACZrf,UAAW,IAEf,EAEO6M,CAEP,GA5hBa,+CCbb,SAME,SAAU/c,EAAQ+V,GAClB,aAKE,EAAQ,CACJ,QACA,QACA,QACA,QACD,WACSQ,EAAW8E,EAAS/D,EAAOyF,GACnC,OAuBG,SAAkB/c,EAAQuW,EAAW8E,EAAS/D,EAAOyF,GAKhE,IAAI1D,EAAUrZ,EAAOqZ,QACjBU,EAAS/Z,EAAO+Z,OAChBO,EAAO,WAAY,EAKnBuZ,EAAO,EAEPC,EAAY,CAAC,EAQjB,SAAShX,EAAUpY,EAASuB,GAC1B,IAAI8tB,EAAezc,EAAMW,gBAAiBvT,GAC1C,GAAMqvB,EAAN,CAOAxsB,KAAK7C,QAAUqvB,EAEVha,IACHxS,KAAK2D,SAAW6O,EAAQxS,KAAK7C,UAI/B6C,KAAKtB,QAAUqR,EAAMrM,OAAQ,CAAC,EAAG1D,KAAK6c,YAAY4P,UAClDzsB,KAAK7G,OAAQuF,GAGb,IAAIkI,IAAO0lB,EACXtsB,KAAK7C,QAAQuvB,aAAe9lB,EAC5B2lB,EAAW3lB,GAAO5G,KAGlBA,KAAKgW,UAEchW,KAAKgX,WAAW,eAEjChX,KAAK8W,QArBP,MALOhF,GACHA,EAAQW,MAAO,mBAAqBzS,KAAK6c,YAAY5K,UACnD,MAASua,GAAgBrvB,GA0BjC,CAGAoY,EAAStD,UAAY,WACrBsD,EAASC,KAAOA,EAGhBD,EAASkX,SAAW,CAClBE,eAAgB,CACd3oB,SAAU,YAEZ4oB,YAAY,EACZC,YAAY,EACZC,WAAW,EACXC,QAAQ,EACRC,iBAAiB,EAEjBrR,mBAAoB,OACpBqQ,YAAa,CACXI,QAAS,EACTzjB,UAAW,gBAEbsjB,aAAc,CACZG,QAAS,EACTzjB,UAAW,aAIf,IAAIsG,EAAQsG,EAAS5T,UAowBrB,SAASsrB,EAAUC,GACjB,SAASC,IACPD,EAAOrd,MAAO7P,KAAMI,UACtB,CAKA,OAHA+sB,EAASxrB,UAAYpK,OAAOqe,OAAQsX,EAAOvrB,WAC3CwrB,EAASxrB,UAAUkb,YAAcsQ,EAE1BA,CACT,CA3wBApd,EAAMrM,OAAQuL,EAAOD,EAAUrN,WAM/BsN,EAAM9V,OAAS,SAAUqe,GACvBzH,EAAMrM,OAAQ1D,KAAKtB,QAAS8Y,EAC9B,EAKAvI,EAAM+H,WAAa,SAAU7d,GAC3B,IAAIi0B,EAAYptB,KAAK6c,YAAY6F,cAAevpB,GAChD,OAAOi0B,QAA2Ct2B,IAA9BkJ,KAAKtB,QAAS0uB,GAChCptB,KAAKtB,QAAS0uB,GAAcptB,KAAKtB,QAASvF,EAC9C,EAEAoc,EAASmN,cAAgB,CAEvBkK,WAAY,eACZS,WAAY,eACZC,cAAe,kBACfT,WAAY,eACZC,UAAW,cACXC,OAAQ,gBACRC,gBAAiB,uBAGnB/d,EAAM+G,QAAU,WAEdhW,KAAKyW,cAELzW,KAAKutB,OAAS,GACdvtB,KAAK8a,MAAO9a,KAAKtB,QAAQoc,OAEzB/K,EAAMrM,OAAQ1D,KAAK7C,QAAQ1C,MAAOuF,KAAKtB,QAAQiuB,gBAG3B3sB,KAAKgX,WAAW,WAElChX,KAAKwtB,YAET,EAGAve,EAAMwH,YAAc,WAElBzW,KAAKsW,MAAQtW,KAAK0W,SAAU1W,KAAK7C,QAAQqE,SAC3C,EAQAyN,EAAMyH,SAAW,SAAU5F,GAOzB,IALA,IAAI2c,EAAYztB,KAAK0tB,wBAAyB5c,GAC1C0E,EAAOxV,KAAK6c,YAAYrH,KAGxBc,EAAQ,GACFje,EAAE,EAAGA,EAAIo1B,EAAUhsB,OAAQpJ,IAAM,CACzC,IACIygB,EAAO,IAAItD,EADJiY,EAAUp1B,GACM2H,MAC3BsW,EAAMnS,KAAM2U,EACd,CAEA,OAAOxC,CACT,EAOArH,EAAMye,wBAA0B,SAAU5c,GACxC,OAAOf,EAAMc,mBAAoBC,EAAO9Q,KAAKtB,QAAQivB,aACvD,EAMA1e,EAAM2e,gBAAkB,WACtB,OAAO5tB,KAAKsW,MAAMwF,KAAK,SAAUhD,GAC/B,OAAOA,EAAK3b,OACd,GACF,EAOA8R,EAAM6H,OAAS,WACb9W,KAAKqX,eACLrX,KAAKsX,gBAGL,IAAIgW,EAAgBttB,KAAKgX,WAAW,iBAChCG,OAA8BrgB,IAAlBw2B,EACdA,GAAiBttB,KAAK+W,gBACxB/W,KAAKuX,YAAavX,KAAKsW,MAAOa,GAG9BnX,KAAK+W,iBAAkB,CACzB,EAGA9H,EAAM+I,MAAQ/I,EAAM6H,OAKpB7H,EAAMoI,aAAe,WACnBrX,KAAK8T,SACP,EAGA7E,EAAM6E,QAAU,WACd9T,KAAKqT,KAAOS,EAAS9T,KAAK7C,QAC5B,EAYA8R,EAAMkN,gBAAkB,SAAUjI,EAAab,GAC7C,IACI1T,EADAxG,EAAS6G,KAAKtB,QAASwV,GAErB/a,GAKkB,iBAAVA,EACVwG,EAAOK,KAAK7C,QAAQjE,cAAeC,GACzBA,aAAkB6X,cAC5BrR,EAAOxG,GAGT6G,KAAMkU,GAAgBvU,EAAOmU,EAASnU,GAAQ0T,GAASla,GATvD6G,KAAMkU,GAAgB,CAW1B,EAMAjF,EAAMsI,YAAc,SAAUjB,EAAOa,GACnCb,EAAQtW,KAAK6tB,mBAAoBvX,GAEjCtW,KAAK8tB,aAAcxX,EAAOa,GAE1BnX,KAAK+tB,aACP,EAQA9e,EAAM4e,mBAAqB,SAAUvX,GACnC,OAAOA,EAAMhJ,QAAQ,SAAUwL,GAC7B,OAAQA,EAAKC,SACf,GACF,EAOA9J,EAAM6e,aAAe,SAAUxX,EAAOa,GAGpC,GAFAnX,KAAKguB,qBAAsB,SAAU1X,GAE/BA,GAAUA,EAAM7U,OAAtB,CAKA,IAAIsf,EAAQ,GAEZzK,EAAM9f,SAAS,SAAUsiB,GAEvB,IAAI9U,EAAWhE,KAAK4a,uBAAwB9B,GAE5C9U,EAAS8U,KAAOA,EAChB9U,EAASmT,UAAYA,GAAa2B,EAAKT,gBACvC0I,EAAM5c,KAAMH,EACd,GAAGhE,MAEHA,KAAKiuB,oBAAqBlN,EAb1B,CAcF,EAOA9R,EAAM2L,uBAAyB,WAC7B,MAAO,CACLrU,EAAG,EACHwW,EAAG,EAEP,EAQA9N,EAAMgf,oBAAsB,SAAUlN,GACpC/gB,KAAKkuB,gBACLnN,EAAMvqB,SAAS,SAAU6Z,EAAKhY,GAC5B2H,KAAKmuB,cAAe9d,EAAIyI,KAAMzI,EAAI9J,EAAG8J,EAAI0M,EAAG1M,EAAI8G,UAAW9e,EAC7D,GAAG2H,KACL,EAGAiP,EAAMif,cAAgB,WACpB,IAAIvC,EAAU3rB,KAAKtB,QAAQitB,QAC3B,GAAKA,QAKL,OADA3rB,KAAK2rB,QAAUyC,EAAiBzC,GACzB3rB,KAAK2rB,QAJV3rB,KAAK2rB,QAAU,CAKnB,EASA1c,EAAMkf,cAAgB,SAAUrV,EAAMvS,EAAGwW,EAAG5F,EAAW9e,GAChD8e,EAEH2B,EAAK4R,KAAMnkB,EAAGwW,IAEdjE,EAAK6S,QAAStzB,EAAI2H,KAAK2rB,SACvB7S,EAAK6R,OAAQpkB,EAAGwW,GAEpB,EAMA9N,EAAM8e,YAAc,WAClB/tB,KAAKgtB,iBACP,EAEA/d,EAAM+d,gBAAkB,WAEtB,GAD0BhtB,KAAKgX,WAAW,mBAC1C,CAGA,IAAI3D,EAAOrT,KAAK+a,oBACX1H,IACHrT,KAAKquB,qBAAsBhb,EAAKnX,OAAO,GACvC8D,KAAKquB,qBAAsBhb,EAAK7S,QAAQ,GAJ1C,CAMF,EAQAyO,EAAM8L,kBAAoBhI,EAM1B9D,EAAMof,qBAAuB,SAAUC,EAASC,GAC9C,QAAiBz3B,IAAZw3B,EAAL,CAIA,IAAIE,EAAWxuB,KAAKqT,KAEfmb,EAASva,cACZqa,GAAWC,EAAUC,EAASpa,YAAcoa,EAASna,aACnDma,EAASzZ,gBAAkByZ,EAASxZ,iBACpCwZ,EAASha,cAAgBga,EAASja,WAClCia,EAAStZ,eAAiBsZ,EAASrZ,mBAGvCmZ,EAAU3wB,KAAKkD,IAAKytB,EAAS,GAC7BtuB,KAAK7C,QAAQ1C,MAAO8zB,EAAU,QAAU,UAAaD,EAAU,IAZ/D,CAaF,EAOArf,EAAM+e,qBAAuB,SAAU9e,EAAWoH,GAChD,IAAI9E,EAAQxR,KACZ,SAASyuB,IACPjd,EAAMkH,cAAexJ,EAAY,WAAY,KAAM,CAAEoH,GACvD,CAEA,IAAIoY,EAAQpY,EAAM7U,OAClB,GAAM6U,GAAUoY,EAAhB,CAKA,IAAIC,EAAY,EAShBrY,EAAM9f,SAAS,SAAUsiB,GACvBA,EAAKvJ,KAAML,EAAW0f,EACxB,GAbA,MAFEH,IAKF,SAASG,MACPD,GACkBD,GAChBD,GAEJ,CAMF,EAQAxf,EAAMyJ,cAAgB,SAAU9H,EAAM5S,EAAO2R,GAE3C,IAAIkf,EAAW7wB,EAAQ,CAAEA,GAAQsU,OAAQ3C,GAASA,EAGlD,GAFA3P,KAAK0P,UAAWkB,EAAMie,GAEjBrc,EAGH,GADAxS,KAAK2D,SAAW3D,KAAK2D,UAAY6O,EAAQxS,KAAK7C,SACzCa,EAAQ,CAEX,IAAI8wB,EAAStc,EAAOuc,MAAO/wB,GAC3B8wB,EAAOle,KAAOA,EACd5Q,KAAK2D,SAASyC,QAAS0oB,EAAQnf,EACjC,MAEE3P,KAAK2D,SAASyC,QAASwK,EAAMjB,EAGnC,EAUAV,EAAM+f,OAAS,SAAUrvB,GACvB,IAAImZ,EAAO9Y,KAAKivB,QAAStvB,GACpBmZ,IACHA,EAAKC,WAAY,EAErB,EAMA9J,EAAMigB,SAAW,SAAUvvB,GACzB,IAAImZ,EAAO9Y,KAAKivB,QAAStvB,GACpBmZ,UACIA,EAAKC,SAEhB,EAMA9J,EAAM6L,MAAQ,SAAUhK,IACtBA,EAAQ9Q,KAAKmvB,MAAOre,MAKpB9Q,KAAKutB,OAASvtB,KAAKutB,OAAOjb,OAAQxB,GAElCA,EAAMta,QAASwJ,KAAKgvB,OAAQhvB,MAC9B,EAMAiP,EAAMmgB,QAAU,SAAUte,IACxBA,EAAQ9Q,KAAKmvB,MAAOre,KAKpBA,EAAMta,SAAS,SAAUmJ,GAEvBoQ,EAAMQ,WAAYvQ,KAAKutB,OAAQ5tB,GAC/BK,KAAKkvB,SAAUvvB,EACjB,GAAGK,KACL,EAOAiP,EAAMkgB,MAAQ,SAAUre,GACtB,GAAMA,EAQN,MAJqB,iBAATA,IACVA,EAAQ9Q,KAAK7C,QAAQ5E,iBAAkBuY,IAEzCA,EAAQf,EAAMK,UAAWU,EAE3B,EAEA7B,EAAMqI,cAAgB,WACdtX,KAAKutB,QAAWvtB,KAAKutB,OAAO9rB,SAIlCzB,KAAKqvB,mBAELrvB,KAAKutB,OAAO/2B,QAASwJ,KAAK6a,aAAc7a,MAC1C,EAGAiP,EAAMogB,iBAAmB,WAEvB,IAAIC,EAAetvB,KAAK7C,QAAQoyB,wBAC5Blc,EAAOrT,KAAKqT,KAChBrT,KAAKwvB,cAAgB,CACnBhqB,KAAM8pB,EAAa9pB,KAAO6N,EAAKe,YAAcf,EAAK0B,gBAClDxP,IAAK+pB,EAAa/pB,IAAM8N,EAAKkB,WAAalB,EAAK6B,eAC/CiP,MAAOmL,EAAanL,OAAU9Q,EAAKgB,aAAehB,EAAK2B,kBACvDwP,OAAQ8K,EAAa9K,QAAWnR,EAAKmB,cAAgBnB,EAAK8B,mBAE9D,EAKAlG,EAAM4L,aAAe9H,EAOrB9D,EAAMsO,kBAAoB,SAAU5d,GAClC,IAAI2vB,EAAe3vB,EAAK4vB,wBACpBE,EAAWzvB,KAAKwvB,cAChBnc,EAAOS,EAASnU,GAOpB,MANa,CACX6F,KAAM8pB,EAAa9pB,KAAOiqB,EAASjqB,KAAO6N,EAAKqB,WAC/CnP,IAAK+pB,EAAa/pB,IAAMkqB,EAASlqB,IAAM8N,EAAKwB,UAC5CsP,MAAOsL,EAAStL,MAAQmL,EAAanL,MAAQ9Q,EAAKsB,YAClD6P,OAAQiL,EAASjL,OAAS8K,EAAa9K,OAASnR,EAAKyB,aAGzD,EAMA7F,EAAM0B,YAAcZ,EAAMY,YAK1B1B,EAAMue,WAAa,WACjB/0B,EAAOL,iBAAkB,SAAU4H,MACnCA,KAAK0vB,eAAgB,CACvB,EAKAzgB,EAAM0gB,aAAe,WACnBl3B,EAAOgqB,oBAAqB,SAAUziB,MACtCA,KAAK0vB,eAAgB,CACvB,EAEAzgB,EAAM2gB,SAAW,WACf5vB,KAAK+sB,QACP,EAEAhd,EAAMmB,eAAgBqE,EAAU,WAAY,KAE5CtG,EAAM8d,OAAS,WAGP/sB,KAAK0vB,eAAkB1vB,KAAKgb,qBAIlChb,KAAK8W,QACP,EAMA7H,EAAM+L,kBAAoB,WACxB,IAAI3H,EAAOS,EAAS9T,KAAK7C,SAIzB,OADe6C,KAAKqT,MAAQA,GACTA,EAAKC,aAAetT,KAAKqT,KAAKC,UACnD,EASArE,EAAMiM,SAAW,SAAUpK,GACzB,IAAIwF,EAAQtW,KAAK0W,SAAU5F,GAK3B,OAHKwF,EAAM7U,SACTzB,KAAKsW,MAAQtW,KAAKsW,MAAMhE,OAAQgE,IAE3BA,CACT,EAMArH,EAAMgM,SAAW,SAAUnK,GACzB,IAAIwF,EAAQtW,KAAKkb,SAAUpK,GACrBwF,EAAM7U,SAIZzB,KAAKuX,YAAajB,GAAO,GACzBtW,KAAKiY,OAAQ3B,GACf,EAMArH,EAAMmM,UAAY,SAAUtK,GAC1B,IAAIwF,EAAQtW,KAAK0W,SAAU5F,GAC3B,GAAMwF,EAAM7U,OAAZ,CAIA,IAAIouB,EAAgB7vB,KAAKsW,MAAMlV,MAAM,GACrCpB,KAAKsW,MAAQA,EAAMhE,OAAQud,GAE3B7vB,KAAKqX,eACLrX,KAAKsX,gBAELtX,KAAKuX,YAAajB,GAAO,GACzBtW,KAAKiY,OAAQ3B,GAEbtW,KAAKuX,YAAasY,EAXlB,CAYF,EAMA5gB,EAAMgJ,OAAS,SAAU3B,GAEvB,GADAtW,KAAKguB,qBAAsB,SAAU1X,GAC/BA,GAAUA,EAAM7U,OAAtB,CAGA,IAAIkqB,EAAU3rB,KAAKkuB,gBACnB5X,EAAM9f,SAAS,SAAUsiB,EAAMzgB,GAC7BygB,EAAK6S,QAAStzB,EAAIszB,GAClB7S,EAAKb,QACP,GALA,CAMF,EAMAhJ,EAAMkJ,KAAO,SAAU7B,GAErB,GADAtW,KAAKguB,qBAAsB,OAAQ1X,GAC7BA,GAAUA,EAAM7U,OAAtB,CAGA,IAAIkqB,EAAU3rB,KAAKkuB,gBACnB5X,EAAM9f,SAAS,SAAUsiB,EAAMzgB,GAC7BygB,EAAK6S,QAAStzB,EAAIszB,GAClB7S,EAAKX,MACP,GALA,CAMF,EAMAlJ,EAAM6gB,mBAAqB,SAAUhf,GACnC,IAAIwF,EAAQtW,KAAKmZ,SAAUrI,GAC3B9Q,KAAKiY,OAAQ3B,EACf,EAMArH,EAAM8gB,iBAAmB,SAAUjf,GACjC,IAAIwF,EAAQtW,KAAKmZ,SAAUrI,GAC3B9Q,KAAKmY,KAAM7B,EACb,EAQArH,EAAMggB,QAAU,SAAUtvB,GAExB,IAAM,IAAItH,EAAE,EAAGA,EAAI2H,KAAKsW,MAAM7U,OAAQpJ,IAAM,CAC1C,IAAIygB,EAAO9Y,KAAKsW,MAAMje,GACtB,GAAKygB,EAAK3b,SAAWwC,EAEnB,OAAOmZ,CAEX,CACF,EAOA7J,EAAMkK,SAAW,SAAUrI,GACzBA,EAAQf,EAAMK,UAAWU,GACzB,IAAIwF,EAAQ,GAQZ,OAPAxF,EAAMta,SAAS,SAAUmJ,GACvB,IAAImZ,EAAO9Y,KAAKivB,QAAStvB,GACpBmZ,GACHxC,EAAMnS,KAAM2U,EAEhB,GAAG9Y,MAEIsW,CACT,EAMArH,EAAMlT,OAAS,SAAU+U,GACvB,IAAI0K,EAAcxb,KAAKmZ,SAAUrI,GAEjC9Q,KAAKguB,qBAAsB,SAAUxS,GAG/BA,GAAgBA,EAAY/Z,QAIlC+Z,EAAYhlB,SAAS,SAAUsiB,GAC7BA,EAAK/c,SAELgU,EAAMQ,WAAYvQ,KAAKsW,MAAOwC,EAChC,GAAG9Y,KACL,EAKAiP,EAAMnF,QAAU,WAEd,IAAIrP,EAAQuF,KAAK7C,QAAQ1C,MACzBA,EAAM+F,OAAS,GACf/F,EAAMuJ,SAAW,GACjBvJ,EAAMyB,MAAQ,GAEd8D,KAAKsW,MAAM9f,SAAS,SAAUsiB,GAC5BA,EAAKhP,SACP,IAEA9J,KAAK2vB,eAEL,IAAI/oB,EAAK5G,KAAK7C,QAAQuvB,oBACfH,EAAW3lB,UACX5G,KAAK7C,QAAQuvB,aAEfla,GACHA,EAAOwd,WAAYhwB,KAAK7C,QAAS6C,KAAK6c,YAAY5K,UAGtD,EASAsD,EAASlf,KAAO,SAAUsJ,GAExB,IAAIiH,GADJjH,EAAOoQ,EAAMW,gBAAiB/Q,KACbA,EAAK+sB,aACtB,OAAO9lB,GAAM2lB,EAAW3lB,EAC1B,EASA2O,EAASK,OAAS,SAAU3D,EAAWvT,GAErC,IAAIuxB,EAAShD,EAAU1X,GAwBvB,OAtBA0a,EAAOxD,SAAW1c,EAAMrM,OAAQ,CAAC,EAAG6R,EAASkX,UAC7C1c,EAAMrM,OAAQusB,EAAOxD,SAAU/tB,GAC/BuxB,EAAOvN,cAAgB3S,EAAMrM,OAAQ,CAAC,EAAG6R,EAASmN,eAElDuN,EAAOhe,UAAYA,EAEnBge,EAAO55B,KAAOkf,EAASlf,KAGvB45B,EAAOza,KAAOyX,EAAUzX,GAIxBzF,EAAMgC,SAAUke,EAAQhe,GAKnBO,GAAUA,EAAO0d,SACpB1d,EAAO0d,QAASje,EAAWge,GAGtBA,CACT,EAgBA,IAAIE,EAAU,CACZC,GAAI,EACJ/R,EAAG,KAKL,SAAS+P,EAAiBiC,GACxB,GAAoB,iBAARA,EACV,OAAOA,EAET,IAAIzhB,EAAUyhB,EAAKnsB,MAAO,qBACtB+L,EAAMrB,GAAWA,EAAQ,GACzB0hB,EAAO1hB,GAAWA,EAAQ,GAC9B,OAAMqB,EAAIxO,QAGVwO,EAAMpD,WAAYoD,KACPkgB,EAASG,IAAU,GAHrB,CAKX,CAOA,OAFA/a,EAASC,KAAOA,EAETD,CAEP,CAv5Be/G,CAAS/V,EAAQuW,EAAW8E,EAAS/D,EAAOyF,EACpD,sCAsBP,CApCA,CAoCG/c,0BCpCH,IAAiD+V,IASxC,WACT,OAAgB,SAAU+hB,GAEhB,IAAIC,EAAmB,CAAC,EAGxB,SAAS,EAAoBC,GAG5B,GAAGD,EAAiBC,GACnB,OAAOD,EAAiBC,GAAU7d,QAGnC,IAAID,EAAS6d,EAAiBC,GAAY,CACzC7d,QAAS,CAAC,EACVhM,GAAI6pB,EACJC,QAAQ,GAUT,OANAH,EAAQE,GAAU7uB,KAAK+Q,EAAOC,QAASD,EAAQA,EAAOC,QAAS,GAG/DD,EAAO+d,QAAS,EAGT/d,EAAOC,OACf,CAaA,OATA,EAAoBiN,EAAI0Q,EAGxB,EAAoB/3B,EAAIg4B,EAGxB,EAAoBzR,EAAI,GAGjB,EAAoB,EAC3B,CAxCM,CA0CN,CAEJ,SAAUpM,EAAQC,GAEvB,aAEAD,EAAOC,QAAU,WAOf,GAAwB,oBAAbza,UAA8C,oBAAXM,OAC5C,MAAO,CAELk4B,IAAK,WACH,MAAO,SACT,EAGAxzB,QAAS,WACP,OAAO,IACT,EAGAyzB,WAAY,WAAuB,EAGnCC,aAAc,WAAyB,EAGvCC,iBAAkB,WAA6B,EAG/CC,mBAAoB,WAA+B,GASvD,IAAIC,EAAU74B,SAASsE,gBAGnBw0B,EAAiB,KAGjBC,EAAe,UAGfC,EAAgBD,EAGhBE,EAAmBx3B,KAAKy3B,MAGxBC,GAAgB,EAGhBC,EAAa,CAAC,SAAU,QAAS,SAAU,YAG3CC,EAAe,GAIfC,EAAY,CAAC,GACjB,GACA,GACA,GACA,IAGIC,EAAc,GAGdC,EAAW,CACbC,QAAS,WACTC,MAAO,WACPC,UAAW,QACXC,UAAW,QACXC,cAAe,UACfC,cAAe,UACfC,YAAa,UACbC,YAAa,UACbC,WAAY,QACZC,SAAU,SAGNC,GAAc,EAGhBC,EAAW,CACbhsB,EAAG,KACHwW,EAAG,MAGCyV,EAAa,CACjB,EAAG,QACH,EAAG,QACH,EAAG,SAGCC,GAAkB,EAExB,IACE,IAAIjb,EAAOjgB,OAAO8uB,eAAe,CAAC,EAAG,UAAW,CAC9CF,IAAK,WACHsM,GAAkB,CACpB,IAGFh6B,OAAOL,iBAAiB,OAAQ,KAAMof,EAC3B,CAAX,MAAOje,GAAI,CAQb,IAWIm5B,EAAe,WAIjB,IAAIh0B,GAAU+zB,GAAkB,CAAE55B,SAAS,EAAM85B,SAAS,GAE1Dx6B,SAASC,iBAAiB,mBAAoBw6B,GAAY,GAGtDn6B,OAAOo6B,cACTp6B,OAAOL,iBAAiB,cAAe06B,GAAU,GACjDr6B,OAAOL,iBAAiB,cAAe26B,GAAW,IACzCt6B,OAAOu6B,gBAChBv6B,OAAOL,iBAAiB,gBAAiB06B,GAAU,GACnDr6B,OAAOL,iBAAiB,gBAAiB26B,GAAW,KAGpDt6B,OAAOL,iBAAiB,YAAa06B,GAAU,GAC/Cr6B,OAAOL,iBAAiB,YAAa26B,GAAW,GAG5C,iBAAkBt6B,SACpBA,OAAOL,iBAAiB,aAAc06B,EAAUp0B,GAChDjG,OAAOL,iBAAiB,WAAY06B,GAAU,KAKlDr6B,OAAOL,iBAAiB66B,IAAeF,EAAWr0B,GAGlDjG,OAAOL,iBAAiB,UAAW06B,GAAU,GAC7Cr6B,OAAOL,iBAAiB,QAAS06B,GAAU,GAG3Cr6B,OAAOL,iBAAiB,UAAW86B,GAAY,GAC/Cz6B,OAAOL,iBAAiB,WAAY+6B,GAAc,EACpD,EAIIP,EAAa,WAGf,GAFAtB,IAA+D,UAA7CN,EAAQnzB,aAAa,qBAAsF,UAAnD1F,SAASmD,KAAKuC,aAAa,qBAInG,IACMpF,OAAO26B,eAAenE,QAAQ,gBAChCiC,EAAez4B,OAAO26B,eAAenE,QAAQ,eAG3Cx2B,OAAO26B,eAAenE,QAAQ,iBAChCkC,EAAgB14B,OAAO26B,eAAenE,QAAQ,eAIlD,CAFE,MAAO11B,GAET,CAIF85B,EAAS,SACTA,EAAS,SACX,EAGIP,EAAW,SAAkB90B,GAC/B,IAAIs1B,EAAWt1B,EAAMu1B,MACjBhmB,EAAQokB,EAAS3zB,EAAM4S,MAEb,YAAVrD,IACFA,EAAQimB,EAAYx1B,IAGtB,IAAIy1B,GAAe/B,EAAYjwB,SAA2C,IAAjCgwB,EAAUhyB,QAAQ6zB,GAEvDI,EAAgBhC,EAAYjwB,SAA6C,IAAnCiwB,EAAYjyB,QAAQ6zB,GAE1DK,EAAyB,aAAVpmB,GAAwB+lB,IAAaG,GAAeC,IAA4B,UAAVnmB,GAA+B,UAAVA,EAc9G,GAXIqmB,EAAcrmB,KAChBomB,GAAe,GAGbA,GAAgBzC,IAAiB3jB,IAGnCsmB,EAAa,QAFb3C,EAAe3jB,GAGf8lB,EAAS,UAGPM,GAAgBxC,IAAkB5jB,EAAO,CAE3C,IAAIumB,EAAa37B,SAASmG,cACPw1B,GAAcA,EAAWtU,YAAwE,IAA3D+R,EAAW9xB,QAAQq0B,EAAWtU,SAASvb,gBAA+D,WAAtC6vB,EAAWtU,SAASvb,gBAA+B8vB,EAAaD,EAAY,WAKnMD,EAAa,SAFb1C,EAAgB5jB,GAGhB8lB,EAAS,UAEb,CACF,EAGIA,EAAW,SAAkBE,GAC/BvC,EAAQl2B,aAAa,YAAcy4B,EAAiB,UAAVA,EAAoBrC,EAAeC,GAE7E6C,EAAcT,EAChB,EAGIR,EAAY,SAAmB/0B,GACjC,IAAIuP,EAAQokB,EAAS3zB,EAAM4S,MAEb,YAAVrD,IACFA,EAAQimB,EAAYx1B,IAItBi2B,EAAgBj2B,KAGVs0B,IAAgBsB,EAAcrmB,IAAU+kB,GAA8B,UAAft0B,EAAM4S,MAAmC,eAAf5S,EAAM4S,MAAwC,mBAAf5S,EAAM4S,OAA8BugB,IAAkB5jB,IAG1KsmB,EAAa,SAFb1C,EAAgB5jB,GAGhB8lB,EAAS,UAEb,EAEIH,EAAa,SAAoBl1B,GAC9BA,EAAMsE,OAAOkd,UAOlByR,EAAiBjzB,EAAMsE,OAAOkd,SAASvb,cACvC+sB,EAAQl2B,aAAa,mBAAoBm2B,GAErCjzB,EAAMsE,OAAO1H,WAAaoD,EAAMsE,OAAO1H,UAAU6G,QACnDuvB,EAAQl2B,aAAa,mBAAoBkD,EAAMsE,OAAO1H,UAAUiT,WAAW1P,QAAQ,IAAK,OARxFg1B,GAUJ,EAEIA,EAAe,WACjBlC,EAAiB,KAEjBD,EAAQ7O,gBAAgB,oBACxB6O,EAAQ7O,gBAAgB,mBAC1B,EAEI0R,EAAe,SAAsBN,EAAOhmB,GAC9C,GAAI+jB,EACF,IACE74B,OAAO26B,eAAec,QAAQ,QAAUX,EAAOhmB,EAGjD,CAFE,MAAOhU,GAET,CAEJ,EAMIi6B,EAAc,SAAqBx1B,GACrC,MAAiC,iBAAtBA,EAAMw1B,YACRhB,EAAWx0B,EAAMw1B,aAGK,QAAtBx1B,EAAMw1B,YAAwB,QAAUx1B,EAAMw1B,WAEzD,EAGII,EAAgB,SAAuBrmB,GACzC,IAAI/P,EAAY5D,KAAKy3B,MAEjB8C,EAAyB,UAAV5mB,GAAsC,UAAjB2jB,GAA4B1zB,EAAY4zB,EAAmB,IAInG,OAFAA,EAAmB5zB,EAEZ22B,CACT,EAIIlB,EAAc,WAYhB,MARI,YAAa96B,SAASiD,cAAc,OAC1B,aAI0BtE,IAA1BqB,SAASi8B,aAA6B,aAAe,gBAIrE,EAGIJ,EAAgB,SAAuBpjB,GACzC,IAAK,IAAIvY,EAAI,EAAGkhB,EAAMiY,EAAa/vB,OAAQpJ,EAAIkhB,EAAKlhB,IAC9Cm5B,EAAan5B,GAAGuY,OAASA,GAC3B4gB,EAAan5B,GAAG8R,GAAGvI,UAAK9K,EAAoB,UAAT8Z,EAAmBsgB,EAAeC,EAG3E,EAWI8C,EAAkB,SAAyBj2B,GACzCu0B,EAAShsB,IAAMvI,EAAMq2B,SAAW9B,EAASxV,IAAM/e,EAAMs2B,SACvDhC,GAAc,EAEdC,EAAShsB,EAAIvI,EAAMq2B,QACnB9B,EAASxV,EAAI/e,EAAMs2B,SAEnBhC,GAAc,CAElB,EAGIyB,EAAe,SAAsBp0B,EAAM40B,GAC7C,IAAIC,EAAmB/7B,OAAOkW,QAAQhN,UAMtC,GAJK6yB,EAAiB5lB,UACpB4lB,EAAiB5lB,QAAU4lB,EAAiBC,mBAAqBD,EAAiBE,uBAG/EF,EAAiBG,QAWpB,OAAOh1B,EAAKg1B,QAAQJ,GAVpB,EAAG,CACD,GAAI50B,EAAKiP,QAAQ2lB,GACf,OAAO50B,EAGTA,EAAOA,EAAKhF,eAAiBgF,EAAKoC,UACpC,OAAkB,OAATpC,GAAmC,IAAlBA,EAAKoU,UAE/B,OAAO,IAIX,EAgBA,MARI,qBAAsBtb,QAAUiJ,MAAMC,UAAUlC,UAjRlDkyB,EAASsB,KAAiB,QAE1BP,KAuRK,CAKL/B,IAAK,SAAa9xB,GAChB,MAAe,WAARA,EAAmBsyB,EAAgBD,CAC5C,EAGA/zB,QAAS,WACP,OAAO8zB,CACT,EAGAL,WAAY,SAAoBgE,GAC9BnD,EAAYmD,CACd,EAGA/D,aAAc,SAAsB+D,GAClClD,EAAckD,CAChB,EAKA9D,iBAAkB,SAA0B3mB,EAAI0qB,GAC9CrD,EAAartB,KAAK,CAChBgG,GAAIA,EACJyG,KAAMikB,GAAa,SAEvB,EAEA9D,mBAAoB,SAA4B5mB,GAC9C,IAAInG,EA3FK,SAAgBE,GAC3B,IAAK,IAAI7L,EAAI,EAAGkhB,EAAMiY,EAAa/vB,OAAQpJ,EAAIkhB,EAAKlhB,IAClD,GAAIm5B,EAAan5B,GAAG8R,KAAOjG,EACzB,OAAO7L,CAGb,CAqFmBy8B,CAAO3qB,IAElBnG,GAAyB,IAAbA,IACdwtB,EAAaxnB,OAAOhG,EAAU,EAElC,EAEA+wB,aAAc,WACZt8B,OAAO26B,eAAepT,OACxB,EAEJ,CA/biB,EAicX,GAEP,EA3fErN,EAAOC,QAAUpE,2BCRnBmE,EAAOC,QAAUJ,SCCbwiB,EAA2B,CAAC,EAGhC,SAASC,EAAoBxE,GAE5B,IAAIyE,EAAeF,EAAyBvE,GAC5C,QAAqB35B,IAAjBo+B,EACH,OAAOA,EAAatiB,QAGrB,IAAID,EAASqiB,EAAyBvE,GAAY,CAGjD7d,QAAS,CAAC,GAOX,OAHAuiB,EAAoB1E,GAAU7uB,KAAK+Q,EAAOC,QAASD,EAAQA,EAAOC,QAASqiB,GAGpEtiB,EAAOC,OACf,CCrBAqiB,EAAoBpX,EAAKlL,IACxB,IAAIyiB,EAASziB,GAAUA,EAAO0iB,WAC7B,IAAO1iB,EAAiB,QACxB,IAAM,EAEP,OADAsiB,EAAoBt7B,EAAEy7B,EAAQ,CAAEplB,EAAGolB,IAC5BA,CAAM,ECLdH,EAAoBt7B,EAAI,CAACiZ,EAAS0iB,KACjC,IAAI,IAAI3nB,KAAO2nB,EACXL,EAAoBlX,EAAEuX,EAAY3nB,KAASsnB,EAAoBlX,EAAEnL,EAASjF,IAC5EpW,OAAO8uB,eAAezT,EAASjF,EAAK,CAAE4nB,YAAY,EAAMpP,IAAKmP,EAAW3nB,IAE1E,ECNDsnB,EAAoBlX,EAAI,CAAC1N,EAAKzQ,IAAUrI,OAAOoK,UAAUhL,eAAeiL,KAAKyO,EAAKzQ,6DCOlF,SAAS41B,IACP,MAAiC,QAA1B,IAAE,QAAQ1xB,KAAK,MACxB,CAUA,SAAS2xB,EAAYh0B,EAAS,EAAGwQ,GAC/B,IAAIhQ,EAAM,GACV,MAAMyzB,EAAQ,uCACRC,EAAcD,EAAMj0B,OAC1B,IAAK,IAAIpJ,EAAI,EAAGA,EAAIoJ,EAAQpJ,IAC1B4J,GAAOyzB,EAAM/3B,KAAKmD,MAAMnD,KAAK+d,SAAWia,IAE1C,OAAO1jB,EAAY,GAAGhQ,KAAOgQ,IAAchQ,CAC7C,CAcA,SAAS2zB,EAAcC,GACrB,IAOIC,EAPAC,EAAc,CAChB,WAAc,gBACd,iBAAoB,sBACpB,cAAiB,gBACjB,YAAe,kBAEbp2B,EAAOxH,SAASiD,cAAc,OAGlC,IAAK,IAAI4sB,KAAc+N,OACiB,IAA3Bp2B,EAAKlF,MAAMutB,KACpB8N,EAAMC,EAAY/N,IAGtB,OAAI8N,IAGFv3B,YAAW,WACTs3B,EAAMG,eAAe,gBAAiB,CAACH,GACzC,GAAG,GACI,gBAEX,CAcA,SAASI,EAAOJ,EAAOK,GACrB,MAAMC,EAAkC,aAAxBh+B,SAASuZ,WACnBmjB,GAAasB,EAAU,WAAa,QAAU,kBAC9Cl5B,EAAK,IAAM44B,EAAMG,eAAenB,GAWtC,OATIgB,IACEK,GAASL,EAAMpwB,IAAIovB,EAAWqB,GAE9BC,EACF53B,WAAWtB,GAEX,IAAExE,QAAQgN,IAAI,OAAQxI,IAGnB43B,CACT,CAoBA,SAASuB,EAAqBF,GAAS,kBAAEG,GAAoB,EAAK,eAAEC,GAAiB,GAAU,CAAC,GAC9F,OAAO,SAA2BC,KAAWC,GAC3C,MAAM/vB,EAAWyvB,EAAQzO,KAAKznB,KAAMu2B,KAAWC,GAG/C,GAA6B,OAAzBD,EAAOE,cACT,OAAOhwB,IAMTlI,YAAW,WACT,IAAK83B,GAAqBl+B,SAASu+B,WAAav+B,SAASu+B,WACvD,OAAOjwB,IAIJ6vB,GACH,IAAEn+B,UAAUsN,IAAI,cAAc,SAA6BkxB,GACpD,IAAEJ,EAAOK,eAAeC,IAAIF,EAASr0B,QAAQb,SAEhD80B,EAAOE,cAAgBE,EAASr0B,OAChCmE,IAEJ,GAGJ,GAAG,EACL,CACF,CC5HAhO,OAAOq+B,aAAer+B,OAAOq+B,WAAa,WAIxC,IAAIC,EAAct+B,OAAOs+B,YAAct+B,OAAOu+B,MAG9C,IAAKD,EAAY,CACf,IAEAE,EAFIx8B,EAAUtC,SAASiD,cAAc,SACrC87B,EAAc/+B,SAASiG,qBAAqB,UAAU,GAGtD3D,EAAMmW,KAAQ,WACdnW,EAAMmM,GAAQ,oBAETswB,EAGHA,EAAOn1B,WAAWo1B,aAAa18B,EAAOy8B,GAFtC/+B,SAASi/B,KAAK77B,YAAYd,GAM5Bw8B,EAAQ,qBAAsBx+B,QAAWA,OAAOoH,iBAAiBpF,EAAO,OAASA,EAAM6F,aAEvFy2B,EAAa,CACXM,YAAa,SAAUL,GACrB,IAAIM,EAAO,UAAYN,EAAQ,yCAU/B,OAPIv8B,EAAM88B,WACR98B,EAAM88B,WAAWC,QAAUF,EAE3B78B,EAAMkR,YAAc2rB,EAIA,QAAfL,EAAK/6B,KACd,EAEJ,CAEA,OAAO,SAAS86B,GACd,MAAO,CACLpoB,QAASmoB,EAAWM,YAAYL,GAAS,OACzCA,MAAOA,GAAS,MAEpB,CACD,CA/CyC,IAkD1C,IAAI38B,EAAa,CACfo9B,QAAS,GAETn9B,QAAS,GAOT0d,QAGE,IAA2B,IAAvBhY,KAAK03B,cACP,OAAO13B,KAEPA,KAAK03B,eAAgB,EAIX,IAAE,sBACJj2B,QACR,IAAE,6DAA6Dk2B,SAASx/B,SAASi/B,MAGnF,IACIQ,EADAC,EAAkB,IAAE,kBAAkBpzB,IAAI,eAO9C,IAAK,IAAIkJ,KAJTiqB,EA0MJ,SAA4B31B,GAC1B,IAAI61B,EAAc,CAAC,EAEnB,GAAmB,iBAAR71B,EACT,OAAO61B,EAKT,KAFA71B,EAAMA,EAAIuK,OAAOpL,MAAM,GAAI,IAGzB,OAAO02B,EAuBT,OApBAA,EAAc71B,EAAIQ,MAAM,KAAKs1B,QAAO,SAASC,EAAKC,GAChD,IAAIC,EAAQD,EAAM95B,QAAQ,MAAO,KAAKsE,MAAM,KACxCkL,EAAMuqB,EAAM,GACZx6B,EAAMw6B,EAAM,GAchB,OAbAvqB,EAAMwqB,mBAAmBxqB,GAIzBjQ,OAAqB,IAARA,EAAsB,KAAOy6B,mBAAmBz6B,GAExDs6B,EAAIrhC,eAAegX,GAEbjM,MAAM4O,QAAQ0nB,EAAIrqB,IAC3BqqB,EAAIrqB,GAAKxJ,KAAKzG,GAEds6B,EAAIrqB,GAAO,CAACqqB,EAAIrqB,GAAMjQ,GAJtBs6B,EAAIrqB,GAAOjQ,EAMNs6B,CACT,GAAG,CAAC,GAEGF,CACT,CA5OmBM,CAAmBP,GATvB73B,KAWNy3B,QAAU,GAECG,EACXA,EAAajhC,eAAegX,IAdtB3N,KAeFy3B,QAAQtzB,KAAK,CAChB7M,KAAMqW,EACNJ,MAAO,+BAA+BqqB,EAAajqB,QAKzD3N,KAAK1F,QAAU0F,KAAKq4B,kBAEpBr4B,KAAKs4B,UACP,EAQAC,UACEv4B,KAAK03B,eAAgB,EACrB13B,KAAKgY,OACP,EAQAwgB,QAAQnlB,GACN,IAAImG,EAAQxZ,KAAKmmB,IAAI9S,GAErB,QAAImG,GACK/gB,OAAOq+B,WAAWtd,GAAO5K,OAIpC,EASA6pB,KAAKplB,GACH,OAAOA,IAASrT,KAAKq4B,iBACvB,EAQAK,KAAKrlB,GACH,MAAMslB,EAAW34B,KAAK44B,KAAKvlB,GAI3B,OAAIslB,IACM34B,KAAKw4B,QAAQG,EAMzB,EAQA90B,GAAGwP,GACD,MAAM6kB,EAAQ7kB,EAAK7G,OAAO/J,MAAM,KAAK6K,QAAOyR,KAAOA,EAAEtd,UAC9Co3B,EAAQC,EAAa,IAAMZ,EAGlC,GAAmB,SAAfY,EACF,OAAO94B,KAAKy4B,KAAKI,GAGnB,IAAKC,GAA6B,OAAfA,EACjB,OAAO94B,KAAKw4B,QAAQK,GAGtB,GAAmB,SAAfC,EACF,OAAO94B,KAAK04B,KAAKG,GAGnB,MAAM,IAAIle,MAAM,oIAEwDtH,YAE1E,EAQA8S,IAAI9S,GACF,IAAK,IAAIhb,KAAK2H,KAAKy3B,QACjB,GAAGz3B,KAAKy3B,QAAQ9gC,eAAe0B,GAAI,CACjC,IAAImhB,EAAQxZ,KAAKy3B,QAAQp/B,GACzB,GAAIgb,IAASmG,EAAMliB,KAAM,OAAOkiB,EAAMjM,KACxC,CAGF,OAAO,IACT,EAQAqrB,KAAKvlB,GACH,MAAM0lB,EAAa/4B,KAAKy3B,QAAQuB,WAAW5W,GAAMpiB,KAAKi5B,cAAc7W,KAAO/O,IAC3E,IAAoB,IAAhB0lB,EACF,MAAM,IAAIpe,MAAM,iCACQtH,8GAK1B,MAAM6lB,EAAYl5B,KAAKy3B,QAAQsB,EAAa,GAC5C,OAAOG,EAAYA,EAAU5hC,KAAO,IACtC,EASA2hC,cAAc1rB,GACZ,GAAqB,iBAAVA,EACT,OAAOA,EACT,GAAqB,iBAAVA,EACT,OAAOA,EAAMjW,KACf,MAAM,IAAI6hC,UAAU,+IAEyD5rB,cAAkBA,WAEjG,EAQA8qB,kBAGE,IAFA,IAAIe,EAEK/gC,EAAI,EAAGA,EAAI2H,KAAKy3B,QAAQh2B,OAAQpJ,IAAK,CAC5C,IAAImhB,EAAQxZ,KAAKy3B,QAAQp/B,GAErBI,OAAOq+B,WAAWtd,EAAMjM,OAAOqB,UACjCwqB,EAAU5f,EAEd,CAEA,OAAO4f,GAAWp5B,KAAKi5B,cAAcG,EACvC,EAOAd,WACE,IAAE7/B,QAAQ+Q,GAAG,qBAAqB,KAChC,IAAI6vB,EAAUr5B,KAAKq4B,kBAAmBiB,EAAct5B,KAAK1F,QAErD++B,IAAYC,IAEdt5B,KAAK1F,QAAU++B,EAGf,IAAE5gC,QAAQ2N,QAAQ,wBAAyB,CAACizB,EAASC,IACvD,GAEJ,GCjSF,IAII,EAAa,CACfC,QALuB,QAUvBC,SAAU,CAAC,EAKXC,OAAQ,GAMRC,OAAQ,SAASA,EAAQpiC,GAGvB,IAAID,EAAaC,GAAQqiC,EAAaD,GAGlCE,EAAYC,EAAUxiC,GAG1B2I,KAAKw5B,SAASI,GAAY55B,KAAK3I,GAAaqiC,CAC9C,EAUAI,eAAgB,SAASJ,EAAQpiC,GAC/B,IAAIyiC,EAAaziC,EAAOuiC,EAAUviC,GAAQqiC,EAAaD,EAAO7c,aAAa5Y,cAC3Ey1B,EAAOM,KAAOvE,EAAY,EAAGsE,GAEzBL,EAAO/1B,SAASG,KAAK,QAAQi2B,MAAgBL,EAAO/1B,SAASG,KAAK,QAAQi2B,IAAcL,EAAOM,MAC/FN,EAAO/1B,SAAStN,KAAK,aAAcqjC,EAAO/1B,SAAStN,KAAK,WAAYqjC,GAKxEA,EAAO/1B,SAASyC,QAAQ,WAAW2zB,KAEnC/5B,KAAKy5B,OAAOt1B,KAAKu1B,EAAOM,KAG1B,EASAC,iBAAkB,SAASP,GACzB,IAAIK,EAAaF,EAAUF,EAAaD,EAAO/1B,SAAStN,KAAK,YAAYwmB,cASzE,IAAI,IAAIjd,KAPRI,KAAKy5B,OAAOzvB,OAAOhK,KAAKy5B,OAAOh6B,QAAQi6B,EAAOM,MAAO,GACrDN,EAAO/1B,SAASu2B,WAAW,QAAQH,KAAc/J,WAAW,YAKrD5pB,QAAQ,gBAAgB2zB,KACfL,EACa,mBAAjBA,EAAO95B,KACf85B,EAAO95B,GAAQ,KAIrB,EAQC4L,OAAQ,SAAS2uB,GACf,IAAIC,EAAOD,aAAmB,IAC9B,IACE,GAAGC,EACDD,EAAQtwB,MAAK,WACX,IAAE7J,MAAM3J,KAAK,YAAY2hB,OAC3B,QACG,CACH,IACAxG,EAAQxR,MACF,CACJ,OAAU,SAASq6B,GACjBA,EAAK7jC,SAAQ,SAASuoB,GACpBA,EAAI8a,EAAU9a,GACd,IAAE,SAAUA,EAAG,KAAKub,WAAW,QACjC,GACF,EACA,OAAU,WACRH,EAAUN,EAAUM,GACpB,IAAE,SAAUA,EAAS,KAAKG,WAAW,QACvC,EACA,UAAa,WACXt6B,KAAKu6B,OAAOhjC,OAAO6mB,KAAK5M,EAAMgoB,UAChC,WAfgBW,GAiBRA,EACZ,CAKF,CAJC,MAAM3T,GACL1U,QAAQW,MAAM+T,EAChB,CAAC,QACC,OAAO2T,CACT,CACF,EAODK,OAAQ,SAAS76B,EAAMw6B,QAGE,IAAZA,EACTA,EAAU5iC,OAAO6mB,KAAKpe,KAAKw5B,UAGD,iBAAZW,IACdA,EAAU,CAACA,IAGb,IAAI3oB,EAAQxR,KAGZ,SAAOm6B,GAAS,SAAS9hC,EAAGf,GAE1B,IAAIoiC,EAASloB,EAAMgoB,SAASliC,GAGhB,IAAEqI,GAAM5H,KAAK,SAAST,EAAK,KAAKmjC,QAAQ,SAASnjC,EAAK,KAAKgW,QAAO,WAC5E,YAA2C,IAA7B,IAAEtN,MAAM3J,KAAK,WAC7B,IAGMwT,MAAK,WACT,IAAI0E,EAAM,IAAEvO,MACRwX,EAAO,CAAEgjB,QAAQ,GAElBjsB,EAAIzK,KAAK,iBACVyK,EAAIzK,KAAK,gBAAgBrB,MAAM,KAAKjM,SAAQ,SAAS2C,GACnD,IAAI0F,EAAM1F,EAAOsJ,MAAM,KAAKqZ,KAAI,SAAShc,GAAK,OAAOA,EAAG0M,MAAQ,IAC7D3N,EAAI,KAAI2Y,EAAK3Y,EAAI,IA+JhC,SAAoBoD,GAClB,GAAI,SAAWA,EAAK,OAAO,EACtB,GAAI,UAAYA,EAAK,OAAO,EAC5B,IAAKqC,MAAY,EAANrC,GAAU,OAAO4K,WAAW5K,GAC5C,OAAOA,CACT,CApKsCy4B,CAAW77B,EAAI,IAC3C,IAEF,IACE0P,EAAIlY,KAAK,WAAY,IAAIqjC,EAAO,IAAE15B,MAAOwX,GAK3C,CAJC,MAAMmjB,GACL7oB,QAAQW,MAAMkoB,EAChB,CAAC,QACC,MACF,CACF,GACF,GACF,EACAC,UAAWjB,EAEXkB,YAAa,WAuCX,OADA,kBA/BiB,SAAS9rB,GACxB,IAAI6B,SAAc7B,EACd+rB,EAAQ,IAAE,UAMd,GAJGA,EAAMr5B,QACPq5B,EAAMC,YAAY,SAGR,cAATnqB,EACDvW,EAAW2d,QACX,EAAWwiB,OAAOx6B,UACd,IAAY,WAAT4Q,EAgBP,MAAM,IAAIuoB,UAAU,gBAAgBvoB,iGAfpC,IAAIjB,EAAOjO,MAAMC,UAAUP,MAAMQ,KAAKxB,UAAW,GAC7C46B,EAAYh7B,KAAK3J,KAAK,YAE1B,QAAwB,IAAd2kC,QAA0D,IAAtBA,EAAUjsB,GAStD,MAAM,IAAIksB,eAAe,iBAAmBlsB,EAAS,qCAAuCisB,EAAYrB,EAAaqB,GAAa,gBAAkB,KARjI,IAAhBh7B,KAAKyB,OACJu5B,EAAUjsB,GAAQc,MAAMmrB,EAAWrrB,GAErC3P,KAAK6J,MAAK,SAASxR,EAAGyH,GACpBk7B,EAAUjsB,GAAQc,MAAM,IAAE/P,GAAIzJ,KAAK,YAAasZ,EAClD,GAON,CACA,OAAO3P,IACT,EAEO,GACT,GA2FF,SAAS25B,EAAaxvB,GACpB,QAAuC,IAA5B+wB,SAASv5B,UAAUrK,KAAsB,CAClD,IACI6jC,EADgB,yBACUrV,KAAK,EAAKjY,YACxC,OAAQstB,GAAWA,EAAQ15B,OAAS,EAAK05B,EAAQ,GAAG3uB,OAAS,EAC/D,CACK,YAA4B,IAAjBrC,EAAGxI,UACVwI,EAAG0S,YAAYvlB,KAGf6S,EAAGxI,UAAUkb,YAAYvlB,IAEpC,CASA,SAASuiC,EAAU53B,GACjB,OAAOA,EAAI9D,QAAQ,kBAAmB,SAAS8F,aACjD,CA/GA,EAAWm3B,KAAO,CAQhBC,SAAU,SAAUC,EAAM1P,GACxB,IAAI2P,EAAQ,KAEZ,OAAO,WACL,IAAIC,EAAUx7B,KAAM2P,EAAOvP,UAEb,OAAVm7B,IACFA,EAAQh9B,YAAW,WACjB+8B,EAAKzrB,MAAM2rB,EAAS7rB,GACpB4rB,EAAQ,IACV,GAAG3P,GAEP,CACF,GAGFnzB,OAAO2B,WAAa,EAGpB,WACOR,KAAKy3B,KAAQ54B,OAAOmB,KAAKy3B,MAC5B54B,OAAOmB,KAAKy3B,IAAMz3B,KAAKy3B,IAAM,WAAa,OAAO,IAAIz3B,MAAOE,SAAW,GAGzE,IADA,IAAIwM,EAAU,CAAC,SAAU,OAChBjO,EAAI,EAAGA,EAAIiO,EAAQ7E,SAAWhJ,OAAO6E,wBAAyBjF,EAAG,CACtE,IAAIojC,EAAKn1B,EAAQjO,GACjBI,OAAO6E,sBAAwB7E,OAAOgjC,EAAG,yBACzChjC,OAAO+N,qBAAwB/N,OAAOgjC,EAAG,yBACXhjC,OAAOgjC,EAAG,8BAC5C,CACA,GAAI,uBAAuBt7B,KAAK1H,OAAOoK,UAAU0B,aAC3C9L,OAAO6E,wBAA0B7E,OAAO+N,qBAAsB,CAClE,IAAIH,EAAW,EACf5N,OAAO6E,sBAAwB,SAASmJ,GACpC,IAAI4qB,EAAMz3B,KAAKy3B,MACXqK,EAAW/9B,KAAKkD,IAAIwF,EAAW,GAAIgrB,GACvC,OAAO9yB,YAAW,WAAakI,EAASJ,EAAWq1B,EAAW,GAC5CA,EAAWrK,EACjC,EACA54B,OAAO+N,qBAAuBK,YAChC,CAIIpO,OAAOkjC,aAAgBljC,OAAOkjC,YAAYtK,MAC5C54B,OAAOkjC,YAAc,CACnBv+B,MAAOxD,KAAKy3B,MACZA,IAAK,WAAY,OAAOz3B,KAAKy3B,MAAQrxB,KAAK5C,KAAO,GAGtD,CA/BD,GAgCK89B,SAASv5B,UAAU8lB,OAEtByT,SAASv5B,UAAU8lB,KAAO,SAASmU,GACjC,GAAoB,mBAAT57B,KAGT,MAAM,IAAIm5B,UAAU,wEAGtB,IAAI0C,EAAUn6B,MAAMC,UAAUP,MAAMQ,KAAKxB,UAAW,GAChD07B,EAAU97B,KACV+7B,EAAU,WAAY,EACtBC,EAAU,WACR,OAAOF,EAAQjsB,MAAM7P,gBAAgB+7B,EAC5B/7B,KACA47B,EACFC,EAAMvpB,OAAO5Q,MAAMC,UAAUP,MAAMQ,KAAKxB,YACjD,EAQJ,OANIJ,KAAK2B,YAEPo6B,EAAKp6B,UAAY3B,KAAK2B,WAExBq6B,EAAOr6B,UAAY,IAAIo6B,EAEhBC,CACT,GC7SF,MAAMC,EAEJpf,YAAY1f,EAASuB,GACnBsB,KAAKk8B,OAAO/+B,EAASuB,GACrB,IAAIq7B,EAAaoC,EAAcn8B,MAC/BA,KAAKg6B,KAAOvE,EAAY,EAAGsE,GAEvB/5B,KAAK2D,SAASG,KAAK,QAAQi2B,MAAgB/5B,KAAK2D,SAASG,KAAK,QAAQi2B,IAAc/5B,KAAKg6B,MACzFh6B,KAAK2D,SAAStN,KAAK,aAAc2J,KAAK2D,SAAStN,KAAK,WAAY2J,MAKpEA,KAAK2D,SAASyC,QAAQ,WAAW2zB,IACnC,CAEAjwB,UACE9J,KAAKgc,WACL,IAAI+d,EAAaoC,EAAcn8B,MAO/B,IAAI,IAAIJ,KANRI,KAAK2D,SAASu2B,WAAW,QAAQH,KAAc/J,WAAW,YAKrD5pB,QAAQ,gBAAgB2zB,KACb/5B,KACVA,KAAKrJ,eAAeiJ,KACtBI,KAAKJ,GAAQ,KAGnB,EASF,SAASu8B,EAAc9rB,GACrB,OAAiBA,EAAIhZ,UAJV8G,QAAQ,kBAAmB,SAAS8F,aAKjD,CCnCA,MAAMm4B,EAAW,CACf,EAAG,MACH,GAAI,QACJ,GAAI,SACJ,GAAI,QACJ,GAAI,MACJ,GAAI,OACJ,GAAI,aACJ,GAAI,WACJ,GAAI,cACJ,GAAI,cAGN,IAAIC,EAAW,CAAC,EAGhB,SAASC,EAAc34B,GACrB,QAAIA,GACGA,EAAS5L,KAAK,gLAAgLuV,QAAO,WAC1M,SAAK,IAAEtN,MAAM6D,GAAG,aAAe,IAAE7D,MAAM8D,KAAK,YAAc,EAE5D,IACC0W,MAAM,SAAUxK,EAAGvR,GAClB,GAAI,IAAEuR,GAAGlM,KAAK,cAAgB,IAAErF,GAAGqF,KAAK,YACtC,OAAO,EAET,IAAIy4B,EAAYx+B,SAAS,IAAEiS,GAAGlM,KAAK,YAAa,IAC9C04B,EAAYz+B,SAAS,IAAEU,GAAGqF,KAAK,YAAa,IAE9C,YAAqC,IAA1B,IAAEkM,GAAGlM,KAAK,aAA+B04B,EAAY,EACvD,OAE4B,IAA1B,IAAE/9B,GAAGqF,KAAK,aAA+By4B,EAAY,GACtD,EAEQ,IAAdA,GAAmBC,EAAY,EAC1B,EAES,IAAdA,GAAmBD,EAAY,GAG/BA,EAAYC,GAFN,EAKND,EAAYC,EACP,OADT,CAGF,GACF,CAEA,SAASC,EAASz+B,GAChB,IAAI2P,EAAMyuB,EAASp+B,EAAMu1B,OAASv1B,EAAM0+B,UAAYhnB,OAAOinB,aAAa3+B,EAAMu1B,OAAOlzB,cAYrF,OATAsN,EAAMA,EAAIxP,QAAQ,MAAO,IAErBH,EAAM4+B,WAAUjvB,EAAM,SAASA,KAC/B3P,EAAM6+B,UAASlvB,EAAM,QAAQA,KAC7B3P,EAAM8+B,SAAQnvB,EAAM,OAAOA,KAG/BA,EAAMA,EAAIxP,QAAQ,KAAM,GAG1B,CAEA,IAAI4+B,EAAW,CACb3e,KAgHF,SAAqB4e,GACnB,IAAIjb,EAAI,CAAC,EACT,IAAK,IAAIkb,KAAMD,EACTA,EAAIrmC,eAAesmC,KAAKlb,EAAEib,EAAIC,IAAOD,EAAIC,IAE/C,OAAOlb,CACT,CAtHQmb,CAAYd,GAQlBK,SAAUA,EAQVU,UAAUn/B,EAAOo/B,EAAWC,GAC1B,IAIElzB,EAJEmzB,EAAcjB,EAASe,GACzBV,EAAU18B,KAAKy8B,SAASz+B,GAK1B,IAAKs/B,EAAa,OAAOxrB,QAAQwQ,KAAK,0BAGtC,IAA6B,IAAzBtkB,EAAMu/B,eAcV,IAFApzB,EAAKkzB,QAT0B,IAApBC,EAAYE,IACZF,EAEH,IAAc,WAAS,CAAC,EAAGA,EAAYE,IAAKF,EAAY9H,KAEhD,WAAS,CAAC,EAAG8H,EAAY9H,IAAK8H,EAAYE,MAE3Cd,MAIS,mBAAPvyB,EAAmB,CAClC,IAAIyR,EAAczR,EAAG0F,QAGrB7R,EAAMu/B,gBAAiB,GAGnBF,EAAUI,SAAwC,mBAAtBJ,EAAUI,UACtCJ,EAAUI,QAAQ7hB,EAExB,MAEMyhB,EAAUK,WAA4C,mBAAxBL,EAAUK,YACxCL,EAAUK,WAGlB,EAQApB,cAAeA,EAQfqB,SAASC,EAAeC,GACtBxB,EAASuB,GAAiBC,CAC5B,EASAC,UAAUn6B,GACR,IAAIo6B,EAAazB,EAAc34B,GAC3Bq6B,EAAkBD,EAAWE,GAAG,GAChCC,EAAiBH,EAAWE,IAAI,GAEpCt6B,EAAS6F,GAAG,wBAAwB,SAASxL,GACvCA,EAAMsE,SAAW47B,EAAe,IAA0B,QAApBzB,EAASz+B,IACjDA,EAAMC,iBACN+/B,EAAgB3/B,SAETL,EAAMsE,SAAW07B,EAAgB,IAA0B,cAApBvB,EAASz+B,KACvDA,EAAMC,iBACNigC,EAAe7/B,QAEnB,GACF,EAKA8/B,aAAax6B,GACXA,EAASsG,IAAI,uBACf,GC5KF,MAAMm0B,UAAkBnC,EAStBC,OAAO/+B,EAASuB,GACdsB,KAAK2D,SAAWxG,EAChB6C,KAAKtB,QAAU,WAAS,CAAC,EAAG0/B,EAAU3R,SAAUzsB,KAAK2D,SAAStN,OAAQqI,GAEtEsB,KAAK3I,UAAY,YACjB2I,KAAKgY,QAEL+kB,EAASY,SAAS,YAAa,CAC7B,MAAS,SACT,MAAS,SACT,WAAc,OACd,SAAY,WACZ,KAAQ,QACR,IAAO,QAEX,CAMA3lB,QACEhY,KAAKq+B,iBAAkB,EAEvBr+B,KAAKs+B,MAAQt+B,KAAK2D,SAASnC,SAAS,yBAGpCxB,KAAKs+B,MAAMz0B,MAAK,SAAS00B,EAAKz+B,GAC5B,IAAIyO,EAAM,IAAEzO,GACR0+B,EAAWjwB,EAAI/M,SAAS,sBACxBoF,EAAK43B,EAAS,GAAG53B,IAAM6uB,EAAY,EAAG,aACtCgJ,EAAU3+B,EAAK,GAAI,GAAGA,EAAG8G,WAAa,GAAGA,UAE7C2H,EAAIxW,KAAK,WAAW+L,KAAK,CACvB,gBAAiB8C,EACjB,GAAM63B,EACN,iBAAiB,IAGnBD,EAAS16B,KAAK,CAAC,KAAQ,SAAU,kBAAmB26B,EAAQ,eAAe,EAAM,GAAM73B,GACzF,IAEA,IAAI83B,EAAc1+B,KAAK2D,SAAS5L,KAAK,cAAcyJ,SAAS,sBACxDk9B,EAAYj9B,SAEdzB,KAAK2+B,eAAiBD,EAAYE,KAAK,KAAK96B,KAAK,QACjD9D,KAAK6+B,eAAeH,IAGtB1+B,KAAK8+B,eAAiB,KACpB,IAAIC,EAAStmC,OAAOumC,SAASC,KAE7B,IAAKF,EAAOt9B,OAAQ,CAElB,GAAIzB,KAAKq+B,gBAAiB,OAEtBr+B,KAAK2+B,iBAAgBI,EAAS/+B,KAAK2+B,eACzC,CAEA,IAAIO,EAAUH,GAAU,IAAEA,GACtBI,EAAQJ,GAAU/+B,KAAK2D,SAAS5L,KAAK,WAAWgnC,UAE/BG,EAAQz9B,SAAU09B,EAAM19B,UAIvCy9B,GAAWC,GAASA,EAAM19B,OACvB09B,EAAMC,OAAO,yBAAyBC,SAAS,cAClDr/B,KAAK6+B,eAAeK,GAKtBl/B,KAAKs/B,gBAIHt/B,KAAKtB,QAAQ6gC,gBACftJ,EAAO,IAAEx9B,SAAS,KAChB,IAAI6O,EAAStH,KAAK2D,SAAS2D,SAC3B,IAAE,cAActI,QAAQ,CAAExC,UAAW8K,EAAO/B,IAAMvF,KAAKtB,QAAQ8gC,sBAAwBx/B,KAAKtB,QAAQ+gC,oBAAoB,IAQ5Hz/B,KAAK2D,SAASyC,QAAQ,wBAAyB,CAAC+4B,EAAOD,IACzD,EAIEl/B,KAAKtB,QAAQghC,UACf1/B,KAAK8+B,iBAGP9+B,KAAKqP,UAELrP,KAAKq+B,iBAAkB,CACzB,CAMAhvB,UACE,IAAImC,EAAQxR,KAEZA,KAAKs+B,MAAMz0B,MAAK,WACd,IAAIgsB,EAAQ,IAAE71B,MACV2/B,EAAc9J,EAAMr0B,SAAS,sBAC7Bm+B,EAAYl+B,QACdo0B,EAAMr0B,SAAS,KAAKyI,IAAI,2CAChBT,GAAG,sBAAsB,SAASjQ,GACxCA,EAAE0E,iBACFuT,EAAMjG,OAAOo0B,EACf,IAAGn2B,GAAG,wBAAwB,SAASjQ,GACrCwjC,EAASI,UAAU5jC,EAAG,YAAa,CACjCgS,OAAQ,WACNiG,EAAMjG,OAAOo0B,EACf,EACA/G,KAAM,WACJ,IAAIgH,EAAK/J,EAAM+C,OAAO7gC,KAAK,KAAKsG,QAC3BmT,EAAM9S,QAAQmhC,aACjBD,EAAGx5B,QAAQ,qBAEf,EACA05B,SAAU,WACR,IAAIF,EAAK/J,EAAM+I,OAAO7mC,KAAK,KAAKsG,QAC3BmT,EAAM9S,QAAQmhC,aACjBD,EAAGx5B,QAAQ,qBAEf,EACA25B,MAAO,WACL,IAAIH,EAAKpuB,EAAM8sB,MAAMyB,QAAQhoC,KAAK,oBAAoBsG,QACjDmT,EAAM9S,QAAQmhC,aAChBD,EAAGx5B,QAAQ,qBAEhB,EACA45B,KAAM,WACJ,IAAIJ,EAAKpuB,EAAM8sB,MAAM0B,OAAOjoC,KAAK,oBAAoBsG,QAChDmT,EAAM9S,QAAQmhC,aAChBD,EAAGx5B,QAAQ,qBAEhB,EACAq3B,QAAS,WACPlkC,EAAE0E,gBACJ,GAEJ,GAEJ,IACI+B,KAAKtB,QAAQghC,UACf,IAAEjnC,QAAQ+Q,GAAG,aAAcxJ,KAAK8+B,eAEpC,CAOAvzB,OAAO00B,GACL,GAAIA,EAAQtL,QAAQ,oBAAoB9wB,GAAG,cACzCiO,QAAQmlB,KAAK,qDASf,GANIgJ,EAAQb,SAASC,SAAS,aAC5Br/B,KAAKkgC,GAAGD,GAERjgC,KAAKmgC,KAAKF,GAGRjgC,KAAKtB,QAAQghC,SAAU,CACzB,IAAIX,EAASkB,EAAQrB,KAAK,KAAK96B,KAAK,QAEhC9D,KAAKtB,QAAQ0hC,cACfC,QAAQC,UAAU,CAAC,EAAG,GAAIvB,GAE1BsB,QAAQE,aAAa,CAAC,EAAG,GAAIxB,EAEjC,CACF,CAQAoB,KAAKF,GACCA,EAAQtL,QAAQ,oBAAoB9wB,GAAG,cACzCiO,QAAQmlB,KAAK,sDAIXj3B,KAAKtB,QAAQmhC,YACf7/B,KAAKwgC,SAASP,GAEdjgC,KAAK6+B,eAAeoB,EACxB,CAUAC,GAAGD,GACD,GAAIjgC,KAAK2D,SAASE,GAAG,cAEnB,YADAiO,QAAQmlB,KAAK,oDAKf,MAAMwJ,EAAcR,EAAQb,SAC5B,IAAKqB,EAAYpB,SAAS,aAAc,OAGxC,MAAMqB,EAAeD,EAAYE,YAC5B3gC,KAAKtB,QAAQkiC,gBAAmBF,EAAarB,SAAS,eAE3Dr/B,KAAK6gC,UAAUZ,EACjB,CAQApB,eAAeoB,GAEb,MAAMa,EAAkB9gC,KAAK2D,SAASnC,SAAS,cAAcA,SAAS,sBAClEs/B,EAAgBr/B,QAClBzB,KAAK6gC,UAAUC,EAAgBC,IAAId,IAIrCjgC,KAAKwgC,SAASP,EAChB,CASAO,SAASP,GACP,MAAMQ,EAAcR,EAAQb,SACtB4B,EAAkBf,EAAQn8B,KAAK,mBAErCm8B,EAAQn8B,KAAK,eAAe,GAC5B28B,EAAYr7B,SAAS,aAErB,IAAE,IAAI47B,KAAmBl9B,KAAK,CAC5B,iBAAiB,IAGnBm8B,EAAQgB,SAASC,UAAUlhC,KAAKtB,QAAQyiC,YAAY,KAKlDnhC,KAAK2D,SAASyC,QAAQ,oBAAqB,CAAC65B,GAAS,GAEzD,CASAY,UAAUZ,GACR,MAAMQ,EAAcR,EAAQb,SACtB4B,EAAkBf,EAAQn8B,KAAK,mBAErCm8B,EAAQn8B,KAAK,eAAe,GAC5B28B,EAAY1F,YAAY,aAExB,IAAE,IAAIiG,KAAmBl9B,KAAK,CAC7B,iBAAiB,IAGlBm8B,EAAQgB,SAASG,QAAQphC,KAAKtB,QAAQyiC,YAAY,KAKhDnhC,KAAK2D,SAASyC,QAAQ,kBAAmB,CAAC65B,GAAS,GAEvD,CAQAX,gBACE,IAAI+B,EAAcrhC,KAAK2D,SAASnC,SAAS,cAAcA,SAAS,sBAC5D6/B,EAAY5/B,QACdzB,KAAK6gC,UAAUQ,EAEnB,CAOArlB,WACEhc,KAAK2D,SAAS5L,KAAK,sBAAsBupC,MAAK,GAAMF,QAAQ,GAAG38B,IAAI,UAAW,IAC9EzE,KAAK2D,SAAS5L,KAAK,KAAKkS,IAAI,iBACxBjK,KAAKtB,QAAQghC,UACf,IAAEjnC,QAAQwR,IAAI,aAAcjK,KAAK8+B,eAGrC,EAGFV,EAAU3R,SAAW,CAOnB0U,WAAY,IAOZtB,aAAa,EAObe,gBAAgB,EAQhBlB,UAAU,EAOVH,gBAAgB,EAOhBE,oBAAqB,IAOrBD,qBAAsB,EAOtBY,eAAe,GClZjB,MAAMmB,EAAO,CACXC,QAAQh3B,EAAMoG,EAAO,MACnBpG,EAAK1G,KAAK,OAAQ,WAClB0G,EAAKzS,KAAK,KAAK+L,KAAK,CAAC,KAAQ,aAE7B,IAAIwS,EAAQ9L,EAAKzS,KAAK,MAAM+L,KAAK,CAAC,KAAQ,SACtC29B,EAAe,MAAM7wB,YACrB8wB,EAAe,GAAGD,SAClBE,EAAc,MAAM/wB,mBACpBgxB,EAAsB,cAAThxB,EAEjB0F,EAAMzM,MAAK,WACT,IAAIg4B,EAAQ,IAAE7hC,MACV8hC,EAAOD,EAAMrgC,SAAS,MAE1B,GAAIsgC,EAAKrgC,OAAQ,CAEf,GADAogC,EAAMz8B,SAASu8B,GACZC,EAAW,CACZ,MAAMhlB,EAAYilB,EAAMrgC,SAAS,WACjCob,EAAU9Y,KAAK,CACb,iBAAiB,EACjB,aAAc8Y,EAAU9Y,KAAK,eAAiB8Y,EAAU0a,SAK9C,cAAT1mB,GACDixB,EAAM/9B,KAAK,CAAC,iBAAiB,GAEjC,CACAg+B,EACG18B,SAAS,WAAWq8B,KACpB39B,KAAK,CACJ,eAAgB,GAChB,KAAQ,YAEA,cAAT8M,GACDkxB,EAAKh+B,KAAK,CAAC,eAAe,GAE9B,CAEI+9B,EAAMzC,OAAO,kBAAkB39B,QACjCogC,EAAMz8B,SAAS,mBAAmBs8B,IAEtC,GAGF,EAEAK,KAAKv3B,EAAMoG,GACT,IACI6wB,EAAe,MAAM7wB,YACrB8wB,EAAe,GAAGD,SAClBE,EAAc,MAAM/wB,mBAExBpG,EACGzS,KAAK,0DACLgjC,YAAY,GAAG0G,KAAgBC,KAAgBC,uCAC/CzH,WAAW,gBAAgBz1B,IAAI,UAAW,GAE/C,GCjDF,MAAMu9B,UAAsB/F,EAS1BC,OAAO/+B,EAASuB,GACdsB,KAAK2D,SAAWxG,EAChB6C,KAAKtB,QAAU,WAAS,CAAC,EAAGsjC,EAAcvV,SAAUzsB,KAAK2D,SAAStN,OAAQqI,GAC1EsB,KAAK3I,UAAY,gBAEjB2I,KAAKgY,QAEL+kB,EAASY,SAAS,gBAAiB,CACjC,MAAS,SACT,MAAS,SACT,YAAe,OACf,SAAY,KACZ,WAAc,OACd,WAAc,QACd,OAAU,YAEd,CAQA3lB,QACEupB,EAAKC,QAAQxhC,KAAK2D,SAAU,aAE5B,IAAI6N,EAAQxR,KAEZA,KAAK2D,SAAS5L,KAAK,kBAAkBgpC,IAAI,cAAcK,QAAQ,GAC/DphC,KAAK2D,SAASG,KAAK,CACjB,uBAAwB9D,KAAKtB,QAAQujC,YAGvCjiC,KAAKkiC,WAAaliC,KAAK2D,SAAS5L,KAAK,gCACrCiI,KAAKkiC,WAAWr4B,MAAK,WACnB,IAAI40B,EAASz+B,KAAK4G,IAAM6uB,EAAY,EAAG,iBACnCI,EAAQ,IAAE71B,MACV8hC,EAAOjM,EAAMr0B,SAAS,kBACtB2gC,EAAQL,EAAK,GAAGl7B,IAAM6uB,EAAY,EAAG,YACrC2M,EAAWN,EAAKzC,SAAS,aAE7B,GAAI7tB,EAAM9S,QAAQ2jC,WAAY,CACdxM,EAAMr0B,SAAS,KACrB8gC,QAAQv9B,UAAU+8B,GAAMS,KAAK,yGACvC,CAEI/wB,EAAM9S,QAAQ8jC,eAChB3M,EAAMzwB,SAAS,sBACfywB,EAAMr0B,SAAS,KAAKihC,MAAM,eAAiBhE,EAAS,2CAA6C0D,EAAQ,oBAAsBC,EAAW,YAAc5wB,EAAM9S,QAAQgkC,kBAAoB,uCAAyClxB,EAAM9S,QAAQgkC,kBAAoB,qBAErQ7M,EAAM/xB,KAAK,CACT,gBAAiBq+B,EACjB,gBAAiBC,EACjB,GAAM3D,IAGVqD,EAAKh+B,KAAK,CACR,kBAAmB26B,EACnB,eAAgB2D,EAChB,KAAQ,QACR,GAAMD,GAEV,IACA,IAAIQ,EAAY3iC,KAAK2D,SAAS5L,KAAK,cAC/B4qC,EAAUlhC,QACZkhC,EAAU94B,MAAK,WACb2H,EAAM2uB,KAAK,IAAEngC,MACf,IAEFA,KAAKqP,SACP,CAMAA,UACE,IAAImC,EAAQxR,KAEZA,KAAK2D,SAAS5L,KAAK,MAAM8R,MAAK,WAC5B,IAAI+4B,EAAW,IAAE5iC,MAAMwB,SAAS,kBAE5BohC,EAASnhC,SACP+P,EAAM9S,QAAQ8jC,cAChB,IAAExiC,MAAMwB,SAAS,mBAAmByI,IAAI,0BAA0BT,GAAG,0BAA0B,WAC7FgI,EAAMjG,OAAOq3B,EACf,IAEE,IAAE5iC,MAAMwB,SAAS,KAAKyI,IAAI,0BAA0BT,GAAG,0BAA0B,SAASjQ,GACxFA,EAAE0E,iBACFuT,EAAMjG,OAAOq3B,EACf,IAGR,IAAGp5B,GAAG,4BAA4B,SAASjQ,GACzC,IAEIspC,EACAC,EAHAn/B,EAAW,IAAE3D,MACb+iC,EAAYp/B,EAASy7B,OAAO,MAAM59B,SAAS,MAG3Cy+B,EAAUt8B,EAASnC,SAAS,kBAEhCuhC,EAAUl5B,MAAK,SAASxR,GACtB,GAAI,IAAE2H,MAAM6D,GAAGF,GAgBb,OAfAk/B,EAAeE,EAAU9E,GAAGtgC,KAAKkD,IAAI,EAAGxI,EAAE,IAAIN,KAAK,KAAKgoC,QACxD+C,EAAeC,EAAU9E,GAAGtgC,KAAKkK,IAAIxP,EAAE,EAAG0qC,EAAUthC,OAAO,IAAI1J,KAAK,KAAKgoC,QAErE,IAAE//B,MAAMwB,SAAS,0BAA0BC,SAC7CqhC,EAAen/B,EAAS5L,KAAK,kBAAkBA,KAAK,KAAKgoC,SAEvD,IAAE//B,MAAM6D,GAAG,gBACbg/B,EAAel/B,EAASq/B,QAAQ,MAAMjD,QAAQhoC,KAAK,KAAKgoC,QAC/C8C,EAAaG,QAAQ,MAAMjD,QAAQv+B,SAAS,0BAA0BC,SAC/EohC,EAAeA,EAAaG,QAAQ,MAAMjrC,KAAK,iBAAiBA,KAAK,KAAKgoC,cAExE,IAAE//B,MAAM6D,GAAG,iBACbi/B,EAAen/B,EAASq/B,QAAQ,MAAMjD,QAAQnH,KAAK,MAAM7gC,KAAK,KAAKgoC,SAKzE,IAEAhD,EAASI,UAAU5jC,EAAG,gBAAiB,CACrC0pC,KAAM,WACAhD,EAAQp8B,GAAG,aACb2N,EAAM2uB,KAAKF,GACXA,EAAQloC,KAAK,MAAMgoC,QAAQhoC,KAAK,KAAKgoC,QAAQ1hC,QAEjD,EACA6kC,MAAO,WACDjD,EAAQx+B,SAAWw+B,EAAQp8B,GAAG,WAChC2N,EAAM0uB,GAAGD,GACAt8B,EAASy7B,OAAO,kBAAkB39B,SAC3C+P,EAAM0uB,GAAGv8B,EAASy7B,OAAO,mBACzBz7B,EAASq/B,QAAQ,MAAMjD,QAAQhoC,KAAK,KAAKgoC,QAAQ1hC,QAErD,EACA6hC,GAAI,WAEF,OADA2C,EAAaxkC,SACN,CACT,EACA8hC,KAAM,WAEJ,OADA2C,EAAazkC,SACN,CACT,EACAkN,OAAQ,WACN,OAAIiG,EAAM9S,QAAQ8jC,gBAGd7+B,EAASnC,SAAS,kBAAkBC,QACtC+P,EAAMjG,OAAO5H,EAASnC,SAAS,oBACxB,QAFT,EAIF,EACA2hC,SAAU,WACR3xB,EAAM4xB,SACR,EACA3F,QAAS,SAASx/B,GACZA,GACF1E,EAAE0E,gBAEN,GAEJ,GACF,CAMAmlC,UACEpjC,KAAKkgC,GAAGlgC,KAAK2D,SAAS5L,KAAK,kBAC7B,CAMAsrC,UACErjC,KAAKmgC,KAAKngC,KAAK2D,SAAS5L,KAAK,kBAC/B,CAOAwT,OAAO00B,GACAA,EAAQp8B,GAAG,eACTo8B,EAAQp8B,GAAG,WAId7D,KAAKmgC,KAAKF,GAHVjgC,KAAKkgC,GAAGD,GAMd,CAOAE,KAAKF,GAGH,IAAKjgC,KAAKtB,QAAQujC,UAAW,CAG3B,MAAMqB,EAAgBrD,EAAQsD,aAAavjC,KAAK2D,UAC7C7H,IAAImkC,GACJnkC,IAAImkC,EAAQloC,KAAK,eAEdyrC,EAAwBxjC,KAAK2D,SAAS5L,KAAK,cAAcgpC,IAAIuC,GAEnEtjC,KAAKkgC,GAAGsD,EACV,CAEAvD,EACG76B,SAAS,aACTtB,KAAK,CAAE,eAAe,IAErB9D,KAAKtB,QAAQ8jC,cACfvC,EAAQrB,KAAK,mBAAmB96B,KAAK,CAAC,iBAAiB,IAGvDm8B,EAAQb,OAAO,gCAAgCt7B,KAAK,CAAC,iBAAiB,IAGxEm8B,EAAQiB,UAAUlhC,KAAKtB,QAAQyiC,YAAY,KAKzCnhC,KAAK2D,SAASyC,QAAQ,wBAAyB,CAAC65B,GAAS,GAE7D,CAOAC,GAAGD,GACD,MAAMwD,EAAYxD,EAAQloC,KAAK,kBACzB2rC,EAAYzD,EAAQnkC,IAAI2nC,GAE9BA,EAAUrC,QAAQ,GAClBsC,EACG3I,YAAY,aACZj3B,KAAK,eAAe,GAEnB9D,KAAKtB,QAAQ8jC,cACfkB,EAAU9E,KAAK,mBAAmB96B,KAAK,iBAAiB,GAGxD4/B,EAAUtE,OAAO,gCAAgCt7B,KAAK,iBAAiB,GAGzEm8B,EAAQmB,QAAQphC,KAAKtB,QAAQyiC,YAAY,KAKvCnhC,KAAK2D,SAASyC,QAAQ,sBAAuB,CAAC65B,GAAS,GAE3D,CAMAjkB,WACEhc,KAAK2D,SAAS5L,KAAK,kBAAkBmpC,UAAU,GAAGz8B,IAAI,UAAW,IACjEzE,KAAK2D,SAAS5L,KAAK,KAAKkS,IAAI,0BAC5BjK,KAAK2D,SAAS5L,KAAK,yBAAyB4rC,SAExC3jC,KAAKtB,QAAQ8jC,gBACfxiC,KAAK2D,SAAS5L,KAAK,uBAAuBgjC,YAAY,sBACtD/6B,KAAK2D,SAAS5L,KAAK,mBAAmBgE,UAGxCwlC,EAAKQ,KAAK/hC,KAAK2D,SAAU,YAC3B,EAGFq+B,EAAcvV,SAAW,CAOvB4V,YAAY,EAOZlB,WAAY,IAMZqB,eAAe,EAMfE,kBAAmB,cAOnBT,WAAW,GCtVb,IAAI2B,EAAM,CACRC,iBAgBF,SAA0B1mC,EAASiiC,EAAQ0E,EAAQC,EAAQC,GACzD,OAAsE,IAA/DC,EAAY9mC,EAASiiC,EAAQ0E,EAAQC,EAAQC,EACtD,EAjBEC,YAAaA,EACbC,cAAeA,EACfC,mBA+GF,SAA4BhnC,EAAS4hC,EAAQ/6B,EAAUogC,EAAWC,EAASC,EAASC,GAClF,IAGQC,EAAQC,EAHZC,EAAWR,EAAc/mC,GACzBwnC,EAAc5F,EAASmF,EAAcnF,GAAU,KAInD,GAAoB,OAAhB4F,EAAsB,CAE1B,OAAQ3gC,GACN,IAAK,MACHwgC,EAASG,EAAYr9B,OAAO/B,KAAOm/B,EAASlkC,OAAS6jC,GACrD,MACF,IAAK,SACHG,EAASG,EAAYr9B,OAAO/B,IAAMo/B,EAAYnkC,OAAS6jC,EACvD,MACF,IAAK,OACHI,EAAUE,EAAYr9B,OAAO9B,MAAQk/B,EAASxoC,MAAQooC,GACtD,MACF,IAAK,QACHG,EAAUE,EAAYr9B,OAAO9B,KAAOm/B,EAAYzoC,MAAQooC,EAK5D,OAAQtgC,GACN,IAAK,MACL,IAAK,SACH,OAAQogC,GACN,IAAK,OACHK,EAAUE,EAAYr9B,OAAO9B,KAAO8+B,EACpC,MACF,IAAK,QACHG,EAAUE,EAAYr9B,OAAO9B,KAAOk/B,EAASxoC,MAAQyoC,EAAYzoC,MAAQooC,EACzE,MACF,IAAK,SACHG,EAAUF,EAAaD,EAAYK,EAAYr9B,OAAO9B,KAAQm/B,EAAYzoC,MAAQ,EAAOwoC,EAASxoC,MAAQ,EAAMooC,EAGpH,MACF,IAAK,QACL,IAAK,OACH,OAAQF,GACN,IAAK,SACHI,EAASG,EAAYr9B,OAAO/B,IAAM8+B,EAAUM,EAAYnkC,OAASkkC,EAASlkC,OAC1E,MACF,IAAK,MACHgkC,EAASG,EAAYr9B,OAAO/B,IAAM8+B,EAClC,MACF,IAAK,SACHG,EAAUG,EAAYr9B,OAAO/B,IAAM8+B,EAAWM,EAAYnkC,OAAS,EAAOkkC,EAASlkC,OAAS,GAKpG,CAEA,MAAO,CAAC+E,IAAKi/B,EAAQh/B,KAAMi/B,EAC7B,GAvJA,SAASR,EAAY9mC,EAASiiC,EAAQ0E,EAAQC,EAAQC,GACpD,IACAY,EAASC,EAAYC,EAAUC,EAD3BC,EAAUd,EAAc/mC,GAE5B,GAAIiiC,EAAQ,CACV,IAAI6F,EAAUf,EAAc9E,GAE5ByF,EAAcI,EAAQzkC,OAASykC,EAAQ39B,OAAO/B,KAAQy/B,EAAQ19B,OAAO/B,IAAMy/B,EAAQxkC,QACnFokC,EAAaI,EAAQ19B,OAAO/B,IAAM0/B,EAAQ39B,OAAO/B,IACjDu/B,EAAaE,EAAQ19B,OAAO9B,KAAOy/B,EAAQ39B,OAAO9B,KAClDu/B,EAAcE,EAAQ/oC,MAAQ+oC,EAAQ39B,OAAO9B,MAASw/B,EAAQ19B,OAAO9B,KAAOw/B,EAAQ9oC,MACtF,MAEE2oC,EAAcG,EAAQE,WAAW1kC,OAASwkC,EAAQE,WAAW59B,OAAO/B,KAAQy/B,EAAQ19B,OAAO/B,IAAMy/B,EAAQxkC,QACzGokC,EAAaI,EAAQ19B,OAAO/B,IAAMy/B,EAAQE,WAAW59B,OAAO/B,IAC5Du/B,EAAaE,EAAQ19B,OAAO9B,KAAOw/B,EAAQE,WAAW59B,OAAO9B,KAC7Du/B,EAAaC,EAAQE,WAAWhpC,OAAS8oC,EAAQ19B,OAAO9B,KAAOw/B,EAAQ9oC,OAQzE,OALA2oC,EAAab,EAAe,EAAIrmC,KAAKkK,IAAIg9B,EAAY,GACrDD,EAAajnC,KAAKkK,IAAI+8B,EAAS,GAC/BE,EAAannC,KAAKkK,IAAIi9B,EAAU,GAChCC,EAAapnC,KAAKkK,IAAIk9B,EAAW,GAE7BjB,EACKgB,EAAWC,EAEhBhB,EACKa,EAAUC,EAIZlnC,KAAKwnC,KAAMP,EAAUA,EAAYC,EAAaA,EAAeC,EAAWA,EAAaC,EAAYA,EAC1G,CASA,SAASb,EAAcvkC,GAGrB,IAFAA,EAAOA,EAAK8B,OAAS9B,EAAK,GAAKA,KAElBlH,QAAUkH,IAASxH,SAC9B,MAAM,IAAIwiB,MAAM,gDAGlB,IAAIyqB,EAAOzlC,EAAK4vB,wBACZ8V,EAAU1lC,EAAKoC,WAAWwtB,wBAC1B+V,EAAUntC,SAASmD,KAAKi0B,wBACxBgW,EAAO9sC,OAAOkR,YACd67B,EAAO/sC,OAAOgtC,YAElB,MAAO,CACLvpC,MAAOkpC,EAAKlpC,MACZsE,OAAQ4kC,EAAK5kC,OACb8G,OAAQ,CACN/B,IAAK6/B,EAAK7/B,IAAMggC,EAChB//B,KAAM4/B,EAAK5/B,KAAOggC,GAEpBE,WAAY,CACVxpC,MAAOmpC,EAAQnpC,MACfsE,OAAQ6kC,EAAQ7kC,OAChB8G,OAAQ,CACN/B,IAAK8/B,EAAQ9/B,IAAMggC,EACnB//B,KAAM6/B,EAAQ7/B,KAAOggC,IAGzBN,WAAY,CACVhpC,MAAOopC,EAAQppC,MACfsE,OAAQ8kC,EAAQ9kC,OAChB8G,OAAQ,CACN/B,IAAKggC,EACL//B,KAAMggC,IAId,CC/FA,MAAMG,EAAY,CAAC,OAAQ,QAAS,MAAO,UACrCC,EAAsB,CAAC,MAAO,SAAU,UACxCC,EAAwB,CAAC,OAAQ,QAAS,UAE1CC,EAAa,CACjB,KAAQF,EACR,MAASA,EACT,IAAOC,EACP,OAAUA,GAGZ,SAASE,EAASjtB,EAAMktB,GACtB,IAAIC,EAAaD,EAAMvmC,QAAQqZ,GAC/B,OAAGmtB,IAAeD,EAAMvkC,OAAS,EACxBukC,EAAM,GAENA,EAAMC,EAAa,EAE9B,CAGA,MAAMC,UAAqBjK,EAWzBjkB,QACEhY,KAAKmmC,eAAiB,CAAC,EACvBnmC,KAAKgE,SAAsC,SAA1BhE,KAAKtB,QAAQsF,SAAsBhE,KAAKomC,sBAAwBpmC,KAAKtB,QAAQsF,SAC9FhE,KAAKokC,UAAuC,SAA3BpkC,KAAKtB,QAAQ0lC,UAAuBpkC,KAAKqmC,uBAAyBrmC,KAAKtB,QAAQ0lC,UAChGpkC,KAAKsmC,iBAAmBtmC,KAAKgE,SAC7BhE,KAAKumC,kBAAoBvmC,KAAKokC,SAChC,CAEAgC,sBACE,MAAO,QACT,CAEAC,uBACE,OAAOrmC,KAAKgE,UACV,IAAK,SACL,IAAK,MACH,OAAO,IAAQ,QAAU,OAC3B,IAAK,OACL,IAAK,QACH,MAAO,SAEb,CAQAwiC,cACKxmC,KAAKymC,qBAAqBzmC,KAAKgE,WAChChE,KAAKgE,SAAW+hC,EAAS/lC,KAAKgE,SAAU2hC,GACxC3lC,KAAKokC,UAAY0B,EAAW9lC,KAAKgE,UAAU,IAE3ChE,KAAK0mC,UAET,CAQAA,WACE1mC,KAAK2mC,kBAAkB3mC,KAAKgE,SAAUhE,KAAKokC,WAC3CpkC,KAAKokC,UAAY2B,EAAS/lC,KAAKokC,UAAW0B,EAAW9lC,KAAKgE,UAC5D,CAEA2iC,kBAAkB3iC,EAAUogC,GAC1BpkC,KAAKmmC,eAAeniC,GAAYhE,KAAKmmC,eAAeniC,IAAa,GACjEhE,KAAKmmC,eAAeniC,GAAUG,KAAKigC,EACrC,CAEAwC,sBAEE,IADA,IAAIC,GAAc,EACVxuC,EAAI,EAAGA,EAAIstC,EAAUlkC,OAAQpJ,IACnCwuC,EAAcA,GAAe7mC,KAAKymC,qBAAqBd,EAAUttC,IAEnE,OAAOwuC,CACT,CAEAJ,qBAAqBziC,GACnB,OAAOhE,KAAKmmC,eAAeniC,IAAahE,KAAKmmC,eAAeniC,GAAUvC,SAAWqkC,EAAW9hC,GAAUvC,MACxG,CASAqlC,cACE,OAAO9mC,KAAKtB,QAAQ2lC,OACtB,CAEA0C,cACE,OAAO/mC,KAAKtB,QAAQ4lC,OACtB,CAEA0C,aAAa9H,EAASv7B,EAAUsjC,GAC9B,GAAqC,UAAlC/H,EAAQp7B,KAAK,iBAA+B,OAAO,EAUtD,GARK9D,KAAKtB,QAAQwoC,eAEhBlnC,KAAKgE,SAAWhE,KAAKsmC,iBACrBtmC,KAAKokC,UAAYpkC,KAAKumC,mBAGxB5iC,EAAS2D,OAAOs8B,EAAIO,mBAAmBxgC,EAAUu7B,EAASl/B,KAAKgE,SAAUhE,KAAKokC,UAAWpkC,KAAK8mC,cAAe9mC,KAAK+mC,iBAE9G/mC,KAAKtB,QAAQwoC,aAAc,CAI7B,IAHA,IAAIC,EAAa,IAEbC,EAAiB,CAACpjC,SAAUhE,KAAKgE,SAAUogC,UAAWpkC,KAAKokC,YACxDpkC,KAAK4mC,uBAAuB,CACjC,IAAIS,EAAUzD,EAAIK,YAAYtgC,EAAUsjC,GAAS,GAAO,EAAOjnC,KAAKtB,QAAQ4oC,oBAC5E,GAAe,IAAZD,EACD,OAGCA,EAAUF,IACXA,EAAaE,EACbD,EAAiB,CAACpjC,SAAUhE,KAAKgE,SAAUogC,UAAWpkC,KAAKokC,YAG7DpkC,KAAKwmC,cAEL7iC,EAAS2D,OAAOs8B,EAAIO,mBAAmBxgC,EAAUu7B,EAASl/B,KAAKgE,SAAUhE,KAAKokC,UAAWpkC,KAAK8mC,cAAe9mC,KAAK+mC,eACpH,CAGA/mC,KAAKgE,SAAWojC,EAAepjC,SAC/BhE,KAAKokC,UAAYgD,EAAehD,UAChCzgC,EAAS2D,OAAOs8B,EAAIO,mBAAmBxgC,EAAUu7B,EAASl/B,KAAKgE,SAAUhE,KAAKokC,UAAWpkC,KAAK8mC,cAAe9mC,KAAK+mC,eACpH,CACF,EAIFb,EAAazZ,SAAW,CAOtBzoB,SAAU,OAOVogC,UAAW,OASX8C,cAAc,EASdI,oBAAoB,EAOpBjD,QAAS,EAOTC,QAAS,GCnMX,MAAMiD,EAAgB,CAAC,YAAa,aAC9BC,EAAgB,CAAC,mBAAoB,oBAErCC,EACO,SAAStqC,EAASuqC,EAAWzqC,GACtC+B,GAAQ,EAAM7B,EAASuqC,EAAWzqC,EACpC,EAHIwqC,EAKQ,SAAStqC,EAASuqC,EAAWzqC,GACvC+B,GAAQ,EAAO7B,EAASuqC,EAAWzqC,EACrC,EAmCF,SAAS+B,EAAQ2oC,EAAMxqC,EAASuqC,EAAWzqC,GAGzC,IAFAE,EAAU,IAAEA,GAAS8gC,GAAG,IAEXx8B,OAAb,CAEA,IAAImmC,EAAYD,EAAOJ,EAAY,GAAKA,EAAY,GAChDM,EAAcF,EAAOH,EAAc,GAAKA,EAAc,GAG1DM,IAEA3qC,EACGiI,SAASsiC,GACTjjC,IAAI,aAAc,QAErBnH,uBAAsB,KACpBH,EAAQiI,SAASwiC,GACbD,GAAMxqC,EAAQ4qC,MAAM,IAI1BzqC,uBAAsB,KAIpBH,EAAQ,GAAG1B,YACX0B,EACGsH,IAAI,aAAc,IAClBW,SAASyiC,EAAY,IAI1B1qC,EAAQsI,IAAImwB,EAAcz4B,IAG1B,WACOwqC,GAAMxqC,EAAQgb,OACnB2vB,IACI7qC,GAAIA,EAAG4S,MAAM1S,EACnB,GApC2B,CAuC3B,SAAS2qC,IACP3qC,EAAQ,GAAG1C,MAAMkhB,mBAAqB,EACtCxe,EAAQ49B,YAAY,GAAG6M,KAAaC,KAAeH,IACrD,CACF,CC/FA,MAAMM,EAAmB,WAEvB,IADA,IAAIl5B,EAAW,CAAC,SAAU,MAAO,IAAK,KAAM,IACnCzW,EAAE,EAAGA,EAAIyW,EAASrN,OAAQpJ,IACjC,GAAI,GAAGyW,EAASzW,uBAAwBI,OACtC,OAAOA,OAAO,GAAGqW,EAASzW,sBAG9B,OAAO,CACR,CARwB,GAUnB4vC,EAAW,CAACnoC,EAAI8Q,KACpB9Q,EAAGzJ,KAAKua,GAAMnO,MAAM,KAAKjM,SAAQoQ,IAC/B,IAAE,IAAIA,KAAgB,UAATgK,EAAmB,UAAY,kBAAkB,GAAGA,eAAmB,CAAC9Q,GAAI,GACzF,EAGJ,IAAIooC,EAAW,CACbC,UAAW,CACTC,MAAO,CAAC,EACRC,OAAQ,CAAC,GAEXC,aAAc,CAAC,GAmIjB,SAASC,EAAuBC,EAAUpiC,EAAS+I,GACjD,IAAIosB,EAAO5rB,EAAOjO,MAAMC,UAAUP,MAAMQ,KAAKxB,UAAW,GACxD,IAAE3H,QAAQ+Q,GAAGpD,GAAS,WAChBm1B,GAAS10B,aAAa00B,GAC1BA,EAAQh9B,YAAW,WACjB4Q,EAASU,MAAM,KAAMF,EACvB,GAAG64B,GAAY,GACjB,GACF,CAxIAN,EAASC,UAAUC,MAAS,CAC1BK,aAAc,WACZR,EAAS,IAAEjoC,MAAO,OACpB,EACA0oC,cAAe,WACJ,IAAE1oC,MAAM3J,KAAK,SAEpB4xC,EAAS,IAAEjoC,MAAO,SAGlB,IAAEA,MAAMoG,QAAQ,mBAEpB,EACAuiC,eAAgB,WACL,IAAE3oC,MAAM3J,KAAK,UAEpB4xC,EAAS,IAAEjoC,MAAO,UAElB,IAAEA,MAAMoG,QAAQ,oBAEpB,EACAwiC,kBAAmB,SAASrvC,GAC1B,IAAImuC,EAAY,IAAE1nC,MAAM3J,KAAK,YAG7BkD,EAAEsvC,kBAEe,KAAdnB,EACDD,EAAkB,IAAEznC,MAAO0nC,GAAW,WACpC,IAAE1nC,MAAMoG,QAAQ,YAClB,IAEA,IAAEpG,MAAM8oC,UAAU1iC,QAAQ,YAE9B,EACA2iC,oBAAqB,WACnB,IAAIniC,EAAK,IAAE5G,MAAM3J,KAAK,gBACtB,IAAE,IAAIuQ,KAAMovB,eAAe,oBAAqB,CAAC,IAAEh2B,OACrD,GAIFkoC,EAASI,aAAaU,gBAAmBnT,IACvCA,EAAM5rB,IAAI,mBAAoBi+B,EAASC,UAAUC,MAAMK,cACvD5S,EAAMrsB,GAAG,mBAAoB,cAAe0+B,EAASC,UAAUC,MAAMK,aAAa,EAKpFP,EAASI,aAAaW,iBAAoBpT,IACxCA,EAAM5rB,IAAI,mBAAoBi+B,EAASC,UAAUC,MAAMM,eACvD7S,EAAMrsB,GAAG,mBAAoB,eAAgB0+B,EAASC,UAAUC,MAAMM,cAAc,EAItFR,EAASI,aAAaY,kBAAqBrT,IACzCA,EAAM5rB,IAAI,mBAAoBi+B,EAASC,UAAUC,MAAMO,gBACvD9S,EAAMrsB,GAAG,mBAAoB,gBAAiB0+B,EAASC,UAAUC,MAAMO,eAAe,EAIxFT,EAASI,aAAaa,qBAAwBtT,IAC5CA,EAAM5rB,IAAI,mBAAoBi+B,EAASC,UAAUC,MAAMQ,mBACvD/S,EAAMrsB,GAAG,mBAAoB,oCAAqC0+B,EAASC,UAAUC,MAAMQ,kBAAkB,EAI/GV,EAASI,aAAac,uBAA0BvT,IAC9CA,EAAM5rB,IAAI,mCAAoCi+B,EAASC,UAAUC,MAAMW,qBACvElT,EAAMrsB,GAAG,mCAAoC,sBAAuB0+B,EAASC,UAAUC,MAAMW,oBAAoB,EAMnHb,EAASC,UAAUE,OAAU,CAC3BgB,eAAgB,SAASC,GACnBtB,GACFsB,EAAOz/B,MAAK,WACV,IAAE7J,MAAMg2B,eAAe,sBACzB,IAGFsT,EAAOxlC,KAAK,cAAe,SAC7B,EACAylC,eAAgB,SAASD,GACnBtB,GACFsB,EAAOz/B,MAAK,WACV,IAAE7J,MAAMg2B,eAAe,sBACzB,IAGFsT,EAAOxlC,KAAK,cAAe,SAC7B,EACA0lC,gBAAiB,SAASjwC,EAAGkwC,GAC3B,IAAI/P,EAASngC,EAAE0Y,UAAUxP,MAAM,KAAK,GACtB,IAAE,SAASi3B,MAAWqH,IAAI,mBAAmB0I,OAEnD5/B,MAAK,WACX,IAAI2H,EAAQ,IAAExR,MACdwR,EAAMwkB,eAAe,mBAAoB,CAACxkB,GAC5C,GACF,GAIF02B,EAASI,aAAaoB,mBAAqB,SAAS3P,GAClD,IAAI4P,EAAY,IAAE,mBACdC,EAAY,CAAC,WAAY,UAAW,UAWxC,GATG7P,IACwB,iBAAfA,EACR6P,EAAUzlC,KAAK41B,GACc,iBAAfA,GAAoD,iBAAlBA,EAAW,GAC3D6P,EAAYA,EAAUt3B,OAAOynB,GAE7BjoB,QAAQW,MAAM,iCAGfk3B,EAAUloC,OAAO,CAClB,IAAI6N,EAAYs6B,EAAU9tB,KAAKxkB,GACtB,cAAcA,MACpBoL,KAAK,KAER,IAAEjK,QAAQwR,IAAIqF,GAAW9F,GAAG8F,EAAW44B,EAASC,UAAUE,OAAOmB,gBACnE,CACF,EAYAtB,EAASI,aAAauB,kBAAoB,SAASrB,GACjD,IAAIc,EAAS,IAAE,iBACZA,EAAO7nC,QACR8mC,EAAuBC,EAAU,oBAAqBN,EAASC,UAAUE,OAAOgB,eAAgBC,EAEpG,EAEApB,EAASI,aAAawB,kBAAoB,SAAStB,GACjD,IAAIc,EAAS,IAAE,iBACZA,EAAO7nC,QACR8mC,EAAuBC,EAAU,oBAAqBN,EAASC,UAAUE,OAAOkB,eAAgBD,EAEpG,EAEApB,EAASI,aAAayB,0BAA4B,SAASlU,GACzD,IAAImS,EAAmB,OAAO,EAC9B,IAAIsB,EAASzT,EAAM99B,KAAK,+CAGxB,IAAIiyC,EAA4B,SAAUC,GACxC,IAAIhK,EAAU,IAAEgK,EAAoB,GAAG3nC,QAGvC,OAAQ2nC,EAAoB,GAAGr5B,MAC7B,IAAK,aACiC,WAAhCqvB,EAAQn8B,KAAK,gBAAwE,gBAAzCmmC,EAAoB,GAAGC,eACrEjK,EAAQjK,eAAe,sBAAuB,CAACiK,EAASxnC,OAAOkR,cAE7B,WAAhCs2B,EAAQn8B,KAAK,gBAAwE,gBAAzCmmC,EAAoB,GAAGC,eACrEjK,EAAQjK,eAAe,sBAAuB,CAACiK,IAEJ,UAAzCgK,EAAoB,GAAGC,gBACzBjK,EAAQtL,QAAQ,iBAAiB7wB,KAAK,cAAc,UACpDm8B,EAAQtL,QAAQ,iBAAiBqB,eAAe,sBAAuB,CAACiK,EAAQtL,QAAQ,oBAE1F,MAEF,IAAK,YACHsL,EAAQtL,QAAQ,iBAAiB7wB,KAAK,cAAc,UACpDm8B,EAAQtL,QAAQ,iBAAiBqB,eAAe,sBAAuB,CAACiK,EAAQtL,QAAQ,mBACxF,MAEF,QACE,OAAO,EAGb,EAEA,GAAI2U,EAAO7nC,OAET,IAAK,IAAIpJ,EAAI,EAAGA,GAAKixC,EAAO7nC,OAAS,EAAGpJ,IAAK,CACrB,IAAI2vC,EAAiBgC,GAC3BG,QAAQb,EAAOjxC,GAAI,CAAElB,YAAY,EAAMizC,WAAW,EAAMC,eAAe,EAAOC,SAAS,EAAMC,gBAAiB,CAAC,cAAe,UAChJ,CAEJ,EAEArC,EAASI,aAAakC,mBAAqB,WACzC,IAAIC,EAAY,IAAEtyC,UAElB+vC,EAASI,aAAaU,gBAAgByB,GACtCvC,EAASI,aAAaW,iBAAiBwB,GACvCvC,EAASI,aAAaY,kBAAkBuB,GACxCvC,EAASI,aAAaa,qBAAqBsB,GAC3CvC,EAASI,aAAac,uBAAuBqB,EAE/C,EAEAvC,EAASI,aAAaoC,mBAAqB,WACzC,IAAID,EAAY,IAAEtyC,UAClB+vC,EAASI,aAAayB,0BAA0BU,GAChDvC,EAASI,aAAauB,kBAAkB,KACxC3B,EAASI,aAAawB,oBACtB5B,EAASI,aAAaoB,oBACxB,EAGAxB,EAAS7lB,KAAO,SAAUsoB,EAAIvwC,GAC5B67B,EAAO,IAAEx9B,SAAS,YACc,IAA1B,0BACFyvC,EAASI,aAAakC,qBACtBtC,EAASI,aAAaoC,qBACtB,yBAAwB,EAE5B,IAEGtwC,IACDA,EAAW8tC,SAAWA,EAEtB9tC,EAAWwwC,SAAW1C,EAASI,aAAaoC,mBAEhD,EC1PA,IAEIG,EACAC,EACAC,EACAC,EALAC,EAAQ,CAAC,EAMTC,GAAW,EACXC,GAAW,EAEf,SAASC,EAAW7xC,GAKlB,GAJAyG,KAAKyiB,oBAAoB,YAAa4oB,GACtCrrC,KAAKyiB,oBAAoB,WAAY2oB,IAGhCD,EAAU,CACb,IAAIG,EAAW,UAAQ,MAAON,GAAczxC,GAC5C,IAAEyG,MAAMoG,QAAQklC,EAClB,CAEAN,EAAa,KACbE,GAAW,EACXC,GAAW,CACb,CAEA,SAASE,EAAY9xC,GAGnB,IAFI,IAAS,8BAA8BA,EAAE0E,iBAE1CitC,EAAU,CACX,IAIIK,EAJAhlC,EAAIhN,EAAEiyC,QAAQ,GAAGC,MAEjBC,EAAKb,EAAYtkC,EAGrB4kC,GAAW,EACXJ,GAAc,IAAInxC,MAAOE,UAAYgxC,EAClCntC,KAAKguC,IAAID,IAAO,6BAA6BX,GAAe,8BAC7DQ,EAAMG,EAAK,EAAI,OAAS,SAKvBH,IACDhyC,EAAE0E,iBACFmtC,EAAWv7B,MAAM7P,KAAMI,WACvB,IAAEJ,MACCoG,QAAQ,UAAQ,QAAS7O,OAAOC,OAAO,CAAC,EAAG+B,IAAKgyC,GAChDnlC,QAAQ,UAAQ,QAAQmlC,IAAOh0C,OAAOC,OAAO,CAAC,EAAG+B,KAExD,CAEF,CAEA,SAASqyC,EAAaryC,GAEK,IAArBA,EAAEiyC,QAAQ/pC,SACZopC,EAAYtxC,EAAEiyC,QAAQ,GAAGC,MACzBT,EAAazxC,EACb2xC,GAAW,EACXC,GAAW,EACXL,GAAY,IAAIlxC,MAAOE,UACvBkG,KAAK5H,iBAAiB,YAAaizC,EAAa,CAAExyC,SAAU,IAAS,+BACrEmH,KAAK5H,iBAAiB,WAAYgzC,GAAY,GAElD,CAEA,SAAS/oB,IACPriB,KAAK5H,kBAAoB4H,KAAK5H,iBAAiB,aAAcwzC,EAAc,CAAE/yC,SAAU,GACzF,CAMA,MAAMgzC,EACJhvB,cACE7c,KAAKu5B,QAAU,QACfv5B,KAAK8rC,QAAU,iBAAkB3zC,SAASsE,gBAC1CuD,KAAK/B,gBAAiB,EACtB+B,KAAK+rC,cAAgB,GACrB/rC,KAAKgsC,cAAgB,IACrBhsC,KAAKgY,OACP,CAEAA,QACE,wBAAwB,CAAElS,MAAOuc,GACjC,sBAAsB,CAAEvc,MAAOuc,GAE/B,SAAO,CAAC,OAAQ,KAAM,OAAQ,UAAU,WACtC,kBAAgB,QAAQriB,QAAU,CAAE8F,MAAO,WACzC,IAAE9F,MAAMwJ,GAAG,QAAS,SACtB,EACF,GACF,EAUFyhC,EAAMgB,eAAiB,WACrB,cAAc,IAAIJ,EAAU,IAC9B,EAKAZ,EAAMiB,kBAAoB,WACxB,gBAAgB,WACdlsC,KAAK6J,MAAK,SAASxR,EAAGyH,GACpB,IAAEA,GAAI2nB,KAAK,6CAA6C,SAASzpB,GAG/DmuC,EAAYnuC,EACd,GACF,IAEA,IAAImuC,EAAc,SAASnuC,GACzB,IAQIouC,EAPArM,EADU/hC,EAAMquC,eACA,GAMhBz7B,EALa,CACXwhB,WAAY,YACZka,UAAW,YACXja,SAAU,WAEMr0B,EAAM4S,MAIzB,eAAgBnY,QAAuC,mBAAtBA,OAAO8zC,WACzCH,EAAiB,IAAI3zC,OAAO8zC,WAAW37B,EAAM,CAC3C,SAAW,EACX,YAAc,EACd,QAAWmvB,EAAM1L,QACjB,QAAW0L,EAAMzL,QACjB,QAAWyL,EAAMyM,QACjB,QAAWzM,EAAM0M,WAGnBL,EAAiBj0C,SAASu0C,YAAY,eACvBC,eAAe/7B,GAAM,GAAM,EAAMnY,OAAQ,EAAGsnC,EAAM1L,QAAS0L,EAAMzL,QAASyL,EAAMyM,QAASzM,EAAM0M,SAAS,GAAO,GAAO,GAAO,EAAO,EAAW,MAEhK1M,EAAMz9B,OAAOoW,cAAc0zB,EAC7B,CACF,CACF,EAEAnB,EAAM5oB,KAAO,gBACgB,IAAjB,IAAW,YACnB4oB,EAAMgB,eAAe,KACrBhB,EAAMiB,kBAAkB,KAE5B,ECjJA,MAAMU,UAAiB1G,EASrBhK,OAAO/+B,EAASuB,GACdsB,KAAK2D,SAAWxG,EAChB6C,KAAKtB,QAAU,WAAS,CAAC,EAAGkuC,EAASngB,SAAUzsB,KAAK2D,SAAStN,OAAQqI,GACrEsB,KAAK3I,UAAY,WAGjB4zC,EAAM5oB,KAAK,KACX6lB,EAAS7lB,KAAK,KAEdriB,KAAKgY,QAEL+kB,EAASY,SAAS,WAAY,CAC5B,MAAS,SACT,MAAS,SACT,OAAU,SAEd,CAOA3lB,QACE,IAAI60B,EAAM7sC,KAAK2D,SAASG,KAAK,MAE7B9D,KAAK8sC,SAAW,IAAE,iBAAiBD,OAASprC,OAAS,IAAE,iBAAiBorC,OAAW,IAAE,eAAeA,OACpG7sC,KAAK8sC,SAAShpC,KAAK,CACjB,gBAAiB+oC,EACjB,iBAAiB,EACjB,gBAAiBA,EACjB,iBAAiB,EACjB,iBAAiB,IAGnB7sC,KAAK+sC,kBAAkB/sC,KAAK8sC,SAAS/M,SAElC//B,KAAKtB,QAAQsuC,YACdhtC,KAAKinC,QAAUjnC,KAAK2D,SAASq/B,QAAQ,IAAMhjC,KAAKtB,QAAQsuC,aAExDhtC,KAAKinC,QAAU,UAIoC,IAA1CjnC,KAAK2D,SAASG,KAAK,0BAEkB,IAAnC9D,KAAKitC,eAAenpC,KAAK,OAClC9D,KAAKitC,eAAenpC,KAAK,KAAM2xB,EAAY,EAAG,cAGhDz1B,KAAK2D,SAASG,KAAK,kBAAmB9D,KAAKitC,eAAenpC,KAAK,QAGjE9D,KAAK2D,SAASG,KAAK,CACjB,cAAe,OACf,gBAAiB+oC,EACjB,cAAeA,IAGjBK,MAAMl1B,QACNhY,KAAKqP,SACP,CAEA+2B,sBAEE,IAAIpiC,EAAWhE,KAAK2D,SAAS,GAAGtM,UAAU6M,MAAM,4BAChD,OAAGF,EACMA,EAAS,GAET,QAEX,CAEAqiC,uBAEE,IAAI8G,EAAqB,cAAcrnB,KAAK9lB,KAAKitC,eAAenpC,KAAK,UACrE,OAAGqpC,EACMA,EAAmB,GAGrBD,MAAM7G,sBACf,CAUAW,eACEhnC,KAAK2D,SAASo3B,YAAY,gBAAgB/6B,KAAKgE,0BAA0BhE,KAAKokC,aAC9E8I,MAAMlG,aAAahnC,KAAKitC,eAAgBjtC,KAAK2D,SAAU3D,KAAKinC,SAC5DjnC,KAAK2D,SAASyB,SAAS,gBAAgBpF,KAAKgE,0BAA0BhE,KAAKokC,YAC7E,CASA2I,kBAAkBjtC,GAChBE,KAAKitC,eAAiB,IAAEntC,EAC1B,CAOAuP,UACE,IAAImC,EAAQxR,KACRotC,EAAW,iBAAkB30C,aAA0C,IAAxBA,OAAO40C,aAE1DrtC,KAAK2D,SAAS6F,GAAG,CACf,kBAAmBxJ,KAAKijC,KAAKxb,KAAKznB,MAClC,mBAAoBA,KAAKkjC,MAAMzb,KAAKznB,MACpC,oBAAqBA,KAAKuL,OAAOkc,KAAKznB,MACtC,sBAAuBA,KAAKgnC,aAAavf,KAAKznB,QAGhDA,KAAK8sC,SAAS7iC,IAAI,oBACfT,GAAG,oBAAoB,SAASjQ,GAC/BiY,EAAMu7B,kBAAkB/sC,QAIS,IAA9BwR,EAAM9S,QAAQ4uC,aAGdF,GAAY57B,EAAM9S,QAAQ6uC,QAAgD,IAAvC/7B,EAAM7N,SAAS07B,SAAS,aAE5D9lC,EAAE0E,gBAER,IAEG+B,KAAKtB,QAAQ6uC,QACdvtC,KAAK8sC,SAAS7iC,IAAI,iDACjBT,GAAG,0BAA0B,WAC5BgI,EAAMu7B,kBAAkB/sC,MAExB,IAAIwtC,EAAW,IAAE,QAAQn3C,YACS,IAAxBm3C,EAAkB,WAA4C,UAAvBA,EAASC,YACxD5mC,aAAa2K,EAAMD,SACnBC,EAAMD,QAAUhT,YAAW,WACzBiT,EAAMyxB,OACNzxB,EAAMs7B,SAASz2C,KAAK,SAAS,EAC/B,GAAGmb,EAAM9S,QAAQgvC,YAErB,IAAGlkC,GAAG,yBAA0B4sB,GAAqB,WACnDvvB,aAAa2K,EAAMD,SACnBC,EAAMD,QAAUhT,YAAW,WACzBiT,EAAM0xB,QACN1xB,EAAMs7B,SAASz2C,KAAK,SAAS,EAC/B,GAAGmb,EAAM9S,QAAQgvC,WACnB,KACG1tC,KAAKtB,QAAQivC,WACd3tC,KAAK2D,SAASsG,IAAI,iDACbT,GAAG,0BAA0B,WAC5B3C,aAAa2K,EAAMD,QACrB,IAAG/H,GAAG,yBAA0B4sB,GAAqB,WACnDvvB,aAAa2K,EAAMD,SACnBC,EAAMD,QAAUhT,YAAW,WACzBiT,EAAM0xB,QACN1xB,EAAMs7B,SAASz2C,KAAK,SAAS,EAC/B,GAAGmb,EAAM9S,QAAQgvC,WACnB,MAGR1tC,KAAK8sC,SAAShxC,IAAIkE,KAAK2D,UAAU6F,GAAG,uBAAuB,SAASjQ,GAElE,IAAI0mC,EAAU,IAAEjgC,MAEhB+8B,EAASI,UAAU5jC,EAAG,WAAY,CAChC0pC,KAAM,WACAhD,EAAQp8B,GAAG2N,EAAMs7B,YAAc7M,EAAQp8B,GAAG,qBAC5C2N,EAAMyxB,OACNzxB,EAAM7N,SAASG,KAAK,YAAa,GAAGzF,QACpC9E,EAAE0E,iBAEN,EACAilC,MAAO,WACL1xB,EAAM0xB,QACN1xB,EAAMs7B,SAASzuC,OACjB,GAEJ,GACF,CAOAuvC,kBACG,IAAIC,EAAQ,IAAE11C,SAASmD,MAAMylC,IAAI/gC,KAAK2D,UAClC6N,EAAQxR,KACZ6tC,EAAM5jC,IAAI,qCACJT,GAAG,qCAAqC,SAAUjQ,GAC9CiY,EAAMs7B,SAASjpC,GAAGtK,EAAE+I,SAAWkP,EAAMs7B,SAAS/0C,KAAKwB,EAAE+I,QAAQb,QAG7D+P,EAAM7N,SAASE,GAAGtK,EAAE+I,SAAWkP,EAAM7N,SAAS5L,KAAKwB,EAAE+I,QAAQb,SAGhE+P,EAAM0xB,QACN2K,EAAM5jC,IAAI,qCACZ,GACR,CAQAg5B,OAgBE,GAVAjjC,KAAK2D,SAASyC,QAAQ,sBAAuBpG,KAAK2D,SAASG,KAAK,OAChE9D,KAAK8sC,SAAS1nC,SAAS,SAClBtB,KAAK,CAAC,iBAAiB,IAG5B9D,KAAK2D,SAASyB,SAAS,cACvBpF,KAAKgnC,eACLhnC,KAAK2D,SAASo3B,YAAY,cAAc31B,SAAS,WAC5CtB,KAAK,CAAC,eAAe,IAEvB9D,KAAKtB,QAAQovC,UAAU,CACxB,IAAI/P,EAAahB,EAAST,cAAct8B,KAAK2D,UAC1Co6B,EAAWt8B,QACZs8B,EAAWE,GAAG,GAAG5/B,OAErB,CAEG2B,KAAKtB,QAAQqvC,cAAe/tC,KAAK4tC,kBAEhC5tC,KAAKtB,QAAQo/B,WACff,EAASe,UAAU99B,KAAK2D,UAO1B3D,KAAK2D,SAASyC,QAAQ,mBAAoB,CAACpG,KAAK2D,UAClD,CAOAu/B,QACE,IAAIljC,KAAK2D,SAAS07B,SAAS,WACzB,OAAO,EAETr/B,KAAK2D,SAASo3B,YAAY,WACrBj3B,KAAK,CAAC,eAAe,IAE1B9D,KAAK8sC,SAAS/R,YAAY,SACrBj3B,KAAK,iBAAiB,GAM3B9D,KAAK2D,SAASyC,QAAQ,mBAAoB,CAACpG,KAAK2D,WAE5C3D,KAAKtB,QAAQo/B,WACff,EAASoB,aAAan+B,KAAK2D,SAE/B,CAMA4H,SACE,GAAGvL,KAAK2D,SAAS07B,SAAS,WAAW,CACnC,GAAGr/B,KAAK8sC,SAASz2C,KAAK,SAAU,OAChC2J,KAAKkjC,OACP,MACEljC,KAAKijC,MAET,CAMAjnB,WACEhc,KAAK2D,SAASsG,IAAI,eAAekO,OACjCnY,KAAK8sC,SAAS7iC,IAAI,gBAClB,IAAE9R,SAASmD,MAAM2O,IAAI,oCAEvB,EAGF2iC,EAASngB,SAAW,CAOlBugB,YAAa,KAObU,WAAY,IAOZH,OAAO,EAOPI,WAAW,EAOXtJ,QAAS,EAOTC,QAAS,EAOTtgC,SAAU,OAOVogC,UAAW,OAOX8C,cAAc,EASdI,oBAAoB,EAOpBxJ,WAAW,EAOXgQ,WAAW,EAOXC,cAAc,EAOdT,aAAa,GC7Zf,MAAMU,UAAqB/R,EASzBC,OAAO/+B,EAASuB,GACdsB,KAAK2D,SAAWxG,EAChB6C,KAAKtB,QAAU,WAAS,CAAC,EAAGsvC,EAAavhB,SAAUzsB,KAAK2D,SAAStN,OAAQqI,GACzEsB,KAAK3I,UAAY,eAEjB4zC,EAAM5oB,KAAK,KAEXriB,KAAKgY,QAEL+kB,EAASY,SAAS,eAAgB,CAChC,MAAS,OACT,MAAS,OACT,YAAe,OACf,SAAY,KACZ,WAAc,OACd,WAAc,WACd,OAAU,SAEd,CAOA3lB,QACEupB,EAAKC,QAAQxhC,KAAK2D,SAAU,YAE5B,IAAIsqC,EAAOjuC,KAAK2D,SAAS5L,KAAK,iCAC9BiI,KAAK2D,SAASnC,SAAS,+BAA+BA,SAAS,wBAAwB4D,SAAS,aAEhGpF,KAAKkuC,WAAaluC,KAAK2D,SAAS5L,KAAK,mBACrCiI,KAAKs+B,MAAQt+B,KAAK2D,SAASnC,SAAS,mBACpCxB,KAAKs+B,MAAMvmC,KAAK,0BAA0BqN,SAASpF,KAAKtB,QAAQyvC,eAEjC,SAA3BnuC,KAAKtB,QAAQ0lC,UACTpkC,KAAK2D,SAAS07B,SAASr/B,KAAKtB,QAAQ0vC,aAAe,KAASpuC,KAAK2D,SAASq/B,QAAQ,kBAAkBn/B,GAAG,MACvG7D,KAAKtB,QAAQ0lC,UAAY,QACzB6J,EAAK7oC,SAAS,gBAEdpF,KAAKtB,QAAQ0lC,UAAY,OACzB6J,EAAK7oC,SAAS,gBAGW,UAA3BpF,KAAKtB,QAAQ0lC,UACb6J,EAAK7oC,SAAS,cAEd6oC,EAAK7oC,SAAS,eAGpBpF,KAAKquC,SAAU,EACfruC,KAAKqP,SACP,CAEAi/B,cACE,MAAqC,UAA9BtuC,KAAKs+B,MAAM75B,IAAI,YAAkE,WAAxCzE,KAAK2D,SAASc,IAAI,iBACpE,CAEA8pC,SACE,OAAOvuC,KAAK2D,SAAS07B,SAAS,gBAAmB,MAAUr/B,KAAK2D,SAAS07B,SAAS,aACpF,CAOAhwB,UACE,IAAImC,EAAQxR,KACRotC,EAAW,iBAAkB30C,aAA0C,IAAxBA,OAAO40C,aACtDmB,EAAW,8BA6BXxuC,KAAKtB,QAAQ+vC,WAAarB,IAC5BptC,KAAKkuC,WAAW1kC,GAAG,oDA3BD,SAASjQ,GAC3B,IAAIs8B,EAAQ,IAAEt8B,EAAE+I,QAAQihC,aAAa,KAAM,IAAIiL,KAC3CE,EAAS7Y,EAAMwJ,SAASmP,GACxBG,EAA6C,SAAhC9Y,EAAM/xB,KAAK,iBACxBg+B,EAAOjM,EAAMr0B,SAAS,wBAE1B,GAAIktC,EACF,GAAIC,EAAY,CACd,IAAKn9B,EAAM9S,QAAQqvC,eACZv8B,EAAM9S,QAAQ+vC,YAAcrB,GAC7B57B,EAAM9S,QAAQ4uC,aAAeF,EACjC,OAEF7zC,EAAEq1C,2BACFr1C,EAAE0E,iBACFuT,EAAMq9B,MAAMhZ,EACd,MAEEt8B,EAAEq1C,2BACFr1C,EAAE0E,iBACFuT,EAAMs9B,MAAMhN,GACZjM,EAAM/5B,IAAI+5B,EAAM0N,aAAa/xB,EAAM7N,SAAU,IAAI6qC,MAAa1qC,KAAK,iBAAiB,EAG1F,IAOG0N,EAAM9S,QAAQqwC,oBACf/uC,KAAKkuC,WAAW1kC,GAAG,yBAAyB,WAC9B,IAAExJ,MACKq/B,SAASmP,IAE1Bh9B,EAAMq9B,OAEV,IAGEzB,GAAYptC,KAAKtB,QAAQswC,sBAAqBhvC,KAAKtB,QAAQuwC,cAAe,GAEzEjvC,KAAKtB,QAAQuwC,cAChBjvC,KAAKkuC,WAAW1kC,GAAG,8BAA8B,WAC/C,IAAIqsB,EAAQ,IAAE71B,MACH61B,EAAMwJ,SAASmP,KAGxB3nC,aAAagvB,EAAMx/B,KAAK,WACxBw/B,EAAMx/B,KAAK,SAAUkI,YAAW,WAC9BiT,EAAMs9B,MAAMjZ,EAAMr0B,SAAS,wBAC7B,GAAGgQ,EAAM9S,QAAQgvC,aAErB,IAAGlkC,GAAG,6BAA8B4sB,GAAqB,WACvD,IAAIP,EAAQ,IAAE71B,MAEd,GADa61B,EAAMwJ,SAASmP,IACdh9B,EAAM9S,QAAQwwC,UAAW,CACrC,GAAoC,SAAhCrZ,EAAM/xB,KAAK,kBAA+B0N,EAAM9S,QAAQ+vC,UAAa,OAAO,EAEhF5nC,aAAagvB,EAAMx/B,KAAK,WACxBw/B,EAAMx/B,KAAK,SAAUkI,YAAW,WAC9BiT,EAAMq9B,MAAMhZ,EACd,GAAGrkB,EAAM9S,QAAQywC,aACnB,CACF,KAEFnvC,KAAKkuC,WAAW1kC,GAAG,2BAA2B,SAASjQ,GACrD,IAGIspC,EACAC,EAJAn/B,EAAW,IAAEpK,EAAE+I,QAAQihC,aAAa,KAAM,iBAC1C6L,EAAQ59B,EAAM8sB,MAAMhyB,MAAM3I,IAAa,EACvCo/B,EAAYqM,EAAQ59B,EAAM8sB,MAAQ36B,EAASg9B,SAAS,MAAM7kC,IAAI6H,GAIlEo/B,EAAUl5B,MAAK,SAASxR,GACtB,GAAI,IAAE2H,MAAM6D,GAAGF,GAGb,OAFAk/B,EAAeE,EAAU9E,GAAG5lC,EAAE,QAC9ByqC,EAAeC,EAAU9E,GAAG5lC,EAAE,GAGlC,IAEA,IAAIg3C,EAAc,WAChBvM,EAAathC,SAAS,WAAWnD,QACjC9E,EAAE0E,gBACJ,EAAGqxC,EAAc,WACfzM,EAAarhC,SAAS,WAAWnD,QACjC9E,EAAE0E,gBACJ,EAAGsxC,EAAU,WACX,IAAIzN,EAAOn+B,EAASnC,SAAS,0BACzBsgC,EAAKrgC,SACP+P,EAAMs9B,MAAMhN,GACZn+B,EAAS5L,KAAK,gBAAgBsG,QAC9B9E,EAAE0E,iBAEN,EAAGuxC,EAAW,WAEZ,IAAItM,EAAQv/B,EAASy7B,OAAO,MAAMA,OAAO,MACzC8D,EAAM1hC,SAAS,WAAWnD,QAC1BmT,EAAMq9B,MAAM3L,GACZ3pC,EAAE0E,gBAEJ,EACIo/B,EAAY,CACd4F,KAAMsM,EACNrM,MAAO,WACL1xB,EAAMq9B,MAAMr9B,EAAM7N,UAClB6N,EAAM08B,WAAWjQ,GAAG,GAAGz8B,SAAS,KAAKnD,QACrC9E,EAAE0E,gBACJ,GAGEmxC,EACE59B,EAAM88B,cACJ98B,EAAM+8B,SACR,WAASlR,EAAW,CAClB8C,KAAMkP,EACNnP,GAAIoP,EACJ1W,KAAM4W,EACN1P,SAAUyP,IAGZ,WAASlS,EAAW,CAClB8C,KAAMkP,EACNnP,GAAIoP,EACJ1W,KAAM2W,EACNzP,SAAU0P,IAIVh+B,EAAM+8B,SACR,WAASlR,EAAW,CAClBzE,KAAM0W,EACNxP,SAAUuP,EACVlP,KAAMoP,EACNrP,GAAIsP,IAGN,WAASnS,EAAW,CAClBzE,KAAMyW,EACNvP,SAAUwP,EACVnP,KAAMoP,EACNrP,GAAIsP,IAKNh+B,EAAM+8B,SACR,WAASlR,EAAW,CAClBzE,KAAM4W,EACN1P,SAAUyP,EACVpP,KAAMkP,EACNnP,GAAIoP,IAGN,WAASjS,EAAW,CAClBzE,KAAM2W,EACNzP,SAAU0P,EACVrP,KAAMkP,EACNnP,GAAIoP,IAIVvS,EAASI,UAAU5jC,EAAG,eAAgB8jC,EAExC,GACF,CAOAuQ,kBACE,MAAMC,EAAQ,IAAE11C,SAASmD,MACzB0E,KAAKyvC,qBACL5B,EAAMrkC,GAAG,6CAA8CjQ,MACpC,IAAEA,EAAE+I,QAAQqyB,QAAQ30B,KAAK2D,UAAUlC,SAGpDzB,KAAK6uC,QACL7uC,KAAKyvC,qBAAoB,GAE7B,CAOAA,qBACE,IAAEt3C,SAASmD,MAAM2O,IAAI,4CACvB,CASA6kC,MAAMhN,GACJ,IAAIvD,EAAMv+B,KAAKs+B,MAAMhyB,MAAMtM,KAAKs+B,MAAMhxB,QAAO,SAASjV,EAAGyH,GACvD,OAAO,IAAEA,GAAI/H,KAAK+pC,GAAMrgC,OAAS,CACnC,KACIiuC,EAAQ5N,EAAK1C,OAAO,iCAAiCuB,SAAS,iCAClE3gC,KAAK6uC,MAAMa,EAAOnR,GAClBuD,EAAKr9B,IAAI,aAAc,UAAUW,SAAS,sBACrCg6B,OAAO,iCAAiCh6B,SAAS,aACtD,IAAI4a,EAAQ4jB,EAAIC,iBAAiB/B,EAAM,MAAM,GAC7C,IAAK9hB,EAAO,CACV,IAAI2vB,EAAsC,SAA3B3vC,KAAKtB,QAAQ0lC,UAAuB,SAAW,QAC1DwL,EAAY9N,EAAK1C,OAAO,+BAC5BwQ,EAAU7U,YAAY,QAAQ4U,KAAYvqC,SAAS,SAASpF,KAAKtB,QAAQ0lC,cACzEpkB,EAAQ4jB,EAAIC,iBAAiB/B,EAAM,MAAM,KAEvC8N,EAAU7U,YAAY,SAAS/6B,KAAKtB,QAAQ0lC,aAAah/B,SAAS,eAEpEpF,KAAKquC,SAAU,CACjB,CACAvM,EAAKr9B,IAAI,aAAc,IACnBzE,KAAKtB,QAAQqvC,cAAgB/tC,KAAK4tC,kBAKtC5tC,KAAK2D,SAASyC,QAAQ,uBAAwB,CAAC07B,GACjD,CAUA+M,MAAMhZ,EAAO0I,GACX,IAAIsR,EAaJ,IAXEA,EADEha,GAASA,EAAMp0B,OACNo0B,OACa,IAAR0I,EACLv+B,KAAKs+B,MAAMyC,KAAI,SAAS1oC,GACjC,OAAOA,IAAMkmC,CACf,IAGWv+B,KAAK2D,UAEc07B,SAAS,cAAgBwQ,EAAS93C,KAAK,cAAc0J,OAAS,EAExE,CACpB,IAAIquC,EAAcD,EAAS93C,KAAK,gBAOhC,GANA+3C,EAAYh0C,IAAI+zC,GAAU/rC,KAAK,CAC7B,iBAAiB,IAChBi3B,YAAY,aAEf8U,EAAS93C,KAAK,yBAAyBgjC,YAAY,sBAE/C/6B,KAAKquC,SAAWwB,EAAS93C,KAAK,eAAe0J,OAAQ,CACvD,IAAIkuC,EAAsC,SAA3B3vC,KAAKtB,QAAQ0lC,UAAuB,QAAU,OAC7DyL,EAAS93C,KAAK,iCAAiC+D,IAAI+zC,GAC1C9U,YAAY,qBAAqB/6B,KAAKtB,QAAQ0lC,aAC9Ch/B,SAAS,SAASuqC,KAC3B3vC,KAAKquC,SAAU,CACjB,CAEAxnC,aAAaipC,EAAYz5C,KAAK,WAC9B2J,KAAKyvC,qBAMLzvC,KAAK2D,SAASyC,QAAQ,uBAAwB,CAACypC,GACjD,CACF,CAMA7zB,WACEhc,KAAKkuC,WAAWjkC,IAAI,oBAAoBiwB,WAAW,iBAC9Ca,YAAY,iFACjB,IAAE5iC,SAASmD,MAAM2O,IAAI,oBACrBs3B,EAAKQ,KAAK/hC,KAAK2D,SAAU,WAC3B,EC5XF,SAASosC,GAAeC,EAAQvpC,GAC9B,IAAIwpC,EAAWD,EAAOvuC,OAyBtB,SAASyuC,IAEU,MADjBD,GAEExpC,GAEJ,CA5BiB,IAAbwpC,GACFxpC,IAGFupC,EAAOnmC,MAAK,WAEV,GAAI7J,KAAKmG,eAAyC,IAAtBnG,KAAK2F,aAC/BuqC,QAEG,CAEH,IAAIC,EAAQ,IAAIprB,MAEZ3V,EAAS,iCACb,IAAE+gC,GAAO1qC,IAAI2J,GAAQ,SAASghC,IAE5B,IAAEpwC,MAAMiK,IAAImF,EAAQghC,GACpBF,GACF,IACAC,EAAMjqC,IAAM,IAAElG,MAAM8D,KAAK,MAC3B,CACF,GAQF,CDkWAkqC,EAAavhB,SAAW,CAOtBwiB,cAAc,EAOdD,qBAAqB,EAOrBE,WAAW,EAOXxB,WAAY,GAOZe,WAAW,EAQXU,YAAa,IAOb/K,UAAW,OAOX2J,cAAc,EAOdgB,oBAAoB,EAOpBZ,cAAe,WAOfC,WAAY,cAOZd,aAAa,GEjdf,MAAM+C,WAAkBpU,EAStBC,OAAO/+B,EAASuB,GACdsB,KAAK2D,SAAWxG,EAChB6C,KAAKtB,QAAW,WAAS,CAAC,EAAG2xC,GAAU5jB,SAAUzsB,KAAK2D,SAAStN,OAAQqI,GACvEsB,KAAK3I,UAAY,YAEjB2I,KAAKgY,OACP,CAMAA,QACE,IAAIs4B,EAAOtwC,KAAK2D,SAASG,KAAK,mBAAqB,GAC/CysC,EAAWvwC,KAAK2D,SAAS5L,KAAK,0BAA0Bu4C,OAE5Dj2C,EAAW2d,QAEXhY,KAAKuwC,SAAWA,EAAS9uC,OAAS8uC,EAAWvwC,KAAK2D,SAAS5L,KAAK,0BAChEiI,KAAK2D,SAASG,KAAK,cAAgBwsC,GAAQ7a,EAAY,EAAG,OAC1Dz1B,KAAK2D,SAASG,KAAK,cAAgBwsC,GAAQ7a,EAAY,EAAG,OAE1Dz1B,KAAKwwC,UAAYxwC,KAAK2D,SAAS5L,KAAK,oBAAoB0J,OAAS,EACjEzB,KAAKywC,SAAWzwC,KAAK2D,SAAS4/B,aAAaprC,SAASmD,KAAM,oBAAoBmG,OAAS,EACvFzB,KAAK0wC,MAAO,EACZ1wC,KAAK2wC,aAAe,CAClBC,gBAAiB5wC,KAAK6wC,YAAYppB,KAAKznB,MACvC8wC,qBAAsB9wC,KAAK+wC,iBAAiBtpB,KAAKznB,OAGnD,IACIgxC,EADA3pB,EAAOrnB,KAAK2D,SAAS5L,KAAK,OAE3BiI,KAAKtB,QAAQuyC,YACdD,EAAWhxC,KAAKkxC,WAChB,IAAEz4C,QAAQ+Q,GAAG,wBAAyBxJ,KAAKkxC,SAASzpB,KAAKznB,QAEzDA,KAAKqP,gBAEiB,IAAb2hC,IAAyC,IAAbA,QAA2C,IAAbA,KAChE3pB,EAAK5lB,OACNsuC,GAAe1oB,EAAMrnB,KAAKmxC,QAAQ1pB,KAAKznB,OAEvCA,KAAKmxC,UAGX,CAMAC,eACEpxC,KAAK0wC,MAAO,EACZ1wC,KAAK2D,SAASsG,IAAI,CAChB,gBAAiBjK,KAAK2wC,aAAaG,qBACnC,sBAAuB9wC,KAAK2wC,aAAaC,gBAC5C,sBAAuB5wC,KAAK2wC,aAAaC,iBAE1C,CAMAC,cACE7wC,KAAKmxC,SACP,CAMAJ,iBAAiBx3C,GACZA,EAAE+I,SAAWtC,KAAK2D,SAAS,IAAK3D,KAAKmxC,SAC1C,CAMA9hC,UACErP,KAAKoxC,eACFpxC,KAAKwwC,UACNxwC,KAAK2D,SAAS6F,GAAG,6BAA8BxJ,KAAK2wC,aAAaG,uBAEjE9wC,KAAK2D,SAAS6F,GAAG,sBAAuBxJ,KAAK2wC,aAAaC,iBAC7D5wC,KAAK2D,SAAS6F,GAAG,sBAAuBxJ,KAAK2wC,aAAaC,kBAEzD5wC,KAAK0wC,MAAO,CACd,CAMAQ,WACE,IAAIF,GAAY32C,EAAWwJ,GAAG7D,KAAKtB,QAAQuyC,YAW3C,OAVGD,EACEhxC,KAAK0wC,OACN1wC,KAAKoxC,eACLpxC,KAAKuwC,SAAS9rC,IAAI,SAAU,SAG1BzE,KAAK0wC,MACP1wC,KAAKqP,UAGF2hC,CACT,CAMAK,cAEA,CAMAF,UACE,IAAInxC,KAAKtB,QAAQ4yC,iBACZtxC,KAAKuxC,aAEN,OADAvxC,KAAKuwC,SAAS9rC,IAAI,SAAU,SACrB,EAGPzE,KAAKtB,QAAQ8yC,cACfxxC,KAAKyxC,gBAAgBzxC,KAAK0xC,iBAAiBjqB,KAAKznB,OAEhDA,KAAK2xC,WAAW3xC,KAAK4xC,YAAYnqB,KAAKznB,MAE1C,CAMAuxC,aACE,OAAKvxC,KAAKuwC,SAAS,KAAOvwC,KAAKuwC,SAAS,IAGjCvwC,KAAKuwC,SAAS,GAAGhhB,wBAAwBhqB,MAAQvF,KAAKuwC,SAAS,GAAGhhB,wBAAwBhqB,GACnG,CAOAosC,WAAW10C,GAET,IADA,IAAI40C,EAAU,GACNx5C,EAAI,EAAGkhB,EAAMvZ,KAAKuwC,SAAS9uC,OAAQpJ,EAAIkhB,EAAKlhB,IAClD2H,KAAKuwC,SAASl4C,GAAGoC,MAAM+F,OAAS,OAChCqxC,EAAQ1tC,KAAKnE,KAAKuwC,SAASl4C,GAAG2b,cAEhC/W,EAAG40C,EACL,CAOAJ,gBAAgBx0C,GACd,IAAI60C,EAAmB9xC,KAAKuwC,SAAS9uC,OAASzB,KAAKuwC,SAASxQ,QAAQz4B,SAAS/B,IAAM,EAC/EwsC,EAAS,GACTC,EAAQ,EAEZD,EAAOC,GAAS,GAChB,IAAI,IAAI35C,EAAI,EAAGkhB,EAAMvZ,KAAKuwC,SAAS9uC,OAAQpJ,EAAIkhB,EAAKlhB,IAAI,CACtD2H,KAAKuwC,SAASl4C,GAAGoC,MAAM+F,OAAS,OAEhC,IAAIyxC,EAAc,IAAEjyC,KAAKuwC,SAASl4C,IAAIiP,SAAS/B,IAC3C0sC,IAAgBH,IAElBC,IADAC,GACgB,GAChBF,EAAgBG,GAElBF,EAAOC,GAAO7tC,KAAK,CAACnE,KAAKuwC,SAASl4C,GAAG2H,KAAKuwC,SAASl4C,GAAG2b,cACxD,CAEA,IAAK,IAAIk+B,EAAI,EAAGC,EAAKJ,EAAOtwC,OAAQywC,EAAIC,EAAID,IAAK,CAC/C,IAAIL,EAAU,IAAEE,EAAOG,IAAIp2B,KAAI,WAAY,OAAO9b,KAAK,EAAI,IAAGmmB,MAC1DtlB,EAAclD,KAAKkD,IAAIgP,MAAM,KAAMgiC,GACvCE,EAAOG,GAAG/tC,KAAKtD,EACjB,CACA5D,EAAG80C,EACL,CAQAH,YAAYC,GACV,IAAIhxC,EAAMlD,KAAKkD,IAAIgP,MAAM,KAAMgiC,GAK/B7xC,KAAK2D,SAASyC,QAAQ,6BAEtBpG,KAAKuwC,SAAS9rC,IAAI,SAAU5D,GAM3Bb,KAAK2D,SAASyC,QAAQ,6BACzB,CAUAsrC,iBAAiBK,GAIf/xC,KAAK2D,SAASyC,QAAQ,6BACtB,IAAK,IAAI/N,EAAI,EAAGkhB,EAAMw4B,EAAOtwC,OAAQpJ,EAAIkhB,EAAMlhB,IAAK,CAClD,IAAI+5C,EAAgBL,EAAO15C,GAAGoJ,OAC1BZ,EAAMkxC,EAAO15C,GAAG+5C,EAAgB,GACpC,GAAIA,GAAe,EACjB,IAAEL,EAAO15C,GAAG,GAAG,IAAIoM,IAAI,CAAC,OAAS,aADnC,CAQAzE,KAAK2D,SAASyC,QAAQ,gCACtB,IAAK,IAAI8rC,EAAI,EAAGG,EAAQD,EAAc,EAAIF,EAAIG,EAAOH,IACnD,IAAEH,EAAO15C,GAAG65C,GAAG,IAAIztC,IAAI,CAAC,OAAS5D,IAMnCb,KAAK2D,SAASyC,QAAQ,gCAbtB,CAcF,CAICpG,KAAK2D,SAASyC,QAAQ,6BACzB,CAMA4V,WACEhc,KAAKoxC,eACLpxC,KAAKuwC,SAAS9rC,IAAI,SAAU,OAC9B,EAMF4rC,GAAU5jB,SAAW,CAOnB6kB,iBAAiB,EAOjBE,eAAe,EAOfP,WAAY,ICxSd,MAAMqB,WAAkBrW,EAQtBC,OAAO/+B,EAASuB,GACdsB,KAAK2D,SAAWxG,EAChB6C,KAAKtB,QAAU,WAAS,CAAC,EAAG4zC,GAAU7lB,SAAUzsB,KAAK2D,SAAStN,OAAQqI,GACtEsB,KAAK3I,UAAY,YAEjB2I,KAAKgY,QAEL+kB,EAASY,SAAS,YAAa,CAC7B,MAAS,OACT,MAAS,OACT,YAAe,OACf,SAAY,KACZ,WAAc,OACd,WAAc,WACd,OAAU,SAEd,CAMA3lB,QACEupB,EAAKC,QAAQxhC,KAAK2D,SAAU,aAEzB3D,KAAKtB,QAAQ6zC,gBACdvyC,KAAK2D,SAASyB,SAAS,aAGzBpF,KAAK2D,SAASG,KAAK,CACjB,wBAAwB,IAE1B9D,KAAKwyC,gBAAkBxyC,KAAK2D,SAAS5L,KAAK,kCAAkCyJ,SAAS,KACrFxB,KAAKyjC,UAAYzjC,KAAKwyC,gBAAgBpT,OAAO,MAAM59B,SAAS,kBAAkBsC,KAAK,OAAQ,SAC3F9D,KAAKkuC,WAAaluC,KAAK2D,SAAS5L,KAAK,MAAMgpC,IAAI,sBAAsBhpC,KAAK,KAI1EiI,KAAKyyC,aAAezyC,KAAK2D,SAEzB3D,KAAK2D,SAASG,KAAK,cAAgB9D,KAAK2D,SAASG,KAAK,mBAAqB2xB,EAAY,EAAG,cAE1Fz1B,KAAK0yC,eACL1yC,KAAK2yC,kBAEL3yC,KAAK4yC,iBACP,CASAF,eACE,IAAIlhC,EAAQxR,KAIZA,KAAKwyC,gBAAgB3oC,MAAK,WACxB,IAAIs1B,EAAQ,IAAEn/B,MACV8hC,EAAO3C,EAAMC,SACd5tB,EAAM9S,QAAQ2jC,YACflD,EAAMmD,QAAQv9B,UAAU+8B,EAAKtgC,SAAS,mBAAmB+gC,KAAK,sHAEhEpD,EAAM9oC,KAAK,YAAa8oC,EAAMr7B,KAAK,SAASo2B,WAAW,QAAQp2B,KAAK,WAAY,GAChFq7B,EAAM39B,SAAS,kBACVsC,KAAK,CACJ,eAAe,EACf,SAAY,EACZ,KAAQ,UAEd0N,EAAMnC,QAAQ8vB,EAChB,IACAn/B,KAAKyjC,UAAU55B,MAAK,WAClB,IAAIgpC,EAAQ,IAAE7yC,MAEd,IADY6yC,EAAM96C,KAAK,sBACb0J,OACR,OAAQ+P,EAAM9S,QAAQo0C,oBACpB,IAAK,SACHD,EAAMjlC,OAAO4D,EAAM9S,QAAQq0C,YAC3B,MACF,IAAK,MACHF,EAAMG,QAAQxhC,EAAM9S,QAAQq0C,YAC5B,MACF,QACEjhC,QAAQW,MAAM,yCAA2CjB,EAAM9S,QAAQo0C,mBAAqB,KAGlGthC,EAAMyhC,MAAMJ,EACd,IAEA7yC,KAAKyjC,UAAUr+B,SAAS,aACpBpF,KAAKtB,QAAQw0C,YACflzC,KAAKyjC,UAAUr+B,SAAS,oCAItBpF,KAAK2D,SAASy7B,SAASC,SAAS,kBAClCr/B,KAAKmzC,SAAW,IAAEnzC,KAAKtB,QAAQ00C,SAAShuC,SAAS,gBAC9CpF,KAAKtB,QAAQ20C,eAAerzC,KAAKmzC,SAAS/tC,SAAS,kBACtDpF,KAAK2D,SAAS4+B,KAAKviC,KAAKmzC,WAG1BnzC,KAAKmzC,SAAWnzC,KAAK2D,SAASy7B,SAC9Bp/B,KAAKmzC,SAAS1uC,IAAIzE,KAAKszC,cACzB,CAEAC,UACEvzC,KAAKmzC,SAAS1uC,IAAI,CAAC,YAAa,OAAQ,aAAc,SAEtDzE,KAAKmzC,SAAS1uC,IAAIzE,KAAKszC,cACzB,CAQAjkC,QAAQwmB,GACN,IAAIrkB,EAAQxR,KAEZ61B,EAAM5rB,IAAI,sBACTT,GAAG,sBAAsB,SAASjQ,GAUjC,GATG,IAAEA,EAAE+I,QAAQihC,aAAa,KAAM,MAAMlE,SAAS,gCAC/C9lC,EAAE0E,iBAMJuT,EAAMs9B,MAAMjZ,EAAMuJ,OAAO,OAEtB5tB,EAAM9S,QAAQqvC,aAAa,CAC5B,IAAIF,EAAQ,IAAE,QACdA,EAAM5jC,IAAI,iBAAiBT,GAAG,sBAAsB,SAASgqC,GACvDA,EAAGlxC,SAAWkP,EAAM7N,SAAS,IAAM,aAAW6N,EAAM7N,SAAS,GAAI6vC,EAAGlxC,UACxEkxC,EAAGv1C,iBACHuT,EAAMiiC,WACN5F,EAAM5jC,IAAI,iBACZ,GACF,CACF,GACF,CAOA0oC,kBACK3yC,KAAKtB,QAAQlC,YACdwD,KAAK2wC,aAAe3wC,KAAK0zC,WAAWjsB,KAAKznB,MACzCA,KAAK2D,SAAS6F,GAAG,6EAA6ExJ,KAAK2wC,eAErG3wC,KAAK2D,SAAS6F,GAAG,sBAAuBxJ,KAAKuzC,QAAQ9rB,KAAKznB,MAC5D,CAOA0zC,aACE,IAAIliC,EAAQxR,KACR2zC,EAAuD,KAAnCniC,EAAM9S,QAAQk1C,iBAAwB,IAAEpiC,EAAM9S,QAAQk1C,kBAAkBpiC,EAAM7N,SAClGkwC,EAAY91C,SAAS41C,EAAkBrsC,SAAS/B,IAAIiM,EAAM9S,QAAQo1C,gBAAiB,IACvF,IAAE,cAAcxS,MAAK,GAAMtiC,QAAQ,CAAExC,UAAWq3C,GAAariC,EAAM9S,QAAQq1C,kBAAmBviC,EAAM9S,QAAQs1C,iBAAgB,WAKvHh0C,OAAO,IAAE,QAAQ,IAAGwR,EAAM7N,SAASyC,QAAQ,wBAChD,GACF,CAMAwsC,kBACE,IAAIphC,EAAQxR,KAEZA,KAAKkuC,WAAWpyC,IAAIkE,KAAK2D,SAAS5L,KAAK,wDAAwDyR,GAAG,wBAAwB,SAASjQ,GACjI,IAEIspC,EACAC,EAHAn/B,EAAW,IAAE3D,MACb+iC,EAAYp/B,EAASy7B,OAAO,MAAMA,OAAO,MAAM59B,SAAS,MAAMA,SAAS,KAI3EuhC,EAAUl5B,MAAK,SAASxR,GACtB,GAAI,IAAE2H,MAAM6D,GAAGF,GAGb,OAFAk/B,EAAeE,EAAU9E,GAAGtgC,KAAKkD,IAAI,EAAGxI,EAAE,SAC1CyqC,EAAeC,EAAU9E,GAAGtgC,KAAKkK,IAAIxP,EAAE,EAAG0qC,EAAUthC,OAAO,IAG/D,IAEAs7B,EAASI,UAAU5jC,EAAG,YAAa,CACjCq/B,KAAM,WACJ,GAAIj1B,EAASE,GAAG2N,EAAMghC,iBAKpB,OAJAhhC,EAAMs9B,MAAMnrC,EAASy7B,OAAO,OAC5Bz7B,EAASy7B,OAAO,MAAM35B,IAAImwB,EAAcjyB,IAAW,WACjDA,EAASy7B,OAAO,MAAMrnC,KAAK,WAAWgpC,IAAI,wBAAwBhB,QAAQ1hC,OAC5E,KACO,CAEX,EACAyhC,SAAU,WAOR,OANAtuB,EAAMq9B,MAAMlrC,EAASy7B,OAAO,MAAMA,OAAO,OACzCz7B,EAASy7B,OAAO,MAAMA,OAAO,MAAM35B,IAAImwB,EAAcjyB,IAAW,WAC9DpF,YAAW,WACToF,EAASy7B,OAAO,MAAMA,OAAO,MAAMA,OAAO,MAAM59B,SAAS,KAAKu+B,QAAQ1hC,OACxE,GAAG,EACL,KACO,CACT,EACA6hC,GAAI,WAGF,OAFA2C,EAAaxkC,SAELsF,EAASE,GAAG2N,EAAM7N,SAAS5L,KAAK,wBAC1C,EACAooC,KAAM,WAGJ,OAFA2C,EAAazkC,SAELsF,EAASE,GAAG2N,EAAM7N,SAAS5L,KAAK,uBAC1C,EACAmrC,MAAO,WAEAv/B,EAASE,GAAG2N,EAAM7N,SAAS5L,KAAK,eACnCyZ,EAAMq9B,MAAMlrC,EAASy7B,SAASA,UAC9Bz7B,EAASy7B,SAASA,SAASuB,SAAS,KAAKtiC,QAE7C,EACA4kC,KAAM,WACJ,QAAIzxB,EAAM9S,QAAQ2jC,aAAc1+B,EAASG,KAAK,WAElCH,EAASE,GAAG2N,EAAM08B,YAQnBvqC,EAASE,GAAG2N,EAAMghC,kBAC3BhhC,EAAMs9B,MAAMnrC,EAASy7B,OAAO,OAC5Bz7B,EAASy7B,OAAO,MAAM35B,IAAImwB,EAAcjyB,IAAW,WACjDA,EAASy7B,OAAO,MAAMrnC,KAAK,WAAWgpC,IAAI,wBAAwBhB,QAAQ1hC,OAC5E,KACO,QALF,GAPLmT,EAAMq9B,MAAMlrC,EAASy7B,OAAO,MAAMA,OAAO,OACzCz7B,EAASy7B,OAAO,MAAMA,OAAO,MAAM35B,IAAImwB,EAAcjyB,IAAW,WAC9DpF,YAAW,WACToF,EAASy7B,OAAO,MAAMA,OAAO,MAAMA,OAAO,MAAM59B,SAAS,KAAKu+B,QAAQ1hC,OACxE,GAAG,EACL,KACO,GAQX,EACAo/B,QAAS,SAASx/B,GACZA,GACF1E,EAAE0E,gBAEN,GAEJ,GACF,CAQAw1C,WACE,IAAI5d,EAAQ71B,KAAK2D,SAAS5L,KAAK,mCAI/B,GAHA89B,EAAMzwB,SAAS,cACfywB,EAAMuJ,SAASzK,QAAQ,MAAMoG,YAAY,aAErC/6B,KAAKtB,QAAQw0C,WAAY,CAC3B,MAAMe,EAAape,EAAMuJ,SAASzK,QAAQ,MAAMt+B,KAAK,cACrD2J,KAAKmzC,SAAS1uC,IAAI,CAAEjE,OAAQyzC,GAC9B,CAMAj0C,KAAK2D,SAASyC,QAAQ,sBAEtByvB,EAAMpwB,IAAImwB,EAAcC,IAAQ,KAC9BA,EAAMkF,YAAY,wBAMlB/6B,KAAK2D,SAASyC,QAAQ,sBAAsB,GAEhD,CAQA6sC,MAAMpd,GACJ,IAAIrkB,EAAQxR,KACZ61B,EAAM5rB,IAAI,sBACV4rB,EAAMr0B,SAAS,sBACZgI,GAAG,sBAAsB,WACxBgI,EAAMq9B,MAAMhZ,GAGZ,IAAIqe,EAAgBre,EAAMuJ,OAAO,MAAMA,OAAO,MAAMA,OAAO,MACvD8U,EAAczyC,OAChB+P,EAAMs9B,MAAMoF,GAGZ1iC,EAAMihC,aAAejhC,EAAM7N,QAE/B,GACJ,CAOAwwC,kBACE,IAAI3iC,EAAQxR,KACZA,KAAKkuC,WAAWnN,IAAI,gCACf92B,IAAI,sBACJT,GAAG,sBAAsB,WACxBjL,YAAW,WACTiT,EAAMiiC,UACR,GAAG,EACP,GACJ,CASAW,uBAAuBve,EAAOzvB,GAC5ByvB,EAAMzwB,SAAS,aAAa21B,YAAY,aAAaj3B,KAAK,eAAe,GACzE+xB,EAAMuJ,OAAO,MAAMt7B,KAAK,iBAAiB,IACzB,IAAZsC,GACFpG,KAAK2D,SAASyC,QAAQ,oBAAqB,CAACyvB,GAEhD,CASAwe,uBAAuBxe,EAAOzvB,GAC5ByvB,EAAMkF,YAAY,aAAa31B,SAAS,aAAatB,KAAK,eAAe,GACzE+xB,EAAMuJ,OAAO,MAAMt7B,KAAK,iBAAiB,IACzB,IAAZsC,GACFyvB,EAAMzvB,QAAQ,oBAAqB,CAACyvB,GAExC,CAUAye,UAAUze,EAAOiY,GAEf,IAAIt8B,EAAQxR,KAYZ,GATwBA,KAAK2D,SAAS5L,KAAK,+CACzB8R,MAAK,WACrB2H,EAAM6iC,uBAAuB,IAAEr0C,MACjC,IAGAA,KAAKyyC,aAAe5c,EAGhBA,EAAMhyB,GAAG,oBAGX,OAFkB,IAAdiqC,GAAoBjY,EAAM99B,KAAK,UAAUgoC,QAAQ1hC,aACjD2B,KAAKtB,QAAQw0C,YAAYlzC,KAAKmzC,SAAS1uC,IAAI,SAAUoxB,EAAMx/B,KAAK,gBAKtE,IAAIotC,EAAY5N,EAAMr0B,WAAWu+B,QAAQwD,aAAa,mBAAoB,kBAG1EE,EAAU55B,MAAK,SAASyC,GAGR,IAAVA,GAAekF,EAAM9S,QAAQw0C,YAC/B1hC,EAAM2hC,SAAS1uC,IAAI,SAAU,IAAEzE,MAAM3J,KAAK,eAG5C,IAAIk+C,EAAcjoC,IAAUm3B,EAAUhiC,OAAS,GAI3B,IAAhB8yC,GACF,IAAEv0C,MAAMyF,IAAImwB,EAAc,IAAE51B,QAAQ,MAChB,IAAd8tC,GACFjY,EAAM99B,KAAK,UAAUgoC,QAAQ1hC,OAC/B,IAIJmT,EAAM4iC,uBAAuB,IAAEp0C,MAAOu0C,EACxC,GACF,CAQAzF,MAAMjZ,GACJ,MAAM+M,EAAW/M,EAAMr0B,SAAS,kBAEhCq0B,EAAM/xB,KAAK,iBAAiB,GAE5B9D,KAAKyyC,aAAe7P,EAIpB/M,EAAMuJ,SAASzK,QAAQ,MAAMvvB,SAAS,aAGtCw9B,EAASx9B,SAAS,qBAAqB21B,YAAY,aAAaj3B,KAAK,eAAe,GAEhF9D,KAAKtB,QAAQw0C,YACflzC,KAAKmzC,SAAS1uC,IAAI,CAAEjE,OAAQoiC,EAASvsC,KAAK,gBAO5C2J,KAAK2D,SAASyC,QAAQ,oBAAqB,CAACyvB,GAC9C,CAQAgZ,MAAMhZ,GACD71B,KAAKtB,QAAQw0C,YAAYlzC,KAAKmzC,SAAS1uC,IAAI,CAACjE,OAAOq1B,EAAMuJ,SAASzK,QAAQ,MAAMt+B,KAAK,gBACxFw/B,EAAMuJ,SAASzK,QAAQ,MAAMoG,YAAY,aACzClF,EAAMuJ,OAAO,MAAMt7B,KAAK,iBAAiB,GACzC+xB,EAAM/xB,KAAK,eAAe,GAC1B+xB,EAAMzwB,SAAS,cACTK,IAAImwB,EAAcC,IAAQ,WACzBA,EAAMkF,YAAY,gCAClBlF,EAAM2e,OAAOpvC,SAAS,YACxB,IAKLywB,EAAMzvB,QAAQ,oBAAqB,CAACyvB,GACtC,CAQAyd,cACE,IAAI/wC,EAAY,EAAGvK,EAAS,CAAC,EAAGwZ,EAAQxR,KAoBxC,OAjBAA,KAAKyjC,UAAU3nC,IAAIkE,KAAK2D,UAAUkG,MAAK,WACrC,IAAIrJ,EAASojC,EAAIM,cAAclkC,MAAMQ,OAErC+B,EAAY/B,EAAS+B,EAAY/B,EAAS+B,EAEvCiP,EAAM9S,QAAQw0C,YACf,IAAElzC,MAAM3J,KAAK,aAAamK,EAE9B,IAEIR,KAAKtB,QAAQw0C,WACfl7C,EAAOwI,OAASR,KAAKyyC,aAAap8C,KAAK,cAEvC2B,EAAO,cAAgB,GAAGuK,MAE5BvK,EAAO,aAAe,GAAGgI,KAAK2D,SAAS,GAAG4rB,wBAAwBrzB,UAE3DlE,CACT,CAMAgkB,WACE,IAAE,QAAQ/R,IAAI,iBACXjK,KAAKtB,QAAQlC,WAAWwD,KAAK2D,SAASsG,IAAI,gBAAgBjK,KAAK2wC,cAClE3wC,KAAKyzC,WACNzzC,KAAK2D,SAASsG,IAAI,uBACjBs3B,EAAKQ,KAAK/hC,KAAK2D,SAAU,aACzB3D,KAAK2D,SAAS8wC,SACA18C,KAAK,+CAA+CgE,SACpD+5B,MAAM/9B,KAAK,kDAAkDgjC,YAAY,6CAA6C9wB,IAAI,oDAC1H6rB,MAAM/9B,KAAK,kBAAkBmiC,WAAW,6BACtDl6B,KAAKwyC,gBAAgB3oC,MAAK,WACxB,IAAE7J,MAAMiK,IAAI,gBACd,IAEAjK,KAAK2D,SAAS5L,KAAK,yBAAyB4rC,SAC5C3jC,KAAKyjC,UAAU1I,YAAY,8CAE3B/6B,KAAK2D,SAAS5L,KAAK,KAAK8R,MAAK,WAC3B,IAAIs1B,EAAQ,IAAEn/B,MACdm/B,EAAMjF,WAAW,YACdiF,EAAM9oC,KAAK,cACZ8oC,EAAMr7B,KAAK,OAAQq7B,EAAM9oC,KAAK,cAAc25B,WAAW,YAE3D,GACF,EAGFsiB,GAAU7lB,SAAW,CAQnB8lB,gBAAgB,EAOhBQ,WAAY,8DAOZD,mBAAoB,MAOpBM,QAAS,cAOT/Q,YAAY,EAOZ0L,cAAc,EAOdmF,YAAY,EAOZG,eAAe,EAOf72C,WAAW,EAOXo3C,iBAAkB,GAOlBE,gBAAiB,EAOjBC,kBAAmB,IAQnBC,gBAAiB,SCloBnB,IAAIU,GAAc,CAChBC,SAAU,CACRC,SAAU,WACVlb,OAAQsU,GAEX6G,UAAW,CACRD,SAAU,YACVlb,OAAQ4Y,IAEVwC,UAAW,CACTF,SAAU,iBACVlb,OAAQsI,IAcZ,MAAM+S,WAAuB9Y,EAS3BC,OAAO/+B,GACL6C,KAAK2D,SAAW,IAAExG,GAClB6C,KAAKg1C,MAAQh1C,KAAK2D,SAAStN,KAAK,mBAChC2J,KAAKi1C,UAAY,KACjBj1C,KAAKk1C,cAAgB,KACrBl1C,KAAK3I,UAAY,iBAEjB2I,KAAKgY,QACLhY,KAAKqP,SACP,CAOA2I,QAIE,GAFA3d,EAAW2d,QAEe,iBAAfhY,KAAKg1C,MAAoB,CAClC,IAAIG,EAAY,CAAC,EAGbH,EAAQh1C,KAAKg1C,MAAMvyC,MAAM,KAG7B,IAAK,IAAIpK,EAAI,EAAGA,EAAI28C,EAAMvzC,OAAQpJ,IAAK,CACrC,IAAI+8C,EAAOJ,EAAM38C,GAAGoK,MAAM,KACtB4yC,EAAWD,EAAK3zC,OAAS,EAAI2zC,EAAK,GAAK,QACvCE,EAAaF,EAAK3zC,OAAS,EAAI2zC,EAAK,GAAKA,EAAK,GAElB,OAA5BV,GAAYY,KACdH,EAAUE,GAAYX,GAAYY,GAEtC,CAEAt1C,KAAKg1C,MAAQG,CACf,CAEK,kBAAgBn1C,KAAKg1C,QACxBh1C,KAAKu1C,qBAGPv1C,KAAK2D,SAASG,KAAK,cAAgB9D,KAAK2D,SAASG,KAAK,gBAAkB2xB,EAAY,EAAG,mBACzF,CAOApmB,UACE,IAAImC,EAAQxR,KAEZ,IAAEvH,QAAQ+Q,GAAG,yBAAyB,WACpCgI,EAAM+jC,oBACR,GAIF,CAOAA,qBACE,IAAIC,EAAWhkC,EAAQxR,KAEvB,SAAOA,KAAKg1C,OAAO,SAASrnC,GACtBtT,EAAWm+B,QAAQ7qB,KACrB6nC,EAAY7nC,EAEhB,IAGK6nC,IAGDx1C,KAAKk1C,yBAAyBl1C,KAAKg1C,MAAMQ,GAAW9b,SAGxD,SAAOgb,IAAa,SAAS/mC,EAAKJ,GAChCiE,EAAM7N,SAASo3B,YAAYxtB,EAAMqnC,SACnC,IAGA50C,KAAK2D,SAASyB,SAASpF,KAAKg1C,MAAMQ,GAAWZ,UAGzC50C,KAAKk1C,eAAel1C,KAAKk1C,cAAcprC,UAC3C9J,KAAKk1C,cAAgB,IAAIl1C,KAAKg1C,MAAMQ,GAAW9b,OAAO15B,KAAK2D,SAAU,CAAC,IACxE,CAMAqY,WACEhc,KAAKk1C,cAAcprC,UACnB,IAAErR,QAAQwR,IAAI,qBAChB,EAGF8qC,GAAetoB,SAAW,CAAC,ECzI3B,MAAMgpB,WAAyBxZ,EAS7BC,OAAO/+B,EAASuB,GACdsB,KAAK2D,SAAW,IAAExG,GAClB6C,KAAKtB,QAAU,WAAS,CAAC,EAAG+2C,GAAiBhpB,SAAUzsB,KAAK2D,SAAStN,OAAQqI,GAC7EsB,KAAK3I,UAAY,mBAEjB2I,KAAKgY,QACLhY,KAAKqP,SACP,CAOA2I,QACE3d,EAAW2d,QACX,IAAI09B,EAAW11C,KAAK2D,SAAStN,KAAK,qBAalC,GAZKq/C,GACH5jC,QAAQW,MAAM,oEAGhBzS,KAAK21C,YAAc,IAAE,IAAID,KACzB11C,KAAK41C,SAAW51C,KAAK2D,SAAS5L,KAAK,iBAAiBuV,QAAO,WACzD,IAAIhL,EAAS,IAAEtC,MAAM3J,KAAK,UAC1B,OAAQiM,IAAWozC,GAAuB,KAAXpzC,CACjC,IACAtC,KAAKtB,QAAU,WAAS,CAAC,EAAGsB,KAAKtB,QAASsB,KAAK21C,YAAYt/C,QAGxD2J,KAAKtB,QAAQM,QAAS,CACvB,IAAI62C,EAAQ71C,KAAKtB,QAAQM,QAAQyD,MAAM,KAEvCzC,KAAK81C,YAAcD,EAAM,GACzB71C,KAAK+1C,aAAeF,EAAM,IAAM,IAClC,CAEA71C,KAAKg2C,SACP,CAOA3mC,UACErP,KAAKi2C,iBAAmBj2C,KAAKg2C,QAAQvuB,KAAKznB,MAE1C,IAAEvH,QAAQ+Q,GAAG,wBAAyBxJ,KAAKi2C,kBAE3Cj2C,KAAK41C,SAASpsC,GAAG,4BAA6BxJ,KAAKk2C,WAAWzuB,KAAKznB,MACrE,CAOAg2C,UAEO37C,EAAWm+B,QAAQx4B,KAAKtB,QAAQy3C,UAOnCn2C,KAAK2D,SAASwU,OACdnY,KAAK21C,YAAY5N,SAPjB/nC,KAAK2D,SAASokC,OACd/nC,KAAK21C,YAAYx9B,OAQrB,CAOA+9B,aACO77C,EAAWm+B,QAAQx4B,KAAKtB,QAAQy3C,WAKhCn2C,KAAKtB,QAAQM,QACVgB,KAAK21C,YAAY9xC,GAAG,WACtB4jC,EAAiBznC,KAAK21C,YAAa31C,KAAK81C,aAAa,KACnD91C,KAAK2D,SAASyC,QAAQ,+BACtBpG,KAAK21C,YAAY59C,KAAK,iBAAiBi+B,eAAe,sBAAsB,IAI9EyR,EAAkBznC,KAAK21C,YAAa31C,KAAK+1C,cAAc,KACrD/1C,KAAK2D,SAASyC,QAAQ,8BAA8B,KAKxDpG,KAAK21C,YAAYpqC,OAAO,GACxBvL,KAAK21C,YAAY59C,KAAK,iBAAiBqO,QAAQ,uBAC/CpG,KAAK2D,SAASyC,QAAQ,gCAG5B,CAEA4V,WACEhc,KAAK2D,SAASsG,IAAI,wBAClBjK,KAAK41C,SAAS3rC,IAAI,wBAElB,IAAExR,QAAQwR,IAAI,wBAAyBjK,KAAKi2C,iBAC9C,EAGFR,GAAiBhpB,SAAW,CAO1B0pB,QAAS,SAQTn3C,SAAS,GCjIX,MAAMo3C,WAAena,EAQnBC,OAAO/+B,EAASuB,GACdsB,KAAK2D,SAAWxG,EAChB6C,KAAKtB,QAAU,WAAS,CAAC,EAAG03C,GAAO3pB,SAAUzsB,KAAK2D,SAAStN,OAAQqI,GACnEsB,KAAK3I,UAAY,SACjB2I,KAAKgY,QAGLizB,EAAM5oB,KAAK,KACX6lB,EAAS7lB,KAAK,KAEd0a,EAASY,SAAS,SAAU,CAC1B,OAAU,SAEd,CAMA3lB,QACE3d,EAAW2d,QACXhY,KAAK4G,GAAK5G,KAAK2D,SAASG,KAAK,MAC7B9D,KAAKoiC,UAAW,EAChBpiC,KAAKq2C,OAAS,CAACC,GAAIj8C,EAAWC,SAE9B0F,KAAKk/B,QAAU,IAAE,eAAel/B,KAAK4G,QAAQnF,OAAS,IAAE,eAAezB,KAAK4G,QAAU,IAAE,iBAAiB5G,KAAK4G,QAC9G5G,KAAKk/B,QAAQp7B,KAAK,CAChB,gBAAiB9D,KAAK4G,GACtB,gBAAiB,SACjB,SAAY,KAGV5G,KAAKtB,QAAQ63C,YAAcv2C,KAAK2D,SAAS07B,SAAS,WACpDr/B,KAAKtB,QAAQ63C,YAAa,EAC1Bv2C,KAAKtB,QAAQ83C,SAAU,GAErBx2C,KAAKtB,QAAQ83C,UAAYx2C,KAAKy2C,WAChCz2C,KAAKy2C,SAAWz2C,KAAK02C,aAAa12C,KAAK4G,KAGzC5G,KAAK2D,SAASG,KAAK,CACf,KAAQ,SACR,eAAe,EACf,gBAAiB9D,KAAK4G,GACtB,cAAe5G,KAAK4G,KAGrB5G,KAAKy2C,SACNz2C,KAAK2D,SAASggC,SAAShM,SAAS33B,KAAKy2C,WAErCz2C,KAAK2D,SAASggC,SAAShM,SAAS,IAAE33B,KAAKtB,QAAQi5B,WAC/C33B,KAAK2D,SAASyB,SAAS,oBAEzBpF,KAAKqP,UACDrP,KAAKtB,QAAQghC,UAAYjnC,OAAOumC,SAASC,OAAS,IAAMj/B,KAAK4G,OAC/D5G,KAAK22C,eAAiB1gB,EAAO,IAAEx9B,SAAS,IAAMuH,KAAKijC,SAEvD,CAMAyT,eACE,IAAIE,EAA2B,GAM/B,OAJI52C,KAAKtB,QAAQk4C,2BACfA,EAA2B,IAAM52C,KAAKtB,QAAQk4C,0BAGzC,IAAE,eACNxxC,SAAS,iBAAmBwxC,GAC5Bjf,SAAS33B,KAAKtB,QAAQi5B,SAC3B,CAOAkf,kBACE,IAIIrxC,EAJAtJ,EAAQ8D,KAAK2D,SAASuD,aACtBA,EAAa,IAAEzO,QAAQyD,QACvBsE,EAASR,KAAK2D,SAASyD,cACvBA,EAAc,IAAE3O,QAAQ+H,SAClB+E,EAAM,KAEdC,EAD2B,SAAzBxF,KAAKtB,QAAQ4lC,QACRvmC,UAAUmJ,EAAahL,GAAS,EAAG,IAEnC6B,SAASiC,KAAKtB,QAAQ4lC,QAAS,IAEX,SAAzBtkC,KAAKtB,QAAQ2lC,QAEb9+B,EADE/E,EAAS4G,EACLrJ,SAASJ,KAAKkK,IAAI,IAAKT,EAAc,IAAK,IAE1CrJ,UAAUqJ,EAAc5G,GAAU,EAAG,IAEX,OAAzBR,KAAKtB,QAAQ2lC,UACtB9+B,EAAMxH,SAASiC,KAAKtB,QAAQ2lC,QAAS,KAG3B,OAAR9+B,GACFvF,KAAK2D,SAASc,IAAI,CAACc,IAAKA,EAAM,OAK3BvF,KAAKy2C,UAAsC,SAAzBz2C,KAAKtB,QAAQ4lC,UAClCtkC,KAAK2D,SAASc,IAAI,CAACe,KAAMA,EAAO,OAChCxF,KAAK2D,SAASc,IAAI,CAACgD,OAAQ,QAG/B,CAMA4H,UACE,IAAImC,EAAQxR,KAEZA,KAAK2D,SAAS6F,GAAG,CACf,kBAAmBxJ,KAAKijC,KAAKxb,KAAKznB,MAClC,mBAAoB,CAAChC,EAAO2F,KAC1B,GAAK3F,EAAMsE,SAAWkP,EAAM7N,SAAS,IAChC,IAAE3F,EAAMsE,QAAQ0gC,QAAQ,mBAAmB,KAAOr/B,EACrD,OAAO3D,KAAKkjC,MAAMrzB,MAAM7P,KAC1B,EAEF,oBAAqBA,KAAKuL,OAAOkc,KAAKznB,MACtC,sBAAuB,WACrBwR,EAAMqlC,iBACR,IAGE72C,KAAKtB,QAAQqvC,cAAgB/tC,KAAKtB,QAAQ83C,SAC5Cx2C,KAAKy2C,SAASxsC,IAAI,cAAcT,GAAG,qCAAqC,SAASjQ,GAC3EA,EAAE+I,SAAWkP,EAAM7N,SAAS,KAC9B,aAAW6N,EAAM7N,SAAS,GAAIpK,EAAE+I,SAC7B,aAAWnK,SAAUoB,EAAE+I,SAG5BkP,EAAM0xB,OACR,IAEEljC,KAAKtB,QAAQghC,UACf,IAAEjnC,QAAQ+Q,GAAG,wBAAwBxJ,KAAK4G,KAAM5G,KAAK82C,aAAarvB,KAAKznB,MAE3E,CAMA82C,eACKr+C,OAAOumC,SAASC,OAAW,IAAMj/B,KAAK4G,IAAQ5G,KAAKoiC,SAChDpiC,KAAKkjC,QADsDljC,KAAKijC,MAExE,CAMA8T,eAAev6C,GACbA,EAAYA,GAAa,IAAE/D,QAAQ+D,YAC/B,IAAErE,UAAUqI,SAAW,IAAE/H,QAAQ+H,UACnC,IAAE,QACCiE,IAAI,OAAQjI,EAEnB,CAMAw6C,cAAcx6C,GACZA,EAAYA,GAAauB,SAAS,IAAE,QAAQ0G,IAAI,OAAQ,IACpD,IAAEtM,UAAUqI,SAAW,IAAE/H,QAAQ+H,WACnC,IAAE,QACCiE,IAAI,MAAO,IACd,IAAEhM,QAAQ+D,WAAWA,GAEzB,CASAymC,OAEE,MAAMhE,EAAO,IAAIj/B,KAAK4G,KAClB5G,KAAKtB,QAAQghC,UAAYjnC,OAAOumC,SAASC,OAASA,IAEhDxmC,OAAO4nC,QAAQC,UACbtgC,KAAKtB,QAAQ0hC,cACf3nC,OAAO4nC,QAAQC,UAAU,CAAC,EAAG,GAAIrB,GAEjCxmC,OAAO4nC,QAAQE,aAAa,CAAC,EAAG,GAAItB,GAGtCxmC,OAAOumC,SAASC,KAAOA,GAK3Bj/B,KAAKi3C,cAAgB,IAAE9+C,SAASmG,eAAeuF,GAAG7D,KAAKk/B,SAAW,IAAE/mC,SAASmG,eAAiB0B,KAAKk/B,QAEnGl/B,KAAKoiC,UAAW,EAGhBpiC,KAAK2D,SACAc,IAAI,CAAE,WAAc,WACpBsjC,OACAvrC,UAAU,GACXwD,KAAKtB,QAAQ83C,SACfx2C,KAAKy2C,SAAShyC,IAAI,CAAC,WAAc,WAAWsjC,OAG9C/nC,KAAK62C,kBAEL72C,KAAK2D,SACFwU,OACA1T,IAAI,CAAE,WAAc,KAEpBzE,KAAKy2C,WACNz2C,KAAKy2C,SAAShyC,IAAI,CAAC,WAAc,KAAK0T,OACnCnY,KAAK2D,SAAS07B,SAAS,QACxBr/B,KAAKy2C,SAASrxC,SAAS,QACdpF,KAAK2D,SAAS07B,SAAS,SAChCr/B,KAAKy2C,SAASrxC,SAAS,SAKtBpF,KAAKtB,QAAQw4C,gBAMhBl3C,KAAK2D,SAASyC,QAAQ,oBAAqBpG,KAAK4G,IAGd,IAAhC,IAAE,mBAAmBnF,QACvBzB,KAAK+2C,iBAGP,IAAIvlC,EAAQxR,KAGZ,GAAIA,KAAKtB,QAAQo3C,YAAa,CAWxB91C,KAAKtB,QAAQ83C,SACf/O,EAAiBznC,KAAKy2C,SAAU,WAElChP,EAAiBznC,KAAK2D,SAAU3D,KAAKtB,QAAQo3C,aAAa,KACrD91C,KAAK2D,WACN3D,KAAKm3C,kBAAoBpa,EAAST,cAAct8B,KAAK2D,UAdvD6N,EAAM7N,SACHG,KAAK,CACJ,eAAe,EACf,UAAa,IAEdzF,QACHmT,EAAM4lC,oBACNra,EAASe,UAAUtsB,EAAM7N,UASzB,GAEJ,MAGM3D,KAAKtB,QAAQ83C,SACfx2C,KAAKy2C,SAAS1O,KAAK,GAErB/nC,KAAK2D,SAASokC,KAAK/nC,KAAKtB,QAAQ24C,WAIlCr3C,KAAK2D,SACFG,KAAK,CACJ,eAAe,EACf,UAAa,IAEdzF,QACH0+B,EAASe,UAAU99B,KAAK2D,UAExB3D,KAAKo3C,oBAELp3C,KAAKs3C,sBAMLt3C,KAAK2D,SAASyC,QAAQ,iBACxB,CAaAgxC,oBACE,MAAMG,EAAuB,KAC3B,IAAE,QAAQC,YAAY,mBAAoB,IAAEr/C,UAAUqI,SAAW,IAAE/H,QAAQ+H,UAAU,EAGvFR,KAAK2D,SAAS6F,GAAG,+CAA+C,IAAM+tC,MACtEA,IACA,IAAE,QAAQnyC,SAAS,iBACrB,CAMAqyC,uBACEz3C,KAAK2D,SAASsG,IAAI,+CAClB,IAAE,QAAQ8wB,YAAY,kBACtB,IAAE,QAAQA,YAAY,gBACxB,CAMAuc,sBACE,IAAI9lC,EAAQxR,KACRA,KAAK2D,WACT3D,KAAKm3C,kBAAoBpa,EAAST,cAAct8B,KAAK2D,UAEhD3D,KAAKtB,QAAQ83C,UAAWx2C,KAAKtB,QAAQqvC,cAAiB/tC,KAAKtB,QAAQ63C,YACtE,IAAE,QAAQ/sC,GAAG,qCAAqC,SAASjQ,GACrDA,EAAE+I,SAAWkP,EAAM7N,SAAS,KAC9B,aAAW6N,EAAM7N,SAAS,GAAIpK,EAAE+I,SAC7B,aAAWnK,SAAUoB,EAAE+I,SAC5BkP,EAAM0xB,OACR,IAGEljC,KAAKtB,QAAQg5C,YACf,IAAEj/C,QAAQ+Q,GAAG,qBAAqB,SAASjQ,GACzCwjC,EAASI,UAAU5jC,EAAG,SAAU,CAC9B2pC,MAAO,WACD1xB,EAAM9S,QAAQg5C,YAChBlmC,EAAM0xB,OAEV,GAEJ,IAEJ,CAOAA,QACE,IAAKljC,KAAKoiC,WAAapiC,KAAK2D,SAASE,GAAG,YACtC,OAAO,EAET,IAAI2N,EAAQxR,KAiCZ,SAAS23C,IAKP,IAAIn7C,EAAYuB,SAAS,IAAE,QAAQ0G,IAAI,OAAQ,IAEV,IAAjC,IAAE,mBAAmBhD,QACvB+P,EAAMimC,uBAGR1a,EAASoB,aAAa3sB,EAAM7N,UAE5B6N,EAAM7N,SAASG,KAAK,eAAe,GAEE,IAAjC,IAAE,mBAAmBrC,QACvB+P,EAAMwlC,cAAcx6C,GAOtBgV,EAAM7N,SAASyC,QAAQ,mBACzB,CAYA,GAlEIpG,KAAKtB,QAAQq3C,cACX/1C,KAAKtB,QAAQ83C,SACf/O,EAAkBznC,KAAKy2C,SAAU,YAGnChP,EAAkBznC,KAAK2D,SAAU3D,KAAKtB,QAAQq3C,aAAc4B,KAI5D33C,KAAK2D,SAASwU,KAAKnY,KAAKtB,QAAQk5C,WAE5B53C,KAAKtB,QAAQ83C,QACfx2C,KAAKy2C,SAASt+B,KAAK,EAAGw/B,GAGtBA,KAKA33C,KAAKtB,QAAQg5C,YACf,IAAEj/C,QAAQwR,IAAI,sBAGXjK,KAAKtB,QAAQ83C,SAAWx2C,KAAKtB,QAAQqvC,cACxC,IAAE,QAAQ9jC,IAAI,qCAGhBjK,KAAK2D,SAASsG,IAAI,qBAgCdjK,KAAKtB,QAAQm5C,cACf73C,KAAK2D,SAASm0C,KAAK93C,KAAK2D,SAASm0C,QAGnC93C,KAAKoiC,UAAW,EAEZ5wB,EAAM9S,QAAQghC,UAAYjnC,OAAOumC,SAASC,OAAS,IAAIj/B,KAAK4G,KAE9D,GAAInO,OAAO4nC,QAAQE,aAAc,CAC/B,MAAMwX,EAAiBt/C,OAAOumC,SAASgZ,SAAWv/C,OAAOumC,SAASiZ,OAC9Dj4C,KAAKtB,QAAQ0hC,cACf3nC,OAAO4nC,QAAQC,UAAU,CAAC,EAAG,GAAIyX,GAEjCt/C,OAAO4nC,QAAQE,aAAa,GAAIpoC,SAASuT,MAAOqsC,EAEpD,MACEt/C,OAAOumC,SAASC,KAAO,GAI3Bj/B,KAAKi3C,cAAc54C,OACrB,CAMAkN,SACMvL,KAAKoiC,SACPpiC,KAAKkjC,QAELljC,KAAKijC,MAET,CAMAjnB,WACMhc,KAAKtB,QAAQ83C,UACfx2C,KAAK2D,SAASg0B,SAAS,IAAE33B,KAAKtB,QAAQi5B,WACtC33B,KAAKy2C,SAASt+B,OAAOlO,MAAMlO,UAE7BiE,KAAK2D,SAASwU,OAAOlO,MACrBjK,KAAKk/B,QAAQj1B,IAAI,OACjB,IAAExR,QAAQwR,IAAI,cAAcjK,KAAK4G,MAC7B5G,KAAK22C,gBAAgB,IAAEl+C,QAAQwR,IAAIjK,KAAK22C,gBAEP,IAAjC,IAAE,mBAAmBl1C,QACvBzB,KAAKy3C,sBAET,EAGFrB,GAAO3pB,SAAW,CAOhBqpB,YAAa,GAObC,aAAc,GAOdsB,UAAW,EAOXO,UAAW,EAOX7J,cAAc,EAOd2J,YAAY,EAOZR,gBAAgB,EAOhB7S,QAAS,OAOTC,QAAS,OAOTiS,YAAY,EAOZC,SAAS,EAOTqB,cAAc,EAQdnY,UAAU,EAMVU,eAAe,EAOfzI,SAAU,OAOVif,yBAA0B,ICnmB5B,MAAMsB,WAAejc,EAQnBC,OAAO/+B,EAASuB,GACdsB,KAAK2D,SAAWxG,EAChB6C,KAAKtB,QAAU,WAAS,CAAC,EAAGw5C,GAAOzrB,SAAUzsB,KAAK2D,SAAStN,OAAQqI,GACnEsB,KAAK3I,UAAY,SACjB2I,KAAKm4C,aAAc,EAGnBlN,EAAM5oB,KAAK,KACX6lB,EAAS7lB,KAAK,KAEdriB,KAAKgY,QAEL+kB,EAASY,SAAS,SAAU,CAC1B,IAAO,CACL,YAAe,WACf,SAAY,WACZ,WAAc,WACd,WAAc,WACd,kBAAqB,eACrB,eAAkB,eAClB,iBAAoB,eACpB,iBAAoB,eACpB,KAAQ,MACR,IAAO,OAET,IAAO,CACL,WAAc,WACd,YAAe,WACf,iBAAoB,eACpB,kBAAqB,iBAG3B,CAOA3lB,QACEhY,KAAKo4C,OAASp4C,KAAK2D,SAAS5L,KAAK,SACjCiI,KAAKq4C,QAAUr4C,KAAK2D,SAAS5L,KAAK,wBAElCiI,KAAKs4C,QAAUt4C,KAAKq4C,QAAQpa,GAAG,GAC/Bj+B,KAAKu4C,OAASv4C,KAAKo4C,OAAO32C,OAASzB,KAAKo4C,OAAOna,GAAG,GAAK,IAAE,IAAIj+B,KAAKs4C,QAAQx0C,KAAK,oBAC/E9D,KAAKw4C,MAAQx4C,KAAK2D,SAAS5L,KAAK,sBAAsB0M,IAAIzE,KAAKtB,QAAQ+5C,SAAW,SAAW,QAAS,IAElGz4C,KAAKtB,QAAQrF,UAAY2G,KAAK2D,SAAS07B,SAASr/B,KAAKtB,QAAQg6C,kBAC/D14C,KAAKtB,QAAQrF,UAAW,EACxB2G,KAAK2D,SAASyB,SAASpF,KAAKtB,QAAQg6C,gBAEjC14C,KAAKo4C,OAAO32C,SACfzB,KAAKo4C,OAAS,MAAIt8C,IAAIkE,KAAKu4C,QAC3Bv4C,KAAKtB,QAAQi6C,SAAU,GAGzB34C,KAAK44C,aAAa,GAEd54C,KAAKq4C,QAAQ,KACfr4C,KAAKtB,QAAQm6C,aAAc,EAC3B74C,KAAK84C,SAAW94C,KAAKq4C,QAAQpa,GAAG,GAChCj+B,KAAK+4C,QAAU/4C,KAAKo4C,OAAO32C,OAAS,EAAIzB,KAAKo4C,OAAOna,GAAG,GAAK,IAAE,IAAIj+B,KAAK84C,SAASh1C,KAAK,oBAEhF9D,KAAKo4C,OAAO,KACfp4C,KAAKo4C,OAASp4C,KAAKo4C,OAAOt8C,IAAIkE,KAAK+4C,UAIrC/4C,KAAK44C,aAAa,IAIpB54C,KAAKg5C,aAELh5C,KAAKqP,UACLrP,KAAKm4C,aAAc,CACrB,CAEAa,aACKh5C,KAAKq4C,QAAQ,GACdr4C,KAAKi5C,cAAcj5C,KAAKs4C,QAASt4C,KAAKo4C,OAAOna,GAAG,GAAGvgC,OAAO,KACxDsC,KAAKi5C,cAAcj5C,KAAK84C,SAAU94C,KAAKo4C,OAAOna,GAAG,GAAGvgC,MAAM,IAG5DsC,KAAKi5C,cAAcj5C,KAAKs4C,QAASt4C,KAAKo4C,OAAOna,GAAG,GAAGvgC,MAEvD,CAEAyzC,UACEnxC,KAAKg5C,YACP,CAMAE,UAAU3rC,GACR,IAAI4rC,EAAWC,GAAQ7rC,EAAQvN,KAAKtB,QAAQtB,MAAO4C,KAAKtB,QAAQo3B,IAAM91B,KAAKtB,QAAQtB,OAEnF,OAAO4C,KAAKtB,QAAQ26C,uBACpB,IAAK,MACHF,EAAWn5C,KAAKs5C,cAAcH,GAC9B,MACF,IAAK,MACHA,EAAWn5C,KAAKu5C,cAAcJ,GAIhC,OAAOA,EAAS/rC,QAAQ,EAC1B,CAOAosC,OAAOL,GACL,OAAOn5C,KAAKtB,QAAQ26C,uBACpB,IAAK,MACHF,EAAWn5C,KAAKu5C,cAAcJ,GAC9B,MACF,IAAK,MACHA,EAAWn5C,KAAKs5C,cAAcH,GAahC,OARIn5C,KAAKtB,QAAQ+5C,SAGP5rC,WAAW7M,KAAKtB,QAAQo3B,KAAOqjB,GAAYn5C,KAAKtB,QAAQtB,MAAQ4C,KAAKtB,QAAQo3B,MAE5E91B,KAAKtB,QAAQo3B,IAAM91B,KAAKtB,QAAQtB,OAAS+7C,EAAWtsC,WAAW7M,KAAKtB,QAAQtB,MAIzF,CAOAk8C,cAAc/rC,GACZ,OA8hBJ,SAAiBksC,EAAMlsC,GACrB,OAAO5P,KAAK+7C,IAAInsC,GAAO5P,KAAK+7C,IAAID,EAClC,CAhiBWE,CAAQ35C,KAAKtB,QAAQk7C,cAAiBrsC,GAAOvN,KAAKtB,QAAQk7C,cAAc,GAAI,EACrF,CAOAL,cAAchsC,GACZ,OAAQ5P,KAAKk8C,IAAI75C,KAAKtB,QAAQk7C,cAAersC,GAAS,IAAMvN,KAAKtB,QAAQk7C,cAAgB,EAC3F,CAYAX,cAAca,EAAO9a,EAAU/hC,GAE7B,IAAI+C,KAAK2D,SAAS07B,SAASr/B,KAAKtB,QAAQg6C,eAAxC,EAIA1Z,EAAWnyB,WAAWmyB,IAGPh/B,KAAKtB,QAAQtB,MAAS4hC,EAAWh/B,KAAKtB,QAAQtB,MACpD4hC,EAAWh/B,KAAKtB,QAAQo3B,MAAOkJ,EAAWh/B,KAAKtB,QAAQo3B,KAEhE,IAAIikB,EAAQ/5C,KAAKtB,QAAQm6C,YAEzB,GAAIkB,EACF,GAAkC,IAA9B/5C,KAAKq4C,QAAQ/rC,MAAMwtC,GAAc,CACnC,IAAIE,EAAQntC,WAAW7M,KAAK84C,SAASh1C,KAAK,kBAC1Ck7B,EAAWA,GAAYgb,EAAQA,EAAQh6C,KAAKtB,QAAQu7C,KAAOjb,CAC7D,KAAO,CACL,IAAIkb,EAAQrtC,WAAW7M,KAAKs4C,QAAQx0C,KAAK,kBACzCk7B,EAAWA,GAAYkb,EAAQA,EAAQl6C,KAAKtB,QAAQu7C,KAAOjb,CAC7D,CAGF,IAAIxtB,EAAQxR,KACRm6C,EAAOn6C,KAAKtB,QAAQ+5C,SACpB2B,EAAOD,EAAO,SAAW,QACzBE,EAAOF,EAAO,MAAQ,OACtBG,EAAYR,EAAM,GAAGvqB,wBAAwB6qB,GAC7CG,EAAUv6C,KAAK2D,SAAS,GAAG4rB,wBAAwB6qB,GAEnDjB,EAAWn5C,KAAKk5C,UAAUla,GAI1Bwb,GAAyC,IAA7BpB,IAFAmB,EAAUD,GAAanB,EAELoB,IAAgBntC,QAAQpN,KAAKtB,QAAQ+7C,SAEnEzb,EAAWnyB,WAAWmyB,EAAS5xB,QAAQpN,KAAKtB,QAAQ+7C,UAExD,IAAIh2C,EAAM,CAAC,EAKX,GAHAzE,KAAK06C,WAAWZ,EAAO9a,GAGnB+a,EAAO,CACT,IAEIY,EAFAC,EAA2C,IAA9B56C,KAAKq4C,QAAQ/rC,MAAMwtC,GAIhCe,EAAal9C,KAAKmD,MAAoC,IAA9Bs4C,GAAQkB,EAAWC,IAE/C,GAAIK,EAEFn2C,EAAI41C,GAAQ,GAAGG,KAEfG,EAAM9tC,WAAW7M,KAAK84C,SAAS,GAAGr+C,MAAM4/C,IAASG,EAAWK,EAGxD59C,GAAoB,mBAAPA,GAAqBA,QACjC,CAEL,IAAI69C,EAAYjuC,WAAW7M,KAAKs4C,QAAQ,GAAG79C,MAAM4/C,IAGjDM,EAAMH,GAAYl2C,MAAMw2C,IAAc96C,KAAKtB,QAAQq8C,aAAe/6C,KAAKtB,QAAQtB,SAAS4C,KAAKtB,QAAQo3B,IAAI91B,KAAKtB,QAAQtB,OAAO,KAAO09C,GAAaD,CACnJ,CAEAp2C,EAAI,OAAO21C,KAAU,GAAGO,IAC1B,EXhPJ,SAAc39C,EAAU2C,EAAMwK,GAC5B,IAAI6wC,EAAMC,EAAM79C,EAAQ,KAExB,GAAiB,IAAbJ,EAGF,OAFAmN,EAAG0F,MAAMlQ,QACTA,EAAKyG,QAAQ,sBAAuB,CAACzG,IAAOq2B,eAAe,sBAAuB,CAACr2B,IAerFq7C,EAAOviD,OAAO6E,uBAXd,SAAS49C,EAAKC,GACR/9C,IAAOA,EAAQ+9C,GACnBF,EAAOE,EAAK/9C,EACZ+M,EAAG0F,MAAMlQ,GAENs7C,EAAOj+C,EAAWg+C,EAAOviD,OAAO6E,sBAAsB49C,EAAMv7C,IAE7DlH,OAAO+N,qBAAqBw0C,GAC5Br7C,EAAKyG,QAAQ,sBAAuB,CAACzG,IAAOq2B,eAAe,sBAAuB,CAACr2B,IAEvF,GAEF,CWgOIy7C,CAFep7C,KAAK2D,SAAStN,KAAK,YAAc,IAAK,GAAK2J,KAAKtB,QAAQ28C,SAExDvB,GAAO,WAIhBx1C,MAAMk2C,GACRV,EAAMr1C,IAAI41C,EAAoB,IAAXlB,EAAH,KAGhBW,EAAMr1C,IAAI41C,EAAM,GAAGG,MAGhBhpC,EAAM9S,QAAQm6C,YAKjBrnC,EAAMgnC,MAAM/zC,IAAIA,GAHhB+M,EAAMgnC,MAAM/zC,IAAI21C,EAAoB,IAAXjB,EAAH,IAK1B,IAEIn5C,KAAKm4C,cACPn4C,KAAK2D,SAAS8B,IAAI,uBAAuB,WAKvC+L,EAAM7N,SAASyC,QAAQ,kBAAmB,CAAC0zC,GAC7C,IAKAjzC,aAAa2K,EAAMD,SACnBC,EAAMD,QAAUhT,YAAW,WACzBiT,EAAM7N,SAASyC,QAAQ,oBAAqB,CAAC0zC,GAC/C,GAAGtoC,EAAM9S,QAAQ48C,cAxGnB,CA0GF,CAQA1C,aAAara,GACX,IAAIgd,EAAmB,IAARhd,EAAYv+B,KAAKtB,QAAQq8C,aAAe/6C,KAAKtB,QAAQ88C,WAChE50C,EAAK5G,KAAKo4C,OAAOna,GAAGM,GAAKz6B,KAAK,OAAS2xB,EAAY,EAAG,UAC1Dz1B,KAAKo4C,OAAOna,GAAGM,GAAKz6B,KAAK,CACvB,GAAM8C,EACN,IAAO5G,KAAKtB,QAAQo3B,IACpB,IAAO91B,KAAKtB,QAAQtB,MACpB,KAAQ4C,KAAKtB,QAAQu7C,OAEvBj6C,KAAKo4C,OAAOna,GAAGM,GAAK7gC,IAAI69C,GACxBv7C,KAAKq4C,QAAQpa,GAAGM,GAAKz6B,KAAK,CACxB,KAAQ,SACR,gBAAiB8C,EACjB,gBAAiB5G,KAAKtB,QAAQo3B,IAC9B,gBAAiB91B,KAAKtB,QAAQtB,MAC9B,gBAAiBm+C,EACjB,mBAAoBv7C,KAAKtB,QAAQ+5C,SAAW,WAAa,aACzD,SAAY,GAEhB,CASAiC,WAAWpC,EAAS56C,GAClB,IAAI6gC,EAAMv+B,KAAKtB,QAAQm6C,YAAc74C,KAAKq4C,QAAQ/rC,MAAMgsC,GAAW,EACnEt4C,KAAKo4C,OAAOna,GAAGM,GAAK7gC,IAAIA,GACxB46C,EAAQx0C,KAAK,gBAAiBpG,EAChC,CAaA+9C,aAAaliD,EAAG++C,EAAS56C,GACvB,IAAI6P,EACJ,GAAK7P,EAwCH6P,EAAQvN,KAAK07C,aAAa,KAAMh+C,OAxCxB,CACRnE,EAAE0E,iBACF,IACIw6C,EAAWz4C,KAAKtB,QAAQ+5C,SACxBxgB,EAAQwgB,EAAW,SAAW,QAC9BkD,EAAYlD,EAAW,MAAQ,OAC/BmD,EAAcnD,EAAWl/C,EAAEsiD,MAAQtiD,EAAEkyC,MACrCqQ,EAAS97C,KAAK2D,SAAS,GAAG4rB,wBAAwB0I,GAClD8jB,EAAetD,EAAW,IAAEhgD,QAAQ+D,YAAc,IAAE/D,QAAQ4P,aAE5D2zC,EAAah8C,KAAK2D,SAAS2D,SAASq0C,GAIpCpiD,EAAEkzC,UAAYlzC,EAAEsiD,QAASD,GAA4BG,GACzD,IACIE,EADAC,EAAeN,EAAcI,EAS7BG,EAAY/C,GANd6C,EADEC,EAAe,EACT,EACCA,EAAeJ,EAChBA,EAEAI,EAEqBJ,GAS/B,GAPAvuC,EAAQvN,KAAKw5C,OAAO2C,GAGhB,MAAUn8C,KAAKtB,QAAQ+5C,WAAWlrC,EAAQvN,KAAKtB,QAAQo3B,IAAMvoB,GAEjEA,EA7BYvN,KA6BE07C,aAAa,KAAMnuC,IAE5B+qC,EAGCA,EAFe8D,GAAYp8C,KAAKs4C,QAASqD,EAAWM,EAAOhkB,IAC5CmkB,GAAYp8C,KAAK84C,SAAU6C,EAAWM,EAAOhkB,GACnBj4B,KAAKs4C,QAAUt4C,KAAK84C,QAGrE,CAIA94C,KAAKi5C,cAAcX,EAAS/qC,EAC9B,CASAmuC,aAAapD,EAAS/qC,GACpB,IAAI7P,EAGF8H,EAAM62C,EAFNpC,EAAOj6C,KAAKtB,QAAQu7C,KACpB/pC,EAAMrD,WAAWotC,EAAK,GAexB,OAAa,KANXz0C,GANA9H,EADI46C,EACEzrC,WAAWyrC,EAAQx0C,KAAK,kBAGxByJ,IAEG,EACF7P,EAAMu8C,EAENA,EAAQv8C,EAAMu8C,GAKdv8C,EAETA,EAAMA,IALN2+C,EAAc3+C,EAAM8H,GAKO0K,EAJjBmsC,EAAcpC,EAImBoC,CAE7C,CAOAhtC,UACErP,KAAKs8C,iBAAiBt8C,KAAKs4C,SACxBt4C,KAAKq4C,QAAQ,IACdr4C,KAAKs8C,iBAAiBt8C,KAAK84C,SAE/B,CASAwD,iBAAiBhE,GACf,IACIiE,EADA/qC,EAAQxR,KAGV,MAAMw8C,EAAoB,SAASjjD,GACjC,MAAMglC,EAAM/sB,EAAM4mC,OAAO9rC,MAAM,IAAEtM,OACjCwR,EAAMiqC,aAAaliD,EAAGiY,EAAM6mC,QAAQpa,GAAGM,GAAM,IAAEv+B,MAAMtC,MACvD,EAyBF,GApBEsC,KAAKo4C,OAAOnuC,IAAI,mBAAmBT,GAAG,mBAAmB,SAAUjQ,GAChD,KAAdA,EAAEmjC,SAAgB8f,EAAkB56C,KAAK5B,KAAMzG,EACpD,IAEAyG,KAAKo4C,OAAOnuC,IAAI,oBAAoBT,GAAG,mBAAoBgzC,GAEvDx8C,KAAKtB,QAAQ+9C,aACfz8C,KAAK2D,SAASsG,IAAI,mBAAmBT,GAAG,mBAAmB,SAASjQ,GAClE,GAAIiY,EAAM7N,SAAStN,KAAK,YAAe,OAAO,EAEzC,IAAEkD,EAAE+I,QAAQuB,GAAG,0BACd2N,EAAM9S,QAAQm6C,YAChBrnC,EAAMiqC,aAAaliD,GAEnBiY,EAAMiqC,aAAaliD,EAAGiY,EAAM8mC,SAGlC,IAGAt4C,KAAKtB,QAAQg+C,UAAW,CAC1B18C,KAAKq4C,QAAQsE,WAEb,IAAI9O,EAAQ,IAAE,QACdyK,EACGruC,IAAI,uBACJT,GAAG,uBAAuB,SAASjQ,GAClC++C,EAAQlzC,SAAS,eACjBoM,EAAMgnC,MAAMpzC,SAAS,eACrBoM,EAAM7N,SAAStN,KAAK,YAAY,GAEhCkmD,EAAY,IAAEhjD,EAAEq9B,eAEhBiX,EAAMrkC,GAAG,uBAAuB,SAASgqC,GACvCA,EAAGv1C,iBACHuT,EAAMiqC,aAAajI,EAAI+I,EAEzB,IAAG/yC,GAAG,qBAAqB,SAASgqC,GAClChiC,EAAMiqC,aAAajI,EAAI+I,GAEvBjE,EAAQvd,YAAY,eACpBvpB,EAAMgnC,MAAMzd,YAAY,eACxBvpB,EAAM7N,SAAStN,KAAK,YAAY,GAEhCw3C,EAAM5jC,IAAI,wCACZ,GACJ,IAECT,GAAG,6CAA6C,SAASjQ,GACxDA,EAAE0E,gBACJ,GACF,CAEAq6C,EAAQruC,IAAI,qBAAqBT,GAAG,qBAAqB,SAASjQ,GAChE,IAGIqjD,EAHAC,EAAW,IAAE78C,MAEb88C,GADMtrC,EAAM9S,QAAQm6C,aAAcrnC,EAAM6mC,QAAQ/rC,MAAMuwC,GAC3ChwC,WAAWyrC,EAAQx0C,KAAK,mBAIvCi5B,EAASI,UAAU5jC,EAAG,SAAU,CAC9BwjD,SAAU,WACRH,EAAWE,EAAWtrC,EAAM9S,QAAQu7C,IACtC,EACA+C,SAAU,WACRJ,EAAWE,EAAWtrC,EAAM9S,QAAQu7C,IACtC,EACAgD,aAAc,WACZL,EAAWE,EAAgC,GAArBtrC,EAAM9S,QAAQu7C,IACtC,EACAiD,aAAc,WACZN,EAAWE,EAAgC,GAArBtrC,EAAM9S,QAAQu7C,IACtC,EACApyC,IAAK,WACH+0C,EAAWprC,EAAM9S,QAAQtB,KAC3B,EACAyD,IAAK,WACH+7C,EAAWprC,EAAM9S,QAAQo3B,GAC3B,EACA2H,QAAS,WACPlkC,EAAE0E,iBACFuT,EAAMynC,cAAc4D,EAAUD,EAChC,GAMJ,GACF,CAKA5gC,WACEhc,KAAKq4C,QAAQpuC,IAAI,cACjBjK,KAAKo4C,OAAOnuC,IAAI,cAChBjK,KAAK2D,SAASsG,IAAI,cAElBpD,aAAa7G,KAAKuR,QACpB,EA4IF,SAAS6nC,GAAQ+D,EAAMltC,GACrB,OAAQktC,EAAOltC,CACjB,CACA,SAASmsC,GAAY9D,EAAS/M,EAAK6R,EAAUnlB,GAC3C,OAAOt6B,KAAKguC,IAAK2M,EAAQt0C,WAAWunC,GAAQ+M,EAAQrgB,KAAW,EAAMmlB,EACvE,CA9IAlF,GAAOzrB,SAAW,CAOhBrvB,MAAO,EAOP04B,IAAK,IAOLmkB,KAAM,EAONc,aAAc,EAOdS,WAAY,IAOZ7C,SAAS,EAOT8D,aAAa,EAObhE,UAAU,EAOViE,WAAW,EAOXrjD,UAAU,EAOVw/C,aAAa,EAWb4B,QAAS,EAWTY,SAAU,IAOV3C,cAAe,WAOf2E,gBAAgB,EAOhB/B,aAAc,IAOd1B,cAAe,EAOfP,sBAAuB,UCxrBzB,MAAMiE,WAAqBrhB,EASvBC,OAAO/+B,EAASuB,GACZsB,KAAK2D,SAAWxG,EAChB6C,KAAKtB,QAAU,WAAS,CAAC,EAAG4+C,GAAa7wB,SAAUzsB,KAAK2D,SAAStN,OAAQqI,GACzEsB,KAAK3I,UAAY,eAEjB2I,KAAKgY,OACT,CAMAA,QACI,MAAMpR,EAAK5G,KAAK2D,SAAS,GAAGiD,IAAM6uB,EAAY,EAAG,iBACjDz1B,KAAK2D,SAASG,KAAK,CAAE8C,OAErB5G,KAAKqP,SACT,CAMAA,UACIrP,KAAKu9C,mBAAqBv9C,KAAKw9C,iBAAiB/1B,KAAKznB,MACrDA,KAAK2D,SAAS6F,GAAG,wBAAyBxJ,KAAKu9C,oBAC/Cv9C,KAAK2D,SAAS6F,GAAG,wBAAyB,eAAgBxJ,KAAKu9C,mBACnE,CAQAC,iBAAiBjkD,GAEb,IAAK,IAAEA,EAAEq9B,eAAe/yB,GAAG,gBAAiB,OAE5C,MAAM45C,EAAUlkD,EAAEq9B,cAAc/4B,aAAa,QAE7CmC,KAAK09C,eAAgB,EAErBJ,GAAaK,YAAYF,EAASz9C,KAAKtB,SAAS,KAC5CsB,KAAK09C,eAAgB,CAAK,IAG9BnkD,EAAE0E,gBACN,CAUA2/C,mBAAmBC,EAAKn/C,EAAU4+C,GAAa7wB,SAAUhmB,GACrD,MAAMq3C,EAAO,IAAED,GAGf,IAAKC,EAAKr8C,OAAQ,OAAO,EAEzB,IAAIoyC,EAAYl2C,KAAKkW,MAAMiqC,EAAKx2C,SAAS/B,IAAM7G,EAAQ2S,UAAY,EAAI3S,EAAQ4I,QAE/E,IAAE,cAAcg6B,MAAK,GAAMtiC,QACvB,CAAExC,UAAWq3C,GACbn1C,EAAQq1C,kBACRr1C,EAAQs1C,iBACR,KAC4B,mBAAbvtC,GACPA,GACJ,GAGZ,CAMAuV,WACIhc,KAAK2D,SAASsG,IAAI,wBAAyBjK,KAAKu9C,oBAChDv9C,KAAK2D,SAASsG,IAAI,wBAAyB,eAAgBjK,KAAKu9C,mBACpE,EAMJD,GAAa7wB,SAAW,CAOtBsnB,kBAAmB,IAQnBC,gBAAiB,SAOjB3iC,UAAW,GAOX/J,OAAQ,GC5HV,MAAMy2C,WAAe9hB,EAQnBC,OAAO/+B,EAASuB,GACdsB,KAAK2D,SAAWxG,EAChB6C,KAAKtB,QAAU,WAAS,CAAC,EAAGq/C,GAAOtxB,SAAUzsB,KAAK2D,SAAStN,OAAQqI,GACnEsB,KAAK3I,UAAY,SAGjB6wC,EAAS7lB,KAAK,KAEdriB,KAAKgY,OACP,CAOAA,QACE3d,EAAW2d,QAEX,IAAIivB,EAAUjnC,KAAK2D,SAASy7B,OAAO,2BAC/Bx4B,EAAK5G,KAAK2D,SAAS,GAAGiD,IAAM6uB,EAAY,EAAG,UAC3CjkB,EAAQxR,KAETinC,EAAQxlC,OACTzB,KAAKg+C,WAAa/W,GAElBjnC,KAAKi+C,YAAa,EAClBj+C,KAAK2D,SAAS4+B,KAAKviC,KAAKtB,QAAQyE,WAChCnD,KAAKg+C,WAAah+C,KAAK2D,SAASy7B,UAElCp/B,KAAKg+C,WAAW54C,SAASpF,KAAKtB,QAAQw/C,gBAEtCl+C,KAAK2D,SAASyB,SAASpF,KAAKtB,QAAQy/C,aAAar6C,KAAK,CAAE,cAAe8C,EAAI,cAAeA,IAC9D,KAAxB5G,KAAKtB,QAAQqgC,QACb,IAAE,IAAMvtB,EAAM9S,QAAQqgC,QAAQj7B,KAAK,CAAE,cAAe8C,IAGxD5G,KAAKo+C,YAAcp+C,KAAKtB,QAAQ2/C,WAChCr+C,KAAKs+C,SAAU,EACft+C,KAAK22C,eAAiB1gB,EAAO,IAAEx9B,SAAS,WAEtC+Y,EAAM+sC,gBAAoD,SAAlC/sC,EAAM7N,SAASc,IAAI,WAAwB,EAAI+M,EAAM7N,SAAS,GAAG4rB,wBAAwB/uB,OACjHgR,EAAMwsC,WAAWv5C,IAAI,SAAU+M,EAAM+sC,iBACrC/sC,EAAMgtC,WAAahtC,EAAM+sC,gBACI,KAAzB/sC,EAAM9S,QAAQqgC,OAChBvtB,EAAM0tB,QAAU,IAAE,IAAM1tB,EAAM9S,QAAQqgC,QAEtCvtB,EAAMitC,eAGRjtC,EAAMktC,WAAU,WACd,IAAIC,EAASlmD,OAAOkR,YACpB6H,EAAMotC,OAAM,EAAOD,GAEdntC,EAAM8sC,SACT9sC,EAAMqtC,gBAAeF,GAAUntC,EAAMstC,UAEzC,IACAttC,EAAMnC,QAAQzI,EAAGnE,MAAM,KAAKs8C,UAAUr8C,KAAK,KAC7C,GACF,CAOA+7C,eAKE,IAJA,IAEIO,EAAM,CAF2B,KAA3Bh/C,KAAKtB,QAAQugD,UAAmB,EAAIj/C,KAAKtB,QAAQugD,UACtB,KAA3Bj/C,KAAKtB,QAAQwgD,UAAmB/mD,SAASsE,gBAAgBb,aAAeoE,KAAKtB,QAAQwgD,WAE3FC,EAAS,CAAC,EACL9mD,EAAI,EAAGkhB,EAAMylC,EAAIv9C,OAAQpJ,EAAIkhB,GAAOylC,EAAI3mD,GAAIA,IAAK,CACxD,IAAI+mD,EACJ,GAAsB,iBAAXJ,EAAI3mD,GACb+mD,EAAKJ,EAAI3mD,OACJ,CACL,IAAIgnD,EAAQL,EAAI3mD,GAAGoK,MAAM,KACrBs8B,EAAS,IAAE,IAAIsgB,EAAM,MAEzBD,EAAKrgB,EAAOz3B,SAAS/B,IACjB85C,EAAM,IAAiC,WAA3BA,EAAM,GAAGp7C,gBACvBm7C,GAAMrgB,EAAO,GAAGxP,wBAAwB/uB,OAE5C,CACA2+C,EAAO9mD,GAAK+mD,CACd,CAGAp/C,KAAKs/C,OAASH,CAEhB,CAOA9vC,QAAQzI,GACN,IAAI4K,EAAQxR,KACRupC,EAAiBvpC,KAAKupC,eAAiB,aAAa3iC,IACpD5G,KAAK0wC,OACL1wC,KAAKu/C,WACPv/C,KAAK0wC,MAAO,EACZ,IAAEj4C,QAAQwR,IAAIs/B,GACJ//B,GAAG+/B,GAAgB,WACQ,IAAtB/3B,EAAM4sC,aACR5sC,EAAM4sC,YAAc5sC,EAAM9S,QAAQ2/C,WAClC7sC,EAAMktC,WAAU,WACdltC,EAAMotC,OAAM,EAAOnmD,OAAOkR,YAC5B,MAEA6H,EAAM4sC,cACN5sC,EAAMotC,OAAM,EAAOnmD,OAAOkR,aAE/B,KAGV3J,KAAK2D,SAASsG,IAAI,uBACJT,GAAG,uBAAuB,WACxBgI,EAAMguC,eAAe54C,EACrC,IAEA5G,KAAK2D,SAAS6F,GAAG,uBAAuB,WACpCgI,EAAMguC,eAAe54C,EACzB,IAEG5G,KAAKk/B,SACNl/B,KAAKk/B,QAAQ11B,GAAG,uBAAuB,WACnCgI,EAAMguC,eAAe54C,EACzB,IAEJ,CAOA44C,eAAe54C,GACV,IAAI4K,EAAQxR,KACXupC,EAAiBvpC,KAAKupC,eAAiB,aAAa3iC,IAErD4K,EAAMktC,WAAU,WAChBltC,EAAMotC,OAAM,GACRptC,EAAM+tC,SACH/tC,EAAMk/B,MACTl/B,EAAMnC,QAAQzI,GAEP4K,EAAMk/B,MACfl/B,EAAMiuC,gBAAgBlW,EAE1B,GACH,CAOAkW,gBAAgBlW,GACdvpC,KAAK0wC,MAAO,EACZ,IAAEj4C,QAAQwR,IAAIs/B,GAObvpC,KAAK2D,SAASyC,QAAQ,kBACzB,CAQAw4C,MAAMc,EAAYf,GAGhB,GAFIe,GAAc1/C,KAAK0+C,aAElB1+C,KAAKu/C,SAIR,OAHIv/C,KAAKs+C,SACPt+C,KAAK6+C,eAAc,IAEd,EAGJF,IAAUA,EAASlmD,OAAOkR,aAE3Bg1C,GAAU3+C,KAAK8+C,SACbH,GAAU3+C,KAAK2/C,YACZ3/C,KAAKs+C,SACRt+C,KAAK4/C,aAGH5/C,KAAKs+C,SACPt+C,KAAK6+C,eAAc,GAInB7+C,KAAKs+C,SACPt+C,KAAK6+C,eAAc,EAGzB,CASAe,aACE,IAAIpuC,EAAQxR,KACR6/C,EAAU7/C,KAAKtB,QAAQmhD,QACvBC,EAAmB,QAAZD,EAAoB,YAAc,eACzCE,EAAyB,QAAZF,EAAoB,SAAW,MAC5Cp7C,EAAM,CAAC,EAEXA,EAAIq7C,GAAQ,GAAG9/C,KAAKtB,QAAQohD,OAC5Br7C,EAAIo7C,GAAW,EACfp7C,EAAIs7C,GAAc,OAClB//C,KAAKs+C,SAAU,EACft+C,KAAK2D,SAASo3B,YAAY,qBAAqBglB,KACjC36C,SAAS,kBAAkBy6C,KAC3Bp7C,IAAIA,GAMJ2B,QAAQ,qBAAqBy5C,KAC3C7/C,KAAK2D,SAAS6F,GAAG,mFAAmF,WAClGgI,EAAMktC,WACR,GACF,CAUAG,cAAcmB,GACZ,IAAIH,EAAU7/C,KAAKtB,QAAQmhD,QACvBI,EAAyB,QAAZJ,EACbp7C,EAAM,CAAC,EACPy7C,GAAYlgD,KAAKs/C,OAASt/C,KAAKs/C,OAAO,GAAKt/C,KAAKs/C,OAAO,GAAKt/C,KAAKmgD,cAAgBngD,KAAKw+C,WAEtF4B,EAAcJ,EAAQ,MAAQ,SAElCv7C,EAHWw7C,EAAa,YAAc,gBAG1B,EAEZx7C,EAAI+f,OAAS,OAEX/f,EAAIc,IADHy6C,EACS,EAEAE,EAGZlgD,KAAKs+C,SAAU,EACft+C,KAAK2D,SAASo3B,YAAY,kBAAkB8kB,KAC9Bz6C,SAAS,qBAAqBg7C,KAC9B37C,IAAIA,GAMJ2B,QAAQ,yBAAyBg6C,IACjD,CAQA1B,UAAUzhD,GACR+C,KAAKu/C,SAAWllD,EAAWwJ,GAAG7D,KAAKtB,QAAQ2hD,UACtCrgD,KAAKu/C,UACJtiD,GAAoB,mBAAPA,GAAqBA,IAGxC,IAAIqjD,EAAetgD,KAAKg+C,WAAW,GAAGzuB,wBAAwBrzB,MAC5DqkD,EAAO9nD,OAAOoH,iBAAiBG,KAAKg+C,WAAW,IAC/CwC,EAAQziD,SAASwiD,EAAK,gBAAiB,IACvCE,EAAQ1iD,SAASwiD,EAAK,iBAAkB,IAa1C,GAXIvgD,KAAKk/B,SAAWl/B,KAAKk/B,QAAQz9B,OAC/BzB,KAAKmgD,aAAengD,KAAKk/B,QAAQ,GAAG3P,wBAAwB/uB,OAE5DR,KAAKy+C,eAGPz+C,KAAK2D,SAASc,IAAI,CAChB,YAAgB67C,EAAeE,EAAQC,EAA1B,OAIXzgD,KAAKtB,QAAQgiD,gBAAkB1gD,KAAKu+C,gBAAiB,CAEvD,IAAIoC,EAAqB3gD,KAAK2D,SAAS,GAAG4rB,wBAAwB/uB,QAAUR,KAAKu+C,gBACjFoC,EAAsD,SAAjC3gD,KAAK2D,SAASc,IAAI,WAAwB,EAAIk8C,EACnE3gD,KAAKg+C,WAAWv5C,IAAI,SAAUk8C,GAC9B3gD,KAAKu+C,gBAAkBoC,CACzB,CAGA,GAFA3gD,KAAKw+C,WAAax+C,KAAKu+C,iBAElBv+C,KAAKs+C,SACJt+C,KAAK2D,SAAS07B,SAAS,gBAAiB,CAC1C,IAAI6gB,GAAYlgD,KAAKs/C,OAASt/C,KAAKs/C,OAAO,GAAKt/C,KAAKg+C,WAAW12C,SAAS/B,IAAMvF,KAAKmgD,cAAgBngD,KAAKw+C,WACxGx+C,KAAK2D,SAASc,IAAI,MAAOy7C,EAC3B,CAGFlgD,KAAK4gD,gBAAgB5gD,KAAKu+C,iBAAiB,WACrCthD,GAAoB,mBAAPA,GAAqBA,GACxC,GACF,CAQA2jD,gBAAgBpC,EAAYvhD,GAC1B,IAAK+C,KAAKu/C,SAAU,CAClB,IAAItiD,GAAoB,mBAAPA,EACV,OAAO,EADwBA,GAExC,CACA,IAAI4jD,EAAOC,GAAO9gD,KAAKtB,QAAQmW,WAC3BksC,EAAOD,GAAO9gD,KAAKtB,QAAQoW,cAC3BgqC,EAAW9+C,KAAKs/C,OAASt/C,KAAKs/C,OAAO,GAAKt/C,KAAKk/B,QAAQ53B,SAAS/B,IAChEo6C,EAAc3/C,KAAKs/C,OAASt/C,KAAKs/C,OAAO,GAAKR,EAAW9+C,KAAKmgD,aAG7Dz4C,EAAYjP,OAAOoD,YAEM,QAAzBmE,KAAKtB,QAAQmhD,SACff,GAAY+B,EACZlB,GAAgBnB,EAAaqC,GACK,WAAzB7gD,KAAKtB,QAAQmhD,UACtBf,GAAap3C,GAAa82C,EAAauC,GACvCpB,GAAgBj4C,EAAYq5C,GAK9B/gD,KAAK8+C,SAAWA,EAChB9+C,KAAK2/C,YAAcA,EAEf1iD,GAAoB,mBAAPA,GAAqBA,GACxC,CAQA+e,WACEhc,KAAK6+C,eAAc,GAEnB7+C,KAAK2D,SAASo3B,YAAY,GAAG/6B,KAAKtB,QAAQy/C,qCAC5B15C,IAAI,CACHjE,OAAQ,GACR+E,IAAK,GACLif,OAAQ,GACR,YAAa,KAEdva,IAAI,uBACJA,IAAI,uBACdjK,KAAKk/B,SAAWl/B,KAAKk/B,QAAQz9B,QAC/BzB,KAAKk/B,QAAQj1B,IAAI,oBAEfjK,KAAKupC,gBAAgB,IAAE9wC,QAAQwR,IAAIjK,KAAKupC,gBACxCvpC,KAAK22C,gBAAgB,IAAEl+C,QAAQwR,IAAIjK,KAAK22C,gBAExC32C,KAAKi+C,WACPj+C,KAAK2D,SAAS8wC,SAEdz0C,KAAKg+C,WAAWjjB,YAAY/6B,KAAKtB,QAAQw/C,gBACzBz5C,IAAI,CACHjE,OAAQ,IAG7B,EA8FF,SAASsgD,GAAOE,GACd,OAAOjjD,SAAStF,OAAOoH,iBAAiB1H,SAASmD,KAAM,MAAM2lD,SAAU,IAAMD,CAC/E,CA7FAjD,GAAOtxB,SAAW,CAOhBtpB,UAAW,oCAOX08C,QAAS,MAOT9gB,OAAQ,GAORkgB,UAAW,GAOXC,UAAW,GAOXrqC,UAAW,EAOXC,aAAc,EAOdurC,SAAU,SAOVlC,YAAa,SAObD,eAAgB,mBAOhBwC,eAAe,EAOfrC,YAAa,GCxef,MAAM6C,WAAajlB,EASjBC,OAAO/+B,EAASuB,GACdsB,KAAK2D,SAAWxG,EAChB6C,KAAKtB,QAAU,WAAS,CAAC,EAAGwiD,GAAKz0B,SAAUzsB,KAAK2D,SAAStN,OAAQqI,GACjEsB,KAAK3I,UAAY,OAEjB2I,KAAKgY,QACL+kB,EAASY,SAAS,OAAQ,CACxB,MAAS,OACT,MAAS,OACT,YAAe,OACf,SAAY,WACZ,WAAc,OACd,WAAc,YAIlB,CAMA3lB,QACE,IAAIxG,EAAQxR,KAgDZ,GA/CAA,KAAKq+B,iBAAkB,EAEvBr+B,KAAK2D,SAASG,KAAK,CAAC,KAAQ,YAC5B9D,KAAKmhD,WAAanhD,KAAK2D,SAAS5L,KAAK,IAAIiI,KAAKtB,QAAQ0iD,aACtDphD,KAAK2/B,YAAc,IAAE,uBAAuB3/B,KAAK2D,SAAS,GAAGiD,QAE7D5G,KAAKmhD,WAAWt3C,MAAK,WACnB,IAAIgsB,EAAQ,IAAE71B,MACVm/B,EAAQtJ,EAAM99B,KAAK,KACnBqqC,EAAWvM,EAAMwJ,SAAS,GAAG7tB,EAAM9S,QAAQ2iD,mBAC3CpiB,EAAOE,EAAMr7B,KAAK,qBAAuBq7B,EAAM,GAAGF,KAAK79B,MAAM,GAC7Dq9B,EAASU,EAAM,GAAGv4B,GAAKu4B,EAAM,GAAGv4B,GAAK,GAAGq4B,UACxCU,EAAc,IAAE,IAAIV,KAExBpJ,EAAM/xB,KAAK,CAAC,KAAQ,iBAEpBq7B,EAAMr7B,KAAK,CACT,KAAQ,MACR,gBAAiBm7B,EACjB,gBAAiBmD,EACjB,GAAM3D,EACN,SAAY2D,EAAW,IAAM,OAG/BzC,EAAY77B,KAAK,CACf,KAAQ,WACR,kBAAmB26B,IAIjB2D,IACF5wB,EAAMmtB,eAAiB,IAAIM,KAGzBmD,GACFzC,EAAY77B,KAAK,cAAe,QAG/Bs+B,GAAY5wB,EAAM9S,QAAQovC,YAC3Bt8B,EAAMmlC,eAAiB1gB,EAAO,IAAEx9B,SAAS,WACvC,IAAE,cAAcuG,QAAQ,CAAExC,UAAWq5B,EAAMvuB,SAAS/B,KAAOiM,EAAM9S,QAAQ+gC,qBAAqB,KAC5FN,EAAM9gC,OAAO,GAEjB,IAEJ,IAEG2B,KAAKtB,QAAQ4iD,YAAa,CAC3B,IAAIC,EAAUvhD,KAAK2/B,YAAY5nC,KAAK,OAEhCwpD,EAAQ9/C,OACVsuC,GAAewR,EAASvhD,KAAKwhD,WAAW/5B,KAAKznB,OAE7CA,KAAKwhD,YAET,CAGAxhD,KAAK8+B,eAAiB,KACpB,IAAIC,EAAStmC,OAAOumC,SAASC,KAE7B,IAAKF,EAAOt9B,OAAQ,CAElB,GAAIzB,KAAKq+B,gBAAiB,OAEtBr+B,KAAK2+B,iBAAgBI,EAAS/+B,KAAK2+B,eACzC,CAEA,IAAI8iB,EAAe1iB,EAAOt/B,QAAQ,MAAQ,EAAIs/B,EAAO39B,MAAM,GAAK29B,EAC5DG,EAAUuiB,GAAgB,IAAE,IAAIA,KAChCtiB,EAAQJ,GAAU/+B,KAAK2D,SAAS5L,KAAK,WAAWgnC,0BAA+B0iB,OAAkB1hB,QAIrG,MAFqBb,EAAQz9B,SAAU09B,EAAM19B,QAE5B,CAWf,GATIy9B,GAAWA,EAAQz9B,QAAU09B,GAASA,EAAM19B,OAC9CzB,KAAK0hD,UAAUxiB,GAAS,GAIxBl/B,KAAK2hD,YAIH3hD,KAAKtB,QAAQ6gC,eAAgB,CAC/B,IAAIj4B,EAAStH,KAAK2D,SAAS2D,SAC3B,IAAE,cAActI,QAAQ,CAAExC,UAAW8K,EAAO/B,IAAMvF,KAAKtB,QAAQ8gC,sBAAuBx/B,KAAKtB,QAAQ+gC,oBACrG,CAMAz/B,KAAK2D,SAASyC,QAAQ,mBAAoB,CAAC+4B,EAAOD,GACpD,GAIEl/B,KAAKtB,QAAQghC,UACf1/B,KAAK8+B,iBAGP9+B,KAAKqP,UAELrP,KAAKq+B,iBAAkB,CACzB,CAMAhvB,UACErP,KAAK4hD,iBACL5hD,KAAK6hD,mBACL7hD,KAAK8hD,oBAAsB,KAEvB9hD,KAAKtB,QAAQ4iD,cACfthD,KAAK8hD,oBAAsB9hD,KAAKwhD,WAAW/5B,KAAKznB,MAEhD,IAAEvH,QAAQ+Q,GAAG,wBAAyBxJ,KAAK8hD,sBAG1C9hD,KAAKtB,QAAQghC,UACd,IAAEjnC,QAAQ+Q,GAAG,aAAcxJ,KAAK8+B,eAEpC,CAMA+iB,mBACE,IAAIrwC,EAAQxR,KAEZA,KAAK2D,SACFsG,IAAI,iBACJT,GAAG,gBAAiB,IAAIxJ,KAAKtB,QAAQ0iD,aAAa,SAAS7nD,GAC1DA,EAAE0E,iBACFuT,EAAMuwC,iBAAiB,IAAE/hD,MAC3B,GACJ,CAMA4hD,iBACE,IAAIpwC,EAAQxR,KAEZA,KAAKmhD,WAAWl3C,IAAI,mBAAmBT,GAAG,mBAAmB,SAASjQ,GACpE,GAAgB,IAAZA,EAAEg6B,MAAN,CAGA,IAEEsP,EACAC,EAHEn/B,EAAW,IAAE3D,MACf+iC,EAAYp/B,EAASy7B,OAAO,MAAM59B,SAAS,MAI7CuhC,EAAUl5B,MAAK,SAASxR,GAClB,IAAE2H,MAAM6D,GAAGF,KACT6N,EAAM9S,QAAQsjD,YAChBnf,EAAqB,IAANxqC,EAAU0qC,EAAU/C,OAAS+C,EAAU9E,GAAG5lC,EAAE,GAC3DyqC,EAAezqC,IAAM0qC,EAAUthC,OAAQ,EAAIshC,EAAUhD,QAAUgD,EAAU9E,GAAG5lC,EAAE,KAE9EwqC,EAAeE,EAAU9E,GAAGtgC,KAAKkD,IAAI,EAAGxI,EAAE,IAC1CyqC,EAAeC,EAAU9E,GAAGtgC,KAAKkK,IAAIxP,EAAE,EAAG0qC,EAAUthC,OAAO,KAIjE,IAGAs7B,EAASI,UAAU5jC,EAAG,OAAQ,CAC5B0pC,KAAM,WACJt/B,EAAS5L,KAAK,gBAAgBsG,QAC9BmT,EAAMuwC,iBAAiBp+C,EACzB,EACAm8B,SAAU,WACR+C,EAAa9qC,KAAK,gBAAgBsG,QAClCmT,EAAMuwC,iBAAiBlf,EACzB,EACAjK,KAAM,WACJkK,EAAa/qC,KAAK,gBAAgBsG,QAClCmT,EAAMuwC,iBAAiBjf,EACzB,EACArF,QAAS,WACPlkC,EAAE0E,gBACJ,GArCuB,CAuC3B,GACF,CASA8jD,iBAAiB9hB,EAASgiB,GAGxB,GAAIhiB,EAAQZ,SAAS,GAAGr/B,KAAKtB,QAAQ2iD,mBAC9BrhD,KAAKtB,QAAQwjD,gBACZliD,KAAK2hD,gBAFb,CAOA,IAAIQ,EAAUniD,KAAK2D,SACb5L,KAAK,IAAIiI,KAAKtB,QAAQ0iD,aAAaphD,KAAKtB,QAAQ2iD,mBAChDe,EAAWniB,EAAQloC,KAAK,gBACxBuK,EAAS8/C,EAASt+C,KAAK,oBACvBi7B,EAASz8B,GAAUA,EAAOb,OAAS,IAAIa,IAAW8/C,EAAS,GAAGnjB,KAC9DojB,EAAiBriD,KAAK2/B,YAAY5nC,KAAKgnC,GAG7C/+B,KAAKsiD,aAAaH,GAGlBniD,KAAKwgC,SAASP,GAGVjgC,KAAKtB,QAAQghC,WAAauiB,IACxBjiD,KAAKtB,QAAQ0hC,cACfC,QAAQC,UAAU,CAAC,EAAG,GAAIvB,GAE1BsB,QAAQE,aAAa,CAAC,EAAG,GAAIxB,IAQjC/+B,KAAK2D,SAASyC,QAAQ,iBAAkB,CAAC65B,EAASoiB,IAGlDA,EAAetqD,KAAK,iBAAiBqO,QAAQ,sBA/B7C,CAgCF,CAOAo6B,SAASP,GACL,IAAImiB,EAAWniB,EAAQloC,KAAK,gBACxBknC,EAAOmjB,EAASt+C,KAAK,qBAAuBs+C,EAAS,GAAGnjB,KAAK79B,MAAM,GACnEihD,EAAiBriD,KAAK2/B,YAAY5nC,KAAK,IAAIknC,KAE/CgB,EAAQ76B,SAAS,GAAGpF,KAAKtB,QAAQ2iD,mBAEjCe,EAASt+C,KAAK,CACZ,gBAAiB,OACjB,SAAY,MAGdu+C,EACGj9C,SAAS,GAAGpF,KAAKtB,QAAQ6jD,oBAAoBroB,WAAW,cAC/D,CAOAooB,aAAariB,GACX,IAAIuiB,EAAgBviB,EACjBlF,YAAY,GAAG/6B,KAAKtB,QAAQ2iD,mBAC5BtpD,KAAK,gBACL+L,KAAK,CACJ,gBAAiB,QACjB,UAAa,IAGjB,IAAE,IAAI0+C,EAAc1+C,KAAK,oBACtBi3B,YAAY,GAAG/6B,KAAKtB,QAAQ6jD,oBAC5Bz+C,KAAK,CAAE,cAAe,QAC3B,CAOA69C,YACE,IAAIc,EAAaziD,KAAK2D,SAAS5L,KAAK,IAAIiI,KAAKtB,QAAQ0iD,aAAaphD,KAAKtB,QAAQ2iD,mBAE3EoB,EAAWhhD,SACbzB,KAAKsiD,aAAaG,GAMlBziD,KAAK2D,SAASyC,QAAQ,mBAAoB,CAACq8C,IAE/C,CAQAf,UAAU/hD,EAAMsiD,GACd,IAAIS,EAAOC,GAGTD,EADkB,iBAAT/iD,EACDA,EAAK,GAAGiH,GAERjH,GAGAF,QAAQ,KAAO,EACvBkjD,EAAY,IAAID,KAEhBC,EAAYD,EACZA,EAAQA,EAAMthD,MAAM,IAGtB,IAAI6+B,EAAUjgC,KAAKmhD,WAAWtqB,IAAI,WAAW8rB,0BAAkCD,OAAW3iB,QAE1F//B,KAAK+hD,iBAAiB9hB,EAASgiB,EACjC,CAUAT,aACE,IAAI3gD,EAAM,EACN2Q,EAAQxR,KAEPA,KAAK2/B,aAIV3/B,KAAK2/B,YACF5nC,KAAK,IAAIiI,KAAKtB,QAAQkkD,cACtBn+C,IAAI,aAAc,IAClBoF,MAAK,WAEJ,IAAIg5C,EAAQ,IAAE7iD,MACVoiC,EAAWygB,EAAMxjB,SAAS,GAAG7tB,EAAM9S,QAAQ6jD,oBAE1CngB,GACHygB,EAAMp+C,IAAI,CAAC,WAAc,SAAU,QAAW,UAGhD,IAAIq+C,EAAO9iD,KAAKuvB,wBAAwB/uB,OAEnC4hC,GACHygB,EAAMp+C,IAAI,CACR,WAAc,GACd,QAAW,KAIf5D,EAAMiiD,EAAOjiD,EAAMiiD,EAAOjiD,CAC5B,IACC4D,IAAI,aAAc,GAAG5D,MAC1B,CAMAmb,WACEhc,KAAK2D,SACF5L,KAAK,IAAIiI,KAAKtB,QAAQ0iD,aACtBn3C,IAAI,YAAYkO,OAAO2d,MACvB/9B,KAAK,IAAIiI,KAAKtB,QAAQkkD,cACtBzqC,OAECnY,KAAKtB,QAAQ4iD,aACiB,MAA5BthD,KAAK8hD,qBACN,IAAErpD,QAAQwR,IAAI,wBAAyBjK,KAAK8hD,qBAI7C9hD,KAAKtB,QAAQghC,UACf,IAAEjnC,QAAQwR,IAAI,aAAcjK,KAAK8+B,gBAG/B9+B,KAAK22C,gBACP,IAAEl+C,QAAQwR,IAAIjK,KAAK22C,eAEvB,EAGFuK,GAAKz0B,SAAW,CAQdiT,UAAU,EAQVH,gBAAgB,EAQhBE,oBAAqB,IAQrBD,qBAAsB,EAQtBY,eAAe,EASf0N,WAAW,EAQXkU,YAAY,EAQZV,aAAa,EAQbY,gBAAgB,EAQhBd,UAAW,aAQXC,gBAAiB,YAQjBuB,WAAY,aAQZL,iBAAkB,aCthBpB,MAAMQ,WAAgB9mB,EASpBC,OAAO/+B,EAASuB,GACdsB,KAAK2D,SAAWxG,EAChB6C,KAAKtB,QAAU,WAAS,CAAC,EAAGqkD,GAAQt2B,SAAUtvB,EAAQ9G,OAAQqI,GAC9DsB,KAAK3I,UAAY,GACjB2I,KAAK3I,UAAY,UAGjB6wC,EAAS7lB,KAAK,KAEdriB,KAAKgY,QACLhY,KAAKqP,SACP,CAOA2I,QAEE,IAGI69B,EAHAjvC,EAAK5G,KAAK2D,SAAS,GAAGiD,GACxBo8C,EAAY,IAAE,gBAAgBp8C,sBAAuBA,uBAAwBA,OAI/E,GAAI5G,KAAKtB,QAAQM,QACf62C,EAAQ71C,KAAKtB,QAAQM,QAAQyD,MAAM,KAEnCzC,KAAK81C,YAAcD,EAAM,GACzB71C,KAAK+1C,aAAeF,EAAM,IAAM,KAGhCmN,EAAUl/C,KAAK,iBAAkB9D,KAAK2D,SAASE,GAAG,gBAG/C,CAEH,GAAqB,iBADrBgyC,EAAQ71C,KAAKtB,QAAQukD,WACapN,EAAMp0C,OACtC,MAAM,IAAIkZ,MAAM,sEAAsEk7B,MAGxF71C,KAAK3I,UAAyB,MAAbw+C,EAAM,GAAaA,EAAMz0C,MAAM,GAAKy0C,EAGrDmN,EAAUl/C,KAAK,gBAAiB9D,KAAK2D,SAAS07B,SAASr/B,KAAK3I,WAC9D,CAGA2rD,EAAUn5C,MAAK,CAACyC,EAAOlG,KACrB,MAAM88C,EAAW,IAAE98C,GACb+8C,EAAWD,EAASp/C,KAAK,kBAAoB,GzBnCzD,IAAsB7B,EyBqCG,IAAI0d,OAAO,MzBrCd1d,EyBqCiC2E,EzBpC9C3E,EAAI9D,QAAQ,2BAA4B,cyBoCgBgC,KAAKgjD,IAC/CD,EAASp/C,KAAK,gBAAiBq/C,EAAW,GAAGA,KAAYv8C,IAAOA,EAAG,GAExF,CAOAyI,UACErP,KAAK2D,SAASsG,IAAI,qBAAqBT,GAAG,oBAAqBxJ,KAAKuL,OAAOkc,KAAKznB,MAClF,CAQAuL,SACEvL,KAAMA,KAAKtB,QAAQM,QAAU,iBAAmB,iBAClD,CAEAokD,eACEpjD,KAAK2D,SAAS6zC,YAAYx3C,KAAK3I,WAE/B,IAAIq5C,EAAO1wC,KAAK2D,SAAS07B,SAASr/B,KAAK3I,WACnCq5C,EAKF1wC,KAAK2D,SAASyC,QAAQ,iBAOtBpG,KAAK2D,SAASyC,QAAQ,kBAGxBpG,KAAKqjD,YAAY3S,GACjB1wC,KAAK2D,SAAS5L,KAAK,iBAAiBqO,QAAQ,sBAC9C,CAEAk9C,iBACE,IAAI9xC,EAAQxR,KAERA,KAAK2D,SAASE,GAAG,WACnB4jC,EAAiBznC,KAAK2D,SAAU3D,KAAK81C,aAAa,WAChDtkC,EAAM6xC,aAAY,GAClBrjD,KAAKoG,QAAQ,iBACbpG,KAAKjI,KAAK,iBAAiBqO,QAAQ,sBACrC,IAGAqhC,EAAkBznC,KAAK2D,SAAU3D,KAAK+1C,cAAc,WAClDvkC,EAAM6xC,aAAY,GAClBrjD,KAAKoG,QAAQ,kBACbpG,KAAKjI,KAAK,iBAAiBqO,QAAQ,sBACrC,GAEJ,CAEAi9C,YAAY3S,GACV,IAAI9pC,EAAK5G,KAAK2D,SAAS,GAAGiD,GAC1B,IAAE,eAAeA,qBAAsBA,sBAAuBA,OAC3D9C,KAAK,CACJ,kBAAiB4sC,GAEvB,CAMA10B,WACEhc,KAAK2D,SAASsG,IAAI,cACpB,EAGF84C,GAAQt2B,SAAW,CAMjBw2B,aAASnsD,EAOTkI,SAAS,GC5JX,MAAMukD,WAAgBrd,EASpBhK,OAAO/+B,EAASuB,GACdsB,KAAK2D,SAAWxG,EAChB6C,KAAKtB,QAAU,WAAS,CAAC,EAAG6kD,GAAQ92B,SAAUzsB,KAAK2D,SAAStN,OAAQqI,GACpEsB,KAAK3I,UAAY,UAEjB2I,KAAKoiC,UAAW,EAChBpiC,KAAKwjD,SAAU,EAGftb,EAAS7lB,KAAK,KAEdriB,KAAKgY,OACP,CAMAA,QACE3d,EAAW2d,QACX,IAAIyrC,EAASzjD,KAAK2D,SAASG,KAAK,qBAAuB2xB,EAAY,EAAG,WAEtEz1B,KAAKtB,QAAQglD,QAAU1jD,KAAKtB,QAAQglD,SAAW1jD,KAAK2D,SAASG,KAAK,SAClE9D,KAAK2jD,SAAW3jD,KAAKtB,QAAQilD,SAAW,IAAE3jD,KAAKtB,QAAQilD,UAAY3jD,KAAK4jD,eAAeH,GAEnFzjD,KAAKtB,QAAQmlD,UACf7jD,KAAK2jD,SAAShsB,SAASx/B,SAASmD,MAC7Bw8C,KAAK93C,KAAKtB,QAAQglD,SAClBvrC,OAEHnY,KAAK2jD,SAAShsB,SAASx/B,SAASmD,MAC7Bg8B,KAAKt3B,KAAKtB,QAAQglD,SAClBvrC,OAGLnY,KAAK2D,SAASG,KAAK,CACjB,MAAS,GACT,mBAAoB2/C,EACpB,gBAAiBA,EACjB,cAAeA,EACf,cAAeA,IACdr+C,SAASpF,KAAKtB,QAAQolD,cAEzB5W,MAAMl1B,QACNhY,KAAKqP,SACP,CAEA+2B,sBAEE,IAAI2d,EAAmB/jD,KAAK2D,SAAS,GAAGtM,UACpC2I,KAAK2D,SAAS,aAAcqgD,aAC5BD,EAAmBA,EAAiBE,SAExC,IAAIjgD,EAAW+/C,EAAiB7/C,MAAM,gCACtC,OAAOF,EAAWA,EAAS,GAAK,KAClC,CAEAqiC,uBACE,MAAO,QACT,CAEAU,cACE,MAAqB,SAAlB/mC,KAAKgE,UAAyC,UAAlBhE,KAAKgE,SAC3BhE,KAAKtB,QAAQ4lC,QAAUtkC,KAAKtB,QAAQwlD,aAEpClkD,KAAKtB,QAAQ4lC,OAExB,CAEAwC,cACE,MAAqB,QAAlB9mC,KAAKgE,UAAwC,WAAlBhE,KAAKgE,SAC1BhE,KAAKtB,QAAQ2lC,QAAUrkC,KAAKtB,QAAQylD,cAEpCnkD,KAAKtB,QAAQ2lC,OAExB,CAMAuf,eAAeh9C,GACb,IAAIw9C,EAAkB,GAAIpkD,KAAKtB,QAAQ2lD,gBAAgBrkD,KAAKtB,QAAQ0lD,kBAAmB53C,OAQvF,OAPiB,IAAE,eAAepH,SAASg/C,GAAiBtgD,KAAK,CAC/D,KAAQ,UACR,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,GAAM8C,GAGV,CAOAogC,eACEkG,MAAMlG,aAAahnC,KAAK2D,SAAU3D,KAAK2jD,SACzC,CAQA5b,OACE,GAA4B,QAAxB/nC,KAAKtB,QAAQ4lD,SAAqBjqD,EAAWwJ,GAAG7D,KAAKtB,QAAQ4lD,QAE/D,OAAO,EAITtkD,KAAK2jD,SAASl/C,IAAI,aAAc,UAAUsjC,OAC1C/nC,KAAKgnC,eACLhnC,KAAK2jD,SAAS5oB,YAAY,yBAAyB31B,SAASpF,KAAKgE,UACjEhE,KAAK2jD,SAAS5oB,YAAY,8DAA8D31B,SAAS,SAAWpF,KAAKokC,WAMjHpkC,KAAK2D,SAASyC,QAAQ,qBAAsBpG,KAAK2jD,SAAS7/C,KAAK,OAG/D9D,KAAK2jD,SAAS7/C,KAAK,CACjB,kBAAkB,EAClB,eAAe,IAfL9D,KAiBNoiC,UAAW,EACjBpiC,KAAK2jD,SAASriB,OAAOnpB,OAAO1T,IAAI,aAAc,IAAI8/C,OAAOvkD,KAAKtB,QAAQ8lD,gBAAgB,WAEtF,IAKAxkD,KAAK2D,SAASyC,QAAQ,kBACxB,CAOA+R,OACE,IAAI3G,EAAQxR,KACZA,KAAK2jD,SAASriB,OAAOx9B,KAAK,CACxB,eAAe,EACf,kBAAkB,IACjBglC,QAAQ9oC,KAAKtB,QAAQ+lD,iBAAiB,WACvCjzC,EAAM4wB,UAAW,EACjB5wB,EAAMgyC,SAAU,CAClB,IAKAxjD,KAAK2D,SAASyC,QAAQ,kBACxB,CAOAiJ,UACE,MAAMmC,EAAQxR,KACRotC,EAAW,iBAAkB30C,aAA0C,IAAxBA,OAAO40C,aAC5D,IAAIqX,GAAU,EAGVtX,GAAYptC,KAAKtB,QAAQimD,kBAExB3kD,KAAKtB,QAAQuwC,cAChBjvC,KAAK2D,SACJ6F,GAAG,yBAAyB,WACtBgI,EAAM4wB,WACT5wB,EAAMD,QAAUhT,YAAW,WACzBiT,EAAMu2B,MACR,GAAGv2B,EAAM9S,QAAQgvC,YAErB,IACClkC,GAAG,wBAAyB4sB,GAAqB,WAChDvvB,aAAa2K,EAAMD,WACdmzC,GAAYlzC,EAAMgyC,UAAYhyC,EAAM9S,QAAQ+vC,YAC/Cj9B,EAAM2G,MAEV,KAGEi1B,GACFptC,KAAK2D,SACJ6F,GAAG,sCAAsC,WACxCgI,EAAM4wB,SAAW5wB,EAAM2G,OAAS3G,EAAMu2B,MACxC,IAGE/nC,KAAKtB,QAAQ+vC,UACfzuC,KAAK2D,SAAS6F,GAAG,wBAAwB,WACnCgI,EAAMgyC,UAIRhyC,EAAMgyC,SAAU,GACXhyC,EAAM9S,QAAQuwC,cAAiBz9B,EAAM7N,SAASG,KAAK,aAAiB0N,EAAM4wB,UAC7E5wB,EAAMu2B,OAGZ,IAEA/nC,KAAK2D,SAAS6F,GAAG,wBAAwB,WACvCgI,EAAMgyC,SAAU,CAClB,IAGFxjD,KAAK2D,SAAS6F,GAAG,CAGf,mBAAoBxJ,KAAKmY,KAAKsP,KAAKznB,QAGrCA,KAAK2D,SACF6F,GAAG,oBAAoB,WAEtB,GADAk7C,GAAU,EACNlzC,EAAMgyC,QAIR,OADIhyC,EAAM9S,QAAQ+vC,YAAaiW,GAAU,IAClC,EAEPlzC,EAAMu2B,MAEV,IAECv+B,GAAG,uBAAuB,WACzBk7C,GAAU,EACVlzC,EAAMgyC,SAAU,EAChBhyC,EAAM2G,MACR,IAEC3O,GAAG,uBAAuB,WACrBgI,EAAM4wB,UACR5wB,EAAMw1B,cAEV,IACJ,CAMAz7B,SACMvL,KAAKoiC,SACPpiC,KAAKmY,OAELnY,KAAK+nC,MAET,CAMA/rB,WACEhc,KAAK2D,SAASG,KAAK,QAAS9D,KAAK2jD,SAASrsB,QAC5BrtB,IAAI,2BACJ8wB,YAAY/6B,KAAKtB,QAAQolD,cACzB/oB,YAAY,yBACZb,WAAW,0FAEzBl6B,KAAK2jD,SAAS5nD,QAChB,EAGFwnD,GAAQ92B,SAAW,CAOjBihB,WAAY,IAOZ8W,eAAgB,IAOhBC,gBAAiB,IAOjBxV,cAAc,EASd0V,iBAAiB,EAOjBP,gBAAiB,GAOjBC,aAAc,UAOdP,aAAc,UAOdQ,OAAQ,QAORX,SAAU,GAOVD,QAAS,GACTkB,eAAgB,gBAOhBnW,WAAW,EAOXzqC,SAAU,OAOVogC,UAAW,OAQX8C,cAAc,EAUdI,oBAAoB,EAOpBjD,QAAS,EAOTC,QAAS,EAOT6f,cAAe,GAOfD,aAAc,GAQdL,WAAW,GC9bb,IAAI,GAAc,CAChBgB,KAAM,CACJjQ,SAAU,OACVlb,OAAUwnB,GACVje,KAAU,CAACvJ,EAAQp3B,IAAWo3B,EAAOgoB,UAAUp/C,GAC/C4gC,MAAU,KACV33B,OAAU,MAEZupC,UAAW,CACTF,SAAU,YACVlb,OAAU0E,EACV6E,KAAU,CAACvJ,EAAQp3B,IAAWo3B,EAAOyG,KAAK,IAAE79B,IAC5C4gC,MAAU,CAACxJ,EAAQp3B,IAAWo3B,EAAOwG,GAAG,IAAE59B,IAC1CiJ,OAAU,CAACmuB,EAAQp3B,IAAWo3B,EAAOnuB,OAAO,IAAEjJ,MAalD,MAAMwiD,WAAgC7oB,EACpCpf,YAAY1f,EAASuB,GAEnB,OADAwuC,MAAM/vC,EAASuB,GACRsB,KAAKtB,QAAQ87B,QAAUx6B,KAAK+kD,aAAe/kD,IACpD,CAUAk8B,OAAO/+B,EAASuB,GACdsB,KAAK2D,SAAW,IAAExG,GAClB6C,KAAK2D,SAAStN,KAAK,eAAgB2J,MACnCA,KAAKtB,QAAU,WAAS,CAAC,EAAGomD,GAAwBr4B,SAAUzsB,KAAK2D,SAAStN,OAAQqI,GAEpFsB,KAAKg1C,MAAQh1C,KAAK2D,SAAStN,KAAK,6BAChC2J,KAAKi1C,UAAY,KACjBj1C,KAAKglD,YAAc,KACnBhlD,KAAKk1C,cAAgB,KACrBl1C,KAAK3I,UAAY,0BACZ2I,KAAK2D,SAASG,KAAK,OACtB9D,KAAK2D,SAASG,KAAK,KAAK2xB,EAAY,EAAG,4BAGzCz1B,KAAKgY,QACLhY,KAAKqP,SACP,CAOA2I,QAIE,GAHA3d,EAAW2d,QAGe,iBAAfhY,KAAKg1C,MAAoB,CAClC,IAAIG,EAAY,CAAC,EAGbH,EAAQh1C,KAAKg1C,MAAMvyC,MAAM,KAG7B,IAAK,IAAIpK,EAAI,EAAGA,EAAI28C,EAAMvzC,OAAQpJ,IAAK,CACrC,IAAI+8C,EAAOJ,EAAM38C,GAAGoK,MAAM,KACtB4yC,EAAWD,EAAK3zC,OAAS,EAAI2zC,EAAK,GAAK,QACvCE,EAAaF,EAAK3zC,OAAS,EAAI2zC,EAAK,GAAKA,EAAK,GAElB,OAA5B,GAAYE,KACdH,EAAUE,GAAY,GAAYC,GAEtC,CAEAt1C,KAAKg1C,MAAQG,CACf,CAEAn1C,KAAKilD,iBAEA,kBAAgBjlD,KAAKg1C,QACxBh1C,KAAKu1C,oBAET,CAEA0P,iBAEE,IAAIzzC,EAAQxR,KAEZ,IAAK,IAAI2N,KADT6D,EAAM0zC,WAAa,CAAC,EACJ,GACd,GAAI,GAAYvuD,eAAegX,GAAM,CACnC,IAAI0C,EAAM,GAAY1C,GACtB,IACE,IAAIw3C,EAAc,IAAE,aAChBC,EAAY,IAAI/0C,EAAIqpB,OAAOyrB,EAAY3zC,EAAM9S,SACjD,IAAK,IAAI2mD,KAAUD,EAAU1mD,QAC3B,GAAI0mD,EAAU1mD,QAAQ/H,eAAe0uD,IAAsB,aAAXA,EAAuB,CACrE,IAAIC,EAASF,EAAU1mD,QAAQ2mD,GAC/B7zC,EAAM0zC,WAAWG,GAAUC,CAC7B,CAEFF,EAAUt7C,SAIZ,CAFA,MAAMvQ,GACJuY,QAAQwQ,KAAK,oDAAoD/oB,IACnE,CACF,CAEJ,CAOA8V,UACErP,KAAKulD,4BAA8BvlD,KAAKu1C,mBAAmB9tB,KAAKznB,MAChE,IAAEvH,QAAQ+Q,GAAG,wBAAyBxJ,KAAKulD,4BAC7C,CAOAhQ,qBACE,IAAIC,EAAWhkC,EAAQxR,KAEvB,SAAOA,KAAKg1C,OAAO,SAASrnC,GACtBtT,EAAWm+B,QAAQ7qB,KACrB6nC,EAAY7nC,EAEhB,IAGK6nC,IAGDx1C,KAAKk1C,yBAAyBl1C,KAAKg1C,MAAMQ,GAAW9b,SAGxD,SAAO,IAAa,SAAS/rB,EAAKJ,GAChCiE,EAAM7N,SAASo3B,YAAYxtB,EAAMqnC,SACnC,IAGA50C,KAAK2D,SAASyB,SAASpF,KAAKg1C,MAAMQ,GAAWZ,UAGzC50C,KAAKk1C,iBAEFl1C,KAAKk1C,cAAcvxC,SAAStN,KAAK,aAAe2J,KAAK+kD,aAAa/kD,KAAKk1C,cAAcvxC,SAAStN,KAAK,WAAW2J,KAAK+kD,aACxH/kD,KAAKk1C,cAAcprC,WAErB9J,KAAKwlD,cAAcxlD,KAAKg1C,MAAMQ,GAAWZ,UACzC50C,KAAKglD,YAAchlD,KAAKg1C,MAAMQ,GAC9Bx1C,KAAKk1C,cAAgB,IAAIl1C,KAAKglD,YAAYtrB,OAAO15B,KAAK2D,SAAU3D,KAAKtB,SACrEsB,KAAK+kD,YAAc/kD,KAAKk1C,cAAcvxC,SAAStN,KAAK,aAEtD,CAEAmvD,cAAcC,GACZ,IAAIj0C,EAAQxR,KAAM0lD,EAAa,YAC3BC,EAAU,IAAE,sBAAsB3lD,KAAK2D,SAASG,KAAK,MAAM,KAE/D,GADI6hD,EAAQlkD,SAAQikD,EAAa,QAC7BA,IAAeD,EAAnB,CAIA,IAAIG,EAAYp0C,EAAM0zC,WAAW9D,UAAU5vC,EAAM0zC,WAAW9D,UAAU,aAClEyE,EAAYr0C,EAAM0zC,WAAWtC,WAAWpxC,EAAM0zC,WAAWtC,WAAW,aAExE5iD,KAAK2D,SAASu2B,WAAW,QACzB,IAAI4rB,EAAW9lD,KAAK2D,SAASnC,SAAS,IAAIokD,EAAU,0BAA0B7qB,YAAY6qB,GAAW7qB,YAAY,kBAAkBb,WAAW,uBAC1I6rB,EAAYD,EAAStkD,SAAS,KAAKu5B,YAAY,mBAWnD,GATmB,SAAf2qB,GACFC,EAAUA,EAAQnkD,SAAS,IAAIqkD,GAAW9qB,YAAY8qB,GAAW3rB,WAAW,QAAQA,WAAW,eAAeA,WAAW,oBACjH14B,SAAS,KAAK04B,WAAW,QAAQA,WAAW,iBAAiBA,WAAW,iBAEhFyrB,EAAUG,EAAStkD,SAAS,sBAAsBu5B,YAAY,qBAGhE4qB,EAAQlhD,IAAI,CAACrC,QAAQ,GAAGiD,WAAW,KACnCygD,EAASrhD,IAAI,CAACrC,QAAQ,GAAGiD,WAAW,KACtB,cAAVogD,EACFE,EAAQ97C,MAAK,SAAS8D,EAAIJ,GACxB,IAAEA,GAAOoqB,SAASmuB,EAAS3/B,IAAIxY,IAAMvI,SAAS,qBAAqBtB,KAAK,mBAAmB,IAAIi3B,YAAY,aAAat2B,IAAI,CAACjE,OAAO,KACpI,IAAE,sBAAsBgR,EAAM7N,SAASG,KAAK,MAAM,KAAK2+B,MAAM,6BAA6BjxB,EAAM7N,SAASG,KAAK,MAAM,YAAY6/B,SAChImiB,EAAS1gD,SAAS,kBAAkBtB,KAAK,sBAAsB,IAC/DiiD,EAAU3gD,SAAS,kBACrB,SACK,GAAc,SAAVqgD,EAAkB,CAC3B,IAAIO,EAAe,IAAE,sBAAsBx0C,EAAM7N,SAASG,KAAK,MAAM,KACjEmiD,EAAe,IAAE,qBAAqBz0C,EAAM7N,SAASG,KAAK,OAC1DmiD,EAAaxkD,QACfukD,EAAe,IAAE,oCAAoCE,YAAYD,GAAcniD,KAAK,oBAAoB0N,EAAM7N,SAASG,KAAK,OAC5HmiD,EAAalqD,UAEbiqD,EAAe,IAAE,oCAAoCE,YAAY10C,EAAM7N,UAAUG,KAAK,oBAAoB0N,EAAM7N,SAASG,KAAK,OAEhI6hD,EAAQ97C,MAAK,SAAS8D,EAAIJ,GACxB,IAAI44C,EAAY,IAAE54C,GAAOoqB,SAASquB,GAAc5gD,SAASygD,GACrD5mB,EAAO8mB,EAAU5/B,IAAIxY,GAAKsxB,KAAK79B,MAAM,GACrCwF,EAAK,IAAE2G,GAAOzJ,KAAK,OAAS2xB,EAAY,EAAG,aAC3CwJ,IAASr4B,IACE,KAATq4B,EACF,IAAE1xB,GAAOzJ,KAAK,KAAKm7B,IAEnBA,EAAOr4B,EACP,IAAE2G,GAAOzJ,KAAK,KAAKm7B,GACnB,IAAE8mB,EAAU5/B,IAAIxY,IAAM7J,KAAK,OAAO,IAAEiiD,EAAU5/B,IAAIxY,IAAM7J,KAAK,QAAQ3F,QAAQ,IAAI,IAAI,IAAI8gC,KAG9E,IAAE6mB,EAAS3/B,IAAIxY,IAAM0xB,SAAS,cAE3C8mB,EAAU/gD,SAAS,YAEvB,IACA0gD,EAAS1gD,SAASwgD,EACpB,CArDA,CAsDF,CASA3iB,OACE,GAAIjjC,KAAKglD,aAAgD,mBAA1BhlD,KAAKglD,YAAY/hB,KAC9C,OAAOjjC,KAAKglD,YAAY/hB,KAAKjjC,KAAKk1C,iBAAkB90C,UAExD,CAQA8iC,QACE,GAAIljC,KAAKglD,aAAiD,mBAA3BhlD,KAAKglD,YAAY9hB,MAC9C,OAAOljC,KAAKglD,YAAY9hB,MAAMljC,KAAKk1C,iBAAkB90C,UAEzD,CAQAmL,SACE,GAAIvL,KAAKglD,aAAkD,mBAA5BhlD,KAAKglD,YAAYz5C,OAC9C,OAAOvL,KAAKglD,YAAYz5C,OAAOvL,KAAKk1C,iBAAkB90C,UAE1D,CAMA4b,WACMhc,KAAKk1C,eAAel1C,KAAKk1C,cAAcprC,UAC3C,IAAErR,QAAQwR,IAAI,wBAAyBjK,KAAKulD,4BAC9C,EAGFT,GAAwBr4B,SAAW,CAAC,EC9RpCh0B,OAAO2K,EAAIA,IAOXhJ,EAAAA,YAAuBgJ,KAEvBhJ,EAAAA,WAAwBC,EAOxBD,EAAAA,OAAkBgkC,EAAW,aAG7BhkC,EAAAA,OAAkB4nC,EAAe,iBAMjC5nC,EAAAA,OAAkBwyC,EAAU,YAG5BxyC,EAAAA,OAAkB4zC,EAAc,gBAGhC5zC,EAAAA,OAAkBi2C,GAAW,aAe7Bj2C,EAAAA,OAAkB26C,GAAgB,kBAGlC36C,EAAAA,OAAkBq7C,GAAkB,oBAGpCr7C,EAAAA,OAAkBg8C,GAAQ,UAG1Bh8C,EAAAA,OAAkB89C,GAAQ,UAG1B99C,EAAAA,OAAkBkjD,GAAc,gBAGhCljD,EAAAA,OAAkB2jD,GAAQ,UAG1B3jD,EAAAA,OAAkB8mD,GAAM,QAGxB9mD,EAAAA,OAAkB2oD,GAAS,WAG3B3oD,EAAAA,OAAkBmpD,GAAS,WAG3BnpD,EAAAA,OAAkB0qD,GAAyB,2BAG3CrsD,OAAOL,iBACH,QACA,WACIgL,IAAEjL,UAAUmiC,YAChB,GACA,CAAEzhC,SAAS,IAGfuK,IAAEjL,UAAUqR,GAAG,oBAAoB,WAC/BpP,EAAAA,OAAkB,SACtB,8BCrFAjC,SAASC,iBACL,oBACA,WACgC,oBAAjBguD,eAEPA,aAAeA,aAAatqC,KAAI,YAAuB,IAApB3Y,EAAS,EAATA,UAAWyD,EAAE,EAAFA,GACpC8L,EAAW2zC,KAAK,CAClBljD,UAAAA,EACAsb,QAAS,EACTmD,WAAW,EACXN,eAAe,EACf5C,aAAa,EACbJ,QAAS,CACL,IAAK,EACL,KAAM,KAMd,OAHA5L,EAASwL,cAGF,CACHtX,GAAAA,EACAzD,UAAAA,EACAuP,SAAAA,EAER,IAER,GACA,CAAE7Z,SAAS,sCC5BfuK,KAAE,WAEEkjD,MACJ,wCCNIC,GAA8B,WAAW,OAAOA,GAAShvD,OAAOC,QAAQ,SAASgH,GAAG,IAAI,IAAInG,EAAEwlB,EAAE,EAAEQ,EAAEje,UAAUqB,OAAOoc,EAAEQ,EAAER,IAAI,IAAI,IAAI7N,KAAK3X,EAAE+H,UAAUyd,GAAGtmB,OAAOoK,UAAUhL,eAAeiL,KAAKvJ,EAAE2X,KAAKxR,EAAEwR,GAAG3X,EAAE2X,IAAI,OAAOxR,CAAC,GAAGqR,MAAM7P,KAAKI,UAAU,EAAEomD,GAAQ,WAAW,SAAShoD,EAAEA,EAAEnG,EAAEwlB,GAAG,IAAIQ,EAAEre,KAAKA,KAAKymD,OAAOpuD,EAAE2H,KAAKtB,QAAQmf,EAAE7d,KAAKu5B,QAAQ,QAAQv5B,KAAKysB,SAAS,CAACi6B,SAAS,EAAEC,cAAc,EAAE3pD,SAAS,EAAE4pD,WAAU,EAAGC,aAAY,EAAGC,qBAAqB,IAAIC,kBAAkB,IAAIC,UAAU,IAAIvM,QAAQ,IAAIwM,OAAO,GAAGC,OAAO,GAAGC,iBAAgB,EAAGC,eAAe,IAAIC,eAAc,GAAIrnD,KAAKsnD,YAAY,KAAKtnD,KAAK4mD,WAAU,EAAG5mD,KAAKunD,WAAU,EAAGvnD,KAAKyS,MAAM,GAAGzS,KAAK0mD,SAAS,EAAE1mD,KAAKwnD,QAAO,EAAGxnD,KAAKuP,MAAK,EAAGvP,KAAK0uB,MAAM,SAASlwB,GAAG6f,EAAEysB,YAAYzsB,EAAEysB,UAAUtsC,GAAG,IAAInG,EAAEmG,EAAE6f,EAAEysB,UAAUzsB,EAAEopC,UAAUppC,EAAErhB,SAAS3E,EAAEgmB,EAAEuoC,UAAUvoC,EAAEkpC,UAAUlpC,EAAEqpC,SAASrpC,EAAEqoC,SAASroC,EAAEspC,SAAStvD,EAAE,EAAEgmB,EAAEqoC,SAASroC,EAAEooC,OAAOpoC,EAAErhB,UAAUqhB,EAAEqpC,SAASrpC,EAAEspC,SAAStvD,EAAEgmB,EAAEqoC,SAASroC,EAAEooC,OAAOpoC,EAAEqoC,SAASroC,EAAErhB,UAAUqhB,EAAEqpC,SAASrpC,EAAEqoC,UAAUroC,EAAEooC,OAAOpoC,EAAEqoC,WAAWruD,EAAEgmB,EAAErhB,UAAU,IAAI6gB,EAAEQ,EAAEkpC,UAAUlpC,EAAEqpC,SAASrpC,EAAEooC,OAAOpoC,EAAEqpC,SAASrpC,EAAEooC,OAAOpoC,EAAEqpC,SAAS7pC,EAAEQ,EAAEooC,OAAOpoC,EAAEqpC,SAASrpC,EAAEqpC,SAASE,OAAOvpC,EAAEqpC,SAASt6C,QAAQiR,EAAE3f,QAAQioD,gBAAgBtoC,EAAEwpC,WAAWxpC,EAAEqpC,UAAUrvD,EAAEgmB,EAAErhB,SAASqhB,EAAEypC,IAAIxqD,sBAAsB+gB,EAAEqQ,OAAO,OAAOrQ,EAAEipC,YAAYjpC,EAAE0pC,OAAO1pC,EAAEipC,aAAajpC,EAAE5X,UAAU4X,EAAE5X,UAAU,EAAEzG,KAAKgoD,aAAa,SAASxpD,GAAG,IAAInG,EAAEwlB,EAAE7N,EAAEzW,EAAEukB,EAAEtf,EAAE,EAAE,IAAI,GAAGnG,EAAEsF,KAAKguC,IAAIntC,GAAG4O,QAAQiR,EAAE3f,QAAQioD,eAAe,IAAI5oC,GAAG1lB,GAAG,IAAIoK,MAAM,KAAK,GAAGob,EAAEE,EAAE,GAAG/N,EAAE+N,EAAEtc,OAAO,EAAE4c,EAAE3f,QAAQ+7C,QAAQ18B,EAAE,GAAG,GAAGM,EAAE3f,QAAQmoD,YAAY,CAACttD,EAAE,GAAG,IAAI,IAAIqlB,EAAE,EAAEW,EAAE1B,EAAEpc,OAAOmd,EAAEW,IAAIX,EAAE,IAAIA,GAAGA,EAAE,GAAG,IAAIrlB,EAAE8kB,EAAE3f,QAAQsoD,UAAUztD,GAAGA,EAAEskB,EAAE0B,EAAEX,EAAE,GAAGrlB,EAAEskB,EAAEtkB,CAAC,CAAC,OAAO8kB,EAAE3f,QAAQupD,UAAU5pC,EAAE3f,QAAQupD,SAASxmD,SAASoc,EAAEA,EAAE1f,QAAQ,UAAS,SAASK,GAAG,OAAO6f,EAAE3f,QAAQupD,UAAUzpD,EAAE,IAAGwR,EAAEA,EAAE7R,QAAQ,UAAS,SAASK,GAAG,OAAO6f,EAAE3f,QAAQupD,UAAUzpD,EAAE,KAAIsf,EAAEO,EAAE3f,QAAQuoD,OAAOppC,EAAE7N,EAAEqO,EAAE3f,QAAQwoD,MAAM,EAAElnD,KAAKkoD,YAAY,SAAS1pD,EAAEnG,EAAEwlB,EAAEQ,GAAG,OAAOR,GAAG,EAAElgB,KAAKk8C,IAAI,GAAG,GAAGr7C,EAAE6f,IAAI,KAAK,KAAKhmB,CAAC,EAAE2H,KAAKtB,QAAQ6nD,GAASA,GAAS,CAAC,EAAEvmD,KAAKysB,UAAU5O,GAAG7d,KAAKmoD,aAAanoD,KAAKtB,QAAQypD,aAAanoD,KAAKtB,QAAQypD,aAAanoD,KAAKgoD,aAAahoD,KAAK2nD,SAAS3nD,KAAKtB,QAAQipD,SAAS3nD,KAAKtB,QAAQipD,SAAS3nD,KAAKkoD,YAAYloD,KAAK0mD,SAAS1mD,KAAKooD,cAAcpoD,KAAKtB,QAAQgoD,UAAU1mD,KAAK0nD,SAAS1nD,KAAK0mD,SAAS1mD,KAAKymD,OAAOzmD,KAAKooD,cAAc/vD,GAAG2H,KAAKtB,QAAQioD,cAAchpD,KAAKkD,IAAIb,KAAKtB,QAAQioD,eAAe3mD,KAAKqoD,gBAAgBroD,KAAKtB,QAAQsoD,UAAUtxC,OAAO1V,KAAKtB,QAAQsoD,WAAWhnD,KAAK4mD,UAAU5mD,KAAKtB,QAAQkoD,UAAU,KAAK5mD,KAAKtB,QAAQsoD,YAAYhnD,KAAKtB,QAAQmoD,aAAY,GAAI7mD,KAAKF,GAAG,iBAAiBtB,EAAErG,SAAS+F,eAAeM,GAAGA,EAAEwB,KAAKF,GAAGE,KAAK6nD,WAAW7nD,KAAK0mD,UAAU1mD,KAAKyS,MAAM,wCAAwC,oBAAoBha,QAAQuH,KAAKtB,QAAQyoD,kBAAkBnnD,KAAKyS,MAAMX,QAAQW,MAAMzS,KAAKyS,MAAMjU,IAAI/F,OAAO6vD,YAAY7vD,OAAO6vD,aAAa,GAAG7vD,OAAO6vD,YAAYnkD,MAAK,WAAW,OAAOka,EAAEkqC,aAAalqC,EAAE,IAAG5lB,OAAO+vD,SAAS,WAAW/vD,OAAO6vD,YAAY9xD,SAAQ,SAASgI,GAAG,OAAOA,GAAG,GAAE,EAAEwB,KAAKuoD,aAAavoD,OAAO,CAAC,OAAOxB,EAAEmD,UAAU4mD,aAAa,SAAS/pD,GAAG,GAAGA,GAAG/F,SAAS+F,EAAE+Q,KAAK,CAAC,IAAIlX,EAAEI,OAAOoD,YAAYpD,OAAOkE,QAAQkhB,EAAErf,EAAEsB,GAAGyvB,wBAAwBlR,EAAER,EAAEtY,IAAIsY,EAAErd,OAAO/H,OAAOkR,YAAY0U,EAAEhmB,GAAGgmB,EAAE5lB,OAAOkE,SAAS6B,EAAEgpD,QAAQhpD,EAAEgpD,QAAO,EAAGjpD,YAAW,WAAW,OAAOC,EAAEpB,OAAO,GAAEoB,EAAEE,QAAQ0oD,gBAAgB5oD,EAAEE,QAAQ2oD,gBAAgB7oD,EAAE+Q,MAAK,IAAK9W,OAAOkE,QAAQ0hB,IAAI7f,EAAEgpD,QAAQhpD,EAAEspC,OAAO,CAAC,EAAEtpC,EAAEmD,UAAU8mD,iCAAiC,WAAW,IAAIjqD,EAAEwB,KAAKsnD,YAAYtnD,KAAKsnD,YAAYtnD,KAAKymD,OAAOzmD,KAAKunD,UAAUvnD,KAAK0mD,SAASloD,EAAE,IAAInG,EAAEmG,EAAEwB,KAAK0mD,SAAS,GAAG/oD,KAAKguC,IAAItzC,GAAG2H,KAAKtB,QAAQooD,sBAAsB9mD,KAAKtB,QAAQkoD,UAAU,CAAC5mD,KAAKsnD,YAAY9oD,EAAE,IAAIqf,EAAE7d,KAAKunD,UAAU,GAAG,EAAEvnD,KAAKymD,OAAOjoD,EAAEqf,EAAE7d,KAAKtB,QAAQqoD,kBAAkB/mD,KAAKhD,SAASgD,KAAKhD,SAAS,CAAC,MAAMgD,KAAKymD,OAAOjoD,EAAEwB,KAAKsnD,YAAY,KAAK,OAAOtnD,KAAKsnD,YAAYtnD,KAAK4mD,WAAU,EAAG5mD,KAAK4mD,UAAU5mD,KAAKtB,QAAQkoD,SAAS,EAAEpoD,EAAEmD,UAAUvE,MAAM,SAASoB,GAAGwB,KAAKyS,QAAQzS,KAAKyG,SAASjI,EAAEwB,KAAKhD,SAAS,GAAGgD,KAAKyoD,mCAAmCzoD,KAAKwnD,QAAO,EAAGxnD,KAAK8nD,IAAIxqD,sBAAsB0C,KAAK0uB,QAAQ1uB,KAAK6nD,WAAW7nD,KAAKymD,QAAQ,EAAEjoD,EAAEmD,UAAU+mD,YAAY,WAAW1oD,KAAKwnD,QAAQxnD,KAAK8qC,UAAU,KAAK9qC,KAAKhD,SAASgD,KAAKynD,UAAUznD,KAAK0mD,SAAS1mD,KAAK0nD,SAAS1nD,KAAKyoD,mCAAmCzoD,KAAK8nD,IAAIxqD,sBAAsB0C,KAAK0uB,QAAQloB,qBAAqBxG,KAAK8nD,KAAK9nD,KAAKwnD,QAAQxnD,KAAKwnD,MAAM,EAAEhpD,EAAEmD,UAAUmmC,MAAM,WAAWthC,qBAAqBxG,KAAK8nD,KAAK9nD,KAAKwnD,QAAO,EAAGxnD,KAAKqoD,gBAAgBroD,KAAK0mD,SAAS1mD,KAAKooD,cAAcpoD,KAAKtB,QAAQgoD,UAAU1mD,KAAK0nD,SAAS1nD,KAAK0mD,SAAS1mD,KAAK6nD,WAAW7nD,KAAK0mD,SAAS,EAAEloD,EAAEmD,UAAUomD,OAAO,SAASvpD,GAAGgI,qBAAqBxG,KAAK8nD,KAAK9nD,KAAK8qC,UAAU,KAAK9qC,KAAKymD,OAAOzmD,KAAKooD,cAAc5pD,GAAGwB,KAAKymD,SAASzmD,KAAK0nD,WAAW1nD,KAAK0mD,SAAS1mD,KAAK0nD,SAAS,MAAM1nD,KAAKsnD,aAAatnD,KAAKqoD,gBAAgBroD,KAAKsnD,YAAY,KAAKtnD,KAAKyoD,mCAAmCzoD,KAAK8nD,IAAIxqD,sBAAsB0C,KAAK0uB,OAAO,EAAElwB,EAAEmD,UAAUkmD,WAAW,SAASrpD,GAAG,IAAInG,EAAE2H,KAAKmoD,aAAa3pD,GAAG,UAAUwB,KAAKF,GAAGynB,QAAQvnB,KAAKF,GAAGyN,MAAMlV,EAAE,SAAS2H,KAAKF,GAAGynB,SAAS,UAAUvnB,KAAKF,GAAGynB,QAAQvnB,KAAKF,GAAG6L,YAAYtT,EAAE2H,KAAKF,GAAG1G,UAAUf,CAAC,EAAEmG,EAAEmD,UAAUgnD,aAAa,SAASnqD,GAAG,MAAM,iBAAiBA,IAAI8F,MAAM9F,EAAE,EAAEA,EAAEmD,UAAUymD,cAAc,SAAS5pD,GAAG,IAAInG,EAAEuvD,OAAOppD,GAAG,OAAOwB,KAAK2oD,aAAatwD,GAAGA,GAAG2H,KAAKyS,MAAM,yCAAyCH,OAAO9T,GAAG,KAAK,EAAEA,EAAEmD,UAAU0mD,cAAc,WAAWroD,KAAK8qC,UAAU,KAAK9qC,KAAKhD,SAAS,IAAI4qD,OAAO5nD,KAAKtB,QAAQ1B,UAAUgD,KAAKynD,UAAUznD,KAAKhD,QAAQ,EAAEwB,CAAC,CAAr+J,GCExPR,GAAQ,IAAI+wB,MAAM,2BAA4B,CAChD65B,SAAS,EACTC,YAAY,EACZC,UAAU,IAGd,SAASC,KACL,IAAMC,EAAW7wD,SAASI,iBAAiB,YAG3C,GAgFI,yBAA0BE,QAC1B,8BAA+BA,QAC/B,sBAAuBA,OAAOwwD,0BAA0BtnD,UA3ExD,IANA,IAAMunD,EAAuB,IAAIC,qBAAqBC,GAAe,CACjEC,KAAM,KACNC,WAAY,OACZj4C,UAAW,KAGNhZ,EAAI,EAAGA,EAAI2wD,EAASvnD,OAAQpJ,IACjC6wD,EAAqB/e,QAAQ6e,EAAS3wD,SAGtCI,OAAOL,mBACPmxD,GAAcP,GAEdvwD,OAAOL,iBACH,UACA,SAACmB,GACGgwD,GAAcP,EAClB,GACA,CAAEnwD,SAAS,IAI3B,CAEA,SAAS0wD,GAAcP,GACnBA,EAASxyD,SAAQ,SAAC2G,IAgCtB,SAAyBA,GACrB,IAAIoI,EAAMpI,EAAQuL,UACdlD,EAAOrI,EAAQiL,WACblM,EAAQiB,EAAQ1B,YAChB+E,EAASrD,EAAQ6W,aAEvB,KAAO7W,EAAQwkB,cAEXpc,IADApI,EAAUA,EAAQwkB,cACHjZ,UACflD,GAAQrI,EAAQiL,WAGpB,OACI7C,GAAO9M,OAAOkR,aACdnE,GAAQ/M,OAAOgtC,aACflgC,EAAM/E,GAAU/H,OAAOkR,YAAclR,OAAOoD,aAC5C2J,EAAOtJ,GAASzD,OAAOgtC,YAAchtC,OAAO6a,UAEpD,EAjDYk2C,CAAgBrsD,IAChBssD,GAAetsD,EAEvB,GACJ,CAEA,SAASisD,GAAcJ,GACnBA,EAASxyD,SAAQ,SAAC2G,GACVA,EAAQusD,gBACRD,GAAetsD,EAEvB,GACJ,CAEA,SAASssD,GAAetsD,GACpB,IAAMmF,EAASnF,EAAQmF,OAASnF,EAAQmF,OAASnF,EAC3CwN,EAAUrI,EAAOqI,QAEjBg/C,EAAU,IAAInD,GAAQlkD,EAAQqI,EAAQi/C,WAAY,CACpD5sD,SAAU2N,EAAQk/C,gBAClBhD,cAAal8C,EAAQm/C,gBACrB9C,UAAWr8C,EAAQo/C,iBACnBtP,QAAS9vC,EAAQq/C,iBAErB1nD,EAAO2nD,QAAUN,EACjBA,EAAQvsD,OAAM,WAEVkF,EAAOoW,cAAc1a,GACzB,GACJ,CClEe,SAASypB,GAAKtd,EAAI+/C,GAC/B,OAAO,WACL,OAAO//C,EAAG0F,MAAMq6C,EAAS9pD,UAC3B,CACF,CD6FI2oD,KE7FJ,MAAOl7C,SAAQ,IAAItW,OAAOoK,WACpB,eAACwoD,IAAkB5yD,OAEnB6yD,IAAUC,GAGb9yD,OAAOqe,OAAO,MAHQ00C,IACrB,MAAMroD,EAAM,GAASL,KAAK0oD,GAC1B,OAAOD,GAAMpoD,KAASooD,GAAMpoD,GAAOA,EAAIb,MAAM,GAAI,GAAG6C,cAAc,GAFvD,IAAComD,GAKhB,MAAME,GAAc35C,IAClBA,EAAOA,EAAK3M,cACJqmD,GAAUF,GAAOE,KAAW15C,GAGhC45C,GAAa55C,GAAQ05C,UAAgBA,IAAU15C,GAS/C,QAACN,IAAW5O,MASZ+oD,GAAcD,GAAW,aAqB/B,MAAME,GAAgBH,GAAW,eA2BjC,MAAMI,GAAWH,GAAW,UAQtBI,GAAaJ,GAAW,YASxBK,GAAWL,GAAW,UAStBM,GAAYR,GAAoB,OAAVA,GAAmC,iBAAVA,EAiB/CS,GAAiBrtD,IACrB,GAAoB,WAAhB0sD,GAAO1sD,GACT,OAAO,EAGT,MAAMiE,EAAYwoD,GAAezsD,GACjC,QAAsB,OAAdiE,GAAsBA,IAAcpK,OAAOoK,WAAkD,OAArCpK,OAAO4yD,eAAexoD,IAA0BqpD,OAAOC,eAAevtD,GAAUstD,OAAOE,YAAYxtD,EAAI,EAUnKytD,GAASZ,GAAW,QASpBa,GAASb,GAAW,QASpBc,GAASd,GAAW,QASpBe,GAAaf,GAAW,YAkCxBgB,GAAoBhB,GAAW,mBA2BrC,SAAS/zD,GAAQ6Z,EAAKlG,GAAI,WAACqhD,GAAa,GAAS,CAAC,GAEhD,GAAIn7C,QACF,OAGF,IAAIhY,EACAumB,EAQJ,GALmB,iBAARvO,IAETA,EAAM,CAACA,IAGLC,GAAQD,GAEV,IAAKhY,EAAI,EAAGumB,EAAIvO,EAAI5O,OAAQpJ,EAAIumB,EAAGvmB,IACjC8R,EAAGvI,KAAK,KAAMyO,EAAIhY,GAAIA,EAAGgY,OAEtB,CAEL,MAAM+N,EAAOotC,EAAaj0D,OAAOk0D,oBAAoBp7C,GAAO9Y,OAAO6mB,KAAK/N,GAClEkJ,EAAM6E,EAAK3c,OACjB,IAAIkM,EAEJ,IAAKtV,EAAI,EAAGA,EAAIkhB,EAAKlhB,IACnBsV,EAAMyQ,EAAK/lB,GACX8R,EAAGvI,KAAK,KAAMyO,EAAI1C,GAAMA,EAAK0C,EAEjC,CACF,CAEA,SAASq7C,GAAQr7C,EAAK1C,GACpBA,EAAMA,EAAI1J,cACV,MAAMma,EAAO7mB,OAAO6mB,KAAK/N,GACzB,IACIs7C,EADAtzD,EAAI+lB,EAAK3c,OAEb,KAAOpJ,KAAM,GAEX,GADAszD,EAAOvtC,EAAK/lB,GACRsV,IAAQg+C,EAAK1nD,cACf,OAAO0nD,EAGX,OAAO,IACT,CAEA,MAAMC,GAA0B,oBAATtoD,KAAyC,oBAAXuoD,YAAyB,EAAOA,OAASvoD,KAExFwoD,GAAoBtwB,IAAaivB,GAAYjvB,IAAYA,IAAYowB,GAoD3E,MA8HMG,IAAgBC,GAKG,oBAAfC,YAA8B9B,GAAe8B,YAH9C3B,GACE0B,IAAc1B,aAAiB0B,IAHrB,IAACA,GAetB,MAiCME,GAAa3B,GAAW,mBAWxB,GAAiB,GAAG5zD,oBAAoB,CAAC0Z,EAAKzQ,IAASjJ,EAAeiL,KAAKyO,EAAKzQ,GAA/D,CAAsErI,OAAOoK,WAS9FwqD,GAAW5B,GAAW,UAEtB6B,GAAoB,CAAC/7C,EAAKg8C,KAC9B,MAAMnmC,EAAc3uB,OAAO+0D,0BAA0Bj8C,GAC/Ck8C,EAAqB,CAAC,EAE5B/1D,GAAQ0vB,GAAa,CAACsmC,EAAYl1D,MACO,IAAnC+0D,EAAQG,EAAYl1D,EAAM+Y,KAC5Bk8C,EAAmBj1D,GAAQk1D,EAC7B,IAGFj1D,OAAOk1D,iBAAiBp8C,EAAKk8C,EAAmB,EAsFlD,IACEj8C,WACAo6C,iBACAgC,SAtkBF,SAAkBhvD,GAChB,OAAe,OAARA,IAAiB+sD,GAAY/sD,IAA4B,OAApBA,EAAImf,cAAyB4tC,GAAY/sD,EAAImf,cACpF+tC,GAAWltD,EAAImf,YAAY6vC,WAAahvD,EAAImf,YAAY6vC,SAAShvD,EACxE,EAokBEivD,WAxbkBrC,IAClB,MAAMsC,EAAU,oBAChB,OAAOtC,IACgB,mBAAbz3C,UAA2By3C,aAAiBz3C,UACpD,GAASjR,KAAK0oD,KAAWsC,GACxBhC,GAAWN,EAAMz8C,WAAay8C,EAAMz8C,aAAe++C,EACrD,EAmbDC,kBAljBF,SAA2BnvD,GACzB,IAAI1F,EAMJ,OAJEA,EAD0B,oBAAhB80D,aAAiCA,YAAkB,OACpDA,YAAYC,OAAOrvD,GAEnB,GAAUA,EAAU,QAAMgtD,GAAchtD,EAAIsvD,QAEhDh1D,CACT,EA2iBE2yD,YACAE,YACAoC,UAlgBgB3C,IAAmB,IAAVA,IAA4B,IAAVA,EAmgB3CQ,YACAC,iBACAN,eACAU,UACAC,UACAC,UACAc,YACAvB,cACAsC,SA9cgBxvD,GAAQotD,GAASptD,IAAQktD,GAAWltD,EAAIyvD,MA+cxD5B,qBACAQ,gBACAT,cACA90D,WACA42D,MA1VF,SAASA,IACP,MAAM,SAACC,GAAYvB,GAAiB9rD,OAASA,MAAQ,CAAC,EAChDhI,EAAS,CAAC,EACVs1D,EAAc,CAAC5vD,EAAKiQ,KACxB,MAAM4/C,EAAYF,GAAY3B,GAAQ1zD,EAAQ2V,IAAQA,EAClDo9C,GAAc/yD,EAAOu1D,KAAexC,GAAcrtD,GACpD1F,EAAOu1D,GAAaH,EAAMp1D,EAAOu1D,GAAY7vD,GACpCqtD,GAAcrtD,GACvB1F,EAAOu1D,GAAaH,EAAM,CAAC,EAAG1vD,GACrB4S,GAAQ5S,GACjB1F,EAAOu1D,GAAa7vD,EAAI0D,QAExBpJ,EAAOu1D,GAAa7vD,CACtB,EAGF,IAAK,IAAIrF,EAAI,EAAGumB,EAAIxe,UAAUqB,OAAQpJ,EAAIumB,EAAGvmB,IAC3C+H,UAAU/H,IAAM7B,GAAQ4J,UAAU/H,GAAIi1D,GAExC,OAAOt1D,CACT,EAuUE0L,OA3Ta,CAACsM,EAAGvR,EAAGyrD,GAAUsB,cAAa,CAAC,KAC5Ch1D,GAAQiI,GAAG,CAACf,EAAKiQ,KACXu8C,GAAWU,GAAWltD,GACxBsS,EAAErC,GAAO8Z,GAAK/pB,EAAKwsD,GAEnBl6C,EAAErC,GAAOjQ,CACX,GACC,CAAC8tD,eACGx7C,GAoTPxD,KAnbYvK,GAAQA,EAAIuK,KACxBvK,EAAIuK,OAASvK,EAAI9D,QAAQ,qCAAsC,IAmb/DqvD,SA3SgBxiD,IACc,QAA1BA,EAAQyiD,WAAW,KACrBziD,EAAUA,EAAQ5J,MAAM,IAEnB4J,GAwSP0iD,SA5Re,CAAC7wC,EAAa8wC,EAAkB12D,EAAOivB,KACtDrJ,EAAYlb,UAAYpK,OAAOqe,OAAO+3C,EAAiBhsD,UAAWukB,GAClErJ,EAAYlb,UAAUkb,YAAcA,EACpCtlB,OAAO8uB,eAAexJ,EAAa,QAAS,CAC1CtP,MAAOogD,EAAiBhsD,YAE1B1K,GAASM,OAAOC,OAAOqlB,EAAYlb,UAAW1K,EAAM,EAuRpD22D,aA3QmB,CAACC,EAAWC,EAASxgD,EAAQygD,KAChD,IAAI92D,EACAoB,EACAuH,EACJ,MAAMouD,EAAS,CAAC,EAIhB,GAFAF,EAAUA,GAAW,CAAC,EAEL,MAAbD,EAAmB,OAAOC,EAE9B,EAAG,CAGD,IAFA72D,EAAQM,OAAOk0D,oBAAoBoC,GACnCx1D,EAAIpB,EAAMwK,OACHpJ,KAAM,GACXuH,EAAO3I,EAAMoB,GACP01D,IAAcA,EAAWnuD,EAAMiuD,EAAWC,IAAcE,EAAOpuD,KACnEkuD,EAAQluD,GAAQiuD,EAAUjuD,GAC1BouD,EAAOpuD,IAAQ,GAGnBiuD,GAAuB,IAAXvgD,GAAoB68C,GAAe0D,EACjD,OAASA,KAAevgD,GAAUA,EAAOugD,EAAWC,KAAaD,IAAct2D,OAAOoK,WAEtF,OAAOmsD,CAAO,EAqPd1D,UACAG,cACA0D,SA3Oe,CAAChsD,EAAKisD,EAAclqD,KACnC/B,EAAMyT,OAAOzT,SACInL,IAAbkN,GAA0BA,EAAW/B,EAAIR,UAC3CuC,EAAW/B,EAAIR,QAEjBuC,GAAYkqD,EAAazsD,OACzB,MAAM0sD,EAAYlsD,EAAIxC,QAAQyuD,EAAclqD,GAC5C,OAAsB,IAAfmqD,GAAoBA,IAAcnqD,CAAQ,EAqOjDoqD,QA1Ne9D,IACf,IAAKA,EAAO,OAAO,KACnB,GAAIh6C,GAAQg6C,GAAQ,OAAOA,EAC3B,IAAIjyD,EAAIiyD,EAAM7oD,OACd,IAAKopD,GAASxyD,GAAI,OAAO,KACzB,MAAMu8B,EAAM,IAAIlzB,MAAMrJ,GACtB,KAAOA,KAAM,GACXu8B,EAAIv8B,GAAKiyD,EAAMjyD,GAEjB,OAAOu8B,CAAG,EAkNVy5B,aAvLmB,CAACh+C,EAAKlG,KACzB,MAEM+gD,GAFY76C,GAAOA,EAAI26C,OAAOE,WAETtpD,KAAKyO,GAEhC,IAAIrY,EAEJ,MAAQA,EAASkzD,EAAStyB,UAAY5gC,EAAOs2D,MAAM,CACjD,MAAMC,EAAOv2D,EAAOuV,MACpBpD,EAAGvI,KAAKyO,EAAKk+C,EAAK,GAAIA,EAAK,GAC7B,GA8KAC,SAnKe,CAACC,EAAQxsD,KACxB,IAAI2M,EACJ,MAAMgmB,EAAM,GAEZ,KAAwC,QAAhChmB,EAAU6/C,EAAO3oC,KAAK7jB,KAC5B2yB,EAAIzwB,KAAKyK,GAGX,OAAOgmB,CAAG,EA4JVs3B,cACAv1D,eAAc,GACd+3D,WAAY,GACZtC,qBACAuC,cApHqBt+C,IACrB+7C,GAAkB/7C,GAAK,CAACm8C,EAAYl1D,KAElC,GAAIszD,GAAWv6C,KAA6D,IAArD,CAAC,YAAa,SAAU,UAAU5Q,QAAQnI,GAC/D,OAAO,EAGT,MAAMiW,EAAQ8C,EAAI/Y,GAEbszD,GAAWr9C,KAEhBi/C,EAAWj3B,YAAa,EAEpB,aAAci3B,EAChBA,EAAWoC,UAAW,EAInBpC,EAAWpmC,MACdomC,EAAWpmC,IAAM,KACf,MAAMzL,MAAM,qCAAwCrjB,EAAO,IAAK,GAEpE,GACA,EA8FFu3D,YA3FkB,CAACC,EAAeC,KAClC,MAAM1+C,EAAM,CAAC,EAEP2+C,EAAUp6B,IACdA,EAAIp+B,SAAQ+W,IACV8C,EAAI9C,IAAS,CAAI,GACjB,EAKJ,OAFA+C,GAAQw+C,GAAiBE,EAAOF,GAAiBE,EAAOt5C,OAAOo5C,GAAersD,MAAMssD,IAE7E1+C,CAAG,EAiFV4+C,YA5JkBhtD,GACXA,EAAIgC,cAAc9F,QAAQ,yBAC/B,SAAkB0hB,EAAGqvC,EAAIC,GACvB,OAAOD,EAAG7uD,cAAgB8uD,CAC5B,IAyJFp8C,KA/EW,OAgFXq8C,eA9EqB,CAAC7hD,EAAO8hD,KAC7B9hD,GAASA,EACFq6C,OAAO0H,SAAS/hD,GAASA,EAAQ8hD,GA6ExC3D,WACAG,OAAQD,GACRE,oBACAyD,aA7EoBl/C,IACpB,MAAMm/C,EAAQ,IAAI9tD,MAAM,IAElB+tD,EAAQ,CAACC,EAAQr3D,KAErB,GAAIyyD,GAAS4E,GAAS,CACpB,GAAIF,EAAM/vD,QAAQiwD,IAAW,EAC3B,OAGF,KAAK,WAAYA,GAAS,CACxBF,EAAMn3D,GAAKq3D,EACX,MAAMptD,EAASgO,GAAQo/C,GAAU,GAAK,CAAC,EASvC,OAPAl5D,GAAQk5D,GAAQ,CAACniD,EAAOI,KACtB,MAAMgiD,EAAeF,EAAMliD,EAAOlV,EAAI,IACrCoyD,GAAYkF,KAAkBrtD,EAAOqL,GAAOgiD,EAAa,IAG5DH,EAAMn3D,QAAKvB,EAEJwL,CACT,CACF,CAEA,OAAOotD,CAAM,EAGf,OAAOD,EAAMp/C,EAAK,EAAE,GC/lBtB,SAASu/C,GAAW38C,EAAS48C,EAAMC,EAAQC,EAASC,GAClDr1C,MAAM/Y,KAAK5B,MAEP2a,MAAMs1C,kBACRt1C,MAAMs1C,kBAAkBjwD,KAAMA,KAAK6c,aAEnC7c,KAAKwvD,OAAQ,IAAK70C,OAAS60C,MAG7BxvD,KAAKiT,QAAUA,EACfjT,KAAK1I,KAAO,aACZu4D,IAAS7vD,KAAK6vD,KAAOA,GACrBC,IAAW9vD,KAAK8vD,OAASA,GACzBC,IAAY/vD,KAAK+vD,QAAUA,GAC3BC,IAAahwD,KAAKgwD,SAAWA,EAC/B,CAEAjgD,GAAM29C,SAASkC,GAAYj1C,MAAO,CAChCu1C,OAAQ,WACN,MAAO,CAELj9C,QAASjT,KAAKiT,QACd3b,KAAM0I,KAAK1I,KAEX64D,YAAanwD,KAAKmwD,YAClBC,OAAQpwD,KAAKowD,OAEbC,SAAUrwD,KAAKqwD,SACfC,WAAYtwD,KAAKswD,WACjBC,aAAcvwD,KAAKuwD,aACnBf,MAAOxvD,KAAKwvD,MAEZM,OAAQ//C,GAAMw/C,aAAavvD,KAAK8vD,QAChCD,KAAM7vD,KAAK6vD,KACXW,OAAQxwD,KAAKgwD,UAAYhwD,KAAKgwD,SAASQ,OAASxwD,KAAKgwD,SAASQ,OAAS,KAE3E,IAGF,MAAM,GAAYZ,GAAWjuD,UACvBukB,GAAc,CAAC,EAErB,CACE,uBACA,iBACA,eACA,YACA,cACA,4BACA,iBACA,mBACA,kBACA,eACA,kBACA,mBAEA1vB,SAAQq5D,IACR3pC,GAAY2pC,GAAQ,CAACtiD,MAAOsiD,EAAK,IAGnCt4D,OAAOk1D,iBAAiBmD,GAAY1pC,IACpC3uB,OAAO8uB,eAAe,GAAW,eAAgB,CAAC9Y,OAAO,IAGzDqiD,GAAWluC,KAAO,CAACjP,EAAOo9C,EAAMC,EAAQC,EAASC,EAAUS,KACzD,MAAMC,EAAan5D,OAAOqe,OAAO,IAgBjC,OAdA7F,GAAM69C,aAAan7C,EAAOi+C,GAAY,SAAgBrgD,GACpD,OAAOA,IAAQsK,MAAMhZ,SACvB,IAAG/B,GACe,iBAATA,IAGTgwD,GAAWhuD,KAAK8uD,EAAYj+C,EAAMQ,QAAS48C,EAAMC,EAAQC,EAASC,GAElEU,EAAWC,MAAQl+C,EAEnBi+C,EAAWp5D,KAAOmb,EAAMnb,KAExBm5D,GAAel5D,OAAOC,OAAOk5D,EAAYD,GAElCC,CAAU,EAGnB,YClGA,iBCYA,SAASE,GAAYtG,GACnB,OAAOv6C,GAAMg7C,cAAcT,IAAUv6C,GAAMO,QAAQg6C,EACrD,CASA,SAASuG,GAAeljD,GACtB,OAAOoC,GAAMk+C,SAAStgD,EAAK,MAAQA,EAAIvM,MAAM,GAAI,GAAKuM,CACxD,CAWA,SAASmjD,GAAUC,EAAMpjD,EAAKqjD,GAC5B,OAAKD,EACEA,EAAKz+C,OAAO3E,GAAKmO,KAAI,SAAcm1C,EAAO54D,GAG/C,OADA44D,EAAQJ,GAAeI,IACfD,GAAQ34D,EAAI,IAAM44D,EAAQ,IAAMA,CAC1C,IAAGvuD,KAAKsuD,EAAO,IAAM,IALHrjD,CAMpB,CAaA,MAAMujD,GAAanhD,GAAM69C,aAAa79C,GAAO,CAAC,EAAG,MAAM,SAAgBnQ,GACrE,MAAO,WAAWO,KAAKP,EACzB,IAyKA,SArIA,SAAoByQ,EAAK8gD,EAAUzyD,GACjC,IAAKqR,GAAM+6C,SAASz6C,GAClB,MAAM,IAAI8oB,UAAU,4BAItBg4B,EAAWA,GAAY,IAAK,IAAet+C,UAY3C,MAAMu+C,GATN1yD,EAAUqR,GAAM69C,aAAalvD,EAAS,CACpC0yD,YAAY,EACZJ,MAAM,EACNK,SAAS,IACR,GAAO,SAAiBl4D,EAAQu2D,GAEjC,OAAQ3/C,GAAM06C,YAAYiF,EAAOv2D,GACnC,KAE2Bi4D,WAErBE,EAAU5yD,EAAQ4yD,SAAWC,EAC7BP,EAAOtyD,EAAQsyD,KACfK,EAAU3yD,EAAQ2yD,QAElBG,GADQ9yD,EAAQ+yD,MAAwB,oBAATA,MAAwBA,SAlDtCnH,EAmDkB6G,IAlDzBphD,GAAM66C,WAAWN,EAAM18C,SAAyC,aAA9B08C,EAAMU,OAAOC,cAA+BX,EAAMU,OAAOE,WAD7G,IAAyBZ,EAqDvB,IAAKv6C,GAAM66C,WAAW0G,GACpB,MAAM,IAAIn4B,UAAU,8BAGtB,SAASu4B,EAAankD,GACpB,GAAc,OAAVA,EAAgB,MAAO,GAE3B,GAAIwC,GAAMo7C,OAAO59C,GACf,OAAOA,EAAMokD,cAGf,IAAKH,GAAWzhD,GAAMs7C,OAAO99C,GAC3B,MAAM,IAAI,GAAW,gDAGvB,OAAIwC,GAAM26C,cAAcn9C,IAAUwC,GAAMg8C,aAAax+C,GAC5CikD,GAA2B,mBAATC,KAAsB,IAAIA,KAAK,CAAClkD,IAAUqkD,OAAOlwC,KAAKnU,GAG1EA,CACT,CAYA,SAASgkD,EAAehkD,EAAOI,EAAKojD,GAClC,IAAIn8B,EAAMrnB,EAEV,GAAIA,IAAUwjD,GAAyB,iBAAVxjD,EAC3B,GAAIwC,GAAMk+C,SAAStgD,EAAK,MAEtBA,EAAMyjD,EAAazjD,EAAMA,EAAIvM,MAAM,GAAI,GAEvCmM,EAAQW,KAAK2jD,UAAUtkD,QAClB,GACJwC,GAAMO,QAAQ/C,IA9GvB,SAAqBqnB,GACnB,OAAO7kB,GAAMO,QAAQskB,KAASA,EAAIk9B,KAAKlB,GACzC,CA4GiCmB,CAAYxkD,IACpCwC,GAAMu7C,WAAW/9C,IAAUwC,GAAMk+C,SAAStgD,EAAK,QAAUinB,EAAM7kB,GAAMq+C,QAAQ7gD,IAY9E,OATAI,EAAMkjD,GAAeljD,GAErBinB,EAAIp+B,SAAQ,SAAcsJ,EAAIwM,IAC1ByD,GAAM06C,YAAY3qD,IAAc,OAAPA,GAAgBqxD,EAASvjD,QAEtC,IAAZyjD,EAAmBP,GAAU,CAACnjD,GAAMrB,EAAO0kD,GAAqB,OAAZK,EAAmB1jD,EAAMA,EAAM,KACnF+jD,EAAa5xD,GAEjB,KACO,EAIX,QAAI8wD,GAAYrjD,KAIhB4jD,EAASvjD,OAAOkjD,GAAUC,EAAMpjD,EAAKqjD,GAAOU,EAAankD,KAElD,EACT,CAEA,MAAMiiD,EAAQ,GAERwC,EAAiBz6D,OAAOC,OAAO05D,GAAY,CAC/CK,iBACAG,eACAd,iBAyBF,IAAK7gD,GAAM+6C,SAASz6C,GAClB,MAAM,IAAI8oB,UAAU,0BAKtB,OA5BA,SAAS84B,EAAM1kD,EAAOwjD,GACpB,IAAIhhD,GAAM06C,YAAYl9C,GAAtB,CAEA,IAA8B,IAA1BiiD,EAAM/vD,QAAQ8N,GAChB,MAAMoN,MAAM,kCAAoCo2C,EAAKruD,KAAK,MAG5D8sD,EAAMrrD,KAAKoJ,GAEXwC,GAAMvZ,QAAQ+W,GAAO,SAAczN,EAAI6N,IAKtB,OAJEoC,GAAM06C,YAAY3qD,IAAc,OAAPA,IAAgBwxD,EAAQ1vD,KAChEuvD,EAAUrxD,EAAIiQ,GAAM46C,SAASh9C,GAAOA,EAAInB,OAASmB,EAAKojD,EAAMiB,KAI5DC,EAAMnyD,EAAIixD,EAAOA,EAAKz+C,OAAO3E,GAAO,CAACA,GAEzC,IAEA6hD,EAAM3tD,KAlB8B,CAmBtC,CAMAowD,CAAM5hD,GAEC8gD,CACT,ECtNA,SAASe,GAAOjwD,GACd,MAAMkwD,EAAU,CACd,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,MAAO,IACP,MAAO,MAET,OAAOC,mBAAmBnwD,GAAK9D,QAAQ,oBAAoB,SAAkB+F,GAC3E,OAAOiuD,EAAQjuD,EACjB,GACF,CAUA,SAASmuD,GAAqB7kD,EAAQ9O,GACpCsB,KAAKsyD,OAAS,GAEd9kD,GAAU,GAAWA,EAAQxN,KAAMtB,EACrC,CAEA,MAAM,GAAY2zD,GAAqB1wD,UAEvC,GAAUiM,OAAS,SAAgBtW,EAAMiW,GACvCvN,KAAKsyD,OAAOnuD,KAAK,CAAC7M,EAAMiW,GAC1B,EAEA,GAAUM,SAAW,SAAkB0kD,GACrC,MAAMC,EAAUD,EAAU,SAAShlD,GACjC,OAAOglD,EAAQ3wD,KAAK5B,KAAMuN,EAAO2kD,GACnC,EAAIA,GAEJ,OAAOlyD,KAAKsyD,OAAOx2C,KAAI,SAAcyyC,GACnC,OAAOiE,EAAQjE,EAAK,IAAM,IAAMiE,EAAQjE,EAAK,GAC/C,GAAG,IAAI7rD,KAAK,IACd,EAEA,YC5CA,SAAS,GAAOhF,GACd,OAAO00D,mBAAmB10D,GACxBS,QAAQ,QAAS,KACjBA,QAAQ,OAAQ,KAChBA,QAAQ,QAAS,KACjBA,QAAQ,OAAQ,KAChBA,QAAQ,QAAS,KACjBA,QAAQ,QAAS,IACrB,CAWe,SAASs0D,GAASC,EAAKllD,EAAQ9O,GAE5C,IAAK8O,EACH,OAAOklD,EAGT,MAAMF,EAAU9zD,GAAWA,EAAQwzD,QAAU,GAEvCS,EAAcj0D,GAAWA,EAAQk0D,UAEvC,IAAIC,EAUJ,GAPEA,EADEF,EACiBA,EAAYnlD,EAAQ9O,GAEpBqR,GAAMw7C,kBAAkB/9C,GACzCA,EAAOK,WACP,IAAI,GAAqBL,EAAQ9O,GAASmP,SAAS2kD,GAGnDK,EAAkB,CACpB,MAAMC,EAAgBJ,EAAIjzD,QAAQ,MAEX,IAAnBqzD,IACFJ,EAAMA,EAAItxD,MAAM,EAAG0xD,IAErBJ,KAA8B,IAAtBA,EAAIjzD,QAAQ,KAAc,IAAM,KAAOozD,CACjD,CAEA,OAAOH,CACT,CCQA,SAlEA,MACE71C,cACE7c,KAAK+yD,SAAW,EAClB,CAUAC,IAAIC,EAAWC,EAAUx0D,GAOvB,OANAsB,KAAK+yD,SAAS5uD,KAAK,CACjB8uD,YACAC,WACAC,cAAaz0D,GAAUA,EAAQy0D,YAC/BC,QAAS10D,EAAUA,EAAQ00D,QAAU,OAEhCpzD,KAAK+yD,SAAStxD,OAAS,CAChC,CASA4xD,MAAMzsD,GACA5G,KAAK+yD,SAASnsD,KAChB5G,KAAK+yD,SAASnsD,GAAM,KAExB,CAOAoZ,QACMhgB,KAAK+yD,WACP/yD,KAAK+yD,SAAW,GAEpB,CAYAv8D,QAAQ2T,GACN4F,GAAMvZ,QAAQwJ,KAAK+yD,UAAU,SAAwBxzC,GACzC,OAANA,GACFpV,EAAGoV,EAEP,GACF,GCjEF,IACE+zC,mBAAmB,EACnBC,mBAAmB,EACnBC,qBAAqB,GCFvB,GAA0C,oBAApB/lD,gBAAkCA,gBAAkB,GCD1E,YCkBMgmD,GAAuB,MAC3B,IAAIC,EACJ,OAAyB,oBAAd7wD,WACyB,iBAAjC6wD,EAAU7wD,UAAU6wD,UACT,iBAAZA,GACY,OAAZA,KAKuB,oBAAXj7D,QAA8C,oBAAbN,SAChD,EAX4B,GAsBtBw7D,GAE0B,oBAAtBC,mBACPtwD,gBAAgBswD,mBACc,mBAAvBtwD,KAAKuwD,cAKhB,IACEC,WAAW,EACXC,QAAS,CACPtmD,gBAAe,GACfoF,SAAQ,GACR4+C,MAEFgC,wBACAE,iCACAK,UAAW,CAAC,OAAQ,QAAS,OAAQ,OAAQ,MAAO,SC+BtD,SA3CA,SAAwB7C,GACtB,SAAS8C,EAAUlD,EAAMxjD,EAAOjL,EAAQgK,GACtC,IAAIhV,EAAOy5D,EAAKzkD,KAChB,MAAM4nD,EAAetM,OAAO0H,UAAUh4D,GAChC68D,EAAS7nD,GAASykD,EAAKtvD,OAG7B,GAFAnK,GAAQA,GAAQyY,GAAMO,QAAQhO,GAAUA,EAAOb,OAASnK,EAEpD68D,EAOF,OANIpkD,GAAM2+C,WAAWpsD,EAAQhL,GAC3BgL,EAAOhL,GAAQ,CAACgL,EAAOhL,GAAOiW,GAE9BjL,EAAOhL,GAAQiW,GAGT2mD,EAGL5xD,EAAOhL,IAAUyY,GAAM+6C,SAASxoD,EAAOhL,MAC1CgL,EAAOhL,GAAQ,IASjB,OANe28D,EAAUlD,EAAMxjD,EAAOjL,EAAOhL,GAAOgV,IAEtCyD,GAAMO,QAAQhO,EAAOhL,MACjCgL,EAAOhL,GA5Cb,SAAuBs9B,GACrB,MAAMvkB,EAAM,CAAC,EACP+N,EAAO7mB,OAAO6mB,KAAKwW,GACzB,IAAIv8B,EACJ,MAAMkhB,EAAM6E,EAAK3c,OACjB,IAAIkM,EACJ,IAAKtV,EAAI,EAAGA,EAAIkhB,EAAKlhB,IACnBsV,EAAMyQ,EAAK/lB,GACXgY,EAAI1C,GAAOinB,EAAIjnB,GAEjB,OAAO0C,CACT,CAiCqB+jD,CAAc9xD,EAAOhL,MAG9B48D,CACV,CAEA,GAAInkD,GAAM48C,WAAWwE,IAAaphD,GAAM66C,WAAWuG,EAAS9kD,SAAU,CACpE,MAAMgE,EAAM,CAAC,EAMb,OAJAN,GAAMs+C,aAAa8C,GAAU,CAAC75D,EAAMiW,KAClC0mD,EAvEN,SAAuB38D,GAKrB,OAAOyY,GAAMy+C,SAAS,gBAAiBl3D,GAAMwkB,KAAI5X,GAC3B,OAAbA,EAAM,GAAc,GAAKA,EAAM,IAAMA,EAAM,IAEtD,CA+DgBmwD,CAAc/8D,GAAOiW,EAAO8C,EAAK,EAAE,IAGxCA,CACT,CAEA,OAAO,IACT,EC/EMikD,GAAuB,CAC3B,oBAAgBx9D,GA4BlB,MAAM21B,GAAW,CAEf8nC,aAAc,GAEdC,QAAS,CAAC,MAAO,QAEjBC,iBAAkB,CAAC,SAA0Bp+D,EAAMq+D,GACjD,MAAMC,EAAcD,EAAQE,kBAAoB,GAC1CC,EAAqBF,EAAYl1D,QAAQ,qBAAuB,EAChEq1D,EAAkB/kD,GAAM+6C,SAASz0D,GAEnCy+D,GAAmB/kD,GAAMm8C,WAAW71D,KACtCA,EAAO,IAAIwc,SAASxc,IAKtB,GAFmB0Z,GAAM48C,WAAWt2D,GAGlC,OAAKw+D,GAGEA,EAAqB3mD,KAAK2jD,UAAU,GAAex7D,IAFjDA,EAKX,GAAI0Z,GAAM26C,cAAcr0D,IACtB0Z,GAAM28C,SAASr2D,IACf0Z,GAAMm9C,SAAS72D,IACf0Z,GAAMq7C,OAAO/0D,IACb0Z,GAAMs7C,OAAOh1D,GAEb,OAAOA,EAET,GAAI0Z,GAAM88C,kBAAkBx2D,GAC1B,OAAOA,EAAK22D,OAEd,GAAIj9C,GAAMw7C,kBAAkBl1D,GAE1B,OADAq+D,EAAQK,eAAe,mDAAmD,GACnE1+D,EAAKwX,WAGd,IAAIy9C,EAEJ,GAAIwJ,EAAiB,CACnB,GAAIH,EAAYl1D,QAAQ,sCAAwC,EAC9D,OC7EO,SAA0BpJ,EAAMqI,GAC7C,OAAO,GAAWrI,EAAM,IAAI,2BAAoCkB,OAAOC,OAAO,CAC5E85D,QAAS,SAAS/jD,EAAOI,EAAKojD,EAAMiE,GAClC,OAAI,WAAmBjlD,GAAM28C,SAASn/C,IACpCvN,KAAK4N,OAAOD,EAAKJ,EAAMM,SAAS,YACzB,GAGFmnD,EAAQzD,eAAe1hD,MAAM7P,KAAMI,UAC5C,GACC1B,GACL,CDkEeu2D,CAAiB5+D,EAAM2J,KAAKk1D,gBAAgBrnD,WAGrD,IAAKy9C,EAAav7C,GAAMu7C,WAAWj1D,KAAUs+D,EAAYl1D,QAAQ,wBAA0B,EAAG,CAC5F,MAAM01D,EAAYn1D,KAAKo1D,KAAOp1D,KAAKo1D,IAAIviD,SAEvC,OAAO,GACLy4C,EAAa,CAAC,UAAWj1D,GAAQA,EACjC8+D,GAAa,IAAIA,EACjBn1D,KAAKk1D,eAET,CACF,CAEA,OAAIJ,GAAmBD,GACrBH,EAAQK,eAAe,oBAAoB,GA1EjD,SAAyBM,EAAUz7C,EAAQ24C,GACzC,GAAIxiD,GAAM46C,SAAS0K,GACjB,IAEE,OADCz7C,GAAU1L,KAAKC,OAAOknD,GAChBtlD,GAAMvD,KAAK6oD,EAKpB,CAJE,MAAO97D,GACP,GAAe,gBAAXA,EAAEjC,KACJ,MAAMiC,CAEV,CAGF,OAAQg5D,GAAWrkD,KAAK2jD,WAAWwD,EACrC,CA8DaC,CAAgBj/D,IAGlBA,CACT,GAEAk/D,kBAAmB,CAAC,SAA2Bl/D,GAC7C,MAAMk+D,EAAev0D,KAAKu0D,cAAgB9nC,GAAS8nC,aAC7ChB,EAAoBgB,GAAgBA,EAAahB,kBACjDiC,EAAsC,SAAtBx1D,KAAKy1D,aAE3B,GAAIp/D,GAAQ0Z,GAAM46C,SAASt0D,KAAWk9D,IAAsBvzD,KAAKy1D,cAAiBD,GAAgB,CAChG,MACME,IADoBnB,GAAgBA,EAAajB,oBACPkC,EAEhD,IACE,OAAOtnD,KAAKC,MAAM9X,EAQpB,CAPE,MAAOkD,GACP,GAAIm8D,EAAmB,CACrB,GAAe,gBAAXn8D,EAAEjC,KACJ,MAAM,QAAgBiC,EAAG,oBAA6ByG,KAAM,KAAMA,KAAKgwD,UAEzE,MAAMz2D,CACR,CACF,CACF,CAEA,OAAOlD,CACT,GAMAkb,QAAS,EAETokD,eAAgB,aAChBC,eAAgB,eAEhBC,kBAAmB,EACnBC,eAAgB,EAEhBV,IAAK,CACHviD,SAAU,oBACV4+C,KAAM,iBAGRsE,eAAgB,SAAwBvF,GACtC,OAAOA,GAAU,KAAOA,EAAS,GACnC,EAEAkE,QAAS,CACPsB,OAAQ,CACN,OAAU,uCAKhBjmD,GAAMvZ,QAAQ,CAAC,SAAU,MAAO,SAAS,SAA6BuY,GACpE0d,GAASioC,QAAQ3lD,GAAU,CAAC,CAC9B,IAEAgB,GAAMvZ,QAAQ,CAAC,OAAQ,MAAO,UAAU,SAA+BuY,GACrE0d,GAASioC,QAAQ3lD,GAAUgB,GAAMq9C,MAAMkH,GACzC,IAEA,YE/JM2B,GAAoBlmD,GAAM8+C,YAAY,CAC1C,MAAO,gBAAiB,iBAAkB,eAAgB,OAC1D,UAAW,OAAQ,OAAQ,oBAAqB,sBAChD,gBAAiB,WAAY,eAAgB,sBAC7C,UAAW,cAAe,eCLtBqH,GAAalL,OAAO,aAE1B,SAASmL,GAAgBC,GACvB,OAAOA,GAAU1gD,OAAO0gD,GAAQ5pD,OAAOvI,aACzC,CAEA,SAASoyD,GAAe9oD,GACtB,OAAc,IAAVA,GAA4B,MAATA,EACdA,EAGFwC,GAAMO,QAAQ/C,GAASA,EAAMuO,IAAIu6C,IAAkB3gD,OAAOnI,EACnE,CAkBA,SAAS+oD,GAAiB96B,EAASjuB,EAAO6oD,EAAQ9oD,GAChD,OAAIyC,GAAM66C,WAAWt9C,GACZA,EAAO1L,KAAK5B,KAAMuN,EAAO6oD,GAG7BrmD,GAAM46C,SAASp9C,GAEhBwC,GAAM46C,SAASr9C,IACiB,IAA3BC,EAAM9N,QAAQ6N,GAGnByC,GAAMo8C,SAAS7+C,GACVA,EAAOnN,KAAKoN,QADrB,OANA,CASF,CAsBA,MAAMgpD,GACJ15C,YAAY63C,GACVA,GAAW10D,KAAKomB,IAAIsuC,EACtB,CAEAtuC,IAAIgwC,EAAQI,EAAgBC,GAC1B,MAAMnzD,EAAOtD,KAEb,SAAS02D,EAAUld,EAAQmd,EAASC,GAClC,MAAMC,EAAUV,GAAgBQ,GAEhC,IAAKE,EACH,MAAM,IAAIl8C,MAAM,0CAGlB,MAAMhN,EAAMoC,GAAM27C,QAAQpoD,EAAMuzD,KAE5BlpD,QAAqB7W,IAAdwM,EAAKqK,KAAmC,IAAbipD,QAAmC9/D,IAAb8/D,IAAwC,IAAdtzD,EAAKqK,MACzFrK,EAAKqK,GAAOgpD,GAAWN,GAAe7c,GAE1C,CAEA,MAAMsd,EAAa,CAACpC,EAASkC,IAC3B7mD,GAAMvZ,QAAQk+D,GAAS,CAAClb,EAAQmd,IAAYD,EAAUld,EAAQmd,EAASC,KAUzE,OARI7mD,GAAMg7C,cAAcqL,IAAWA,aAAkBp2D,KAAK6c,YACxDi6C,EAAWV,EAAQI,GACXzmD,GAAM46C,SAASyL,KAAYA,EAASA,EAAO5pD,UAlEhD,gBAAgBrM,KAkE8Di2D,EAlErD5pD,QAmE5BsqD,EDxEN,CAAeC,IACb,MAAMnxC,EAAS,CAAC,EAChB,IAAIjY,EACAjQ,EACArF,EAsBJ,OApBA0+D,GAAcA,EAAWt0D,MAAM,MAAMjM,SAAQ,SAAgBwgE,GAC3D3+D,EAAI2+D,EAAKv3D,QAAQ,KACjBkO,EAAMqpD,EAAKp3C,UAAU,EAAGvnB,GAAGmU,OAAOvI,cAClCvG,EAAMs5D,EAAKp3C,UAAUvnB,EAAI,GAAGmU,QAEvBmB,GAAQiY,EAAOjY,IAAQsoD,GAAkBtoD,KAIlC,eAARA,EACEiY,EAAOjY,GACTiY,EAAOjY,GAAKxJ,KAAKzG,GAEjBkoB,EAAOjY,GAAO,CAACjQ,GAGjBkoB,EAAOjY,GAAOiY,EAAOjY,GAAOiY,EAAOjY,GAAO,KAAOjQ,EAAMA,EAE3D,IAEOkoB,CACR,EC6CgBqxC,CAAab,GAASI,GAEvB,MAAVJ,GAAkBM,EAAUF,EAAgBJ,EAAQK,GAG/Cz2D,IACT,CAEAmmB,IAAIiwC,EAAQx8C,GAGV,GAFAw8C,EAASD,GAAgBC,GAEb,CACV,MAAMzoD,EAAMoC,GAAM27C,QAAQ1rD,KAAMo2D,GAEhC,GAAIzoD,EAAK,CACP,MAAMJ,EAAQvN,KAAK2N,GAEnB,IAAKiM,EACH,OAAOrM,EAGT,IAAe,IAAXqM,EACF,OAtGV,SAAqB3X,GACnB,MAAMi1D,EAAS3/D,OAAOqe,OAAO,MACvBuhD,EAAW,mCACjB,IAAIjzD,EAEJ,KAAQA,EAAQizD,EAASrxC,KAAK7jB,IAC5Bi1D,EAAOhzD,EAAM,IAAMA,EAAM,GAG3B,OAAOgzD,CACT,CA4FiBE,CAAY7pD,GAGrB,GAAIwC,GAAM66C,WAAWhxC,GACnB,OAAOA,EAAOhY,KAAK5B,KAAMuN,EAAOI,GAGlC,GAAIoC,GAAMo8C,SAASvyC,GACjB,OAAOA,EAAOkM,KAAKvY,GAGrB,MAAM,IAAI4rB,UAAU,yCACtB,CACF,CACF,CAEAtC,IAAIu/B,EAAQiB,GAGV,GAFAjB,EAASD,GAAgBC,GAEb,CACV,MAAMzoD,EAAMoC,GAAM27C,QAAQ1rD,KAAMo2D,GAEhC,SAAUzoD,GAAS0pD,IAAWf,GAAiBt2D,EAAMA,KAAK2N,GAAMA,EAAK0pD,GACvE,CAEA,OAAO,CACT,CAEAC,OAAOlB,EAAQiB,GACb,MAAM/zD,EAAOtD,KACb,IAAIu3D,GAAU,EAEd,SAASC,EAAab,GAGpB,GAFAA,EAAUR,GAAgBQ,GAEb,CACX,MAAMhpD,EAAMoC,GAAM27C,QAAQpoD,EAAMqzD,IAE5BhpD,GAAS0pD,IAAWf,GAAiBhzD,EAAMA,EAAKqK,GAAMA,EAAK0pD,YACtD/zD,EAAKqK,GAEZ4pD,GAAU,EAEd,CACF,CAQA,OANIxnD,GAAMO,QAAQ8lD,GAChBA,EAAO5/D,QAAQghE,GAEfA,EAAapB,GAGRmB,CACT,CAEAv3C,QACE,OAAOzoB,OAAO6mB,KAAKpe,MAAMxJ,QAAQwJ,KAAKs3D,OAAO7vC,KAAKznB,MACpD,CAEAy3D,UAAUC,GACR,MAAMp0D,EAAOtD,KACP00D,EAAU,CAAC,EAsBjB,OApBA3kD,GAAMvZ,QAAQwJ,MAAM,CAACuN,EAAO6oD,KAC1B,MAAMzoD,EAAMoC,GAAM27C,QAAQgJ,EAAS0B,GAEnC,GAAIzoD,EAGF,OAFArK,EAAKqK,GAAO0oD,GAAe9oD,eACpBjK,EAAK8yD,GAId,MAAMuB,EAAaD,EA9IzB,SAAsBtB,GACpB,OAAOA,EAAO5pD,OACXvI,cAAc9F,QAAQ,mBAAmB,CAACuiB,EAAGk3C,EAAM31D,IAC3C21D,EAAKv3D,cAAgB4B,GAElC,CAyIkC41D,CAAazB,GAAU1gD,OAAO0gD,GAAQ5pD,OAE9DmrD,IAAevB,UACV9yD,EAAK8yD,GAGd9yD,EAAKq0D,GAActB,GAAe9oD,GAElCmnD,EAAQiD,IAAc,CAAI,IAGrB33D,IACT,CAEAsS,UAAUwlD,GACR,OAAO93D,KAAK6c,YAAYvK,OAAOtS,QAAS83D,EAC1C,CAEA5H,OAAO6H,GACL,MAAM1nD,EAAM9Y,OAAOqe,OAAO,MAM1B,OAJA7F,GAAMvZ,QAAQwJ,MAAM,CAACuN,EAAO6oD,KACjB,MAAT7oD,IAA2B,IAAVA,IAAoB8C,EAAI+lD,GAAU2B,GAAahoD,GAAMO,QAAQ/C,GAASA,EAAM7K,KAAK,MAAQ6K,EAAM,IAG3G8C,CACT,CAEA,CAAC26C,OAAOE,YACN,OAAO3zD,OAAO8U,QAAQrM,KAAKkwD,UAAUlF,OAAOE,WAC9C,CAEAr9C,WACE,OAAOtW,OAAO8U,QAAQrM,KAAKkwD,UAAUp0C,KAAI,EAAEs6C,EAAQ7oD,KAAW6oD,EAAS,KAAO7oD,IAAO7K,KAAK,KAC5F,CAEYuoD,IAAPD,OAAOC,eACV,MAAO,cACT,CAEArN,YAAY0M,GACV,OAAOA,aAAiBtqD,KAAOsqD,EAAQ,IAAItqD,KAAKsqD,EAClD,CAEA1M,cAAc7d,KAAU+3B,GACtB,MAAME,EAAW,IAAIh4D,KAAK+/B,GAI1B,OAFA+3B,EAAQthE,SAAS8L,GAAW01D,EAAS5xC,IAAI9jB,KAElC01D,CACT,CAEApa,gBAAgBwY,GACd,MAIM6B,GAJYj4D,KAAKk2D,IAAel2D,KAAKk2D,IAAc,CACvD+B,UAAW,CAAC,IAGcA,UACtBt2D,EAAY3B,KAAK2B,UAEvB,SAASu2D,EAAevB,GACtB,MAAME,EAAUV,GAAgBQ,GAE3BsB,EAAUpB,MAtMrB,SAAwBxmD,EAAK+lD,GAC3B,MAAM+B,EAAepoD,GAAMk/C,YAAY,IAAMmH,GAE7C,CAAC,MAAO,MAAO,OAAO5/D,SAAQ4a,IAC5B7Z,OAAO8uB,eAAehW,EAAKe,EAAa+mD,EAAc,CACpD5qD,MAAO,SAAS6qD,EAAMC,EAAMC,GAC1B,OAAOt4D,KAAKoR,GAAYxP,KAAK5B,KAAMo2D,EAAQgC,EAAMC,EAAMC,EACzD,EACAC,cAAc,GACd,GAEN,CA4LQC,CAAe72D,EAAWg1D,GAC1BsB,EAAUpB,IAAW,EAEzB,CAIA,OAFA9mD,GAAMO,QAAQ8lD,GAAUA,EAAO5/D,QAAQ0hE,GAAkBA,EAAe9B,GAEjEp2D,IACT,EAGFu2D,GAAakC,SAAS,CAAC,eAAgB,iBAAkB,SAAU,kBAAmB,eAEtF1oD,GAAM4+C,cAAc4H,GAAa50D,WACjCoO,GAAM4+C,cAAc4H,IAEpB,YCnQe,SAASmC,GAAcC,EAAK3I,GACzC,MAAMF,EAAS9vD,MAAQ,GACjBw7B,EAAUw0B,GAAYF,EACtB4E,EAAU,QAAkBl5B,EAAQk5B,SAC1C,IAAIr+D,EAAOmlC,EAAQnlC,KAQnB,OANA0Z,GAAMvZ,QAAQmiE,GAAK,SAAmBxuD,GACpC9T,EAAO8T,EAAGvI,KAAKkuD,EAAQz5D,EAAMq+D,EAAQ+C,YAAazH,EAAWA,EAASQ,YAAS15D,EACjF,IAEA49D,EAAQ+C,YAEDphE,CACT,CCzBe,SAASuiE,GAASrrD,GAC/B,SAAUA,IAASA,EAAMsrD,WAC3B,CCUA,SAASC,GAAc7lD,EAAS68C,EAAQC,GAEtC,QAAgB/vD,KAAiB,MAAXiT,EAAkB,WAAaA,EAAS,gBAAyB68C,EAAQC,GAC/F/vD,KAAK1I,KAAO,eACd,CAEAyY,GAAM29C,SAASoL,GAAe,GAAY,CACxCD,YAAY,IAGd,YCnBA,SAAe,wBAIJ,CACLE,MAAO,SAAezhE,EAAMiW,EAAOxT,EAASg3D,EAAMiI,EAAQC,GACxD,MAAMh/D,EAAS,GACfA,EAAOkK,KAAK7M,EAAO,IAAM86D,mBAAmB7kD,IAExCwC,GAAM86C,SAAS9wD,IACjBE,EAAOkK,KAAK,WAAa,IAAIvK,KAAKG,GAASm/D,eAGzCnpD,GAAM46C,SAASoG,IACjB92D,EAAOkK,KAAK,QAAU4sD,GAGpBhhD,GAAM46C,SAASqO,IACjB/+D,EAAOkK,KAAK,UAAY60D,IAGX,IAAXC,GACFh/D,EAAOkK,KAAK,UAGdhM,SAAS8B,OAASA,EAAOyI,KAAK,KAChC,EAEAy2D,KAAM,SAAc7hE,GAClB,MAAM4M,EAAQ/L,SAAS8B,OAAOiK,MAAM,IAAIyb,OAAO,aAAeroB,EAAO,cACrE,OAAQ4M,EAAQi0B,mBAAmBj0B,EAAM,IAAM,IACjD,EAEAnI,OAAQ,SAAgBzE,GACtB0I,KAAK+4D,MAAMzhE,EAAM,GAAIsC,KAAKy3B,MAAQ,MACpC,GAMK,CACL0nC,MAAO,WAAkB,EACzBI,KAAM,WAAkB,OAAO,IAAM,EACrCp9D,OAAQ,WAAmB,GClClB,SAASq9D,GAAcC,EAASC,GAC7C,OAAID,ICHG,8BAA8Bl5D,KDGPm5D,GENjB,SAAqBD,EAASE,GAC3C,OAAOA,EACHF,EAAQl7D,QAAQ,OAAQ,IAAM,IAAMo7D,EAAYp7D,QAAQ,OAAQ,IAChEk7D,CACN,CFGWG,CAAYH,EAASC,GAEvBA,CACT,CGfA,SAAe,wBAIb,WACE,MAAMG,EAAO,kBAAkBt5D,KAAK0C,UAAU0B,WACxCm1D,EAAiBvhE,SAASiD,cAAc,KAC9C,IAAIu+D,EAQJ,SAASC,EAAWlH,GAClB,IAAI5mD,EAAO4mD,EAWX,OATI+G,IAEFC,EAAe5+D,aAAa,OAAQgR,GACpCA,EAAO4tD,EAAe5tD,MAGxB4tD,EAAe5+D,aAAa,OAAQgR,GAG7B,CACLA,KAAM4tD,EAAe5tD,KACrB+tD,SAAUH,EAAeG,SAAWH,EAAeG,SAAS17D,QAAQ,KAAM,IAAM,GAChF27D,KAAMJ,EAAeI,KACrB7hB,OAAQyhB,EAAezhB,OAASyhB,EAAezhB,OAAO95C,QAAQ,MAAO,IAAM,GAC3E8gC,KAAMy6B,EAAez6B,KAAOy6B,EAAez6B,KAAK9gC,QAAQ,KAAM,IAAM,GACpE47D,SAAUL,EAAeK,SACzBC,KAAMN,EAAeM,KACrBhiB,SAAiD,MAAtC0hB,EAAe1hB,SAASiiB,OAAO,GACxCP,EAAe1hB,SACf,IAAM0hB,EAAe1hB,SAE3B,CAUA,OARA2hB,EAAYC,EAAWnhE,OAAOumC,SAASlzB,MAQhC,SAAyBouD,GAC9B,MAAMt0C,EAAU7V,GAAM46C,SAASuP,GAAeN,EAAWM,GAAcA,EACvE,OAAQt0C,EAAOi0C,WAAaF,EAAUE,UAClCj0C,EAAOk0C,OAASH,EAAUG,IAChC,CACD,CAlDD,GAsDS,WACL,OAAO,CACT,ECXJ,SA9CA,SAAqBK,EAActyD,GACjCsyD,EAAeA,GAAgB,GAC/B,MAAMC,EAAQ,IAAI14D,MAAMy4D,GAClBE,EAAa,IAAI34D,MAAMy4D,GAC7B,IAEIG,EAFAljC,EAAO,EACPmjC,EAAO,EAKX,OAFA1yD,OAAc/Q,IAAR+Q,EAAoBA,EAAM,IAEzB,SAAc2yD,GACnB,MAAMnpC,EAAMz3B,KAAKy3B,MAEXopC,EAAYJ,EAAWE,GAExBD,IACHA,EAAgBjpC,GAGlB+oC,EAAMhjC,GAAQojC,EACdH,EAAWjjC,GAAQ/F,EAEnB,IAAIh5B,EAAIkiE,EACJG,EAAa,EAEjB,KAAOriE,IAAM++B,GACXsjC,GAAcN,EAAM/hE,KACpBA,GAAQ8hE,EASV,GANA/iC,GAAQA,EAAO,GAAK+iC,EAEhB/iC,IAASmjC,IACXA,GAAQA,EAAO,GAAKJ,GAGlB9oC,EAAMipC,EAAgBzyD,EACxB,OAGF,MAAM8yD,EAASF,GAAappC,EAAMopC,EAElC,OAAOE,EAASh9D,KAAKkW,MAAmB,IAAb6mD,EAAoBC,QAAU7jE,CAC3D,CACF,ECpCA,SAAS8jE,GAAqBzrD,EAAU0rD,GACtC,IAAIC,EAAgB,EACpB,MAAMC,EAAe,GAAY,GAAI,KAErC,OAAOxhE,IACL,MAAMm3B,EAASn3B,EAAEm3B,OACXsqC,EAAQzhE,EAAE0hE,iBAAmB1hE,EAAEyhE,WAAQlkE,EACvCokE,EAAgBxqC,EAASoqC,EACzBK,EAAOJ,EAAaG,GAG1BJ,EAAgBpqC,EAEhB,MAAMr6B,EAAO,CACXq6B,SACAsqC,QACAv9D,SAAUu9D,EAAStqC,EAASsqC,OAASlkE,EACrCsjE,MAAOc,EACPC,KAAMA,QAAcrkE,EACpBskE,UAAWD,GAAQH,GAVLtqC,GAAUsqC,GAUeA,EAAQtqC,GAAUyqC,OAAOrkE,EAChEkH,MAAOzE,GAGTlD,EAAKwkE,EAAmB,WAAa,WAAY,EAEjD1rD,EAAS9Y,EAAK,CAElB,CAEA,MAEA,GAFwD,oBAAnBglE,gBAEG,SAAUvL,GAChD,OAAO,IAAI9xC,SAAQ,SAA4Bs9C,EAASC,GACtD,IAAIC,EAAc1L,EAAOz5D,KACzB,MAAMolE,EAAiB,QAAkB3L,EAAO4E,SAAS+C,YACnDhC,EAAe3F,EAAO2F,aAC5B,IAAIiG,EACJ,SAASpN,IACHwB,EAAO6L,aACT7L,EAAO6L,YAAYC,YAAYF,GAG7B5L,EAAO+L,QACT/L,EAAO+L,OAAOp5C,oBAAoB,QAASi5C,EAE/C,CAEI3rD,GAAM48C,WAAW6O,KAAiB,yBAAiC,mCACrEC,EAAe1G,gBAAe,GAGhC,IAAIhF,EAAU,IAAIsL,eAGlB,GAAIvL,EAAOgM,KAAM,CACf,MAAMC,EAAWjM,EAAOgM,KAAKC,UAAY,GACnCC,EAAWlM,EAAOgM,KAAKE,SAAWC,SAAS7J,mBAAmBtC,EAAOgM,KAAKE,WAAa,GAC7FP,EAAer1C,IAAI,gBAAiB,SAAW81C,KAAKH,EAAW,IAAMC,GACvE,CAEA,MAAMG,EAAW/C,GAActJ,EAAOuJ,QAASvJ,EAAO4C,KAOtD,SAAS0J,IACP,IAAKrM,EACH,OAGF,MAAMsM,EAAkB,QACtB,0BAA2BtM,GAAWA,EAAQuM,0BC5EvC,SAAgBhB,EAASC,EAAQvL,GAC9C,MAAM+F,EAAiB/F,EAASF,OAAOiG,eAClC/F,EAASQ,QAAWuF,IAAkBA,EAAe/F,EAASQ,QAGjE+K,EAAO,IAAI,GACT,mCAAqCvL,EAASQ,OAC9C,CAAC,mBAA4B,qBAA6B7yD,KAAKmD,MAAMkvD,EAASQ,OAAS,KAAO,GAC9FR,EAASF,OACTE,EAASD,QACTC,IAPFsL,EAAQtL,EAUZ,CD4EMuM,EAAO,SAAkBhvD,GACvB+tD,EAAQ/tD,GACR+gD,GACF,IAAG,SAAiB9nC,GAClB+0C,EAAO/0C,GACP8nC,GACF,GAfiB,CACfj4D,KAHoBo/D,GAAiC,SAAjBA,GAA4C,SAAjBA,EACxC1F,EAAQC,SAA/BD,EAAQyM,aAGRhM,OAAQT,EAAQS,OAChBiM,WAAY1M,EAAQ0M,WACpB/H,QAAS2H,EACTvM,SACAC,YAYFA,EAAU,IACZ,CAmEA,GArGAA,EAAQ9sB,KAAK6sB,EAAO/gD,OAAO1O,cAAeoyD,GAAS0J,EAAUrM,EAAOtiD,OAAQsiD,EAAO4M,mBAAmB,GAGtG3M,EAAQx+C,QAAUu+C,EAAOv+C,QAiCrB,cAAew+C,EAEjBA,EAAQqM,UAAYA,EAGpBrM,EAAQ4M,mBAAqB,WACtB5M,GAAkC,IAAvBA,EAAQr+C,aAQD,IAAnBq+C,EAAQS,QAAkBT,EAAQ6M,aAAwD,IAAzC7M,EAAQ6M,YAAYn9D,QAAQ,WAKjFlB,WAAW69D,EACb,EAIFrM,EAAQ8M,QAAU,WACX9M,IAILwL,EAAO,IAAI,GAAW,kBAAmB,gBAAyBzL,EAAQC,IAG1EA,EAAU,KACZ,EAGAA,EAAQ+M,QAAU,WAGhBvB,EAAO,IAAI,GAAW,gBAAiB,eAAwBzL,EAAQC,IAGvEA,EAAU,IACZ,EAGAA,EAAQgN,UAAY,WAClB,IAAIC,EAAsBlN,EAAOv+C,QAAU,cAAgBu+C,EAAOv+C,QAAU,cAAgB,mBAC5F,MAAMgjD,EAAezE,EAAOyE,cAAgB,GACxCzE,EAAOkN,sBACTA,EAAsBlN,EAAOkN,qBAE/BzB,EAAO,IAAI,GACTyB,EACAzI,EAAaf,oBAAsB,aAAuB,gBAC1D1D,EACAC,IAGFA,EAAU,IACZ,EAKI,wBAA+B,CAEjC,MAAMkN,GAAanN,EAAOoN,iBAAmBC,GAAgBhB,KACxDrM,EAAO6F,gBAAkB,QAAa7F,EAAO6F,gBAE9CsH,GACFxB,EAAer1C,IAAI0pC,EAAO8F,eAAgBqH,EAE9C,MAGgBnmE,IAAhB0kE,GAA6BC,EAAe1G,eAAe,MAGvD,qBAAsBhF,GACxBhgD,GAAMvZ,QAAQilE,EAAevL,UAAU,SAA0BxyD,EAAKiQ,GACpEoiD,EAAQqN,iBAAiBzvD,EAAKjQ,EAChC,IAIGqS,GAAM06C,YAAYqF,EAAOoN,mBAC5BnN,EAAQmN,kBAAoBpN,EAAOoN,iBAIjCzH,GAAiC,SAAjBA,IAClB1F,EAAQ0F,aAAe3F,EAAO2F,cAIS,mBAA9B3F,EAAOuN,oBAChBtN,EAAQ33D,iBAAiB,WAAYwiE,GAAqB9K,EAAOuN,oBAAoB,IAIhD,mBAA5BvN,EAAOwN,kBAAmCvN,EAAQwN,QAC3DxN,EAAQwN,OAAOnlE,iBAAiB,WAAYwiE,GAAqB9K,EAAOwN,oBAGtExN,EAAO6L,aAAe7L,EAAO+L,UAG/BH,EAAa8B,IACNzN,IAGLwL,GAAQiC,GAAUA,EAAO5sD,KAAO,IAAI,GAAc,KAAMk/C,EAAQC,GAAWyN,GAC3EzN,EAAQ0N,QACR1N,EAAU,KAAI,EAGhBD,EAAO6L,aAAe7L,EAAO6L,YAAY+B,UAAUhC,GAC/C5L,EAAO+L,SACT/L,EAAO+L,OAAO8B,QAAUjC,IAAe5L,EAAO+L,OAAOzjE,iBAAiB,QAASsjE,KAInF,MAAM7B,EE3OK,SAAuBnH,GACpC,MAAMxuD,EAAQ,4BAA4B4hB,KAAK4sC,GAC/C,OAAOxuD,GAASA,EAAM,IAAM,EAC9B,CFwOqB05D,CAAczB,GAE3BtC,IAAsD,IAA1C,qBAA2BA,GACzC0B,EAAO,IAAI,GAAW,wBAA0B1B,EAAW,IAAK,mBAA4B/J,IAM9FC,EAAQ8N,KAAKrC,GAAe,KAC9B,GACF,EGnPMsC,GAAgB,CACpBC,KCLF,KDMEC,IAAKA,IAGPjuD,GAAMvZ,QAAQsnE,IAAe,CAAC3zD,EAAIoD,KAChC,GAAGpD,EAAI,CACL,IACE5S,OAAO8uB,eAAelc,EAAI,OAAQ,CAACoD,SAGrC,CAFE,MAAOhU,GAET,CACAhC,OAAO8uB,eAAelc,EAAI,cAAe,CAACoD,SAC5C,KAGF,SACe0wD,IACXA,EAAWluD,GAAMO,QAAQ2tD,GAAYA,EAAW,CAACA,GAEjD,MAAM,OAACx8D,GAAUw8D,EACjB,IAAIC,EACA1J,EAEJ,IAAK,IAAIn8D,EAAI,EAAGA,EAAIoJ,IAClBy8D,EAAgBD,EAAS5lE,KACrBm8D,EAAUzkD,GAAM46C,SAASuT,GAAiBJ,GAAcI,EAAcj6D,eAAiBi6D,IAFjE7lE,KAO5B,IAAKm8D,EAAS,CACZ,IAAgB,IAAZA,EACF,MAAM,IAAI,GACR,WAAW0J,wCACX,mBAIJ,MAAM,IAAIvjD,MACR5K,GAAM2+C,WAAWoP,GAAeI,GAC9B,YAAYA,mCACZ,oBAAoBA,KAE1B,CAEA,IAAKnuD,GAAM66C,WAAW4J,GACpB,MAAM,IAAIr7B,UAAU,6BAGtB,OAAOq7B,CAAO,EEvClB,SAAS2J,GAA6BrO,GAKpC,GAJIA,EAAO6L,aACT7L,EAAO6L,YAAYyC,mBAGjBtO,EAAO+L,QAAU/L,EAAO+L,OAAO8B,QACjC,MAAM,IAAI,GAAc,KAAM7N,EAElC,CASe,SAASuO,GAAgBvO,GACtCqO,GAA6BrO,GAE7BA,EAAO4E,QAAU,QAAkB5E,EAAO4E,SAG1C5E,EAAOz5D,KAAOqiE,GAAc92D,KAC1BkuD,EACAA,EAAO2E,mBAGgD,IAArD,CAAC,OAAQ,MAAO,SAASh1D,QAAQqwD,EAAO/gD,SAC1C+gD,EAAO4E,QAAQK,eAAe,qCAAqC,GAKrE,OAFgBkJ,GAAoBnO,EAAO0E,SAAW,WAE/CA,CAAQ1E,GAAQ1vC,MAAK,SAA6B4vC,GAYvD,OAXAmO,GAA6BrO,GAG7BE,EAAS35D,KAAOqiE,GAAc92D,KAC5BkuD,EACAA,EAAOyF,kBACPvF,GAGFA,EAAS0E,QAAU,QAAkB1E,EAAS0E,SAEvC1E,CACT,IAAG,SAA4BsO,GAe7B,OAdK1F,GAAS0F,KACZH,GAA6BrO,GAGzBwO,GAAUA,EAAOtO,WACnBsO,EAAOtO,SAAS35D,KAAOqiE,GAAc92D,KACnCkuD,EACAA,EAAOyF,kBACP+I,EAAOtO,UAETsO,EAAOtO,SAAS0E,QAAU,QAAkB4J,EAAOtO,SAAS0E,WAIzD12C,QAAQu9C,OAAO+C,EACxB,GACF,CC3EA,MAAMC,GAAmBjU,GAAUA,aAAiB,GAAeA,EAAM4F,SAAW5F,EAWrE,SAASkU,GAAYC,EAASC,GAE3CA,EAAUA,GAAW,CAAC,EACtB,MAAM5O,EAAS,CAAC,EAEhB,SAAS6O,EAAer8D,EAAQotD,EAAQrC,GACtC,OAAIt9C,GAAMg7C,cAAczoD,IAAWyN,GAAMg7C,cAAc2E,GAC9C3/C,GAAMq9C,MAAMxrD,KAAK,CAACyrD,YAAW/qD,EAAQotD,GACnC3/C,GAAMg7C,cAAc2E,GACtB3/C,GAAMq9C,MAAM,CAAC,EAAGsC,GACd3/C,GAAMO,QAAQo/C,GAChBA,EAAOtuD,QAETsuD,CACT,CAGA,SAASkP,EAAoB5uD,EAAGvR,EAAG4uD,GACjC,OAAKt9C,GAAM06C,YAAYhsD,GAEXsR,GAAM06C,YAAYz6C,QAAvB,EACE2uD,OAAe7nE,EAAWkZ,EAAGq9C,GAF7BsR,EAAe3uD,EAAGvR,EAAG4uD,EAIhC,CAGA,SAASwR,EAAiB7uD,EAAGvR,GAC3B,IAAKsR,GAAM06C,YAAYhsD,GACrB,OAAOkgE,OAAe7nE,EAAW2H,EAErC,CAGA,SAASqgE,EAAiB9uD,EAAGvR,GAC3B,OAAKsR,GAAM06C,YAAYhsD,GAEXsR,GAAM06C,YAAYz6C,QAAvB,EACE2uD,OAAe7nE,EAAWkZ,GAF1B2uD,OAAe7nE,EAAW2H,EAIrC,CAGA,SAASsgE,EAAgB/uD,EAAGvR,EAAGmB,GAC7B,OAAIA,KAAQ8+D,EACHC,EAAe3uD,EAAGvR,GAChBmB,KAAQ6+D,EACVE,OAAe7nE,EAAWkZ,QAD5B,CAGT,CAEA,MAAMgvD,EAAW,CACftM,IAAKmM,EACL9vD,OAAQ8vD,EACRxoE,KAAMwoE,EACNxF,QAASyF,EACTrK,iBAAkBqK,EAClBvJ,kBAAmBuJ,EACnBpC,iBAAkBoC,EAClBvtD,QAASutD,EACTG,eAAgBH,EAChB5B,gBAAiB4B,EACjBtK,QAASsK,EACTrJ,aAAcqJ,EACdnJ,eAAgBmJ,EAChBlJ,eAAgBkJ,EAChBxB,iBAAkBwB,EAClBzB,mBAAoByB,EACpBI,WAAYJ,EACZjJ,iBAAkBiJ,EAClBhJ,cAAegJ,EACfK,eAAgBL,EAChBM,UAAWN,EACXO,UAAWP,EACXQ,WAAYR,EACZnD,YAAamD,EACbS,WAAYT,EACZU,iBAAkBV,EAClB/I,eAAgBgJ,EAChBrK,QAAS,CAAC1kD,EAAGvR,IAAMmgE,EAAoBL,GAAgBvuD,GAAIuuD,GAAgB9/D,IAAI,IASjF,OANAsR,GAAMvZ,QAAQe,OAAO6mB,KAAKqgD,GAASnsD,OAAO/a,OAAO6mB,KAAKsgD,KAAW,SAA4B9+D,GAC3F,MAAMwtD,EAAQ4R,EAASp/D,IAASg/D,EAC1Ba,EAAcrS,EAAMqR,EAAQ7+D,GAAO8+D,EAAQ9+D,GAAOA,GACvDmQ,GAAM06C,YAAYgV,IAAgBrS,IAAU2R,IAAqBjP,EAAOlwD,GAAQ6/D,EACnF,IAEO3P,CACT,CCxGO,MAAM4P,GAAU,QCKjBC,GAAa,CAAC,EAGpB,CAAC,SAAU,UAAW,SAAU,WAAY,SAAU,UAAUnpE,SAAQ,CAACoa,EAAMvY,KAC7EsnE,GAAW/uD,GAAQ,SAAmB05C,GACpC,cAAcA,IAAU15C,GAAQ,KAAOvY,EAAI,EAAI,KAAO,KAAOuY,CAC/D,CAAC,IAGH,MAAMgvD,GAAqB,CAAC,EAW5BD,GAAWpL,aAAe,SAAsBsL,EAAWtmC,EAAStmB,GAClE,SAAS6sD,EAAcjhE,EAAKkhE,GAC1B,MAAO,uCAAoDlhE,EAAM,IAAOkhE,GAAQ9sD,EAAU,KAAOA,EAAU,GAC7G,CAGA,MAAO,CAAC1F,EAAO1O,EAAK2Y,KAClB,IAAkB,IAAdqoD,EACF,MAAM,IAAI,GACRC,EAAcjhE,EAAK,qBAAuB06B,EAAU,OAASA,EAAU,KACvE,mBAeJ,OAXIA,IAAYqmC,GAAmB/gE,KACjC+gE,GAAmB/gE,IAAO,EAE1BiT,QAAQwQ,KACNw9C,EACEjhE,EACA,+BAAiC06B,EAAU,8CAK1CsmC,GAAYA,EAAUtyD,EAAO1O,EAAK2Y,EAAY,CAEzD,EAmCA,UACEwoD,cAxBF,SAAuBthE,EAASuhE,EAAQC,GACtC,GAAuB,iBAAZxhE,EACT,MAAM,IAAI,GAAW,4BAA6B,yBAEpD,MAAM0f,EAAO7mB,OAAO6mB,KAAK1f,GACzB,IAAIrG,EAAI+lB,EAAK3c,OACb,KAAOpJ,KAAM,GAAG,CACd,MAAMwG,EAAMuf,EAAK/lB,GACXwnE,EAAYI,EAAOphE,GACzB,GAAIghE,EAAJ,CACE,MAAMtyD,EAAQ7O,EAAQG,GAChB7G,OAAmBlB,IAAVyW,GAAuBsyD,EAAUtyD,EAAO1O,EAAKH,GAC5D,IAAe,IAAX1G,EACF,MAAM,IAAI,GAAW,UAAY6G,EAAM,YAAc7G,EAAQ,wBAGjE,MACA,IAAqB,IAAjBkoE,EACF,MAAM,IAAI,GAAW,kBAAoBrhE,EAAK,kBAElD,CACF,EAIE8gE,eC9EI,GAAaE,GAAUF,WAS7B,MAAMQ,GACJtjD,YAAYujD,GACVpgE,KAAKysB,SAAW2zC,EAChBpgE,KAAKqgE,aAAe,CAClBtQ,QAAS,IAAI,GACbC,SAAU,IAAI,GAElB,CAUAD,QAAQuQ,EAAaxQ,GAGQ,iBAAhBwQ,GACTxQ,EAASA,GAAU,CAAC,GACb4C,IAAM4N,EAEbxQ,EAASwQ,GAAe,CAAC,EAG3BxQ,EAAS0O,GAAYx+D,KAAKysB,SAAUqjC,GAEpC,MAAM,aAACyE,EAAY,iBAAEmI,EAAgB,QAAEhI,GAAW5E,EAoBlD,IAAIyQ,OAlBiBzpE,IAAjBy9D,GACFsL,GAAUG,cAAczL,EAAc,CACpCjB,kBAAmB,GAAWiB,aAAa,GAAWiM,SACtDjN,kBAAmB,GAAWgB,aAAa,GAAWiM,SACtDhN,oBAAqB,GAAWe,aAAa,GAAWiM,WACvD,QAGoB1pE,IAArB4lE,GACFmD,GAAUG,cAActD,EAAkB,CACxCxK,OAAQ,GAAWuO,SACnB7N,UAAW,GAAW6N,WACrB,GAIL3Q,EAAO/gD,QAAU+gD,EAAO/gD,QAAU/O,KAAKysB,SAAS1d,QAAU,OAAO9K,cAKjEs8D,EAAiB7L,GAAW3kD,GAAMq9C,MAChCsH,EAAQsB,OACRtB,EAAQ5E,EAAO/gD,SAGjBwxD,GAAkBxwD,GAAMvZ,QACtB,CAAC,SAAU,MAAO,OAAQ,OAAQ,MAAO,QAAS,WACjDuY,WACQ2lD,EAAQ3lD,EAAO,IAI1B+gD,EAAO4E,QAAU,UAAoB6L,EAAgB7L,GAGrD,MAAMgM,EAA0B,GAChC,IAAIC,GAAiC,EACrC3gE,KAAKqgE,aAAatQ,QAAQv5D,SAAQ,SAAoCoqE,GACjC,mBAAxBA,EAAYxN,UAA0D,IAAhCwN,EAAYxN,QAAQtD,KAIrE6Q,EAAiCA,GAAkCC,EAAYzN,YAE/EuN,EAAwBG,QAAQD,EAAY3N,UAAW2N,EAAY1N,UACrE,IAEA,MAAM4N,EAA2B,GAKjC,IAAIC,EAJJ/gE,KAAKqgE,aAAarQ,SAASx5D,SAAQ,SAAkCoqE,GACnEE,EAAyB38D,KAAKy8D,EAAY3N,UAAW2N,EAAY1N,SACnE,IAGA,IACI35C,EADAlhB,EAAI,EAGR,IAAKsoE,EAAgC,CACnC,MAAMK,EAAQ,CAAC3C,GAAgB52C,KAAKznB,WAAOlJ,GAO3C,IANAkqE,EAAMH,QAAQhxD,MAAMmxD,EAAON,GAC3BM,EAAM78D,KAAK0L,MAAMmxD,EAAOF,GACxBvnD,EAAMynD,EAAMv/D,OAEZs/D,EAAU/iD,QAAQs9C,QAAQxL,GAEnBz3D,EAAIkhB,GACTwnD,EAAUA,EAAQ3gD,KAAK4gD,EAAM3oE,KAAM2oE,EAAM3oE,MAG3C,OAAO0oE,CACT,CAEAxnD,EAAMmnD,EAAwBj/D,OAE9B,IAAIw/D,EAAYnR,EAIhB,IAFAz3D,EAAI,EAEGA,EAAIkhB,GAAK,CACd,MAAM2nD,EAAcR,EAAwBroE,KACtC8oE,EAAaT,EAAwBroE,KAC3C,IACE4oE,EAAYC,EAAYD,EAI1B,CAHE,MAAOxuD,GACP0uD,EAAWv/D,KAAK5B,KAAMyS,GACtB,KACF,CACF,CAEA,IACEsuD,EAAU1C,GAAgBz8D,KAAK5B,KAAMihE,EAGvC,CAFE,MAAOxuD,GACP,OAAOuL,QAAQu9C,OAAO9oD,EACxB,CAKA,IAHApa,EAAI,EACJkhB,EAAMunD,EAAyBr/D,OAExBpJ,EAAIkhB,GACTwnD,EAAUA,EAAQ3gD,KAAK0gD,EAAyBzoE,KAAMyoE,EAAyBzoE,MAGjF,OAAO0oE,CACT,CAEAK,OAAOtR,GAGL,OAAO2C,GADU2G,IADjBtJ,EAAS0O,GAAYx+D,KAAKysB,SAAUqjC,IACEuJ,QAASvJ,EAAO4C,KAC5B5C,EAAOtiD,OAAQsiD,EAAO4M,iBAClD,EAIF3sD,GAAMvZ,QAAQ,CAAC,SAAU,MAAO,OAAQ,YAAY,SAA6BuY,GAE/EoxD,GAAMx+D,UAAUoN,GAAU,SAAS2jD,EAAK5C,GACtC,OAAO9vD,KAAK+vD,QAAQyO,GAAY1O,GAAU,CAAC,EAAG,CAC5C/gD,SACA2jD,MACAr8D,MAAOy5D,GAAU,CAAC,GAAGz5D,OAEzB,CACF,IAEA0Z,GAAMvZ,QAAQ,CAAC,OAAQ,MAAO,UAAU,SAA+BuY,GAGrE,SAASsyD,EAAmBC,GAC1B,OAAO,SAAoB5O,EAAKr8D,EAAMy5D,GACpC,OAAO9vD,KAAK+vD,QAAQyO,GAAY1O,GAAU,CAAC,EAAG,CAC5C/gD,SACA2lD,QAAS4M,EAAS,CAChB,eAAgB,uBACd,CAAC,EACL5O,MACAr8D,SAEJ,CACF,CAEA8pE,GAAMx+D,UAAUoN,GAAUsyD,IAE1BlB,GAAMx+D,UAAUoN,EAAS,QAAUsyD,GAAmB,EACxD,IAEA,YCzLA,MAAME,GACJ1kD,YAAY2kD,GACV,GAAwB,mBAAbA,EACT,MAAM,IAAIroC,UAAU,gCAGtB,IAAIsoC,EAEJzhE,KAAK+gE,QAAU,IAAI/iD,SAAQ,SAAyBs9C,GAClDmG,EAAiBnG,CACnB,IAEA,MAAMrK,EAAQjxD,KAGdA,KAAK+gE,QAAQ3gD,MAAKo9C,IAChB,IAAKvM,EAAMyQ,WAAY,OAEvB,IAAIrpE,EAAI44D,EAAMyQ,WAAWjgE,OAEzB,KAAOpJ,KAAM,GACX44D,EAAMyQ,WAAWrpE,GAAGmlE,GAEtBvM,EAAMyQ,WAAa,IAAI,IAIzB1hE,KAAK+gE,QAAQ3gD,KAAOuhD,IAClB,IAAIC,EAEJ,MAAMb,EAAU,IAAI/iD,SAAQs9C,IAC1BrK,EAAMyM,UAAUpC,GAChBsG,EAAWtG,CAAO,IACjBl7C,KAAKuhD,GAMR,OAJAZ,EAAQvD,OAAS,WACfvM,EAAM2K,YAAYgG,EACpB,EAEOb,CAAO,EAGhBS,GAAS,SAAgBvuD,EAAS68C,EAAQC,GACpCkB,EAAMqN,SAKVrN,EAAMqN,OAAS,IAAI,GAAcrrD,EAAS68C,EAAQC,GAClD0R,EAAexQ,EAAMqN,QACvB,GACF,CAKAF,mBACE,GAAIp+D,KAAKs+D,OACP,MAAMt+D,KAAKs+D,MAEf,CAMAZ,UAAUvuD,GACJnP,KAAKs+D,OACPnvD,EAASnP,KAAKs+D,QAIZt+D,KAAK0hE,WACP1hE,KAAK0hE,WAAWv9D,KAAKgL,GAErBnP,KAAK0hE,WAAa,CAACvyD,EAEvB,CAMAysD,YAAYzsD,GACV,IAAKnP,KAAK0hE,WACR,OAEF,MAAMp1D,EAAQtM,KAAK0hE,WAAWjiE,QAAQ0P,IACvB,IAAX7C,GACFtM,KAAK0hE,WAAW13D,OAAOsC,EAAO,EAElC,CAMAsxC,gBACE,IAAI4f,EAIJ,MAAO,CACLvM,MAJY,IAAIsQ,IAAY,SAAkB/oE,GAC9CglE,EAAShlE,CACX,IAGEglE,SAEJ,EAGF,YC5EA,MAAMqE,GAnBN,SAASC,EAAeC,GACtB,MAAMvmC,EAAU,IAAI,GAAMumC,GACpBrvD,EAAW+U,GAAK,qBAAyB+T,GAa/C,OAVAzrB,GAAMrM,OAAOgP,EAAU,aAAiB8oB,EAAS,CAACgwB,YAAY,IAG9Dz7C,GAAMrM,OAAOgP,EAAU8oB,EAAS,KAAM,CAACgwB,YAAY,IAGnD94C,EAASkD,OAAS,SAAgBwqD,GAChC,OAAO0B,EAAetD,GAAYuD,EAAe3B,GACnD,EAEO1tD,CACT,CAGcovD,CAAe,IAG7BD,GAAM1B,MAAQ,GAGd0B,GAAM/I,cAAgB,GACtB+I,GAAMN,YAAc,GACpBM,GAAMjJ,SAAWA,GACjBiJ,GAAMnC,QAAUA,GAChBmC,GAAMG,WAAa,GAGnBH,GAAMjS,WAAa,GAGnBiS,GAAMI,OAASJ,GAAM/I,cAGrB+I,GAAMlhD,IAAM,SAAauhD,GACvB,OAAOlkD,QAAQ2C,IAAIuhD,EACrB,EAEAL,GAAMM,OC5CS,SAAgB17D,GAC7B,OAAO,SAAcmuB,GACnB,OAAOnuB,EAASoJ,MAAM,KAAM+kB,EAC9B,CACF,ED2CAitC,GAAMO,aE3DS,SAAsBC,GACnC,OAAOtyD,GAAM+6C,SAASuX,KAAsC,IAAzBA,EAAQD,YAC7C,EF4DAP,GAAMrD,YAAcA,GAEpBqD,GAAMtL,aAAe,GAErBsL,GAAMS,WAAahY,GAAS,GAAev6C,GAAMm8C,WAAW5B,GAAS,IAAIz3C,SAASy3C,GAASA,GAE3FuX,GAAMU,QAAUV,GAGhB,kiCGhFA1pE,SAASC,iBAAiB,oBAEtB,WACI,IACoCE,EADkC,KAA9CH,SAASI,iBAAiB,qBACd,qBAAE,IAA3BwT,EAAM,QACbA,EAAO3T,iBACH,SACA,SAAU4F,GACN,IAAMwkE,EAASxiE,KAAK2K,QAAQ83D,OAC5B,GAAKD,EAAL,CAIA,IAAME,EAAS1iE,KAAK2K,QAAQ+3D,OACb,QAAXA,EAUhB,SAAwBF,EAAQz2D,GAC5B,IAAIolD,EAAW,IAAIt+C,SACnBs+C,EAASvjD,OAAO,SAAU,oBAC1BujD,EAASvjD,OAAO,WAAY+0D,SAASC,OACrCzR,EAASvjD,OAAO,UAAW40D,GAE3BX,GAAAA,KAAWc,SAASE,QAAS1R,GAAU/wC,MAAK,SAAC4vC,GACrCA,EAAS35D,KAAKysE,UACd/2D,EAAOnR,UAAUkB,IAAI,gBACrBiQ,EAAO7S,cAAc,gBAAgB6pE,UAAYJ,SAASK,OAAOC,UAAUC,sBAC3En3D,EAAOpB,QAAQ+3D,OAAS,SAEhC,GACJ,CAtBgBS,CAAeX,EAAQz2D,GACL,WAAX22D,GAuBvB,SAA6BF,EAAQz2D,GACjC,IAAIolD,EAAW,IAAIt+C,SACnBs+C,EAASvjD,OAAO,SAAU,yBAC1BujD,EAASvjD,OAAO,WAAY+0D,SAASC,OACrCzR,EAASvjD,OAAO,UAAW40D,GAE3BX,GAAAA,KAAWc,SAASE,QAAS1R,GAAU/wC,MAAK,SAAC4vC,GACrCA,EAAS35D,KAAKysE,UACd/2D,EAAOnR,UAAUmB,OAAO,gBACxBgQ,EAAO7S,cAAc,gBAAgB6pE,UAAYJ,SAASK,OAAOC,UAAUG,YAC3Er3D,EAAOpB,QAAQ+3D,OAAS,MAEhC,GACJ,CAnCgBW,CAAoBb,EAAQz2D,EANhC,CAQJ,GACA,CAAElT,SAAS,GAEnB,EAlBA,IAAK,EAAL,qBAAAsS,GAkBC,UAAAvS,EAAAA,EAAAA,EAAA,SAAAA,EAAAA,GAAA,CA+BL,GACA,CAAEC,SAAS,iiCCtDfJ,OAAOL,iBACH,QACA,WACI,GAAIgC,WAAWC,WAAWm+B,QAAQ,SAAU,CACrB,CAAC,OAAQ,SACjBhiC,SAAQ,SAACmlD,GAChB,IAAMl9B,EAAUrb,IAAE,qCAAD,OAAsCu4C,IACnDl9B,EAAQhd,QACRgd,EAAQ5U,MAAK,WACT,IAAMtP,EAAS6I,IAAEpD,MAEXsjE,EADYlgE,IAAEpD,MAAM20B,QAAQ,0BACJ7wB,KAAK,MAC7Byc,EAAMnd,IAAEpD,MAAMjI,KAAK,OACrBmO,EAAMqa,EAAIzc,KAAK,YACA,IAARoC,IAIa,mBAAbq9D,UACFr9D,EAAIs9D,SAAS,wBACdjjD,EAAI6e,SAAS36B,IAAI,UAAW,QAC5BlK,EAAOqT,OAAO,WAAD,OACE01D,EAAW,8CAAsC3nB,EAAS,2CAAmCz1C,EAAG,kBAInHqa,EAAI/W,GAAG,QAAQ,WACXtD,EAAMqa,EAAIzc,KAAK,OACfyc,EAAI6e,SAAS36B,IAAI,UAAW,QAC5BlK,EAAOqT,OAAO,WAAD,OACE01D,EAAW,8CAAsC3nB,EAAS,2CAAmCz1C,EAAG,gBAEnH,KAEKA,EAAIs9D,SAAS,wBACdjjD,EAAI6e,SAAS36B,IAAI,UAAW,QAC5BlK,EAAOqT,OAAO,WAAD,OACE01D,EAAW,8CAAsC3nB,EAAS,2CAAmCz1C,EAAG,kBAI3H,GAER,GACJ,CACJ,GACA,CAAErN,SAAS,IC9CfV,SAASC,iBAAiB,oBAEtB,WAII,IAGwBE,EAFpBD,EAAI,EACR,KAFcF,SAASI,iBAAiB,uBAGhB,IAAxB,IAAK,EAAL,qBAA0B,KAAfiS,EAAI,QAELi5D,EAAW,MAAQprE,IACnBqrE,EAAUl5D,EAAKtR,cAAc,YAC/BwqE,GACAA,EAAQ5oE,aAAa,KAAM2oE,GAE/B,IAAMl4D,EAASf,EAAKtR,cAAc,WAC9BqS,GACAA,EAAOzQ,aAAa,cAAe2oE,GAIvCrgE,IAAE,IAAD,OAAKqgE,IAAYj6D,GAAG,gCAAgC,SAAUxL,GAC3D,GAAIA,EAAMsE,SAAWtC,KAArB,CAEA,OAAQhC,EAAM4S,MACV,IAAK,KACDxN,IAAEpD,MAAMkhC,UAAU,CACd9jC,MAAO,WACHgG,IAAEpD,MAAMyE,IAAI,CACRrC,QAAS,QAEjB,IAEJ,MACJ,IAAK,MACDgB,IAAEpD,MAAMohC,UAKZh+B,IAAE,oBAAoB3B,QACtB2B,IAAE,oBAAoBk3B,WAAW,SAAS,EAnBb,CAqBrC,GACJ,CAEA,UAAA1hC,EAAAA,EAAAA,EAAA,SAAAA,EAAAA,GAAA,CACAwK,IAAE,gBAAgBoG,GAAG,gCAAgC,SAAUxL,GAC3D,GAAIA,EAAMsE,SAAWtC,KAArB,CAEA,OAAQhC,EAAM4S,MACV,IAAK,KACDxN,IAAEpD,MAAMkhC,YACR,MACJ,IAAK,MACD99B,IAAEpD,MAAMohC,UAKZh+B,IAAE,oBAAoB3B,QACtB2B,IAAE,oBAAoBk3B,WAAW,SAAS,EAbb,CAerC,IAGAl3B,IAAE,oBAAoBoG,GAAG,8BAA+B,0BAA0B,SAACxL,GAC/EoF,IAAEpF,EAAM44B,eAAe9yB,KAAK,iBAAiB,EACjD,IAGAV,IAAE,oBAAoBoG,GAAG,6BAA8B,0BAA0B,SAACxL,GAC9EoF,IAAEpF,EAAM44B,eAAe9yB,KAAK,iBAAiB,EACjD,IAEA,IACmC9I,EADkC,KAA9C7C,SAASI,iBAAiB,qBACd,IAAnC,IAAK,EAAL,qBAAqC,CAApB,QACNH,iBACH,SACA,WACI,IAAMkD,EAAOnD,SAASe,cAAc,QAC9ByqE,EAAOxrE,SAASe,cAAc,uBAC9B0qE,EAAazrE,SAASe,cAAc,8BACpC2qE,EAAW1rE,SAASe,cAAc,mBAClCs9C,EAAUr+C,SAASe,cAAc,oBACjC4qE,EAAettB,EAAQj+C,iBAAiB,MAC9C,GAAIi+C,EAAQ57C,UAAUC,SAAS,WAAY,CACvCS,EAAKV,UAAUmB,OAAO,mBACtBy6C,EAAQ57C,UAAUmB,OAAO,WACrB4nE,GACAA,EAAK/oE,UAAUmB,OAAO,YAEtB6nE,GACAA,EAAWhpE,UAAUmB,OAAO,YAE5B8nE,GACAA,EAASjpE,UAAUmB,OAAO,YAC7B,IAC4BqQ,EAD5B,KACgB03D,GAAY,IAA7B,IAAK,EAAL,qBAA+B,CAAlB,QACNlpE,UAAUmB,OAAO,WACxB,CAAC,UAAAgS,EAAAA,EAAAA,EAAA,SAAAA,EAAAA,GAAA,CACL,KAAO,CACHzS,EAAKV,UAAUkB,IAAI,mBACnB06C,EAAQ57C,UAAUkB,IAAI,WAClB6nE,GACAA,EAAK/oE,UAAUkB,IAAI,YAEnB8nE,GACAA,EAAWhpE,UAAUkB,IAAI,YAEzB+nE,GACAA,EAASjpE,UAAUkB,IAAI,YAC1B,IAC4BioE,EAD5B,KACgBD,GAAY,IAA7B,IAAK,EAAL,qBAA+B,CAAlB,QACNlpE,UAAUkB,IAAI,WACrB,CAAC,UAAAkoE,EAAAA,EAAAA,EAAA,SAAAA,EAAAA,GAAA,CACL,CACJ,GACA,CAAEnrE,SAAS,GAEnB,CAAC,UAAAoC,EAAAA,EAAAA,EAAA,SAAAA,EAAAA,GAAA,CAED,IAAMgpE,EAAc9rE,SAASe,cAAc,oBAC3C,GAAI+qE,EACA,IAAMC,EAA8BC,aAAY,WAC5C,IAAMC,EAAiBjsE,SAASiE,uBAAuB,kBAEvD,GAA8B,IAA1BgoE,EAAe3iE,OAAc,KACIoJ,EADJ,KACVu5D,GAAc,IAAjC,IAAK,EAAL,qBAAmC,KAA1B74D,EAAM,QACuC,IAA9CA,EAAOnN,qBAAqB,OAAOqD,SACnC8J,EAAOnS,WAAa6qE,EAAY7qE,UAExC,CAAC,UAAA6R,EAAAA,EAAAA,EAAA,SAAAA,EAAAA,GAAA,CAEDo5D,cAAcH,EAClB,CACJ,IAGJ,IAAMI,EAAoBnsE,SAASe,cAAc,wBAC3CqrE,EAAkBpsE,SAASe,cAAc,sBAC3CorE,GACAA,EAAkBlsE,iBACd,SACA,WACIksE,EAAkB1pE,UAAU2Q,OAAO,WAC/Bg5D,GACAA,EAAgB3pE,UAAU2Q,OAAO,UAEzC,GACA,CAAE1S,SAAS,GAGvB,GACA,CAAEA,SAAS,oBC3JfuK,KAAE,WACE,GAAIA,IAAE,sCAAsC3B,OAAQ,CAChD,IAAM+iE,EAAgB,IAAI/rE,OAAO2V,OAAO,yCAA0C,CAC9Eq2D,cAAe,EACfC,UAAU,EACVC,uBAAuB,EACvBC,qBAAqB,EACrBC,UAAW,CACP/kE,GAAI,oBACJqY,MAAM,KAId,GAAI/U,IAAE,0CAA0C3B,OACzB,IAAIhJ,OAAO2V,OAAO,qCAAsC,CACvE8kC,YAAY,EACZ4xB,WAAY,CACRC,OAAQ,sBACRC,OAAQ,uBAEZC,OAAQ,CACJC,OAAQV,IAIxB,CACJ,IAEAphE,IAAEjL,UAAUqR,GAAG,eAAgB,4CAA4C,SAAUjQ,GACjF6J,IAAE,qDAAqDxD,KAAK,YAAY,EAC5E,IAEAwD,IAAEjL,SAASmD,MAAMkO,GAAG,cAAe,gDAAgD,SAAUjQ,GACzF,IAAMjD,EAAS8M,IAAEpD,MACXuN,EAAQjX,EAAOoH,MACNpH,EAAO8oC,SACfrnC,KAAK,SAAS2F,IAAI6P,EAC7B,ICrCInX,IAAMA,GAAGC,OACL+M,IAAE3K,QAAQyD,QAAU,KAAOkH,IAAE,QAAQi8B,SAAS,yBAC9Cj8B,IAAE,QAAQqB,IAAI,cAAe,QAGjCrB,IAAE3K,QAAQ+Q,GAAG,UAAU,WACfpG,IAAE,QAAQi8B,SAAS,0BACfj8B,IAAE3K,QAAQyD,QAAU,IACgB,QAAhCkH,IAAE,QAAQqB,IAAI,gBACdrB,IAAE,QAAQqB,IAAI,cAAe,QAGjCrB,IAAE,QAAQqB,IAAI,cAAe,IAGzC,IAEAtM,SAASC,iBAAiB,oBAAoB,WAC1C,IAAM+sE,EAAqBhB,aAAY,WACnC,IAAMiB,EAAUhiE,IAAE,kBACdgiE,EAAQ3jE,OAAS,IACjB2jE,EAAQ57D,GAAG,SAAS,SAACjQ,GACjBA,EAAE0E,gBACN,IAEAomE,cAAcc,GAEtB,GAAG,KAEGE,EAAWjvE,GAAGC,KAAKC,OAAO,kBAC5B+uE,GACAA,EAASC,gBAAgB,mBACrBlvE,GAAGC,KAAKkvE,SAAS,kBAAkBC,cAAc,iBAE7D,KAGe,oBAARn3D,KACPA,IAAIrX,UAAU,8BAA8B,SAAUyuE,EAAUC,GAC5D,MAAsB,UAAlBA,EAASpuE,OAA2D,IAAvCouE,EAASn4D,MAAM9N,QAAQ,WAC7C,CACHnI,KAAMouE,EAASpuE,KACfiW,MAAOm4D,EAASn4D,OAIjBk4D,CACX,mBC9CJriE,KAAE,WACEA,IAAE,cAAcoG,GAAG,SAAS,WAAY,YAC9B5C,EAAKxD,IAAEpD,MAAM3J,KAAK,MAClBsvE,EAASviE,IAAEpD,MAAM3J,KAAK,UAC5B,GAAKsvE,EAAL,CAIA,IAAMC,EAA8C,QAAjC,EAAGxiE,IAAEpD,MAAM3J,KAAK,yBAAiB,QAAI,EAClDiR,EAAsF,QAAhF,EAAGlE,IAAE,IAAD,OAAKwD,EAAE,gEAA+DnF,cAAM,QAAI,EAC1FokE,EAAoC,QAA7B,EAAGziE,IAAEpD,MAAM3J,KAAK,qBAAa,QAAI,EACxC4O,EAAkC,QAA5B,EAAG7B,IAAEpD,MAAM3J,KAAK,oBAAY,QAAI,EACtCyvE,EAAe1iE,IAAEpD,MAAM3J,KAAK,kBAC5B0vE,EAAc3iE,IAAEpD,MAAM3J,KAAK,gBAC3B2vE,EAAiB5iE,IAAEpD,MAAM3J,KAAK,oBAG9B86D,EAAW,IAAIt+C,SACrBs+C,EAASvjD,OAAO,SAAU,sBAC1BujD,EAASvjD,OAAO,WAAY+0D,SAASC,OACrCzR,EAASvjD,OAAO,SAAUg4D,EAAgBt+D,GAC1C6pD,EAASvjD,OAAO,SAAUM,KAAK2jD,UAAU8T,IAGzCviE,IAAE,IAAD,OAAKwD,EAAE,gBAAekxC,KAAKiuB,GAG5BlE,GAAAA,KACUc,SAASE,QAAS1R,GACvB/wC,MAAK,YAAc,IAAX/pB,EAAI,EAAJA,KAEC4vE,EAAQ9tE,SAASiD,cAAc,QACrC6qE,EAAM7sE,UAAY/C,EAId4vE,EAAMzkE,SAASC,OAASkkE,EAAOO,oBAC/B9iE,IAAE,IAAD,OAAKwD,EAAE,gBAAe7K,SAEvBqH,IAAE,IAAD,OAAKwD,EAAE,gBAAekxC,KAAKguB,GAIhC1iE,IAAE,IAAD,OAAKwD,EAAE,oBAAmBgH,OAAOvX,GAG9B4O,IACiBkhE,YAAYpuE,MAAK,SAACwO,GAAC,OAAKA,EAAEK,KAAOA,CAAE,IAAE8L,SAC7Cq1C,SAIb,GAAI8d,EAAS,CACT,IAAMnzD,EAAW0zC,aAAaruD,MAAK,SAACwO,GAAC,OAAKA,EAAEK,KAAOA,CAAE,IAAE8L,SACvDA,EAAS8P,gBAAe,WACpB9P,EAASwL,aAAY,EACzB,IAAG,EACP,MACI9jB,WAAWoR,OAAO,YAE1B,IAAE,OACK,SAACiH,GACJrP,IAAE,IAAD,OAAKwD,EAAE,gBAAekxC,KAAKkuB,EAChC,GAzDJ,CA0DJ,GACJ,YCxDA,SAAS,GAAS31D,GACd,OAAgB,OAARA,GACW,iBAARA,GACP,gBAAiBA,GACjBA,EAAIwM,cAAgBtlB,MAC5B,CACA,SAAS,GAAO+K,EAAS,CAAC,EAAG4D,EAAM,CAAC,GAChC3O,OAAO6mB,KAAKlY,GAAK1P,SAASmX,SACK,IAAhBrL,EAAOqL,GACdrL,EAAOqL,GAAOzH,EAAIyH,GACb,GAASzH,EAAIyH,KAClB,GAASrL,EAAOqL,KAChBpW,OAAO6mB,KAAKlY,EAAIyH,IAAMlM,OAAS,GAC/B,GAAOa,EAAOqL,GAAMzH,EAAIyH,GAC5B,GAER,CC1BAxV,SAASC,iBAAiB,oBAEtB,WACIgL,IAAE,8BAA8BgjE,QAAO,WACnC,IAAMC,EAAejjE,IAAE,gCACjBkjE,EAAcljE,IAAE,+BAChBmjE,EAAYnjE,IAAEpD,MAAMtC,MAE1B0F,IAAAA,KAAO,CACHsvD,IAAKiQ,SAASE,QACdjyD,KAAM,OACNy5C,OAAO,EACPh0D,KAAM,CACFqsE,OAAQ,0BACR8D,UAAWD,GAEfzD,QAAS,SAAUzsE,GACf,IAAMowE,EAAUrjE,IAAE,kCACb/M,GAAwB,IAAhBA,EAAKoL,OAGdglE,EAAQ3uB,KAAK,sCAAD,OAAuCuuB,EAAa3oE,MAAK,oBAAYrH,IAFjFowE,EAAQ3uB,KAAK,sCAAD,OAAuCwuB,EAAY5oE,MAAK,aAI5E,GAER,IAEA0F,IAAE,kCAAkCgjE,QAAO,WAAY,WAC7C1nE,EAAUsB,KAAKtB,QACfgoE,EAAiB1mE,KAAKtB,QAAQsB,KAAK2mE,eACnCC,EACFzuE,SAASe,cAAc,8BAA8BwF,QACjDvG,SAASe,cAAc,8BAA8BytE,eACvD3tE,MAEF0F,GAAoC,KAAzBgoE,EAAen5D,QACR,oBAAPs5D,IAA2C,mBAAdA,GAAGC,OACvC,IAAI9oD,SAAQ,SAACs9C,EAAS95C,GAClB,IAAMulD,EAAiBF,GAAGC,SAAS,GAAG3gD,IAAI,cAC1C0gD,GAAG,QAAD,OACUE,EAAc,SACtB,QACA,aACA,WACAH,EAAwB,OAASF,EAAe1tE,OAEpDsiE,GACJ,IAAGl7C,MAAK,WAEJ3nB,OAAOumC,SAAWxtB,EAAK9S,QAAQ8S,EAAKm1D,eAAep5D,KACvD,IAGA9U,OAAOumC,SAAWh/B,KAAKtB,QAAQsB,KAAK2mE,eAAep5D,MAG/D,GACJ,GACA,CAAE1U,SAAS,IC1DfJ,OAAOL,iBACH,QACA,WACI,GAAIgL,IAAE,mBAAmB3B,OAAS,GAAKrH,WAAWC,WAAWo+B,KAAK,SAAU,CACxE,IAAImG,EAAO,EACLp+B,EAAS4C,IAAE,kBAAkBgE,cAEnChE,IAAE3K,QAAQ+Q,GAAG,UAAU,WACnB,IAAMhN,EAAY4G,IAAE3K,QAAQ+D,YAC5B4G,IAAE,mBAAmBo0C,YAAY,SAAUh7C,EAAYoiC,GAEvD,IAAIt3B,EAAS,EAETA,EADA9K,EAAYoiC,EACH,EAEAp+B,EAAS,EAGtB4C,IAAE,oBAAoBU,KAAK,QAAS,QAAF,OAAUwD,EAAM,kBAElDs3B,EAAOpiC,CACX,IAEA4G,IAAE,oBAAoBoG,GAAG,6BAA6B,WAClDpG,IAAE,oBAAoBU,KAAK,QAAS,eAAF,OAAiBtD,EAAS,EAAC,iBACjE,IACA4C,IAAE,oBAAoBoG,GAAG,yBAAyB,WAC9CpG,IAAE,oBAAoBU,KAAK,QAAS,6BACxC,GACJ,CACJ,GACA,CAAEjL,SAAS,IFHf,MAAMmuE,GAAc,CAChB1rE,KAAM,CAAC,EACPlD,mBAAqB,EACrBqqB,sBAAwB,EACxBnkB,cAAe,CACXk2C,OAAS,EACTh1B,SAAU,IAEdtmB,cAAa,IACF,KAEXX,iBAAgB,IACL,GAEX2F,eAAc,IACH,KAEXwuC,YAAW,KACA,CACHu6B,YAAc,IAGtB7rE,cAAa,KACF,CACHoG,SAAU,GACV0lE,WAAY,GACZzsE,MAAO,CAAC,EACRK,eAAiB,EACjBsD,qBAAoB,IACT,KAInB+oE,gBAAe,KACJ,CAAC,GAEZC,WAAU,IACC,KAEXpoC,SAAU,CACNC,KAAM,GACN66B,KAAM,GACNC,SAAU,GACVjuD,KAAM,GACNu7D,OAAQ,GACRrvB,SAAU,GACV6hB,SAAU,GACV5hB,OAAQ,KAGhB,SAAS,KACL,MAAMqvB,EAA0B,oBAAbnvE,SAA2BA,SAAW,CAAC,EAE1D,OADA,GAAOmvE,EAAKN,IACLM,CACX,CAEA,MAAMC,GAAY,CACdpvE,SAAU6uE,GACVnkE,UAAW,CACP0B,UAAW,IAEfy6B,SAAU,CACNC,KAAM,GACN66B,KAAM,GACNC,SAAU,GACVjuD,KAAM,GACNu7D,OAAQ,GACRrvB,SAAU,GACV6hB,SAAU,GACV5hB,OAAQ,IAEZ5X,QAAS,CACLE,eAAiB,EACjBD,YAAc,EACdknC,KAAO,EACPC,OAAS,GAEbC,YAAa,WACT,OAAO1nE,IACX,EACA5H,mBAAqB,EACrBqqB,sBAAwB,EACxB5iB,iBAAgB,KACL,CACHI,iBAAgB,IACL,KAInB8kB,QAAU,EACVnrB,OAAS,EACT+tE,OAAQ,CAAC,EACTppE,aAAe,EACfsI,eAAiB,EACjBiwB,WAAU,KACC,CAAC,GAEZx5B,sBAAsBmJ,GACQ,oBAAflI,YACPkI,IACO,MAEJlI,WAAWkI,EAAU,GAEhCD,qBAAqBI,GACS,oBAAfrI,YAGXsI,aAAaD,EACjB,GAEJ,SAAS,KACL,MAAMhI,EAAwB,oBAAXnG,OAAyBA,OAAS,CAAC,EAEtD,OADA,GAAOmG,EAAK2oE,IACL3oE,CACX,CGrIA,SAAS,GAASyR,GACd,OAAgB,OAARA,GACW,iBAARA,GACP,gBAAiBA,GACjBA,EAAIwM,cAAgBtlB,MAC5B,CACA,SAAS,GAAO+K,EAAS,CAAC,EAAG4D,EAAM,CAAC,GAChC3O,OAAO6mB,KAAKlY,GAAK1P,SAASmX,SACK,IAAhBrL,EAAOqL,GACdrL,EAAOqL,GAAOzH,EAAIyH,GACb,GAASzH,EAAIyH,KAClB,GAASrL,EAAOqL,KAChBpW,OAAO6mB,KAAKlY,EAAIyH,IAAMlM,OAAS,GAC/B,GAAOa,EAAOqL,GAAMzH,EAAIyH,GAC5B,GAER,CAEA,MAAM,GAAc,CAChBrS,KAAM,CAAC,EACPlD,mBAAqB,EACrBqqB,sBAAwB,EACxBnkB,cAAe,CACXk2C,OAAS,EACTh1B,SAAU,IAEdtmB,cAAa,IACF,KAEXX,iBAAgB,IACL,GAEX2F,eAAc,IACH,KAEXwuC,YAAW,KACA,CACHu6B,YAAc,IAGtB7rE,cAAa,KACF,CACHoG,SAAU,GACV0lE,WAAY,GACZzsE,MAAO,CAAC,EACRK,eAAiB,EACjBsD,qBAAoB,IACT,KAInB+oE,gBAAe,KACJ,CAAC,GAEZC,WAAU,IACC,KAEXpoC,SAAU,CACNC,KAAM,GACN66B,KAAM,GACNC,SAAU,GACVjuD,KAAM,GACNu7D,OAAQ,GACRrvB,SAAU,GACV6hB,SAAU,GACV5hB,OAAQ,KAGhB,SAAS,KACL,MAAMqvB,EAA0B,oBAAbnvE,SAA2BA,SAAW,CAAC,EAE1D,OADA,GAAOmvE,EAAK,IACLA,CACX,CAEA,MAAM,GAAY,CACdnvE,SAAU,GACV0K,UAAW,CACP0B,UAAW,IAEfy6B,SAAU,CACNC,KAAM,GACN66B,KAAM,GACNC,SAAU,GACVjuD,KAAM,GACNu7D,OAAQ,GACRrvB,SAAU,GACV6hB,SAAU,GACV5hB,OAAQ,IAEZ5X,QAAS,CACLE,eAAiB,EACjBD,YAAc,EACdknC,KAAO,EACPC,OAAS,GAEbC,YAAa,WACT,OAAO1nE,IACX,EACA5H,mBAAqB,EACrBqqB,sBAAwB,EACxB5iB,iBAAgB,KACL,CACHI,iBAAgB,IACL,KAInB8kB,QAAU,EACVnrB,OAAS,EACT+tE,OAAQ,CAAC,EACTppE,aAAe,EACfsI,eAAiB,EACjBiwB,WAAU,KACC,CAAC,GAEZx5B,sBAAsBmJ,GACQ,oBAAflI,YACPkI,IACO,MAEJlI,WAAWkI,EAAU,GAEhCD,qBAAqBI,GACS,oBAAfrI,YAGXsI,aAAaD,EACjB,GAEJ,SAAS,KACL,MAAMhI,EAAwB,oBAAXnG,OAAyBA,OAAS,CAAC,EAEtD,OADA,GAAOmG,EAAK,IACLA,CACX,CCrHA,MAAMgpE,WAAalmE,MACjBmb,YAAYvG,GACW,iBAAVA,EACT42B,MAAM52B,IAEN42B,SAAU52B,GAAS,IAnBzB,SAAsBjG,GACpB,MAAMpB,EAAQoB,EAAIw3D,UAClBtwE,OAAO8uB,eAAehW,EAAK,YAAa,CACtC8V,IAAG,IACMlX,EAGTmX,IAAI7Y,GACF0B,EAAM44D,UAAYt6D,CACpB,GAGJ,CAQMu6D,CAAa9nE,MAEjB,EAIF,SAAS+nE,GAAUnzC,EAAM,IACvB,MAAMozC,EAAM,GAQZ,OAPApzC,EAAIp+B,SAAQsJ,IACN4B,MAAM4O,QAAQxQ,GAChBkoE,EAAI7jE,QAAQ4jE,GAAUjoE,IAEtBkoE,EAAI7jE,KAAKrE,EACX,IAEKkoE,CACT,CACA,SAASC,GAAYrzC,EAAKnuB,GACxB,OAAO/E,MAAMC,UAAU2L,OAAO1L,KAAKgzB,EAAKnuB,EAC1C,CA+BA,SAAS,GAAE1N,EAAUyiC,GACnB,MAAM/iC,EAAS,KACTN,EAAW,KACjB,IAAIy8B,EAAM,GAEV,IAAK4G,GAAWziC,aAAoB6uE,GAClC,OAAO7uE,EAGT,IAAKA,EACH,OAAO,IAAI6uE,GAAKhzC,GAGlB,GAAwB,iBAAb77B,EAAuB,CAChC,MAAM++C,EAAO/+C,EAASyT,OAEtB,GAAIsrC,EAAKr4C,QAAQ,MAAQ,GAAKq4C,EAAKr4C,QAAQ,MAAQ,EAAG,CACpD,IAAIyoE,EAAW,MACa,IAAxBpwB,EAAKr4C,QAAQ,SAAcyoE,EAAW,MACd,IAAxBpwB,EAAKr4C,QAAQ,SAAcyoE,EAAW,SACd,IAAxBpwB,EAAKr4C,QAAQ,QAAwC,IAAxBq4C,EAAKr4C,QAAQ,SAAcyoE,EAAW,MACxC,IAA3BpwB,EAAKr4C,QAAQ,YAAiByoE,EAAW,SACb,IAA5BpwB,EAAKr4C,QAAQ,aAAkByoE,EAAW,UAC9C,MAAMC,EAAahwE,EAASiD,cAAc8sE,GAC1CC,EAAW/uE,UAAY0+C,EAEvB,IAAK,IAAIz/C,EAAI,EAAGA,EAAI8vE,EAAWjB,WAAWzlE,OAAQpJ,GAAK,EACrDu8B,EAAIzwB,KAAKgkE,EAAWjB,WAAW7uE,GAEnC,MACEu8B,EA7CN,SAAa77B,EAAUyiC,GACrB,GAAwB,iBAAbziC,EACT,MAAO,CAACA,GAGV,MAAMiX,EAAI,GACJg4D,EAAMxsC,EAAQjjC,iBAAiBQ,GAErC,IAAK,IAAIV,EAAI,EAAGA,EAAI2vE,EAAIvmE,OAAQpJ,GAAK,EACnC2X,EAAE7L,KAAK6jE,EAAI3vE,IAGb,OAAO2X,CACT,CAgCYo4D,CAAIrvE,EAASyT,OAAQgvB,GAAWrjC,EAG1C,MAAO,GAAIY,EAASgb,UAAYhb,IAAaN,GAAUM,IAAaZ,EAClEy8B,EAAIzwB,KAAKpL,QACJ,GAAI2I,MAAM4O,QAAQvX,GAAW,CAClC,GAAIA,aAAoB6uE,GAAM,OAAO7uE,EACrC67B,EAAM77B,CACR,CAEA,OAAO,IAAI6uE,GAtEb,SAAqBhzC,GACnB,MAAMyzC,EAAc,GAEpB,IAAK,IAAIhwE,EAAI,EAAGA,EAAIu8B,EAAInzB,OAAQpJ,GAAK,GACE,IAAjCgwE,EAAY5oE,QAAQm1B,EAAIv8B,KAAYgwE,EAAYlkE,KAAKywB,EAAIv8B,IAG/D,OAAOgwE,CACT,CA8DkBC,CAAY1zC,GAC9B,CAEA,GAAEzqB,GAAKy9D,GAAKjmE,UA4xCZ,MAAM4mE,GAAY,gBAAgB9lE,MAAM,KAExC,SAASgjE,GAASnuE,GAiBhB,OAhBA,YAAyBqY,GACvB,QAAuB,IAAZA,EAAK,GAAoB,CAClC,IAAK,IAAItX,EAAI,EAAGA,EAAI2H,KAAKyB,OAAQpJ,GAAK,EAChCkwE,GAAU9oE,QAAQnI,GAAQ,IACxBA,KAAQ0I,KAAK3H,GAAI2H,KAAK3H,GAAGf,KAC3B,GAAE0I,KAAK3H,IAAI+N,QAAQ9O,IAKzB,OAAO0I,IACT,CAEA,OAAOA,KAAKwJ,GAAGlS,KAASqY,EAC1B,CAGF,CAEc81D,GAAS,SACVA,GAAS,QACRA,GAAS,SACPA,GAAS,WACRA,GAAS,YACZA,GAAS,SACPA,GAAS,WACRA,GAAS,YACXA,GAAS,UACTA,GAAS,UACNA,GAAS,aACTA,GAAS,aACXA,GAAS,WACNA,GAAS,cACTA,GAAS,cACXA,GAAS,YACRA,GAAS,aACRA,GAAS,cACXA,GAAS,YACRA,GAAS,aACZA,GAAS,UACTA,GAAS,UArBxB,MCh7CM+C,GAAU,CACdpjE,SDiIF,YAAqB2uD,GACnB,MAAM0U,EAAaV,GAAUhU,EAAQj4C,KAAItjB,GAAKA,EAAEiK,MAAM,QAItD,OAHAzC,KAAKxJ,SAAQsJ,IACXA,EAAGlF,UAAUkB,OAAO2sE,EAAW,IAE1BzoE,IACT,ECtIE+6B,YDwIF,YAAwBg5B,GACtB,MAAM0U,EAAaV,GAAUhU,EAAQj4C,KAAItjB,GAAKA,EAAEiK,MAAM,QAItD,OAHAzC,KAAKxJ,SAAQsJ,IACXA,EAAGlF,UAAUmB,UAAU0sE,EAAW,IAE7BzoE,IACT,EC7IEq/B,SDwJF,YAAqB00B,GACnB,MAAM0U,EAAaV,GAAUhU,EAAQj4C,KAAItjB,GAAKA,EAAEiK,MAAM,QACtD,OAAOwlE,GAAYjoE,MAAMF,GAChB2oE,EAAWn7D,QAAOjW,GAAayI,EAAGlF,UAAUC,SAASxD,KAAYoK,OAAS,IAChFA,OAAS,CACd,EC5JE+1C,YD8IF,YAAwBuc,GACtB,MAAM0U,EAAaV,GAAUhU,EAAQj4C,KAAItjB,GAAKA,EAAEiK,MAAM,QACtDzC,KAAKxJ,SAAQsJ,IACX2oE,EAAWjyE,SAAQa,IACjByI,EAAGlF,UAAU2Q,OAAOlU,EAAU,GAC9B,GAEN,ECpJEyM,KD6JF,SAAc4kE,EAAOn7D,GACnB,GAAyB,IAArBnN,UAAUqB,QAAiC,iBAAVinE,EAEnC,OAAI1oE,KAAK,GAAWA,KAAK,GAAGnC,aAAa6qE,QACzC,EAIF,IAAK,IAAIrwE,EAAI,EAAGA,EAAI2H,KAAKyB,OAAQpJ,GAAK,EACpC,GAAyB,IAArB+H,UAAUqB,OAEZzB,KAAK3H,GAAGyC,aAAa4tE,EAAOn7D,QAG5B,IAAK,MAAMqsB,KAAY8uC,EACrB1oE,KAAK3H,GAAGuhC,GAAY8uC,EAAM9uC,GAC1B55B,KAAK3H,GAAGyC,aAAa8+B,EAAU8uC,EAAM9uC,IAK3C,OAAO55B,IACT,EClLEk6B,WDoLF,SAAoBp2B,GAClB,IAAK,IAAIzL,EAAI,EAAGA,EAAI2H,KAAKyB,OAAQpJ,GAAK,EACpC2H,KAAK3H,GAAG8pB,gBAAgBre,GAG1B,OAAO9D,IACT,ECzLE2I,UD6TF,SAAmBA,GACjB,IAAK,IAAItQ,EAAI,EAAGA,EAAI2H,KAAKyB,OAAQpJ,GAAK,EACpC2H,KAAK3H,GAAGoC,MAAMkO,UAAYA,EAG5B,OAAO3I,IACT,EClUEgoB,WDoUF,SAAoBhrB,GAClB,IAAK,IAAI3E,EAAI,EAAGA,EAAI2H,KAAKyB,OAAQpJ,GAAK,EACpC2H,KAAK3H,GAAGoC,MAAMkhB,mBAAyC,iBAAb3e,EAAwB,GAAGA,MAAeA,EAGtF,OAAOgD,IACT,ECzUEwJ,GD2UF,YAAemG,GACb,IAAKklB,EAAW8zC,EAAgBx5D,EAAUwjB,GAAWhjB,EASrD,SAASi5D,EAAgBrvE,GACvB,MAAM+I,EAAS/I,EAAE+I,OACjB,IAAKA,EAAQ,OACb,MAAMumE,EAAYtvE,EAAE+I,OAAOwmE,eAAiB,GAM5C,GAJID,EAAUppE,QAAQlG,GAAK,GACzBsvE,EAAUhI,QAAQtnE,GAGhB,GAAE+I,GAAQuB,GAAG8kE,GAAiBx5D,EAASU,MAAMvN,EAAQumE,OAAgB,CACvE,MAAM7lC,EAAU,GAAE1gC,GAAQ0gC,UAE1B,IAAK,IAAIjhB,EAAI,EAAGA,EAAIihB,EAAQvhC,OAAQsgB,GAAK,EACnC,GAAEihB,EAAQjhB,IAAIle,GAAG8kE,IAAiBx5D,EAASU,MAAMmzB,EAAQjhB,GAAI8mD,EAErE,CACF,CAEA,SAASl4D,EAAYpX,GACnB,MAAMsvE,EAAYtvE,GAAKA,EAAE+I,QAAS/I,EAAE+I,OAAOwmE,eAAsB,GAE7DD,EAAUppE,QAAQlG,GAAK,GACzBsvE,EAAUhI,QAAQtnE,GAGpB4V,EAASU,MAAM7P,KAAM6oE,EACvB,CAjCuB,mBAAZl5D,EAAK,MACbklB,EAAW1lB,EAAUwjB,GAAWhjB,EACjCg5D,OAAiB7xE,GAGd67B,IAASA,GAAU,GA8BxB,MAAMvjB,EAASylB,EAAUpyB,MAAM,KAC/B,IAAIyvC,EAEJ,IAAK,IAAI75C,EAAI,EAAGA,EAAI2H,KAAKyB,OAAQpJ,GAAK,EAAG,CACvC,MAAMyH,EAAKE,KAAK3H,GAEhB,GAAKswE,EAaH,IAAKz2B,EAAI,EAAGA,EAAI9iC,EAAO3N,OAAQywC,GAAK,EAAG,CACrC,MAAMl0C,EAAQoR,EAAO8iC,GAChBpyC,EAAGipE,oBAAmBjpE,EAAGipE,kBAAoB,CAAC,GAC9CjpE,EAAGipE,kBAAkB/qE,KAAQ8B,EAAGipE,kBAAkB/qE,GAAS,IAChE8B,EAAGipE,kBAAkB/qE,GAAOmG,KAAK,CAC/BgL,WACA65D,cAAeJ,IAEjB9oE,EAAG1H,iBAAiB4F,EAAO4qE,EAAiBj2C,EAC9C,MArBA,IAAKuf,EAAI,EAAGA,EAAI9iC,EAAO3N,OAAQywC,GAAK,EAAG,CACrC,MAAMl0C,EAAQoR,EAAO8iC,GAChBpyC,EAAGmpE,gBAAenpE,EAAGmpE,cAAgB,CAAC,GACtCnpE,EAAGmpE,cAAcjrE,KAAQ8B,EAAGmpE,cAAcjrE,GAAS,IACxD8B,EAAGmpE,cAAcjrE,GAAOmG,KAAK,CAC3BgL,WACA65D,cAAer4D,IAEjB7Q,EAAG1H,iBAAiB4F,EAAO2S,EAAagiB,EAC1C,CAcJ,CAEA,OAAO3yB,IACT,ECjZEiK,IDmZF,YAAgB0F,GACd,IAAKklB,EAAW8zC,EAAgBx5D,EAAUwjB,GAAWhjB,EAE9B,mBAAZA,EAAK,MACbklB,EAAW1lB,EAAUwjB,GAAWhjB,EACjCg5D,OAAiB7xE,GAGd67B,IAASA,GAAU,GACxB,MAAMvjB,EAASylB,EAAUpyB,MAAM,KAE/B,IAAK,IAAIpK,EAAI,EAAGA,EAAI+W,EAAO3N,OAAQpJ,GAAK,EAAG,CACzC,MAAM2F,EAAQoR,EAAO/W,GAErB,IAAK,IAAI65C,EAAI,EAAGA,EAAIlyC,KAAKyB,OAAQywC,GAAK,EAAG,CACvC,MAAMpyC,EAAKE,KAAKkyC,GAChB,IAAI6gB,EAQJ,IANK4V,GAAkB7oE,EAAGmpE,cACxBlW,EAAWjzD,EAAGmpE,cAAcjrE,GACnB2qE,GAAkB7oE,EAAGipE,oBAC9BhW,EAAWjzD,EAAGipE,kBAAkB/qE,IAG9B+0D,GAAYA,EAAStxD,OACvB,IAAK,IAAIsgB,EAAIgxC,EAAStxD,OAAS,EAAGsgB,GAAK,EAAGA,GAAK,EAAG,CAChD,MAAMmU,EAAU68B,EAAShxC,GAErB5S,GAAY+mB,EAAQ/mB,WAAaA,GAG1BA,GAAY+mB,EAAQ/mB,UAAY+mB,EAAQ/mB,SAAS+5D,WAAahzC,EAAQ/mB,SAAS+5D,YAAc/5D,GAFtGrP,EAAG2iB,oBAAoBzkB,EAAOk4B,EAAQ8yC,cAAer2C,GACrDogC,EAAS/oD,OAAO+X,EAAG,IAIT5S,IACVrP,EAAG2iB,oBAAoBzkB,EAAOk4B,EAAQ8yC,cAAer2C,GACrDogC,EAAS/oD,OAAO+X,EAAG,GAEvB,CAEJ,CACF,CAEA,OAAO/hB,IACT,EC9bEoG,QDsdF,YAAoBuJ,GAClB,MAAMlX,EAAS,KACT2W,EAASO,EAAK,GAAGlN,MAAM,KACvBomE,EAAYl5D,EAAK,GAEvB,IAAK,IAAItX,EAAI,EAAGA,EAAI+W,EAAO3N,OAAQpJ,GAAK,EAAG,CACzC,MAAM2F,EAAQoR,EAAO/W,GAErB,IAAK,IAAI65C,EAAI,EAAGA,EAAIlyC,KAAKyB,OAAQywC,GAAK,EAAG,CACvC,MAAMpyC,EAAKE,KAAKkyC,GAEhB,GAAIz5C,EAAOivE,YAAa,CACtB,MAAMyB,EAAM,IAAI1wE,EAAOivE,YAAY1pE,EAAO,CACxCorE,OAAQP,EACRjgB,SAAS,EACTC,YAAY,IAEd/oD,EAAGgpE,cAAgBn5D,EAAKrC,QAAO,CAACjX,EAAMgzE,IAAcA,EAAY,IAChEvpE,EAAG4Y,cAAcywD,GACjBrpE,EAAGgpE,cAAgB,UACZhpE,EAAGgpE,aACZ,CACF,CACF,CAEA,OAAO9oE,IACT,EC/eEspE,cDifF,SAAuB7iE,GACrB,MAAM8iE,EAAMvpE,KAYZ,OAJIyG,GACF8iE,EAAI//D,GAAG,iBAPT,SAASggE,EAAajwE,GAChBA,EAAE+I,SAAWtC,OACjByG,EAAS7E,KAAK5B,KAAMzG,GACpBgwE,EAAIt/D,IAAI,gBAAiBu/D,GAC3B,IAMOxpE,IACT,EC9fEkH,WD8hBF,SAAoBuiE,GAClB,GAAIzpE,KAAKyB,OAAS,EAAG,CACnB,GAAIgoE,EAAgB,CAClB,MAAMC,EAAS1pE,KAAK0pE,SACpB,OAAO1pE,KAAK,GAAGvE,YAAcoR,WAAW68D,EAAOzpE,iBAAiB,iBAAmB4M,WAAW68D,EAAOzpE,iBAAiB,eACxH,CAEA,OAAOD,KAAK,GAAGvE,WACjB,CAEA,OAAO,IACT,ECxiBE2L,YDwjBF,SAAqBqiE,GACnB,GAAIzpE,KAAKyB,OAAS,EAAG,CACnB,GAAIgoE,EAAgB,CAClB,MAAMC,EAAS1pE,KAAK0pE,SACpB,OAAO1pE,KAAK,GAAGgU,aAAenH,WAAW68D,EAAOzpE,iBAAiB,eAAiB4M,WAAW68D,EAAOzpE,iBAAiB,iBACvH,CAEA,OAAOD,KAAK,GAAGgU,YACjB,CAEA,OAAO,IACT,EClkBE01D,ODmnBF,WACE,MAAMjxE,EAAS,KACf,OAAIuH,KAAK,GAAWvH,EAAOoH,iBAAiBG,KAAK,GAAI,MAC9C,CAAC,CACV,ECtnBEsH,ODmkBF,WACE,GAAItH,KAAKyB,OAAS,EAAG,CACnB,MAAMhJ,EAAS,KACTN,EAAW,KACX2H,EAAKE,KAAK,GACV2pE,EAAM7pE,EAAGyvB,wBACTj0B,EAAOnD,EAASmD,KAChBsuE,EAAY9pE,EAAG8pE,WAAatuE,EAAKsuE,WAAa,EAC9CC,EAAa/pE,EAAG+pE,YAAcvuE,EAAKuuE,YAAc,EACjDrtE,EAAYsD,IAAOrH,EAASA,EAAOkE,QAAUmD,EAAGtD,UAChD6L,EAAavI,IAAOrH,EAASA,EAAOqxE,QAAUhqE,EAAGuI,WACvD,MAAO,CACL9C,IAAKokE,EAAIpkE,IAAM/I,EAAYotE,EAC3BpkE,KAAMmkE,EAAInkE,KAAO6C,EAAawhE,EAElC,CAEA,OAAO,IACT,ECplBEplE,IDunBF,SAAaxN,EAAOsW,GAClB,MAAM9U,EAAS,KACf,IAAIJ,EAEJ,GAAyB,IAArB+H,UAAUqB,OAAc,CAC1B,GAAqB,iBAAVxK,EAGJ,CAEL,IAAKoB,EAAI,EAAGA,EAAI2H,KAAKyB,OAAQpJ,GAAK,EAChC,IAAK,MAAMuH,KAAQ3I,EACjB+I,KAAK3H,GAAGoC,MAAMmF,GAAQ3I,EAAM2I,GAIhC,OAAOI,IACT,CAVE,GAAIA,KAAK,GAAI,OAAOvH,EAAOoH,iBAAiBG,KAAK,GAAI,MAAMC,iBAAiBhJ,EAWhF,CAEA,GAAyB,IAArBmJ,UAAUqB,QAAiC,iBAAVxK,EAAoB,CAEvD,IAAKoB,EAAI,EAAGA,EAAI2H,KAAKyB,OAAQpJ,GAAK,EAChC2H,KAAK3H,GAAGoC,MAAMxD,GAASsW,EAGzB,OAAOvN,IACT,CAEA,OAAOA,IACT,ECppBE6J,KDspBF,SAAcpD,GACZ,OAAKA,GACLzG,KAAKxJ,SAAQ,CAACsJ,EAAIwM,KAChB7F,EAASoJ,MAAM/P,EAAI,CAACA,EAAIwM,GAAO,IAE1BtM,MAJeA,IAKxB,EC3pBE83C,KDkqBF,SAAcA,GACZ,QAAoB,IAATA,EACT,OAAO93C,KAAK,GAAKA,KAAK,GAAG5G,UAAY,KAGvC,IAAK,IAAIf,EAAI,EAAGA,EAAI2H,KAAKyB,OAAQpJ,GAAK,EACpC2H,KAAK3H,GAAGe,UAAY0+C,EAGtB,OAAO93C,IACT,EC3qBEs3B,KD6qBF,SAAcA,GACZ,QAAoB,IAATA,EACT,OAAOt3B,KAAK,GAAKA,KAAK,GAAG2L,YAAYa,OAAS,KAGhD,IAAK,IAAInU,EAAI,EAAGA,EAAI2H,KAAKyB,OAAQpJ,GAAK,EACpC2H,KAAK3H,GAAGsT,YAAc2rB,EAGxB,OAAOt3B,IACT,ECtrBE6D,GDwrBF,SAAY9K,GACV,MAAMN,EAAS,KACTN,EAAW,KACX2H,EAAKE,KAAK,GAChB,IAAI+pE,EACA1xE,EACJ,IAAKyH,QAA0B,IAAb/G,EAA0B,OAAO,EAEnD,GAAwB,iBAAbA,EAAuB,CAChC,GAAI+G,EAAG8O,QAAS,OAAO9O,EAAG8O,QAAQ7V,GAClC,GAAI+G,EAAG40B,sBAAuB,OAAO50B,EAAG40B,sBAAsB37B,GAC9D,GAAI+G,EAAG20B,kBAAmB,OAAO30B,EAAG20B,kBAAkB17B,GAGtD,IAFAgxE,EAAc,GAAEhxE,GAEXV,EAAI,EAAGA,EAAI0xE,EAAYtoE,OAAQpJ,GAAK,EACvC,GAAI0xE,EAAY1xE,KAAOyH,EAAI,OAAO,EAGpC,OAAO,CACT,CAEA,GAAI/G,IAAaZ,EACf,OAAO2H,IAAO3H,EAGhB,GAAIY,IAAaN,EACf,OAAOqH,IAAOrH,EAGhB,GAAIM,EAASgb,UAAYhb,aAAoB6uE,GAAM,CAGjD,IAFAmC,EAAchxE,EAASgb,SAAW,CAAChb,GAAYA,EAE1CV,EAAI,EAAGA,EAAI0xE,EAAYtoE,OAAQpJ,GAAK,EACvC,GAAI0xE,EAAY1xE,KAAOyH,EAAI,OAAO,EAGpC,OAAO,CACT,CAEA,OAAO,CACT,EC/tBEwM,MDiuBF,WACE,IACIjU,EADAyhB,EAAQ9Z,KAAK,GAGjB,GAAI8Z,EAAO,CAGT,IAFAzhB,EAAI,EAEuC,QAAnCyhB,EAAQA,EAAMkwD,kBACG,IAAnBlwD,EAAM/F,WAAgB1b,GAAK,GAGjC,OAAOA,CACT,CAGF,EC/uBE4lC,GDivBF,SAAY3xB,GACV,QAAqB,IAAVA,EAAuB,OAAOtM,KACzC,MAAMyB,EAASzB,KAAKyB,OAEpB,GAAI6K,EAAQ7K,EAAS,EACnB,OAAO,GAAE,IAGX,GAAI6K,EAAQ,EAAG,CACb,MAAM29D,EAAcxoE,EAAS6K,EAC7B,OAA4B,GAAxB29D,EAAc,EAAY,GACrB,CAACjqE,KAAKiqE,IACjB,CAEA,OAAO,GAAE,CAACjqE,KAAKsM,IACjB,EC/vBEsB,ODiwBF,YAAmBs8D,GACjB,IAAIC,EACJ,MAAMhyE,EAAW,KAEjB,IAAK,IAAI4pB,EAAI,EAAGA,EAAImoD,EAAIzoE,OAAQsgB,GAAK,EAAG,CACtCooD,EAAWD,EAAInoD,GAEf,IAAK,IAAI1pB,EAAI,EAAGA,EAAI2H,KAAKyB,OAAQpJ,GAAK,EACpC,GAAwB,iBAAb8xE,EAAuB,CAChC,MAAMC,EAAUjyE,EAASiD,cAAc,OAGvC,IAFAgvE,EAAQhxE,UAAY+wE,EAEbC,EAAQC,YACbrqE,KAAK3H,GAAGkD,YAAY6uE,EAAQC,WAEhC,MAAO,GAAIF,aAAoBvC,GAC7B,IAAK,IAAI11B,EAAI,EAAGA,EAAIi4B,EAAS1oE,OAAQywC,GAAK,EACxClyC,KAAK3H,GAAGkD,YAAY4uE,EAASj4B,SAG/BlyC,KAAK3H,GAAGkD,YAAY4uE,EAG1B,CAEA,OAAOnqE,IACT,EC1xBEgzC,QDiyBF,SAAiBm3B,GACf,MAAMhyE,EAAW,KACjB,IAAIE,EACA65C,EAEJ,IAAK75C,EAAI,EAAGA,EAAI2H,KAAKyB,OAAQpJ,GAAK,EAChC,GAAwB,iBAAb8xE,EAAuB,CAChC,MAAMC,EAAUjyE,EAASiD,cAAc,OAGvC,IAFAgvE,EAAQhxE,UAAY+wE,EAEfj4B,EAAIk4B,EAAQlD,WAAWzlE,OAAS,EAAGywC,GAAK,EAAGA,GAAK,EACnDlyC,KAAK3H,GAAG8+B,aAAaizC,EAAQlD,WAAWh1B,GAAIlyC,KAAK3H,GAAG6uE,WAAW,GAEnE,MAAO,GAAIiD,aAAoBvC,GAC7B,IAAK11B,EAAI,EAAGA,EAAIi4B,EAAS1oE,OAAQywC,GAAK,EACpClyC,KAAK3H,GAAG8+B,aAAagzC,EAASj4B,GAAIlyC,KAAK3H,GAAG6uE,WAAW,SAGvDlnE,KAAK3H,GAAG8+B,aAAagzC,EAAUnqE,KAAK3H,GAAG6uE,WAAW,IAItD,OAAOlnE,IACT,ECvzBE44B,KD01BF,SAAc7/B,GACZ,OAAIiH,KAAKyB,OAAS,EACZ1I,EACEiH,KAAK,GAAGsqE,oBAAsB,GAAEtqE,KAAK,GAAGsqE,oBAAoBzmE,GAAG9K,GAC1D,GAAE,CAACiH,KAAK,GAAGsqE,qBAGb,GAAE,IAGPtqE,KAAK,GAAGsqE,mBAA2B,GAAE,CAACtqE,KAAK,GAAGsqE,qBAC3C,GAAE,IAGJ,GAAE,GACX,ECx2BEC,QD02BF,SAAiBxxE,GACf,MAAMyxE,EAAU,GAChB,IAAI1qE,EAAKE,KAAK,GACd,IAAKF,EAAI,OAAO,GAAE,IAElB,KAAOA,EAAGwqE,oBAAoB,CAC5B,MAAM1xC,EAAO94B,EAAGwqE,mBAEZvxE,EACE,GAAE6/B,GAAM/0B,GAAG9K,IAAWyxE,EAAQrmE,KAAKy0B,GAClC4xC,EAAQrmE,KAAKy0B,GAEpB94B,EAAK84B,CACP,CAEA,OAAO,GAAE4xC,EACX,ECz3BE5rC,KD23BF,SAAc7lC,GACZ,GAAIiH,KAAKyB,OAAS,EAAG,CACnB,MAAM3B,EAAKE,KAAK,GAEhB,OAAIjH,EACE+G,EAAG2qE,wBAA0B,GAAE3qE,EAAG2qE,wBAAwB5mE,GAAG9K,GACxD,GAAE,CAAC+G,EAAG2qE,yBAGR,GAAE,IAGP3qE,EAAG2qE,uBAA+B,GAAE,CAAC3qE,EAAG2qE,yBACrC,GAAE,GACX,CAEA,OAAO,GAAE,GACX,EC34BEC,QD64BF,SAAiB3xE,GACf,MAAM4xE,EAAU,GAChB,IAAI7qE,EAAKE,KAAK,GACd,IAAKF,EAAI,OAAO,GAAE,IAElB,KAAOA,EAAG2qE,wBAAwB,CAChC,MAAM7rC,EAAO9+B,EAAG2qE,uBAEZ1xE,EACE,GAAE6lC,GAAM/6B,GAAG9K,IAAW4xE,EAAQxmE,KAAKy6B,GAClC+rC,EAAQxmE,KAAKy6B,GAEpB9+B,EAAK8+B,CACP,CAEA,OAAO,GAAE+rC,EACX,EC55BEvrC,ODk6BF,SAAgBrmC,GACd,MAAMiqC,EAAU,GAEhB,IAAK,IAAI3qC,EAAI,EAAGA,EAAI2H,KAAKyB,OAAQpJ,GAAK,EACT,OAAvB2H,KAAK3H,GAAG0J,aACNhJ,EACE,GAAEiH,KAAK3H,GAAG0J,YAAY8B,GAAG9K,IAAWiqC,EAAQ7+B,KAAKnE,KAAK3H,GAAG0J,YAE7DihC,EAAQ7+B,KAAKnE,KAAK3H,GAAG0J,aAK3B,OAAO,GAAEihC,EACX,EC/6BEA,QDi7BF,SAAiBjqC,GACf,MAAMiqC,EAAU,GAEhB,IAAK,IAAI3qC,EAAI,EAAGA,EAAI2H,KAAKyB,OAAQpJ,GAAK,EAAG,CACvC,IAAI+mC,EAASp/B,KAAK3H,GAAG0J,WAErB,KAAOq9B,GACDrmC,EACE,GAAEqmC,GAAQv7B,GAAG9K,IAAWiqC,EAAQ7+B,KAAKi7B,GAEzC4D,EAAQ7+B,KAAKi7B,GAGfA,EAASA,EAAOr9B,UAEpB,CAEA,OAAO,GAAEihC,EACX,ECl8BErO,QDo8BF,SAAiB57B,GACf,IAAI47B,EAAU30B,KAEd,YAAwB,IAAbjH,EACF,GAAE,KAGN47B,EAAQ9wB,GAAG9K,KACd47B,EAAUA,EAAQqO,QAAQjqC,GAAUklC,GAAG,IAGlCtJ,EACT,EC/8BE58B,KDi9BF,SAAcgB,GACZ,MAAM6xE,EAAgB,GAEtB,IAAK,IAAIvyE,EAAI,EAAGA,EAAI2H,KAAKyB,OAAQpJ,GAAK,EAAG,CACvC,MAAMwyE,EAAQ7qE,KAAK3H,GAAGE,iBAAiBQ,GAEvC,IAAK,IAAIm5C,EAAI,EAAGA,EAAI24B,EAAMppE,OAAQywC,GAAK,EACrC04B,EAAczmE,KAAK0mE,EAAM34B,GAE7B,CAEA,OAAO,GAAE04B,EACX,EC59BEppE,SD89BF,SAAkBzI,GAChB,MAAMyI,EAAW,GAEjB,IAAK,IAAInJ,EAAI,EAAGA,EAAI2H,KAAKyB,OAAQpJ,GAAK,EAAG,CACvC,MAAM6uE,EAAalnE,KAAK3H,GAAGmJ,SAE3B,IAAK,IAAI0wC,EAAI,EAAGA,EAAIg1B,EAAWzlE,OAAQywC,GAAK,EACrCn5C,IAAY,GAAEmuE,EAAWh1B,IAAIruC,GAAG9K,IACnCyI,EAAS2C,KAAK+iE,EAAWh1B,GAG/B,CAEA,OAAO,GAAE1wC,EACX,EC3+BE8L,OD6oBF,SAAgB7G,GAEd,OAAO,GADQwhE,GAAYjoE,KAAMyG,GAEnC,EC/oBE1K,OD4+BF,WACE,IAAK,IAAI1D,EAAI,EAAGA,EAAI2H,KAAKyB,OAAQpJ,GAAK,EAChC2H,KAAK3H,GAAG0J,YAAY/B,KAAK3H,GAAG0J,WAAWpG,YAAYqE,KAAK3H,IAG9D,OAAO2H,IACT,GCh/BAzI,OAAO6mB,KAAKoqD,IAAShyE,SAAQ4a,IAC3B7Z,OAAO8uB,eAAe,MAAMjV,EAAY,CACtC7D,MAAOi7D,GAAQp3D,GACfw9C,UAAU,GACV,IAEJ,YC5BA,SAAS,GAASnoD,EAAUmlB,EAAQ,GAClC,OAAOrtB,WAAWkI,EAAUmlB,EAC9B,CAEA,SAAS,KACP,OAAOhyB,KAAKy3B,KACd,CAqBA,SAAS,GAAavxB,EAAIgrE,EAAO,KAC/B,MAAMryE,EAAS,KACf,IAAIsyE,EACAC,EACAC,EACJ,MAAMC,EAxBR,SAA0BprE,GACxB,MAAMrH,EAAS,KACf,IAAIgC,EAcJ,OAZIhC,EAAOoH,mBACTpF,EAAQhC,EAAOoH,iBAAiBC,EAAI,QAGjCrF,GAASqF,EAAGQ,eACf7F,EAAQqF,EAAGQ,cAGR7F,IACHA,EAAQqF,EAAGrF,OAGNA,CACT,CAOmB,CAAiBqF,GA+BlC,OA7BIrH,EAAO0yE,iBACTH,EAAeE,EAASviE,WAAauiE,EAASE,gBAE1CJ,EAAavoE,MAAM,KAAKhB,OAAS,IACnCupE,EAAeA,EAAavoE,MAAM,MAAMqZ,KAAI9L,GAAKA,EAAE7R,QAAQ,IAAK,OAAMuE,KAAK,OAK7EuoE,EAAkB,IAAIxyE,EAAO0yE,gBAAiC,SAAjBH,EAA0B,GAAKA,KAE5EC,EAAkBC,EAASG,cAAgBH,EAASI,YAAcJ,EAASK,aAAeL,EAASM,aAAeN,EAASviE,WAAauiE,EAASjrE,iBAAiB,aAAa9B,QAAQ,aAAc,sBACrM4sE,EAASE,EAAgBp9D,WAAWpL,MAAM,MAG/B,MAATqoE,IAE0BE,EAAxBvyE,EAAO0yE,gBAAgCF,EAAgBQ,IAChC,KAAlBV,EAAOtpE,OAA8BoL,WAAWk+D,EAAO,KAC5Cl+D,WAAWk+D,EAAO,KAG3B,MAATD,IAE0BE,EAAxBvyE,EAAO0yE,gBAAgCF,EAAgBS,IAChC,KAAlBX,EAAOtpE,OAA8BoL,WAAWk+D,EAAO,KAC5Cl+D,WAAWk+D,EAAO,KAGjCC,GAAgB,CACzB,CAEA,SAAS,GAASjtD,GAChB,MAAoB,iBAANA,GAAwB,OAANA,GAAcA,EAAElB,aAAkE,WAAnDtlB,OAAOoK,UAAUkM,SAASjM,KAAKmc,GAAG3c,MAAM,GAAI,EAC7G,CAWA,SAAS,MAAUuO,GACjB,MAAM4a,EAAKhzB,OAAOoY,EAAK,IACjBg8D,EAAW,CAAC,YAAa,cAAe,aAE9C,IAAK,IAAItzE,EAAI,EAAGA,EAAIsX,EAAKlO,OAAQpJ,GAAK,EAAG,CACvC,MAAMuzE,EAAaj8D,EAAKtX,GAExB,GAAIuzE,UAhBQC,EAgBmDD,IAd3C,oBAAXnzE,aAAwD,IAAvBA,OAAOuY,YAC1C66D,aAAgB76D,YAGlB66D,IAA2B,IAAlBA,EAAK93D,UAAoC,KAAlB83D,EAAK93D,YAUkC,CAC1E,MAAM+3D,EAAYv0E,OAAO6mB,KAAK7mB,OAAOq0E,IAAat+D,QAAOK,GAAOg+D,EAASlsE,QAAQkO,GAAO,IAExF,IAAK,IAAIo+D,EAAY,EAAGxyD,EAAMuyD,EAAUrqE,OAAQsqE,EAAYxyD,EAAKwyD,GAAa,EAAG,CAC/E,MAAMC,EAAUF,EAAUC,GACpBhM,EAAOxoE,OAAO00E,yBAAyBL,EAAYI,QAE5Cl1E,IAATipE,GAAsBA,EAAKxqC,aACzB,GAAShL,EAAGyhD,KAAa,GAASJ,EAAWI,IAC3CJ,EAAWI,GAASE,WACtB3hD,EAAGyhD,GAAWJ,EAAWI,GAEzB,GAAOzhD,EAAGyhD,GAAUJ,EAAWI,KAEvB,GAASzhD,EAAGyhD,KAAa,GAASJ,EAAWI,KACvDzhD,EAAGyhD,GAAW,CAAC,EAEXJ,EAAWI,GAASE,WACtB3hD,EAAGyhD,GAAWJ,EAAWI,GAEzB,GAAOzhD,EAAGyhD,GAAUJ,EAAWI,KAGjCzhD,EAAGyhD,GAAWJ,EAAWI,GAG/B,CACF,CACF,CA5CF,IAAgBH,EA8Cd,OAAOthD,CACT,CAEA,SAAS,GAAezqB,EAAIqsE,EAASC,GACnCtsE,EAAGrF,MAAMM,YAAYoxE,EAASC,EAChC,CAEA,SAASC,IAAqB,OAC5BnH,EAAM,eACNoH,EAAc,KACdC,IAEA,MAAM9zE,EAAS,KACT+zE,GAAiBtH,EAAOuH,UAC9B,IACIp8C,EADAya,EAAY,KAEhB,MAAM9tC,EAAWkoE,EAAO13D,OAAO1G,MAC/Bo+D,EAAOwH,UAAUjyE,MAAMkyE,eAAiB,OACxCl0E,EAAO+N,qBAAqB0+D,EAAO0H,gBACnC,MAAMrhC,EAAM+gC,EAAiBE,EAAgB,OAAS,OAEhDK,EAAe,CAACvyE,EAASgI,IACd,SAARipC,GAAkBjxC,GAAWgI,GAAkB,SAARipC,GAAkBjxC,GAAWgI,EAGvEtD,EAAU,KACdqxB,GAAO,IAAIz2B,MAAOE,UAEA,OAAdgxC,IACFA,EAAYza,GAGd,MAAM5yB,EAAWE,KAAKkD,IAAIlD,KAAKkK,KAAKwoB,EAAOya,GAAa9tC,EAAU,GAAI,GAChE8vE,EAAe,GAAMnvE,KAAKovE,IAAItvE,EAAWE,KAAKqvE,IAAM,EAC1D,IAAIC,EAAkBT,EAAgBM,GAAgBR,EAAiBE,GAUvE,GARIK,EAAaI,EAAiBX,KAChCW,EAAkBX,GAGpBpH,EAAOwH,UAAU5vE,SAAS,CACxB,CAACyvE,GAAOU,IAGNJ,EAAaI,EAAiBX,GAUhC,OATApH,EAAOwH,UAAUjyE,MAAMY,SAAW,SAClC6pE,EAAOwH,UAAUjyE,MAAMkyE,eAAiB,GACxCpuE,YAAW,KACT2mE,EAAOwH,UAAUjyE,MAAMY,SAAW,GAClC6pE,EAAOwH,UAAU5vE,SAAS,CACxB,CAACyvE,GAAOU,GACR,SAEJx0E,EAAO+N,qBAAqB0+D,EAAO0H,gBAIrC1H,EAAO0H,eAAiBn0E,EAAO6E,sBAAsB0B,EAAQ,EAG/DA,GACF,CCjMA,IAAIkuE,GCCAC,GCDA,GF+BJ,SAASC,KAKP,OAJKF,KACHA,GA/BJ,WACE,MAAMz0E,EAAS,KACTN,EAAW,KACjB,MAAO,CACLk1E,aAAcl1E,EAASsE,iBAAmB,mBAAoBtE,EAASsE,gBAAgBhC,MACvF6yE,SAAU,iBAAkB70E,GAAUA,EAAO80E,eAAiBp1E,aAAoBM,EAAO80E,eACzFC,gBAAiB,WACf,IAAI/6C,GAAkB,EAEtB,IACE,MAAMjb,EAAOjgB,OAAO8uB,eAAe,CAAC,EAAG,UAAW,CAEhDF,MACEsM,GAAkB,CACpB,IAGFh6B,EAAOL,iBAAiB,sBAAuB,KAAMof,EAEvD,CADE,MAAOje,GACT,CAEA,OAAOk5B,CACT,CAhBiB,GAiBjBg7C,SACS,mBAAoBh1E,EAGjC,CAIci1E,IAGLR,EACT,CCUA,SAASS,GAAUC,EAAY,CAAC,GAK9B,OAJKT,KACHA,GA9CJ,UAAoB,UAClB5oE,GACE,CAAC,GACH,MAAM2oE,EAAUE,KACV30E,EAAS,KACTqK,EAAWrK,EAAOoK,UAAUC,SAC5B+qE,EAAKtpE,GAAa9L,EAAOoK,UAAU0B,UACnCupE,EAAS,CACbC,KAAK,EACLC,SAAS,GAELC,EAAcx1E,EAAOkvE,OAAOzrE,MAC5BgyE,EAAez1E,EAAOkvE,OAAOnnE,OAC7BwtE,EAAUH,EAAG3pE,MAAM,+BAEzB,IAAIiqE,EAAON,EAAG3pE,MAAM,wBACpB,MAAMkqE,EAAOP,EAAG3pE,MAAM,2BAChBmqE,GAAUF,GAAQN,EAAG3pE,MAAM,8BAC3BoqE,EAAuB,UAAbxrE,EAChB,IAAIyrE,EAAqB,aAAbzrE,EAsBZ,OAlBKqrE,GAAQI,GAASrB,EAAQI,OAFV,CAAC,YAAa,YAAa,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAExG7tE,QAAQ,GAAGwuE,KAAeC,MAAmB,IAC9FC,EAAON,EAAG3pE,MAAM,uBACXiqE,IAAMA,EAAO,CAAC,EAAG,EAAG,WACzBI,GAAQ,GAINP,IAAYM,IACdR,EAAOU,GAAK,UACZV,EAAOE,SAAU,IAGfG,GAAQE,GAAUD,KACpBN,EAAOU,GAAK,MACZV,EAAOC,KAAM,GAIRD,CACT,CAImBW,CAAWb,IAGrBT,EACT,CCrCA,SAASuB,KAKP,OAJK,KACH,GAhBJ,WACE,MAAMj2E,EAAS,KAOf,MAAO,CACLk2E,SANF,WACE,MAAMd,EAAKp1E,EAAOoK,UAAU0B,UAAUN,cACtC,OAAO4pE,EAAGpuE,QAAQ,WAAa,GAAKouE,EAAGpuE,QAAQ,UAAY,GAAKouE,EAAGpuE,QAAQ,WAAa,CAC1F,CAGYkvE,GACVC,UAAW,+CAA+CzuE,KAAK1H,EAAOoK,UAAU0B,WAEpF,CAIcsqE,IAGL,EACT,CCtBA,UACErlE,GAAG4F,EAAQ8mB,EAAS44C,GAClB,MAAMxrE,EAAOtD,KACb,IAAKsD,EAAKyrE,iBAAmBzrE,EAAK0rE,UAAW,OAAO1rE,EACpD,GAAuB,mBAAZ4yB,EAAwB,OAAO5yB,EAC1C,MAAMyL,EAAS+/D,EAAW,UAAY,OAKtC,OAJA1/D,EAAO3M,MAAM,KAAKjM,SAAQwH,IACnBsF,EAAKyrE,gBAAgB/wE,KAAQsF,EAAKyrE,gBAAgB/wE,GAAS,IAChEsF,EAAKyrE,gBAAgB/wE,GAAO+Q,GAAQmnB,EAAQ,IAEvC5yB,CACT,EAEAiM,KAAKH,EAAQ8mB,EAAS44C,GACpB,MAAMxrE,EAAOtD,KACb,IAAKsD,EAAKyrE,iBAAmBzrE,EAAK0rE,UAAW,OAAO1rE,EACpD,GAAuB,mBAAZ4yB,EAAwB,OAAO5yB,EAE1C,SAAS2rE,KAAet/D,GACtBrM,EAAK2G,IAAImF,EAAQ6/D,GAEbA,EAAYC,uBACPD,EAAYC,eAGrBh5C,EAAQrmB,MAAMvM,EAAMqM,EACtB,CAGA,OADAs/D,EAAYC,eAAiBh5C,EACtB5yB,EAAKkG,GAAG4F,EAAQ6/D,EAAaH,EACtC,EAEAK,MAAMj5C,EAAS44C,GACb,MAAMxrE,EAAOtD,KACb,IAAKsD,EAAKyrE,iBAAmBzrE,EAAK0rE,UAAW,OAAO1rE,EACpD,GAAuB,mBAAZ4yB,EAAwB,OAAO5yB,EAC1C,MAAMyL,EAAS+/D,EAAW,UAAY,OAMtC,OAJIxrE,EAAK8rE,mBAAmB3vE,QAAQy2B,GAAW,GAC7C5yB,EAAK8rE,mBAAmBrgE,GAAQmnB,GAG3B5yB,CACT,EAEA+rE,OAAOn5C,GACL,MAAM5yB,EAAOtD,KACb,IAAKsD,EAAKyrE,iBAAmBzrE,EAAK0rE,UAAW,OAAO1rE,EACpD,IAAKA,EAAK8rE,mBAAoB,OAAO9rE,EACrC,MAAMgJ,EAAQhJ,EAAK8rE,mBAAmB3vE,QAAQy2B,GAM9C,OAJI5pB,GAAS,GACXhJ,EAAK8rE,mBAAmBplE,OAAOsC,EAAO,GAGjChJ,CACT,EAEA2G,IAAImF,EAAQ8mB,GACV,MAAM5yB,EAAOtD,KACb,OAAKsD,EAAKyrE,iBAAmBzrE,EAAK0rE,UAAkB1rE,EAC/CA,EAAKyrE,iBACV3/D,EAAO3M,MAAM,KAAKjM,SAAQwH,SACD,IAAZk4B,EACT5yB,EAAKyrE,gBAAgB/wE,GAAS,GACrBsF,EAAKyrE,gBAAgB/wE,IAC9BsF,EAAKyrE,gBAAgB/wE,GAAOxH,SAAQ,CAAC84E,EAAchjE,MAC7CgjE,IAAiBp5C,GAAWo5C,EAAaJ,gBAAkBI,EAAaJ,iBAAmBh5C,IAC7F5yB,EAAKyrE,gBAAgB/wE,GAAOgM,OAAOsC,EAAO,EAC5C,GAEJ,IAEKhJ,GAZ2BA,CAapC,EAEA2c,QAAQtQ,GACN,MAAMrM,EAAOtD,KACb,IAAKsD,EAAKyrE,iBAAmBzrE,EAAK0rE,UAAW,OAAO1rE,EACpD,IAAKA,EAAKyrE,gBAAiB,OAAOzrE,EAClC,IAAI8L,EACA/Y,EACAmlC,EAEmB,iBAAZ7rB,EAAK,IAAmBjO,MAAM4O,QAAQX,EAAK,KACpDP,EAASO,EAAK,GACdtZ,EAAOsZ,EAAKvO,MAAM,EAAGuO,EAAKlO,QAC1B+5B,EAAUl4B,IAEV8L,EAASO,EAAK,GAAGP,OACjB/Y,EAAOsZ,EAAK,GAAGtZ,KACfmlC,EAAU7rB,EAAK,GAAG6rB,SAAWl4B,GAG/BjN,EAAKwqE,QAAQrlC,GAeb,OAdoB95B,MAAM4O,QAAQlB,GAAUA,EAASA,EAAO3M,MAAM,MACtDjM,SAAQwH,IACdsF,EAAK8rE,oBAAsB9rE,EAAK8rE,mBAAmB3tE,QACrD6B,EAAK8rE,mBAAmB54E,SAAQ84E,IAC9BA,EAAaz/D,MAAM2rB,EAAS,CAACx9B,KAAU3H,GAAM,IAI7CiN,EAAKyrE,iBAAmBzrE,EAAKyrE,gBAAgB/wE,IAC/CsF,EAAKyrE,gBAAgB/wE,GAAOxH,SAAQ84E,IAClCA,EAAaz/D,MAAM2rB,EAASnlC,EAAK,GAErC,IAEKiN,CACT,GCtGF,UACEisE,WCVa,WACb,MAAMrK,EAASllE,KACf,IAAI9D,EACAsE,EACJ,MAAM+N,EAAM22D,EAAO32D,IAGjBrS,OADiC,IAAxBgpE,EAAO13D,OAAOtR,OAAiD,OAAxBgpE,EAAO13D,OAAOtR,MACtDgpE,EAAO13D,OAAOtR,MAEdqS,EAAI,GAAG7S,YAIf8E,OADkC,IAAzB0kE,EAAO13D,OAAOhN,QAAmD,OAAzB0kE,EAAO13D,OAAOhN,OACtD0kE,EAAO13D,OAAOhN,OAEd+N,EAAI,GAAG7N,aAGJ,IAAVxE,GAAegpE,EAAOv7C,gBAA6B,IAAXnpB,GAAgB0kE,EAAOsK,eAKnEtzE,EAAQA,EAAQ6B,SAASwQ,EAAI9J,IAAI,iBAAmB,EAAG,IAAM1G,SAASwQ,EAAI9J,IAAI,kBAAoB,EAAG,IACrGjE,EAASA,EAASzC,SAASwQ,EAAI9J,IAAI,gBAAkB,EAAG,IAAM1G,SAASwQ,EAAI9J,IAAI,mBAAqB,EAAG,IACnGmjD,OAAOtjD,MAAMpI,KAAQA,EAAQ,GAC7B0rD,OAAOtjD,MAAM9D,KAASA,EAAS,GACnCjJ,OAAOC,OAAO0tE,EAAQ,CACpBhpE,QACAsE,SACA6S,KAAM6xD,EAAOv7C,eAAiBztB,EAAQsE,IAE1C,EDrBEivE,aEVa,WACb,MAAMvK,EAASllE,KAEf,SAAS0vE,EAAkBC,GACzB,OAAIzK,EAAOv7C,eACFgmD,EAIF,CACL,MAAS,SACT,aAAc,cACd,iBAAkB,eAClB,cAAe,aACf,eAAgB,gBAChB,eAAgB,cAChB,gBAAiB,iBACjB,YAAe,gBACfA,EACJ,CAEA,SAASC,EAA0B/D,EAAM7yE,GACvC,OAAO6T,WAAWg/D,EAAK5rE,iBAAiByvE,EAAkB12E,KAAW,EACvE,CAEA,MAAMwU,EAAS03D,EAAO13D,QAChB,WACJqiE,EACAx8D,KAAMy8D,EACNC,aAAcv6C,EAAG,SACjBw6C,GACE9K,EACE+K,EAAY/K,EAAOgL,SAAW1iE,EAAO0iE,QAAQpkC,QAC7CqkC,EAAuBF,EAAY/K,EAAOgL,QAAQE,OAAO3uE,OAASyjE,EAAOkL,OAAO3uE,OAChF2uE,EAASP,EAAWruE,SAAS,IAAI0jE,EAAO13D,OAAO6iE,cAC/CC,EAAeL,EAAY/K,EAAOgL,QAAQE,OAAO3uE,OAAS2uE,EAAO3uE,OACvE,IAAI8uE,EAAW,GACf,MAAMC,EAAa,GACbC,EAAkB,GACxB,IAAIC,EAAeljE,EAAOmjE,mBAEE,mBAAjBD,IACTA,EAAeljE,EAAOmjE,mBAAmB/uE,KAAKsjE,IAGhD,IAAI0L,EAAcpjE,EAAOqjE,kBAEE,mBAAhBD,IACTA,EAAcpjE,EAAOqjE,kBAAkBjvE,KAAKsjE,IAG9C,MAAM4L,EAAyB5L,EAAOqL,SAAS9uE,OACzCsvE,EAA2B7L,EAAOsL,WAAW/uE,OACnD,IAAIuvE,EAAexjE,EAAOwjE,aACtBC,GAAiBP,EACjBQ,EAAgB,EAChB5kE,EAAQ,EAEZ,QAA0B,IAAfwjE,EACT,OAG0B,iBAAjBkB,GAA6BA,EAAavxE,QAAQ,MAAQ,IACnEuxE,EAAenkE,WAAWmkE,EAAa7yE,QAAQ,IAAK,KAAO,IAAM2xE,GAGnE5K,EAAOiM,aAAeH,EAElBx7C,EAAK46C,EAAO3rE,IAAI,CAClBiQ,WAAY,GACZI,aAAc,GACdD,UAAW,KACLu7D,EAAO3rE,IAAI,CACjBkQ,YAAa,GACbG,aAAc,GACdD,UAAW,KAGTrH,EAAO4jE,gBAAkB5jE,EAAO6jE,UAClC,GAAenM,EAAOwH,UAAW,kCAAmC,IACpE,GAAexH,EAAOwH,UAAW,iCAAkC,KAGrE,MAAM4E,EAAc9jE,EAAO+jE,MAAQ/jE,EAAO+jE,KAAK1yD,KAAO,GAAKqmD,EAAOqM,KAOlE,IAAIC,EALAF,GACFpM,EAAOqM,KAAKE,WAAWnB,GAKzB,MAAMoB,EAAgD,SAAzBlkE,EAAOi3D,eAA4Bj3D,EAAOmkE,aAAep6E,OAAO6mB,KAAK5Q,EAAOmkE,aAAarkE,QAAOK,QACnE,IAA1CH,EAAOmkE,YAAYhkE,GAAK82D,gBACrChjE,OAAS,EAEZ,IAAK,IAAIpJ,EAAI,EAAGA,EAAIi4E,EAAcj4E,GAAK,EAAG,CACxCm5E,EAAY,EACZ,MAAMI,EAAQxB,EAAOnyC,GAAG5lC,GAMxB,GAJIi5E,GACFpM,EAAOqM,KAAKM,YAAYx5E,EAAGu5E,EAAOtB,EAAcZ,GAGrB,SAAzBkC,EAAMntE,IAAI,WAAd,CAEA,GAA6B,SAAzB+I,EAAOi3D,cAA0B,CAC/BiN,IACFtB,EAAO/3E,GAAGoC,MAAMi1E,EAAkB,UAAY,IAGhD,MAAMoC,EAAcjyE,iBAAiB+xE,EAAM,IACrCG,EAAmBH,EAAM,GAAGn3E,MAAMkO,UAClCqpE,EAAyBJ,EAAM,GAAGn3E,MAAM2wE,gBAU9C,GARI2G,IACFH,EAAM,GAAGn3E,MAAMkO,UAAY,QAGzBqpE,IACFJ,EAAM,GAAGn3E,MAAM2wE,gBAAkB,QAG/B59D,EAAOykE,aACTT,EAAYtM,EAAOv7C,eAAiBioD,EAAM1qE,YAAW,GAAQ0qE,EAAMxqE,aAAY,OAC1E,CAEL,MAAMlL,EAAQ0zE,EAA0BkC,EAAa,SAC/C19D,EAAcw7D,EAA0BkC,EAAa,gBACrDz9D,EAAeu7D,EAA0BkC,EAAa,iBACtDp9D,EAAak7D,EAA0BkC,EAAa,eACpDn9D,EAAci7D,EAA0BkC,EAAa,gBACrDl+D,EAAYk+D,EAAY7xE,iBAAiB,cAE/C,GAAI2T,GAA2B,eAAdA,EACf49D,EAAYt1E,EAAQwY,EAAaC,MAC5B,CACL,MAAM,YACJjZ,EAAW,YACXD,GACEm2E,EAAM,GACVJ,EAAYt1E,EAAQkY,EAAcC,EAAeK,EAAaC,GAAelZ,EAAcC,EAC7F,CACF,CAEIq2E,IACFH,EAAM,GAAGn3E,MAAMkO,UAAYopE,GAGzBC,IACFJ,EAAM,GAAGn3E,MAAM2wE,gBAAkB4G,GAG/BxkE,EAAOykE,eAAcT,EAAY7zE,KAAKmD,MAAM0wE,GAClD,MACEA,GAAa1B,GAActiE,EAAOi3D,cAAgB,GAAKuM,GAAgBxjE,EAAOi3D,cAC1Ej3D,EAAOykE,eAAcT,EAAY7zE,KAAKmD,MAAM0wE,IAE5CpB,EAAO/3E,KACT+3E,EAAO/3E,GAAGoC,MAAMi1E,EAAkB,UAAY,GAAG8B,OAIjDpB,EAAO/3E,KACT+3E,EAAO/3E,GAAG65E,gBAAkBV,GAG9Bf,EAAgBtsE,KAAKqtE,GAEjBhkE,EAAO4jE,gBACTH,EAAgBA,EAAgBO,EAAY,EAAIN,EAAgB,EAAIF,EAC9C,IAAlBE,GAA6B,IAAN74E,IAAS44E,EAAgBA,EAAgBnB,EAAa,EAAIkB,GAC3E,IAAN34E,IAAS44E,EAAgBA,EAAgBnB,EAAa,EAAIkB,GAC1DrzE,KAAKguC,IAAIslC,GAAiB,OAAUA,EAAgB,GACpDzjE,EAAOykE,eAAchB,EAAgBtzE,KAAKmD,MAAMmwE,IAChD3kE,EAAQkB,EAAO2kE,gBAAmB,GAAG5B,EAASpsE,KAAK8sE,GACvDT,EAAWrsE,KAAK8sE,KAEZzjE,EAAOykE,eAAchB,EAAgBtzE,KAAKmD,MAAMmwE,KAC/C3kE,EAAQ3O,KAAKkK,IAAIq9D,EAAO13D,OAAO4kE,mBAAoB9lE,IAAU44D,EAAO13D,OAAO2kE,gBAAmB,GAAG5B,EAASpsE,KAAK8sE,GACpHT,EAAWrsE,KAAK8sE,GAChBA,EAAgBA,EAAgBO,EAAYR,GAG9C9L,EAAOiM,aAAeK,EAAYR,EAClCE,EAAgBM,EAChBllE,GAAS,CAlFoC,CAmF/C,CAqBA,GAnBA44D,EAAOiM,YAAcxzE,KAAKkD,IAAIqkE,EAAOiM,YAAarB,GAAcc,EAE5Dp7C,GAAOw6C,IAA+B,UAAlBxiE,EAAO6kE,QAAwC,cAAlB7kE,EAAO6kE,SAC1DxC,EAAWprE,IAAI,CACbvI,MAAO,GAAGgpE,EAAOiM,YAAc3jE,EAAOwjE,mBAItCxjE,EAAO8kE,gBACTzC,EAAWprE,IAAI,CACb,CAACirE,EAAkB,UAAW,GAAGxK,EAAOiM,YAAc3jE,EAAOwjE,mBAI7DM,GACFpM,EAAOqM,KAAKgB,kBAAkBf,EAAWjB,EAAUb,IAIhDliE,EAAO4jE,eAAgB,CAC1B,MAAMoB,EAAgB,GAEtB,IAAK,IAAIn6E,EAAI,EAAGA,EAAIk4E,EAAS9uE,OAAQpJ,GAAK,EAAG,CAC3C,IAAIo6E,EAAiBlC,EAASl4E,GAC1BmV,EAAOykE,eAAcQ,EAAiB90E,KAAKmD,MAAM2xE,IAEjDlC,EAASl4E,IAAM6sE,EAAOiM,YAAcrB,GACtC0C,EAAcruE,KAAKsuE,EAEvB,CAEAlC,EAAWiC,EAEP70E,KAAKmD,MAAMokE,EAAOiM,YAAcrB,GAAcnyE,KAAKmD,MAAMyvE,EAASA,EAAS9uE,OAAS,IAAM,GAC5F8uE,EAASpsE,KAAK+gE,EAAOiM,YAAcrB,EAEvC,CAIA,GAFwB,IAApBS,EAAS9uE,SAAc8uE,EAAW,CAAC,IAEX,IAAxB/iE,EAAOwjE,aAAoB,CAC7B,MAAMrjE,EAAMu3D,EAAOv7C,gBAAkB6L,EAAM,aAAek6C,EAAkB,eAC5EU,EAAO9iE,QAAO,CAACkU,EAAGkxD,KACXllE,EAAO6jE,SAERqB,IAAetC,EAAO3uE,OAAS,IAKlCgD,IAAI,CACL,CAACkJ,GAAM,GAAGqjE,OAEd,CAEA,GAAIxjE,EAAO4jE,gBAAkB5jE,EAAOmlE,qBAAsB,CACxD,IAAIC,EAAgB,EACpBnC,EAAgBj6E,SAAQq8E,IACtBD,GAAiBC,GAAkBrlE,EAAOwjE,aAAexjE,EAAOwjE,aAAe,EAAE,IAEnF4B,GAAiBplE,EAAOwjE,aACxB,MAAM8B,EAAUF,EAAgB9C,EAChCS,EAAWA,EAASz0D,KAAIi3D,GAClBA,EAAO,GAAWrC,EAClBqC,EAAOD,EAAgBA,EAAUlC,EAC9BmC,GAEX,CAEA,GAAIvlE,EAAOwlE,yBAA0B,CACnC,IAAIJ,EAAgB,EAMpB,GALAnC,EAAgBj6E,SAAQq8E,IACtBD,GAAiBC,GAAkBrlE,EAAOwjE,aAAexjE,EAAOwjE,aAAe,EAAE,IAEnF4B,GAAiBplE,EAAOwjE,aAEpB4B,EAAgB9C,EAAY,CAC9B,MAAMmD,GAAmBnD,EAAa8C,GAAiB,EACvDrC,EAAS/5E,SAAQ,CAACu8E,EAAMG,KACtB3C,EAAS2C,GAAaH,EAAOE,CAAe,IAE9CzC,EAAWh6E,SAAQ,CAACu8E,EAAMG,KACxB1C,EAAW0C,GAAaH,EAAOE,CAAe,GAElD,CACF,CASA,GAPA17E,OAAOC,OAAO0tE,EAAQ,CACpBkL,SACAG,WACAC,aACAC,oBAGEjjE,EAAO4jE,gBAAkB5jE,EAAO6jE,UAAY7jE,EAAOmlE,qBAAsB,CAC3E,GAAezN,EAAOwH,UAAW,mCAAuC6D,EAAS,GAAb,MACpE,GAAerL,EAAOwH,UAAW,iCAAqCxH,EAAO7xD,KAAO,EAAIo9D,EAAgBA,EAAgBhvE,OAAS,GAAK,EAAnE,MACnE,MAAM0xE,GAAiBjO,EAAOqL,SAAS,GACjC6C,GAAmBlO,EAAOsL,WAAW,GAC3CtL,EAAOqL,SAAWrL,EAAOqL,SAASz0D,KAAIgD,GAAKA,EAAIq0D,IAC/CjO,EAAOsL,WAAatL,EAAOsL,WAAW10D,KAAIgD,GAAKA,EAAIs0D,GACrD,CAmBA,GAjBI9C,IAAiBH,GACnBjL,EAAOjlD,KAAK,sBAGVswD,EAAS9uE,SAAWqvE,IAClB5L,EAAO13D,OAAO6lE,eAAenO,EAAOoO,gBACxCpO,EAAOjlD,KAAK,yBAGVuwD,EAAW/uE,SAAWsvE,GACxB7L,EAAOjlD,KAAK,0BAGVzS,EAAOo3D,qBACTM,EAAOqO,uBAGJtD,GAAcziE,EAAO6jE,SAA8B,UAAlB7jE,EAAO6kE,QAAwC,SAAlB7kE,EAAO6kE,QAAoB,CAC5F,MAAMmB,EAAsB,GAAGhmE,EAAOimE,wCAChCC,EAA6BxO,EAAO32D,IAAI8wB,SAASm0C,GAEnDlD,GAAgB9iE,EAAOmmE,wBACpBD,GAA4BxO,EAAO32D,IAAInJ,SAASouE,GAC5CE,GACTxO,EAAO32D,IAAIwsB,YAAYy4C,EAE3B,CACF,EFnTEI,iBGXa,SAA0B9sE,GACvC,MAAMo+D,EAASllE,KACT6zE,EAAe,GACf5D,EAAY/K,EAAOgL,SAAWhL,EAAO13D,OAAO0iE,QAAQpkC,QAC1D,IACIzzC,EADAy7E,EAAY,EAGK,iBAAVhtE,EACTo+D,EAAO6O,cAAcjtE,IACF,IAAVA,GACTo+D,EAAO6O,cAAc7O,EAAO13D,OAAO1G,OAGrC,MAAMktE,EAAkB1nE,GAClB2jE,EACK/K,EAAOkL,OAAO9iE,QAAOxN,GAAM/B,SAAS+B,EAAGjC,aAAa,2BAA4B,MAAQyO,IAAO,GAGjG44D,EAAOkL,OAAOnyC,GAAG3xB,GAAO,GAIjC,GAAoC,SAAhC44D,EAAO13D,OAAOi3D,eAA4BS,EAAO13D,OAAOi3D,cAAgB,EAC1E,GAAIS,EAAO13D,OAAO4jE,gBACflM,EAAO+O,eAAiB,GAAE,KAAKpqE,MAAK+nE,IACnCiC,EAAa1vE,KAAKytE,EAAM,SAG1B,IAAKv5E,EAAI,EAAGA,EAAIsF,KAAKu2E,KAAKhP,EAAO13D,OAAOi3D,eAAgBpsE,GAAK,EAAG,CAC9D,MAAMiU,EAAQ44D,EAAOiP,YAAc97E,EACnC,GAAIiU,EAAQ44D,EAAOkL,OAAO3uE,SAAWwuE,EAAW,MAChD4D,EAAa1vE,KAAK6vE,EAAgB1nE,GACpC,MAGFunE,EAAa1vE,KAAK6vE,EAAgB9O,EAAOiP,cAI3C,IAAK97E,EAAI,EAAGA,EAAIw7E,EAAapyE,OAAQpJ,GAAK,EACxC,QAA+B,IAApBw7E,EAAax7E,GAAoB,CAC1C,MAAMmI,EAASqzE,EAAax7E,GAAG2b,aAC/B8/D,EAAYtzE,EAASszE,EAAYtzE,EAASszE,CAC5C,EAIEA,GAA2B,IAAdA,IAAiB5O,EAAO2K,WAAWprE,IAAI,SAAU,GAAGqvE,MACvE,EHpCEP,mBIba,WACb,MAAMrO,EAASllE,KACTowE,EAASlL,EAAOkL,OAEtB,IAAK,IAAI/3E,EAAI,EAAGA,EAAI+3E,EAAO3uE,OAAQpJ,GAAK,EACtC+3E,EAAO/3E,GAAG+7E,kBAAoBlP,EAAOv7C,eAAiBymD,EAAO/3E,GAAG+P,WAAagoE,EAAO/3E,GAAGqQ,SAE3F,EJOE2rE,qBKba,SAA8B5H,EAAYzsE,MAAQA,KAAKysE,WAAa,GACjF,MAAMvH,EAASllE,KACTwN,EAAS03D,EAAO13D,QAChB,OACJ4iE,EACAL,aAAcv6C,EAAG,SACjB+6C,GACErL,EACJ,GAAsB,IAAlBkL,EAAO3uE,OAAc,YACkB,IAAhC2uE,EAAO,GAAGgE,mBAAmClP,EAAOqO,qBAC/D,IAAIe,GAAgB7H,EAChBj3C,IAAK8+C,EAAe7H,GAExB2D,EAAOr1C,YAAYvtB,EAAO+mE,mBAC1BrP,EAAOsP,qBAAuB,GAC9BtP,EAAO+O,cAAgB,GAEvB,IAAK,IAAI57E,EAAI,EAAGA,EAAI+3E,EAAO3uE,OAAQpJ,GAAK,EAAG,CACzC,MAAMu5E,EAAQxB,EAAO/3E,GACrB,IAAIo8E,EAAc7C,EAAMwC,kBAEpB5mE,EAAO6jE,SAAW7jE,EAAO4jE,iBAC3BqD,GAAerE,EAAO,GAAGgE,mBAG3B,MAAMM,GAAiBJ,GAAgB9mE,EAAO4jE,eAAiBlM,EAAOyP,eAAiB,GAAKF,IAAgB7C,EAAMM,gBAAkB1kE,EAAOwjE,cACrI4D,GAAyBN,EAAe/D,EAAS,IAAM/iE,EAAO4jE,eAAiBlM,EAAOyP,eAAiB,GAAKF,IAAgB7C,EAAMM,gBAAkB1kE,EAAOwjE,cAC3J6D,IAAgBP,EAAeG,GAC/BK,EAAaD,EAAc3P,EAAOuL,gBAAgBp4E,IACtCw8E,GAAe,GAAKA,EAAc3P,EAAO7xD,KAAO,GAAKyhE,EAAa,GAAKA,GAAc5P,EAAO7xD,MAAQwhE,GAAe,GAAKC,GAAc5P,EAAO7xD,QAG7J6xD,EAAO+O,cAAc9vE,KAAKytE,GAC1B1M,EAAOsP,qBAAqBrwE,KAAK9L,GACjC+3E,EAAOnyC,GAAG5lC,GAAG+M,SAASoI,EAAO+mE,oBAG/B3C,EAAMn0E,SAAW+3B,GAAOk/C,EAAgBA,EACxC9C,EAAMmD,iBAAmBv/C,GAAOo/C,EAAwBA,CAC1D,CAEA1P,EAAO+O,cAAgB,GAAE/O,EAAO+O,cAClC,EL5BEe,eMfa,SAAwBvI,GACrC,MAAMvH,EAASllE,KAEf,QAAyB,IAAdysE,EAA2B,CACpC,MAAMwI,EAAa/P,EAAO6K,cAAgB,EAAI,EAE9CtD,EAAYvH,GAAUA,EAAOuH,WAAavH,EAAOuH,UAAYwI,GAAc,CAC7E,CAEA,MAAMznE,EAAS03D,EAAO13D,OAChB0nE,EAAiBhQ,EAAOiQ,eAAiBjQ,EAAOyP,eACtD,IAAI,SACFl3E,EAAQ,YACR23E,EAAW,MACXC,GACEnQ,EACJ,MAAMoQ,EAAeF,EACfG,EAASF,EAEQ,IAAnBH,GACFz3E,EAAW,EACX23E,GAAc,EACdC,GAAQ,IAER53E,GAAYgvE,EAAYvH,EAAOyP,gBAAkBO,EACjDE,EAAc33E,GAAY,EAC1B43E,EAAQ53E,GAAY,GAGtBlG,OAAOC,OAAO0tE,EAAQ,CACpBznE,WACA23E,cACAC,WAEE7nE,EAAOo3D,qBAAuBp3D,EAAO4jE,gBAAkB5jE,EAAO0lC,aAAYgyB,EAAOmP,qBAAqB5H,GAEtG2I,IAAgBE,GAClBpQ,EAAOjlD,KAAK,yBAGVo1D,IAAUE,GACZrQ,EAAOjlD,KAAK,oBAGVq1D,IAAiBF,GAAeG,IAAWF,IAC7CnQ,EAAOjlD,KAAK,YAGdilD,EAAOjlD,KAAK,WAAYxiB,EAC1B,ENjCE+3E,oBOhBa,WACb,MAAMtQ,EAASllE,MACT,OACJowE,EAAM,OACN5iE,EAAM,WACNqiE,EAAU,YACVsE,EAAW,UACXsB,GACEvQ,EACE+K,EAAY/K,EAAOgL,SAAW1iE,EAAO0iE,QAAQpkC,QAEnD,IAAI4pC,EADJtF,EAAOr1C,YAAY,GAAGvtB,EAAOmoE,oBAAoBnoE,EAAOooE,kBAAkBpoE,EAAOqoE,kBAAkBroE,EAAOsoE,6BAA6BtoE,EAAOuoE,2BAA2BvoE,EAAOwoE,2BAI9KN,EADEzF,EACY/K,EAAO2K,WAAW93E,KAAK,IAAIyV,EAAO6iE,uCAAuC8D,OAEzE/D,EAAOnyC,GAAGk2C,GAI1BuB,EAAYtwE,SAASoI,EAAOmoE,kBAExBnoE,EAAOyoE,OAELP,EAAYr2C,SAAS7xB,EAAO0oE,qBAC9BrG,EAAWruE,SAAS,IAAIgM,EAAO6iE,mBAAmB7iE,EAAO0oE,iDAAiDT,OAAerwE,SAASoI,EAAOsoE,2BAEzIjG,EAAWruE,SAAS,IAAIgM,EAAO6iE,cAAc7iE,EAAO0oE,gDAAgDT,OAAerwE,SAASoI,EAAOsoE,4BAKvI,IAAIK,EAAYT,EAAYnL,QAAQ,IAAI/8D,EAAO6iE,cAAcpyC,GAAG,GAAG74B,SAASoI,EAAOooE,gBAE/EpoE,EAAOyoE,MAA6B,IAArBE,EAAU10E,SAC3B00E,EAAY/F,EAAOnyC,GAAG,GACtBk4C,EAAU/wE,SAASoI,EAAOooE,iBAI5B,IAAIQ,EAAYV,EAAYhL,QAAQ,IAAIl9D,EAAO6iE,cAAcpyC,GAAG,GAAG74B,SAASoI,EAAOqoE,gBAE/EroE,EAAOyoE,MAA6B,IAArBG,EAAU30E,SAC3B20E,EAAYhG,EAAOnyC,IAAI,GACvBm4C,EAAUhxE,SAASoI,EAAOqoE,iBAGxBroE,EAAOyoE,OAELE,EAAU92C,SAAS7xB,EAAO0oE,qBAC5BrG,EAAWruE,SAAS,IAAIgM,EAAO6iE,mBAAmB7iE,EAAO0oE,iDAAiDC,EAAUryE,KAAK,gCAAgCsB,SAASoI,EAAOuoE,yBAEzKlG,EAAWruE,SAAS,IAAIgM,EAAO6iE,cAAc7iE,EAAO0oE,gDAAgDC,EAAUryE,KAAK,gCAAgCsB,SAASoI,EAAOuoE,yBAGjKK,EAAU/2C,SAAS7xB,EAAO0oE,qBAC5BrG,EAAWruE,SAAS,IAAIgM,EAAO6iE,mBAAmB7iE,EAAO0oE,iDAAiDE,EAAUtyE,KAAK,gCAAgCsB,SAASoI,EAAOwoE,yBAEzKnG,EAAWruE,SAAS,IAAIgM,EAAO6iE,cAAc7iE,EAAO0oE,gDAAgDE,EAAUtyE,KAAK,gCAAgCsB,SAASoI,EAAOwoE,0BAIvK9Q,EAAOmR,mBACT,EP9CEC,kBQjBa,SAA2BC,GACxC,MAAMrR,EAASllE,KACTysE,EAAYvH,EAAO6K,aAAe7K,EAAOuH,WAAavH,EAAOuH,WAC7D,WACJ+D,EAAU,SACVD,EAAQ,OACR/iE,EACA2mE,YAAaqC,EACbf,UAAWgB,EACXvD,UAAWwD,GACTxR,EACJ,IACIgO,EADAiB,EAAcoC,EAGlB,QAA2B,IAAhBpC,EAA6B,CACtC,IAAK,IAAI97E,EAAI,EAAGA,EAAIm4E,EAAW/uE,OAAQpJ,GAAK,OACT,IAAtBm4E,EAAWn4E,EAAI,GACpBo0E,GAAa+D,EAAWn4E,IAAMo0E,EAAY+D,EAAWn4E,EAAI,IAAMm4E,EAAWn4E,EAAI,GAAKm4E,EAAWn4E,IAAM,EACtG87E,EAAc97E,EACLo0E,GAAa+D,EAAWn4E,IAAMo0E,EAAY+D,EAAWn4E,EAAI,KAClE87E,EAAc97E,EAAI,GAEXo0E,GAAa+D,EAAWn4E,KACjC87E,EAAc97E,GAKdmV,EAAOmpE,sBACLxC,EAAc,QAA4B,IAAhBA,KAA6BA,EAAc,EAE7E,CAEA,GAAI5D,EAAS9wE,QAAQgtE,IAAc,EACjCyG,EAAY3C,EAAS9wE,QAAQgtE,OACxB,CACL,MAAMmK,EAAOj5E,KAAKkK,IAAI2F,EAAO4kE,mBAAoB+B,GACjDjB,EAAY0D,EAAOj5E,KAAKmD,OAAOqzE,EAAcyC,GAAQppE,EAAO2kE,eAC9D,CAIA,GAFIe,GAAa3C,EAAS9uE,SAAQyxE,EAAY3C,EAAS9uE,OAAS,GAE5D0yE,IAAgBqC,EAMlB,YALItD,IAAcwD,IAChBxR,EAAOgO,UAAYA,EACnBhO,EAAOjlD,KAAK,qBAOhB,MAAMw1D,EAAY13E,SAASmnE,EAAOkL,OAAOnyC,GAAGk2C,GAAarwE,KAAK,4BAA8BqwE,EAAa,IACzG58E,OAAOC,OAAO0tE,EAAQ,CACpBgO,YACAuC,YACAe,gBACArC,gBAEFjP,EAAOjlD,KAAK,qBACZilD,EAAOjlD,KAAK,mBAERw2D,IAAsBhB,GACxBvQ,EAAOjlD,KAAK,oBAGVilD,EAAO/sB,aAAe+sB,EAAO13D,OAAOqpE,qBACtC3R,EAAOjlD,KAAK,cAEhB,ERnDE62D,mBSjBa,SAA4Bv9E,GACzC,MAAM2rE,EAASllE,KACTwN,EAAS03D,EAAO13D,OAChBokE,EAAQ,GAAEr4E,GAAGo7B,QAAQ,IAAInnB,EAAO6iE,cAAc,GACpD,IACIqC,EADAqE,GAAa,EAGjB,GAAInF,EACF,IAAK,IAAIv5E,EAAI,EAAGA,EAAI6sE,EAAOkL,OAAO3uE,OAAQpJ,GAAK,EAC7C,GAAI6sE,EAAOkL,OAAO/3E,KAAOu5E,EAAO,CAC9BmF,GAAa,EACbrE,EAAar6E,EACb,KACF,CAIJ,IAAIu5E,IAASmF,EAWX,OAFA7R,EAAO8R,kBAAelgF,OACtBouE,EAAO+R,kBAAengF,GATtBouE,EAAO8R,aAAepF,EAElB1M,EAAOgL,SAAWhL,EAAO13D,OAAO0iE,QAAQpkC,QAC1Co5B,EAAO+R,aAAel5E,SAAS,GAAE6zE,GAAO9tE,KAAK,2BAA4B,IAEzEohE,EAAO+R,aAAevE,EAQtBllE,EAAO0pE,0BAA+CpgF,IAAxBouE,EAAO+R,cAA8B/R,EAAO+R,eAAiB/R,EAAOiP,aACpGjP,EAAOgS,qBAEX,GC9BA,UACE5sD,aCLa,SAA4BwgD,GAAO9qE,KAAK2pB,eAAiB,IAAM,MAC5E,MACM,OACJnc,EACAuiE,aAAcv6C,EAAG,UACjBi3C,EAAS,WACToD,GALa7vE,KAQf,GAAIwN,EAAO2pE,iBACT,OAAO3hD,GAAOi3C,EAAYA,EAG5B,GAAIj/D,EAAO6jE,QACT,OAAO5E,EAGT,IAAI2K,EAAmB,GAAavH,EAAW,GAAI/E,GAEnD,OADIt1C,IAAK4hD,GAAoBA,GACtBA,GAAoB,CAC7B,EDdEC,aEPa,SAAsB5K,EAAW6K,GAC9C,MAAMpS,EAASllE,MAEb+vE,aAAcv6C,EAAG,OACjBhoB,EAAM,WACNqiE,EAAU,UACVnD,EAAS,SACTjvE,GACEynE,EACJ,IAwBIqS,EAxBAhxE,EAAI,EACJwW,EAAI,EAGJmoD,EAAOv7C,eACTpjB,EAAIivB,GAAOi3C,EAAYA,EAEvB1vD,EAAI0vD,EAGFj/D,EAAOykE,eACT1rE,EAAI5I,KAAKmD,MAAMyF,GACfwW,EAAIpf,KAAKmD,MAAMic,IAGbvP,EAAO6jE,QACT3E,EAAUxH,EAAOv7C,eAAiB,aAAe,aAAeu7C,EAAOv7C,gBAAkBpjB,GAAKwW,EACpFvP,EAAO2pE,kBACjBtH,EAAWlnE,UAAU,eAAepC,QAAQwW,aAG9CmoD,EAAOsS,kBAAoBtS,EAAOuH,UAClCvH,EAAOuH,UAAYvH,EAAOv7C,eAAiBpjB,EAAIwW,EAG/C,MAAMm4D,EAAiBhQ,EAAOiQ,eAAiBjQ,EAAOyP,eAGpD4C,EADqB,IAAnBrC,EACY,GAECzI,EAAYvH,EAAOyP,gBAAkBO,EAGlDqC,IAAgB95E,GAClBynE,EAAO8P,eAAevI,GAGxBvH,EAAOjlD,KAAK,eAAgBilD,EAAOuH,UAAW6K,EAChD,EFvCE3C,aGRa,WACb,OAAQ30E,KAAKuwE,SAAS,EACxB,EHOE4E,aITa,WACb,OAAQn1E,KAAKuwE,SAASvwE,KAAKuwE,SAAS9uE,OAAS,EAC/C,EJQEg2E,YKTa,SAAqBhL,EAAY,EAAG3lE,EAAQ9G,KAAKwN,OAAO1G,MAAO4wE,GAAe,EAAMC,GAAkB,EAAMC,GACzH,MAAM1S,EAASllE,MACT,OACJwN,EAAM,UACNk/D,GACExH,EAEJ,GAAIA,EAAO2S,WAAarqE,EAAOsqE,+BAC7B,OAAO,EAGT,MAAMnD,EAAezP,EAAOyP,eACtBQ,EAAejQ,EAAOiQ,eAC5B,IAAI4C,EAKJ,GAJiDA,EAA7CJ,GAAmBlL,EAAYkI,EAA6BA,EAAsBgD,GAAmBlL,EAAY0I,EAA6BA,EAAiC1I,EAEnLvH,EAAO8P,eAAe+C,GAElBvqE,EAAO6jE,QAAS,CAClB,MAAM2G,EAAM9S,EAAOv7C,eAEnB,GAAc,IAAV7iB,EACF4lE,EAAUsL,EAAM,aAAe,cAAgBD,MAC1C,CACL,IAAK7S,EAAOgI,QAAQG,aAMlB,OALAhB,GAAqB,CACnBnH,SACAoH,gBAAiByL,EACjBxL,KAAMyL,EAAM,OAAS,SAEhB,EAGTtL,EAAU5vE,SAAS,CACjB,CAACk7E,EAAM,OAAS,QAASD,EACzBE,SAAU,UAEd,CAEA,OAAO,CACT,CA0CA,OAxCc,IAAVnxE,GACFo+D,EAAO6O,cAAc,GACrB7O,EAAOmS,aAAaU,GAEhBL,IACFxS,EAAOjlD,KAAK,wBAAyBnZ,EAAO8wE,GAC5C1S,EAAOjlD,KAAK,oBAGdilD,EAAO6O,cAAcjtE,GACrBo+D,EAAOmS,aAAaU,GAEhBL,IACFxS,EAAOjlD,KAAK,wBAAyBnZ,EAAO8wE,GAC5C1S,EAAOjlD,KAAK,oBAGTilD,EAAO2S,YACV3S,EAAO2S,WAAY,EAEd3S,EAAOgT,oCACVhT,EAAOgT,kCAAoC,SAAuB3+E,GAC3D2rE,IAAUA,EAAO8J,WAClBz1E,EAAE+I,SAAWtC,OACjBklE,EAAO2K,WAAW,GAAGptD,oBAAoB,gBAAiByiD,EAAOgT,mCACjEhT,EAAO2K,WAAW,GAAGptD,oBAAoB,sBAAuByiD,EAAOgT,mCACvEhT,EAAOgT,kCAAoC,YACpChT,EAAOgT,kCAEVR,GACFxS,EAAOjlD,KAAK,iBAEhB,GAGFilD,EAAO2K,WAAW,GAAGz3E,iBAAiB,gBAAiB8sE,EAAOgT,mCAC9DhT,EAAO2K,WAAW,GAAGz3E,iBAAiB,sBAAuB8sE,EAAOgT,sCAIjE,CACT,GCpFe,SAASC,IAAe,OACrCjT,EAAM,aACNwS,EAAY,UACZ/7B,EAAS,KACT1B,IAEA,MAAM,YACJk6B,EAAW,cACXqC,GACEtR,EACJ,IAAI35B,EAAMoQ,EAQV,GANKpQ,IAC8BA,EAA7B4oC,EAAcqC,EAAqB,OAAgBrC,EAAcqC,EAAqB,OAAkB,SAG9GtR,EAAOjlD,KAAK,aAAag6B,KAErBy9B,GAAgBvD,IAAgBqC,EAAe,CACjD,GAAY,UAARjrC,EAEF,YADA25B,EAAOjlD,KAAK,uBAAuBg6B,KAIrCirB,EAAOjlD,KAAK,wBAAwBg6B,KAExB,SAAR1O,EACF25B,EAAOjlD,KAAK,sBAAsBg6B,KAElCirB,EAAOjlD,KAAK,sBAAsBg6B,IAEtC,CACF,CCzBA,UACEm+B,QCPa,SAAiB9rE,EAAQ,EAAGxF,EAAQ9G,KAAKwN,OAAO1G,MAAO4wE,GAAe,EAAME,EAAUS,GACnG,GAAqB,iBAAV/rE,GAAuC,iBAAVA,EACtC,MAAM,IAAIqO,MAAM,kFAAkFrO,aAGpG,GAAqB,iBAAVA,EAAoB,CAK7B,MAAMgsE,EAAgBv6E,SAASuO,EAAO,IAStC,IAFsBgjD,SAASgpB,GAG7B,MAAM,IAAI39D,MAAM,sEAAsErO,aAKxFA,EAAQgsE,CACV,CAEA,MAAMpT,EAASllE,KACf,IAAI0yE,EAAapmE,EACbomE,EAAa,IAAGA,EAAa,GACjC,MAAM,OACJllE,EAAM,SACN+iE,EAAQ,WACRC,EAAU,cACVgG,EAAa,YACbrC,EACApE,aAAcv6C,EAAG,UACjBk3C,EAAS,QACT5gC,GACEo5B,EAEJ,GAAIA,EAAO2S,WAAarqE,EAAOsqE,iCAAmChsC,IAAY8rC,IAAaS,EACzF,OAAO,EAGT,MAAMzB,EAAOj5E,KAAKkK,IAAIq9D,EAAO13D,OAAO4kE,mBAAoBM,GACxD,IAAIQ,EAAY0D,EAAOj5E,KAAKmD,OAAO4xE,EAAakE,GAAQ1R,EAAO13D,OAAO2kE,gBAClEe,GAAa3C,EAAS9uE,SAAQyxE,EAAY3C,EAAS9uE,OAAS,GAChE,MAAMgrE,GAAa8D,EAAS2C,GAE5B,GAAI1lE,EAAOmpE,oBACT,IAAK,IAAIt+E,EAAI,EAAGA,EAAIm4E,EAAW/uE,OAAQpJ,GAAK,EAAG,CAC7C,MAAMkgF,GAAuB56E,KAAKmD,MAAkB,IAAZ2rE,GAClC+L,EAAiB76E,KAAKmD,MAAsB,IAAhB0vE,EAAWn4E,IACvCogF,EAAqB96E,KAAKmD,MAA0B,IAApB0vE,EAAWn4E,EAAI,SAEpB,IAAtBm4E,EAAWn4E,EAAI,GACpBkgF,GAAuBC,GAAkBD,EAAsBE,GAAsBA,EAAqBD,GAAkB,EAC9H9F,EAAar6E,EACJkgF,GAAuBC,GAAkBD,EAAsBE,IACxE/F,EAAar6E,EAAI,GAEVkgF,GAAuBC,IAChC9F,EAAar6E,EAEjB,CAIF,GAAI6sE,EAAO/sB,aAAeu6B,IAAeyB,EAAa,CACpD,IAAKjP,EAAOwT,gBAAkBjM,EAAYvH,EAAOuH,WAAaA,EAAYvH,EAAOyP,eAC/E,OAAO,EAGT,IAAKzP,EAAOyT,gBAAkBlM,EAAYvH,EAAOuH,WAAaA,EAAYvH,EAAOiQ,iBAC1EhB,GAAe,KAAOzB,EAAY,OAAO,CAElD,CAQA,IAAI/2B,EAGJ,GATI+2B,KAAgB8D,GAAiB,IAAMkB,GACzCxS,EAAOjlD,KAAK,0BAIdilD,EAAO8P,eAAevI,GAEQ9wB,EAA1B+2B,EAAayB,EAAyB,OAAgBzB,EAAayB,EAAyB,OAAwB,QAEpH3+C,IAAQi3C,IAAcvH,EAAOuH,YAAcj3C,GAAOi3C,IAAcvH,EAAOuH,UAkBzE,OAjBAvH,EAAOoR,kBAAkB5D,GAErBllE,EAAO0lC,YACTgyB,EAAO0O,mBAGT1O,EAAOsQ,sBAEe,UAAlBhoE,EAAO6kE,QACTnN,EAAOmS,aAAa5K,GAGJ,UAAd9wB,IACFupB,EAAO0T,gBAAgBlB,EAAc/7B,GACrCupB,EAAOoE,cAAcoO,EAAc/7B,KAG9B,EAGT,GAAInuC,EAAO6jE,QAAS,CAClB,MAAM2G,EAAM9S,EAAOv7C,eACbnrB,EAAIg3B,EAAMi3C,GAAaA,EAE7B,GAAc,IAAV3lE,EAAa,CACf,MAAMmpE,EAAY/K,EAAOgL,SAAWhL,EAAO13D,OAAO0iE,QAAQpkC,QAEtDmkC,IACF/K,EAAOwH,UAAUjyE,MAAMkyE,eAAiB,OACxCzH,EAAO2T,mBAAoB,GAG7BnM,EAAUsL,EAAM,aAAe,aAAex5E,EAE1CyxE,GACF3yE,uBAAsB,KACpB4nE,EAAOwH,UAAUjyE,MAAMkyE,eAAiB,GACxCzH,EAAO4T,yBAA0B,CAAK,GAG5C,KAAO,CACL,IAAK5T,EAAOgI,QAAQG,aAMlB,OALAhB,GAAqB,CACnBnH,SACAoH,eAAgB9tE,EAChB+tE,KAAMyL,EAAM,OAAS,SAEhB,EAGTtL,EAAU5vE,SAAS,CACjB,CAACk7E,EAAM,OAAS,OAAQx5E,EACxBy5E,SAAU,UAEd,CAEA,OAAO,CACT,CA8BA,OA5BA/S,EAAO6O,cAAcjtE,GACrBo+D,EAAOmS,aAAa5K,GACpBvH,EAAOoR,kBAAkB5D,GACzBxN,EAAOsQ,sBACPtQ,EAAOjlD,KAAK,wBAAyBnZ,EAAO8wE,GAC5C1S,EAAO0T,gBAAgBlB,EAAc/7B,GAEvB,IAAV70C,EACFo+D,EAAOoE,cAAcoO,EAAc/7B,GACzBupB,EAAO2S,YACjB3S,EAAO2S,WAAY,EAEd3S,EAAO6T,gCACV7T,EAAO6T,8BAAgC,SAAuBx/E,GACvD2rE,IAAUA,EAAO8J,WAClBz1E,EAAE+I,SAAWtC,OACjBklE,EAAO2K,WAAW,GAAGptD,oBAAoB,gBAAiByiD,EAAO6T,+BACjE7T,EAAO2K,WAAW,GAAGptD,oBAAoB,sBAAuByiD,EAAO6T,+BACvE7T,EAAO6T,8BAAgC,YAChC7T,EAAO6T,8BACd7T,EAAOoE,cAAcoO,EAAc/7B,GACrC,GAGFupB,EAAO2K,WAAW,GAAGz3E,iBAAiB,gBAAiB8sE,EAAO6T,+BAC9D7T,EAAO2K,WAAW,GAAGz3E,iBAAiB,sBAAuB8sE,EAAO6T,iCAG/D,CACT,ED1KEC,YETa,SAAqB1sE,EAAQ,EAAGxF,EAAQ9G,KAAKwN,OAAO1G,MAAO4wE,GAAe,EAAME,GAC7F,GAAqB,iBAAVtrE,EAAoB,CAK7B,MAAMgsE,EAAgBv6E,SAASuO,EAAO,IAStC,IAFsBgjD,SAASgpB,GAG7B,MAAM,IAAI39D,MAAM,sEAAsErO,aAKxFA,EAAQgsE,CACV,CAEA,MAAMpT,EAASllE,KACf,IAAIi5E,EAAW3sE,EAMf,OAJI44D,EAAO13D,OAAOyoE,OAChBgD,GAAY/T,EAAOgU,cAGdhU,EAAOkT,QAAQa,EAAUnyE,EAAO4wE,EAAcE,EACvD,EFtBEuB,UGTa,SAAmBryE,EAAQ9G,KAAKwN,OAAO1G,MAAO4wE,GAAe,EAAME,GAChF,MAAM1S,EAASllE,MACT,UACJ63E,EAAS,QACT/rC,EAAO,OACPt+B,GACE03D,EACJ,IAAKp5B,EAAS,OAAOo5B,EACrB,IAAIkU,EAAW5rE,EAAO2kE,eAEO,SAAzB3kE,EAAOi3D,eAAsD,IAA1Bj3D,EAAO2kE,gBAAwB3kE,EAAO6rE,qBAC3ED,EAAWz7E,KAAKkD,IAAIqkE,EAAOoU,qBAAqB,WAAW,GAAO,IAGpE,MAAMC,EAAYrU,EAAOiP,YAAc3mE,EAAO4kE,mBAAqB,EAAIgH,EAEvE,GAAI5rE,EAAOyoE,KAAM,CACf,GAAI4B,GAAarqE,EAAOgsE,kBAAmB,OAAO,EAClDtU,EAAOuU,UAEPvU,EAAOwU,YAAcxU,EAAO2K,WAAW,GAAGhG,UAC5C,CAEA,OAAIr8D,EAAOmsE,QAAUzU,EAAOmQ,MACnBnQ,EAAOkT,QAAQ,EAAGtxE,EAAO4wE,EAAcE,GAGzC1S,EAAOkT,QAAQlT,EAAOiP,YAAcoF,EAAWzyE,EAAO4wE,EAAcE,EAC7E,EHlBEgC,UIVa,SAAmB9yE,EAAQ9G,KAAKwN,OAAO1G,MAAO4wE,GAAe,EAAME,GAChF,MAAM1S,EAASllE,MACT,OACJwN,EAAM,UACNqqE,EAAS,SACTtH,EAAQ,WACRC,EAAU,aACVT,EAAY,QACZjkC,GACEo5B,EACJ,IAAKp5B,EAAS,OAAOo5B,EAErB,GAAI13D,EAAOyoE,KAAM,CACf,GAAI4B,GAAarqE,EAAOgsE,kBAAmB,OAAO,EAClDtU,EAAOuU,UAEPvU,EAAOwU,YAAcxU,EAAO2K,WAAW,GAAGhG,UAC5C,CAIA,SAASpS,EAAU/5D,GACjB,OAAIA,EAAM,GAAWC,KAAKmD,MAAMnD,KAAKguC,IAAIjuC,IAClCC,KAAKmD,MAAMpD,EACpB,CAEA,MAAM66E,EAAsB9gB,EAPVsY,EAAe7K,EAAOuH,WAAavH,EAAOuH,WAQtDoN,EAAqBtJ,EAASz0D,KAAIpe,GAAO+5D,EAAU/5D,KACzD,IAAIo8E,EAAWvJ,EAASsJ,EAAmBp6E,QAAQ84E,GAAuB,GAE1E,QAAwB,IAAbuB,GAA4BtsE,EAAO6jE,QAAS,CACrD,IAAI0I,EACJxJ,EAAS/5E,SAAQ,CAACu8E,EAAMG,KAClBqF,GAAuBxF,IAEzBgH,EAAgB7G,EAClB,SAG2B,IAAlB6G,IACTD,EAAWvJ,EAASwJ,EAAgB,EAAIA,EAAgB,EAAIA,GAEhE,CAEA,IAAIC,EAAY,EAYhB,QAVwB,IAAbF,IACTE,EAAYxJ,EAAW/wE,QAAQq6E,GAC3BE,EAAY,IAAGA,EAAY9U,EAAOiP,YAAc,GAEvB,SAAzB3mE,EAAOi3D,eAAsD,IAA1Bj3D,EAAO2kE,gBAAwB3kE,EAAO6rE,qBAC3EW,EAAYA,EAAY9U,EAAOoU,qBAAqB,YAAY,GAAQ,EACxEU,EAAYr8E,KAAKkD,IAAIm5E,EAAW,KAIhCxsE,EAAOmsE,QAAUzU,EAAOkQ,YAAa,CACvC,MAAMjnB,EAAY+W,EAAO13D,OAAO0iE,SAAWhL,EAAO13D,OAAO0iE,QAAQpkC,SAAWo5B,EAAOgL,QAAUhL,EAAOgL,QAAQE,OAAO3uE,OAAS,EAAIyjE,EAAOkL,OAAO3uE,OAAS,EACvJ,OAAOyjE,EAAOkT,QAAQjqB,EAAWrnD,EAAO4wE,EAAcE,EACxD,CAEA,OAAO1S,EAAOkT,QAAQ4B,EAAWlzE,EAAO4wE,EAAcE,EACxD,EJnDEqC,WKXa,SAAoBnzE,EAAQ9G,KAAKwN,OAAO1G,MAAO4wE,GAAe,EAAME,GAEjF,OADe53E,KACDo4E,QADCp4E,KACcm0E,YAAartE,EAAO4wE,EAAcE,EACjE,ELSEsC,eMZa,SAAwBpzE,EAAQ9G,KAAKwN,OAAO1G,MAAO4wE,GAAe,EAAME,EAAUvmE,EAAY,IAC3G,MAAM6zD,EAASllE,KACf,IAAIsM,EAAQ44D,EAAOiP,YACnB,MAAMyC,EAAOj5E,KAAKkK,IAAIq9D,EAAO13D,OAAO4kE,mBAAoB9lE,GAClD4mE,EAAY0D,EAAOj5E,KAAKmD,OAAOwL,EAAQsqE,GAAQ1R,EAAO13D,OAAO2kE,gBAC7D1F,EAAYvH,EAAO6K,aAAe7K,EAAOuH,WAAavH,EAAOuH,UAEnE,GAAIA,GAAavH,EAAOqL,SAAS2C,GAAY,CAG3C,MAAMiH,EAAcjV,EAAOqL,SAAS2C,GAGhCzG,EAAY0N,GAFCjV,EAAOqL,SAAS2C,EAAY,GAEHiH,GAAe9oE,IACvD/E,GAAS44D,EAAO13D,OAAO2kE,eAE3B,KAAO,CAGL,MAAM2H,EAAW5U,EAAOqL,SAAS2C,EAAY,GAGzCzG,EAAYqN,IAFI5U,EAAOqL,SAAS2C,GAEO4G,GAAYzoE,IACrD/E,GAAS44D,EAAO13D,OAAO2kE,eAE3B,CAIA,OAFA7lE,EAAQ3O,KAAKkD,IAAIyL,EAAO,GACxBA,EAAQ3O,KAAKkK,IAAIyE,EAAO44D,EAAOsL,WAAW/uE,OAAS,GAC5CyjE,EAAOkT,QAAQ9rE,EAAOxF,EAAO4wE,EAAcE,EACpD,ENjBEV,oBOZa,WACb,MAAMhS,EAASllE,MACT,OACJwN,EAAM,WACNqiE,GACE3K,EACET,EAAyC,SAAzBj3D,EAAOi3D,cAA2BS,EAAOoU,uBAAyB9rE,EAAOi3D,cAC/F,IACIgR,EADA2E,EAAelV,EAAO+R,aAG1B,GAAIzpE,EAAOyoE,KAAM,CACf,GAAI/Q,EAAO2S,UAAW,OACtBpC,EAAY13E,SAAS,GAAEmnE,EAAO8R,cAAclzE,KAAK,2BAA4B,IAEzE0J,EAAO4jE,eACLgJ,EAAelV,EAAOgU,aAAezU,EAAgB,GAAK2V,EAAelV,EAAOkL,OAAO3uE,OAASyjE,EAAOgU,aAAezU,EAAgB,GACxIS,EAAOuU,UACPW,EAAevK,EAAWruE,SAAS,IAAIgM,EAAO6iE,uCAAuCoF,YAAoBjoE,EAAO0oE,wBAAwBj4C,GAAG,GAAG3xB,QAC9I,IAAS,KACP44D,EAAOkT,QAAQgC,EAAa,KAG9BlV,EAAOkT,QAAQgC,GAERA,EAAelV,EAAOkL,OAAO3uE,OAASgjE,GAC/CS,EAAOuU,UACPW,EAAevK,EAAWruE,SAAS,IAAIgM,EAAO6iE,uCAAuCoF,YAAoBjoE,EAAO0oE,wBAAwBj4C,GAAG,GAAG3xB,QAC9I,IAAS,KACP44D,EAAOkT,QAAQgC,EAAa,KAG9BlV,EAAOkT,QAAQgC,EAEnB,MACElV,EAAOkT,QAAQgC,EAEnB,GCnCA,UACEC,WCFa,WACb,MAAMnV,EAASllE,KACT7H,EAAW,MACX,OACJqV,EAAM,WACNqiE,GACE3K,EAEEoV,EAAYzK,EAAWruE,WAAWC,OAAS,EAAI,GAAEouE,EAAWruE,WAAW,GAAGO,YAAc8tE,EAC9FyK,EAAU94E,SAAS,IAAIgM,EAAO6iE,cAAc7iE,EAAO0oE,uBAAuBn6E,SAC1E,IAAIq0E,EAASkK,EAAU94E,SAAS,IAAIgM,EAAO6iE,cAE3C,GAAI7iE,EAAO+sE,uBAAwB,CACjC,MAAMC,EAAiBhtE,EAAO2kE,eAAiB/B,EAAO3uE,OAAS+L,EAAO2kE,eAEtE,GAAIqI,IAAmBhtE,EAAO2kE,eAAgB,CAC5C,IAAK,IAAI95E,EAAI,EAAGA,EAAImiF,EAAgBniF,GAAK,EAAG,CAC1C,MAAMoiF,EAAY,GAAEtiF,EAASiD,cAAc,QAAQgK,SAAS,GAAGoI,EAAO6iE,cAAc7iE,EAAOktE,mBAC3FJ,EAAU1sE,OAAO6sE,EACnB,CAEArK,EAASkK,EAAU94E,SAAS,IAAIgM,EAAO6iE,aACzC,CACF,CAE6B,SAAzB7iE,EAAOi3D,eAA6Bj3D,EAAO0rE,eAAc1rE,EAAO0rE,aAAe9I,EAAO3uE,QAC1FyjE,EAAOgU,aAAev7E,KAAKu2E,KAAKrnE,WAAWW,EAAO0rE,cAAgB1rE,EAAOi3D,cAAe,KACxFS,EAAOgU,cAAgB1rE,EAAOmtE,qBAE1BzV,EAAOgU,aAAe9I,EAAO3uE,QAAUyjE,EAAO13D,OAAOotE,oBACvD1V,EAAOgU,aAAe9I,EAAO3uE,QAG/B,MAAMo5E,EAAgB,GAChBC,EAAe,GACrB1K,EAAOvmE,MAAK,CAAC/J,EAAIwM,KACD,GAAExM,GACVgE,KAAK,0BAA2BwI,EAAM,IAG9C,IAAK,IAAIjU,EAAI,EAAGA,EAAI6sE,EAAOgU,aAAc7gF,GAAK,EAAG,CAC/C,MAAMiU,EAAQjU,EAAIsF,KAAKmD,MAAMzI,EAAI+3E,EAAO3uE,QAAU2uE,EAAO3uE,OACzDq5E,EAAa32E,KAAKisE,EAAOnyC,GAAG3xB,GAAO,IACnCuuE,EAAcha,QAAQuP,EAAOnyC,GAAGmyC,EAAO3uE,OAAS6K,EAAQ,GAAG,GAC7D,CAEA,IAAK,IAAIjU,EAAI,EAAGA,EAAIyiF,EAAar5E,OAAQpJ,GAAK,EAC5CiiF,EAAU1sE,OAAO,GAAEktE,EAAaziF,GAAG0iF,WAAU,IAAO31E,SAASoI,EAAO0oE,sBAGtE,IAAK,IAAI79E,EAAIwiF,EAAcp5E,OAAS,EAAGpJ,GAAK,EAAGA,GAAK,EAClDiiF,EAAUtnC,QAAQ,GAAE6nC,EAAcxiF,GAAG0iF,WAAU,IAAO31E,SAASoI,EAAO0oE,qBAE1E,EDlDEuD,QELa,WACb,MAAMvU,EAASllE,KACfklE,EAAOjlD,KAAK,iBACZ,MAAM,YACJk0D,EAAW,OACX/D,EAAM,aACN8I,EAAY,eACZP,EAAc,eACdD,EAAc,SACdnI,EACAR,aAAcv6C,GACZ0vC,EACJ,IAAI+T,EACJ/T,EAAOyT,gBAAiB,EACxBzT,EAAOwT,gBAAiB,EACxB,MACMsC,GADiBzK,EAAS4D,GACHjP,EAAO56C,eAEpC,GAAI6pD,EAAc+E,EAAc,CAC9BD,EAAW7I,EAAO3uE,OAAwB,EAAfy3E,EAAmB/E,EAC9C8E,GAAYC,EACShU,EAAOkT,QAAQa,EAAU,GAAG,GAAO,IAE3B,IAAT+B,GAClB9V,EAAOmS,cAAc7hD,GAAO0vC,EAAOuH,UAAYvH,EAAOuH,WAAauO,EAEvE,MAAO,GAAI7G,GAAe/D,EAAO3uE,OAASy3E,EAAc,CAEtDD,GAAY7I,EAAO3uE,OAAS0yE,EAAc+E,EAC1CD,GAAYC,EACShU,EAAOkT,QAAQa,EAAU,GAAG,GAAO,IAE3B,IAAT+B,GAClB9V,EAAOmS,cAAc7hD,GAAO0vC,EAAOuH,UAAYvH,EAAOuH,WAAauO,EAEvE,CAEA9V,EAAOyT,eAAiBA,EACxBzT,EAAOwT,eAAiBA,EACxBxT,EAAOjlD,KAAK,UACd,EFlCEg7D,YGNa,WACb,MACM,WACJpL,EAAU,OACVriE,EAAM,OACN4iE,GAJapwE,KAMf6vE,EAAWruE,SAAS,IAAIgM,EAAO6iE,cAAc7iE,EAAO0oE,wBAAwB1oE,EAAO6iE,cAAc7iE,EAAOktE,mBAAmB3+E,SAC3Hq0E,EAAOl2C,WAAW,0BACpB,GCWe,SAAS,GAAal8B,GACnC,MAAMknE,EAASllE,KACT7H,EAAW,KACXM,EAAS,KACTpC,EAAO6uE,EAAOgW,iBACd,OACJ1tE,EAAM,QACNg+B,EAAO,QACPM,GACEo5B,EACJ,IAAKp5B,EAAS,OAEd,GAAIo5B,EAAO2S,WAAarqE,EAAOsqE,+BAC7B,QAGG5S,EAAO2S,WAAarqE,EAAO6jE,SAAW7jE,EAAOyoE,MAChD/Q,EAAOuU,UAGT,IAAIlgF,EAAIyE,EACJzE,EAAE4hF,gBAAe5hF,EAAIA,EAAE4hF,eAC3B,IAAIC,EAAY,GAAE7hF,EAAE+I,QAEpB,GAAiC,YAA7BkL,EAAO6tE,oBACJD,EAAUzmD,QAAQuwC,EAAOwH,WAAWjrE,OAAQ,OAInD,GADApL,EAAKilF,aAA0B,eAAX/hF,EAAEqX,MACjBva,EAAKilF,cAAgB,UAAW/hF,GAAiB,IAAZA,EAAEg6B,MAAa,OACzD,IAAKl9B,EAAKilF,cAAgB,WAAY/hF,GAAKA,EAAEwS,OAAS,EAAG,OACzD,GAAI1V,EAAKklF,WAAallF,EAAKmlF,QAAS,OAEpC,MAAMC,IAAyBjuE,EAAOkuE,gBAA4C,KAA1BluE,EAAOkuE,eAEzDC,EAAY39E,EAAM49E,aAAe59E,EAAM49E,eAAiB59E,EAAM+yD,KAEhE0qB,GAAwBliF,EAAE+I,QAAU/I,EAAE+I,OAAOu5E,YAAcF,IAC7DP,EAAY,GAAEO,EAAU,KAG1B,MAAMG,EAAoBtuE,EAAOsuE,kBAAoBtuE,EAAOsuE,kBAAoB,IAAItuE,EAAOkuE,iBACrFK,KAAoBxiF,EAAE+I,SAAU/I,EAAE+I,OAAOu5E,YAE/C,GAAIruE,EAAOwuE,YAAcD,EA5D3B,SAAwBhjF,EAAU0gD,EAAOz5C,MAavC,OAZA,SAASi8E,EAAcn8E,GACrB,IAAKA,GAAMA,IAAO,MAAiBA,IAAO,KAAa,OAAO,KAC1DA,EAAGo8E,eAAcp8E,EAAKA,EAAGo8E,cAC7B,MAAMrR,EAAQ/qE,EAAG60B,QAAQ57B,GAEzB,OAAK8xE,GAAU/qE,EAAGq8E,YAIXtR,GAASoR,EAAcn8E,EAAGq8E,cAAcriB,MAHtC,IAIX,CAEOmiB,CAAcxiC,EACvB,CA8C4C2iC,CAAeN,EAAmBV,EAAU,IAAMA,EAAUzmD,QAAQmnD,GAAmB,IAE/H,YADA5W,EAAOmX,YAAa,GAItB,GAAI7uE,EAAO8uE,eACJlB,EAAUzmD,QAAQnnB,EAAO8uE,cAAc,GAAI,OAGlD9wC,EAAQ+wC,SAAsB,eAAXhjF,EAAEqX,KAAwBrX,EAAEijF,cAAc,GAAG/wC,MAAQlyC,EAAEkyC,MAC1ED,EAAQixC,SAAsB,eAAXljF,EAAEqX,KAAwBrX,EAAEijF,cAAc,GAAG3gC,MAAQtiD,EAAEsiD,MAC1E,MAAM6gC,EAASlxC,EAAQ+wC,SACjBI,EAASnxC,EAAQixC,SAEjBG,EAAqBpvE,EAAOovE,oBAAsBpvE,EAAOqvE,sBACzDC,EAAqBtvE,EAAOsvE,oBAAsBtvE,EAAOuvE,sBAE/D,GAAIH,IAAuBF,GAAUI,GAAsBJ,GAAUjkF,EAAO6a,WAAawpE,GAAqB,CAC5G,GAA2B,YAAvBF,EAGF,OAFA5+E,EAAMC,gBAIV,CAiBA,GAfA1G,OAAOC,OAAOnB,EAAM,CAClBklF,WAAW,EACXC,SAAS,EACTwB,qBAAqB,EACrB1qD,iBAAax7B,EACbmmF,iBAAanmF,IAEf00C,EAAQkxC,OAASA,EACjBlxC,EAAQmxC,OAASA,EACjBtmF,EAAK6mF,eAAiB,KACtBhY,EAAOmX,YAAa,EACpBnX,EAAOqK,aACPrK,EAAOiY,oBAAiBrmF,EACpB0W,EAAO6D,UAAY,IAAGhb,EAAK+mF,oBAAqB,GAErC,eAAX7jF,EAAEqX,KAAuB,CAC3B,IAAI3S,GAAiB,EAEjBm9E,EAAUv3E,GAAGxN,EAAK8gD,qBACpBl5C,GAAiB,EAEa,WAA1Bm9E,EAAU,GAAG57D,WACfnpB,EAAKklF,WAAY,IAIjBpjF,EAASmG,eAAiB,GAAEnG,EAASmG,eAAeuF,GAAGxN,EAAK8gD,oBAAsBh/C,EAASmG,gBAAkB88E,EAAU,IACzHjjF,EAASmG,cAAck2C,OAGzB,MAAM6oC,EAAuBp/E,GAAkBinE,EAAOoY,gBAAkB9vE,EAAO+vE,0BAE1E/vE,EAAOgwE,gCAAiCH,GAA0BjC,EAAU,GAAGqC,mBAClFlkF,EAAE0E,gBAEN,CAEIinE,EAAO13D,OAAOk3D,UAAYQ,EAAO13D,OAAOk3D,SAAS54B,SAAWo5B,EAAOR,UAAYQ,EAAO2S,YAAcrqE,EAAO6jE,SAC7GnM,EAAOR,SAAS94B,eAGlBs5B,EAAOjlD,KAAK,aAAc1mB,EAC5B,CChIe,SAAS,GAAYyE,GAClC,MAAM7F,EAAW,KACX+sE,EAASllE,KACT3J,EAAO6uE,EAAOgW,iBACd,OACJ1tE,EAAM,QACNg+B,EACAukC,aAAcv6C,EAAG,QACjBsW,GACEo5B,EACJ,IAAKp5B,EAAS,OACd,IAAIvyC,EAAIyE,EAGR,GAFIzE,EAAE4hF,gBAAe5hF,EAAIA,EAAE4hF,gBAEtB9kF,EAAKklF,UAKR,YAJIllF,EAAK4mF,aAAe5mF,EAAKi8B,aAC3B4yC,EAAOjlD,KAAK,oBAAqB1mB,IAMrC,GAAIlD,EAAKilF,cAA2B,cAAX/hF,EAAEqX,KAAsB,OACjD,MAAM8sE,EAAyB,cAAXnkF,EAAEqX,MAAwBrX,EAAEijF,gBAAkBjjF,EAAEijF,cAAc,IAAMjjF,EAAE8yC,eAAe,IACnGZ,EAAmB,cAAXlyC,EAAEqX,KAAuB8sE,EAAYjyC,MAAQlyC,EAAEkyC,MACvDoQ,EAAmB,cAAXtiD,EAAEqX,KAAuB8sE,EAAY7hC,MAAQtiD,EAAEsiD,MAE7D,GAAItiD,EAAEokF,wBAGJ,OAFAnyC,EAAQkxC,OAASjxC,OACjBD,EAAQmxC,OAAS9gC,GAInB,IAAKqpB,EAAOoY,eAeV,OAdK,GAAE/jF,EAAE+I,QAAQuB,GAAGxN,EAAK8gD,qBACvB+tB,EAAOmX,YAAa,QAGlBhmF,EAAKklF,YACPhkF,OAAOC,OAAOg0C,EAAS,CACrBkxC,OAAQjxC,EACRkxC,OAAQ9gC,EACR0gC,SAAU9wC,EACVgxC,SAAU5gC,IAEZxlD,EAAK6mF,eAAiB,OAM1B,GAAI7mF,EAAKilF,cAAgB9tE,EAAOowE,sBAAwBpwE,EAAOyoE,KAC7D,GAAI/Q,EAAOsK,cAET,GAAI3zB,EAAQrQ,EAAQmxC,QAAUzX,EAAOuH,WAAavH,EAAOiQ,gBAAkBt5B,EAAQrQ,EAAQmxC,QAAUzX,EAAOuH,WAAavH,EAAOyP,eAG9H,OAFAt+E,EAAKklF,WAAY,OACjBllF,EAAKmlF,SAAU,QAGZ,GAAI/vC,EAAQD,EAAQkxC,QAAUxX,EAAOuH,WAAavH,EAAOiQ,gBAAkB1pC,EAAQD,EAAQkxC,QAAUxX,EAAOuH,WAAavH,EAAOyP,eACrI,OAIJ,GAAIt+E,EAAKilF,cAAgBnjF,EAASmG,eAC5B/E,EAAE+I,SAAWnK,EAASmG,eAAiB,GAAE/E,EAAE+I,QAAQuB,GAAGxN,EAAK8gD,mBAG7D,OAFA9gD,EAAKmlF,SAAU,OACftW,EAAOmX,YAAa,GASxB,GAJIhmF,EAAK2mF,qBACP9X,EAAOjlD,KAAK,YAAa1mB,GAGvBA,EAAEijF,eAAiBjjF,EAAEijF,cAAc/6E,OAAS,EAAG,OACnD+pC,EAAQ+wC,SAAW9wC,EACnBD,EAAQixC,SAAW5gC,EACnB,MAAMgiC,EAAQryC,EAAQ+wC,SAAW/wC,EAAQkxC,OACnCoB,EAAQtyC,EAAQixC,SAAWjxC,EAAQmxC,OACzC,GAAIzX,EAAO13D,OAAO6D,WAAa1T,KAAKwnC,KAAK04C,GAAS,EAAIC,GAAS,GAAK5Y,EAAO13D,OAAO6D,UAAW,OAE7F,QAAgC,IAArBhb,EAAKi8B,YAA6B,CAC3C,IAAIyrD,EAEA7Y,EAAOv7C,gBAAkB6hB,EAAQixC,WAAajxC,EAAQmxC,QAAUzX,EAAOsK,cAAgBhkC,EAAQ+wC,WAAa/wC,EAAQkxC,OACtHrmF,EAAKi8B,aAAc,EAGfurD,EAAQA,EAAQC,EAAQA,GAAS,KACnCC,EAA4D,IAA/CpgF,KAAKqgF,MAAMrgF,KAAKguC,IAAImyC,GAAQngF,KAAKguC,IAAIkyC,IAAgBlgF,KAAKqvE,GACvE32E,EAAKi8B,YAAc4yC,EAAOv7C,eAAiBo0D,EAAavwE,EAAOuwE,WAAa,GAAKA,EAAavwE,EAAOuwE,WAG3G,CAYA,GAVI1nF,EAAKi8B,aACP4yC,EAAOjlD,KAAK,oBAAqB1mB,QAGH,IAArBlD,EAAK4mF,cACVzxC,EAAQ+wC,WAAa/wC,EAAQkxC,QAAUlxC,EAAQixC,WAAajxC,EAAQmxC,SACtEtmF,EAAK4mF,aAAc,IAInB5mF,EAAKi8B,YAEP,YADAj8B,EAAKklF,WAAY,GAInB,IAAKllF,EAAK4mF,YACR,OAGF/X,EAAOmX,YAAa,GAEf7uE,EAAO6jE,SAAW93E,EAAEsvD,YACvBtvD,EAAE0E,iBAGAuP,EAAOywE,2BAA6BzwE,EAAO0wE,QAC7C3kF,EAAEsvC,kBAGCxyC,EAAKmlF,UACJhuE,EAAOyoE,OAASzoE,EAAO6jE,SACzBnM,EAAOuU,UAGTpjF,EAAK8nF,eAAiBjZ,EAAO56C,eAC7B46C,EAAO6O,cAAc,GAEjB7O,EAAO2S,WACT3S,EAAO2K,WAAWzpE,QAAQ,qCAG5B/P,EAAK+nF,qBAAsB,GAEvB5wE,EAAO6wE,aAAyC,IAA1BnZ,EAAOwT,iBAAqD,IAA1BxT,EAAOyT,gBACjEzT,EAAOoZ,eAAc,GAGvBpZ,EAAOjlD,KAAK,kBAAmB1mB,IAGjC2rE,EAAOjlD,KAAK,aAAc1mB,GAC1BlD,EAAKmlF,SAAU,EACf,IAAIR,EAAO9V,EAAOv7C,eAAiBk0D,EAAQC,EAC3CtyC,EAAQwvC,KAAOA,EACfA,GAAQxtE,EAAO+wE,WACX/oD,IAAKwlD,GAAQA,GACjB9V,EAAOiY,eAAiBnC,EAAO,EAAI,OAAS,OAC5C3kF,EAAK+gF,iBAAmB4D,EAAO3kF,EAAK8nF,eACpC,IAAIK,GAAsB,EACtBC,EAAkBjxE,EAAOixE,gBAgC7B,GA9BIjxE,EAAOowE,sBACTa,EAAkB,GAGhBzD,EAAO,GAAK3kF,EAAK+gF,iBAAmBlS,EAAOyP,gBAC7C6J,GAAsB,EAClBhxE,EAAOkxE,aAAYroF,EAAK+gF,iBAAmBlS,EAAOyP,eAAiB,IAAMzP,EAAOyP,eAAiBt+E,EAAK8nF,eAAiBnD,IAASyD,IAC3HzD,EAAO,GAAK3kF,EAAK+gF,iBAAmBlS,EAAOiQ,iBACpDqJ,GAAsB,EAClBhxE,EAAOkxE,aAAYroF,EAAK+gF,iBAAmBlS,EAAOiQ,eAAiB,GAAKjQ,EAAOiQ,eAAiB9+E,EAAK8nF,eAAiBnD,IAASyD,IAGjID,IACFjlF,EAAEokF,yBAA0B,IAIzBzY,EAAOwT,gBAA4C,SAA1BxT,EAAOiY,gBAA6B9mF,EAAK+gF,iBAAmB/gF,EAAK8nF,iBAC7F9nF,EAAK+gF,iBAAmB/gF,EAAK8nF,iBAG1BjZ,EAAOyT,gBAA4C,SAA1BzT,EAAOiY,gBAA6B9mF,EAAK+gF,iBAAmB/gF,EAAK8nF,iBAC7F9nF,EAAK+gF,iBAAmB/gF,EAAK8nF,gBAG1BjZ,EAAOyT,gBAAmBzT,EAAOwT,iBACpCriF,EAAK+gF,iBAAmB/gF,EAAK8nF,gBAI3B3wE,EAAO6D,UAAY,EAAG,CACxB,KAAI1T,KAAKguC,IAAIqvC,GAAQxtE,EAAO6D,WAAahb,EAAK+mF,oBAW5C,YADA/mF,EAAK+gF,iBAAmB/gF,EAAK8nF,gBAT7B,IAAK9nF,EAAK+mF,mBAMR,OALA/mF,EAAK+mF,oBAAqB,EAC1B5xC,EAAQkxC,OAASlxC,EAAQ+wC,SACzB/wC,EAAQmxC,OAASnxC,EAAQixC,SACzBpmF,EAAK+gF,iBAAmB/gF,EAAK8nF,oBAC7B3yC,EAAQwvC,KAAO9V,EAAOv7C,eAAiB6hB,EAAQ+wC,SAAW/wC,EAAQkxC,OAASlxC,EAAQixC,SAAWjxC,EAAQmxC,OAO5G,CAEKnvE,EAAOmxE,eAAgBnxE,EAAO6jE,WAE/B7jE,EAAOk3D,UAAYl3D,EAAOk3D,SAAS54B,SAAWo5B,EAAOR,UAAYl3D,EAAOo3D,uBAC1EM,EAAOoR,oBACPpR,EAAOsQ,uBAGLtQ,EAAO13D,OAAOk3D,UAAYl3D,EAAOk3D,SAAS54B,SAAWo5B,EAAOR,UAC9DQ,EAAOR,SAASr5B,cAIlB65B,EAAO8P,eAAe3+E,EAAK+gF,kBAE3BlS,EAAOmS,aAAahhF,EAAK+gF,kBAC3B,CC7Ne,SAAS,GAAWp5E,GACjC,MAAMknE,EAASllE,KACT3J,EAAO6uE,EAAOgW,iBACd,OACJ1tE,EAAM,QACNg+B,EACAukC,aAAcv6C,EAAG,WACjBg7C,EAAU,QACV1kC,GACEo5B,EACJ,IAAKp5B,EAAS,OACd,IAAIvyC,EAAIyE,EASR,GARIzE,EAAE4hF,gBAAe5hF,EAAIA,EAAE4hF,eAEvB9kF,EAAK2mF,qBACP9X,EAAOjlD,KAAK,WAAY1mB,GAG1BlD,EAAK2mF,qBAAsB,GAEtB3mF,EAAKklF,UAOR,OANIllF,EAAKmlF,SAAWhuE,EAAO6wE,YACzBnZ,EAAOoZ,eAAc,GAGvBjoF,EAAKmlF,SAAU,OACfnlF,EAAK4mF,aAAc,GAKjBzvE,EAAO6wE,YAAchoF,EAAKmlF,SAAWnlF,EAAKklF,aAAwC,IAA1BrW,EAAOwT,iBAAqD,IAA1BxT,EAAOyT,iBACnGzT,EAAOoZ,eAAc,GAIvB,MAAMM,EAAe,KACfC,EAAWD,EAAevoF,EAAK6mF,eAErC,GAAIhY,EAAOmX,WAAY,CACrB,MAAMyC,EAAWvlF,EAAEw3D,MAAQx3D,EAAEqiF,cAAgBriF,EAAEqiF,eAC/C1W,EAAO4R,mBAAmBgI,GAAYA,EAAS,IAAMvlF,EAAE+I,QACvD4iE,EAAOjlD,KAAK,YAAa1mB,GAErBslF,EAAW,KAAOD,EAAevoF,EAAK0oF,cAAgB,KACxD7Z,EAAOjlD,KAAK,wBAAyB1mB,EAEzC,CAOA,GALAlD,EAAK0oF,cAAgB,KACrB,IAAS,KACF7Z,EAAO8J,YAAW9J,EAAOmX,YAAa,EAAI,KAG5ChmF,EAAKklF,YAAcllF,EAAKmlF,UAAYtW,EAAOiY,gBAAmC,IAAjB3xC,EAAQwvC,MAAc3kF,EAAK+gF,mBAAqB/gF,EAAK8nF,eAIrH,OAHA9nF,EAAKklF,WAAY,EACjBllF,EAAKmlF,SAAU,OACfnlF,EAAK4mF,aAAc,GAOrB,IAAI+B,EAQJ,GAXA3oF,EAAKklF,WAAY,EACjBllF,EAAKmlF,SAAU,EACfnlF,EAAK4mF,aAAc,EAIjB+B,EADExxE,EAAOmxE,aACInpD,EAAM0vC,EAAOuH,WAAavH,EAAOuH,WAEhCp2E,EAAK+gF,iBAGjB5pE,EAAO6jE,QACT,OAGF,GAAInM,EAAO13D,OAAOk3D,UAAYl3D,EAAOk3D,SAAS54B,QAI5C,YAHAo5B,EAAOR,SAASt5B,WAAW,CACzB4zC,eAMJ,IAAIC,EAAY,EACZC,EAAYha,EAAOuL,gBAAgB,GAEvC,IAAK,IAAIp4E,EAAI,EAAGA,EAAIm4E,EAAW/uE,OAAQpJ,GAAKA,EAAImV,EAAO4kE,mBAAqB,EAAI5kE,EAAO2kE,eAAgB,CACrG,MAAMoH,EAAYlhF,EAAImV,EAAO4kE,mBAAqB,EAAI,EAAI5kE,EAAO2kE,oBAExB,IAA9B3B,EAAWn4E,EAAIkhF,GACpByF,GAAcxO,EAAWn4E,IAAM2mF,EAAaxO,EAAWn4E,EAAIkhF,KAC7D0F,EAAY5mF,EACZ6mF,EAAY1O,EAAWn4E,EAAIkhF,GAAa/I,EAAWn4E,IAE5C2mF,GAAcxO,EAAWn4E,KAClC4mF,EAAY5mF,EACZ6mF,EAAY1O,EAAWA,EAAW/uE,OAAS,GAAK+uE,EAAWA,EAAW/uE,OAAS,GAEnF,CAEA,IAAI09E,EAAmB,KACnBC,EAAkB,KAElB5xE,EAAOmsE,SACLzU,EAAOkQ,YACTgK,EAAkBla,EAAO13D,OAAO0iE,SAAWhL,EAAO13D,OAAO0iE,QAAQpkC,SAAWo5B,EAAOgL,QAAUhL,EAAOgL,QAAQE,OAAO3uE,OAAS,EAAIyjE,EAAOkL,OAAO3uE,OAAS,EAC9IyjE,EAAOmQ,QAChB8J,EAAmB,IAKvB,MAAME,GAASL,EAAaxO,EAAWyO,IAAcC,EAC/C3F,EAAY0F,EAAYzxE,EAAO4kE,mBAAqB,EAAI,EAAI5kE,EAAO2kE,eAEzE,GAAI0M,EAAWrxE,EAAO8xE,aAAc,CAElC,IAAK9xE,EAAO+xE,WAEV,YADAra,EAAOkT,QAAQlT,EAAOiP,aAIM,SAA1BjP,EAAOiY,iBACLkC,GAAS7xE,EAAOgyE,gBAAiBta,EAAOkT,QAAQ5qE,EAAOmsE,QAAUzU,EAAOmQ,MAAQ8J,EAAmBF,EAAY1F,GAAgBrU,EAAOkT,QAAQ6G,IAGtH,SAA1B/Z,EAAOiY,iBACLkC,EAAQ,EAAI7xE,EAAOgyE,gBACrBta,EAAOkT,QAAQ6G,EAAY1F,GACE,OAApB6F,GAA4BC,EAAQ,GAAK1hF,KAAKguC,IAAI0zC,GAAS7xE,EAAOgyE,gBAC3Eta,EAAOkT,QAAQgH,GAEfla,EAAOkT,QAAQ6G,GAGrB,KAAO,CAEL,IAAKzxE,EAAOiyE,YAEV,YADAva,EAAOkT,QAAQlT,EAAOiP,aAIEjP,EAAOJ,aAAevrE,EAAE+I,SAAW4iE,EAAOJ,WAAWC,QAAUxrE,EAAE+I,SAAW4iE,EAAOJ,WAAWE,QAU7GzrE,EAAE+I,SAAW4iE,EAAOJ,WAAWC,OACxCG,EAAOkT,QAAQ6G,EAAY1F,GAE3BrU,EAAOkT,QAAQ6G,IAVe,SAA1B/Z,EAAOiY,gBACTjY,EAAOkT,QAA6B,OAArB+G,EAA4BA,EAAmBF,EAAY1F,GAG9C,SAA1BrU,EAAOiY,gBACTjY,EAAOkT,QAA4B,OAApBgH,EAA2BA,EAAkBH,GAOlE,CACF,CChKe,SAASS,KACtB,MAAMxa,EAASllE,MACT,OACJwN,EAAM,GACN1N,GACEolE,EACJ,GAAIplE,GAAyB,IAAnBA,EAAGrE,YAAmB,OAE5B+R,EAAOmkE,aACTzM,EAAOya,gBAIT,MAAM,eACJjH,EAAc,eACdC,EAAc,SACdpI,GACErL,EAEJA,EAAOwT,gBAAiB,EACxBxT,EAAOyT,gBAAiB,EACxBzT,EAAOqK,aACPrK,EAAOuK,eACPvK,EAAOsQ,uBAEuB,SAAzBhoE,EAAOi3D,eAA4Bj3D,EAAOi3D,cAAgB,IAAMS,EAAOmQ,QAAUnQ,EAAOkQ,cAAgBlQ,EAAO13D,OAAO4jE,eACzHlM,EAAOkT,QAAQlT,EAAOkL,OAAO3uE,OAAS,EAAG,GAAG,GAAO,GAEnDyjE,EAAOkT,QAAQlT,EAAOiP,YAAa,GAAG,GAAO,GAG3CjP,EAAO0a,UAAY1a,EAAO0a,SAAS9/D,SAAWolD,EAAO0a,SAASp4B,QAChE0d,EAAO0a,SAAS7/D,MAIlBmlD,EAAOyT,eAAiBA,EACxBzT,EAAOwT,eAAiBA,EAEpBxT,EAAO13D,OAAO6lE,eAAiB9C,IAAarL,EAAOqL,UACrDrL,EAAOoO,eAEX,CC1Ce,SAASuM,GAAQtmF,GAC9B,MAAM2rE,EAASllE,KACVklE,EAAOp5B,UAEPo5B,EAAOmX,aACNnX,EAAO13D,OAAOsyE,eAAevmF,EAAE0E,iBAE/BinE,EAAO13D,OAAOuyE,0BAA4B7a,EAAO2S,YACnDt+E,EAAEsvC,kBACFtvC,EAAEq1C,6BAGR,CCZe,SAASoxC,KACtB,MAAM9a,EAASllE,MACT,UACJ0sE,EAAS,aACTqD,EAAY,QACZjkC,GACEo5B,EACJ,IAAKp5B,EAAS,OAad,IAAIyrC,EAZJrS,EAAOsS,kBAAoBtS,EAAOuH,UAE9BvH,EAAOv7C,eACTu7C,EAAOuH,WAAaC,EAAUrkE,WAE9B68D,EAAOuH,WAAaC,EAAUlwE,UAIP,IAArB0oE,EAAOuH,YAAiBvH,EAAOuH,UAAY,GAC/CvH,EAAOoR,oBACPpR,EAAOsQ,sBAEP,MAAMN,EAAiBhQ,EAAOiQ,eAAiBjQ,EAAOyP,eAGpD4C,EADqB,IAAnBrC,EACY,GAEChQ,EAAOuH,UAAYvH,EAAOyP,gBAAkBO,EAGzDqC,IAAgBrS,EAAOznE,UACzBynE,EAAO8P,eAAejF,GAAgB7K,EAAOuH,UAAYvH,EAAOuH,WAGlEvH,EAAOjlD,KAAK,eAAgBilD,EAAOuH,WAAW,EAChD,CC3BA,IAAIwT,IAAqB,EAEzB,SAASC,KAAsB,CAE/B,MAAM9wE,GAAS,CAAC81D,EAAQn2D,KACtB,MAAM5W,EAAW,MACX,OACJqV,EAAM,YACN2yE,EAAW,GACXrgF,EAAE,UACF4sE,EAAS,OACToB,EAAM,QACNZ,GACEhI,EACEvyC,IAAYnlB,EAAO0wE,OACnBkC,EAAuB,OAAXrxE,EAAkB,mBAAqB,sBACnDsxE,EAAetxE,EAErB,GAAKm+D,EAAQI,MAIN,CACL,MAAME,IAAwC,eAAtB2S,EAAY/iF,QAA0B8vE,EAAQM,kBAAmBhgE,EAAO8yE,mBAAmB,CACjHznF,SAAS,EACT85B,SAAS,GAEX7yB,EAAGsgF,GAAWD,EAAY/iF,MAAO8nE,EAAOt5B,aAAc4hC,GACtD1tE,EAAGsgF,GAAWD,EAAYjlC,KAAMgqB,EAAO75B,YAAa6hC,EAAQM,gBAAkB,CAC5E30E,SAAS,EACT85B,WACEA,GACJ7yB,EAAGsgF,GAAWD,EAAYrqD,IAAKovC,EAAO95B,WAAYoiC,GAE9C2S,EAAY3iB,QACd19D,EAAGsgF,GAAWD,EAAY3iB,OAAQ0H,EAAO95B,WAAYoiC,EAEzD,MAlBE1tE,EAAGsgF,GAAWD,EAAY/iF,MAAO8nE,EAAOt5B,cAAc,GACtDzzC,EAASioF,GAAWD,EAAYjlC,KAAMgqB,EAAO75B,YAAa1Y,GAC1Dx6B,EAASioF,GAAWD,EAAYrqD,IAAKovC,EAAO95B,YAAY,IAmBtD59B,EAAOsyE,eAAiBtyE,EAAOuyE,2BACjCjgF,EAAGsgF,GAAW,QAASlb,EAAO2a,SAAS,GAGrCryE,EAAO6jE,SACT3E,EAAU0T,GAAW,SAAUlb,EAAO8a,UAIpCxyE,EAAO+yE,qBACTrb,EAAOmb,GAAcvS,EAAOC,KAAOD,EAAOE,QAAU,0CAA4C,wBAAyB0R,IAAU,GAEnIxa,EAAOmb,GAAc,iBAAkBX,IAAU,EACnD,EAiCF,UACEc,aA/BF,WACE,MAAMtb,EAASllE,KACT7H,EAAW,MACX,OACJqV,EAAM,QACN0/D,GACEhI,EACJA,EAAOt5B,aAAe,QAAkBs5B,GACxCA,EAAO75B,YAAc,QAAiB65B,GACtCA,EAAO95B,WAAa,QAAgB85B,GAEhC13D,EAAO6jE,UACTnM,EAAO8a,SAAWA,GAASv4D,KAAKy9C,IAGlCA,EAAO2a,QAAUA,GAAQp4D,KAAKy9C,GAE1BgI,EAAQI,QAAU2S,KACpB9nF,EAASC,iBAAiB,aAAc8nF,IACxCD,IAAqB,GAGvB7wE,GAAO81D,EAAQ,KACjB,EASEub,aAPF,WAEErxE,GADepP,KACA,MACjB,GCzFM0gF,GAAgB,CAACxb,EAAQ13D,IACtB03D,EAAOqM,MAAQ/jE,EAAO+jE,MAAQ/jE,EAAO+jE,KAAK1yD,KAAO,ECD1D,UACE8gE,cDGa,WACb,MAAMza,EAASllE,MACT,YACJm0E,EAAW,YACXh8B,EAAW,aACX+gC,EAAe,EAAC,OAChB1rE,EAAM,IACNe,GACE22D,EACEyM,EAAcnkE,EAAOmkE,YAC3B,IAAKA,GAAeA,GAAmD,IAApCp6E,OAAO6mB,KAAKuzD,GAAalwE,OAAc,OAE1E,MAAMk/E,EAAazb,EAAO0b,cAAcjP,EAAazM,EAAO13D,OAAOqzE,gBAAiB3b,EAAOplE,IAC3F,IAAK6gF,GAAczb,EAAO4b,oBAAsBH,EAAY,OAC5D,MACMI,GADuBJ,KAAchP,EAAcA,EAAYgP,QAAc7pF,IAClCouE,EAAO8b,eAClDC,EAAcP,GAAcxb,EAAQ13D,GACpC0zE,EAAaR,GAAcxb,EAAQ6b,GACnCI,EAAa3zE,EAAOs+B,QAEtBm1C,IAAgBC,GAClB3yE,EAAIwsB,YAAY,GAAGvtB,EAAOimE,8BAA8BjmE,EAAOimE,qCAC/DvO,EAAOkc,yBACGH,GAAeC,IACzB3yE,EAAInJ,SAAS,GAAGoI,EAAOimE,+BAEnBsN,EAAiBxP,KAAK8P,MAAuC,WAA/BN,EAAiBxP,KAAK8P,OAAsBN,EAAiBxP,KAAK8P,MAA6B,WAArB7zE,EAAO+jE,KAAK8P,OACtH9yE,EAAInJ,SAAS,GAAGoI,EAAOimE,qCAGzBvO,EAAOkc,wBAIT,CAAC,aAAc,aAAc,aAAa5qF,SAAQoJ,IAChD,MAAM0hF,EAAmB9zE,EAAO5N,IAAS4N,EAAO5N,GAAMksC,QAChDy1C,EAAkBR,EAAiBnhF,IAASmhF,EAAiBnhF,GAAMksC,QAErEw1C,IAAqBC,GACvBrc,EAAOtlE,GAAM4hF,WAGVF,GAAoBC,GACvBrc,EAAOtlE,GAAM6hF,QACf,IAEF,MAAMC,EAAmBX,EAAiBplC,WAAaolC,EAAiBplC,YAAcnuC,EAAOmuC,UACvFgmC,EAAcn0E,EAAOyoE,OAAS8K,EAAiBtc,gBAAkBj3D,EAAOi3D,eAAiBid,GAE3FA,GAAoBvpC,GACtB+sB,EAAO0c,kBAGT,GAAO1c,EAAO13D,OAAQuzE,GACtB,MAAMc,EAAY3c,EAAO13D,OAAOs+B,QAChCv0C,OAAOC,OAAO0tE,EAAQ,CACpBoY,eAAgBpY,EAAO13D,OAAO8vE,eAC9B5E,eAAgBxT,EAAO13D,OAAOkrE,eAC9BC,eAAgBzT,EAAO13D,OAAOmrE,iBAG5BwI,IAAeU,EACjB3c,EAAOsc,WACGL,GAAcU,GACxB3c,EAAOuc,SAGTvc,EAAO4b,kBAAoBH,EAC3Bzb,EAAOjlD,KAAK,oBAAqB8gE,GAE7BY,GAAexpC,IACjB+sB,EAAO+V,cACP/V,EAAOmV,aACPnV,EAAOuK,eACPvK,EAAOkT,QAAQjE,EAAc+E,EAAehU,EAAOgU,aAAc,GAAG,IAGtEhU,EAAOjlD,KAAK,aAAc8gE,EAC5B,EChFEH,cCHa,SAAuBjP,EAAal4B,EAAO,SAAUqoC,GAClE,IAAKnQ,GAAwB,cAATl4B,IAAyBqoC,EAAa,OAC1D,IAAInB,GAAa,EACjB,MAAMloF,EAAS,KACTspF,EAAyB,WAATtoC,EAAoBhhD,EAAOoD,YAAcimF,EAAYphF,aACrE4+C,EAAS/nD,OAAO6mB,KAAKuzD,GAAa71D,KAAIkmE,IAC1C,GAAqB,iBAAVA,GAA6C,IAAvBA,EAAMviF,QAAQ,KAAY,CACzD,MAAMwiF,EAAWp1E,WAAWm1E,EAAME,OAAO,IAEzC,MAAO,CACL30E,MAFYw0E,EAAgBE,EAG5BD,QAEJ,CAEA,MAAO,CACLz0E,MAAOy0E,EACPA,QACD,IAEH1iC,EAAO9kC,MAAK,CAACxK,EAAGvR,IAAMV,SAASiS,EAAEzC,MAAO,IAAMxP,SAASU,EAAE8O,MAAO,MAEhE,IAAK,IAAIlV,EAAI,EAAGA,EAAIinD,EAAO79C,OAAQpJ,GAAK,EAAG,CACzC,MAAM,MACJ2pF,EAAK,MACLz0E,GACE+xC,EAAOjnD,GAEE,WAATohD,EACEhhD,EAAOq+B,WAAW,eAAevpB,QAAYqB,UAC/C+xE,EAAaqB,GAENz0E,GAASu0E,EAAYpmF,cAC9BilF,EAAaqB,EAEjB,CAEA,OAAOrB,GAAc,KACvB,GCrCA,UACEwB,WCaa,WACb,MAAMjd,EAASllE,MACT,WACJyoE,EAAU,OACVj7D,EAAM,IACNgoB,EAAG,IACHjnB,EAAG,OACHu/D,EAAM,QACNZ,GACEhI,EAEEkd,EA3BR,SAAwB/1E,EAAS46C,GAC/B,MAAMo7B,EAAgB,GAYtB,OAXAh2E,EAAQ7V,SAAQsiB,IACM,iBAATA,EACTvhB,OAAO6mB,KAAKtF,GAAMtiB,SAAQiyE,IACpB3vD,EAAK2vD,IACP4Z,EAAcl+E,KAAK8iD,EAASwhB,EAC9B,IAEuB,iBAAT3vD,GAChBupE,EAAcl+E,KAAK8iD,EAASnuC,EAC9B,IAEKupE,CACT,CAamBC,CAAe,CAAC,cAAe90E,EAAOmuC,UAAW,CAChE,kBAAmBuxB,EAAQI,OAC1B,CACD,YAAapI,EAAO13D,OAAOk3D,UAAYl3D,EAAOk3D,SAAS54B,SACtD,CACD,WAAct+B,EAAO0lC,YACpB,CACD,IAAO1d,GACN,CACD,KAAQhoB,EAAO+jE,MAAQ/jE,EAAO+jE,KAAK1yD,KAAO,GACzC,CACD,cAAerR,EAAO+jE,MAAQ/jE,EAAO+jE,KAAK1yD,KAAO,GAA0B,WAArBrR,EAAO+jE,KAAK8P,MACjE,CACD,QAAWvT,EAAOE,SACjB,CACD,IAAOF,EAAOC,KACb,CACD,WAAYvgE,EAAO6jE,SAClB,CACD,SAAY7jE,EAAO6jE,SAAW7jE,EAAO4jE,gBACpC,CACD,iBAAkB5jE,EAAOo3D,sBACvBp3D,EAAOimE,wBACXhL,EAAWtkE,QAAQi+E,GACnB7zE,EAAInJ,SAAS,IAAIqjE,GAAY/lE,KAAK,MAClCwiE,EAAOkc,sBACT,EDjDEmB,cEJa,WACb,MACM,IACJh0E,EAAG,WACHk6D,GAHazoE,KAKfuO,EAAIwsB,YAAY0tC,EAAW/lE,KAAK,MALjB1C,KAMRohF,sBACT,GC2BA,MCnCA,IACE/+D,MAAM,EACNs5B,UAAW,aACX0/B,kBAAmB,UACnBmH,aAAc,EACd17E,MAAO,IACPuqE,SAAS,EACTkP,sBAAsB,EACtBkC,gBAAgB,EAChBvE,QAAQ,EACRwE,gBAAgB,EAChB52C,SAAS,EACTqL,kBAAmB,wDAEnBj7C,MAAO,KACPsE,OAAQ,KAERs3E,gCAAgC,EAEhCvzE,UAAW,KACXmuD,IAAK,KAELkqB,oBAAoB,EACpBE,mBAAoB,GAEpB5pC,YAAY,EAEZo/B,gBAAgB,EAEhB6E,kBAAkB,EAElB9E,OAAQ,QAGRV,iBAAa76E,EACb+pF,gBAAiB,SAEjB7P,aAAc,EACdvM,cAAe,EACf0N,eAAgB,EAChBC,mBAAoB,EACpBiH,oBAAoB,EACpBjI,gBAAgB,EAChBuB,sBAAsB,EACtBhC,mBAAoB,EAEpBE,kBAAmB,EAEnB8F,qBAAqB,EACrB3D,0BAA0B,EAE1BK,eAAe,EAEfpB,cAAc,EAEdsM,WAAY,EACZR,WAAY,GACZ4E,eAAe,EACflD,aAAa,EACbF,YAAY,EACZC,gBAAiB,GACjBF,aAAc,IACdX,cAAc,EACdrB,gBAAgB,EAChBjsE,UAAW,EACX4sE,0BAA0B,EAC1BV,0BAA0B,EAC1BC,+BAA+B,EAC/BI,qBAAqB,EAErBgF,mBAAmB,EAEnBlE,YAAY,EACZD,gBAAiB,IAEjB7Z,qBAAqB,EAErByZ,YAAY,EAEZyB,eAAe,EACfC,0BAA0B,EAC1B7I,qBAAqB,EAErB2L,eAAe,EACfC,qBAAqB,EAErB7M,MAAM,EACN0E,qBAAsB,EACtBzB,aAAc,KACd0B,mBAAmB,EACnBL,wBAAwB,EACxBf,mBAAmB,EAEnBG,QAAQ,EAERhB,gBAAgB,EAChBD,gBAAgB,EAChB4D,aAAc,KAEdN,WAAW,EACXN,eAAgB,oBAChBI,kBAAmB,KAEnBwE,kBAAkB,EAClB3M,wBAAyB,GAEzBF,uBAAwB,UAExBpD,WAAY,eACZqK,gBAAiB,+BACjB/E,iBAAkB,sBAClBG,0BAA2B,gCAC3BvB,kBAAmB,uBACnB2B,oBAAqB,yBACrBN,eAAgB,oBAChBG,wBAAyB,8BACzBF,eAAgB,oBAChBG,wBAAyB,8BACzB+M,aAAc,iBAEdlM,oBAAoB,EAEpBmM,cAAc,GCzHD,SAASC,GAAmBz1E,EAAQ01E,GACjD,OAAO,SAAsB7yE,EAAM,CAAC,GAClC,MAAM8yE,EAAkB5rF,OAAO6mB,KAAK/N,GAAK,GACnC+yE,EAAe/yE,EAAI8yE,GAEG,iBAAjBC,GAA8C,OAAjBA,GAKpC,CAAC,aAAc,aAAc,aAAa3jF,QAAQ0jF,IAAoB,IAAiC,IAA5B31E,EAAO21E,KACpF31E,EAAO21E,GAAmB,CACxBE,MAAM,IAIJF,KAAmB31E,GAAU,YAAa41E,IAKhB,IAA5B51E,EAAO21E,KACT31E,EAAO21E,GAAmB,CACxBr3C,SAAS,IAI0B,iBAA5Bt+B,EAAO21E,IAAmC,YAAa31E,EAAO21E,KACvE31E,EAAO21E,GAAiBr3C,SAAU,GAG/Bt+B,EAAO21E,KAAkB31E,EAAO21E,GAAmB,CACtDr3C,SAAS,IAEX,GAAOo3C,EAAkB7yE,IAjBvB,GAAO6yE,EAAkB7yE,IAXzB,GAAO6yE,EAAkB7yE,EA6B7B,CACF,CCdA,MAAMizE,GAAa,CACjBC,cAAa,GACbx7B,OAAM,GACN0kB,UAAS,GACTzkD,WCxBF,CACE+rD,cCJa,SAAuB/2E,EAAUs6E,GAC9C,MAAMpS,EAASllE,KAEVklE,EAAO13D,OAAO6jE,SACjBnM,EAAO2K,WAAW7nD,WAAWhrB,GAG/BkoE,EAAOjlD,KAAK,gBAAiBjjB,EAAUs6E,EACzC,EDHEsB,gBEJa,SAAyBlB,GAAe,EAAM/7B,GAC3D,MAAMupB,EAASllE,MACT,OACJwN,GACE03D,EACA13D,EAAO6jE,UAEP7jE,EAAO0lC,YACTgyB,EAAO0O,mBAGTuE,GAAe,CACbjT,SACAwS,eACA/7B,YACA1B,KAAM,UAEV,EFZEqvB,cGLa,SAAuBoO,GAAe,EAAM/7B,GACzD,MAAMupB,EAASllE,MACT,OACJwN,GACE03D,EACJA,EAAO2S,WAAY,EACfrqE,EAAO6jE,UACXnM,EAAO6O,cAAc,GACrBoE,GAAe,CACbjT,SACAwS,eACA/7B,YACA1B,KAAM,QAEV,GJaE23B,MAAK,GACLqE,KAAI,GACJoI,WK5BF,CACEC,cCHa,SAAuBkF,GACpC,MAAMte,EAASllE,KACf,GAAIklE,EAAOgI,QAAQI,QAAUpI,EAAO13D,OAAOm1E,eAAiBzd,EAAO13D,OAAO6lE,eAAiBnO,EAAOue,UAAYve,EAAO13D,OAAO6jE,QAAS,OACrI,MAAMvxE,EAAyC,cAApColE,EAAO13D,OAAO6tE,kBAAoCnW,EAAOplE,GAAKolE,EAAOwH,UAChF5sE,EAAGrF,MAAMipF,OAAS,OAClB5jF,EAAGrF,MAAMipF,OAASF,EAAS,WAAa,MAC1C,EDFEG,gBEJa,WACb,MAAMze,EAASllE,KAEXklE,EAAOgI,QAAQI,OAASpI,EAAO13D,OAAO6lE,eAAiBnO,EAAOue,UAAYve,EAAO13D,OAAO6jE,UAI5FnM,EAA2C,cAApCA,EAAO13D,OAAO6tE,kBAAoC,KAAO,aAAa5gF,MAAMipF,OAAS,GAC9F,GPuBEt0E,OAAM,GACNuiE,YAAW,GACX2B,cHEF,CACEA,cApCF,WACE,MAAMpO,EAASllE,MAEbyjF,SAAUG,EAAS,OACnBp2E,GACE03D,GACE,mBACJyL,GACEnjE,EAEJ,GAAImjE,EAAoB,CACtB,MAAMkT,EAAiB3e,EAAOkL,OAAO3uE,OAAS,EACxCqiF,EAAqB5e,EAAOsL,WAAWqT,GAAkB3e,EAAOuL,gBAAgBoT,GAAuC,EAArBlT,EACxGzL,EAAOue,SAAWve,EAAO7xD,KAAOywE,CAClC,MACE5e,EAAOue,SAAsC,IAA3Bve,EAAOqL,SAAS9uE,QAGN,IAA1B+L,EAAOkrE,iBACTxT,EAAOwT,gBAAkBxT,EAAOue,WAGJ,IAA1Bj2E,EAAOmrE,iBACTzT,EAAOyT,gBAAkBzT,EAAOue,UAG9BG,GAAaA,IAAc1e,EAAOue,WACpCve,EAAOmQ,OAAQ,GAGbuO,IAAc1e,EAAOue,UACvBve,EAAOjlD,KAAKilD,EAAOue,SAAW,OAAS,SAE3C,GGCE1vB,QAAO,GACP/jB,OQjCF,CACE+zC,UCDa,SAAmBC,EAAS99E,EAAK+f,EAAQg+D,EAAOC,EAAkBz9E,GAC/E,MAAMhO,EAAS,KACf,IAAI03C,EAEJ,SAASg0C,IACH19E,GAAUA,GAChB,CAEkB,GAAEu9E,GAAS5kD,OAAO,WAAW,IAE3B4kD,EAAQ79E,UAAa+9E,EAsBvCC,IArBIj+E,GACFiqC,EAAQ,IAAI13C,EAAOssB,MACnBorB,EAAMi0C,OAASD,EACfh0C,EAAM2sB,QAAUqnB,EAEZF,IACF9zC,EAAM8zC,MAAQA,GAGZh+D,IACFkqB,EAAMlqB,OAASA,GAGb/f,IACFiqC,EAAMjqC,IAAMA,IAGdi+E,GAMN,EDhCEtB,cEJa,WACb,MAAM3d,EAASllE,KAGf,SAASmkF,IACH,MAAOjf,GAA8CA,IAAUA,EAAO8J,iBAC9Cl4E,IAAxBouE,EAAOmf,eAA4Bnf,EAAOmf,cAAgB,GAE1Dnf,EAAOmf,eAAiBnf,EAAOof,aAAa7iF,SAC1CyjE,EAAO13D,OAAOs1E,qBAAqB5d,EAAOnd,SAC9Cmd,EAAOjlD,KAAK,gBAEhB,CAVAilD,EAAOof,aAAepf,EAAO32D,IAAIxW,KAAK,OAYtC,IAAK,IAAIM,EAAI,EAAGA,EAAI6sE,EAAOof,aAAa7iF,OAAQpJ,GAAK,EAAG,CACtD,MAAM2rF,EAAU9e,EAAOof,aAAajsF,GACpC6sE,EAAO6e,UAAUC,EAASA,EAAQ5+D,YAAc4+D,EAAQnmF,aAAa,OAAQmmF,EAAQ/9D,QAAU+9D,EAAQnmF,aAAa,UAAWmmF,EAAQC,OAASD,EAAQnmF,aAAa,UAAU,EAAMsmF,EACvL,CACF,IVmBMI,GAAmB,CAAC,EAE1B,MAAMn2E,GACJyO,eAAelN,GACb,IAAI7P,EACA0N,EAYJ,GAVoB,IAAhBmC,EAAKlO,QAAgBkO,EAAK,GAAGkN,aAAwE,WAAzDtlB,OAAOoK,UAAUkM,SAASjM,KAAK+N,EAAK,IAAIvO,MAAM,GAAI,GAChGoM,EAASmC,EAAK,IAEb7P,EAAI0N,GAAUmC,EAGZnC,IAAQA,EAAS,CAAC,GACvBA,EAAS,GAAO,CAAC,EAAGA,GAChB1N,IAAO0N,EAAO1N,KAAI0N,EAAO1N,GAAKA,GAE9B0N,EAAO1N,IAAM,GAAE0N,EAAO1N,IAAI2B,OAAS,EAAG,CACxC,MAAM+iF,EAAU,GAQhB,OAPA,GAAEh3E,EAAO1N,IAAI+J,MAAKi4E,IAChB,MAAMp0E,EAAY,GAAO,CAAC,EAAGF,EAAQ,CACnC1N,GAAIgiF,IAEN0C,EAAQrgF,KAAK,IAAIiK,GAAOV,GAAW,IAG9B82E,CACT,CAGA,MAAMtf,EAASllE,KACfklE,EAAOgH,YAAa,EACpBhH,EAAOgI,QAAUE,KACjBlI,EAAO4I,OAASH,GAAU,CACxBppE,UAAWiJ,EAAOjJ,YAEpB2gE,EAAOuf,QAAU/V,KACjBxJ,EAAO6J,gBAAkB,CAAC,EAC1B7J,EAAOkK,mBAAqB,GAC5BlK,EAAO30C,QAAU,IAAI20C,EAAOwf,aAExBl3E,EAAO+iB,SAAW7uB,MAAM4O,QAAQ9C,EAAO+iB,UACzC20C,EAAO30C,QAAQpsB,QAAQqJ,EAAO+iB,SAGhC,MAAM2yD,EAAmB,CAAC,EAC1Bhe,EAAO30C,QAAQ/5B,SAAQmuF,IACrBA,EAAI,CACFzf,SACA0f,aAAc3B,GAAmBz1E,EAAQ01E,GACzC15E,GAAI07D,EAAO17D,GAAGie,KAAKy9C,GACnB31D,KAAM21D,EAAO31D,KAAKkY,KAAKy9C,GACvBj7D,IAAKi7D,EAAOj7D,IAAIwd,KAAKy9C,GACrBjlD,KAAMilD,EAAOjlD,KAAKwH,KAAKy9C,IACvB,IAGJ,MAAM2f,EAAe,GAAO,CAAC,EAAG,GAAU3B,GAkH1C,OAhHAhe,EAAO13D,OAAS,GAAO,CAAC,EAAGq3E,EAAcN,GAAkB/2E,GAC3D03D,EAAO8b,eAAiB,GAAO,CAAC,EAAG9b,EAAO13D,QAC1C03D,EAAO4f,aAAe,GAAO,CAAC,EAAGt3E,GAE7B03D,EAAO13D,QAAU03D,EAAO13D,OAAOhE,IACjCjS,OAAO6mB,KAAK8mD,EAAO13D,OAAOhE,IAAIhT,SAAQ0Y,IACpCg2D,EAAO17D,GAAG0F,EAAWg2D,EAAO13D,OAAOhE,GAAG0F,GAAW,IAIjDg2D,EAAO13D,QAAU03D,EAAO13D,OAAO2hE,OACjCjK,EAAOiK,MAAMjK,EAAO13D,OAAO2hE,OAI7BjK,EAAO9hE,EAAI,GAEX7L,OAAOC,OAAO0tE,EAAQ,CACpBp5B,QAASo5B,EAAO13D,OAAOs+B,QACvBhsC,KAEA2oE,WAAY,GAEZ2H,OAAQ,KACRI,WAAY,GACZD,SAAU,GACVE,gBAAiB,GAGjB9mD,aAAY,IACyB,eAA5Bu7C,EAAO13D,OAAOmuC,UAGvB6zB,WAAU,IAC2B,aAA5BtK,EAAO13D,OAAOmuC,UAIvBw4B,YAAa,EACbsB,UAAW,EAEXL,aAAa,EACbC,OAAO,EAEP5I,UAAW,EACX+K,kBAAmB,EACnB/5E,SAAU,EACVsnF,SAAU,EACVlN,WAAW,EAEXa,eAAgBxT,EAAO13D,OAAOkrE,eAC9BC,eAAgBzT,EAAO13D,OAAOmrE,eAE9BwH,YAAa,WACX,MAAM7S,EAAQ,CAAC,aAAc,YAAa,WAAY,eAChD0X,EAAU,CAAC,cAAe,cAAe,aAY/C,OAXA9f,EAAO+f,iBAAmB,CACxB7nF,MAAOkwE,EAAM,GACbpyB,KAAMoyB,EAAM,GACZx3C,IAAKw3C,EAAM,GACX9P,OAAQ8P,EAAM,IAEhBpI,EAAOggB,mBAAqB,CAC1B9nF,MAAO4nF,EAAQ,GACf9pC,KAAM8pC,EAAQ,GACdlvD,IAAKkvD,EAAQ,IAER9f,EAAOgI,QAAQI,QAAUpI,EAAO13D,OAAOm1E,cAAgBzd,EAAO+f,iBAAmB/f,EAAOggB,kBACjG,CAfa,GAgBbhK,gBAAiB,CACfK,eAAWzkF,EACX0kF,aAAS1kF,EACTkmF,yBAAqBlmF,EACrBomF,oBAAgBpmF,EAChBw7B,iBAAax7B,EACbsgF,sBAAkBtgF,EAClBqnF,oBAAgBrnF,EAChBsmF,wBAAoBtmF,EAEpBqgD,kBAAmB+tB,EAAO13D,OAAO2pC,kBAEjC4nC,cAAe,KACfoG,kBAAcruF,EAEdsuF,WAAY,GACZhH,yBAAqBtnF,EACrBwkF,kBAAcxkF,EACdmmF,iBAAanmF,GAGfulF,YAAY,EAEZiB,eAAgBpY,EAAO13D,OAAO8vE,eAC9B9xC,QAAS,CACPkxC,OAAQ,EACRC,OAAQ,EACRJ,SAAU,EACVE,SAAU,EACVzB,KAAM,GAGRsJ,aAAc,GACdD,aAAc,IAEhBnf,EAAOjlD,KAAK,WAERilD,EAAO13D,OAAO6U,MAChB6iD,EAAO7iD,OAKF6iD,CACT,CAEAuc,SACE,MAAMvc,EAASllE,KACXklE,EAAOp5B,UACXo5B,EAAOp5B,SAAU,EAEbo5B,EAAO13D,OAAO6wE,YAChBnZ,EAAOoZ,gBAGTpZ,EAAOjlD,KAAK,UACd,CAEAuhE,UACE,MAAMtc,EAASllE,KACVklE,EAAOp5B,UACZo5B,EAAOp5B,SAAU,EAEbo5B,EAAO13D,OAAO6wE,YAChBnZ,EAAOye,kBAGTze,EAAOjlD,KAAK,WACd,CAEAolE,YAAY5nF,EAAUqJ,GACpB,MAAMo+D,EAASllE,KACfvC,EAAWE,KAAKkK,IAAIlK,KAAKkD,IAAIpD,EAAU,GAAI,GAC3C,MAAMoK,EAAMq9D,EAAOyP,eAEbr6E,GADM4qE,EAAOiQ,eACIttE,GAAOpK,EAAWoK,EACzCq9D,EAAOuS,YAAYn9E,OAA0B,IAAVwM,EAAwB,EAAIA,GAC/Do+D,EAAOoR,oBACPpR,EAAOsQ,qBACT,CAEA4L,uBACE,MAAMlc,EAASllE,KACf,IAAKklE,EAAO13D,OAAOw1E,eAAiB9d,EAAOplE,GAAI,OAC/C,MAAMwlF,EAAMpgB,EAAOplE,GAAGzI,UAAUoL,MAAM,KAAK6K,QAAOjW,GACT,IAAhCA,EAAUoI,QAAQ,WAA+E,IAA5DpI,EAAUoI,QAAQylE,EAAO13D,OAAOimE,0BAE9EvO,EAAOjlD,KAAK,oBAAqBqlE,EAAI5iF,KAAK,KAC5C,CAEA6iF,gBAAgBC,GACd,MAAMtgB,EAASllE,KACf,OAAIklE,EAAO8J,UAAkB,GACtBwW,EAAQnuF,UAAUoL,MAAM,KAAK6K,QAAOjW,GACI,IAAtCA,EAAUoI,QAAQ,iBAAyE,IAAhDpI,EAAUoI,QAAQylE,EAAO13D,OAAO6iE,cACjF3tE,KAAK,IACV,CAEA2zE,oBACE,MAAMnR,EAASllE,KACf,IAAKklE,EAAO13D,OAAOw1E,eAAiB9d,EAAOplE,GAAI,OAC/C,MAAM2lF,EAAU,GAChBvgB,EAAOkL,OAAOvmE,MAAK27E,IACjB,MAAM/c,EAAavD,EAAOqgB,gBAAgBC,GAC1CC,EAAQthF,KAAK,CACXqhF,UACA/c,eAEFvD,EAAOjlD,KAAK,cAAeulE,EAAS/c,EAAW,IAEjDvD,EAAOjlD,KAAK,gBAAiBwlE,EAC/B,CAEAnM,qBAAqBoM,EAAO,UAAWC,GAAQ,GAC7C,MACM,OACJn4E,EAAM,OACN4iE,EAAM,WACNI,EAAU,gBACVC,EACAp9D,KAAMy8D,EAAU,YAChBqE,GAPan0E,KASf,IAAI4lF,EAAM,EAEV,GAAIp4E,EAAO4jE,eAAgB,CACzB,IACIyU,EADArU,EAAYpB,EAAO+D,GAAajC,gBAGpC,IAAK,IAAI75E,EAAI87E,EAAc,EAAG97E,EAAI+3E,EAAO3uE,OAAQpJ,GAAK,EAChD+3E,EAAO/3E,KAAOwtF,IAChBrU,GAAapB,EAAO/3E,GAAG65E,gBACvB0T,GAAO,EACHpU,EAAY1B,IAAY+V,GAAY,IAI5C,IAAK,IAAIxtF,EAAI87E,EAAc,EAAG97E,GAAK,EAAGA,GAAK,EACrC+3E,EAAO/3E,KAAOwtF,IAChBrU,GAAapB,EAAO/3E,GAAG65E,gBACvB0T,GAAO,EACHpU,EAAY1B,IAAY+V,GAAY,GAG9C,MAEE,GAAa,YAATH,EACF,IAAK,IAAIrtF,EAAI87E,EAAc,EAAG97E,EAAI+3E,EAAO3uE,OAAQpJ,GAAK,EAAG,EACnCstF,EAAQnV,EAAWn4E,GAAKo4E,EAAgBp4E,GAAKm4E,EAAW2D,GAAerE,EAAaU,EAAWn4E,GAAKm4E,EAAW2D,GAAerE,KAGhJ8V,GAAO,EAEX,MAGA,IAAK,IAAIvtF,EAAI87E,EAAc,EAAG97E,GAAK,EAAGA,GAAK,EAAG,CACxBm4E,EAAW2D,GAAe3D,EAAWn4E,GAAKy3E,IAG5D8V,GAAO,EAEX,CAIJ,OAAOA,CACT,CAEA79B,SACE,MAAMmd,EAASllE,KACf,IAAKklE,GAAUA,EAAO8J,UAAW,OACjC,MAAM,SACJuB,EAAQ,OACR/iE,GACE03D,EAWJ,SAASmS,IACP,MAAMyO,EAAiB5gB,EAAO6K,cAAmC,EAApB7K,EAAOuH,UAAiBvH,EAAOuH,UACtEsL,EAAep6E,KAAKkK,IAAIlK,KAAKkD,IAAIilF,EAAgB5gB,EAAOiQ,gBAAiBjQ,EAAOyP,gBACtFzP,EAAOmS,aAAaU,GACpB7S,EAAOoR,oBACPpR,EAAOsQ,qBACT,CAEA,IAAIuQ,EAjBAv4E,EAAOmkE,aACTzM,EAAOya,gBAGTza,EAAOqK,aACPrK,EAAOuK,eACPvK,EAAO8P,iBACP9P,EAAOsQ,sBAYHtQ,EAAO13D,OAAOk3D,UAAYQ,EAAO13D,OAAOk3D,SAAS54B,SACnDurC,IAEInS,EAAO13D,OAAO0lC,YAChBgyB,EAAO0O,qBAIPmS,GADmC,SAAhC7gB,EAAO13D,OAAOi3D,eAA4BS,EAAO13D,OAAOi3D,cAAgB,IAAMS,EAAOmQ,QAAUnQ,EAAO13D,OAAO4jE,eACnGlM,EAAOkT,QAAQlT,EAAOkL,OAAO3uE,OAAS,EAAG,GAAG,GAAO,GAEnDyjE,EAAOkT,QAAQlT,EAAOiP,YAAa,GAAG,GAAO,GAGvD4R,GACH1O,KAIA7pE,EAAO6lE,eAAiB9C,IAAarL,EAAOqL,UAC9CrL,EAAOoO,gBAGTpO,EAAOjlD,KAAK,SACd,CAEA2hE,gBAAgBoE,EAAcC,GAAa,GACzC,MAAM/gB,EAASllE,KACTkmF,EAAmBhhB,EAAO13D,OAAOmuC,UAOvC,OALKqqC,IAEHA,EAAoC,eAArBE,EAAoC,WAAa,cAG9DF,IAAiBE,GAAqC,eAAjBF,GAAkD,aAAjBA,IAI1E9gB,EAAO32D,IAAIwsB,YAAY,GAAGmqC,EAAO13D,OAAOimE,yBAAyByS,KAAoB9gF,SAAS,GAAG8/D,EAAO13D,OAAOimE,yBAAyBuS,KACxI9gB,EAAOkc,uBACPlc,EAAO13D,OAAOmuC,UAAYqqC,EAC1B9gB,EAAOkL,OAAOvmE,MAAK27E,IACI,aAAjBQ,EACFR,EAAQ/qF,MAAMyB,MAAQ,GAEtBspF,EAAQ/qF,MAAM+F,OAAS,EACzB,IAEF0kE,EAAOjlD,KAAK,mBACRgmE,GAAY/gB,EAAOnd,UAddmd,CAgBX,CAEAihB,wBAAwBxqC,GACtB,MAAMupB,EAASllE,KACXklE,EAAO1vC,KAAqB,QAAdmmB,IAAwBupB,EAAO1vC,KAAqB,QAAdmmB,IACxDupB,EAAO1vC,IAAoB,QAAdmmB,EACbupB,EAAO6K,aAA2C,eAA5B7K,EAAO13D,OAAOmuC,WAA8BupB,EAAO1vC,IAErE0vC,EAAO1vC,KACT0vC,EAAO32D,IAAInJ,SAAS,GAAG8/D,EAAO13D,OAAOimE,6BACrCvO,EAAOplE,GAAGyrC,IAAM,QAEhB25B,EAAO32D,IAAIwsB,YAAY,GAAGmqC,EAAO13D,OAAOimE,6BACxCvO,EAAOplE,GAAGyrC,IAAM,OAGlB25B,EAAOnd,SACT,CAEAq+B,MAAMtmF,GACJ,MAAMolE,EAASllE,KACf,GAAIklE,EAAOmhB,QAAS,OAAO,EAE3B,MAAM93E,EAAM,GAAEzO,GAAMolE,EAAO13D,OAAO1N,IAGlC,KAFAA,EAAKyO,EAAI,IAGP,OAAO,EAGTzO,EAAGolE,OAASA,EAEZ,MAAMohB,EAAqB,IAClB,KAAKphB,EAAO13D,OAAOu1E,cAAgB,IAAIv2E,OAAO/J,MAAM,KAAKC,KAAK,OAoBvE,IAAImtE,EAjBe,MACjB,GAAI/vE,GAAMA,EAAG+7E,YAAc/7E,EAAG+7E,WAAW3iF,cAAe,CACtD,MAAM8uE,EAAM,GAAEloE,EAAG+7E,WAAW3iF,cAAcotF,MAI1C,OAFAte,EAAIxmE,SAAW9C,GAAW6P,EAAI/M,SAAS9C,GAEhCspE,CACT,CAEA,OAAKz5D,EAAI/M,SAIF+M,EAAI/M,SAAS8kF,KAHX,GAAE/3E,GAAK/M,SAAS8kF,IAGgB,EAI1BC,GAEjB,GAA0B,IAAtB1W,EAAWpuE,QAAgByjE,EAAO13D,OAAOk1E,eAAgB,CAC3D,MACMtvC,EADW,KACQh4C,cAAc,OACvCy0E,EAAa,GAAEz8B,GACfA,EAAQ/7C,UAAY6tE,EAAO13D,OAAOu1E,aAClCx0E,EAAIX,OAAOwlC,GACX7kC,EAAI/M,SAAS,IAAI0jE,EAAO13D,OAAO6iE,cAAcxmE,MAAK27E,IAChD3V,EAAWjiE,OAAO43E,EAAQ,GAE9B,CAaA,OAXAjuF,OAAOC,OAAO0tE,EAAQ,CACpB32D,MACAzO,KACA+vE,aACAnD,UAAWmD,EAAW,GACtBwW,SAAS,EAET7wD,IAA8B,QAAzB11B,EAAGyrC,IAAItnC,eAAoD,QAAzBsK,EAAI9J,IAAI,aAC/CsrE,aAA0C,eAA5B7K,EAAO13D,OAAOmuC,YAAwD,QAAzB77C,EAAGyrC,IAAItnC,eAAoD,QAAzBsK,EAAI9J,IAAI,cACrGurE,SAAwC,gBAA9BH,EAAWprE,IAAI,cAEpB,CACT,CAEA4d,KAAKviB,GACH,MAAMolE,EAASllE,KACf,GAAIklE,EAAO/sB,YAAa,OAAO+sB,EAE/B,OAAgB,IADAA,EAAOkhB,MAAMtmF,KAE7BolE,EAAOjlD,KAAK,cAERilD,EAAO13D,OAAOmkE,aAChBzM,EAAOya,gBAITza,EAAOid,aAEHjd,EAAO13D,OAAOyoE,MAChB/Q,EAAOmV,aAITnV,EAAOqK,aAEPrK,EAAOuK,eAEHvK,EAAO13D,OAAO6lE,eAChBnO,EAAOoO,gBAILpO,EAAO13D,OAAO6wE,YAAcnZ,EAAOp5B,SACrCo5B,EAAOoZ,gBAGLpZ,EAAO13D,OAAOq1E,eAChB3d,EAAO2d,gBAIL3d,EAAO13D,OAAOyoE,KAChB/Q,EAAOkT,QAAQlT,EAAO13D,OAAOg1E,aAAetd,EAAOgU,aAAc,EAAGhU,EAAO13D,OAAOqpE,oBAAoB,GAAO,GAE7G3R,EAAOkT,QAAQlT,EAAO13D,OAAOg1E,aAAc,EAAGtd,EAAO13D,OAAOqpE,oBAAoB,GAAO,GAIzF3R,EAAOsb,eAEPtb,EAAO/sB,aAAc,EAErB+sB,EAAOjlD,KAAK,QACZilD,EAAOjlD,KAAK,cA7CkBilD,CA+ChC,CAEAp7D,QAAQ08E,GAAiB,EAAMC,GAAc,GAC3C,MAAMvhB,EAASllE,MACT,OACJwN,EAAM,IACNe,EAAG,WACHshE,EAAU,OACVO,GACElL,EAEJ,YAA6B,IAAlBA,EAAO13D,QAA0B03D,EAAO8J,YAInD9J,EAAOjlD,KAAK,iBAEZilD,EAAO/sB,aAAc,EAErB+sB,EAAOub,eAEHjzE,EAAOyoE,MACT/Q,EAAO+V,cAILwL,IACFvhB,EAAOqd,gBACPh0E,EAAI2rB,WAAW,SACf21C,EAAW31C,WAAW,SAElBk2C,GAAUA,EAAO3uE,QACnB2uE,EAAOr1C,YAAY,CAACvtB,EAAO+mE,kBAAmB/mE,EAAOmoE,iBAAkBnoE,EAAOooE,eAAgBpoE,EAAOqoE,gBAAgBnzE,KAAK,MAAMw3B,WAAW,SAASA,WAAW,4BAInKgrC,EAAOjlD,KAAK,WAEZ1oB,OAAO6mB,KAAK8mD,EAAO6J,iBAAiBv4E,SAAQ0Y,IAC1Cg2D,EAAOj7D,IAAIiF,EAAU,KAGA,IAAnBs3E,IACFthB,EAAO32D,IAAI,GAAG22D,OAAS,KlDxkB7B,SAAqB70D,GACnB,MAAMkqB,EAASlqB,EACf9Y,OAAO6mB,KAAKmc,GAAQ/jC,SAAQmX,IAC1B,IACE4sB,EAAO5sB,GAAO,IAEhB,CADE,MAAOpU,GACT,CAEA,WACSghC,EAAO5sB,EAEhB,CADE,MAAOpU,GACT,IAEJ,CkD4jBMmtF,CAAYxhB,IAGdA,EAAO8J,WAAY,GAnCV,IAqCX,CAEApxB,sBAAsB+oC,GACpB,GAAOpC,GAAkBoC,EAC3B,CAEWpC,8BACT,OAAOA,EACT,CAEW93D,sBACT,OAAO,EACT,CAEAmxB,qBAAqB+mC,GACdv2E,GAAOzM,UAAU+iF,cAAat2E,GAAOzM,UAAU+iF,YAAc,IAClE,MAAMn0D,EAAUniB,GAAOzM,UAAU+iF,YAEd,mBAARC,GAAsBp0D,EAAQ9wB,QAAQklF,GAAO,GACtDp0D,EAAQpsB,KAAKwgF,EAEjB,CAEA/mC,WAAWjrC,GACT,OAAIjR,MAAM4O,QAAQqC,IAChBA,EAAOnc,SAAQqpB,GAAKzR,GAAOw4E,cAAc/mE,KAClCzR,KAGTA,GAAOw4E,cAAcj0E,GACdvE,GACT,EAIF7W,OAAO6mB,KAAKklE,IAAY9sF,SAAQqwF,IAC9BtvF,OAAO6mB,KAAKklE,GAAWuD,IAAiBrwF,SAAQswF,IAC9C14E,GAAOzM,UAAUmlF,GAAexD,GAAWuD,GAAgBC,EAAY,GACvE,IAEJ14E,GAAO4kD,IAAI,CWvnBI,UAAgB,OAC7BkS,EAAM,GACN17D,EAAE,KACFyW,IAEA,MAAMxnB,EAAS,KACf,IAAIsuF,EAAW,KACXC,EAAiB,KAErB,MAAMC,EAAgB,KACf/hB,IAAUA,EAAO8J,WAAc9J,EAAO/sB,cAC3Cl4B,EAAK,gBACLA,EAAK,UAAS,EA0CVinE,EAA2B,KAC1BhiB,IAAUA,EAAO8J,WAAc9J,EAAO/sB,aAC3Cl4B,EAAK,oBAAoB,EAG3BzW,EAAG,QAAQ,KACL07D,EAAO13D,OAAOi1E,qBAAmD,IAA1BhqF,EAAO0uF,eA5C7CjiB,IAAUA,EAAO8J,WAAc9J,EAAO/sB,cAC3C4uC,EAAW,IAAII,gBAAe96E,IAC5B26E,EAAiBvuF,EAAO6E,uBAAsB,KAC5C,MAAM,MACJpB,EAAK,OACLsE,GACE0kE,EACJ,IAAIkiB,EAAWlrF,EACX43E,EAAYtzE,EAChB6L,EAAQ7V,SAAQ,EACd6wF,iBACAC,cACAhlF,aAEIA,GAAUA,IAAW4iE,EAAOplE,KAChCsnF,EAAWE,EAAcA,EAAYprF,OAASmrF,EAAe,IAAMA,GAAgBE,WACnFzT,EAAYwT,EAAcA,EAAY9mF,QAAU6mF,EAAe,IAAMA,GAAgBG,UAAS,IAG5FJ,IAAalrF,GAAS43E,IAActzE,GACtCymF,GACF,GACA,IAEJF,EAAS58C,QAAQ+6B,EAAOplE,MAyBxBrH,EAAOL,iBAAiB,SAAU6uF,GAClCxuF,EAAOL,iBAAiB,oBAAqB8uF,GAAyB,IAExE19E,EAAG,WAAW,KAxBRw9E,GACFvuF,EAAO+N,qBAAqBwgF,GAG1BD,GAAYA,EAASU,WAAaviB,EAAOplE,KAC3CinF,EAASU,UAAUviB,EAAOplE,IAC1BinF,EAAW,MAoBbtuF,EAAOgqB,oBAAoB,SAAUwkE,GACrCxuF,EAAOgqB,oBAAoB,oBAAqBykE,EAAyB,GAE7E,ECzEe,UAAkB,OAC/BhiB,EAAM,aACN0f,EAAY,GACZp7E,EAAE,KACFyW,IAEA,MAAMynE,EAAY,GACZjvF,EAAS,KAETkvF,EAAS,CAACrlF,EAAQ5D,EAAU,CAAC,KACjC,MACMqoF,EAAW,IADItuF,EAAOuvC,kBAAoBvvC,EAAOmvF,yBACrBC,IAIhC,GAAyB,IAArBA,EAAUpmF,OAEZ,YADAwe,EAAK,iBAAkB4nE,EAAU,IAInC,MAAMC,EAAiB,WACrB7nE,EAAK,iBAAkB4nE,EAAU,GACnC,EAEIpvF,EAAO6E,sBACT7E,EAAO6E,sBAAsBwqF,GAE7BrvF,EAAO8F,WAAWupF,EAAgB,EACpC,IAEFf,EAAS58C,QAAQ7nC,EAAQ,CACvBnL,gBAA0C,IAAvBuH,EAAQvH,YAAoCuH,EAAQvH,WACvEizC,eAAwC,IAAtB1rC,EAAQ0rC,WAAmC1rC,EAAQ0rC,UACrEC,mBAAgD,IAA1B3rC,EAAQ2rC,eAAuC3rC,EAAQ2rC,gBAE/Eq9C,EAAUvjF,KAAK4iF,EAAS,EA+B1BnC,EAAa,CACXmC,UAAU,EACVgB,gBAAgB,EAChBC,sBAAsB,IAExBx+E,EAAG,QAjCU,KACX,GAAK07D,EAAO13D,OAAOu5E,SAAnB,CAEA,GAAI7hB,EAAO13D,OAAOu6E,eAAgB,CAChC,MAAME,EAAmB/iB,EAAO32D,IAAIy0B,UAEpC,IAAK,IAAI3qC,EAAI,EAAGA,EAAI4vF,EAAiBxmF,OAAQpJ,GAAK,EAChDsvF,EAAOM,EAAiB5vF,GAE5B,CAGAsvF,EAAOziB,EAAO32D,IAAI,GAAI,CACpB67B,UAAW86B,EAAO13D,OAAOw6E,uBAG3BL,EAAOziB,EAAO2K,WAAW,GAAI,CAC3B14E,YAAY,GAhBqB,CAiBjC,IAgBJqS,EAAG,WAba,KACdk+E,EAAUlxF,SAAQuwF,IAChBA,EAASmB,YAAY,IAEvBR,EAAU19E,OAAO,EAAG09E,EAAUjmF,OAAO,GAUzC,IZ+iBA,YaxnBe,SAAS0mF,GAA0BjjB,EAAQ8b,EAAgBxzE,EAAQ46E,GAChF,MAAMjwF,EAAW,KAmBjB,OAjBI+sE,EAAO13D,OAAOk1E,gBAChBnrF,OAAO6mB,KAAKgqE,GAAY5xF,SAAQmX,IAC9B,IAAKH,EAAOG,KAAwB,IAAhBH,EAAO61E,KAAe,CACxC,IAAIlmF,EAAU+nE,EAAO32D,IAAI/M,SAAS,IAAI4mF,EAAWz6E,MAAQ,GAEpDxQ,IACHA,EAAUhF,EAASiD,cAAc,OACjC+B,EAAQ9F,UAAY+wF,EAAWz6E,GAC/Bu3D,EAAO32D,IAAIX,OAAOzQ,IAGpBqQ,EAAOG,GAAOxQ,EACd6jF,EAAerzE,GAAOxQ,CACxB,KAIGqQ,CACT,CCtBe,SAAS,GAAkBumD,EAAU,IAClD,MAAO,IAAIA,EAAQvnD,OAAOrO,QAAQ,cAAe,QAChDA,QAAQ,KAAM,MACjB,CCFe,SAAS,GAAaqP,EAAQ66E,EAAU9b,GACrD,MAAM+b,EAAc,uBAAsB/b,EAAO,IAAIA,IAAS,IACxDgc,EAAmB/6E,EAAOg7E,YAAcH,EAAStwF,KAAKyV,EAAOg7E,aAAeH,EAClF,IAAII,EAAYF,EAAiB/mF,SAAS,IAAI8mF,KAO9C,OALKG,EAAUhnF,SACbgnF,EAAY,GAAE,kCAAkClc,EAAO,IAAIA,IAAS,cACpEgc,EAAiB36E,OAAO66E,IAGnBA,CACT,CCZe,SAAS,GAAaC,EAAcL,GACjD,OAAIK,EAAaF,YACRH,EAAStwF,KAAK2wF,EAAaF,aAAa/jF,IAAI,CACjD,sBAAuB,SACvB,8BAA+B,WAI5B4jF,CACT,CCKAj6E,GAAAA,IAAW,CCZI,UAAoB,OACjC82D,EAAM,aACN0f,EAAY,GACZp7E,EAAE,KACFyW,IAoBA,SAAS0oE,EAAM7oF,GACb,IAAIyO,EAUJ,OARIzO,IACFyO,EAAM,GAAEzO,GAEJolE,EAAO13D,OAAOo1E,mBAAmC,iBAAP9iF,GAAmByO,EAAI9M,OAAS,GAAoC,IAA/ByjE,EAAO32D,IAAIxW,KAAK+H,GAAI2B,SACrG8M,EAAM22D,EAAO32D,IAAIxW,KAAK+H,KAInByO,CACT,CAEA,SAASq6E,EAASr6E,EAAKlV,GACrB,MAAMmU,EAAS03D,EAAO13D,OAAOs3D,WAEzBv2D,GAAOA,EAAI9M,OAAS,IACtB8M,EAAIlV,EAAW,WAAa,eAAemU,EAAOkrC,eAC9CnqC,EAAI,IAAyB,WAAnBA,EAAI,GAAGgZ,UAAsBhZ,EAAI,GAAGlV,SAAWA,GAEzD6rE,EAAO13D,OAAO6lE,eAAiBnO,EAAOp5B,SACxCv9B,EAAI22D,EAAOue,SAAW,WAAa,eAAej2E,EAAOq7E,WAG/D,CAEA,SAAS9gC,IAEP,GAAImd,EAAO13D,OAAOyoE,KAAM,OACxB,MAAM,QACJ6S,EAAO,QACPC,GACE7jB,EAAOJ,WACX8jB,EAASG,EAAS7jB,EAAOkQ,cAAgBlQ,EAAO13D,OAAOmsE,QACvDiP,EAASE,EAAS5jB,EAAOmQ,QAAUnQ,EAAO13D,OAAOmsE,OACnD,CAEA,SAASqP,EAAYzvF,GACnBA,EAAE0E,mBACEinE,EAAOkQ,aAAgBlQ,EAAO13D,OAAOyoE,MAAS/Q,EAAO13D,OAAOmsE,UAChEzU,EAAO0U,YACP35D,EAAK,kBACP,CAEA,SAASgpE,EAAY1vF,GACnBA,EAAE0E,mBACEinE,EAAOmQ,OAAUnQ,EAAO13D,OAAOyoE,MAAS/Q,EAAO13D,OAAOmsE,UAC1DzU,EAAOiU,YACPl5D,EAAK,kBACP,CAEA,SAASoC,IACP,MAAM7U,EAAS03D,EAAO13D,OAAOs3D,WAK7B,GAJAI,EAAO13D,OAAOs3D,WAAaqjB,GAA0BjjB,EAAQA,EAAO8b,eAAelc,WAAYI,EAAO13D,OAAOs3D,WAAY,CACvHC,OAAQ,qBACRC,OAAQ,wBAEJx3D,EAAOu3D,SAAUv3D,EAAOw3D,OAAS,OACvC,MAAM8jB,EAAUH,EAAMn7E,EAAOu3D,QACvBgkB,EAAUJ,EAAMn7E,EAAOw3D,QAEzB8jB,GAAWA,EAAQrnF,OAAS,GAC9BqnF,EAAQt/E,GAAG,QAASy/E,GAGlBF,GAAWA,EAAQtnF,OAAS,GAC9BsnF,EAAQv/E,GAAG,QAASw/E,GAGtBzxF,OAAOC,OAAO0tE,EAAOJ,WAAY,CAC/BgkB,UACA/jB,OAAQ+jB,GAAWA,EAAQ,GAC3BC,UACA/jB,OAAQ+jB,GAAWA,EAAQ,KAGxB7jB,EAAOp5B,UACNg9C,GAASA,EAAQ1jF,SAASoI,EAAOq7E,WACjCE,GAASA,EAAQ3jF,SAASoI,EAAOq7E,WAEzC,CAEA,SAAS/+E,IACP,MAAM,QACJg/E,EAAO,QACPC,GACE7jB,EAAOJ,WAEPgkB,GAAWA,EAAQrnF,SACrBqnF,EAAQ7+E,IAAI,QAASg/E,GACrBH,EAAQ/tD,YAAYmqC,EAAO13D,OAAOs3D,WAAWpsB,gBAG3CqwC,GAAWA,EAAQtnF,SACrBsnF,EAAQ9+E,IAAI,QAAS++E,GACrBD,EAAQhuD,YAAYmqC,EAAO13D,OAAOs3D,WAAWpsB,eAEjD,CApHAksC,EAAa,CACX9f,WAAY,CACVC,OAAQ,KACRC,OAAQ,KACRkkB,aAAa,EACbxwC,cAAe,yBACfywC,YAAa,uBACbN,UAAW,qBACXO,wBAAyB,gCAG7BlkB,EAAOJ,WAAa,CAClBC,OAAQ,KACR+jB,QAAS,KACT9jB,OAAQ,KACR+jB,QAAS,MAuGXv/E,EAAG,QAAQ,MACgC,IAArC07D,EAAO13D,OAAOs3D,WAAWh5B,QAE3B01C,KAEAn/D,IACA0lC,IACF,IAEFv+C,EAAG,+BAA+B,KAChCu+C,GAAQ,IAEVv+C,EAAG,WAAW,KACZM,GAAS,IAEXN,EAAG,kBAAkB,KACnB,MAAM,QACJs/E,EAAO,QACPC,GACE7jB,EAAOJ,WAEPgkB,GACFA,EAAQ5jB,EAAOp5B,QAAU,cAAgB,YAAYo5B,EAAO13D,OAAOs3D,WAAW+jB,WAG5EE,GACFA,EAAQ7jB,EAAOp5B,QAAU,cAAgB,YAAYo5B,EAAO13D,OAAOs3D,WAAW+jB,UAChF,IAEFr/E,EAAG,SAAS,CAAC6/E,EAAI9vF,KACf,MAAM,QACJuvF,EAAO,QACPC,GACE7jB,EAAOJ,WACLwkB,EAAW/vF,EAAE+I,OAEnB,GAAI4iE,EAAO13D,OAAOs3D,WAAWokB,cAAgB,GAAEI,GAAUzlF,GAAGklF,KAAa,GAAEO,GAAUzlF,GAAGilF,GAAU,CAChG,GAAI5jB,EAAOqkB,YAAcrkB,EAAO13D,OAAO+7E,YAAcrkB,EAAO13D,OAAO+7E,WAAWC,YAActkB,EAAOqkB,WAAWzpF,KAAOwpF,GAAYpkB,EAAOqkB,WAAWzpF,GAAGjF,SAASyuF,IAAY,OAC3K,IAAIrwE,EAEA6vE,EACF7vE,EAAW6vE,EAAQzpD,SAAS6lC,EAAO13D,OAAOs3D,WAAWqkB,aAC5CJ,IACT9vE,EAAW8vE,EAAQ1pD,SAAS6lC,EAAO13D,OAAOs3D,WAAWqkB,cAIrDlpE,GADe,IAAbhH,EACG,iBAEA,kBAGH6vE,GACFA,EAAQtxC,YAAY0tB,EAAO13D,OAAOs3D,WAAWqkB,aAG3CJ,GACFA,EAAQvxC,YAAY0tB,EAAO13D,OAAOs3D,WAAWqkB,YAEjD,KAGF,MAMM3H,EAAU,KACdtc,EAAO32D,IAAInJ,SAAS8/D,EAAO13D,OAAOs3D,WAAWskB,yBAC7Ct/E,GAAS,EAGXvS,OAAOC,OAAO0tE,EAAOJ,WAAY,CAC/B2c,OAZa,KACbvc,EAAO32D,IAAIwsB,YAAYmqC,EAAO13D,OAAOs3D,WAAWskB,yBAChD/mE,IACA0lC,GAAQ,EAURy5B,UACAz5B,SACA1lC,OACAvY,WAEJ,EC3Me,UAAoB,OACjCo7D,EAAM,aACN0f,EAAY,GACZp7E,EAAE,KACFyW,IAEA,MAAMwpE,EAAM,oBAsCZ,IAAIC,EArCJ9E,EAAa,CACX2E,WAAY,CACVzpF,GAAI,KACJ6pF,cAAe,OACfH,WAAW,EACXN,aAAa,EACbU,aAAc,KACdC,kBAAmB,KACnBC,eAAgB,KAChBC,aAAc,KACdC,qBAAqB,EACrBp5E,KAAM,UAENq5E,gBAAgB,EAChBC,mBAAoB,EACpBC,sBAAuB/5B,GAAUA,EACjCg6B,oBAAqBh6B,GAAUA,EAC/Bi6B,YAAa,GAAGZ,WAChBa,kBAAmB,GAAGb,kBACtBc,cAAe,GAAGd,KAClBe,aAAc,GAAGf,YACjBgB,WAAY,GAAGhB,UACfN,YAAa,GAAGM,WAChBiB,qBAAsB,GAAGjB,qBACzBkB,yBAA0B,GAAGlB,yBAC7BmB,eAAgB,GAAGnB,cACnBZ,UAAW,GAAGY,SACdoB,gBAAiB,GAAGpB,eACpBt7C,cAAe,GAAGs7C,aAClBqB,wBAAyB,GAAGrB,gBAGhCvkB,EAAOqkB,WAAa,CAClBzpF,GAAI,KACJyO,IAAK,KACLw8E,QAAS,IAGX,IAAIC,EAAqB,EAEzB,SAASC,IACP,OAAQ/lB,EAAO13D,OAAO+7E,WAAWzpF,KAAOolE,EAAOqkB,WAAWzpF,KAAOolE,EAAOqkB,WAAWh7E,KAAwC,IAAjC22D,EAAOqkB,WAAWh7E,IAAI9M,MAClH,CAEA,SAASypF,EAAeC,EAAWnnF,GACjC,MAAM,kBACJsmF,GACEplB,EAAO13D,OAAO+7E,WAClB4B,EAAUnnF,KAAYoB,SAAS,GAAGklF,KAAqBtmF,KAAYA,KAAYoB,SAAS,GAAGklF,KAAqBtmF,KAAYA,IAC9H,CAEA,SAAS+jD,IAEP,MAAMvyB,EAAM0vC,EAAO1vC,IACbhoB,EAAS03D,EAAO13D,OAAO+7E,WAC7B,GAAI0B,IAAwB,OAC5B,MAAM3a,EAAepL,EAAOgL,SAAWhL,EAAO13D,OAAO0iE,QAAQpkC,QAAUo5B,EAAOgL,QAAQE,OAAO3uE,OAASyjE,EAAOkL,OAAO3uE,OAC9G8M,EAAM22D,EAAOqkB,WAAWh7E,IAE9B,IAAIjU,EACJ,MAAM0gE,EAAQkK,EAAO13D,OAAOyoE,KAAOt4E,KAAKu2E,MAAM5D,EAAqC,EAAtBpL,EAAOgU,cAAoBhU,EAAO13D,OAAO2kE,gBAAkBjN,EAAOqL,SAAS9uE,OAkBxI,GAhBIyjE,EAAO13D,OAAOyoE,MAChB37E,EAAUqD,KAAKu2E,MAAMhP,EAAOiP,YAAcjP,EAAOgU,cAAgBhU,EAAO13D,OAAO2kE,gBAE3E73E,EAAUg2E,EAAe,EAA0B,EAAtBpL,EAAOgU,eACtC5+E,GAAWg2E,EAAqC,EAAtBpL,EAAOgU,cAG/B5+E,EAAU0gE,EAAQ,IAAG1gE,GAAW0gE,GAChC1gE,EAAU,GAAsC,YAAjC4qE,EAAO13D,OAAO49E,iBAA8B9wF,EAAU0gE,EAAQ1gE,IAEjFA,OADqC,IAArB4qE,EAAOgO,UACbhO,EAAOgO,UAEPhO,EAAOiP,aAAe,EAId,YAAhB3mE,EAAOoD,MAAsBs0D,EAAOqkB,WAAWwB,SAAW7lB,EAAOqkB,WAAWwB,QAAQtpF,OAAS,EAAG,CAClG,MAAMspF,EAAU7lB,EAAOqkB,WAAWwB,QAClC,IAAIM,EACAl9B,EACAm9B,EAuBJ,GArBI99E,EAAOy8E,iBACTP,EAAaqB,EAAQ9sD,GAAG,GAAGinC,EAAOv7C,eAAiB,aAAe,gBAAe,GACjFpb,EAAI9J,IAAIygE,EAAOv7C,eAAiB,QAAU,SAAa+/D,GAAcl8E,EAAO08E,mBAAqB,GAA7C,MAEhD18E,EAAO08E,mBAAqB,QAA8BpzF,IAAzBouE,EAAOsR,gBAC1CwU,GAAsB1wF,GAAW4qE,EAAOsR,cAAgBtR,EAAOgU,cAAgB,GAE3E8R,EAAqBx9E,EAAO08E,mBAAqB,EACnDc,EAAqBx9E,EAAO08E,mBAAqB,EACxCc,EAAqB,IAC9BA,EAAqB,IAIzBK,EAAa1tF,KAAKkD,IAAIvG,EAAU0wF,EAAoB,GACpD78B,EAAYk9B,GAAc1tF,KAAKkK,IAAIkjF,EAAQtpF,OAAQ+L,EAAO08E,oBAAsB,GAChFoB,GAAYn9B,EAAYk9B,GAAc,GAGxCN,EAAQhwD,YAAY,CAAC,GAAI,QAAS,aAAc,QAAS,aAAc,SAASjf,KAAIorC,GAAU,GAAG15C,EAAO88E,oBAAoBpjC,MAAUxkD,KAAK,MAEvI6L,EAAI9M,OAAS,EACfspF,EAAQlhF,MAAK0hF,IACX,MAAMC,EAAU,GAAED,GACZE,EAAcD,EAAQl/E,QAExBm/E,IAAgBnxF,GAClBkxF,EAAQpmF,SAASoI,EAAO88E,mBAGtB98E,EAAOy8E,iBACLwB,GAAeJ,GAAcI,GAAet9B,GAC9Cq9B,EAAQpmF,SAAS,GAAGoI,EAAO88E,0BAGzBmB,IAAgBJ,GAClBH,EAAeM,EAAS,QAGtBC,IAAgBt9B,GAClB+8B,EAAeM,EAAS,QAE5B,QAEG,CACL,MAAMA,EAAUT,EAAQ9sD,GAAG3jC,GACrBmxF,EAAcD,EAAQl/E,QAG5B,GAFAk/E,EAAQpmF,SAASoI,EAAO88E,mBAEpB98E,EAAOy8E,eAAgB,CACzB,MAAMyB,EAAwBX,EAAQ9sD,GAAGotD,GACnCM,EAAuBZ,EAAQ9sD,GAAGkwB,GAExC,IAAK,IAAI91D,EAAIgzF,EAAYhzF,GAAK81D,EAAW91D,GAAK,EAC5C0yF,EAAQ9sD,GAAG5lC,GAAG+M,SAAS,GAAGoI,EAAO88E,0BAGnC,GAAIplB,EAAO13D,OAAOyoE,KAChB,GAAIwV,GAAeV,EAAQtpF,OAAQ,CACjC,IAAK,IAAIpJ,EAAImV,EAAO08E,mBAAoB7xF,GAAK,EAAGA,GAAK,EACnD0yF,EAAQ9sD,GAAG8sD,EAAQtpF,OAASpJ,GAAG+M,SAAS,GAAGoI,EAAO88E,0BAGpDS,EAAQ9sD,GAAG8sD,EAAQtpF,OAAS+L,EAAO08E,mBAAqB,GAAG9kF,SAAS,GAAGoI,EAAO88E,yBAChF,MACEY,EAAeQ,EAAuB,QACtCR,EAAeS,EAAsB,aAGvCT,EAAeQ,EAAuB,QACtCR,EAAeS,EAAsB,OAEzC,CACF,CAEA,GAAIn+E,EAAOy8E,eAAgB,CACzB,MAAM2B,EAAuBjuF,KAAKkK,IAAIkjF,EAAQtpF,OAAQ+L,EAAO08E,mBAAqB,GAC5E2B,GAAiBnC,EAAakC,EAAuBlC,GAAc,EAAI4B,EAAW5B,EAClFoC,EAAat2D,EAAM,QAAU,OACnCu1D,EAAQtmF,IAAIygE,EAAOv7C,eAAiBmiE,EAAa,MAAO,GAAGD,MAC7D,CACF,CAOA,GALoB,aAAhBr+E,EAAOoD,OACTrC,EAAIxW,KAAK,GAAkByV,EAAOg9E,eAAelzD,KAAK9pB,EAAO28E,sBAAsB7vF,EAAU,IAC7FiU,EAAIxW,KAAK,GAAkByV,EAAOi9E,aAAanzD,KAAK9pB,EAAO48E,oBAAoBpvB,KAG7D,gBAAhBxtD,EAAOoD,KAAwB,CACjC,IAAIm7E,EAGFA,EADEv+E,EAAOw8E,oBACc9kB,EAAOv7C,eAAiB,WAAa,aAErCu7C,EAAOv7C,eAAiB,aAAe,WAGhE,MAAMqiE,GAAS1xF,EAAU,GAAK0gE,EAC9B,IAAIixB,EAAS,EACTC,EAAS,EAEgB,eAAzBH,EACFE,EAASD,EAETE,EAASF,EAGXz9E,EAAIxW,KAAK,GAAkByV,EAAOk9E,uBAAuB/hF,UAAU,6BAA6BsjF,aAAkBC,MAAWlkE,WAAWk9C,EAAO13D,OAAO1G,MACxJ,CAEoB,WAAhB0G,EAAOoD,MAAqBpD,EAAOu8E,cACrCx7E,EAAIupC,KAAKtqC,EAAOu8E,aAAa7kB,EAAQ5qE,EAAU,EAAG0gE,IAClD/6C,EAAK,mBAAoB1R,EAAI,KAE7B0R,EAAK,mBAAoB1R,EAAI,IAG3B22D,EAAO13D,OAAO6lE,eAAiBnO,EAAOp5B,SACxCv9B,EAAI22D,EAAOue,SAAW,WAAa,eAAej2E,EAAOq7E,UAE7D,CAEA,SAASplF,IAEP,MAAM+J,EAAS03D,EAAO13D,OAAO+7E,WAC7B,GAAI0B,IAAwB,OAC5B,MAAM3a,EAAepL,EAAOgL,SAAWhL,EAAO13D,OAAO0iE,QAAQpkC,QAAUo5B,EAAOgL,QAAQE,OAAO3uE,OAASyjE,EAAOkL,OAAO3uE,OAC9G8M,EAAM22D,EAAOqkB,WAAWh7E,IAC9B,IAAI49E,EAAiB,GAErB,GAAoB,YAAhB3+E,EAAOoD,KAAoB,CAC7B,IAAIw7E,EAAkBlnB,EAAO13D,OAAOyoE,KAAOt4E,KAAKu2E,MAAM5D,EAAqC,EAAtBpL,EAAOgU,cAAoBhU,EAAO13D,OAAO2kE,gBAAkBjN,EAAOqL,SAAS9uE,OAE5IyjE,EAAO13D,OAAOk3D,UAAYQ,EAAO13D,OAAOk3D,SAAS54B,UAAYo5B,EAAO13D,OAAOyoE,MAAQmW,EAAkB9b,IACvG8b,EAAkB9b,GAGpB,IAAK,IAAIj4E,EAAI,EAAGA,EAAI+zF,EAAiB/zF,GAAK,EACpCmV,EAAOo8E,aACTuC,GAAkB3+E,EAAOo8E,aAAahoF,KAAKsjE,EAAQ7sE,EAAGmV,EAAO68E,aAE7D8B,GAAkB,IAAI3+E,EAAOm8E,wBAAwBn8E,EAAO68E,kBAAkB78E,EAAOm8E,iBAIzFp7E,EAAIupC,KAAKq0C,GACTjnB,EAAOqkB,WAAWwB,QAAUx8E,EAAIxW,KAAK,GAAkByV,EAAO68E,aAChE,CAEoB,aAAhB78E,EAAOoD,OAEPu7E,EADE3+E,EAAOs8E,eACQt8E,EAAOs8E,eAAeloF,KAAKsjE,EAAQ13D,EAAOg9E,aAAch9E,EAAOi9E,YAE/D,gBAAgBj9E,EAAOg9E,wCAAkDh9E,EAAOi9E,sBAGnGl8E,EAAIupC,KAAKq0C,IAGS,gBAAhB3+E,EAAOoD,OAEPu7E,EADE3+E,EAAOq8E,kBACQr8E,EAAOq8E,kBAAkBjoF,KAAKsjE,EAAQ13D,EAAOk9E,sBAE7C,gBAAgBl9E,EAAOk9E,gCAG1Cn8E,EAAIupC,KAAKq0C,IAGS,WAAhB3+E,EAAOoD,MACTqP,EAAK,mBAAoBilD,EAAOqkB,WAAWh7E,IAAI,GAEnD,CAEA,SAAS8T,IACP6iD,EAAO13D,OAAO+7E,WAAapB,GAA0BjjB,EAAQA,EAAO8b,eAAeuI,WAAYrkB,EAAO13D,OAAO+7E,WAAY,CACvHzpF,GAAI,sBAEN,MAAM0N,EAAS03D,EAAO13D,OAAO+7E,WAC7B,IAAK/7E,EAAO1N,GAAI,OAChB,IAAIyO,EAAM,GAAEf,EAAO1N,IACA,IAAfyO,EAAI9M,SAEJyjE,EAAO13D,OAAOo1E,mBAA0C,iBAAdp1E,EAAO1N,IAAmByO,EAAI9M,OAAS,IACnF8M,EAAM22D,EAAO32D,IAAIxW,KAAKyV,EAAO1N,IAEzByO,EAAI9M,OAAS,IACf8M,EAAMA,EAAIjB,QAAOxN,GACX,GAAEA,GAAIkjC,QAAQ,WAAW,KAAOkiC,EAAOplE,OAM7B,YAAhB0N,EAAOoD,MAAsBpD,EAAOg8E,WACtCj7E,EAAInJ,SAASoI,EAAOo9E,gBAGtBr8E,EAAInJ,SAASoI,EAAO+8E,cAAgB/8E,EAAOoD,MAC3CrC,EAAInJ,SAAS8/D,EAAOv7C,eAAiBnc,EAAOq9E,gBAAkBr9E,EAAO2gC,eAEjD,YAAhB3gC,EAAOoD,MAAsBpD,EAAOy8E,iBACtC17E,EAAInJ,SAAS,GAAGoI,EAAO+8E,gBAAgB/8E,EAAOoD,gBAC9Co6E,EAAqB,EAEjBx9E,EAAO08E,mBAAqB,IAC9B18E,EAAO08E,mBAAqB,IAIZ,gBAAhB18E,EAAOoD,MAA0BpD,EAAOw8E,qBAC1Cz7E,EAAInJ,SAASoI,EAAOm9E,0BAGlBn9E,EAAOg8E,WACTj7E,EAAI/E,GAAG,QAAS,GAAkBgE,EAAO68E,cAAc,SAAiB9wF,GACtEA,EAAE0E,iBACF,IAAIqO,EAAQ,GAAEtM,MAAMsM,QAAU44D,EAAO13D,OAAO2kE,eACxCjN,EAAO13D,OAAOyoE,OAAM3pE,GAAS44D,EAAOgU,cACxChU,EAAOkT,QAAQ9rE,EACjB,IAGF/U,OAAOC,OAAO0tE,EAAOqkB,WAAY,CAC/Bh7E,MACAzO,GAAIyO,EAAI,KAGL22D,EAAOp5B,SACVv9B,EAAInJ,SAASoI,EAAOq7E,WAExB,CAEA,SAAS/+E,IACP,MAAM0D,EAAS03D,EAAO13D,OAAO+7E,WAC7B,GAAI0B,IAAwB,OAC5B,MAAM18E,EAAM22D,EAAOqkB,WAAWh7E,IAC9BA,EAAIwsB,YAAYvtB,EAAO27E,aACvB56E,EAAIwsB,YAAYvtB,EAAO+8E,cAAgB/8E,EAAOoD,MAC9CrC,EAAIwsB,YAAYmqC,EAAOv7C,eAAiBnc,EAAOq9E,gBAAkBr9E,EAAO2gC,eACpE+2B,EAAOqkB,WAAWwB,SAAW7lB,EAAOqkB,WAAWwB,QAAQhwD,aAAamqC,EAAOqkB,WAAWwB,QAAQhwD,YAAYvtB,EAAO88E,mBAEjH98E,EAAOg8E,WACTj7E,EAAItE,IAAI,QAAS,GAAkBuD,EAAO68E,aAE9C,CAEA7gF,EAAG,QAAQ,MACgC,IAArC07D,EAAO13D,OAAO+7E,WAAWz9C,QAE3B01C,KAEAn/D,IACA5e,IACAskD,IACF,IAEFv+C,EAAG,qBAAqB,MAClB07D,EAAO13D,OAAOyoE,WAEqB,IAArB/Q,EAAOgO,YADvBnrB,GAGF,IAEFv+C,EAAG,mBAAmB,KACf07D,EAAO13D,OAAOyoE,MACjBluB,GACF,IAEFv+C,EAAG,sBAAsB,KACnB07D,EAAO13D,OAAOyoE,OAChBxyE,IACAskD,IACF,IAEFv+C,EAAG,wBAAwB,KACpB07D,EAAO13D,OAAOyoE,OACjBxyE,IACAskD,IACF,IAEFv+C,EAAG,WAAW,KACZM,GAAS,IAEXN,EAAG,kBAAkB,KACnB,MAAM,IACJ+E,GACE22D,EAAOqkB,WAEPh7E,GACFA,EAAI22D,EAAOp5B,QAAU,cAAgB,YAAYo5B,EAAO13D,OAAO+7E,WAAWV,UAC5E,IAEFr/E,EAAG,eAAe,KAChBu+C,GAAQ,IAEVv+C,EAAG,SAAS,CAAC6/E,EAAI9vF,KACf,MAAM+vF,EAAW/vF,EAAE+I,QACb,IACJiM,GACE22D,EAAOqkB,WAEX,GAAIrkB,EAAO13D,OAAO+7E,WAAWzpF,IAAMolE,EAAO13D,OAAO+7E,WAAWL,aAAe36E,GAAOA,EAAI9M,OAAS,IAAM,GAAE6nF,GAAUjqD,SAAS6lC,EAAO13D,OAAO+7E,WAAWc,aAAc,CAC/J,GAAInlB,EAAOJ,aAAeI,EAAOJ,WAAWC,QAAUukB,IAAapkB,EAAOJ,WAAWC,QAAUG,EAAOJ,WAAWE,QAAUskB,IAAapkB,EAAOJ,WAAWE,QAAS,OACnK,MAAM/rD,EAAW1K,EAAI8wB,SAAS6lC,EAAO13D,OAAO+7E,WAAWJ,aAGrDlpE,GADe,IAAbhH,EACG,iBAEA,kBAGP1K,EAAIipC,YAAY0tB,EAAO13D,OAAO+7E,WAAWJ,YAC3C,KAGF,MAYM3H,EAAU,KACdtc,EAAO32D,IAAInJ,SAAS8/D,EAAO13D,OAAO+7E,WAAWuB,yBAEzC5lB,EAAOqkB,WAAWh7E,KACpB22D,EAAOqkB,WAAWh7E,IAAInJ,SAAS8/D,EAAO13D,OAAO+7E,WAAWuB,yBAG1DhhF,GAAS,EAGXvS,OAAOC,OAAO0tE,EAAOqkB,WAAY,CAC/B9H,OAvBa,KACbvc,EAAO32D,IAAIwsB,YAAYmqC,EAAO13D,OAAO+7E,WAAWuB,yBAE5C5lB,EAAOqkB,WAAWh7E,KACpB22D,EAAOqkB,WAAWh7E,IAAIwsB,YAAYmqC,EAAO13D,OAAO+7E,WAAWuB,yBAG7DzoE,IACA5e,IACAskD,GAAQ,EAeRy5B,UACA/9E,SACAskD,SACA1lC,OACAvY,WAEJ,ECpbe,UAAmB,OAChCo7D,EAAM,aACN0f,EAAY,GACZp7E,EAAE,KACFyW,IAEA,MAAM9nB,EAAW,KACjB,IAGIk0F,EACAC,EACAC,EACAC,EANAjR,GAAY,EACZhqE,EAAU,KACVk7E,EAAc,KA0BlB,SAASpV,IACP,IAAKnS,EAAO13D,OAAOq3D,UAAU/kE,KAAOolE,EAAOL,UAAU/kE,GAAI,OACzD,MAAM,UACJ+kE,EACAkL,aAAcv6C,EAAG,SACjB/3B,GACEynE,GACE,QACJwnB,EAAO,IACPn+E,GACEs2D,EACEr3D,EAAS03D,EAAO13D,OAAOq3D,UAC7B,IAAIxrC,EAAUizD,EACVK,GAAUJ,EAAYD,GAAY7uF,EAElC+3B,GACFm3D,GAAUA,EAENA,EAAS,GACXtzD,EAAUizD,EAAWK,EACrBA,EAAS,IACCA,EAASL,EAAWC,IAC9BlzD,EAAUkzD,EAAYI,IAEfA,EAAS,GAClBtzD,EAAUizD,EAAWK,EACrBA,EAAS,GACAA,EAASL,EAAWC,IAC7BlzD,EAAUkzD,EAAYI,GAGpBznB,EAAOv7C,gBACT+iE,EAAQ/jF,UAAU,eAAegkF,cACjCD,EAAQ,GAAGjyF,MAAMyB,MAAQ,GAAGm9B,QAE5BqzD,EAAQ/jF,UAAU,oBAAoBgkF,WACtCD,EAAQ,GAAGjyF,MAAM+F,OAAS,GAAG64B,OAG3B7rB,EAAO2K,OACTtR,aAAa0K,GACbhD,EAAI,GAAG9T,MAAM2xB,QAAU,EACvB7a,EAAUhT,YAAW,KACnBgQ,EAAI,GAAG9T,MAAM2xB,QAAU,EACvB7d,EAAIyZ,WAAW,IAAI,GAClB,KAEP,CAOA,SAASunD,IACP,IAAKrK,EAAO13D,OAAOq3D,UAAU/kE,KAAOolE,EAAOL,UAAU/kE,GAAI,OACzD,MAAM,UACJ+kE,GACEK,GACE,QACJwnB,EAAO,IACPn+E,GACEs2D,EACJ6nB,EAAQ,GAAGjyF,MAAMyB,MAAQ,GACzBwwF,EAAQ,GAAGjyF,MAAM+F,OAAS,GAC1B+rF,EAAYrnB,EAAOv7C,eAAiBpb,EAAI,GAAG9S,YAAc8S,EAAI,GAAGyF,aAChEw4E,EAAUtnB,EAAO7xD,MAAQ6xD,EAAOiM,YAAcjM,EAAO13D,OAAOmjE,oBAAsBzL,EAAO13D,OAAO4jE,eAAiBlM,EAAOqL,SAAS,GAAK,IAGpI+b,EADuC,SAArCpnB,EAAO13D,OAAOq3D,UAAUynB,SACfC,EAAYC,EAEZzuF,SAASmnE,EAAO13D,OAAOq3D,UAAUynB,SAAU,IAGpDpnB,EAAOv7C,eACT+iE,EAAQ,GAAGjyF,MAAMyB,MAAQ,GAAGowF,MAE5BI,EAAQ,GAAGjyF,MAAM+F,OAAS,GAAG8rF,MAI7B/9E,EAAI,GAAG9T,MAAM2H,QADXoqF,GAAW,EACU,OAEA,GAGrBtnB,EAAO13D,OAAOq3D,UAAU1sD,OAC1B5J,EAAI,GAAG9T,MAAM2xB,QAAU,GAGrB84C,EAAO13D,OAAO6lE,eAAiBnO,EAAOp5B,SACxC+4B,EAAUt2D,IAAI22D,EAAOue,SAAW,WAAa,eAAeve,EAAO13D,OAAOq3D,UAAUgkB,UAExF,CAEA,SAAS+D,EAAmBrzF,GAC1B,OAAI2rE,EAAOv7C,eACS,eAAXpwB,EAAEqX,MAAoC,cAAXrX,EAAEqX,KAAuBrX,EAAEijF,cAAc,GAAGhwC,QAAUjzC,EAAEizC,QAG1E,eAAXjzC,EAAEqX,MAAoC,cAAXrX,EAAEqX,KAAuBrX,EAAEijF,cAAc,GAAG/vC,QAAUlzC,EAAEkzC,OAC5F,CAEA,SAASogD,EAAgBtzF,GACvB,MAAM,UACJsrE,EACAkL,aAAcv6C,GACZ0vC,GACE,IACJ32D,GACEs2D,EACJ,IAAIioB,EACJA,GAAiBF,EAAmBrzF,GAAKgV,EAAIjH,SAAS49D,EAAOv7C,eAAiB,OAAS,QAA2B,OAAjB0iE,EAAwBA,EAAeC,EAAW,KAAOC,EAAYD,GACtKQ,EAAgBnvF,KAAKkD,IAAIlD,KAAKkK,IAAIilF,EAAe,GAAI,GAEjDt3D,IACFs3D,EAAgB,EAAIA,GAGtB,MAAM9oF,EAAWkhE,EAAOyP,gBAAkBzP,EAAOiQ,eAAiBjQ,EAAOyP,gBAAkBmY,EAC3F5nB,EAAO8P,eAAehxE,GACtBkhE,EAAOmS,aAAarzE,GACpBkhE,EAAOoR,oBACPpR,EAAOsQ,qBACT,CAEA,SAASuX,EAAYxzF,GACnB,MAAMiU,EAAS03D,EAAO13D,OAAOq3D,WACvB,UACJA,EAAS,WACTgL,GACE3K,GACE,IACJ32D,EAAG,QACHm+E,GACE7nB,EACJ0W,GAAY,EACZ8Q,EAAe9yF,EAAE+I,SAAWoqF,EAAQ,IAAMnzF,EAAE+I,SAAWoqF,EAAUE,EAAmBrzF,GAAKA,EAAE+I,OAAOitB,wBAAwB21C,EAAOv7C,eAAiB,OAAS,OAAS,KACpKpwB,EAAE0E,iBACF1E,EAAEsvC,kBACFgnC,EAAW7nD,WAAW,KACtB0kE,EAAQ1kE,WAAW,KACnB6kE,EAAgBtzF,GAChBsN,aAAa4lF,GACbl+E,EAAIyZ,WAAW,GAEXxa,EAAO2K,MACT5J,EAAI9J,IAAI,UAAW,GAGjBygE,EAAO13D,OAAO6jE,SAChBnM,EAAO2K,WAAWprE,IAAI,mBAAoB,QAG5Cwb,EAAK,qBAAsB1mB,EAC7B,CAEA,SAASyzF,EAAWzzF,GAClB,MAAM,UACJsrE,EAAS,WACTgL,GACE3K,GACE,IACJ32D,EAAG,QACHm+E,GACE7nB,EACC0W,IACDhiF,EAAE0E,eAAgB1E,EAAE0E,iBAAsB1E,EAAEqiB,aAAc,EAC9DixE,EAAgBtzF,GAChBs2E,EAAW7nD,WAAW,GACtBzZ,EAAIyZ,WAAW,GACf0kE,EAAQ1kE,WAAW,GACnB/H,EAAK,oBAAqB1mB,GAC5B,CAEA,SAAS0zF,EAAU1zF,GACjB,MAAMiU,EAAS03D,EAAO13D,OAAOq3D,WACvB,UACJA,EAAS,WACTgL,GACE3K,GACE,IACJ32D,GACEs2D,EACC0W,IACLA,GAAY,EAERrW,EAAO13D,OAAO6jE,UAChBnM,EAAO2K,WAAWprE,IAAI,mBAAoB,IAC1CorE,EAAW7nD,WAAW,KAGpBxa,EAAO2K,OACTtR,aAAa4lF,GACbA,EAAc,IAAS,KACrBl+E,EAAI9J,IAAI,UAAW,GACnB8J,EAAIyZ,WAAW,IAAI,GAClB,MAGL/H,EAAK,mBAAoB1mB,GAErBiU,EAAO0/E,eACThoB,EAAOgV,iBAEX,CAEA,SAAS9qE,EAAOL,GACd,MAAM,UACJ81D,EAAS,iBACTogB,EAAgB,mBAChBC,EAAkB,OAClB13E,EAAM,QACN0/D,GACEhI,EACE32D,EAAMs2D,EAAUt2D,IACtB,IAAKA,EAAK,OACV,MAAMjM,EAASiM,EAAI,GACb4+E,KAAiBjgB,EAAQM,kBAAmBhgE,EAAO8yE,mBAAmB,CAC1EznF,SAAS,EACT85B,SAAS,GAEL66C,KAAkBN,EAAQM,kBAAmBhgE,EAAO8yE,mBAAmB,CAC3EznF,SAAS,EACT85B,SAAS,GAEX,IAAKrwB,EAAQ,OACb,MAAM8qF,EAAyB,OAAXr+E,EAAkB,mBAAqB,sBAEtDm+D,EAAQI,OAKXhrE,EAAO8qF,GAAanI,EAAiB7nF,MAAO2vF,EAAaI,GACzD7qF,EAAO8qF,GAAanI,EAAiB/pC,KAAM8xC,EAAYG,GACvD7qF,EAAO8qF,GAAanI,EAAiBnvD,IAAKm3D,EAAWzf,KANrDlrE,EAAO8qF,GAAalI,EAAmB9nF,MAAO2vF,EAAaI,GAC3Dh1F,EAASi1F,GAAalI,EAAmBhqC,KAAM8xC,EAAYG,GAC3Dh1F,EAASi1F,GAAalI,EAAmBpvD,IAAKm3D,EAAWzf,GAM7D,CAYA,SAASnrD,IACP,MAAM,UACJwiD,EACAt2D,IAAK8+E,GACHnoB,EACJA,EAAO13D,OAAOq3D,UAAYsjB,GAA0BjjB,EAAQA,EAAO8b,eAAenc,UAAWK,EAAO13D,OAAOq3D,UAAW,CACpH/kE,GAAI,qBAEN,MAAM0N,EAAS03D,EAAO13D,OAAOq3D,UAC7B,IAAKr3D,EAAO1N,GAAI,OAChB,IAAIyO,EAAM,GAAEf,EAAO1N,IAEfolE,EAAO13D,OAAOo1E,mBAA0C,iBAAdp1E,EAAO1N,IAAmByO,EAAI9M,OAAS,GAA0C,IAArC4rF,EAAUt1F,KAAKyV,EAAO1N,IAAI2B,SAClH8M,EAAM8+E,EAAUt1F,KAAKyV,EAAO1N,KAG9ByO,EAAInJ,SAAS8/D,EAAOv7C,eAAiBnc,EAAOq9E,gBAAkBr9E,EAAO2gC,eACrE,IAAIu+C,EAAUn+E,EAAIxW,KAAK,IAAImtE,EAAO13D,OAAOq3D,UAAUyoB,aAE5B,IAAnBZ,EAAQjrF,SACVirF,EAAU,GAAE,eAAexnB,EAAO13D,OAAOq3D,UAAUyoB,qBACnD/+E,EAAIX,OAAO8+E,IAGbn1F,OAAOC,OAAOqtE,EAAW,CACvBt2D,MACAzO,GAAIyO,EAAI,GACRm+E,UACAa,OAAQb,EAAQ,KAGdl/E,EAAOkvC,WAxCNwoB,EAAO13D,OAAOq3D,UAAU/kE,IAAOolE,EAAOL,UAAU/kE,IACrDsP,EAAO,MA2CHb,GACFA,EAAI22D,EAAOp5B,QAAU,cAAgB,YAAYo5B,EAAO13D,OAAOq3D,UAAUgkB,UAE7E,CAEA,SAAS/+E,IACP,MAAM0D,EAAS03D,EAAO13D,OAAOq3D,UACvBt2D,EAAM22D,EAAOL,UAAUt2D,IAEzBA,GACFA,EAAIwsB,YAAYmqC,EAAOv7C,eAAiBnc,EAAOq9E,gBAAkBr9E,EAAO2gC,eAjDrE+2B,EAAO13D,OAAOq3D,UAAU/kE,IAAOolE,EAAOL,UAAU/kE,IACrDsP,EAAO,MAoDT,CAhUAw1E,EAAa,CACX/f,UAAW,CACT/kE,GAAI,KACJwsF,SAAU,OACVn0E,MAAM,EACNukC,WAAW,EACXwwC,eAAe,EACfrE,UAAW,wBACXyE,UAAW,wBACXE,uBAAwB,4BACxB3C,gBAAiB,8BACjB18C,cAAe,+BAGnB+2B,EAAOL,UAAY,CACjB/kE,GAAI,KACJytF,OAAQ,KACRh/E,IAAK,KACLm+E,QAAS,MAgTXljF,EAAG,QAAQ,MAC+B,IAApC07D,EAAO13D,OAAOq3D,UAAU/4B,QAE1B01C,KAEAn/D,IACAktD,IACA8H,IACF,IAEF7tE,EAAG,4CAA4C,KAC7C+lE,GAAY,IAEd/lE,EAAG,gBAAgB,KACjB6tE,GAAc,IAEhB7tE,EAAG,iBAAiB,CAAC6/E,EAAIrsF,MA5QzB,SAAuBA,GAChBkoE,EAAO13D,OAAOq3D,UAAU/kE,IAAOolE,EAAOL,UAAU/kE,IACrDolE,EAAOL,UAAU6nB,QAAQ1kE,WAAWhrB,EACtC,CA0QE+2E,CAAc/2E,EAAS,IAEzBwM,EAAG,kBAAkB,KACnB,MAAM,IACJ+E,GACE22D,EAAOL,UAEPt2D,GACFA,EAAI22D,EAAOp5B,QAAU,cAAgB,YAAYo5B,EAAO13D,OAAOq3D,UAAUgkB,UAC3E,IAEFr/E,EAAG,WAAW,KACZM,GAAS,IAGX,MAYM03E,EAAU,KACdtc,EAAO32D,IAAInJ,SAAS8/D,EAAO13D,OAAOq3D,UAAU2oB,wBAExCtoB,EAAOL,UAAUt2D,KACnB22D,EAAOL,UAAUt2D,IAAInJ,SAAS8/D,EAAO13D,OAAOq3D,UAAU2oB,wBAGxD1jF,GAAS,EAGXvS,OAAOC,OAAO0tE,EAAOL,UAAW,CAC9B4c,OAvBa,KACbvc,EAAO32D,IAAIwsB,YAAYmqC,EAAO13D,OAAOq3D,UAAU2oB,wBAE3CtoB,EAAOL,UAAUt2D,KACnB22D,EAAOL,UAAUt2D,IAAIwsB,YAAYmqC,EAAO13D,OAAOq3D,UAAU2oB,wBAG3DnrE,IACAktD,IACA8H,GAAc,EAedmK,UACAjS,aACA8H,eACAh1D,OACAvY,WAEJ,EC7Ye,UAAkB,OAC/Bo7D,EAAM,aACN0f,EAAY,GACZp7E,EAAE,KACFyW,IAEA,IAAI1O,EAiBJ,SAASwO,IACP,IAAKmlD,EAAO7xD,KAGV,OAFA6xD,EAAO0a,SAAS9/D,SAAU,OAC1BolD,EAAO0a,SAASp4B,QAAS,GAI3B,MAAMimC,EAAiBvoB,EAAOkL,OAAOnyC,GAAGinC,EAAOiP,aAC/C,IAAIvoD,EAAQs5C,EAAO13D,OAAOoyE,SAASh0D,MAE/B6hE,EAAe3pF,KAAK,0BACtB8nB,EAAQ6hE,EAAe3pF,KAAK,yBAA2BohE,EAAO13D,OAAOoyE,SAASh0D,OAGhF/kB,aAAa0K,GACbA,EAAU,IAAS,KACjB,IAAIm8E,EAEAxoB,EAAO13D,OAAOoyE,SAAS+N,iBACrBzoB,EAAO13D,OAAOyoE,MAChB/Q,EAAOuU,UACPiU,EAAiBxoB,EAAO0U,UAAU1U,EAAO13D,OAAO1G,OAAO,GAAM,GAC7DmZ,EAAK,aACKilD,EAAOkQ,YAGPlQ,EAAO13D,OAAOoyE,SAASgO,gBAIjCtsD,KAHAosD,EAAiBxoB,EAAOkT,QAAQlT,EAAOkL,OAAO3uE,OAAS,EAAGyjE,EAAO13D,OAAO1G,OAAO,GAAM,GACrFmZ,EAAK,cAJLytE,EAAiBxoB,EAAO0U,UAAU1U,EAAO13D,OAAO1G,OAAO,GAAM,GAC7DmZ,EAAK,aAOEilD,EAAO13D,OAAOyoE,MACvB/Q,EAAOuU,UACPiU,EAAiBxoB,EAAOiU,UAAUjU,EAAO13D,OAAO1G,OAAO,GAAM,GAC7DmZ,EAAK,aACKilD,EAAOmQ,MAGPnQ,EAAO13D,OAAOoyE,SAASgO,gBAIjCtsD,KAHAosD,EAAiBxoB,EAAOkT,QAAQ,EAAGlT,EAAO13D,OAAO1G,OAAO,GAAM,GAC9DmZ,EAAK,cAJLytE,EAAiBxoB,EAAOiU,UAAUjU,EAAO13D,OAAO1G,OAAO,GAAM,GAC7DmZ,EAAK,cAQHilD,EAAO13D,OAAO6jE,SAAWnM,EAAO0a,SAAS9/D,UAA2C,IAAnB4tE,IAAf3tE,GAEtD,GACC6L,EACL,CAEA,SAASxuB,IACP,YAAuB,IAAZmU,KACP2zD,EAAO0a,SAAS9/D,UACpBolD,EAAO0a,SAAS9/D,SAAU,EAC1BG,EAAK,iBACLF,KACO,GACT,CAEA,SAASuhB,IACP,QAAK4jC,EAAO0a,SAAS9/D,eACE,IAAZvO,IAEPA,IACF1K,aAAa0K,GACbA,OAAUza,GAGZouE,EAAO0a,SAAS9/D,SAAU,EAC1BG,EAAK,iBACE,GACT,CAEA,SAAS4tE,EAAM/mF,GACRo+D,EAAO0a,SAAS9/D,UACjBolD,EAAO0a,SAASp4B,SAChBj2C,GAAS1K,aAAa0K,GAC1B2zD,EAAO0a,SAASp4B,QAAS,EAEX,IAAV1gD,GAAgBo+D,EAAO13D,OAAOoyE,SAASkO,kBAIzC,CAAC,gBAAiB,uBAAuBt3F,SAAQwH,IAC/CknE,EAAO2K,WAAW,GAAGz3E,iBAAiB4F,EAAOwsB,EAAgB,KAJ/D06C,EAAO0a,SAASp4B,QAAS,EACzBznC,MAMJ,CAEA,SAASguE,IACP,MAAM51F,EAAW,KAEgB,WAA7BA,EAAS61F,iBAAgC9oB,EAAO0a,SAAS9/D,SAC3D+tE,IAG+B,YAA7B11F,EAAS61F,iBAAiC9oB,EAAO0a,SAASp4B,SAC5DznC,IACAmlD,EAAO0a,SAASp4B,QAAS,EAE7B,CAEA,SAASh9B,EAAgBjxB,GAClB2rE,IAAUA,EAAO8J,WAAc9J,EAAO2K,YACvCt2E,EAAE+I,SAAW4iE,EAAO2K,WAAW,KACnC,CAAC,gBAAiB,uBAAuBr5E,SAAQwH,IAC/CknE,EAAO2K,WAAW,GAAGptD,oBAAoBzkB,EAAOwsB,EAAgB,IAElE06C,EAAO0a,SAASp4B,QAAS,EAEpB0d,EAAO0a,SAAS9/D,QAGnBC,IAFAuhB,IAIJ,CAEA,SAAS2sD,IACH/oB,EAAO13D,OAAOoyE,SAASsO,qBACzB5sD,KAEArhB,EAAK,iBACL4tE,KAGF,CAAC,gBAAiB,uBAAuBr3F,SAAQwH,IAC/CknE,EAAO2K,WAAW,GAAGptD,oBAAoBzkB,EAAOwsB,EAAgB,GAEpE,CAEA,SAAS2jE,IACHjpB,EAAO13D,OAAOoyE,SAASsO,uBAI3BhpB,EAAO0a,SAASp4B,QAAS,EACzBvnC,EAAK,kBACLF,IACF,CA5JAmlD,EAAO0a,SAAW,CAChB9/D,SAAS,EACT0nC,QAAQ,GAEVo9B,EAAa,CACXhF,SAAU,CACR9zC,SAAS,EACTlgB,MAAO,IACPkiE,mBAAmB,EACnBI,sBAAsB,EACtBN,iBAAiB,EACjBD,kBAAkB,EAClBS,mBAAmB,KA8JvB5kF,EAAG,QAAQ,KACT,GAAI07D,EAAO13D,OAAOoyE,SAAS9zC,QAAS,CAClC1uC,IACiB,KACRhF,iBAAiB,mBAAoB21F,GAf5C7oB,EAAO13D,OAAOoyE,SAASwO,oBACzBlpB,EAAO32D,IAAI/E,GAAG,aAAcykF,GAC5B/oB,EAAO32D,IAAI/E,GAAG,aAAc2kF,GAe9B,KAEF3kF,EAAG,yBAAyB,CAAC6/E,EAAIviF,EAAO8wE,KAClC1S,EAAO0a,SAAS9/D,UACd83D,IAAa1S,EAAO13D,OAAOoyE,SAASsO,qBACtChpB,EAAO0a,SAASiO,MAAM/mF,GAEtBw6B,IAEJ,IAEF93B,EAAG,mBAAmB,KAChB07D,EAAO0a,SAAS9/D,UACdolD,EAAO13D,OAAOoyE,SAASsO,qBACzB5sD,IAEAusD,IAEJ,IAEFrkF,EAAG,YAAY,KACT07D,EAAO13D,OAAO6jE,SAAWnM,EAAO0a,SAASp4B,SAAW0d,EAAO13D,OAAOoyE,SAASsO,sBAC7EnuE,GACF,IAEFvW,EAAG,WAAW,KAnCZ07D,EAAO32D,IAAItE,IAAI,aAAcgkF,GAC7B/oB,EAAO32D,IAAItE,IAAI,aAAckkF,GAqCzBjpB,EAAO0a,SAAS9/D,SAClBwhB,IAGe,KACR7e,oBAAoB,mBAAoBsrE,EAAmB,IAEtEx2F,OAAOC,OAAO0tE,EAAO0a,SAAU,CAC7BiO,QACA9tE,MACA3iB,QACAkkC,QAEJ,ECnOe,UAAe,OAC5B4jC,EAAM,aACN0f,EAAY,GACZp7E,IAEAo7E,EAAa,CACX3f,OAAQ,CACNC,OAAQ,KACRmpB,sBAAsB,EACtBC,iBAAkB,EAClBC,sBAAuB,4BACvBC,qBAAsB,mBAG1B,IAAIr2C,GAAc,EACds2C,GAAgB,EAKpB,SAASC,IACP,MAAMC,EAAezpB,EAAOD,OAAOC,OACnC,IAAKypB,GAAgBA,EAAa3f,UAAW,OAC7C,MAAMiI,EAAe0X,EAAa1X,aAC5BD,EAAe2X,EAAa3X,aAClC,GAAIA,GAAgB,GAAEA,GAAc33C,SAAS6lC,EAAO13D,OAAOy3D,OAAOspB,uBAAwB,OAC1F,GAAI,MAAOtX,EAAuD,OAClE,IAAImD,EAQJ,GALEA,EADEuU,EAAanhF,OAAOyoE,KACPl4E,SAAS,GAAE4wF,EAAa3X,cAAclzE,KAAK,2BAA4B,IAEvEmzE,EAGb/R,EAAO13D,OAAOyoE,KAAM,CACtB,IAAI2Y,EAAe1pB,EAAOiP,YAEtBjP,EAAOkL,OAAOnyC,GAAG2wD,GAAcvvD,SAAS6lC,EAAO13D,OAAO0oE,uBACxDhR,EAAOuU,UAEPvU,EAAOwU,YAAcxU,EAAO2K,WAAW,GAAGhG,WAC1C+kB,EAAe1pB,EAAOiP,aAGxB,MAAM6F,EAAY9U,EAAOkL,OAAOnyC,GAAG2wD,GAAclkB,QAAQ,6BAA6B0P,OAAkBn8C,GAAG,GAAG3xB,QACxGy/D,EAAY7G,EAAOkL,OAAOnyC,GAAG2wD,GAAcrkB,QAAQ,6BAA6B6P,OAAkBn8C,GAAG,GAAG3xB,QACxE8tE,OAAb,IAAdJ,EAA0CjO,OAAwC,IAAdA,EAA0CiO,EAAmBjO,EAAY6iB,EAAeA,EAAe5U,EAA0BjO,EAA8BiO,CAChP,CAEA9U,EAAOkT,QAAQgC,EACjB,CAEA,SAAS/3D,IACP,MACE4iD,OAAQ4pB,GACN3pB,EAAO13D,OACX,GAAI2qC,EAAa,OAAO,EACxBA,GAAc,EACd,MAAM22C,EAAc5pB,EAAOroD,YAE3B,GAAIgyE,EAAa3pB,kBAAkB4pB,EACjC5pB,EAAOD,OAAOC,OAAS2pB,EAAa3pB,OACpC3tE,OAAOC,OAAO0tE,EAAOD,OAAOC,OAAO8b,eAAgB,CACjDpc,qBAAqB,EACrBsS,qBAAqB,IAEvB3/E,OAAOC,OAAO0tE,EAAOD,OAAOC,OAAO13D,OAAQ,CACzCo3D,qBAAqB,EACrBsS,qBAAqB,SAElB,GAAI,GAAS2X,EAAa3pB,QAAS,CACxC,MAAM6pB,EAAqBx3F,OAAOC,OAAO,CAAC,EAAGq3F,EAAa3pB,QAC1D3tE,OAAOC,OAAOu3F,EAAoB,CAChCnqB,qBAAqB,EACrBsS,qBAAqB,IAEvBhS,EAAOD,OAAOC,OAAS,IAAI4pB,EAAYC,GACvCN,GAAgB,CAClB,CAIA,OAFAvpB,EAAOD,OAAOC,OAAO32D,IAAInJ,SAAS8/D,EAAO13D,OAAOy3D,OAAOupB,sBACvDtpB,EAAOD,OAAOC,OAAO17D,GAAG,MAAOklF,IACxB,CACT,CAEA,SAAS3mC,EAAOswB,GACd,MAAMsW,EAAezpB,EAAOD,OAAOC,OACnC,IAAKypB,GAAgBA,EAAa3f,UAAW,OAC7C,MAAMvK,EAAsD,SAAtCkqB,EAAanhF,OAAOi3D,cAA2BkqB,EAAarV,uBAAyBqV,EAAanhF,OAAOi3D,cAE/H,IAAIuqB,EAAmB,EACvB,MAAMC,EAAmB/pB,EAAO13D,OAAOy3D,OAAOspB,sBAa9C,GAXIrpB,EAAO13D,OAAOi3D,cAAgB,IAAMS,EAAO13D,OAAO4jE,iBACpD4d,EAAmB9pB,EAAO13D,OAAOi3D,eAG9BS,EAAO13D,OAAOy3D,OAAOopB,uBACxBW,EAAmB,GAGrBA,EAAmBrxF,KAAKmD,MAAMkuF,GAC9BL,EAAave,OAAOr1C,YAAYk0D,GAE5BN,EAAanhF,OAAOyoE,MAAQ0Y,EAAanhF,OAAO0iE,SAAWye,EAAanhF,OAAO0iE,QAAQpkC,QACzF,IAAK,IAAIzzC,EAAI,EAAGA,EAAI22F,EAAkB32F,GAAK,EACzCs2F,EAAa9e,WAAWruE,SAAS,6BAA6B0jE,EAAOuQ,UAAYp9E,OAAO+M,SAAS6pF,QAGnG,IAAK,IAAI52F,EAAI,EAAGA,EAAI22F,EAAkB32F,GAAK,EACzCs2F,EAAave,OAAOnyC,GAAGinC,EAAOuQ,UAAYp9E,GAAG+M,SAAS6pF,GAI1D,MAAMX,EAAmBppB,EAAO13D,OAAOy3D,OAAOqpB,iBACxCY,EAAYZ,IAAqBK,EAAanhF,OAAOyoE,KAE3D,GAAI/Q,EAAOuQ,YAAckZ,EAAalZ,WAAayZ,EAAW,CAC5D,IACIC,EACAxzC,EAFAyzC,EAAqBT,EAAaxa,YAItC,GAAIwa,EAAanhF,OAAOyoE,KAAM,CACxB0Y,EAAave,OAAOnyC,GAAGmxD,GAAoB/vD,SAASsvD,EAAanhF,OAAO0oE,uBAC1EyY,EAAalV,UAEbkV,EAAajV,YAAciV,EAAa9e,WAAW,GAAGhG,WACtDulB,EAAqBT,EAAaxa,aAIpC,MAAMkb,EAAkBV,EAAave,OAAOnyC,GAAGmxD,GAAoB1kB,QAAQ,6BAA6BxF,EAAOuQ,eAAex3C,GAAG,GAAG3xB,QAC9HgjF,EAAkBX,EAAave,OAAOnyC,GAAGmxD,GAAoB7kB,QAAQ,6BAA6BrF,EAAOuQ,eAAex3C,GAAG,GAAG3xB,QAGlI6iF,OAD6B,IAApBE,EACQC,OACmB,IAApBA,EACCD,EACRC,EAAkBF,GAAuBA,EAAqBC,EACtDV,EAAanhF,OAAO2kE,eAAiB,EAAImd,EAAkBF,EACnEE,EAAkBF,EAAqBA,EAAqBC,EACpDC,EAEAD,EAGnB1zC,EAAYupB,EAAOiP,YAAcjP,EAAOsR,cAAgB,OAAS,MACnE,MACE2Y,EAAiBjqB,EAAOuQ,UACxB95B,EAAYwzC,EAAiBjqB,EAAOsR,cAAgB,OAAS,OAG3D0Y,IACFC,GAAgC,SAAdxzC,EAAuB2yC,GAAoB,EAAIA,GAG/DK,EAAana,sBAAwBma,EAAana,qBAAqB/0E,QAAQ0vF,GAAkB,IAC/FR,EAAanhF,OAAO4jE,eAEpB+d,EADEA,EAAiBC,EACFD,EAAiBxxF,KAAKmD,MAAM2jE,EAAgB,GAAK,EAEjD0qB,EAAiBxxF,KAAKmD,MAAM2jE,EAAgB,GAAK,EAE3D0qB,EAAiBC,GAAsBT,EAAanhF,OAAO2kE,eAGtEwc,EAAavW,QAAQ+W,EAAgB9W,EAAU,OAAIvhF,GAEvD,CACF,CA1JAouE,EAAOD,OAAS,CACdC,OAAQ,MA2JV17D,EAAG,cAAc,KACf,MAAM,OACJy7D,GACEC,EAAO13D,OACNy3D,GAAWA,EAAOC,SACvB7iD,IACA0lC,GAAO,GAAK,IAEdv+C,EAAG,4CAA4C,KAC7Cu+C,GAAQ,IAEVv+C,EAAG,iBAAiB,CAAC6/E,EAAIrsF,KACvB,MAAM2xF,EAAezpB,EAAOD,OAAOC,OAC9BypB,IAAgBA,EAAa3f,WAClC2f,EAAa5a,cAAc/2E,EAAS,IAEtCwM,EAAG,iBAAiB,KAClB,MAAMmlF,EAAezpB,EAAOD,OAAOC,OAC9BypB,IAAgBA,EAAa3f,WAE9Byf,GACFE,EAAa7kF,SACf,IAEFvS,OAAOC,OAAO0tE,EAAOD,OAAQ,CAC3B5iD,OACA0lC,UAEJ,ECxMe,UAAoB,OACjCmd,EAAM,aACN0f,EAAY,GACZp7E,IAcA,SAAS+lF,EAAahpF,EAAGwW,GACvB,MAAMyyE,EAAe,WACnB,IAAIC,EACAC,EACAC,EACJ,MAAO,CAAC3pD,EAAOtoC,KAIb,IAHAgyF,GAAY,EACZD,EAAWzpD,EAAMvkC,OAEVguF,EAAWC,EAAW,GAC3BC,EAAQF,EAAWC,GAAY,EAE3B1pD,EAAM2pD,IAAUjyF,EAClBgyF,EAAWC,EAEXF,EAAWE,EAIf,OAAOF,CAAQ,CAEnB,CApBqB,GA4BrB,IAAIG,EACAC,EAYJ,OAnBA7vF,KAAKuG,EAAIA,EACTvG,KAAK+c,EAAIA,EACT/c,KAAKmuD,UAAY5nD,EAAE9E,OAAS,EAO5BzB,KAAK8vF,YAAc,SAAqBC,GACtC,OAAKA,GAELF,EAAKL,EAAaxvF,KAAKuG,EAAGwpF,GAC1BH,EAAKC,EAAK,GAGFE,EAAK/vF,KAAKuG,EAAEqpF,KAAQ5vF,KAAK+c,EAAE8yE,GAAM7vF,KAAK+c,EAAE6yE,KAAQ5vF,KAAKuG,EAAEspF,GAAM7vF,KAAKuG,EAAEqpF,IAAO5vF,KAAK+c,EAAE6yE,IAN1E,CAOlB,EAEO5vF,IACT,CA+FA,SAASgwF,IACF9qB,EAAO+qB,WAAWC,SAEnBhrB,EAAO+qB,WAAWE,SACpBjrB,EAAO+qB,WAAWE,YAASr5F,SACpBouE,EAAO+qB,WAAWE,OAE7B,CA7JAvL,EAAa,CACXqL,WAAY,CACVC,aAASp5F,EACTs5F,SAAS,EACTC,GAAI,WAIRnrB,EAAO+qB,WAAa,CAClBC,aAASp5F,GAsJX0S,EAAG,cAAc,KACf07D,EAAO+qB,WAAWC,QAAUhrB,EAAO13D,OAAOyiF,WAAWC,OAAO,IAE9D1mF,EAAG,UAAU,KACXwmF,GAAc,IAEhBxmF,EAAG,UAAU,KACXwmF,GAAc,IAEhBxmF,EAAG,kBAAkB,KACnBwmF,GAAc,IAEhBxmF,EAAG,gBAAgB,CAAC6/E,EAAI5c,EAAW6K,KAC5BpS,EAAO+qB,WAAWC,SACvBhrB,EAAO+qB,WAAW5Y,aAAa5K,EAAW6K,EAAa,IAEzD9tE,EAAG,iBAAiB,CAAC6/E,EAAIrsF,EAAUs6E,KAC5BpS,EAAO+qB,WAAWC,SACvBhrB,EAAO+qB,WAAWlc,cAAc/2E,EAAUs6E,EAAa,IAEzD//E,OAAOC,OAAO0tE,EAAO+qB,WAAY,CAC/B5Y,aApHF,SAAsBiZ,EAAIhZ,GACxB,MAAMiZ,EAAarrB,EAAO+qB,WAAWC,QACrC,IAAIjb,EACAub,EACJ,MAAMpiF,EAAS82D,EAAOroD,YAEtB,SAAS4zE,EAAuBj4F,GAK9B,MAAMi0E,EAAYvH,EAAO6K,cAAgB7K,EAAOuH,UAAYvH,EAAOuH,UAE/B,UAAhCvH,EAAO13D,OAAOyiF,WAAWI,MAnBjC,SAAgC73F,GACzB0sE,EAAO+qB,WAAWE,SACrBjrB,EAAO+qB,WAAWE,OAASjrB,EAAO13D,OAAOyoE,KAAO,IAAIsZ,EAAarqB,EAAOsL,WAAYh4E,EAAEg4E,YAAc,IAAI+e,EAAarqB,EAAOqL,SAAU/3E,EAAE+3E,UAE5I,CAgBMmgB,CAAuBl4F,GAGvBg4F,GAAuBtrB,EAAO+qB,WAAWE,OAAOL,aAAarjB,IAG1D+jB,GAAuD,cAAhCtrB,EAAO13D,OAAOyiF,WAAWI,KACnDpb,GAAcz8E,EAAE28E,eAAiB38E,EAAEm8E,iBAAmBzP,EAAOiQ,eAAiBjQ,EAAOyP,gBACrF6b,GAAuB/jB,EAAYvH,EAAOyP,gBAAkBM,EAAaz8E,EAAEm8E,gBAGzEzP,EAAO13D,OAAOyiF,WAAWG,UAC3BI,EAAsBh4F,EAAE28E,eAAiBqb,GAG3Ch4F,EAAEw8E,eAAewb,GACjBh4F,EAAE6+E,aAAamZ,EAAqBtrB,GACpC1sE,EAAE89E,oBACF99E,EAAEg9E,qBACJ,CAEA,GAAI9zE,MAAM4O,QAAQigF,GAChB,IAAK,IAAIl4F,EAAI,EAAGA,EAAIk4F,EAAW9uF,OAAQpJ,GAAK,EACtCk4F,EAAWl4F,KAAOi/E,GAAgBiZ,EAAWl4F,aAAc+V,GAC7DqiF,EAAuBF,EAAWl4F,SAG7Bk4F,aAAsBniF,GAAUkpE,IAAiBiZ,GAC1DE,EAAuBF,EAE3B,EAyEExc,cAvEF,SAAuB/2E,EAAUs6E,GAC/B,MAAMlpE,EAAS82D,EAAOroD,YAChB0zE,EAAarrB,EAAO+qB,WAAWC,QACrC,IAAI73F,EAEJ,SAASs4F,EAAwBn4F,GAC/BA,EAAEu7E,cAAc/2E,EAAUkoE,GAET,IAAbloE,IACFxE,EAAEogF,kBAEEpgF,EAAEgV,OAAO0lC,YACX,IAAS,KACP16C,EAAEo7E,kBAAkB,IAIxBp7E,EAAEq3E,WAAWvG,eAAc,KACpBinB,IAED/3F,EAAEgV,OAAOyoE,MAAwC,UAAhC/Q,EAAO13D,OAAOyiF,WAAWI,IAC5C73F,EAAEihF,UAGJjhF,EAAE8wE,gBAAe,IAGvB,CAEA,GAAI5nE,MAAM4O,QAAQigF,GAChB,IAAKl4F,EAAI,EAAGA,EAAIk4F,EAAW9uF,OAAQpJ,GAAK,EAClCk4F,EAAWl4F,KAAOi/E,GAAgBiZ,EAAWl4F,aAAc+V,GAC7DuiF,EAAwBJ,EAAWl4F,SAG9Bk4F,aAAsBniF,GAAUkpE,IAAiBiZ,GAC1DI,EAAwBJ,EAE5B,GAmCF,EC3Le,UAAyB,OACtCrrB,EAAM,aACN0f,EAAY,GACZp7E,IAEAo7E,EAAa,CACXgM,gBAAiB,CACfC,OAAQ,GACRC,QAAS,EACTC,MAAO,IACP/E,MAAO,EACPgF,SAAU,EACVC,cAAc,EACdzI,YAAa,QChBJ,SAAoBh7E,GACjC,MAAM,OACJ6kE,EAAM,OACNnN,EAAM,GACN17D,EAAE,aACF6tE,EAAY,cACZtD,EAAa,gBACbmd,EAAe,YACfC,EAAW,gBACXC,EAAe,gBACfC,GACE7jF,EAmCJ,IAAI8jF,EAlCJ9nF,EAAG,cAAc,KACf,GAAI07D,EAAO13D,OAAO6kE,SAAWA,EAAQ,OACrCnN,EAAOuD,WAAWtkE,KAAK,GAAG+gE,EAAO13D,OAAOimE,yBAAyBpB,KAE7D8e,GAAeA,KACjBjsB,EAAOuD,WAAWtkE,KAAK,GAAG+gE,EAAO13D,OAAOimE,4BAG1C,MAAM8d,EAAwBL,EAAkBA,IAAoB,CAAC,EACrE35F,OAAOC,OAAO0tE,EAAO13D,OAAQ+jF,GAC7Bh6F,OAAOC,OAAO0tE,EAAO8b,eAAgBuQ,EAAsB,IAE7D/nF,EAAG,gBAAgB,KACb07D,EAAO13D,OAAO6kE,SAAWA,GAC7BgF,GAAc,IAEhB7tE,EAAG,iBAAiB,CAAC6/E,EAAIrsF,KACnBkoE,EAAO13D,OAAO6kE,SAAWA,GAC7B0B,EAAc/2E,EAAS,IAEzBwM,EAAG,iBAAiB,KAClB,GAAI07D,EAAO13D,OAAO6kE,SAAWA,GAEzB+e,EAAiB,CACnB,IAAKC,IAAoBA,IAAkBJ,aAAc,OAEzD/rB,EAAOkL,OAAOvmE,MAAK27E,IACAtgB,EAAO9hE,EAAEoiF,GACjBztF,KAAK,gHAAgHgE,QAAQ,IAGxIq1F,GACF,KAGF5nF,EAAG,iBAAiB,KACd07D,EAAO13D,OAAO6kE,SAAWA,IAExBnN,EAAOkL,OAAO3uE,SACjB6vF,GAAyB,GAG3Bh0F,uBAAsB,KAChBg0F,GAA0BpsB,EAAOkL,QAAUlL,EAAOkL,OAAO3uE,SAC3D41E,IACAia,GAAyB,EAC3B,IACA,GAEN,CD+BE,CAAW,CACTjf,OAAQ,YACRnN,SACA17D,KACA6tE,aA5EmB,KACnB,MACEn7E,MAAOs1F,EACPhxF,OAAQixF,EAAY,OACpBrhB,EAAM,gBACNK,GACEvL,EACE13D,EAAS03D,EAAO13D,OAAOojF,gBACvBjnE,EAAeu7C,EAAOv7C,eACtBhhB,EAAYu8D,EAAOuH,UACnBilB,EAAS/nE,EAA4B6nE,EAAc,EAA1B7oF,EAA2C8oF,EAAe,EAA3B9oF,EACxDkoF,EAASlnE,EAAenc,EAAOqjF,QAAUrjF,EAAOqjF,OAChDpkB,EAAYj/D,EAAOujF,MAEzB,IAAK,IAAI14F,EAAI,EAAGoJ,EAAS2uE,EAAO3uE,OAAQpJ,EAAIoJ,EAAQpJ,GAAK,EAAG,CAC1D,MAAMgwF,EAAWjY,EAAOnyC,GAAG5lC,GACrBm5E,EAAYf,EAAgBp4E,GAE5Bs5F,GAAgBD,EADFrJ,EAAS,GAAGjU,kBACa5C,EAAY,GAAKA,EACxDogB,EAA8C,mBAApBpkF,EAAOwjF,SAA0BxjF,EAAOwjF,SAASW,GAAgBA,EAAenkF,EAAOwjF,SACvH,IAAIa,EAAUloE,EAAeknE,EAASe,EAAmB,EACrDE,EAAUnoE,EAAe,EAAIknE,EAASe,EAEtCG,GAActlB,EAAY9uE,KAAKguC,IAAIimD,GACnCd,EAAUtjF,EAAOsjF,QAEE,iBAAZA,IAAkD,IAA1BA,EAAQrxF,QAAQ,OACjDqxF,EAAUjkF,WAAWW,EAAOsjF,SAAW,IAAMtf,GAG/C,IAAIwgB,EAAaroE,EAAe,EAAImnE,EAAUc,EAC1CK,EAAatoE,EAAemnE,EAAUc,EAAmB,EACzD5F,EAAQ,GAAK,EAAIx+E,EAAOw+E,OAASruF,KAAKguC,IAAIimD,GAE1Cj0F,KAAKguC,IAAIsmD,GAAc,OAAOA,EAAa,GAC3Ct0F,KAAKguC,IAAIqmD,GAAc,OAAOA,EAAa,GAC3Cr0F,KAAKguC,IAAIomD,GAAc,OAAOA,EAAa,GAC3Cp0F,KAAKguC,IAAIkmD,GAAW,OAAOA,EAAU,GACrCl0F,KAAKguC,IAAImmD,GAAW,OAAOA,EAAU,GACrCn0F,KAAKguC,IAAIqgD,GAAS,OAAOA,EAAQ,GACrC,MAAMkG,EAAiB,eAAeD,OAAgBD,OAAgBD,iBAA0BD,iBAAuBD,eAAqB7F,KAK5I,GAJkB,GAAax+E,EAAQ66E,GAC7B1/E,UAAUupF,GACpB7J,EAAS,GAAG5tF,MAAM6K,OAAmD,EAAzC3H,KAAKguC,IAAIhuC,KAAKkW,MAAM+9E,IAE5CpkF,EAAOyjF,aAAc,CAEvB,IAAIkB,EAAkBxoE,EAAe0+D,EAAStwF,KAAK,6BAA+BswF,EAAStwF,KAAK,4BAC5Fq6F,EAAiBzoE,EAAe0+D,EAAStwF,KAAK,8BAAgCswF,EAAStwF,KAAK,+BAEjE,IAA3Bo6F,EAAgB1wF,SAClB0wF,EAAkB,GAAa3kF,EAAQ66E,EAAU1+D,EAAe,OAAS,QAG7C,IAA1ByoE,EAAe3wF,SACjB2wF,EAAiB,GAAa5kF,EAAQ66E,EAAU1+D,EAAe,QAAU,WAGvEwoE,EAAgB1wF,SAAQ0wF,EAAgB,GAAG13F,MAAM2xB,QAAUwlE,EAAmB,EAAIA,EAAmB,GACrGQ,EAAe3wF,SAAQ2wF,EAAe,GAAG33F,MAAM2xB,SAAWwlE,EAAmB,GAAKA,EAAmB,EAC3G,CACF,GAgBA7d,cAboB/2E,IACpB,MAAM,YACJwrF,GACEtjB,EAAO13D,OAAOojF,iBACUpI,EAActjB,EAAOkL,OAAOr4E,KAAKywF,GAAetjB,EAAOkL,QAC/DpoD,WAAWhrB,GAAUjF,KAAK,gHAAgHiwB,WAAWhrB,EAAS,EASlLm0F,YAAa,KAAM,EACnBD,gBAAiB,KAAM,CACrBtsB,qBAAqB,KAG3B,IP9EAxhE,IAAEjL,UAAUk6F,OAAM,WAChBjvF,IAAE,iBAAiB8iD,YAAY,6BAE/B9iD,IAAE,oBAAoBkvF,OAAM,WAC1BlvF,IAAE,WAAW23B,YAAY,aACzB33B,IAAE,YAAY23B,YAAY,aAC1B33B,IAAE,kBAAkBgC,SAAS,aAC7BhC,IAAE,mBAAmBgC,SAAS,YAChC,IACA,IAAIo/D,EAAgB,IAAIp2D,GAAO,0BAA2B,CACxD4iE,aAAc,GACdvM,cAAe,EACfwR,MAAM,EACNvR,UAAU,EACVwU,aAAc,EACdpU,WAAY,CACVC,OAAQ,wCACRC,OAAQ,yCAEVL,uBAAuB,EACvBC,qBAAqB,IAEN,IAAIx2D,GAAO,uBAAwB,CAClD4iE,aAAc,GACdiF,MAAM,EACNiD,aAAc,EACdpU,WAAY,CACVC,OAAQ,8BACRC,OAAQ,+BAEVC,OAAQ,CACNC,OAAQV,KAGe,IAAIp2D,GAAO,2BAA4B,CAC9D6nE,MAAM,EACNiD,aAAc,EACdzU,cAAe,EACfuM,aAAc,EACd4O,SAAU,CAAEh0D,MAAO,KACnBymD,OAAQ,OACRkgB,WAAY,CACRC,WAAW,GAEf1tB,WAAY,CACR,OAAU,sBACV,OAAU,yBAkBlB,SAAS2tB,IACPC,EAAsB,WAAY,SAAUC,EAC9C,CAKA,SAASA,IACPD,EAAsB,gBAAiB,SACzC,CAQA,SAASA,EAAsBE,EAAYC,GAAyB,IAAlBC,EAAY,UAAH,6CAAG,KACtD9pC,EAAW7wD,SAASiE,uBAAuBw2F,GAE7C5pC,EAASvnD,OAAS,EACpBC,MAAMggB,KAAKsnC,GAAUxyD,SAAQ,SAAC2G,GAC5BA,EAAQ/E,iBAAiB,SAAS,WAChC26F,EAAeF,GACXC,GACFA,GAEJ,GACF,IAEAr6F,OAAO8F,YAAW,WAChBm0F,EAAsBE,EAAYC,EAAOC,EAC3C,GAAG,IAEP,CAMA,SAASC,EAAensF,GACtB,IAAMzJ,EAAUhF,SAAS+F,eAAe0I,GACxC,GAAIzJ,EAAS,CAEX,IACM61F,EAAW76F,SAASmD,KAAKi0B,wBAAwBhqB,IACjD0tF,EAAc91F,EAAQoyB,wBAAwBhqB,IAEpD9M,OAAOqE,SAAS,CACdyI,IAAK0tF,EAAcD,EALN,GAMb/a,SAAU,UAEd,MACEx/E,OAAO8F,YAAW,WAChBw0F,EAAensF,EACjB,GAAG,IAEP,CAEA,GApEE8rF,EAAsB,UAAW,cAAeD,GAoE9Ct6F,SAAS+F,eAAe,kBAAmB,CAC7CkF,IAAE,kCAAkC8vF,UAAU,YAE9C/6F,SACG+F,eAAe,kBACf9F,iBAAiB,sBACpB,SAAS+6F,IACPh7F,SACG+F,eAAe,kBACfukB,oBAAoB,qBAAsB0wE,GAEuB,IAAhE/vF,IAAE,kCAAkC5B,SAAS,QAAQC,QACvD2B,IAAE,kCAAkC8vF,UAAU,YAGhD/6F,SACG+F,eAAe,kBACf9F,iBAAiB,qBAAsB+6F,GAAW,EACvD,IAbqD,EAcvD,CACF,8BSrKA/vF,IAAEjL,UAAUk6F,OAAM,WAChB,IAGIe,EAHEp1C,EAAa56C,IAAE,0BACfiwF,EAAU,CAAC,EACbC,EAAuB,EAI3B,GAAIt1C,EAAWv8C,OAAQ,KA8BZ8xF,EAAT,WACE,IAAMz6E,EAAO1V,IAAEpD,MAEf,SAASwzF,IACP,IAAM3rF,EAAMiR,EAAKhV,KAAK,oBAChBjD,EAAMiY,EAAKhV,KAAK,oBAGtB,OADEwvF,GAAwBzrF,GAAOyrF,GAAwBzyF,CAE3D,CAGA,OAA6B,IAAzByyF,GACFxhF,QAAQ4nC,IAAI45C,EAAsBF,GAAe,KAC1Ct6E,EAAKjV,GAAGuvF,GAAe,OAGhCthF,QAAQ4nC,IAAI,UAAW85C,IAAc16E,EAAKjV,GAAGuvF,GAAe,MAGrDI,KAAgB16E,EAAKjV,GAAGuvF,GAAe,KAChD,EAlDA,IAAIz9E,KAAJ,CAAY,yBAA0B,CACpCgY,aAAc,oBACdrgB,OAAQimF,IAIVnwF,IAAE,iCAAiCoG,GAAG,mBAAmB,WAEvD8pF,GAAwBlwF,IAAE,kBAAkB1F,MAG5C,IAAIiY,KAAJ,CAAY,yBAA0B,CACpCrI,OAAQimF,GAEZ,IAGoBnwF,IAAE,6BACVoG,GAAG,UAAU,YAAgB,IAAblH,EAAM,EAANA,QA8D5B,SAAwBmxF,GACtB,IAAMC,EAAWD,EAAU,GACrBzhD,EAAQyhD,EAAUzwD,QAAQ,YAAYl/B,KAAK,cAE7C6vF,EAAcN,EAAQrhD,GACrB2hD,IACHA,EAAcN,EAAQrhD,GAAS,IAGjC,IAAM1lC,EAAQlJ,IAAAA,QAAUswF,EAASnmF,MAAOomF,GACpCD,EAASvmF,SAEI,IAAXb,GAEF+mF,EAAQrhD,GAAO7tC,KAAKuvF,EAASnmF,OAI/B8lF,EAAQrhD,GAAOhoC,OAAOsC,EAAO,EAEjC,EA9EEsnF,CADkBxwF,IAAEd,IAEpB8wF,EA6BF,SAAwBC,GACtB,IAAIQ,EAAQ,GACZ,IAAK,IAAMj0F,KAAQyzF,EAAS,CAC1B,IAAMrhD,EAAQqhD,EAAQzzF,GACtB,GAAKoyC,EAAMvwC,OAKX,GAAKoyF,EAAMpyF,OAAX,CAOA,IAFA,IAAMqyF,EAAY,GAETz7F,EAAI,EAAGA,EAAIw7F,EAAMpyF,OAAQpJ,IAChC,IAAK,IAAI65C,EAAI,EAAGA,EAAIF,EAAMvwC,OAAQywC,IAAK,CACrC,IAAMp5B,EAAO+6E,EAAMx7F,GAAK25C,EAAME,GAC9B4hD,EAAU3vF,KAAK2U,EACjB,CAEF+6E,EAAQC,CAVR,MAFED,EAAQ7hD,EAAM5wC,MAAM,EAaxB,CAEA,OADoByyF,EAAMnxF,KAAK,KAEjC,CAvDgBqxF,CAAeV,GAC7B,IAAI19E,KAAJ,CAAY,yBAA0B,CACpCrI,OAAQimF,GAEZ,GA0EF,CACF","sources":["webpack://wp-soup/./assets/js/scripts/blocks.js","webpack://wp-soup/./assets/js/scripts/buddypress.js","webpack://wp-soup/./assets/js/scripts/cookies.js","webpack://wp-soup/./assets/js/scripts/ie11.js","webpack://wp-soup/./assets/js/scripts/resizes.js","webpack://wp-soup/./assets/js/scripts/scroll-to-top.js","webpack://wp-soup/./assets/js/vendors/clamp.js","webpack://wp-soup/./assets/js/vendors/mobile.js","webpack://wp-soup/./assets/js/vendors/parallax.js","webpack://wp-soup/./src/Core/Blocks/Content/common/featured_menu_items/script.js","webpack://wp-soup/./src/Core/Blocks/Content/common/pricing/script.js","webpack://wp-soup/./src/Core/Blocks/Content/common/reviews/script.js","webpack://wp-soup/./node_modules/desandro-matches-selector/matches-selector.js","webpack://wp-soup/./node_modules/ev-emitter/ev-emitter.js","webpack://wp-soup/./node_modules/fizzy-ui-utils/utils.js","webpack://wp-soup/./node_modules/form-data/lib/browser.js","webpack://wp-soup/./node_modules/get-size/get-size.js","webpack://wp-soup/./node_modules/isotope-layout/js/isotope.js","webpack://wp-soup/./node_modules/isotope-layout/js/item.js","webpack://wp-soup/./node_modules/isotope-layout/js/layout-mode.js","webpack://wp-soup/./node_modules/isotope-layout/js/layout-modes/fit-rows.js","webpack://wp-soup/./node_modules/isotope-layout/js/layout-modes/masonry.js","webpack://wp-soup/./node_modules/isotope-layout/js/layout-modes/vertical.js","webpack://wp-soup/./node_modules/macy/dist/macy.js","webpack://wp-soup/./node_modules/masonry-layout/masonry.js","webpack://wp-soup/./node_modules/object-fit-images/dist/ofi.common-js.js","webpack://wp-soup/./node_modules/outlayer/item.js","webpack://wp-soup/./node_modules/outlayer/outlayer.js","webpack://wp-soup/./node_modules/what-input/dist/what-input.js","webpack://wp-soup/external var \"jQuery\"","webpack://wp-soup/webpack/bootstrap","webpack://wp-soup/webpack/runtime/compat get default export","webpack://wp-soup/webpack/runtime/define property getters","webpack://wp-soup/webpack/runtime/hasOwnProperty shorthand","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.core.utils.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.util.mediaQuery.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.core.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.core.plugin.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.util.keyboard.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.accordion.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.util.nest.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.accordionMenu.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.util.box.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.positionable.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.util.motion.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.util.triggers.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.util.touch.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.dropdown.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.dropdownMenu.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.util.imageLoader.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.equalizer.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.drilldown.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.responsiveMenu.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.responsiveToggle.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.reveal.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.slider.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.smoothScroll.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.sticky.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.tabs.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.toggler.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.tooltip.js","webpack://wp-soup/./node_modules/foundation-sites/js/foundation.responsiveAccordionTabs.js","webpack://wp-soup/./assets/js/vendors/foundation.js","webpack://wp-soup/./assets/js/vendors/macy.js","webpack://wp-soup/./assets/js/vendors/object-fit-images.js","webpack://wp-soup/./node_modules/countup.js/dist/countUp.min.js","webpack://wp-soup/./assets/js/scripts/count-on-scroll.js","webpack://wp-soup/./node_modules/axios/lib/helpers/bind.js","webpack://wp-soup/./node_modules/axios/lib/utils.js","webpack://wp-soup/./node_modules/axios/lib/core/AxiosError.js","webpack://wp-soup/./node_modules/axios/lib/env/classes/FormData.js","webpack://wp-soup/./node_modules/axios/lib/helpers/toFormData.js","webpack://wp-soup/./node_modules/axios/lib/helpers/AxiosURLSearchParams.js","webpack://wp-soup/./node_modules/axios/lib/helpers/buildURL.js","webpack://wp-soup/./node_modules/axios/lib/core/InterceptorManager.js","webpack://wp-soup/./node_modules/axios/lib/defaults/transitional.js","webpack://wp-soup/./node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","webpack://wp-soup/./node_modules/axios/lib/platform/browser/classes/FormData.js","webpack://wp-soup/./node_modules/axios/lib/platform/browser/index.js","webpack://wp-soup/./node_modules/axios/lib/helpers/formDataToJSON.js","webpack://wp-soup/./node_modules/axios/lib/defaults/index.js","webpack://wp-soup/./node_modules/axios/lib/helpers/toURLEncodedForm.js","webpack://wp-soup/./node_modules/axios/lib/helpers/parseHeaders.js","webpack://wp-soup/./node_modules/axios/lib/core/AxiosHeaders.js","webpack://wp-soup/./node_modules/axios/lib/core/transformData.js","webpack://wp-soup/./node_modules/axios/lib/cancel/isCancel.js","webpack://wp-soup/./node_modules/axios/lib/cancel/CanceledError.js","webpack://wp-soup/./node_modules/axios/lib/helpers/cookies.js","webpack://wp-soup/./node_modules/axios/lib/core/buildFullPath.js","webpack://wp-soup/./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack://wp-soup/./node_modules/axios/lib/helpers/combineURLs.js","webpack://wp-soup/./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack://wp-soup/./node_modules/axios/lib/helpers/speedometer.js","webpack://wp-soup/./node_modules/axios/lib/adapters/xhr.js","webpack://wp-soup/./node_modules/axios/lib/core/settle.js","webpack://wp-soup/./node_modules/axios/lib/helpers/parseProtocol.js","webpack://wp-soup/./node_modules/axios/lib/adapters/adapters.js","webpack://wp-soup/./node_modules/axios/lib/helpers/null.js","webpack://wp-soup/./node_modules/axios/lib/core/dispatchRequest.js","webpack://wp-soup/./node_modules/axios/lib/core/mergeConfig.js","webpack://wp-soup/./node_modules/axios/lib/env/data.js","webpack://wp-soup/./node_modules/axios/lib/helpers/validator.js","webpack://wp-soup/./node_modules/axios/lib/core/Axios.js","webpack://wp-soup/./node_modules/axios/lib/cancel/CancelToken.js","webpack://wp-soup/./node_modules/axios/lib/axios.js","webpack://wp-soup/./node_modules/axios/lib/helpers/spread.js","webpack://wp-soup/./node_modules/axios/lib/helpers/isAxiosError.js","webpack://wp-soup/./assets/js/scripts/favorites.js","webpack://wp-soup/./assets/js/scripts/images.js","webpack://wp-soup/./assets/js/scripts/menu.js","webpack://wp-soup/./assets/js/scripts/woocommerce.js","webpack://wp-soup/./assets/js/scripts/wp-admin.js","webpack://wp-soup/./src/Core/Blocks/Content/common/related_pages/script.js","webpack://wp-soup/./node_modules/ssr-window/ssr-window.esm.js","webpack://wp-soup/./src/Core/Blocks/Content/common/tag_filter/script.js","webpack://wp-soup/./src/Core/Blocks/Marginals/header/thin_topbar_menu/script.js","webpack://wp-soup/./node_modules/dom7/node_modules/ssr-window/ssr-window.esm.js","webpack://wp-soup/./node_modules/dom7/dom7.esm.js","webpack://wp-soup/./node_modules/swiper/shared/dom.js","webpack://wp-soup/./node_modules/swiper/shared/utils.js","webpack://wp-soup/./node_modules/swiper/shared/get-support.js","webpack://wp-soup/./node_modules/swiper/shared/get-device.js","webpack://wp-soup/./node_modules/swiper/shared/get-browser.js","webpack://wp-soup/./node_modules/swiper/core/events-emitter.js","webpack://wp-soup/./node_modules/swiper/core/update/index.js","webpack://wp-soup/./node_modules/swiper/core/update/updateSize.js","webpack://wp-soup/./node_modules/swiper/core/update/updateSlides.js","webpack://wp-soup/./node_modules/swiper/core/update/updateAutoHeight.js","webpack://wp-soup/./node_modules/swiper/core/update/updateSlidesOffset.js","webpack://wp-soup/./node_modules/swiper/core/update/updateSlidesProgress.js","webpack://wp-soup/./node_modules/swiper/core/update/updateProgress.js","webpack://wp-soup/./node_modules/swiper/core/update/updateSlidesClasses.js","webpack://wp-soup/./node_modules/swiper/core/update/updateActiveIndex.js","webpack://wp-soup/./node_modules/swiper/core/update/updateClickedSlide.js","webpack://wp-soup/./node_modules/swiper/core/translate/index.js","webpack://wp-soup/./node_modules/swiper/core/translate/getTranslate.js","webpack://wp-soup/./node_modules/swiper/core/translate/setTranslate.js","webpack://wp-soup/./node_modules/swiper/core/translate/minTranslate.js","webpack://wp-soup/./node_modules/swiper/core/translate/maxTranslate.js","webpack://wp-soup/./node_modules/swiper/core/translate/translateTo.js","webpack://wp-soup/./node_modules/swiper/core/transition/transitionEmit.js","webpack://wp-soup/./node_modules/swiper/core/slide/index.js","webpack://wp-soup/./node_modules/swiper/core/slide/slideTo.js","webpack://wp-soup/./node_modules/swiper/core/slide/slideToLoop.js","webpack://wp-soup/./node_modules/swiper/core/slide/slideNext.js","webpack://wp-soup/./node_modules/swiper/core/slide/slidePrev.js","webpack://wp-soup/./node_modules/swiper/core/slide/slideReset.js","webpack://wp-soup/./node_modules/swiper/core/slide/slideToClosest.js","webpack://wp-soup/./node_modules/swiper/core/slide/slideToClickedSlide.js","webpack://wp-soup/./node_modules/swiper/core/loop/index.js","webpack://wp-soup/./node_modules/swiper/core/loop/loopCreate.js","webpack://wp-soup/./node_modules/swiper/core/loop/loopFix.js","webpack://wp-soup/./node_modules/swiper/core/loop/loopDestroy.js","webpack://wp-soup/./node_modules/swiper/core/events/onTouchStart.js","webpack://wp-soup/./node_modules/swiper/core/events/onTouchMove.js","webpack://wp-soup/./node_modules/swiper/core/events/onTouchEnd.js","webpack://wp-soup/./node_modules/swiper/core/events/onResize.js","webpack://wp-soup/./node_modules/swiper/core/events/onClick.js","webpack://wp-soup/./node_modules/swiper/core/events/onScroll.js","webpack://wp-soup/./node_modules/swiper/core/events/index.js","webpack://wp-soup/./node_modules/swiper/core/breakpoints/setBreakpoint.js","webpack://wp-soup/./node_modules/swiper/core/breakpoints/index.js","webpack://wp-soup/./node_modules/swiper/core/breakpoints/getBreakpoint.js","webpack://wp-soup/./node_modules/swiper/core/classes/index.js","webpack://wp-soup/./node_modules/swiper/core/classes/addClasses.js","webpack://wp-soup/./node_modules/swiper/core/classes/removeClasses.js","webpack://wp-soup/./node_modules/swiper/core/check-overflow/index.js","webpack://wp-soup/./node_modules/swiper/core/defaults.js","webpack://wp-soup/./node_modules/swiper/core/moduleExtendParams.js","webpack://wp-soup/./node_modules/swiper/core/core.js","webpack://wp-soup/./node_modules/swiper/core/transition/index.js","webpack://wp-soup/./node_modules/swiper/core/transition/setTransition.js","webpack://wp-soup/./node_modules/swiper/core/transition/transitionStart.js","webpack://wp-soup/./node_modules/swiper/core/transition/transitionEnd.js","webpack://wp-soup/./node_modules/swiper/core/grab-cursor/index.js","webpack://wp-soup/./node_modules/swiper/core/grab-cursor/setGrabCursor.js","webpack://wp-soup/./node_modules/swiper/core/grab-cursor/unsetGrabCursor.js","webpack://wp-soup/./node_modules/swiper/core/images/index.js","webpack://wp-soup/./node_modules/swiper/core/images/loadImage.js","webpack://wp-soup/./node_modules/swiper/core/images/preloadImages.js","webpack://wp-soup/./node_modules/swiper/core/modules/resize/resize.js","webpack://wp-soup/./node_modules/swiper/core/modules/observer/observer.js","webpack://wp-soup/./node_modules/swiper/shared/create-element-if-not-defined.js","webpack://wp-soup/./node_modules/swiper/shared/classes-to-selector.js","webpack://wp-soup/./node_modules/swiper/shared/create-shadow.js","webpack://wp-soup/./node_modules/swiper/shared/effect-target.js","webpack://wp-soup/../../themes/friesland-boating/assets/js/script.js","webpack://wp-soup/./node_modules/swiper/modules/navigation/navigation.js","webpack://wp-soup/./node_modules/swiper/modules/pagination/pagination.js","webpack://wp-soup/./node_modules/swiper/modules/scrollbar/scrollbar.js","webpack://wp-soup/./node_modules/swiper/modules/autoplay/autoplay.js","webpack://wp-soup/./node_modules/swiper/modules/thumbs/thumbs.js","webpack://wp-soup/./node_modules/swiper/modules/controller/controller.js","webpack://wp-soup/./node_modules/swiper/modules/effect-coverflow/effect-coverflow.js","webpack://wp-soup/./node_modules/swiper/shared/effect-init.js","webpack://wp-soup/../../themes/friesland-boating/resources/blocks/custom/boat_filter/script.js"],"sourcesContent":["// Add classes to blocks that normally don't have classes.\nconst addClassToBlock = (props, blockType, attributes) => {\n const notDefined = typeof props.className === \"undefined\" || !props.className ? true : false;\n\n if (blockType.name === \"core/list\") {\n return Object.assign(props, {\n className: notDefined ? `wp-block-list` : `wp-block-list ${props.className}`,\n });\n }\n\n // if (blockType.name === \"core/paragraph\") {\n // return Object.assign(props, {\n // className: notDefined\n // ? \"wp-block-paragraph\"\n // : `wp-block-paragraph ${props.className}`\n // });\n // }\n\n return props;\n};\n\nif (wp.hooks !== undefined) {\n wp.hooks.addFilter(\"blocks.getSaveContent.extraProps\", \"wp-soup/add-class-to-blocks\", addClassToBlock);\n}\n\n/**\n * returns blocks on page, all on same level (instead of innerblocks)\n * @returns [{}]\n */\nfunction wpSoupGetBlocksOnPage() {\n let blocks = [];\n // get all blocks, and call recursive function for it\n wp.data\n .select(\"core/block-editor\")\n .getBlocks()\n .forEach((block) => {\n blocks = [...blocks, ...wpSoupGetBlocksFromBlock(block)];\n });\n return blocks;\n}\n\n/**\n * recursive method for wpSoupGetBlocksOnPage()\n * @param block\n * @returns [{}]\n */\nfunction wpSoupGetBlocksFromBlock(block) {\n let blocks = [block];\n if (block.hasOwnProperty(\"innerBlocks\")) {\n block.innerBlocks.forEach((inner_block) => {\n blocks = [...blocks, ...wpSoupGetBlocksFromBlock(inner_block)];\n });\n }\n return blocks;\n}\n\nif (wp.domReady !== undefined) {\n wp.domReady(() => {\n /**\n * Deprecated blocks\n * `wp_soup_deprecated_blocks` gets shared from php, it's a constant array\n * of strings\n */\n if (typeof wp_soup_deprecated_blocks !== \"undefined\") {\n const available_blocks = wp.blocks.getBlockTypes();\n const blocks_in_page = wpSoupGetBlocksOnPage();\n\n wp_soup_deprecated_blocks.forEach((deprecated_block) => {\n // check if the deprecated block is used on this page\n const current_result = blocks_in_page.find((block) => {\n return block.name === deprecated_block;\n });\n\n // if it's on the page, set it in the deprecated blocks category\n // we do this because unregistering it would break the page.\n if (current_result !== undefined) {\n const result = available_blocks.find((block) => {\n return block.name === deprecated_block;\n });\n if (result !== undefined) {\n result.category = \"deprecated\";\n }\n }\n\n // if it's not used on the page, we can fully remove it instead\n else {\n wp.blocks.unregisterBlockType(deprecated_block);\n }\n });\n }\n });\n}\n\ndocument.addEventListener(\n \"DOMContentLoaded\",\n () => {\n for (let i = 1; i < 10; i++) {\n const clampTo = document.querySelectorAll(`.clamp-to-${i}`);\n for (c of clampTo) {\n window.$clamp(c, { clamp: i });\n }\n }\n },\n { passive: true }\n);\n","document.addEventListener(\n \"DOMContentLoaded\",\n () => {\n const changeOption = (selector, label) => {\n const field = document.querySelector(selector);\n if (field) {\n const option = field.querySelector(\"option:first-child\");\n if (option) {\n option.innerHTML = label;\n option.disabled = true;\n }\n }\n };\n\n changeOption('#buddypress select[name$=\"day\"]', \"Geboortedag\");\n changeOption('#buddypress select[name$=\"month\"]', \"Geboortemaand\");\n changeOption('#buddypress select[name$=\"year\"]', \"Geboortejaar\");\n },\n { passive: true }\n);\n","function setCookie(cname, cvalue, exdays) {\n const d = new Date();\n d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000);\n const expires = \"expires=\" + d.toUTCString();\n document.cookie = cname + \"=\" + cvalue + \";\" + expires;\n}\n\nconst translationNotice = document.querySelector(\".automatic-translation-notice\");\nif (translationNotice) {\n translationNotice\n .querySelector(\"button\")\n .addEventListener(\"click\", (e) => setCookie(\"hide-automatic-translation-notice\", true, 7), { passive: true });\n}\n","window.addEventListener(\n \"load\",\n () => {\n // Do IE stuff\n if (window.document.documentMode) {\n if (Foundation.MediaQuery.current !== \"small\") {\n const columns = document.querySelectorAll(\".wp-block-column\");\n for (const column of columns) {\n const flexBasis = column.style.flexBasis;\n const isMargin = column.parentElement.classList.contains(\"margin\");\n if (flexBasis && !isMargin) {\n column.style.setAttribute(\"width\", flexBasis);\n column.style.setProperty(\"flex-basis\", \"auto\", \"important\");\n } else if (flexBasis && isMargin) {\n column.style.setAttribute(\"width\", `calc(${flexBasis} - 2rem)`);\n column.style.setProperty(\"flex-basis\", \"auto\", \"important\");\n }\n }\n }\n } else {\n if (Foundation.MediaQuery.current !== \"small\") {\n const columns = document.querySelectorAll(\".wp-block-column\");\n for (const column of columns) {\n const flexBasis = column.style.flexBasis;\n const isMargin = column.parentElement.classList.contains(\"margin\");\n if (flexBasis && isMargin) {\n column.style.setProperty(\"flex-basis\", `calc(${flexBasis} - 2rem)`, \"important\");\n }\n }\n }\n }\n },\n { passive: true }\n);\n","/**\n * Set scrollbar sizes\n */\ndocument.addEventListener(\n \"DOMContentLoaded\",\n () => {\n function setScrollbarSize() {\n // Add temporary box to wrapper.\n let scrollbox = document.createElement(\"div\");\n // Make box scrollable.\n scrollbox.style.overflow = \"scroll\";\n // Append box to document.\n document.body.appendChild(scrollbox);\n // Measure inner width of box.\n let scrollBarWidth = scrollbox.offsetWidth - scrollbox.clientWidth;\n // Remove box.\n document.body.removeChild(scrollbox);\n\n if (!(document.body.scrollHeight > window.innerHeight)) {\n scrollBarWidth = 0;\n }\n\n if (scrollBarWidth !== 0) {\n document.body.classList.add(\"has-scrollbar\");\n document.body.setAttribute(\"style\", `--scroll-bar: ${scrollBarWidth}px`);\n } else {\n document.body.classList.remove(\"has-scrollbar\");\n }\n }\n\n setScrollbarSize();\n window.addEventListener(\"resize\", setScrollbarSize, { passive: true });\n\n const epve = document.querySelector(\".edit-post-visual-editor\");\n if (epve !== null) {\n function getEditorWidth() {\n const width = epve.offsetWidth;\n document.body.setAttribute(\"style\", `--editor-width: ${width - 2}px`);\n }\n\n getEditorWidth();\n window.addEventListener(\"resize\", getEditorWidth, { passive: true });\n }\n\n // const adminToolbar = document.querySelector(\"#wpadminbar\");\n // if (adminToolbar !== null) {\n // const html = document.querySelector(\"html:not(.wp-toolbar)\");\n // if (html !== null) {\n // html.setAttribute(\"style\", \"margin-top: 50px !important;\");\n // }\n // }\n },\n { passive: true }\n);\n","(() => {\n const backTop = document.getElementsByClassName(\"js-back-to-top\")[0];\n if (backTop) {\n const dataElement = backTop.getAttribute(\"data-element\");\n const scrollElement = dataElement ? document.querySelector(dataElement) : window;\n\n const //scroll to top duration\n scrollDuration = parseInt(backTop.getAttribute(\"data-duration\")) || 300;\n\n const //show back-to-top if scrolling > scrollOffset\n scrollOffset = parseInt(backTop.getAttribute(\"data-offset\")) || 0;\n\n let scrolling = false;\n\n //detect click on back-to-top link\n backTop.addEventListener(\"click\", (event) => {\n event.preventDefault();\n if (!window.requestAnimationFrame) {\n scrollElement.scrollTo(0, 0);\n } else {\n dataElement ? scrollTo(0, scrollDuration, false, scrollElement) : scrollTo(0, scrollDuration);\n }\n //move the focus to the #top-element - don't break keyboard navigation\n moveFocus(document.getElementById(backTop.getAttribute(\"href\").replace(\"#\", \"\")));\n });\n\n //listen to the window scroll and update back-to-top visibility\n checkBackToTop();\n if (scrollOffset > 0) {\n scrollElement.addEventListener(\n \"scroll\",\n (event) => {\n if (!scrolling) {\n scrolling = true;\n !window.requestAnimationFrame\n ? setTimeout(() => {\n checkBackToTop();\n }, 250)\n : window.requestAnimationFrame(checkBackToTop);\n }\n },\n { passive: true }\n );\n }\n\n function checkBackToTop() {\n let windowTop = scrollElement.scrollTop || document.documentElement.scrollTop;\n if (!dataElement) {\n windowTop = window.scrollY || document.documentElement.scrollTop;\n }\n if (windowTop >= scrollOffset) {\n backTop.classList.add(\"back-to-top--is-visible\");\n } else {\n backTop.classList.remove(\"back-to-top--is-visible\");\n }\n scrolling = false;\n }\n\n function scrollTo(final, duration, cb, scrollEl) {\n const element = scrollEl || window;\n let start = element.scrollTop || document.documentElement.scrollTop;\n let currentTime = null;\n\n if (!scrollEl) start = window.scrollY || document.documentElement.scrollTop;\n\n const animateScroll = (timestamp) => {\n if (!currentTime) currentTime = timestamp;\n let progress = timestamp - currentTime;\n if (progress > duration) progress = duration;\n const val = Math.easeInOutQuad(progress, start, final - start, duration);\n element.scrollTo(0, val);\n if (progress < duration) {\n window.requestAnimationFrame(animateScroll);\n } else {\n cb && cb();\n }\n };\n\n window.requestAnimationFrame(animateScroll);\n }\n\n function moveFocus(element) {\n if (!element) element = document.getElementsByTagName(\"body\")[0];\n element.focus();\n if (document.activeElement !== element) {\n element.setAttribute(\"tabindex\", \"-1\");\n element.focus();\n }\n }\n\n Math.easeInOutQuad = function (t, b, c, d) {\n t /= d / 2;\n if (t < 1) return (c / 2) * t * t + b;\n t--;\n return (-c / 2) * (t * (t - 2) - 1) + b;\n };\n }\n})();\n","/*!\n * Clamp.js 0.5.1\n *\n * Copyright 2011-2013, Joseph Schmitt http://joe.sh\n * Released under the WTFPL license\n * http://sam.zoy.org/wtfpl/\n */\n\n(function() {\n /**\n * Clamps a text node.\n * @param {HTMLElement} element. Element containing the text node to clamp.\n * @param {Object} options. Options to pass to the clamper.\n */\n function clamp(element, options) {\n options = options || {};\n\n var self = this,\n win = window,\n opt = {\n clamp: options.clamp || 2,\n useNativeClamp:\n typeof options.useNativeClamp != \"undefined\"\n ? options.useNativeClamp\n : true,\n splitOnChars: options.splitOnChars || [\".\", \"-\", \"–\", \"—\", \" \"], //Split on sentences (periods), hypens, en-dashes, em-dashes, and words (spaces).\n animate: options.animate || false,\n truncationChar: options.truncationChar || \"…\",\n truncationHTML: options.truncationHTML\n },\n sty = element.style,\n originalText = element.innerHTML,\n supportsNativeClamp =\n typeof element.style.webkitLineClamp != \"undefined\",\n clampValue = opt.clamp,\n isCSSValue =\n clampValue.indexOf &&\n (clampValue.indexOf(\"px\") > -1 ||\n clampValue.indexOf(\"em\") > -1),\n truncationHTMLContainer;\n\n if (opt.truncationHTML) {\n truncationHTMLContainer = document.createElement(\"span\");\n truncationHTMLContainer.innerHTML = opt.truncationHTML;\n }\n\n // UTILITY FUNCTIONS __________________________________________________________\n\n /**\n * Return the current style for an element.\n * @param {HTMLElement} elem The element to compute.\n * @param {string} prop The style property.\n * @returns {number}\n */\n function computeStyle(elem, prop) {\n if (!win.getComputedStyle) {\n win.getComputedStyle = function(el, pseudo) {\n this.el = el;\n this.getPropertyValue = function(prop) {\n var re = /(\\-([a-z]){1})/g;\n if (prop == \"float\") prop = \"styleFloat\";\n if (re.test(prop)) {\n prop = prop.replace(re, function() {\n return arguments[2].toUpperCase();\n });\n }\n return el.currentStyle && el.currentStyle[prop]\n ? el.currentStyle[prop]\n : null;\n };\n return this;\n };\n }\n\n return win.getComputedStyle(elem, null).getPropertyValue(prop);\n }\n\n /**\n * Returns the maximum number of lines of text that should be rendered based\n * on the current height of the element and the line-height of the text.\n */\n function getMaxLines(height) {\n var availHeight = height || element.clientHeight,\n lineHeight = getLineHeight(element);\n\n return Math.max(Math.floor(availHeight / lineHeight), 0);\n }\n\n /**\n * Returns the maximum height a given element should have based on the line-\n * height of the text and the given clamp value.\n */\n function getMaxHeight(clmp) {\n var lineHeight = getLineHeight(element);\n return lineHeight * clmp;\n }\n\n /**\n * Returns the line-height of an element as an integer.\n */\n function getLineHeight(elem) {\n var lh = computeStyle(elem, \"line-height\");\n if (lh == \"normal\") {\n // Normal line heights vary from browser to browser. The spec recommends\n // a value between 1.0 and 1.2 of the font size. Using 1.1 to split the diff.\n lh = parseInt(computeStyle(elem, \"font-size\")) * 1.2;\n }\n return parseInt(lh);\n }\n\n // MEAT AND POTATOES (MMMM, POTATOES...) ______________________________________\n var splitOnChars = opt.splitOnChars.slice(0),\n splitChar = splitOnChars[0],\n chunks,\n lastChunk;\n\n /**\n * Gets an element's last child. That may be another node or a node's contents.\n */\n function getLastChild(elem) {\n //Current element has children, need to go deeper and get last child as a text node\n if (elem.lastChild.children && elem.lastChild.children.length > 0) {\n return getLastChild(\n Array.prototype.slice.call(elem.children).pop()\n );\n }\n //This is the absolute last child, a text node, but something's wrong with it. Remove it and keep trying\n else if (\n !elem.lastChild ||\n !elem.lastChild.nodeValue ||\n elem.lastChild.nodeValue == \"\" ||\n elem.lastChild.nodeValue == opt.truncationChar\n ) {\n elem.lastChild.parentNode.removeChild(elem.lastChild);\n return getLastChild(element);\n }\n //This is the last child we want, return it\n else {\n return elem.lastChild;\n }\n }\n\n /**\n * Removes one character at a time from the text until its width or\n * height is beneath the passed-in max param.\n */\n function truncate(target, maxHeight) {\n if (!maxHeight) {\n return;\n }\n\n /**\n * Resets global variables.\n */\n function reset() {\n splitOnChars = opt.splitOnChars.slice(0);\n splitChar = splitOnChars[0];\n chunks = null;\n lastChunk = null;\n }\n\n var nodeValue = target.nodeValue.replace(opt.truncationChar, \"\");\n\n //Grab the next chunks\n if (!chunks) {\n //If there are more characters to try, grab the next one\n if (splitOnChars.length > 0) {\n splitChar = splitOnChars.shift();\n }\n //No characters to chunk by. Go character-by-character\n else {\n splitChar = \"\";\n }\n\n chunks = nodeValue.split(splitChar);\n }\n\n //If there are chunks left to remove, remove the last one and see if\n // the nodeValue fits.\n if (chunks.length > 1) {\n // console.log('chunks', chunks);\n lastChunk = chunks.pop();\n // console.log('lastChunk', lastChunk);\n applyEllipsis(target, chunks.join(splitChar));\n }\n //No more chunks can be removed using this character\n else {\n chunks = null;\n }\n\n //Insert the custom HTML before the truncation character\n if (truncationHTMLContainer) {\n target.nodeValue = target.nodeValue.replace(\n opt.truncationChar,\n \"\"\n );\n element.innerHTML =\n target.nodeValue +\n \" \" +\n truncationHTMLContainer.innerHTML +\n opt.truncationChar;\n }\n\n //Search produced valid chunks\n if (chunks) {\n //It fits\n if (element.clientHeight <= maxHeight) {\n //There's still more characters to try splitting on, not quite done yet\n if (splitOnChars.length >= 0 && splitChar != \"\") {\n applyEllipsis(\n target,\n chunks.join(splitChar) + splitChar + lastChunk\n );\n chunks = null;\n }\n //Finished!\n else {\n return element.innerHTML;\n }\n }\n }\n //No valid chunks produced\n else {\n //No valid chunks even when splitting by letter, time to move\n //on to the next node\n if (splitChar == \"\") {\n applyEllipsis(target, \"\");\n target = getLastChild(element);\n\n reset();\n }\n }\n\n //If you get here it means still too big, let's keep truncating\n if (opt.animate) {\n setTimeout(\n function() {\n truncate(target, maxHeight);\n },\n opt.animate === true ? 10 : opt.animate\n );\n } else {\n return truncate(target, maxHeight);\n }\n }\n\n function applyEllipsis(elem, str) {\n elem.nodeValue = str + opt.truncationChar;\n }\n\n // CONSTRUCTOR ________________________________________________________________\n\n if (clampValue == \"auto\") {\n clampValue = getMaxLines();\n } else if (isCSSValue) {\n clampValue = getMaxLines(parseInt(clampValue));\n }\n\n var clampedText;\n if (supportsNativeClamp && opt.useNativeClamp) {\n sty.overflow = \"hidden\";\n sty.textOverflow = \"ellipsis\";\n sty.webkitBoxOrient = \"vertical\";\n sty.display = \"-webkit-box\";\n sty.webkitLineClamp = clampValue;\n\n if (isCSSValue) {\n sty.height = opt.clamp + \"px\";\n }\n } else {\n var height = getMaxHeight(clampValue);\n if (height <= element.clientHeight) {\n clampedText = truncate(getLastChild(element), height);\n }\n }\n\n return {\n original: originalText,\n clamped: clampedText\n };\n }\n\n window.$clamp = clamp;\n})();\n","function iOS() {\n return (\n (/iPad|iPhone|iPod/.test(navigator.platform) ||\n (navigator.platform === \"MacIntel\" && navigator.maxTouchPoints > 1)) &&\n !window.MSStream\n );\n}\n\nwindow.addEventListener(\"load\", () => {\n if (iOS()) {\n const containers = document.querySelectorAll(\".wp-block-ms-container\");\n if (containers.length) {\n [...containers].forEach((container) =>\n container.style.setProperty(\"background-attachment\", \"scroll\", \"important\")\n );\n }\n }\n});\n","/*!\n * parallax.js v1.5.0 (http://pixelcog.github.io/parallax.js/)\n * @copyright 2016 PixelCog, Inc.\n * @license MIT (https://github.com/pixelcog/parallax.js/blob/master/LICENSE)\n */\n\n(function ($, window, document, undefined) {\n // Polyfill for requestAnimationFrame\n // via: https://gist.github.com/paulirish/1579671\n\n (function () {\n var lastTime = 0;\n var vendors = [\"ms\", \"moz\", \"webkit\", \"o\"];\n for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n window.requestAnimationFrame = window[vendors[x] + \"RequestAnimationFrame\"];\n window.cancelAnimationFrame =\n window[vendors[x] + \"CancelAnimationFrame\"] || window[vendors[x] + \"CancelRequestAnimationFrame\"];\n }\n\n if (!window.requestAnimationFrame)\n window.requestAnimationFrame = function (callback) {\n var currTime = new Date().getTime();\n var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n var id = window.setTimeout(function () {\n callback(currTime + timeToCall);\n }, timeToCall);\n lastTime = currTime + timeToCall;\n return id;\n };\n\n if (!window.cancelAnimationFrame)\n window.cancelAnimationFrame = function (id) {\n clearTimeout(id);\n };\n })();\n\n // Parallax Constructor\n\n function Parallax(element, options) {\n var self = this;\n\n if (typeof options == \"object\") {\n delete options.refresh;\n delete options.render;\n $.extend(this, options);\n }\n\n this.$element = $(element);\n\n if (!this.imageSrc && this.$element.is(\"img\")) {\n this.imageSrc = this.$element.attr(\"src\");\n }\n\n var positions = (this.position + \"\").toLowerCase().match(/\\S+/g) || [];\n\n if (positions.length < 1) {\n positions.push(\"center\");\n }\n if (positions.length == 1) {\n positions.push(positions[0]);\n }\n\n if (positions[0] == \"top\" || positions[0] == \"bottom\" || positions[1] == \"left\" || positions[1] == \"right\") {\n positions = [positions[1], positions[0]];\n }\n\n if (this.positionX !== undefined) positions[0] = this.positionX.toLowerCase();\n if (this.positionY !== undefined) positions[1] = this.positionY.toLowerCase();\n\n self.positionX = positions[0];\n self.positionY = positions[1];\n\n if (this.positionX != \"left\" && this.positionX != \"right\") {\n if (isNaN(parseInt(this.positionX))) {\n this.positionX = \"center\";\n } else {\n this.positionX = parseInt(this.positionX);\n }\n }\n\n if (this.positionY != \"top\" && this.positionY != \"bottom\") {\n if (isNaN(parseInt(this.positionY))) {\n this.positionY = \"center\";\n } else {\n this.positionY = parseInt(this.positionY);\n }\n }\n\n this.position =\n this.positionX +\n (isNaN(this.positionX) ? \"\" : \"px\") +\n \" \" +\n this.positionY +\n (isNaN(this.positionY) ? \"\" : \"px\");\n\n if (navigator.userAgent.match(/(iPod|iPhone|iPad)/)) {\n if (this.imageSrc && this.iosFix && !this.$element.is(\"img\")) {\n this.$element.css({\n backgroundImage: 'url(\"' + this.imageSrc + '\")',\n backgroundSize: \"cover\",\n backgroundPosition: this.position,\n });\n }\n return this;\n }\n\n if (navigator.userAgent.match(/(Android)/)) {\n if (this.imageSrc && this.androidFix && !this.$element.is(\"img\")) {\n this.$element.css({\n backgroundImage: 'url(\"' + this.imageSrc + '\")',\n backgroundSize: \"cover\",\n backgroundPosition: this.position,\n });\n }\n return this;\n }\n\n this.$mirror = $(\"
\").prependTo(this.mirrorContainer);\n\n var slider = this.$element.find(\">.parallax-slider\");\n var sliderExisted = false;\n\n if (slider.length == 0) this.$slider = $(\"\").prependTo(this.$mirror);\n else {\n this.$slider = slider.prependTo(this.$mirror);\n sliderExisted = true;\n }\n\n this.$mirror.addClass(\"parallax-mirror\").css({\n visibility: \"hidden\",\n zIndex: this.zIndex,\n position: \"fixed\",\n top: 0,\n left: 0,\n overflow: \"hidden\",\n });\n\n this.$slider.addClass(\"parallax-slider\").one(\"load\", function () {\n if (!self.naturalHeight || !self.naturalWidth) {\n self.naturalHeight = this.naturalHeight || this.height || 1;\n self.naturalWidth = this.naturalWidth || this.width || 1;\n }\n self.aspectRatio = self.naturalWidth / self.naturalHeight;\n\n Parallax.isSetup || Parallax.setup();\n Parallax.sliders.push(self);\n Parallax.isFresh = false;\n Parallax.requestRender();\n });\n\n if (!sliderExisted) this.$slider[0].src = this.imageSrc;\n\n if ((this.naturalHeight && this.naturalWidth) || this.$slider[0].complete || slider.length > 0) {\n this.$slider.trigger(\"load\");\n }\n }\n\n // Parallax Instance Methods\n\n $.extend(Parallax.prototype, {\n speed: 0.2,\n bleed: 0,\n zIndex: -100,\n iosFix: true,\n androidFix: true,\n position: \"center\",\n overScrollFix: false,\n mirrorContainer: \"body\",\n\n refresh: function () {\n this.boxWidth = this.$element.outerWidth();\n this.boxHeight = this.$element.outerHeight() + this.bleed * 2;\n this.boxOffsetTop = this.$element.offset().top - this.bleed;\n this.boxOffsetLeft = this.$element.offset().left;\n this.boxOffsetBottom = this.boxOffsetTop + this.boxHeight;\n\n var winHeight = Parallax.winHeight;\n var docHeight = Parallax.docHeight;\n var maxOffset = Math.min(this.boxOffsetTop, docHeight - winHeight);\n var minOffset = Math.max(this.boxOffsetTop + this.boxHeight - winHeight, 0);\n var imageHeightMin = (this.boxHeight + (maxOffset - minOffset) * (1 - this.speed)) | 0;\n var imageOffsetMin = ((this.boxOffsetTop - maxOffset) * (1 - this.speed)) | 0;\n var margin;\n\n if (imageHeightMin * this.aspectRatio >= this.boxWidth) {\n this.imageWidth = (imageHeightMin * this.aspectRatio) | 0;\n this.imageHeight = imageHeightMin;\n this.offsetBaseTop = imageOffsetMin;\n\n margin = this.imageWidth - this.boxWidth;\n\n if (this.positionX == \"left\") {\n this.offsetLeft = 0;\n } else if (this.positionX == \"right\") {\n this.offsetLeft = -margin;\n } else if (!isNaN(this.positionX)) {\n this.offsetLeft = Math.max(this.positionX, -margin);\n } else {\n this.offsetLeft = (-margin / 2) | 0;\n }\n } else {\n this.imageWidth = this.boxWidth;\n this.imageHeight = (this.boxWidth / this.aspectRatio) | 0;\n this.offsetLeft = 0;\n\n margin = this.imageHeight - imageHeightMin;\n\n if (this.positionY == \"top\") {\n this.offsetBaseTop = imageOffsetMin;\n } else if (this.positionY == \"bottom\") {\n this.offsetBaseTop = imageOffsetMin - margin;\n } else if (!isNaN(this.positionY)) {\n this.offsetBaseTop = imageOffsetMin + Math.max(this.positionY, -margin);\n } else {\n this.offsetBaseTop = (imageOffsetMin - margin / 2) | 0;\n }\n }\n },\n\n render: function () {\n var scrollTop = Parallax.scrollTop;\n var scrollLeft = Parallax.scrollLeft;\n var overScroll = this.overScrollFix ? Parallax.overScroll : 0;\n var scrollBottom = scrollTop + Parallax.winHeight;\n\n if (this.boxOffsetBottom > scrollTop && this.boxOffsetTop <= scrollBottom) {\n this.visibility = \"visible\";\n this.mirrorTop = this.boxOffsetTop - scrollTop;\n this.mirrorLeft = this.boxOffsetLeft - scrollLeft;\n this.offsetTop = this.offsetBaseTop - this.mirrorTop * (1 - this.speed);\n } else {\n this.visibility = \"hidden\";\n }\n\n this.$mirror.css({\n transform: \"translate3d(\" + this.mirrorLeft + \"px, \" + (this.mirrorTop - overScroll) + \"px, 0px)\",\n visibility: this.visibility,\n height: this.boxHeight,\n width: this.boxWidth,\n });\n\n this.$slider.css({\n transform: \"translate3d(\" + this.offsetLeft + \"px, \" + this.offsetTop + \"px, 0px)\",\n position: \"absolute\",\n height: this.imageHeight,\n width: this.imageWidth,\n maxWidth: \"none\",\n });\n },\n });\n\n // Parallax Static Methods\n\n $.extend(Parallax, {\n scrollTop: 0,\n scrollLeft: 0,\n winHeight: 0,\n winWidth: 0,\n docHeight: 1 << 30,\n docWidth: 1 << 30,\n sliders: [],\n isReady: false,\n isFresh: false,\n isBusy: false,\n\n setup: function () {\n if (this.isReady) return;\n\n var self = this;\n\n var $doc = $(document),\n $win = $(window);\n\n var loadDimensions = function () {\n Parallax.winHeight = $win.height();\n Parallax.winWidth = $win.width();\n Parallax.docHeight = $doc.height();\n Parallax.docWidth = $doc.width();\n };\n\n var loadScrollPosition = function () {\n var winScrollTop = $win.scrollTop();\n var scrollTopMax = Parallax.docHeight - Parallax.winHeight;\n var scrollLeftMax = Parallax.docWidth - Parallax.winWidth;\n Parallax.scrollTop = Math.max(0, Math.min(scrollTopMax, winScrollTop));\n Parallax.scrollLeft = Math.max(0, Math.min(scrollLeftMax, $win.scrollLeft()));\n Parallax.overScroll = Math.max(winScrollTop - scrollTopMax, Math.min(winScrollTop, 0));\n };\n\n $win.on(\"resize.px.parallax load.px.parallax\", function () {\n loadDimensions();\n self.refresh();\n Parallax.isFresh = false;\n Parallax.requestRender();\n }).on(\"scroll.px.parallax load.px.parallax\", function () {\n loadScrollPosition();\n Parallax.requestRender();\n });\n\n loadDimensions();\n loadScrollPosition();\n\n this.isReady = true;\n\n var lastPosition = -1;\n\n function frameLoop() {\n if (lastPosition == window.pageYOffset) {\n // Avoid overcalculations\n window.requestAnimationFrame(frameLoop);\n return false;\n } else lastPosition = window.pageYOffset;\n\n self.render();\n window.requestAnimationFrame(frameLoop);\n }\n\n frameLoop();\n },\n\n configure: function (options) {\n if (typeof options == \"object\") {\n delete options.refresh;\n delete options.render;\n $.extend(this.prototype, options);\n }\n },\n\n refresh: function () {\n $.each(this.sliders, function () {\n this.refresh();\n });\n this.isFresh = true;\n },\n\n render: function () {\n this.isFresh || this.refresh();\n $.each(this.sliders, function () {\n this.render();\n });\n },\n\n requestRender: function () {\n var self = this;\n self.render();\n self.isBusy = false;\n },\n destroy: function (el) {\n var i,\n parallaxElement = $(el).data(\"px.parallax\");\n parallaxElement.$mirror.remove();\n for (i = 0; i < this.sliders.length; i += 1) {\n if (this.sliders[i] == parallaxElement) {\n this.sliders.splice(i, 1);\n }\n }\n $(el).data(\"px.parallax\", false);\n if (this.sliders.length === 0) {\n $(window).off(\"scroll.px.parallax resize.px.parallax load.px.parallax\");\n this.isReady = false;\n Parallax.isSetup = false;\n }\n },\n });\n\n // Parallax Plugin Definition\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this);\n var options = typeof option == \"object\" && option;\n\n if (this == window || this == document || $this.is(\"body\")) {\n Parallax.configure(options);\n } else if (!$this.data(\"px.parallax\")) {\n options = $.extend({}, $this.data(), options);\n $this.data(\"px.parallax\", new Parallax(this, options));\n } else if (typeof option == \"object\") {\n $.extend($this.data(\"px.parallax\"), options);\n }\n if (typeof option == \"string\") {\n if (option == \"destroy\") {\n Parallax.destroy(this);\n } else {\n Parallax[option]();\n }\n }\n });\n }\n\n var old = $.fn.parallax;\n\n $.fn.parallax = Plugin;\n $.fn.parallax.Constructor = Parallax;\n\n // Parallax No Conflict\n\n $.fn.parallax.noConflict = function () {\n $.fn.parallax = old;\n return this;\n };\n\n // Parallax Data-API\n\n $(function () {\n $('[data-parallax=\"scroll\"]').parallax();\n });\n})(jQuery, window, document);\n","document.addEventListener(\n \"DOMContentLoaded\",\n () => {\n // Load all blocks on the page.\n const featuredMenuItems = document.querySelectorAll(\".ms_featured-menu-items\");\n for (menu of featuredMenuItems) {\n // Get all previews and menu links from current block.\n const previews = menu.querySelectorAll(\".preview\");\n const menuLinks = menu.querySelectorAll(\"a\");\n for (link of menuLinks) {\n // Get the target.\n const target = link.dataset?.target;\n link.addEventListener(\n \"mouseover\",\n (event) => {\n for (preview of previews) {\n if (preview.dataset?.content === target) {\n preview.classList.remove(\"hide\");\n } else {\n preview.classList.add(\"hide\");\n }\n }\n },\n { passive: true }\n );\n }\n }\n },\n { passive: true }\n);\n","document.addEventListener(\n `DOMContentLoaded`,\n () => {\n /**\n * Add change event to the price toggle switch to show/hide prices.\n */\n const priceToggle = document.querySelector(\".ms_pricing .js-time-period-switch input\");\n const priceContent = document.querySelectorAll(\".ms_pricing .price-content\");\n const extraPriceContent = document.querySelectorAll(\".ms_pricing .extra-price-content\");\n if (priceToggle) {\n priceToggle.addEventListener(\n \"change\",\n () => {\n if (priceContent) {\n for (const priceBlock of priceContent) {\n priceBlock.classList.toggle(\"hide\");\n }\n }\n if (extraPriceContent) {\n for (const priceBlock of extraPriceContent) {\n priceBlock.classList.toggle(\"hide\");\n }\n }\n Foundation.reInit(\"equalizer\");\n },\n { passive: true }\n );\n }\n\n const priceBlocks = document.querySelectorAll(\".ms_pricing .price-block\");\n if (priceBlocks) {\n for (const block of priceBlocks) {\n const title = block.querySelector(\".title\").textContent;\n const buttonWC = block.querySelector(\".cta-button.woocommerce a\");\n const buttonWCHref = buttonWC ? buttonWC.href : undefined;\n const button = block.querySelector(\".cta-button:not(.woocommerce) a\");\n const buttonHref = button ? button.href : undefined;\n const extraOptions = block.querySelectorAll(\".extra-options input\");\n let selectedOptionsID = [];\n let selectedOptions = [];\n if (extraOptions) {\n for (const [index, option] of extraOptions.entries()) {\n const optionName = option.parentElement.parentElement.textContent.trim();\n const optionID = option.parentElement.parentElement.dataset.id;\n const firstPriceNode = block.querySelector(\".price-content.first .price .number\");\n const secondPriceNode = block.querySelector(\".price-content.second .price .number\");\n option.addEventListener(\n \"change\",\n function () {\n const optionPrice = parseFloat(this.dataset.price);\n const optionPrice2 = parseFloat(this.dataset.secondPrice);\n // Apply first extra option price to \"left label price\".\n if (optionPrice) {\n // First price.\n if (firstPriceNode) {\n const firstPrice = parseFloat(\n firstPriceNode.textContent.replace(/(\\d),(?=\\d)/g, \"$1.\")\n );\n const newFirstPriceHTML = this.checked\n ? firstPrice + optionPrice\n : firstPrice - optionPrice;\n firstPriceNode.textContent = newFirstPriceHTML\n .toFixed(2)\n .replace(\".\", \",\")\n .replace(\",00\", \"\");\n }\n }\n // Apply second extra option price to \"right label price\".\n if (optionPrice2) {\n // Second price.\n if (secondPriceNode) {\n const secondPrice = parseFloat(\n secondPriceNode.textContent.replace(/(\\d),(?=\\d)/g, \"$1.\")\n );\n const secondPriceHTML = this.checked\n ? secondPrice + optionPrice2\n : secondPrice - optionPrice2;\n secondPriceNode.textContent = secondPriceHTML\n .toFixed(2)\n .replace(\".\", \",\")\n .replace(\",00\", \"\");\n }\n }\n\n // Add parameters to the URL if extra options have been selected.\n if (title && button) {\n // Add or remove selected extra option.\n this.checked\n ? selectedOptions.splice(index, 0, optionName)\n : (selectedOptions = selectedOptions.filter((value) => value !== optionName));\n // Create the query string for the button.\n const params = new URLSearchParams();\n const options = selectedOptions.join(\" & \");\n const newParams = {\n ...(options !== \"\" && { \"extra-options\": options }),\n };\n for (const [key, val] of Object.entries(newParams)) {\n params.append(key, val);\n }\n button.href = buttonHref + params.toString();\n }\n\n if (buttonWC && optionID) {\n // Add or remove selected extra option.\n this.checked\n ? selectedOptionsID.splice(index, 0, optionID)\n : (selectedOptionsID = selectedOptionsID.filter((value) => value !== optionID));\n const optionsString = selectedOptionsID.join(\",\");\n buttonWC.href =\n optionsString !== \"\" ? buttonWCHref + \",\" + optionsString : buttonWCHref;\n buttonWC.dataset.id = buttonWC.href.split(\"=\")[1];\n }\n },\n { passive: true }\n );\n }\n }\n }\n }\n },\n { passive: true }\n);\n","/**\n * Dynamically intialize the `.review-slider`'s.\n */\nfunction msInitializeReviewSlider() {\n const slider = document.querySelector(`.review-slider`);\n if (slider) {\n let options = slider.dataset.sliderOptions;\n options = JSON.parse(options);\n const reviewSlider = new Swiper(`.review-slider`, options);\n }\n}\n\ndocument.addEventListener(\n `DOMContentLoaded`,\n function () {\n msInitializeReviewSlider();\n },\n { passive: true }\n);\n\nif (typeof acf !== \"undefined\") {\n acf.addAction(`render_block_preview`, function ($el, attributes) {\n msInitializeReviewSlider();\n });\n}\n","/**\n * matchesSelector v2.0.2\n * matchesSelector( element, '.selector' )\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n /*global define: false, module: false */\n 'use strict';\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.matchesSelector = factory();\n }\n\n}( window, function factory() {\n 'use strict';\n\n var matchesMethod = ( function() {\n var ElemProto = window.Element.prototype;\n // check for the standard method name first\n if ( ElemProto.matches ) {\n return 'matches';\n }\n // check un-prefixed\n if ( ElemProto.matchesSelector ) {\n return 'matchesSelector';\n }\n // check vendor prefixes\n var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\n\n for ( var i=0; i < prefixes.length; i++ ) {\n var prefix = prefixes[i];\n var method = prefix + 'MatchesSelector';\n if ( ElemProto[ method ] ) {\n return method;\n }\n }\n })();\n\n return function matchesSelector( elem, selector ) {\n return elem[ matchesMethod ]( selector );\n };\n\n}));\n","/**\n * EvEmitter v1.1.0\n * Lil' event emitter\n * MIT License\n */\n\n/* jshint unused: true, undef: true, strict: true */\n\n( function( global, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, window */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\n\"use strict\";\n\nfunction EvEmitter() {}\n\nvar proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // set events hash\n var events = this._events = this._events || {};\n // set listeners array\n var listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( listeners.indexOf( listener ) == -1 ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n var onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n var index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice(0);\n args = args || [];\n // once stuff\n var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( var i=0; i < listeners.length; i++ ) {\n var listener = listeners[i]\n var isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n};\n\nreturn EvEmitter;\n\n}));\n","/**\n * Fizzy UI utils v2.0.7\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'desandro-matches-selector/matches-selector'\n ], function( matchesSelector ) {\n return factory( window, matchesSelector );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('desandro-matches-selector')\n );\n } else {\n // browser global\n window.fizzyUIUtils = factory(\n window,\n window.matchesSelector\n );\n }\n\n}( window, function factory( window, matchesSelector ) {\n\n'use strict';\n\nvar utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n return obj;\n }\n // return empty array if undefined or null. #6\n if ( obj === null || obj === undefined ) {\n return [];\n }\n\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n if ( isArrayLike ) {\n // convert nodeList to array\n return arraySlice.call( obj );\n }\n\n // array of single index\n return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n var index = ary.indexOf( obj );\n if ( index != -1 ) {\n ary.splice( index, 1 );\n }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n while ( elem.parentNode && elem != document.body ) {\n elem = elem.parentNode;\n if ( matchesSelector( elem, selector ) ) {\n return elem;\n }\n }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n if ( typeof elem == 'string' ) {\n return document.querySelector( elem );\n }\n return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n // make array of elems\n elems = utils.makeArray( elems );\n var ffElems = [];\n\n elems.forEach( function( elem ) {\n // check that elem is an actual element\n if ( !( elem instanceof HTMLElement ) ) {\n return;\n }\n // add elem if no selector\n if ( !selector ) {\n ffElems.push( elem );\n return;\n }\n // filter & find items if we have a selector\n // filter\n if ( matchesSelector( elem, selector ) ) {\n ffElems.push( elem );\n }\n // find children\n var childElems = elem.querySelectorAll( selector );\n // concat childElems to filterFound array\n for ( var i=0; i < childElems.length; i++ ) {\n ffElems.push( childElems[i] );\n }\n });\n\n return ffElems;\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n threshold = threshold || 100;\n // original method\n var method = _class.prototype[ methodName ];\n var timeoutName = methodName + 'Timeout';\n\n _class.prototype[ methodName ] = function() {\n var timeout = this[ timeoutName ];\n clearTimeout( timeout );\n\n var args = arguments;\n var _this = this;\n this[ timeoutName ] = setTimeout( function() {\n method.apply( _this, args );\n delete _this[ timeoutName ];\n }, threshold );\n };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( callback ) {\n var readyState = document.readyState;\n if ( readyState == 'complete' || readyState == 'interactive' ) {\n // do async to allow for other scripts to run. metafizzy/flickity#441\n setTimeout( callback );\n } else {\n document.addEventListener( 'DOMContentLoaded', callback );\n }\n};\n\n// ----- htmlInit ----- //\n\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\nutils.toDashed = function( str ) {\n return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n return $1 + '-' + $2;\n }).toLowerCase();\n};\n\nvar console = window.console;\n/**\n * allow user to initialize classes via [data-namespace] or .js-namespace class\n * htmlInit( Widget, 'widgetName' )\n * options are parsed from data-namespace-options\n */\nutils.htmlInit = function( WidgetClass, namespace ) {\n utils.docReady( function() {\n var dashedNamespace = utils.toDashed( namespace );\n var dataAttr = 'data-' + dashedNamespace;\n var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );\n var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );\n var elems = utils.makeArray( dataAttrElems )\n .concat( utils.makeArray( jsDashElems ) );\n var dataOptionsAttr = dataAttr + '-options';\n var jQuery = window.jQuery;\n\n elems.forEach( function( elem ) {\n var attr = elem.getAttribute( dataAttr ) ||\n elem.getAttribute( dataOptionsAttr );\n var options;\n try {\n options = attr && JSON.parse( attr );\n } catch ( error ) {\n // log error, do not initialize\n if ( console ) {\n console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +\n ': ' + error );\n }\n return;\n }\n // initialize\n var instance = new WidgetClass( elem, options );\n // make available via $().data('namespace')\n if ( jQuery ) {\n jQuery.data( elem, namespace, instance );\n }\n });\n\n });\n};\n\n// ----- ----- //\n\nreturn utils;\n\n}));\n","/* eslint-env browser */\nmodule.exports = typeof self == 'object' ? self.FormData : window.FormData;\n","/*!\n * getSize v2.0.3\n * measure size of elements\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n/* globals console: false */\n\n( function( window, factory ) {\n /* jshint strict: false */ /* globals define, module */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.getSize = factory();\n }\n\n})( window, function factory() {\n'use strict';\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n var num = parseFloat( value );\n // not a percent like '100%', and a number\n var isValid = value.indexOf('%') == -1 && !isNaN( num );\n return isValid && num;\n}\n\nfunction noop() {}\n\nvar logError = typeof console == 'undefined' ? noop :\n function( message ) {\n console.error( message );\n };\n\n// -------------------------- measurements -------------------------- //\n\nvar measurements = [\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'paddingBottom',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'marginBottom',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderTopWidth',\n 'borderBottomWidth'\n];\n\nvar measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n var size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0\n };\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n size[ measurement ] = 0;\n }\n return size;\n}\n\n// -------------------------- getStyle -------------------------- //\n\n/**\n * getStyle, get style of element, check for Firefox bug\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getStyle( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n logError( 'Style returned ' + style +\n '. Are you running this code in a hidden iframe on Firefox? ' +\n 'See https://bit.ly/getsizebug1' );\n }\n return style;\n}\n\n// -------------------------- setup -------------------------- //\n\nvar isSetup = false;\n\nvar isBoxSizeOuter;\n\n/**\n * setup\n * check isBoxSizerOuter\n * do on first getSize() rather than on page load for Firefox bug\n */\nfunction setup() {\n // setup once\n if ( isSetup ) {\n return;\n }\n isSetup = true;\n\n // -------------------------- box sizing -------------------------- //\n\n /**\n * Chrome & Safari measure the outer-width on style.width on border-box elems\n * IE11 & Firefox<29 measures the inner-width\n */\n var div = document.createElement('div');\n div.style.width = '200px';\n div.style.padding = '1px 2px 3px 4px';\n div.style.borderStyle = 'solid';\n div.style.borderWidth = '1px 2px 3px 4px';\n div.style.boxSizing = 'border-box';\n\n var body = document.body || document.documentElement;\n body.appendChild( div );\n var style = getStyle( div );\n // round value for browser zoom. desandro/masonry#928\n isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\n getSize.isBoxSizeOuter = isBoxSizeOuter;\n\n body.removeChild( div );\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n setup();\n\n // use querySeletor if elem is string\n if ( typeof elem == 'string' ) {\n elem = document.querySelector( elem );\n }\n\n // do not proceed on non-objects\n if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\n return;\n }\n\n var style = getStyle( elem );\n\n // if hidden, everything is 0\n if ( style.display == 'none' ) {\n return getZeroSize();\n }\n\n var size = {};\n size.width = elem.offsetWidth;\n size.height = elem.offsetHeight;\n\n var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n // get all measurements\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n var value = style[ measurement ];\n var num = parseFloat( value );\n // any 'auto', 'medium' value will be 0\n size[ measurement ] = !isNaN( num ) ? num : 0;\n }\n\n var paddingWidth = size.paddingLeft + size.paddingRight;\n var paddingHeight = size.paddingTop + size.paddingBottom;\n var marginWidth = size.marginLeft + size.marginRight;\n var marginHeight = size.marginTop + size.marginBottom;\n var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n // overwrite width and height if we can get it from style\n var styleWidth = getStyleSize( style.width );\n if ( styleWidth !== false ) {\n size.width = styleWidth +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\n }\n\n var styleHeight = getStyleSize( style.height );\n if ( styleHeight !== false ) {\n size.height = styleHeight +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\n }\n\n size.innerWidth = size.width - ( paddingWidth + borderWidth );\n size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n size.outerWidth = size.width + marginWidth;\n size.outerHeight = size.height + marginHeight;\n\n return size;\n}\n\nreturn getSize;\n\n});\n","/*!\n * Isotope v3.0.6\n *\n * Licensed GPLv3 for open source use\n * or Isotope Commercial License for commercial use\n *\n * https://isotope.metafizzy.co\n * Copyright 2010-2018 Metafizzy\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'outlayer/outlayer',\n 'get-size/get-size',\n 'desandro-matches-selector/matches-selector',\n 'fizzy-ui-utils/utils',\n './item',\n './layout-mode',\n // include default layout modes\n './layout-modes/masonry',\n './layout-modes/fit-rows',\n './layout-modes/vertical'\n ],\n function( Outlayer, getSize, matchesSelector, utils, Item, LayoutMode ) {\n return factory( window, Outlayer, getSize, matchesSelector, utils, Item, LayoutMode );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('outlayer'),\n require('get-size'),\n require('desandro-matches-selector'),\n require('fizzy-ui-utils'),\n require('./item'),\n require('./layout-mode'),\n // include default layout modes\n require('./layout-modes/masonry'),\n require('./layout-modes/fit-rows'),\n require('./layout-modes/vertical')\n );\n } else {\n // browser global\n window.Isotope = factory(\n window,\n window.Outlayer,\n window.getSize,\n window.matchesSelector,\n window.fizzyUIUtils,\n window.Isotope.Item,\n window.Isotope.LayoutMode\n );\n }\n\n}( window, function factory( window, Outlayer, getSize, matchesSelector, utils,\n Item, LayoutMode ) {\n\n'use strict';\n\n// -------------------------- vars -------------------------- //\n\nvar jQuery = window.jQuery;\n\n// -------------------------- helpers -------------------------- //\n\nvar trim = String.prototype.trim ?\n function( str ) {\n return str.trim();\n } :\n function( str ) {\n return str.replace( /^\\s+|\\s+$/g, '' );\n };\n\n// -------------------------- isotopeDefinition -------------------------- //\n\n // create an Outlayer layout class\n var Isotope = Outlayer.create( 'isotope', {\n layoutMode: 'masonry',\n isJQueryFiltering: true,\n sortAscending: true\n });\n\n Isotope.Item = Item;\n Isotope.LayoutMode = LayoutMode;\n\n var proto = Isotope.prototype;\n\n proto._create = function() {\n this.itemGUID = 0;\n // functions that sort items\n this._sorters = {};\n this._getSorters();\n // call super\n Outlayer.prototype._create.call( this );\n\n // create layout modes\n this.modes = {};\n // start filteredItems with all items\n this.filteredItems = this.items;\n // keep of track of sortBys\n this.sortHistory = [ 'original-order' ];\n // create from registered layout modes\n for ( var name in LayoutMode.modes ) {\n this._initLayoutMode( name );\n }\n };\n\n proto.reloadItems = function() {\n // reset item ID counter\n this.itemGUID = 0;\n // call super\n Outlayer.prototype.reloadItems.call( this );\n };\n\n proto._itemize = function() {\n var items = Outlayer.prototype._itemize.apply( this, arguments );\n // assign ID for original-order\n for ( var i=0; i < items.length; i++ ) {\n var item = items[i];\n item.id = this.itemGUID++;\n }\n this._updateItemsSortData( items );\n return items;\n };\n\n\n // -------------------------- layout -------------------------- //\n\n proto._initLayoutMode = function( name ) {\n var Mode = LayoutMode.modes[ name ];\n // set mode options\n // HACK extend initial options, back-fill in default options\n var initialOpts = this.options[ name ] || {};\n this.options[ name ] = Mode.options ?\n utils.extend( Mode.options, initialOpts ) : initialOpts;\n // init layout mode instance\n this.modes[ name ] = new Mode( this );\n };\n\n\n proto.layout = function() {\n // if first time doing layout, do all magic\n if ( !this._isLayoutInited && this._getOption('initLayout') ) {\n this.arrange();\n return;\n }\n this._layout();\n };\n\n // private method to be used in layout() & magic()\n proto._layout = function() {\n // don't animate first layout\n var isInstant = this._getIsInstant();\n // layout flow\n this._resetLayout();\n this._manageStamps();\n this.layoutItems( this.filteredItems, isInstant );\n\n // flag for initalized\n this._isLayoutInited = true;\n };\n\n // filter + sort + layout\n proto.arrange = function( opts ) {\n // set any options pass\n this.option( opts );\n this._getIsInstant();\n // filter, sort, and layout\n\n // filter\n var filtered = this._filter( this.items );\n this.filteredItems = filtered.matches;\n\n this._bindArrangeComplete();\n\n if ( this._isInstant ) {\n this._noTransition( this._hideReveal, [ filtered ] );\n } else {\n this._hideReveal( filtered );\n }\n\n this._sort();\n this._layout();\n };\n // alias to _init for main plugin method\n proto._init = proto.arrange;\n\n proto._hideReveal = function( filtered ) {\n this.reveal( filtered.needReveal );\n this.hide( filtered.needHide );\n };\n\n // HACK\n // Don't animate/transition first layout\n // Or don't animate/transition other layouts\n proto._getIsInstant = function() {\n var isLayoutInstant = this._getOption('layoutInstant');\n var isInstant = isLayoutInstant !== undefined ? isLayoutInstant :\n !this._isLayoutInited;\n this._isInstant = isInstant;\n return isInstant;\n };\n\n // listen for layoutComplete, hideComplete and revealComplete\n // to trigger arrangeComplete\n proto._bindArrangeComplete = function() {\n // listen for 3 events to trigger arrangeComplete\n var isLayoutComplete, isHideComplete, isRevealComplete;\n var _this = this;\n function arrangeParallelCallback() {\n if ( isLayoutComplete && isHideComplete && isRevealComplete ) {\n _this.dispatchEvent( 'arrangeComplete', null, [ _this.filteredItems ] );\n }\n }\n this.once( 'layoutComplete', function() {\n isLayoutComplete = true;\n arrangeParallelCallback();\n });\n this.once( 'hideComplete', function() {\n isHideComplete = true;\n arrangeParallelCallback();\n });\n this.once( 'revealComplete', function() {\n isRevealComplete = true;\n arrangeParallelCallback();\n });\n };\n\n // -------------------------- filter -------------------------- //\n\n proto._filter = function( items ) {\n var filter = this.options.filter;\n filter = filter || '*';\n var matches = [];\n var hiddenMatched = [];\n var visibleUnmatched = [];\n\n var test = this._getFilterTest( filter );\n\n // test each item\n for ( var i=0; i < items.length; i++ ) {\n var item = items[i];\n if ( item.isIgnored ) {\n continue;\n }\n // add item to either matched or unmatched group\n var isMatched = test( item );\n // item.isFilterMatched = isMatched;\n // add to matches if its a match\n if ( isMatched ) {\n matches.push( item );\n }\n // add to additional group if item needs to be hidden or revealed\n if ( isMatched && item.isHidden ) {\n hiddenMatched.push( item );\n } else if ( !isMatched && !item.isHidden ) {\n visibleUnmatched.push( item );\n }\n }\n\n // return collections of items to be manipulated\n return {\n matches: matches,\n needReveal: hiddenMatched,\n needHide: visibleUnmatched\n };\n };\n\n // get a jQuery, function, or a matchesSelector test given the filter\n proto._getFilterTest = function( filter ) {\n if ( jQuery && this.options.isJQueryFiltering ) {\n // use jQuery\n return function( item ) {\n return jQuery( item.element ).is( filter );\n };\n }\n if ( typeof filter == 'function' ) {\n // use filter as function\n return function( item ) {\n return filter( item.element );\n };\n }\n // default, use filter as selector string\n return function( item ) {\n return matchesSelector( item.element, filter );\n };\n };\n\n // -------------------------- sorting -------------------------- //\n\n /**\n * @params {Array} elems\n * @public\n */\n proto.updateSortData = function( elems ) {\n // get items\n var items;\n if ( elems ) {\n elems = utils.makeArray( elems );\n items = this.getItems( elems );\n } else {\n // update all items if no elems provided\n items = this.items;\n }\n\n this._getSorters();\n this._updateItemsSortData( items );\n };\n\n proto._getSorters = function() {\n var getSortData = this.options.getSortData;\n for ( var key in getSortData ) {\n var sorter = getSortData[ key ];\n this._sorters[ key ] = mungeSorter( sorter );\n }\n };\n\n /**\n * @params {Array} items - of Isotope.Items\n * @private\n */\n proto._updateItemsSortData = function( items ) {\n // do not update if no items\n var len = items && items.length;\n\n for ( var i=0; len && i < len; i++ ) {\n var item = items[i];\n item.updateSortData();\n }\n };\n\n // ----- munge sorter ----- //\n\n // encapsulate this, as we just need mungeSorter\n // other functions in here are just for munging\n var mungeSorter = ( function() {\n // add a magic layer to sorters for convienent shorthands\n // `.foo-bar` will use the text of .foo-bar querySelector\n // `[foo-bar]` will use attribute\n // you can also add parser\n // `.foo-bar parseInt` will parse that as a number\n function mungeSorter( sorter ) {\n // if not a string, return function or whatever it is\n if ( typeof sorter != 'string' ) {\n return sorter;\n }\n // parse the sorter string\n var args = trim( sorter ).split(' ');\n var query = args[0];\n // check if query looks like [an-attribute]\n var attrMatch = query.match( /^\\[(.+)\\]$/ );\n var attr = attrMatch && attrMatch[1];\n var getValue = getValueGetter( attr, query );\n // use second argument as a parser\n var parser = Isotope.sortDataParsers[ args[1] ];\n // parse the value, if there was a parser\n sorter = parser ? function( elem ) {\n return elem && parser( getValue( elem ) );\n } :\n // otherwise just return value\n function( elem ) {\n return elem && getValue( elem );\n };\n\n return sorter;\n }\n\n // get an attribute getter, or get text of the querySelector\n function getValueGetter( attr, query ) {\n // if query looks like [foo-bar], get attribute\n if ( attr ) {\n return function getAttribute( elem ) {\n return elem.getAttribute( attr );\n };\n }\n\n // otherwise, assume its a querySelector, and get its text\n return function getChildText( elem ) {\n var child = elem.querySelector( query );\n return child && child.textContent;\n };\n }\n\n return mungeSorter;\n })();\n\n // parsers used in getSortData shortcut strings\n Isotope.sortDataParsers = {\n 'parseInt': function( val ) {\n return parseInt( val, 10 );\n },\n 'parseFloat': function( val ) {\n return parseFloat( val );\n }\n };\n\n // ----- sort method ----- //\n\n // sort filteredItem order\n proto._sort = function() {\n if ( !this.options.sortBy ) {\n return;\n }\n // keep track of sortBy History\n var sortBys = utils.makeArray( this.options.sortBy );\n if ( !this._getIsSameSortBy( sortBys ) ) {\n // concat all sortBy and sortHistory, add to front, oldest goes in last\n this.sortHistory = sortBys.concat( this.sortHistory );\n }\n // sort magic\n var itemSorter = getItemSorter( this.sortHistory, this.options.sortAscending );\n this.filteredItems.sort( itemSorter );\n };\n\n // check if sortBys is same as start of sortHistory\n proto._getIsSameSortBy = function( sortBys ) {\n for ( var i=0; i < sortBys.length; i++ ) {\n if ( sortBys[i] != this.sortHistory[i] ) {\n return false;\n }\n }\n return true;\n };\n\n // returns a function used for sorting\n function getItemSorter( sortBys, sortAsc ) {\n return function sorter( itemA, itemB ) {\n // cycle through all sortKeys\n for ( var i = 0; i < sortBys.length; i++ ) {\n var sortBy = sortBys[i];\n var a = itemA.sortData[ sortBy ];\n var b = itemB.sortData[ sortBy ];\n if ( a > b || a < b ) {\n // if sortAsc is an object, use the value given the sortBy key\n var isAscending = sortAsc[ sortBy ] !== undefined ? sortAsc[ sortBy ] : sortAsc;\n var direction = isAscending ? 1 : -1;\n return ( a > b ? 1 : -1 ) * direction;\n }\n }\n return 0;\n };\n }\n\n // -------------------------- methods -------------------------- //\n\n // get layout mode\n proto._mode = function() {\n var layoutMode = this.options.layoutMode;\n var mode = this.modes[ layoutMode ];\n if ( !mode ) {\n // TODO console.error\n throw new Error( 'No layout mode: ' + layoutMode );\n }\n // HACK sync mode's options\n // any options set after init for layout mode need to be synced\n mode.options = this.options[ layoutMode ];\n return mode;\n };\n\n proto._resetLayout = function() {\n // trigger original reset layout\n Outlayer.prototype._resetLayout.call( this );\n this._mode()._resetLayout();\n };\n\n proto._getItemLayoutPosition = function( item ) {\n return this._mode()._getItemLayoutPosition( item );\n };\n\n proto._manageStamp = function( stamp ) {\n this._mode()._manageStamp( stamp );\n };\n\n proto._getContainerSize = function() {\n return this._mode()._getContainerSize();\n };\n\n proto.needsResizeLayout = function() {\n return this._mode().needsResizeLayout();\n };\n\n // -------------------------- adding & removing -------------------------- //\n\n // HEADS UP overwrites default Outlayer appended\n proto.appended = function( elems ) {\n var items = this.addItems( elems );\n if ( !items.length ) {\n return;\n }\n // filter, layout, reveal new items\n var filteredItems = this._filterRevealAdded( items );\n // add to filteredItems\n this.filteredItems = this.filteredItems.concat( filteredItems );\n };\n\n // HEADS UP overwrites default Outlayer prepended\n proto.prepended = function( elems ) {\n var items = this._itemize( elems );\n if ( !items.length ) {\n return;\n }\n // start new layout\n this._resetLayout();\n this._manageStamps();\n // filter, layout, reveal new items\n var filteredItems = this._filterRevealAdded( items );\n // layout previous items\n this.layoutItems( this.filteredItems );\n // add to items and filteredItems\n this.filteredItems = filteredItems.concat( this.filteredItems );\n this.items = items.concat( this.items );\n };\n\n proto._filterRevealAdded = function( items ) {\n var filtered = this._filter( items );\n this.hide( filtered.needHide );\n // reveal all new items\n this.reveal( filtered.matches );\n // layout new items, no transition\n this.layoutItems( filtered.matches, true );\n return filtered.matches;\n };\n\n /**\n * Filter, sort, and layout newly-appended item elements\n * @param {Array or NodeList or Element} elems\n */\n proto.insert = function( elems ) {\n var items = this.addItems( elems );\n if ( !items.length ) {\n return;\n }\n // append item elements\n var i, item;\n var len = items.length;\n for ( i=0; i < len; i++ ) {\n item = items[i];\n this.element.appendChild( item.element );\n }\n // filter new stuff\n var filteredInsertItems = this._filter( items ).matches;\n // set flag\n for ( i=0; i < len; i++ ) {\n items[i].isLayoutInstant = true;\n }\n this.arrange();\n // reset flag\n for ( i=0; i < len; i++ ) {\n delete items[i].isLayoutInstant;\n }\n this.reveal( filteredInsertItems );\n };\n\n var _remove = proto.remove;\n proto.remove = function( elems ) {\n elems = utils.makeArray( elems );\n var removeItems = this.getItems( elems );\n // do regular thing\n _remove.call( this, elems );\n // bail if no items to remove\n var len = removeItems && removeItems.length;\n // remove elems from filteredItems\n for ( var i=0; len && i < len; i++ ) {\n var item = removeItems[i];\n // remove item from collection\n utils.removeFrom( this.filteredItems, item );\n }\n };\n\n proto.shuffle = function() {\n // update random sortData\n for ( var i=0; i < this.items.length; i++ ) {\n var item = this.items[i];\n item.sortData.random = Math.random();\n }\n this.options.sortBy = 'random';\n this._sort();\n this._layout();\n };\n\n /**\n * trigger fn without transition\n * kind of hacky to have this in the first place\n * @param {Function} fn\n * @param {Array} args\n * @returns ret\n * @private\n */\n proto._noTransition = function( fn, args ) {\n // save transitionDuration before disabling\n var transitionDuration = this.options.transitionDuration;\n // disable transition\n this.options.transitionDuration = 0;\n // do it\n var returnValue = fn.apply( this, args );\n // re-enable transition for reveal\n this.options.transitionDuration = transitionDuration;\n return returnValue;\n };\n\n // ----- helper methods ----- //\n\n /**\n * getter method for getting filtered item elements\n * @returns {Array} elems - collection of item elements\n */\n proto.getFilteredItemElements = function() {\n return this.filteredItems.map( function( item ) {\n return item.element;\n });\n };\n\n // ----- ----- //\n\n return Isotope;\n\n}));\n","/**\n * Isotope Item\n**/\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'outlayer/outlayer'\n ],\n factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('outlayer')\n );\n } else {\n // browser global\n window.Isotope = window.Isotope || {};\n window.Isotope.Item = factory(\n window.Outlayer\n );\n }\n\n}( window, function factory( Outlayer ) {\n'use strict';\n\n// -------------------------- Item -------------------------- //\n\n// sub-class Outlayer Item\nfunction Item() {\n Outlayer.Item.apply( this, arguments );\n}\n\nvar proto = Item.prototype = Object.create( Outlayer.Item.prototype );\n\nvar _create = proto._create;\nproto._create = function() {\n // assign id, used for original-order sorting\n this.id = this.layout.itemGUID++;\n _create.call( this );\n this.sortData = {};\n};\n\nproto.updateSortData = function() {\n if ( this.isIgnored ) {\n return;\n }\n // default sorters\n this.sortData.id = this.id;\n // for backward compatibility\n this.sortData['original-order'] = this.id;\n this.sortData.random = Math.random();\n // go thru getSortData obj and apply the sorters\n var getSortData = this.layout.options.getSortData;\n var sorters = this.layout._sorters;\n for ( var key in getSortData ) {\n var sorter = sorters[ key ];\n this.sortData[ key ] = sorter( this.element, this );\n }\n};\n\nvar _destroy = proto.destroy;\nproto.destroy = function() {\n // call super\n _destroy.apply( this, arguments );\n // reset display, #741\n this.css({\n display: ''\n });\n};\n\nreturn Item;\n\n}));\n","/**\n * Isotope LayoutMode\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'get-size/get-size',\n 'outlayer/outlayer'\n ],\n factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('get-size'),\n require('outlayer')\n );\n } else {\n // browser global\n window.Isotope = window.Isotope || {};\n window.Isotope.LayoutMode = factory(\n window.getSize,\n window.Outlayer\n );\n }\n\n}( window, function factory( getSize, Outlayer ) {\n 'use strict';\n\n // layout mode class\n function LayoutMode( isotope ) {\n this.isotope = isotope;\n // link properties\n if ( isotope ) {\n this.options = isotope.options[ this.namespace ];\n this.element = isotope.element;\n this.items = isotope.filteredItems;\n this.size = isotope.size;\n }\n }\n\n var proto = LayoutMode.prototype;\n\n /**\n * some methods should just defer to default Outlayer method\n * and reference the Isotope instance as `this`\n **/\n var facadeMethods = [\n '_resetLayout',\n '_getItemLayoutPosition',\n '_manageStamp',\n '_getContainerSize',\n '_getElementOffset',\n 'needsResizeLayout',\n '_getOption'\n ];\n\n facadeMethods.forEach( function( methodName ) {\n proto[ methodName ] = function() {\n return Outlayer.prototype[ methodName ].apply( this.isotope, arguments );\n };\n });\n\n // ----- ----- //\n\n // for horizontal layout modes, check vertical size\n proto.needsVerticalResizeLayout = function() {\n // don't trigger if size did not change\n var size = getSize( this.isotope.element );\n // check that this.size and size are there\n // IE8 triggers resize on body size change, so they might not be\n var hasSizes = this.isotope.size && size;\n return hasSizes && size.innerHeight != this.isotope.size.innerHeight;\n };\n\n // ----- measurements ----- //\n\n proto._getMeasurement = function() {\n this.isotope._getMeasurement.apply( this, arguments );\n };\n\n proto.getColumnWidth = function() {\n this.getSegmentSize( 'column', 'Width' );\n };\n\n proto.getRowHeight = function() {\n this.getSegmentSize( 'row', 'Height' );\n };\n\n /**\n * get columnWidth or rowHeight\n * segment: 'column' or 'row'\n * size 'Width' or 'Height'\n **/\n proto.getSegmentSize = function( segment, size ) {\n var segmentName = segment + size;\n var outerSize = 'outer' + size;\n // columnWidth / outerWidth // rowHeight / outerHeight\n this._getMeasurement( segmentName, outerSize );\n // got rowHeight or columnWidth, we can chill\n if ( this[ segmentName ] ) {\n return;\n }\n // fall back to item of first element\n var firstItemSize = this.getFirstItemSize();\n this[ segmentName ] = firstItemSize && firstItemSize[ outerSize ] ||\n // or size of container\n this.isotope.size[ 'inner' + size ];\n };\n\n proto.getFirstItemSize = function() {\n var firstItem = this.isotope.filteredItems[0];\n return firstItem && firstItem.element && getSize( firstItem.element );\n };\n\n // ----- methods that should reference isotope ----- //\n\n proto.layout = function() {\n this.isotope.layout.apply( this.isotope, arguments );\n };\n\n proto.getSize = function() {\n this.isotope.getSize();\n this.size = this.isotope.size;\n };\n\n // -------------------------- create -------------------------- //\n\n LayoutMode.modes = {};\n\n LayoutMode.create = function( namespace, options ) {\n\n function Mode() {\n LayoutMode.apply( this, arguments );\n }\n\n Mode.prototype = Object.create( proto );\n Mode.prototype.constructor = Mode;\n\n // default options\n if ( options ) {\n Mode.options = options;\n }\n\n Mode.prototype.namespace = namespace;\n // register in Isotope\n LayoutMode.modes[ namespace ] = Mode;\n\n return Mode;\n };\n\n return LayoutMode;\n\n}));\n","/**\n * fitRows layout mode\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n '../layout-mode'\n ],\n factory );\n } else if ( typeof exports == 'object' ) {\n // CommonJS\n module.exports = factory(\n require('../layout-mode')\n );\n } else {\n // browser global\n factory(\n window.Isotope.LayoutMode\n );\n }\n\n}( window, function factory( LayoutMode ) {\n'use strict';\n\nvar FitRows = LayoutMode.create('fitRows');\n\nvar proto = FitRows.prototype;\n\nproto._resetLayout = function() {\n this.x = 0;\n this.y = 0;\n this.maxY = 0;\n this._getMeasurement( 'gutter', 'outerWidth' );\n};\n\nproto._getItemLayoutPosition = function( item ) {\n item.getSize();\n\n var itemWidth = item.size.outerWidth + this.gutter;\n // if this element cannot fit in the current row\n var containerWidth = this.isotope.size.innerWidth + this.gutter;\n if ( this.x !== 0 && itemWidth + this.x > containerWidth ) {\n this.x = 0;\n this.y = this.maxY;\n }\n\n var position = {\n x: this.x,\n y: this.y\n };\n\n this.maxY = Math.max( this.maxY, this.y + item.size.outerHeight );\n this.x += itemWidth;\n\n return position;\n};\n\nproto._getContainerSize = function() {\n return { height: this.maxY };\n};\n\nreturn FitRows;\n\n}));\n","/*!\n * Masonry layout mode\n * sub-classes Masonry\n * https://masonry.desandro.com\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n '../layout-mode',\n 'masonry-layout/masonry'\n ],\n factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('../layout-mode'),\n require('masonry-layout')\n );\n } else {\n // browser global\n factory(\n window.Isotope.LayoutMode,\n window.Masonry\n );\n }\n\n}( window, function factory( LayoutMode, Masonry ) {\n'use strict';\n\n// -------------------------- masonryDefinition -------------------------- //\n\n // create an Outlayer layout class\n var MasonryMode = LayoutMode.create('masonry');\n\n var proto = MasonryMode.prototype;\n\n var keepModeMethods = {\n _getElementOffset: true,\n layout: true,\n _getMeasurement: true\n };\n\n // inherit Masonry prototype\n for ( var method in Masonry.prototype ) {\n // do not inherit mode methods\n if ( !keepModeMethods[ method ] ) {\n proto[ method ] = Masonry.prototype[ method ];\n }\n }\n\n var measureColumns = proto.measureColumns;\n proto.measureColumns = function() {\n // set items, used if measuring first item\n this.items = this.isotope.filteredItems;\n measureColumns.call( this );\n };\n\n // point to mode options for fitWidth\n var _getOption = proto._getOption;\n proto._getOption = function( option ) {\n if ( option == 'fitWidth' ) {\n return this.options.isFitWidth !== undefined ?\n this.options.isFitWidth : this.options.fitWidth;\n }\n return _getOption.apply( this.isotope, arguments );\n };\n\n return MasonryMode;\n\n}));\n","/**\n * vertical layout mode\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n '../layout-mode'\n ],\n factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('../layout-mode')\n );\n } else {\n // browser global\n factory(\n window.Isotope.LayoutMode\n );\n }\n\n}( window, function factory( LayoutMode ) {\n'use strict';\n\nvar Vertical = LayoutMode.create( 'vertical', {\n horizontalAlignment: 0\n});\n\nvar proto = Vertical.prototype;\n\nproto._resetLayout = function() {\n this.y = 0;\n};\n\nproto._getItemLayoutPosition = function( item ) {\n item.getSize();\n var x = ( this.isotope.size.innerWidth - item.size.outerWidth ) *\n this.options.horizontalAlignment;\n var y = this.y;\n this.y += item.size.outerHeight;\n return { x: x, y: y };\n};\n\nproto._getContainerSize = function() {\n return { height: this.y };\n};\n\nreturn Vertical;\n\n}));\n","!function(t,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(n):t.Macy=n()}(this,function(){\"use strict\";function t(t,n){var e=void 0;return function(){e&&clearTimeout(e),e=setTimeout(t,n)}}function n(t,n){for(var e=t.length,r=e,o=[];e--;)o.push(n(t[r-e-1]));return o}function e(t,n){var e=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(window.Promise)return A(t,n,e);t.recalculate(!0,!0)}function r(t){for(var n=t.options,e=t.responsiveOptions,r=t.keys,o=t.docWidth,i=void 0,s=0;s=a&&(i=n.breakAt[a],O(i,e))}return e}function o(t){for(var n=t.options,e=t.responsiveOptions,r=t.keys,o=t.docWidth,i=void 0,s=r.length-1;s>=0;s--){var a=parseInt(r[s],10);o<=a&&(i=n.breakAt[a],O(i,e))}return e}function i(t){var n=t.useContainerForBreakpoints?t.container.clientWidth:window.innerWidth,e={columns:t.columns};b(t.margin)?e.margin={x:t.margin.x,y:t.margin.y}:e.margin={x:t.margin,y:t.margin};var i=Object.keys(t.breakAt);return t.mobileFirst?r({options:t,responsiveOptions:e,keys:i,docWidth:n}):o({options:t,responsiveOptions:e,keys:i,docWidth:n})}function s(t){return i(t).columns}function a(t){return i(t).margin}function c(t){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],e=s(t),r=a(t).x,o=100/e;if(!n)return o;if(1===e)return\"100%\";var i=\"px\";if(\"string\"==typeof r){var c=parseFloat(r);i=r.replace(c,\"\"),r=c}return r=(e-1)*r/e,\"%\"===i?o-r+\"%\":\"calc(\"+o+\"% - \"+r+i+\")\"}function u(t,n){var e=s(t.options),r=0,o=void 0,i=void 0;if(1===++n)return 0;i=a(t.options).x;var u=\"px\";if(\"string\"==typeof i){var l=parseFloat(i,10);u=i.replace(l,\"\"),i=l}return o=(i-(e-1)*i/e)*(n-1),r+=c(t.options,!1)*(n-1),\"%\"===u?r+o+\"%\":\"calc(\"+r+\"% + \"+o+u+\")\"}function l(t){var n=0,e=t.container,r=t.rows;v(r,function(t){n=t>n?t:n}),e.style.height=n+\"px\"}function p(t,n){var e=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=s(t.options),i=a(t.options).y;M(t,o,e),v(n,function(n){var e=0,o=parseInt(n.offsetHeight,10);isNaN(o)||(t.rows.forEach(function(n,r){n2&&void 0!==arguments[2]&&arguments[2],r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=s(t.options),i=a(t.options).y;M(t,o,e),v(n,function(n){t.lastcol===o&&(t.lastcol=0);var e=C(n,\"height\");e=parseInt(n.offsetHeight,10),isNaN(e)||(n.style.position=\"absolute\",n.style.top=t.rows[t.lastcol]+\"px\",n.style.left=\"\"+t.cols[t.lastcol],t.rows[t.lastcol]+=isNaN(e)?0:e+i,t.lastcol+=1,r&&(n.dataset.macyComplete=1))}),r&&(t.tmpRows=null),l(t)}var h=function t(n,e){if(!(this instanceof t))return new t(n,e);if(n&&n.nodeName)return n;if(n=n.replace(/^\\s*/,\"\").replace(/\\s*$/,\"\"),e)return this.byCss(n,e);for(var r in this.selectors)if(e=r.split(\"/\"),new RegExp(e[1],e[2]).test(n))return this.selectors[r](n);return this.byCss(n)};h.prototype.byCss=function(t,n){return(n||document).querySelectorAll(t)},h.prototype.selectors={},h.prototype.selectors[/^\\.[\\w\\-]+$/]=function(t){return document.getElementsByClassName(t.substring(1))},h.prototype.selectors[/^\\w+$/]=function(t){return document.getElementsByTagName(t)},h.prototype.selectors[/^\\#[\\w\\-]+$/]=function(t){return document.getElementById(t.substring(1))};var v=function(t,n){for(var e=t.length,r=e;e--;)n(t[r-e-1])},m=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.running=!1,this.events=[],this.add(t)};m.prototype.run=function(){if(!this.running&&this.events.length>0){var t=this.events.shift();this.running=!0,t(),this.running=!1,this.run()}},m.prototype.add=function(){var t=this,n=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return!!n&&(Array.isArray(n)?v(n,function(n){return t.add(n)}):(this.events.push(n),void this.run()))},m.prototype.clear=function(){this.events=[]};var d=function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.instance=t,this.data=n,this},y=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.events={},this.instance=t};y.prototype.on=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return!(!t||!n)&&(Array.isArray(this.events[t])||(this.events[t]=[]),this.events[t].push(n))},y.prototype.emit=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t||!Array.isArray(this.events[t]))return!1;var e=new d(this.instance,n);v(this.events[t],function(t){return t(e)})};var g=function(t){return!(\"naturalHeight\"in t&&t.naturalHeight+t.naturalWidth===0)||t.width+t.height!==0},E=function(t,n){var e=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return new Promise(function(t,e){if(n.complete)return g(n)?t(n):e(n);n.addEventListener(\"load\",function(){return g(n)?t(n):e(n)}),n.addEventListener(\"error\",function(){return e(n)})}).then(function(n){e&&t.emit(t.constants.EVENT_IMAGE_LOAD,{img:n})}).catch(function(n){return t.emit(t.constants.EVENT_IMAGE_ERROR,{img:n})})},w=function(t,e){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return n(e,function(n){return E(t,n,r)})},A=function(t,n){var e=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return Promise.all(w(t,n,e)).then(function(){t.emit(t.constants.EVENT_IMAGE_COMPLETE)})},I=function(n){return t(function(){n.emit(n.constants.EVENT_RESIZE),n.queue.add(function(){return n.recalculate(!0,!0)})},100)},N=function(t){if(t.container=h(t.options.container),t.container instanceof h||!t.container)return!!t.options.debug&&console.error(\"Error: Container not found\");t.container.length&&(t.container=t.container[0]),t.options.container=t.container,t.container.style.position=\"relative\"},T=function(t){t.queue=new m,t.events=new y(t),t.rows=[],t.resizer=I(t)},L=function(t){var n=h(\"img\",t.container);window.addEventListener(\"resize\",t.resizer),t.on(t.constants.EVENT_IMAGE_LOAD,function(){return t.recalculate(!1,!1)}),t.on(t.constants.EVENT_IMAGE_COMPLETE,function(){return t.recalculate(!0,!0)}),t.options.useOwnImageLoader||e(t,n,!t.options.waitForImages),t.emit(t.constants.EVENT_INITIALIZED)},_=function(t){N(t),T(t),L(t)},b=function(t){return t===Object(t)&&\"[object Array]\"!==Object.prototype.toString.call(t)},O=function(t,n){b(t)||(n.columns=t),b(t)&&t.columns&&(n.columns=t.columns),b(t)&&t.margin&&!b(t.margin)&&(n.margin={x:t.margin,y:t.margin}),b(t)&&t.margin&&b(t.margin)&&t.margin.x&&(n.margin.x=t.margin.x),b(t)&&t.margin&&b(t.margin)&&t.margin.y&&(n.margin.y=t.margin.y)},C=function(t,n){return window.getComputedStyle(t,null).getPropertyValue(n)},M=function(t,n){var e=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(t.lastcol||(t.lastcol=0),t.rows.length<1&&(e=!0),e){t.rows=[],t.cols=[],t.lastcol=0;for(var r=n-1;r>=0;r--)t.rows[r]=0,t.cols[r]=u(t,r)}else if(t.tmpRows){t.rows=[];for(var r=n-1;r>=0;r--)t.rows[r]=t.tmpRows[r]}else{t.tmpRows=[];for(var r=n-1;r>=0;r--)t.tmpRows[r]=t.rows[r]}},V=function(t){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],e=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=n?t.container.children:h(':scope > *:not([data-macy-complete=\"1\"])',t.container);r=Array.from(r).filter(function(t){return null!==t.offsetParent});var o=c(t.options);return v(r,function(t){n&&(t.dataset.macyComplete=0),t.style.width=o}),t.options.trueOrder?(f(t,r,n,e),t.emit(t.constants.EVENT_RECALCULATED)):(p(t,r,n,e),t.emit(t.constants.EVENT_RECALCULATED))},R=function(){return!!window.Promise},x=Object.assign||function(t){for(var n=1;n0&&void 0!==arguments[0]?arguments[0]:k;if(!(this instanceof t))return new t(n);this.options={},x(this.options,k,n),this.options.cancelLegacy&&!R()||_(this)};return q.init=function(t){return console.warn(\"Depreciated: Macy.init will be removed in v3.0.0 opt to use Macy directly like so Macy({ /*options here*/ }) \"),new q(t)},q.prototype.recalculateOnImageLoad=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return e(this,h(\"img\",this.container),!t)},q.prototype.runOnImageLoad=function(t){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=h(\"img\",this.container);return this.on(this.constants.EVENT_IMAGE_COMPLETE,t),n&&this.on(this.constants.EVENT_IMAGE_LOAD,t),e(this,r,n)},q.prototype.recalculate=function(){var t=this,n=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return e&&this.queue.clear(),this.queue.add(function(){return V(t,n,e)})},q.prototype.remove=function(){window.removeEventListener(\"resize\",this.resizer),v(this.container.children,function(t){t.removeAttribute(\"data-macy-complete\"),t.removeAttribute(\"style\")}),this.container.removeAttribute(\"style\")},q.prototype.reInit=function(){this.recalculate(!0,!0),this.emit(this.constants.EVENT_INITIALIZED),window.addEventListener(\"resize\",this.resizer),this.container.style.position=\"relative\"},q.prototype.on=function(t,n){this.events.on(t,n)},q.prototype.emit=function(t,n){this.events.emit(t,n)},q.constants={EVENT_INITIALIZED:\"macy.initialized\",EVENT_RECALCULATED:\"macy.recalculated\",EVENT_IMAGE_LOAD:\"macy.image.load\",EVENT_IMAGE_ERROR:\"macy.image.error\",EVENT_IMAGE_COMPLETE:\"macy.images.complete\",EVENT_RESIZE:\"macy.resize\"},q.prototype.constants=q.constants,q});\n","/*!\n * Masonry v4.2.2\n * Cascading grid layout library\n * https://masonry.desandro.com\n * MIT License\n * by David DeSandro\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'outlayer/outlayer',\n 'get-size/get-size'\n ],\n factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('outlayer'),\n require('get-size')\n );\n } else {\n // browser global\n window.Masonry = factory(\n window.Outlayer,\n window.getSize\n );\n }\n\n}( window, function factory( Outlayer, getSize ) {\n\n'use strict';\n\n// -------------------------- masonryDefinition -------------------------- //\n\n // create an Outlayer layout class\n var Masonry = Outlayer.create('masonry');\n // isFitWidth -> fitWidth\n Masonry.compatOptions.fitWidth = 'isFitWidth';\n\n var proto = Masonry.prototype;\n\n proto._resetLayout = function() {\n this.getSize();\n this._getMeasurement( 'columnWidth', 'outerWidth' );\n this._getMeasurement( 'gutter', 'outerWidth' );\n this.measureColumns();\n\n // reset column Y\n this.colYs = [];\n for ( var i=0; i < this.cols; i++ ) {\n this.colYs.push( 0 );\n }\n\n this.maxY = 0;\n this.horizontalColIndex = 0;\n };\n\n proto.measureColumns = function() {\n this.getContainerWidth();\n // if columnWidth is 0, default to outerWidth of first item\n if ( !this.columnWidth ) {\n var firstItem = this.items[0];\n var firstItemElem = firstItem && firstItem.element;\n // columnWidth fall back to item of first element\n this.columnWidth = firstItemElem && getSize( firstItemElem ).outerWidth ||\n // if first elem has no width, default to size of container\n this.containerWidth;\n }\n\n var columnWidth = this.columnWidth += this.gutter;\n\n // calculate columns\n var containerWidth = this.containerWidth + this.gutter;\n var cols = containerWidth / columnWidth;\n // fix rounding errors, typically with gutters\n var excess = columnWidth - containerWidth % columnWidth;\n // if overshoot is less than a pixel, round up, otherwise floor it\n var mathMethod = excess && excess < 1 ? 'round' : 'floor';\n cols = Math[ mathMethod ]( cols );\n this.cols = Math.max( cols, 1 );\n };\n\n proto.getContainerWidth = function() {\n // container is parent if fit width\n var isFitWidth = this._getOption('fitWidth');\n var container = isFitWidth ? this.element.parentNode : this.element;\n // check that this.size and size are there\n // IE8 triggers resize on body size change, so they might not be\n var size = getSize( container );\n this.containerWidth = size && size.innerWidth;\n };\n\n proto._getItemLayoutPosition = function( item ) {\n item.getSize();\n // how many columns does this brick span\n var remainder = item.size.outerWidth % this.columnWidth;\n var mathMethod = remainder && remainder < 1 ? 'round' : 'ceil';\n // round if off by 1 pixel, otherwise use ceil\n var colSpan = Math[ mathMethod ]( item.size.outerWidth / this.columnWidth );\n colSpan = Math.min( colSpan, this.cols );\n // use horizontal or top column position\n var colPosMethod = this.options.horizontalOrder ?\n '_getHorizontalColPosition' : '_getTopColPosition';\n var colPosition = this[ colPosMethod ]( colSpan, item );\n // position the brick\n var position = {\n x: this.columnWidth * colPosition.col,\n y: colPosition.y\n };\n // apply setHeight to necessary columns\n var setHeight = colPosition.y + item.size.outerHeight;\n var setMax = colSpan + colPosition.col;\n for ( var i = colPosition.col; i < setMax; i++ ) {\n this.colYs[i] = setHeight;\n }\n\n return position;\n };\n\n proto._getTopColPosition = function( colSpan ) {\n var colGroup = this._getTopColGroup( colSpan );\n // get the minimum Y value from the columns\n var minimumY = Math.min.apply( Math, colGroup );\n\n return {\n col: colGroup.indexOf( minimumY ),\n y: minimumY,\n };\n };\n\n /**\n * @param {Number} colSpan - number of columns the element spans\n * @returns {Array} colGroup\n */\n proto._getTopColGroup = function( colSpan ) {\n if ( colSpan < 2 ) {\n // if brick spans only one column, use all the column Ys\n return this.colYs;\n }\n\n var colGroup = [];\n // how many different places could this brick fit horizontally\n var groupCount = this.cols + 1 - colSpan;\n // for each group potential horizontal position\n for ( var i = 0; i < groupCount; i++ ) {\n colGroup[i] = this._getColGroupY( i, colSpan );\n }\n return colGroup;\n };\n\n proto._getColGroupY = function( col, colSpan ) {\n if ( colSpan < 2 ) {\n return this.colYs[ col ];\n }\n // make an array of colY values for that one group\n var groupColYs = this.colYs.slice( col, col + colSpan );\n // and get the max value of the array\n return Math.max.apply( Math, groupColYs );\n };\n\n // get column position based on horizontal index. #873\n proto._getHorizontalColPosition = function( colSpan, item ) {\n var col = this.horizontalColIndex % this.cols;\n var isOver = colSpan > 1 && col + colSpan > this.cols;\n // shift to next row if item can't fit on current row\n col = isOver ? 0 : col;\n // don't let zero-size items take up space\n var hasSize = item.size.outerWidth && item.size.outerHeight;\n this.horizontalColIndex = hasSize ? col + colSpan : this.horizontalColIndex;\n\n return {\n col: col,\n y: this._getColGroupY( col, colSpan ),\n };\n };\n\n proto._manageStamp = function( stamp ) {\n var stampSize = getSize( stamp );\n var offset = this._getElementOffset( stamp );\n // get the columns that this stamp affects\n var isOriginLeft = this._getOption('originLeft');\n var firstX = isOriginLeft ? offset.left : offset.right;\n var lastX = firstX + stampSize.outerWidth;\n var firstCol = Math.floor( firstX / this.columnWidth );\n firstCol = Math.max( 0, firstCol );\n var lastCol = Math.floor( lastX / this.columnWidth );\n // lastCol should not go over if multiple of columnWidth #425\n lastCol -= lastX % this.columnWidth ? 0 : 1;\n lastCol = Math.min( this.cols - 1, lastCol );\n // set colYs to bottom of the stamp\n\n var isOriginTop = this._getOption('originTop');\n var stampMaxY = ( isOriginTop ? offset.top : offset.bottom ) +\n stampSize.outerHeight;\n for ( var i = firstCol; i <= lastCol; i++ ) {\n this.colYs[i] = Math.max( stampMaxY, this.colYs[i] );\n }\n };\n\n proto._getContainerSize = function() {\n this.maxY = Math.max.apply( Math, this.colYs );\n var size = {\n height: this.maxY\n };\n\n if ( this._getOption('fitWidth') ) {\n size.width = this._getContainerFitWidth();\n }\n\n return size;\n };\n\n proto._getContainerFitWidth = function() {\n var unusedCols = 0;\n // count unused columns\n var i = this.cols;\n while ( --i ) {\n if ( this.colYs[i] !== 0 ) {\n break;\n }\n unusedCols++;\n }\n // fit container to columns that have been used\n return ( this.cols - unusedCols ) * this.columnWidth - this.gutter;\n };\n\n proto.needsResizeLayout = function() {\n var previousWidth = this.containerWidth;\n this.getContainerWidth();\n return previousWidth != this.containerWidth;\n };\n\n return Masonry;\n\n}));\n","/*! npm.im/object-fit-images 3.2.4 */\n'use strict';\n\nvar OFI = 'bfred-it:object-fit-images';\nvar propRegex = /(object-fit|object-position)\\s*:\\s*([-.\\w\\s%]+)/g;\nvar testImg = typeof Image === 'undefined' ? {style: {'object-position': 1}} : new Image();\nvar supportsObjectFit = 'object-fit' in testImg.style;\nvar supportsObjectPosition = 'object-position' in testImg.style;\nvar supportsOFI = 'background-size' in testImg.style;\nvar supportsCurrentSrc = typeof testImg.currentSrc === 'string';\nvar nativeGetAttribute = testImg.getAttribute;\nvar nativeSetAttribute = testImg.setAttribute;\nvar autoModeEnabled = false;\n\nfunction createPlaceholder(w, h) {\n\treturn (\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='\" + w + \"' height='\" + h + \"'%3E%3C/svg%3E\");\n}\n\nfunction polyfillCurrentSrc(el) {\n\tif (el.srcset && !supportsCurrentSrc && window.picturefill) {\n\t\tvar pf = window.picturefill._;\n\t\t// parse srcset with picturefill where currentSrc isn't available\n\t\tif (!el[pf.ns] || !el[pf.ns].evaled) {\n\t\t\t// force synchronous srcset parsing\n\t\t\tpf.fillImg(el, {reselect: true});\n\t\t}\n\n\t\tif (!el[pf.ns].curSrc) {\n\t\t\t// force picturefill to parse srcset\n\t\t\tel[pf.ns].supported = false;\n\t\t\tpf.fillImg(el, {reselect: true});\n\t\t}\n\n\t\t// retrieve parsed currentSrc, if any\n\t\tel.currentSrc = el[pf.ns].curSrc || el.src;\n\t}\n}\n\nfunction getStyle(el) {\n\tvar style = getComputedStyle(el).fontFamily;\n\tvar parsed;\n\tvar props = {};\n\twhile ((parsed = propRegex.exec(style)) !== null) {\n\t\tprops[parsed[1]] = parsed[2];\n\t}\n\treturn props;\n}\n\nfunction setPlaceholder(img, width, height) {\n\t// Default: fill width, no height\n\tvar placeholder = createPlaceholder(width || 1, height || 0);\n\n\t// Only set placeholder if it's different\n\tif (nativeGetAttribute.call(img, 'src') !== placeholder) {\n\t\tnativeSetAttribute.call(img, 'src', placeholder);\n\t}\n}\n\nfunction onImageReady(img, callback) {\n\t// naturalWidth is only available when the image headers are loaded,\n\t// this loop will poll it every 100ms.\n\tif (img.naturalWidth) {\n\t\tcallback(img);\n\t} else {\n\t\tsetTimeout(onImageReady, 100, img, callback);\n\t}\n}\n\nfunction fixOne(el) {\n\tvar style = getStyle(el);\n\tvar ofi = el[OFI];\n\tstyle['object-fit'] = style['object-fit'] || 'fill'; // default value\n\n\t// Avoid running where unnecessary, unless OFI had already done its deed\n\tif (!ofi.img) {\n\t\t// fill is the default behavior so no action is necessary\n\t\tif (style['object-fit'] === 'fill') {\n\t\t\treturn;\n\t\t}\n\n\t\t// Where object-fit is supported and object-position isn't (Safari < 10)\n\t\tif (\n\t\t\t!ofi.skipTest && // unless user wants to apply regardless of browser support\n\t\t\tsupportsObjectFit && // if browser already supports object-fit\n\t\t\t!style['object-position'] // unless object-position is used\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// keep a clone in memory while resetting the original to a blank\n\tif (!ofi.img) {\n\t\tofi.img = new Image(el.width, el.height);\n\t\tofi.img.srcset = nativeGetAttribute.call(el, \"data-ofi-srcset\") || el.srcset;\n\t\tofi.img.src = nativeGetAttribute.call(el, \"data-ofi-src\") || el.src;\n\n\t\t// preserve for any future cloneNode calls\n\t\t// https://github.com/bfred-it/object-fit-images/issues/53\n\t\tnativeSetAttribute.call(el, \"data-ofi-src\", el.src);\n\t\tif (el.srcset) {\n\t\t\tnativeSetAttribute.call(el, \"data-ofi-srcset\", el.srcset);\n\t\t}\n\n\t\tsetPlaceholder(el, el.naturalWidth || el.width, el.naturalHeight || el.height);\n\n\t\t// remove srcset because it overrides src\n\t\tif (el.srcset) {\n\t\t\tel.srcset = '';\n\t\t}\n\t\ttry {\n\t\t\tkeepSrcUsable(el);\n\t\t} catch (err) {\n\t\t\tif (window.console) {\n\t\t\t\tconsole.warn('https://bit.ly/ofi-old-browser');\n\t\t\t}\n\t\t}\n\t}\n\n\tpolyfillCurrentSrc(ofi.img);\n\n\tel.style.backgroundImage = \"url(\\\"\" + ((ofi.img.currentSrc || ofi.img.src).replace(/\"/g, '\\\\\"')) + \"\\\")\";\n\tel.style.backgroundPosition = style['object-position'] || 'center';\n\tel.style.backgroundRepeat = 'no-repeat';\n\tel.style.backgroundOrigin = 'content-box';\n\n\tif (/scale-down/.test(style['object-fit'])) {\n\t\tonImageReady(ofi.img, function () {\n\t\t\tif (ofi.img.naturalWidth > el.width || ofi.img.naturalHeight > el.height) {\n\t\t\t\tel.style.backgroundSize = 'contain';\n\t\t\t} else {\n\t\t\t\tel.style.backgroundSize = 'auto';\n\t\t\t}\n\t\t});\n\t} else {\n\t\tel.style.backgroundSize = style['object-fit'].replace('none', 'auto').replace('fill', '100% 100%');\n\t}\n\n\tonImageReady(ofi.img, function (img) {\n\t\tsetPlaceholder(el, img.naturalWidth, img.naturalHeight);\n\t});\n}\n\nfunction keepSrcUsable(el) {\n\tvar descriptors = {\n\t\tget: function get(prop) {\n\t\t\treturn el[OFI].img[prop ? prop : 'src'];\n\t\t},\n\t\tset: function set(value, prop) {\n\t\t\tel[OFI].img[prop ? prop : 'src'] = value;\n\t\t\tnativeSetAttribute.call(el, (\"data-ofi-\" + prop), value); // preserve for any future cloneNode\n\t\t\tfixOne(el);\n\t\t\treturn value;\n\t\t}\n\t};\n\tObject.defineProperty(el, 'src', descriptors);\n\tObject.defineProperty(el, 'currentSrc', {\n\t\tget: function () { return descriptors.get('currentSrc'); }\n\t});\n\tObject.defineProperty(el, 'srcset', {\n\t\tget: function () { return descriptors.get('srcset'); },\n\t\tset: function (ss) { return descriptors.set(ss, 'srcset'); }\n\t});\n}\n\nfunction hijackAttributes() {\n\tfunction getOfiImageMaybe(el, name) {\n\t\treturn el[OFI] && el[OFI].img && (name === 'src' || name === 'srcset') ? el[OFI].img : el;\n\t}\n\tif (!supportsObjectPosition) {\n\t\tHTMLImageElement.prototype.getAttribute = function (name) {\n\t\t\treturn nativeGetAttribute.call(getOfiImageMaybe(this, name), name);\n\t\t};\n\n\t\tHTMLImageElement.prototype.setAttribute = function (name, value) {\n\t\t\treturn nativeSetAttribute.call(getOfiImageMaybe(this, name), name, String(value));\n\t\t};\n\t}\n}\n\nfunction fix(imgs, opts) {\n\tvar startAutoMode = !autoModeEnabled && !imgs;\n\topts = opts || {};\n\timgs = imgs || 'img';\n\n\tif ((supportsObjectPosition && !opts.skipTest) || !supportsOFI) {\n\t\treturn false;\n\t}\n\n\t// use imgs as a selector or just select all images\n\tif (imgs === 'img') {\n\t\timgs = document.getElementsByTagName('img');\n\t} else if (typeof imgs === 'string') {\n\t\timgs = document.querySelectorAll(imgs);\n\t} else if (!('length' in imgs)) {\n\t\timgs = [imgs];\n\t}\n\n\t// apply fix to all\n\tfor (var i = 0; i < imgs.length; i++) {\n\t\timgs[i][OFI] = imgs[i][OFI] || {\n\t\t\tskipTest: opts.skipTest\n\t\t};\n\t\tfixOne(imgs[i]);\n\t}\n\n\tif (startAutoMode) {\n\t\tdocument.body.addEventListener('load', function (e) {\n\t\t\tif (e.target.tagName === 'IMG') {\n\t\t\t\tfix(e.target, {\n\t\t\t\t\tskipTest: opts.skipTest\n\t\t\t\t});\n\t\t\t}\n\t\t}, true);\n\t\tautoModeEnabled = true;\n\t\timgs = 'img'; // reset to a generic selector for watchMQ\n\t}\n\n\t// if requested, watch media queries for object-fit change\n\tif (opts.watchMQ) {\n\t\twindow.addEventListener('resize', fix.bind(null, imgs, {\n\t\t\tskipTest: opts.skipTest\n\t\t}));\n\t}\n}\n\nfix.supportsObjectFit = supportsObjectFit;\nfix.supportsObjectPosition = supportsObjectPosition;\n\nhijackAttributes();\n\nmodule.exports = fix;\n","/**\n * Outlayer Item\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size'\n ],\n factory\n );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory(\n require('ev-emitter'),\n require('get-size')\n );\n } else {\n // browser global\n window.Outlayer = {};\n window.Outlayer.Item = factory(\n window.EvEmitter,\n window.getSize\n );\n }\n\n}( window, function factory( EvEmitter, getSize ) {\n'use strict';\n\n// ----- helpers ----- //\n\nfunction isEmptyObj( obj ) {\n for ( var prop in obj ) {\n return false;\n }\n prop = null;\n return true;\n}\n\n// -------------------------- CSS3 support -------------------------- //\n\n\nvar docElemStyle = document.documentElement.style;\n\nvar transitionProperty = typeof docElemStyle.transition == 'string' ?\n 'transition' : 'WebkitTransition';\nvar transformProperty = typeof docElemStyle.transform == 'string' ?\n 'transform' : 'WebkitTransform';\n\nvar transitionEndEvent = {\n WebkitTransition: 'webkitTransitionEnd',\n transition: 'transitionend'\n}[ transitionProperty ];\n\n// cache all vendor properties that could have vendor prefix\nvar vendorProperties = {\n transform: transformProperty,\n transition: transitionProperty,\n transitionDuration: transitionProperty + 'Duration',\n transitionProperty: transitionProperty + 'Property',\n transitionDelay: transitionProperty + 'Delay'\n};\n\n// -------------------------- Item -------------------------- //\n\nfunction Item( element, layout ) {\n if ( !element ) {\n return;\n }\n\n this.element = element;\n // parent layout class, i.e. Masonry, Isotope, or Packery\n this.layout = layout;\n this.position = {\n x: 0,\n y: 0\n };\n\n this._create();\n}\n\n// inherit EvEmitter\nvar proto = Item.prototype = Object.create( EvEmitter.prototype );\nproto.constructor = Item;\n\nproto._create = function() {\n // transition objects\n this._transn = {\n ingProperties: {},\n clean: {},\n onEnd: {}\n };\n\n this.css({\n position: 'absolute'\n });\n};\n\n// trigger specified handler for event type\nproto.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\n/**\n * apply CSS styles to element\n * @param {Object} style\n */\nproto.css = function( style ) {\n var elemStyle = this.element.style;\n\n for ( var prop in style ) {\n // use vendor property if available\n var supportedProp = vendorProperties[ prop ] || prop;\n elemStyle[ supportedProp ] = style[ prop ];\n }\n};\n\n // measure position, and sets it\nproto.getPosition = function() {\n var style = getComputedStyle( this.element );\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n var xValue = style[ isOriginLeft ? 'left' : 'right' ];\n var yValue = style[ isOriginTop ? 'top' : 'bottom' ];\n var x = parseFloat( xValue );\n var y = parseFloat( yValue );\n // convert percent to pixels\n var layoutSize = this.layout.size;\n if ( xValue.indexOf('%') != -1 ) {\n x = ( x / 100 ) * layoutSize.width;\n }\n if ( yValue.indexOf('%') != -1 ) {\n y = ( y / 100 ) * layoutSize.height;\n }\n // clean up 'auto' or other non-integer values\n x = isNaN( x ) ? 0 : x;\n y = isNaN( y ) ? 0 : y;\n // remove padding from measurement\n x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight;\n y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom;\n\n this.position.x = x;\n this.position.y = y;\n};\n\n// set settled position, apply padding\nproto.layoutPosition = function() {\n var layoutSize = this.layout.size;\n var style = {};\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n\n // x\n var xPadding = isOriginLeft ? 'paddingLeft' : 'paddingRight';\n var xProperty = isOriginLeft ? 'left' : 'right';\n var xResetProperty = isOriginLeft ? 'right' : 'left';\n\n var x = this.position.x + layoutSize[ xPadding ];\n // set in percentage or pixels\n style[ xProperty ] = this.getXValue( x );\n // reset other property\n style[ xResetProperty ] = '';\n\n // y\n var yPadding = isOriginTop ? 'paddingTop' : 'paddingBottom';\n var yProperty = isOriginTop ? 'top' : 'bottom';\n var yResetProperty = isOriginTop ? 'bottom' : 'top';\n\n var y = this.position.y + layoutSize[ yPadding ];\n // set in percentage or pixels\n style[ yProperty ] = this.getYValue( y );\n // reset other property\n style[ yResetProperty ] = '';\n\n this.css( style );\n this.emitEvent( 'layout', [ this ] );\n};\n\nproto.getXValue = function( x ) {\n var isHorizontal = this.layout._getOption('horizontal');\n return this.layout.options.percentPosition && !isHorizontal ?\n ( ( x / this.layout.size.width ) * 100 ) + '%' : x + 'px';\n};\n\nproto.getYValue = function( y ) {\n var isHorizontal = this.layout._getOption('horizontal');\n return this.layout.options.percentPosition && isHorizontal ?\n ( ( y / this.layout.size.height ) * 100 ) + '%' : y + 'px';\n};\n\nproto._transitionTo = function( x, y ) {\n this.getPosition();\n // get current x & y from top/left\n var curX = this.position.x;\n var curY = this.position.y;\n\n var didNotMove = x == this.position.x && y == this.position.y;\n\n // save end position\n this.setPosition( x, y );\n\n // if did not move and not transitioning, just go to layout\n if ( didNotMove && !this.isTransitioning ) {\n this.layoutPosition();\n return;\n }\n\n var transX = x - curX;\n var transY = y - curY;\n var transitionStyle = {};\n transitionStyle.transform = this.getTranslate( transX, transY );\n\n this.transition({\n to: transitionStyle,\n onTransitionEnd: {\n transform: this.layoutPosition\n },\n isCleaning: true\n });\n};\n\nproto.getTranslate = function( x, y ) {\n // flip cooridinates if origin on right or bottom\n var isOriginLeft = this.layout._getOption('originLeft');\n var isOriginTop = this.layout._getOption('originTop');\n x = isOriginLeft ? x : -x;\n y = isOriginTop ? y : -y;\n return 'translate3d(' + x + 'px, ' + y + 'px, 0)';\n};\n\n// non transition + transform support\nproto.goTo = function( x, y ) {\n this.setPosition( x, y );\n this.layoutPosition();\n};\n\nproto.moveTo = proto._transitionTo;\n\nproto.setPosition = function( x, y ) {\n this.position.x = parseFloat( x );\n this.position.y = parseFloat( y );\n};\n\n// ----- transition ----- //\n\n/**\n * @param {Object} style - CSS\n * @param {Function} onTransitionEnd\n */\n\n// non transition, just trigger callback\nproto._nonTransition = function( args ) {\n this.css( args.to );\n if ( args.isCleaning ) {\n this._removeStyles( args.to );\n }\n for ( var prop in args.onTransitionEnd ) {\n args.onTransitionEnd[ prop ].call( this );\n }\n};\n\n/**\n * proper transition\n * @param {Object} args - arguments\n * @param {Object} to - style to transition to\n * @param {Object} from - style to start transition from\n * @param {Boolean} isCleaning - removes transition styles after transition\n * @param {Function} onTransitionEnd - callback\n */\nproto.transition = function( args ) {\n // redirect to nonTransition if no transition duration\n if ( !parseFloat( this.layout.options.transitionDuration ) ) {\n this._nonTransition( args );\n return;\n }\n\n var _transition = this._transn;\n // keep track of onTransitionEnd callback by css property\n for ( var prop in args.onTransitionEnd ) {\n _transition.onEnd[ prop ] = args.onTransitionEnd[ prop ];\n }\n // keep track of properties that are transitioning\n for ( prop in args.to ) {\n _transition.ingProperties[ prop ] = true;\n // keep track of properties to clean up when transition is done\n if ( args.isCleaning ) {\n _transition.clean[ prop ] = true;\n }\n }\n\n // set from styles\n if ( args.from ) {\n this.css( args.from );\n // force redraw. http://blog.alexmaccaw.com/css-transitions\n var h = this.element.offsetHeight;\n // hack for JSHint to hush about unused var\n h = null;\n }\n // enable transition\n this.enableTransition( args.to );\n // set styles that are transitioning\n this.css( args.to );\n\n this.isTransitioning = true;\n\n};\n\n// dash before all cap letters, including first for\n// WebkitTransform => -webkit-transform\nfunction toDashedAll( str ) {\n return str.replace( /([A-Z])/g, function( $1 ) {\n return '-' + $1.toLowerCase();\n });\n}\n\nvar transitionProps = 'opacity,' + toDashedAll( transformProperty );\n\nproto.enableTransition = function(/* style */) {\n // HACK changing transitionProperty during a transition\n // will cause transition to jump\n if ( this.isTransitioning ) {\n return;\n }\n\n // make `transition: foo, bar, baz` from style object\n // HACK un-comment this when enableTransition can work\n // while a transition is happening\n // var transitionValues = [];\n // for ( var prop in style ) {\n // // dash-ify camelCased properties like WebkitTransition\n // prop = vendorProperties[ prop ] || prop;\n // transitionValues.push( toDashedAll( prop ) );\n // }\n // munge number to millisecond, to match stagger\n var duration = this.layout.options.transitionDuration;\n duration = typeof duration == 'number' ? duration + 'ms' : duration;\n // enable transition styles\n this.css({\n transitionProperty: transitionProps,\n transitionDuration: duration,\n transitionDelay: this.staggerDelay || 0\n });\n // listen for transition end event\n this.element.addEventListener( transitionEndEvent, this, false );\n};\n\n// ----- events ----- //\n\nproto.onwebkitTransitionEnd = function( event ) {\n this.ontransitionend( event );\n};\n\nproto.onotransitionend = function( event ) {\n this.ontransitionend( event );\n};\n\n// properties that I munge to make my life easier\nvar dashedVendorProperties = {\n '-webkit-transform': 'transform'\n};\n\nproto.ontransitionend = function( event ) {\n // disregard bubbled events from children\n if ( event.target !== this.element ) {\n return;\n }\n var _transition = this._transn;\n // get property name of transitioned property, convert to prefix-free\n var propertyName = dashedVendorProperties[ event.propertyName ] || event.propertyName;\n\n // remove property that has completed transitioning\n delete _transition.ingProperties[ propertyName ];\n // check if any properties are still transitioning\n if ( isEmptyObj( _transition.ingProperties ) ) {\n // all properties have completed transitioning\n this.disableTransition();\n }\n // clean style\n if ( propertyName in _transition.clean ) {\n // clean up style\n this.element.style[ event.propertyName ] = '';\n delete _transition.clean[ propertyName ];\n }\n // trigger onTransitionEnd callback\n if ( propertyName in _transition.onEnd ) {\n var onTransitionEnd = _transition.onEnd[ propertyName ];\n onTransitionEnd.call( this );\n delete _transition.onEnd[ propertyName ];\n }\n\n this.emitEvent( 'transitionEnd', [ this ] );\n};\n\nproto.disableTransition = function() {\n this.removeTransitionStyles();\n this.element.removeEventListener( transitionEndEvent, this, false );\n this.isTransitioning = false;\n};\n\n/**\n * removes style property from element\n * @param {Object} style\n**/\nproto._removeStyles = function( style ) {\n // clean up transition styles\n var cleanStyle = {};\n for ( var prop in style ) {\n cleanStyle[ prop ] = '';\n }\n this.css( cleanStyle );\n};\n\nvar cleanTransitionStyle = {\n transitionProperty: '',\n transitionDuration: '',\n transitionDelay: ''\n};\n\nproto.removeTransitionStyles = function() {\n // remove transition\n this.css( cleanTransitionStyle );\n};\n\n// ----- stagger ----- //\n\nproto.stagger = function( delay ) {\n delay = isNaN( delay ) ? 0 : delay;\n this.staggerDelay = delay + 'ms';\n};\n\n// ----- show/hide/remove ----- //\n\n// remove element from DOM\nproto.removeElem = function() {\n this.element.parentNode.removeChild( this.element );\n // remove display: none\n this.css({ display: '' });\n this.emitEvent( 'remove', [ this ] );\n};\n\nproto.remove = function() {\n // just remove element if no transition support or no transition\n if ( !transitionProperty || !parseFloat( this.layout.options.transitionDuration ) ) {\n this.removeElem();\n return;\n }\n\n // start transition\n this.once( 'transitionEnd', function() {\n this.removeElem();\n });\n this.hide();\n};\n\nproto.reveal = function() {\n delete this.isHidden;\n // remove display: none\n this.css({ display: '' });\n\n var options = this.layout.options;\n\n var onTransitionEnd = {};\n var transitionEndProperty = this.getHideRevealTransitionEndProperty('visibleStyle');\n onTransitionEnd[ transitionEndProperty ] = this.onRevealTransitionEnd;\n\n this.transition({\n from: options.hiddenStyle,\n to: options.visibleStyle,\n isCleaning: true,\n onTransitionEnd: onTransitionEnd\n });\n};\n\nproto.onRevealTransitionEnd = function() {\n // check if still visible\n // during transition, item may have been hidden\n if ( !this.isHidden ) {\n this.emitEvent('reveal');\n }\n};\n\n/**\n * get style property use for hide/reveal transition end\n * @param {String} styleProperty - hiddenStyle/visibleStyle\n * @returns {String}\n */\nproto.getHideRevealTransitionEndProperty = function( styleProperty ) {\n var optionStyle = this.layout.options[ styleProperty ];\n // use opacity\n if ( optionStyle.opacity ) {\n return 'opacity';\n }\n // get first property\n for ( var prop in optionStyle ) {\n return prop;\n }\n};\n\nproto.hide = function() {\n // set flag\n this.isHidden = true;\n // remove display: none\n this.css({ display: '' });\n\n var options = this.layout.options;\n\n var onTransitionEnd = {};\n var transitionEndProperty = this.getHideRevealTransitionEndProperty('hiddenStyle');\n onTransitionEnd[ transitionEndProperty ] = this.onHideTransitionEnd;\n\n this.transition({\n from: options.visibleStyle,\n to: options.hiddenStyle,\n // keep hidden stuff hidden\n isCleaning: true,\n onTransitionEnd: onTransitionEnd\n });\n};\n\nproto.onHideTransitionEnd = function() {\n // check if still hidden\n // during transition, item may have been un-hidden\n if ( this.isHidden ) {\n this.css({ display: 'none' });\n this.emitEvent('hide');\n }\n};\n\nproto.destroy = function() {\n this.css({\n position: '',\n left: '',\n right: '',\n top: '',\n bottom: '',\n transition: '',\n transform: ''\n });\n};\n\nreturn Item;\n\n}));\n","/*!\n * Outlayer v2.1.1\n * the brains and guts of a layout library\n * MIT license\n */\n\n( function( window, factory ) {\n 'use strict';\n // universal module definition\n /* jshint strict: false */ /* globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size',\n 'fizzy-ui-utils/utils',\n './item'\n ],\n function( EvEmitter, getSize, utils, Item ) {\n return factory( window, EvEmitter, getSize, utils, Item);\n }\n );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('get-size'),\n require('fizzy-ui-utils'),\n require('./item')\n );\n } else {\n // browser global\n window.Outlayer = factory(\n window,\n window.EvEmitter,\n window.getSize,\n window.fizzyUIUtils,\n window.Outlayer.Item\n );\n }\n\n}( window, function factory( window, EvEmitter, getSize, utils, Item ) {\n'use strict';\n\n// ----- vars ----- //\n\nvar console = window.console;\nvar jQuery = window.jQuery;\nvar noop = function() {};\n\n// -------------------------- Outlayer -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Outlayer intances\nvar instances = {};\n\n\n/**\n * @param {Element, String} element\n * @param {Object} options\n * @constructor\n */\nfunction Outlayer( element, options ) {\n var queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) {\n console.error( 'Bad element for ' + this.constructor.namespace +\n ': ' + ( queryElement || element ) );\n }\n return;\n }\n this.element = queryElement;\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n\n // options\n this.options = utils.extend( {}, this.constructor.defaults );\n this.option( options );\n\n // add id for Outlayer.getFromElement\n var id = ++GUID;\n this.element.outlayerGUID = id; // expando\n instances[ id ] = this; // associate via id\n\n // kick it off\n this._create();\n\n var isInitLayout = this._getOption('initLayout');\n if ( isInitLayout ) {\n this.layout();\n }\n}\n\n// settings are for internal use only\nOutlayer.namespace = 'outlayer';\nOutlayer.Item = Item;\n\n// default options\nOutlayer.defaults = {\n containerStyle: {\n position: 'relative'\n },\n initLayout: true,\n originLeft: true,\n originTop: true,\n resize: true,\n resizeContainer: true,\n // item options\n transitionDuration: '0.4s',\n hiddenStyle: {\n opacity: 0,\n transform: 'scale(0.001)'\n },\n visibleStyle: {\n opacity: 1,\n transform: 'scale(1)'\n }\n};\n\nvar proto = Outlayer.prototype;\n// inherit EvEmitter\nutils.extend( proto, EvEmitter.prototype );\n\n/**\n * set options\n * @param {Object} opts\n */\nproto.option = function( opts ) {\n utils.extend( this.options, opts );\n};\n\n/**\n * get backwards compatible option value, check old name\n */\nproto._getOption = function( option ) {\n var oldOption = this.constructor.compatOptions[ option ];\n return oldOption && this.options[ oldOption ] !== undefined ?\n this.options[ oldOption ] : this.options[ option ];\n};\n\nOutlayer.compatOptions = {\n // currentName: oldName\n initLayout: 'isInitLayout',\n horizontal: 'isHorizontal',\n layoutInstant: 'isLayoutInstant',\n originLeft: 'isOriginLeft',\n originTop: 'isOriginTop',\n resize: 'isResizeBound',\n resizeContainer: 'isResizingContainer'\n};\n\nproto._create = function() {\n // get items from children\n this.reloadItems();\n // elements that affect layout, but are not laid out\n this.stamps = [];\n this.stamp( this.options.stamp );\n // set container style\n utils.extend( this.element.style, this.options.containerStyle );\n\n // bind resize method\n var canBindResize = this._getOption('resize');\n if ( canBindResize ) {\n this.bindResize();\n }\n};\n\n// goes through all children again and gets bricks in proper order\nproto.reloadItems = function() {\n // collection of item elements\n this.items = this._itemize( this.element.children );\n};\n\n\n/**\n * turn elements into Outlayer.Items to be used in layout\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - collection of new Outlayer Items\n */\nproto._itemize = function( elems ) {\n\n var itemElems = this._filterFindItemElements( elems );\n var Item = this.constructor.Item;\n\n // create new Outlayer Items for collection\n var items = [];\n for ( var i=0; i < itemElems.length; i++ ) {\n var elem = itemElems[i];\n var item = new Item( elem, this );\n items.push( item );\n }\n\n return items;\n};\n\n/**\n * get item elements to be used in layout\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - item elements\n */\nproto._filterFindItemElements = function( elems ) {\n return utils.filterFindElements( elems, this.options.itemSelector );\n};\n\n/**\n * getter method for getting item elements\n * @returns {Array} elems - collection of item elements\n */\nproto.getItemElements = function() {\n return this.items.map( function( item ) {\n return item.element;\n });\n};\n\n// ----- init & layout ----- //\n\n/**\n * lays out all items\n */\nproto.layout = function() {\n this._resetLayout();\n this._manageStamps();\n\n // don't animate first layout\n var layoutInstant = this._getOption('layoutInstant');\n var isInstant = layoutInstant !== undefined ?\n layoutInstant : !this._isLayoutInited;\n this.layoutItems( this.items, isInstant );\n\n // flag for initalized\n this._isLayoutInited = true;\n};\n\n// _init is alias for layout\nproto._init = proto.layout;\n\n/**\n * logic before any new layout\n */\nproto._resetLayout = function() {\n this.getSize();\n};\n\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\n/**\n * get measurement from option, for columnWidth, rowHeight, gutter\n * if option is String -> get element from selector string, & get size of element\n * if option is Element -> get size of element\n * else use option as a number\n *\n * @param {String} measurement\n * @param {String} size - width or height\n * @private\n */\nproto._getMeasurement = function( measurement, size ) {\n var option = this.options[ measurement ];\n var elem;\n if ( !option ) {\n // default to 0\n this[ measurement ] = 0;\n } else {\n // use option as an element\n if ( typeof option == 'string' ) {\n elem = this.element.querySelector( option );\n } else if ( option instanceof HTMLElement ) {\n elem = option;\n }\n // use size of element, if element\n this[ measurement ] = elem ? getSize( elem )[ size ] : option;\n }\n};\n\n/**\n * layout a collection of item elements\n * @api public\n */\nproto.layoutItems = function( items, isInstant ) {\n items = this._getItemsForLayout( items );\n\n this._layoutItems( items, isInstant );\n\n this._postLayout();\n};\n\n/**\n * get the items to be laid out\n * you may want to skip over some items\n * @param {Array} items\n * @returns {Array} items\n */\nproto._getItemsForLayout = function( items ) {\n return items.filter( function( item ) {\n return !item.isIgnored;\n });\n};\n\n/**\n * layout items\n * @param {Array} items\n * @param {Boolean} isInstant\n */\nproto._layoutItems = function( items, isInstant ) {\n this._emitCompleteOnItems( 'layout', items );\n\n if ( !items || !items.length ) {\n // no items, emit event with empty array\n return;\n }\n\n var queue = [];\n\n items.forEach( function( item ) {\n // get x/y object from method\n var position = this._getItemLayoutPosition( item );\n // enqueue\n position.item = item;\n position.isInstant = isInstant || item.isLayoutInstant;\n queue.push( position );\n }, this );\n\n this._processLayoutQueue( queue );\n};\n\n/**\n * get item layout position\n * @param {Outlayer.Item} item\n * @returns {Object} x and y position\n */\nproto._getItemLayoutPosition = function( /* item */ ) {\n return {\n x: 0,\n y: 0\n };\n};\n\n/**\n * iterate over array and position each item\n * Reason being - separating this logic prevents 'layout invalidation'\n * thx @paul_irish\n * @param {Array} queue\n */\nproto._processLayoutQueue = function( queue ) {\n this.updateStagger();\n queue.forEach( function( obj, i ) {\n this._positionItem( obj.item, obj.x, obj.y, obj.isInstant, i );\n }, this );\n};\n\n// set stagger from option in milliseconds number\nproto.updateStagger = function() {\n var stagger = this.options.stagger;\n if ( stagger === null || stagger === undefined ) {\n this.stagger = 0;\n return;\n }\n this.stagger = getMilliseconds( stagger );\n return this.stagger;\n};\n\n/**\n * Sets position of item in DOM\n * @param {Outlayer.Item} item\n * @param {Number} x - horizontal position\n * @param {Number} y - vertical position\n * @param {Boolean} isInstant - disables transitions\n */\nproto._positionItem = function( item, x, y, isInstant, i ) {\n if ( isInstant ) {\n // if not transition, just set CSS\n item.goTo( x, y );\n } else {\n item.stagger( i * this.stagger );\n item.moveTo( x, y );\n }\n};\n\n/**\n * Any logic you want to do after each layout,\n * i.e. size the container\n */\nproto._postLayout = function() {\n this.resizeContainer();\n};\n\nproto.resizeContainer = function() {\n var isResizingContainer = this._getOption('resizeContainer');\n if ( !isResizingContainer ) {\n return;\n }\n var size = this._getContainerSize();\n if ( size ) {\n this._setContainerMeasure( size.width, true );\n this._setContainerMeasure( size.height, false );\n }\n};\n\n/**\n * Sets width or height of container if returned\n * @returns {Object} size\n * @param {Number} width\n * @param {Number} height\n */\nproto._getContainerSize = noop;\n\n/**\n * @param {Number} measure - size of width or height\n * @param {Boolean} isWidth\n */\nproto._setContainerMeasure = function( measure, isWidth ) {\n if ( measure === undefined ) {\n return;\n }\n\n var elemSize = this.size;\n // add padding and border width if border box\n if ( elemSize.isBorderBox ) {\n measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight +\n elemSize.borderLeftWidth + elemSize.borderRightWidth :\n elemSize.paddingBottom + elemSize.paddingTop +\n elemSize.borderTopWidth + elemSize.borderBottomWidth;\n }\n\n measure = Math.max( measure, 0 );\n this.element.style[ isWidth ? 'width' : 'height' ] = measure + 'px';\n};\n\n/**\n * emit eventComplete on a collection of items events\n * @param {String} eventName\n * @param {Array} items - Outlayer.Items\n */\nproto._emitCompleteOnItems = function( eventName, items ) {\n var _this = this;\n function onComplete() {\n _this.dispatchEvent( eventName + 'Complete', null, [ items ] );\n }\n\n var count = items.length;\n if ( !items || !count ) {\n onComplete();\n return;\n }\n\n var doneCount = 0;\n function tick() {\n doneCount++;\n if ( doneCount == count ) {\n onComplete();\n }\n }\n\n // bind callback\n items.forEach( function( item ) {\n item.once( eventName, tick );\n });\n};\n\n/**\n * emits events via EvEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n // add original event to arguments\n var emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n\n if ( jQuery ) {\n // set this.$element\n this.$element = this.$element || jQuery( this.element );\n if ( event ) {\n // create jQuery event\n var $event = jQuery.Event( event );\n $event.type = type;\n this.$element.trigger( $event, args );\n } else {\n // just trigger with type if no event available\n this.$element.trigger( type, args );\n }\n }\n};\n\n// -------------------------- ignore & stamps -------------------------- //\n\n\n/**\n * keep item in collection, but do not lay it out\n * ignored items do not get skipped in layout\n * @param {Element} elem\n */\nproto.ignore = function( elem ) {\n var item = this.getItem( elem );\n if ( item ) {\n item.isIgnored = true;\n }\n};\n\n/**\n * return item to layout collection\n * @param {Element} elem\n */\nproto.unignore = function( elem ) {\n var item = this.getItem( elem );\n if ( item ) {\n delete item.isIgnored;\n }\n};\n\n/**\n * adds elements to stamps\n * @param {NodeList, Array, Element, or String} elems\n */\nproto.stamp = function( elems ) {\n elems = this._find( elems );\n if ( !elems ) {\n return;\n }\n\n this.stamps = this.stamps.concat( elems );\n // ignore\n elems.forEach( this.ignore, this );\n};\n\n/**\n * removes elements to stamps\n * @param {NodeList, Array, or Element} elems\n */\nproto.unstamp = function( elems ) {\n elems = this._find( elems );\n if ( !elems ){\n return;\n }\n\n elems.forEach( function( elem ) {\n // filter out removed stamp elements\n utils.removeFrom( this.stamps, elem );\n this.unignore( elem );\n }, this );\n};\n\n/**\n * finds child elements\n * @param {NodeList, Array, Element, or String} elems\n * @returns {Array} elems\n */\nproto._find = function( elems ) {\n if ( !elems ) {\n return;\n }\n // if string, use argument as selector string\n if ( typeof elems == 'string' ) {\n elems = this.element.querySelectorAll( elems );\n }\n elems = utils.makeArray( elems );\n return elems;\n};\n\nproto._manageStamps = function() {\n if ( !this.stamps || !this.stamps.length ) {\n return;\n }\n\n this._getBoundingRect();\n\n this.stamps.forEach( this._manageStamp, this );\n};\n\n// update boundingLeft / Top\nproto._getBoundingRect = function() {\n // get bounding rect for container element\n var boundingRect = this.element.getBoundingClientRect();\n var size = this.size;\n this._boundingRect = {\n left: boundingRect.left + size.paddingLeft + size.borderLeftWidth,\n top: boundingRect.top + size.paddingTop + size.borderTopWidth,\n right: boundingRect.right - ( size.paddingRight + size.borderRightWidth ),\n bottom: boundingRect.bottom - ( size.paddingBottom + size.borderBottomWidth )\n };\n};\n\n/**\n * @param {Element} stamp\n**/\nproto._manageStamp = noop;\n\n/**\n * get x/y position of element relative to container element\n * @param {Element} elem\n * @returns {Object} offset - has left, top, right, bottom\n */\nproto._getElementOffset = function( elem ) {\n var boundingRect = elem.getBoundingClientRect();\n var thisRect = this._boundingRect;\n var size = getSize( elem );\n var offset = {\n left: boundingRect.left - thisRect.left - size.marginLeft,\n top: boundingRect.top - thisRect.top - size.marginTop,\n right: thisRect.right - boundingRect.right - size.marginRight,\n bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom\n };\n return offset;\n};\n\n// -------------------------- resize -------------------------- //\n\n// enable event handlers for listeners\n// i.e. resize -> onresize\nproto.handleEvent = utils.handleEvent;\n\n/**\n * Bind layout to window resizing\n */\nproto.bindResize = function() {\n window.addEventListener( 'resize', this );\n this.isResizeBound = true;\n};\n\n/**\n * Unbind layout to window resizing\n */\nproto.unbindResize = function() {\n window.removeEventListener( 'resize', this );\n this.isResizeBound = false;\n};\n\nproto.onresize = function() {\n this.resize();\n};\n\nutils.debounceMethod( Outlayer, 'onresize', 100 );\n\nproto.resize = function() {\n // don't trigger if size did not change\n // or if resize was unbound. See #9\n if ( !this.isResizeBound || !this.needsResizeLayout() ) {\n return;\n }\n\n this.layout();\n};\n\n/**\n * check if layout is needed post layout\n * @returns Boolean\n */\nproto.needsResizeLayout = function() {\n var size = getSize( this.element );\n // check that this.size and size are there\n // IE8 triggers resize on body size change, so they might not be\n var hasSizes = this.size && size;\n return hasSizes && size.innerWidth !== this.size.innerWidth;\n};\n\n// -------------------------- methods -------------------------- //\n\n/**\n * add items to Outlayer instance\n * @param {Array or NodeList or Element} elems\n * @returns {Array} items - Outlayer.Items\n**/\nproto.addItems = function( elems ) {\n var items = this._itemize( elems );\n // add items to collection\n if ( items.length ) {\n this.items = this.items.concat( items );\n }\n return items;\n};\n\n/**\n * Layout newly-appended item elements\n * @param {Array or NodeList or Element} elems\n */\nproto.appended = function( elems ) {\n var items = this.addItems( elems );\n if ( !items.length ) {\n return;\n }\n // layout and reveal just the new items\n this.layoutItems( items, true );\n this.reveal( items );\n};\n\n/**\n * Layout prepended elements\n * @param {Array or NodeList or Element} elems\n */\nproto.prepended = function( elems ) {\n var items = this._itemize( elems );\n if ( !items.length ) {\n return;\n }\n // add items to beginning of collection\n var previousItems = this.items.slice(0);\n this.items = items.concat( previousItems );\n // start new layout\n this._resetLayout();\n this._manageStamps();\n // layout new stuff without transition\n this.layoutItems( items, true );\n this.reveal( items );\n // layout previous items\n this.layoutItems( previousItems );\n};\n\n/**\n * reveal a collection of items\n * @param {Array of Outlayer.Items} items\n */\nproto.reveal = function( items ) {\n this._emitCompleteOnItems( 'reveal', items );\n if ( !items || !items.length ) {\n return;\n }\n var stagger = this.updateStagger();\n items.forEach( function( item, i ) {\n item.stagger( i * stagger );\n item.reveal();\n });\n};\n\n/**\n * hide a collection of items\n * @param {Array of Outlayer.Items} items\n */\nproto.hide = function( items ) {\n this._emitCompleteOnItems( 'hide', items );\n if ( !items || !items.length ) {\n return;\n }\n var stagger = this.updateStagger();\n items.forEach( function( item, i ) {\n item.stagger( i * stagger );\n item.hide();\n });\n};\n\n/**\n * reveal item elements\n * @param {Array}, {Element}, {NodeList} items\n */\nproto.revealItemElements = function( elems ) {\n var items = this.getItems( elems );\n this.reveal( items );\n};\n\n/**\n * hide item elements\n * @param {Array}, {Element}, {NodeList} items\n */\nproto.hideItemElements = function( elems ) {\n var items = this.getItems( elems );\n this.hide( items );\n};\n\n/**\n * get Outlayer.Item, given an Element\n * @param {Element} elem\n * @param {Function} callback\n * @returns {Outlayer.Item} item\n */\nproto.getItem = function( elem ) {\n // loop through items to get the one that matches\n for ( var i=0; i < this.items.length; i++ ) {\n var item = this.items[i];\n if ( item.element == elem ) {\n // return item\n return item;\n }\n }\n};\n\n/**\n * get collection of Outlayer.Items, given Elements\n * @param {Array} elems\n * @returns {Array} items - Outlayer.Items\n */\nproto.getItems = function( elems ) {\n elems = utils.makeArray( elems );\n var items = [];\n elems.forEach( function( elem ) {\n var item = this.getItem( elem );\n if ( item ) {\n items.push( item );\n }\n }, this );\n\n return items;\n};\n\n/**\n * remove element(s) from instance and DOM\n * @param {Array or NodeList or Element} elems\n */\nproto.remove = function( elems ) {\n var removeItems = this.getItems( elems );\n\n this._emitCompleteOnItems( 'remove', removeItems );\n\n // bail if no items to remove\n if ( !removeItems || !removeItems.length ) {\n return;\n }\n\n removeItems.forEach( function( item ) {\n item.remove();\n // remove item from collection\n utils.removeFrom( this.items, item );\n }, this );\n};\n\n// ----- destroy ----- //\n\n// remove and disable Outlayer instance\nproto.destroy = function() {\n // clean up dynamic styles\n var style = this.element.style;\n style.height = '';\n style.position = '';\n style.width = '';\n // destroy items\n this.items.forEach( function( item ) {\n item.destroy();\n });\n\n this.unbindResize();\n\n var id = this.element.outlayerGUID;\n delete instances[ id ]; // remove reference to instance by id\n delete this.element.outlayerGUID;\n // remove data for jQuery\n if ( jQuery ) {\n jQuery.removeData( this.element, this.constructor.namespace );\n }\n\n};\n\n// -------------------------- data -------------------------- //\n\n/**\n * get Outlayer instance from element\n * @param {Element} elem\n * @returns {Outlayer}\n */\nOutlayer.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n var id = elem && elem.outlayerGUID;\n return id && instances[ id ];\n};\n\n\n// -------------------------- create Outlayer class -------------------------- //\n\n/**\n * create a layout class\n * @param {String} namespace\n */\nOutlayer.create = function( namespace, options ) {\n // sub-class Outlayer\n var Layout = subclass( Outlayer );\n // apply new options and compatOptions\n Layout.defaults = utils.extend( {}, Outlayer.defaults );\n utils.extend( Layout.defaults, options );\n Layout.compatOptions = utils.extend( {}, Outlayer.compatOptions );\n\n Layout.namespace = namespace;\n\n Layout.data = Outlayer.data;\n\n // sub-class Item\n Layout.Item = subclass( Item );\n\n // -------------------------- declarative -------------------------- //\n\n utils.htmlInit( Layout, namespace );\n\n // -------------------------- jQuery bridge -------------------------- //\n\n // make into jQuery plugin\n if ( jQuery && jQuery.bridget ) {\n jQuery.bridget( namespace, Layout );\n }\n\n return Layout;\n};\n\nfunction subclass( Parent ) {\n function SubClass() {\n Parent.apply( this, arguments );\n }\n\n SubClass.prototype = Object.create( Parent.prototype );\n SubClass.prototype.constructor = SubClass;\n\n return SubClass;\n}\n\n// ----- helpers ----- //\n\n// how many milliseconds are in each unit\nvar msUnits = {\n ms: 1,\n s: 1000\n};\n\n// munge time-like parameter into millisecond number\n// '0.4s' -> 40\nfunction getMilliseconds( time ) {\n if ( typeof time == 'number' ) {\n return time;\n }\n var matches = time.match( /(^\\d*\\.?\\d*)(\\w*)/ );\n var num = matches && matches[1];\n var unit = matches && matches[2];\n if ( !num.length ) {\n return 0;\n }\n num = parseFloat( num );\n var mult = msUnits[ unit ] || 1;\n return num * mult;\n}\n\n// ----- fin ----- //\n\n// back in global\nOutlayer.Item = Item;\n\nreturn Outlayer;\n\n}));\n","/**\n * what-input - A global utility for tracking the current input method (mouse, keyboard or touch).\n * @version v5.2.12\n * @link https://github.com/ten1seven/what-input\n * @license MIT\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"whatInput\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"whatInput\"] = factory();\n\telse\n\t\troot[\"whatInput\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\n\tmodule.exports = function () {\n\t /*\n\t * bail out if there is no document or window\n\t * (i.e. in a node/non-DOM environment)\n\t *\n\t * Return a stubbed API instead\n\t */\n\t if (typeof document === 'undefined' || typeof window === 'undefined') {\n\t return {\n\t // always return \"initial\" because no interaction will ever be detected\n\t ask: function ask() {\n\t return 'initial';\n\t },\n\n\t // always return null\n\t element: function element() {\n\t return null;\n\t },\n\n\t // no-op\n\t ignoreKeys: function ignoreKeys() {},\n\n\t // no-op\n\t specificKeys: function specificKeys() {},\n\n\t // no-op\n\t registerOnChange: function registerOnChange() {},\n\n\t // no-op\n\t unRegisterOnChange: function unRegisterOnChange() {}\n\t };\n\t }\n\n\t /*\n\t * variables\n\t */\n\n\t // cache document.documentElement\n\t var docElem = document.documentElement;\n\n\t // currently focused dom element\n\t var currentElement = null;\n\n\t // last used input type\n\t var currentInput = 'initial';\n\n\t // last used input intent\n\t var currentIntent = currentInput;\n\n\t // UNIX timestamp of current event\n\t var currentTimestamp = Date.now();\n\n\t // check for a `data-whatpersist` attribute on either the `html` or `body` elements, defaults to `true`\n\t var shouldPersist = false;\n\n\t // form input types\n\t var formInputs = ['button', 'input', 'select', 'textarea'];\n\n\t // empty array for holding callback functions\n\t var functionList = [];\n\n\t // list of modifier keys commonly used with the mouse and\n\t // can be safely ignored to prevent false keyboard detection\n\t var ignoreMap = [16, // shift\n\t 17, // control\n\t 18, // alt\n\t 91, // Windows key / left Apple cmd\n\t 93 // Windows menu / right Apple cmd\n\t ];\n\n\t var specificMap = [];\n\n\t // mapping of events to input types\n\t var inputMap = {\n\t keydown: 'keyboard',\n\t keyup: 'keyboard',\n\t mousedown: 'mouse',\n\t mousemove: 'mouse',\n\t MSPointerDown: 'pointer',\n\t MSPointerMove: 'pointer',\n\t pointerdown: 'pointer',\n\t pointermove: 'pointer',\n\t touchstart: 'touch',\n\t touchend: 'touch'\n\n\t // boolean: true if the page is being scrolled\n\t };var isScrolling = false;\n\n\t // store current mouse position\n\t var mousePos = {\n\t x: null,\n\t y: null\n\n\t // map of IE 10 pointer events\n\t };var pointerMap = {\n\t 2: 'touch',\n\t 3: 'touch', // treat pen like touch\n\t 4: 'mouse'\n\n\t // check support for passive event listeners\n\t };var supportsPassive = false;\n\n\t try {\n\t var opts = Object.defineProperty({}, 'passive', {\n\t get: function get() {\n\t supportsPassive = true;\n\t }\n\t });\n\n\t window.addEventListener('test', null, opts);\n\t } catch (e) {}\n\t // fail silently\n\n\n\t /*\n\t * set up\n\t */\n\n\t var setUp = function setUp() {\n\t // add correct mouse wheel event mapping to `inputMap`\n\t inputMap[detectWheel()] = 'mouse';\n\n\t addListeners();\n\t };\n\n\t /*\n\t * events\n\t */\n\n\t var addListeners = function addListeners() {\n\t // `pointermove`, `MSPointerMove`, `mousemove` and mouse wheel event binding\n\t // can only demonstrate potential, but not actual, interaction\n\t // and are treated separately\n\t var options = supportsPassive ? { passive: true, capture: true } : true;\n\n\t document.addEventListener('DOMContentLoaded', setPersist, true);\n\n\t // pointer events (mouse, pen, touch)\n\t if (window.PointerEvent) {\n\t window.addEventListener('pointerdown', setInput, true);\n\t window.addEventListener('pointermove', setIntent, true);\n\t } else if (window.MSPointerEvent) {\n\t window.addEventListener('MSPointerDown', setInput, true);\n\t window.addEventListener('MSPointerMove', setIntent, true);\n\t } else {\n\t // mouse events\n\t window.addEventListener('mousedown', setInput, true);\n\t window.addEventListener('mousemove', setIntent, true);\n\n\t // touch events\n\t if ('ontouchstart' in window) {\n\t window.addEventListener('touchstart', setInput, options);\n\t window.addEventListener('touchend', setInput, true);\n\t }\n\t }\n\n\t // mouse wheel\n\t window.addEventListener(detectWheel(), setIntent, options);\n\n\t // keyboard events\n\t window.addEventListener('keydown', setInput, true);\n\t window.addEventListener('keyup', setInput, true);\n\n\t // focus events\n\t window.addEventListener('focusin', setElement, true);\n\t window.addEventListener('focusout', clearElement, true);\n\t };\n\n\t // checks if input persistence should happen and\n\t // get saved state from session storage if true (defaults to `false`)\n\t var setPersist = function setPersist() {\n\t shouldPersist = !(docElem.getAttribute('data-whatpersist') === 'false' || document.body.getAttribute('data-whatpersist') === 'false');\n\n\t if (shouldPersist) {\n\t // check for session variables and use if available\n\t try {\n\t if (window.sessionStorage.getItem('what-input')) {\n\t currentInput = window.sessionStorage.getItem('what-input');\n\t }\n\n\t if (window.sessionStorage.getItem('what-intent')) {\n\t currentIntent = window.sessionStorage.getItem('what-intent');\n\t }\n\t } catch (e) {\n\t // fail silently\n\t }\n\t }\n\n\t // always run these so at least `initial` state is set\n\t doUpdate('input');\n\t doUpdate('intent');\n\t };\n\n\t // checks conditions before updating new input\n\t var setInput = function setInput(event) {\n\t var eventKey = event.which;\n\t var value = inputMap[event.type];\n\n\t if (value === 'pointer') {\n\t value = pointerType(event);\n\t }\n\n\t var ignoreMatch = !specificMap.length && ignoreMap.indexOf(eventKey) === -1;\n\n\t var specificMatch = specificMap.length && specificMap.indexOf(eventKey) !== -1;\n\n\t var shouldUpdate = value === 'keyboard' && eventKey && (ignoreMatch || specificMatch) || value === 'mouse' || value === 'touch';\n\n\t // prevent touch detection from being overridden by event execution order\n\t if (validateTouch(value)) {\n\t shouldUpdate = false;\n\t }\n\n\t if (shouldUpdate && currentInput !== value) {\n\t currentInput = value;\n\n\t persistInput('input', currentInput);\n\t doUpdate('input');\n\t }\n\n\t if (shouldUpdate && currentIntent !== value) {\n\t // preserve intent for keyboard interaction with form fields\n\t var activeElem = document.activeElement;\n\t var notFormInput = activeElem && activeElem.nodeName && (formInputs.indexOf(activeElem.nodeName.toLowerCase()) === -1 || activeElem.nodeName.toLowerCase() === 'button' && !checkClosest(activeElem, 'form'));\n\n\t if (notFormInput) {\n\t currentIntent = value;\n\n\t persistInput('intent', currentIntent);\n\t doUpdate('intent');\n\t }\n\t }\n\t };\n\n\t // updates the doc and `inputTypes` array with new input\n\t var doUpdate = function doUpdate(which) {\n\t docElem.setAttribute('data-what' + which, which === 'input' ? currentInput : currentIntent);\n\n\t fireFunctions(which);\n\t };\n\n\t // updates input intent for `mousemove` and `pointermove`\n\t var setIntent = function setIntent(event) {\n\t var value = inputMap[event.type];\n\n\t if (value === 'pointer') {\n\t value = pointerType(event);\n\t }\n\n\t // test to see if `mousemove` happened relative to the screen to detect scrolling versus mousemove\n\t detectScrolling(event);\n\n\t // only execute if scrolling isn't happening\n\t if ((!isScrolling && !validateTouch(value) || isScrolling && event.type === 'wheel' || event.type === 'mousewheel' || event.type === 'DOMMouseScroll') && currentIntent !== value) {\n\t currentIntent = value;\n\n\t persistInput('intent', currentIntent);\n\t doUpdate('intent');\n\t }\n\t };\n\n\t var setElement = function setElement(event) {\n\t if (!event.target.nodeName) {\n\t // If nodeName is undefined, clear the element\n\t // This can happen if click inside an element.\n\t clearElement();\n\t return;\n\t }\n\n\t currentElement = event.target.nodeName.toLowerCase();\n\t docElem.setAttribute('data-whatelement', currentElement);\n\n\t if (event.target.classList && event.target.classList.length) {\n\t docElem.setAttribute('data-whatclasses', event.target.classList.toString().replace(' ', ','));\n\t }\n\t };\n\n\t var clearElement = function clearElement() {\n\t currentElement = null;\n\n\t docElem.removeAttribute('data-whatelement');\n\t docElem.removeAttribute('data-whatclasses');\n\t };\n\n\t var persistInput = function persistInput(which, value) {\n\t if (shouldPersist) {\n\t try {\n\t window.sessionStorage.setItem('what-' + which, value);\n\t } catch (e) {\n\t // fail silently\n\t }\n\t }\n\t };\n\n\t /*\n\t * utilities\n\t */\n\n\t var pointerType = function pointerType(event) {\n\t if (typeof event.pointerType === 'number') {\n\t return pointerMap[event.pointerType];\n\t } else {\n\t // treat pen like touch\n\t return event.pointerType === 'pen' ? 'touch' : event.pointerType;\n\t }\n\t };\n\n\t // prevent touch detection from being overridden by event execution order\n\t var validateTouch = function validateTouch(value) {\n\t var timestamp = Date.now();\n\n\t var touchIsValid = value === 'mouse' && currentInput === 'touch' && timestamp - currentTimestamp < 200;\n\n\t currentTimestamp = timestamp;\n\n\t return touchIsValid;\n\t };\n\n\t // detect version of mouse wheel event to use\n\t // via https://developer.mozilla.org/en-US/docs/Web/API/Element/wheel_event\n\t var detectWheel = function detectWheel() {\n\t var wheelType = null;\n\n\t // Modern browsers support \"wheel\"\n\t if ('onwheel' in document.createElement('div')) {\n\t wheelType = 'wheel';\n\t } else {\n\t // Webkit and IE support at least \"mousewheel\"\n\t // or assume that remaining browsers are older Firefox\n\t wheelType = document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\n\t }\n\n\t return wheelType;\n\t };\n\n\t // runs callback functions\n\t var fireFunctions = function fireFunctions(type) {\n\t for (var i = 0, len = functionList.length; i < len; i++) {\n\t if (functionList[i].type === type) {\n\t functionList[i].fn.call(undefined, type === 'input' ? currentInput : currentIntent);\n\t }\n\t }\n\t };\n\n\t // finds matching element in an object\n\t var objPos = function objPos(match) {\n\t for (var i = 0, len = functionList.length; i < len; i++) {\n\t if (functionList[i].fn === match) {\n\t return i;\n\t }\n\t }\n\t };\n\n\t var detectScrolling = function detectScrolling(event) {\n\t if (mousePos.x !== event.screenX || mousePos.y !== event.screenY) {\n\t isScrolling = false;\n\n\t mousePos.x = event.screenX;\n\t mousePos.y = event.screenY;\n\t } else {\n\t isScrolling = true;\n\t }\n\t };\n\n\t // manual version of `closest()`\n\t var checkClosest = function checkClosest(elem, tag) {\n\t var ElementPrototype = window.Element.prototype;\n\n\t if (!ElementPrototype.matches) {\n\t ElementPrototype.matches = ElementPrototype.msMatchesSelector || ElementPrototype.webkitMatchesSelector;\n\t }\n\n\t if (!ElementPrototype.closest) {\n\t do {\n\t if (elem.matches(tag)) {\n\t return elem;\n\t }\n\n\t elem = elem.parentElement || elem.parentNode;\n\t } while (elem !== null && elem.nodeType === 1);\n\n\t return null;\n\t } else {\n\t return elem.closest(tag);\n\t }\n\t };\n\n\t /*\n\t * init\n\t */\n\n\t // don't start script unless browser cuts the mustard\n\t // (also passes if polyfills are used)\n\t if ('addEventListener' in window && Array.prototype.indexOf) {\n\t setUp();\n\t }\n\n\t /*\n\t * api\n\t */\n\n\t return {\n\t // returns string: the current input type\n\t // opt: 'intent'|'input'\n\t // 'input' (default): returns the same value as the `data-whatinput` attribute\n\t // 'intent': includes `data-whatintent` value if it's different than `data-whatinput`\n\t ask: function ask(opt) {\n\t return opt === 'intent' ? currentIntent : currentInput;\n\t },\n\n\t // returns string: the currently focused element or null\n\t element: function element() {\n\t return currentElement;\n\t },\n\n\t // overwrites ignored keys with provided array\n\t ignoreKeys: function ignoreKeys(arr) {\n\t ignoreMap = arr;\n\t },\n\n\t // overwrites specific char keys to update on\n\t specificKeys: function specificKeys(arr) {\n\t specificMap = arr;\n\t },\n\n\t // attach functions to input and intent \"events\"\n\t // funct: function to fire on change\n\t // eventType: 'input'|'intent'\n\t registerOnChange: function registerOnChange(fn, eventType) {\n\t functionList.push({\n\t fn: fn,\n\t type: eventType || 'input'\n\t });\n\t },\n\n\t unRegisterOnChange: function unRegisterOnChange(fn) {\n\t var position = objPos(fn);\n\n\t if (position || position === 0) {\n\t functionList.splice(position, 1);\n\t }\n\t },\n\n\t clearStorage: function clearStorage() {\n\t window.sessionStorage.clear();\n\t }\n\t };\n\t}();\n\n/***/ })\n/******/ ])\n});\n;","module.exports = jQuery;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import $ from 'jquery';\n\n// Core Foundation Utilities, utilized in a number of places.\n\n /**\n * Returns a boolean for RTL support\n */\nfunction rtl() {\n return $('html').attr('dir') === 'rtl';\n}\n\n/**\n * returns a random base-36 uid with namespacing\n * @function\n * @param {Number} length - number of random base-36 digits desired. Increase for more random strings.\n * @param {String} namespace - name of plugin to be incorporated in uid, optional.\n * @default {String} '' - if no plugin name is provided, nothing is appended to the uid.\n * @returns {String} - unique id\n */\nfunction GetYoDigits(length = 6, namespace){\n let str = '';\n const chars = '0123456789abcdefghijklmnopqrstuvwxyz';\n const charsLength = chars.length;\n for (let i = 0; i < length; i++) {\n str += chars[Math.floor(Math.random() * charsLength)];\n }\n return namespace ? `${str}-${namespace}` : str;\n}\n\n/**\n * Escape a string so it can be used as a regexp pattern\n * @function\n * @see https://stackoverflow.com/a/9310752/4317384\n *\n * @param {String} str - string to escape.\n * @returns {String} - escaped string\n */\nfunction RegExpEscape(str){\n return str.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n}\n\nfunction transitionend($elem){\n var transitions = {\n 'transition': 'transitionend',\n 'WebkitTransition': 'webkitTransitionEnd',\n 'MozTransition': 'transitionend',\n 'OTransition': 'otransitionend'\n };\n var elem = document.createElement('div'),\n end;\n\n for (let transition in transitions){\n if (typeof elem.style[transition] !== 'undefined'){\n end = transitions[transition];\n }\n }\n if (end) {\n return end;\n } else {\n setTimeout(function(){\n $elem.triggerHandler('transitionend', [$elem]);\n }, 1);\n return 'transitionend';\n }\n}\n\n/**\n * Return an event type to listen for window load.\n *\n * If `$elem` is passed, an event will be triggered on `$elem`. If window is already loaded, the event will still be triggered.\n * If `handler` is passed, attach it to the event on `$elem`.\n * Calling `onLoad` without handler allows you to get the event type that will be triggered before attaching the handler by yourself.\n * @function\n *\n * @param {Object} [] $elem - jQuery element on which the event will be triggered if passed.\n * @param {Function} [] handler - function to attach to the event.\n * @returns {String} - event type that should or will be triggered.\n */\nfunction onLoad($elem, handler) {\n const didLoad = document.readyState === 'complete';\n const eventType = (didLoad ? '_didLoad' : 'load') + '.zf.util.onLoad';\n const cb = () => $elem.triggerHandler(eventType);\n\n if ($elem) {\n if (handler) $elem.one(eventType, handler);\n\n if (didLoad)\n setTimeout(cb);\n else\n $(window).one('load', cb);\n }\n\n return eventType;\n}\n\n/**\n * Retuns an handler for the `mouseleave` that ignore disappeared mouses.\n *\n * If the mouse \"disappeared\" from the document (like when going on a browser UI element, See https://git.io/zf-11410),\n * the event is ignored.\n * - If the `ignoreLeaveWindow` is `true`, the event is ignored when the user actually left the window\n * (like by switching to an other window with [Alt]+[Tab]).\n * - If the `ignoreReappear` is `true`, the event will be ignored when the mouse will reappear later on the document\n * outside of the element it left.\n *\n * @function\n *\n * @param {Function} [] handler - handler for the filtered `mouseleave` event to watch.\n * @param {Object} [] options - object of options:\n * - {Boolean} [false] ignoreLeaveWindow - also ignore when the user switched windows.\n * - {Boolean} [false] ignoreReappear - also ignore when the mouse reappeared outside of the element it left.\n * @returns {Function} - filtered handler to use to listen on the `mouseleave` event.\n */\nfunction ignoreMousedisappear(handler, { ignoreLeaveWindow = false, ignoreReappear = false } = {}) {\n return function leaveEventHandler(eLeave, ...rest) {\n const callback = handler.bind(this, eLeave, ...rest);\n\n // The mouse left: call the given callback if the mouse entered elsewhere\n if (eLeave.relatedTarget !== null) {\n return callback();\n }\n\n // Otherwise, check if the mouse actually left the window.\n // In firefox if the user switched between windows, the window sill have the focus by the time\n // the event is triggered. We have to debounce the event to test this case.\n setTimeout(function leaveEventDebouncer() {\n if (!ignoreLeaveWindow && document.hasFocus && !document.hasFocus()) {\n return callback();\n }\n\n // Otherwise, wait for the mouse to reeapear outside of the element,\n if (!ignoreReappear) {\n $(document).one('mouseenter', function reenterEventHandler(eReenter) {\n if (!$(eLeave.currentTarget).has(eReenter.target).length) {\n // Fill where the mouse finally entered.\n eLeave.relatedTarget = eReenter.target;\n callback();\n }\n });\n }\n\n }, 0);\n };\n}\n\n\nexport { rtl, GetYoDigits, RegExpEscape, transitionend, onLoad, ignoreMousedisappear };\n","import $ from 'jquery';\n\n// Default set of media queries\n// const defaultQueries = {\n// 'default' : 'only screen',\n// landscape : 'only screen and (orientation: landscape)',\n// portrait : 'only screen and (orientation: portrait)',\n// retina : 'only screen and (-webkit-min-device-pixel-ratio: 2),' +\n// 'only screen and (min--moz-device-pixel-ratio: 2),' +\n// 'only screen and (-o-min-device-pixel-ratio: 2/1),' +\n// 'only screen and (min-device-pixel-ratio: 2),' +\n// 'only screen and (min-resolution: 192dpi),' +\n// 'only screen and (min-resolution: 2dppx)'\n// };\n\n\n// matchMedia() polyfill - Test a CSS media type/query in JS.\n// Authors & copyright © 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. MIT license\n/* eslint-disable */\nwindow.matchMedia || (window.matchMedia = (function () {\n \"use strict\";\n\n // For browsers that support matchMedium api such as IE 9 and webkit\n var styleMedia = (window.styleMedia || window.media);\n\n // For those that don't support matchMedium\n if (!styleMedia) {\n var style = document.createElement('style'),\n script = document.getElementsByTagName('script')[0],\n info = null;\n\n style.type = 'text/css';\n style.id = 'matchmediajs-test';\n\n if (!script) {\n document.head.appendChild(style);\n } else {\n script.parentNode.insertBefore(style, script);\n }\n\n // 'style.currentStyle' is used by IE <= 8 and 'window.getComputedStyle' for all other browsers\n info = ('getComputedStyle' in window) && window.getComputedStyle(style, null) || style.currentStyle;\n\n styleMedia = {\n matchMedium: function (media) {\n var text = '@media ' + media + '{ #matchmediajs-test { width: 1px; } }';\n\n // 'style.styleSheet' is used by IE <= 8 and 'style.textContent' for all other browsers\n if (style.styleSheet) {\n style.styleSheet.cssText = text;\n } else {\n style.textContent = text;\n }\n\n // Test if media query is true or false\n return info.width === '1px';\n }\n };\n }\n\n return function(media) {\n return {\n matches: styleMedia.matchMedium(media || 'all'),\n media: media || 'all'\n };\n };\n})());\n/* eslint-enable */\n\nvar MediaQuery = {\n queries: [],\n\n current: '',\n\n /**\n * Initializes the media query helper, by extracting the breakpoint list from the CSS and activating the breakpoint watcher.\n * @function\n * @private\n */\n _init() {\n\n // make sure the initialization is only done once when calling _init() several times\n if (this.isInitialized === true) {\n return this;\n } else {\n this.isInitialized = true;\n }\n\n var self = this;\n var $meta = $('meta.foundation-mq');\n if(!$meta.length){\n $('').appendTo(document.head);\n }\n\n var extractedStyles = $('.foundation-mq').css('font-family');\n var namedQueries;\n\n namedQueries = parseStyleToObject(extractedStyles);\n\n self.queries = []; // reset\n\n for (var key in namedQueries) {\n if(namedQueries.hasOwnProperty(key)) {\n self.queries.push({\n name: key,\n value: `only screen and (min-width: ${namedQueries[key]})`\n });\n }\n }\n\n this.current = this._getCurrentSize();\n\n this._watcher();\n },\n\n /**\n * Reinitializes the media query helper.\n * Useful if your CSS breakpoint configuration has just been loaded or has changed since the initialization.\n * @function\n * @private\n */\n _reInit() {\n this.isInitialized = false;\n this._init();\n },\n\n /**\n * Checks if the screen is at least as wide as a breakpoint.\n * @function\n * @param {String} size - Name of the breakpoint to check.\n * @returns {Boolean} `true` if the breakpoint matches, `false` if it's smaller.\n */\n atLeast(size) {\n var query = this.get(size);\n\n if (query) {\n return window.matchMedia(query).matches;\n }\n\n return false;\n },\n\n /**\n * Checks if the screen is within the given breakpoint.\n * If smaller than the breakpoint of larger than its upper limit it returns false.\n * @function\n * @param {String} size - Name of the breakpoint to check.\n * @returns {Boolean} `true` if the breakpoint matches, `false` otherwise.\n */\n only(size) {\n return size === this._getCurrentSize();\n },\n\n /**\n * Checks if the screen is within a breakpoint or smaller.\n * @function\n * @param {String} size - Name of the breakpoint to check.\n * @returns {Boolean} `true` if the breakpoint matches, `false` if it's larger.\n */\n upTo(size) {\n const nextSize = this.next(size);\n\n // If the next breakpoint does not match, the screen is smaller than\n // the upper limit of this breakpoint.\n if (nextSize) {\n return !this.atLeast(nextSize);\n }\n\n // If there is no next breakpoint, the \"size\" breakpoint does not have\n // an upper limit and the screen will always be within it or smaller.\n return true;\n },\n\n /**\n * Checks if the screen matches to a breakpoint.\n * @function\n * @param {String} size - Name of the breakpoint to check, either 'small only' or 'small'. Omitting 'only' falls back to using atLeast() method.\n * @returns {Boolean} `true` if the breakpoint matches, `false` if it does not.\n */\n is(size) {\n const parts = size.trim().split(' ').filter(p => !!p.length);\n const [bpSize, bpModifier = ''] = parts;\n\n // Only the breakpont\n if (bpModifier === 'only') {\n return this.only(bpSize);\n }\n // At least the breakpoint (included)\n if (!bpModifier || bpModifier === 'up') {\n return this.atLeast(bpSize);\n }\n // Up to the breakpoint (included)\n if (bpModifier === 'down') {\n return this.upTo(bpSize);\n }\n\n throw new Error(`\n Invalid breakpoint passed to MediaQuery.is().\n Expected a breakpoint name formatted like \" \", got \"${size}\".\n `);\n },\n\n /**\n * Gets the media query of a breakpoint.\n * @function\n * @param {String} size - Name of the breakpoint to get.\n * @returns {String|null} - The media query of the breakpoint, or `null` if the breakpoint doesn't exist.\n */\n get(size) {\n for (var i in this.queries) {\n if(this.queries.hasOwnProperty(i)) {\n var query = this.queries[i];\n if (size === query.name) return query.value;\n }\n }\n\n return null;\n },\n\n /**\n * Get the breakpoint following the given breakpoint.\n * @function\n * @param {String} size - Name of the breakpoint.\n * @returns {String|null} - The name of the following breakpoint, or `null` if the passed breakpoint was the last one.\n */\n next(size) {\n const queryIndex = this.queries.findIndex((q) => this._getQueryName(q) === size);\n if (queryIndex === -1) {\n throw new Error(`\n Unknown breakpoint \"${size}\" passed to MediaQuery.next().\n Ensure it is present in your Sass \"$breakpoints\" setting.\n `);\n }\n\n const nextQuery = this.queries[queryIndex + 1];\n return nextQuery ? nextQuery.name : null;\n },\n\n /**\n * Returns the name of the breakpoint related to the given value.\n * @function\n * @private\n * @param {String|Object} value - Breakpoint name or query object.\n * @returns {String} Name of the breakpoint.\n */\n _getQueryName(value) {\n if (typeof value === 'string')\n return value;\n if (typeof value === 'object')\n return value.name;\n throw new TypeError(`\n Invalid value passed to MediaQuery._getQueryName().\n Expected a breakpoint name (String) or a breakpoint query (Object), got \"${value}\" (${typeof value})\n `);\n },\n\n /**\n * Gets the current breakpoint name by testing every breakpoint and returning the last one to match (the biggest one).\n * @function\n * @private\n * @returns {String} Name of the current breakpoint.\n */\n _getCurrentSize() {\n var matched;\n\n for (var i = 0; i < this.queries.length; i++) {\n var query = this.queries[i];\n\n if (window.matchMedia(query.value).matches) {\n matched = query;\n }\n }\n\n return matched && this._getQueryName(matched);\n },\n\n /**\n * Activates the breakpoint watcher, which fires an event on the window whenever the breakpoint changes.\n * @function\n * @private\n */\n _watcher() {\n $(window).on('resize.zf.trigger', () => {\n var newSize = this._getCurrentSize(), currentSize = this.current;\n\n if (newSize !== currentSize) {\n // Change the current media query\n this.current = newSize;\n\n // Broadcast the media query change on the window\n $(window).trigger('changed.zf.mediaquery', [newSize, currentSize]);\n }\n });\n }\n};\n\n\n\n// Thank you: https://github.com/sindresorhus/query-string\nfunction parseStyleToObject(str) {\n var styleObject = {};\n\n if (typeof str !== 'string') {\n return styleObject;\n }\n\n str = str.trim().slice(1, -1); // browsers re-quote string style values\n\n if (!str) {\n return styleObject;\n }\n\n styleObject = str.split('&').reduce(function(ret, param) {\n var parts = param.replace(/\\+/g, ' ').split('=');\n var key = parts[0];\n var val = parts[1];\n key = decodeURIComponent(key);\n\n // missing `=` should be `null`:\n // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n val = typeof val === 'undefined' ? null : decodeURIComponent(val);\n\n if (!ret.hasOwnProperty(key)) {\n ret[key] = val;\n } else if (Array.isArray(ret[key])) {\n ret[key].push(val);\n } else {\n ret[key] = [ret[key], val];\n }\n return ret;\n }, {});\n\n return styleObject;\n}\n\nexport {MediaQuery};\n","import $ from 'jquery';\nimport { GetYoDigits } from './foundation.core.utils';\nimport { MediaQuery } from './foundation.util.mediaQuery';\n\nvar FOUNDATION_VERSION = '6.7.5';\n\n// Global Foundation object\n// This is attached to the window, or used as a module for AMD/Browserify\nvar Foundation = {\n version: FOUNDATION_VERSION,\n\n /**\n * Stores initialized plugins.\n */\n _plugins: {},\n\n /**\n * Stores generated unique ids for plugin instances\n */\n _uuids: [],\n\n /**\n * Defines a Foundation plugin, adding it to the `Foundation` namespace and the list of plugins to initialize when reflowing.\n * @param {Object} plugin - The constructor of the plugin.\n */\n plugin: function(plugin, name) {\n // Object key to use when adding to global Foundation object\n // Examples: Foundation.Reveal, Foundation.OffCanvas\n var className = (name || functionName(plugin));\n // Object key to use when storing the plugin, also used to create the identifying data attribute for the plugin\n // Examples: data-reveal, data-off-canvas\n var attrName = hyphenate(className);\n\n // Add to the Foundation object and the plugins list (for reflowing)\n this._plugins[attrName] = this[className] = plugin;\n },\n /**\n * @function\n * Populates the _uuids array with pointers to each individual plugin instance.\n * Adds the `zfPlugin` data-attribute to programmatically created plugins to allow use of $(selector).foundation(method) calls.\n * Also fires the initialization event for each plugin, consolidating repetitive code.\n * @param {Object} plugin - an instance of a plugin, usually `this` in context.\n * @param {String} name - the name of the plugin, passed as a camelCased string.\n * @fires Plugin#init\n */\n registerPlugin: function(plugin, name){\n var pluginName = name ? hyphenate(name) : functionName(plugin.constructor).toLowerCase();\n plugin.uuid = GetYoDigits(6, pluginName);\n\n if(!plugin.$element.attr(`data-${pluginName}`)){ plugin.$element.attr(`data-${pluginName}`, plugin.uuid); }\n if(!plugin.$element.data('zfPlugin')){ plugin.$element.data('zfPlugin', plugin); }\n /**\n * Fires when the plugin has initialized.\n * @event Plugin#init\n */\n plugin.$element.trigger(`init.zf.${pluginName}`);\n\n this._uuids.push(plugin.uuid);\n\n return;\n },\n /**\n * @function\n * Removes the plugins uuid from the _uuids array.\n * Removes the zfPlugin data attribute, as well as the data-plugin-name attribute.\n * Also fires the destroyed event for the plugin, consolidating repetitive code.\n * @param {Object} plugin - an instance of a plugin, usually `this` in context.\n * @fires Plugin#destroyed\n */\n unregisterPlugin: function(plugin){\n var pluginName = hyphenate(functionName(plugin.$element.data('zfPlugin').constructor));\n\n this._uuids.splice(this._uuids.indexOf(plugin.uuid), 1);\n plugin.$element.removeAttr(`data-${pluginName}`).removeData('zfPlugin')\n /**\n * Fires when the plugin has been destroyed.\n * @event Plugin#destroyed\n */\n .trigger(`destroyed.zf.${pluginName}`);\n for(var prop in plugin){\n if(typeof plugin[prop] === 'function'){\n plugin[prop] = null; //clean up script to prep for garbage collection.\n }\n }\n return;\n },\n\n /**\n * @function\n * Causes one or more active plugins to re-initialize, resetting event listeners, recalculating positions, etc.\n * @param {String} plugins - optional string of an individual plugin key, attained by calling `$(element).data('pluginName')`, or string of a plugin class i.e. `'dropdown'`\n * @default If no argument is passed, reflow all currently active plugins.\n */\n reInit: function(plugins){\n var isJQ = plugins instanceof $;\n try{\n if(isJQ){\n plugins.each(function(){\n $(this).data('zfPlugin')._init();\n });\n }else{\n var type = typeof plugins,\n _this = this,\n fns = {\n 'object': function(plgs){\n plgs.forEach(function(p){\n p = hyphenate(p);\n $('[data-'+ p +']').foundation('_init');\n });\n },\n 'string': function(){\n plugins = hyphenate(plugins);\n $('[data-'+ plugins +']').foundation('_init');\n },\n 'undefined': function(){\n this.object(Object.keys(_this._plugins));\n }\n };\n fns[type](plugins);\n }\n }catch(err){\n console.error(err);\n }finally{\n return plugins;\n }\n },\n\n /**\n * Initialize plugins on any elements within `elem` (and `elem` itself) that aren't already initialized.\n * @param {Object} elem - jQuery object containing the element to check inside. Also checks the element itself, unless it's the `document` object.\n * @param {String|Array} plugins - A list of plugins to initialize. Leave this out to initialize everything.\n */\n reflow: function(elem, plugins) {\n\n // If plugins is undefined, just grab everything\n if (typeof plugins === 'undefined') {\n plugins = Object.keys(this._plugins);\n }\n // If plugins is a string, convert it to an array with one item\n else if (typeof plugins === 'string') {\n plugins = [plugins];\n }\n\n var _this = this;\n\n // Iterate through each plugin\n $.each(plugins, function(i, name) {\n // Get the current plugin\n var plugin = _this._plugins[name];\n\n // Localize the search to all elements inside elem, as well as elem itself, unless elem === document\n var $elem = $(elem).find('[data-'+name+']').addBack('[data-'+name+']').filter(function () {\n return typeof $(this).data(\"zfPlugin\") === 'undefined';\n });\n\n // For each plugin found, initialize it\n $elem.each(function() {\n var $el = $(this),\n opts = { reflow: true };\n\n if($el.attr('data-options')){\n $el.attr('data-options').split(';').forEach(function(option){\n var opt = option.split(':').map(function(el){ return el.trim(); });\n if(opt[0]) opts[opt[0]] = parseValue(opt[1]);\n });\n }\n try{\n $el.data('zfPlugin', new plugin($(this), opts));\n }catch(er){\n console.error(er);\n }finally{\n return;\n }\n });\n });\n },\n getFnName: functionName,\n\n addToJquery: function() {\n // TODO: consider not making this a jQuery function\n // TODO: need way to reflow vs. re-initialize\n /**\n * The Foundation jQuery method.\n * @param {String|Array} method - An action to perform on the current jQuery object.\n */\n var foundation = function(method) {\n var type = typeof method,\n $noJS = $('.no-js');\n\n if($noJS.length){\n $noJS.removeClass('no-js');\n }\n\n if(type === 'undefined'){//needs to initialize the Foundation object, or an individual plugin.\n MediaQuery._init();\n Foundation.reflow(this);\n }else if(type === 'string'){//an individual method to invoke on a plugin or group of plugins\n var args = Array.prototype.slice.call(arguments, 1);//collect all the arguments, if necessary\n var plugClass = this.data('zfPlugin');//determine the class of plugin\n\n if(typeof plugClass !== 'undefined' && typeof plugClass[method] !== 'undefined'){//make sure both the class and method exist\n if(this.length === 1){//if there's only one, call it directly.\n plugClass[method].apply(plugClass, args);\n }else{\n this.each(function(i, el){//otherwise loop through the jQuery collection and invoke the method on each\n plugClass[method].apply($(el).data('zfPlugin'), args);\n });\n }\n }else{//error for no class or no method\n throw new ReferenceError(\"We're sorry, '\" + method + \"' is not an available method for \" + (plugClass ? functionName(plugClass) : 'this element') + '.');\n }\n }else{//error for invalid argument type\n throw new TypeError(`We're sorry, ${type} is not a valid parameter. You must use a string representing the method you wish to invoke.`);\n }\n return this;\n };\n $.fn.foundation = foundation;\n return $;\n }\n};\n\nFoundation.util = {\n /**\n * Function for applying a debounce effect to a function call.\n * @function\n * @param {Function} func - Function to be called at end of timeout.\n * @param {Number} delay - Time in ms to delay the call of `func`.\n * @returns function\n */\n throttle: function (func, delay) {\n var timer = null;\n\n return function () {\n var context = this, args = arguments;\n\n if (timer === null) {\n timer = setTimeout(function () {\n func.apply(context, args);\n timer = null;\n }, delay);\n }\n };\n }\n};\n\nwindow.Foundation = Foundation;\n\n// Polyfill for requestAnimationFrame\n(function() {\n if (!Date.now || !window.Date.now)\n window.Date.now = Date.now = function() { return new Date().getTime(); };\n\n var vendors = ['webkit', 'moz'];\n for (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {\n var vp = vendors[i];\n window.requestAnimationFrame = window[vp+'RequestAnimationFrame'];\n window.cancelAnimationFrame = (window[vp+'CancelAnimationFrame']\n || window[vp+'CancelRequestAnimationFrame']);\n }\n if (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent)\n || !window.requestAnimationFrame || !window.cancelAnimationFrame) {\n var lastTime = 0;\n window.requestAnimationFrame = function(callback) {\n var now = Date.now();\n var nextTime = Math.max(lastTime + 16, now);\n return setTimeout(function() { callback(lastTime = nextTime); },\n nextTime - now);\n };\n window.cancelAnimationFrame = clearTimeout;\n }\n /**\n * Polyfill for performance.now, required by rAF\n */\n if(!window.performance || !window.performance.now){\n window.performance = {\n start: Date.now(),\n now: function(){ return Date.now() - this.start; }\n };\n }\n})();\nif (!Function.prototype.bind) {\n /* eslint-disable no-extend-native */\n Function.prototype.bind = function(oThis) {\n if (typeof this !== 'function') {\n // closest thing possible to the ECMAScript 5\n // internal IsCallable function\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1),\n fToBind = this,\n fNOP = function() {},\n fBound = function() {\n return fToBind.apply(this instanceof fNOP\n ? this\n : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n if (this.prototype) {\n // native functions don't have a prototype\n fNOP.prototype = this.prototype;\n }\n fBound.prototype = new fNOP();\n\n return fBound;\n };\n}\n// Polyfill to get the name of a function in IE9\nfunction functionName(fn) {\n if (typeof Function.prototype.name === 'undefined') {\n var funcNameRegex = /function\\s([^(]{1,})\\(/;\n var results = (funcNameRegex).exec((fn).toString());\n return (results && results.length > 1) ? results[1].trim() : \"\";\n }\n else if (typeof fn.prototype === 'undefined') {\n return fn.constructor.name;\n }\n else {\n return fn.prototype.constructor.name;\n }\n}\nfunction parseValue(str){\n if ('true' === str) return true;\n else if ('false' === str) return false;\n else if (!isNaN(str * 1)) return parseFloat(str);\n return str;\n}\n// Convert PascalCase to kebab-case\n// Thank you: http://stackoverflow.com/a/8955580\nfunction hyphenate(str) {\n return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\n\nexport {Foundation};\n","import { GetYoDigits } from './foundation.core.utils';\n\n// Abstract class for providing lifecycle hooks. Expect plugins to define AT LEAST\n// {function} _setup (replaces previous constructor),\n// {function} _destroy (replaces previous destroy)\nclass Plugin {\n\n constructor(element, options) {\n this._setup(element, options);\n var pluginName = getPluginName(this);\n this.uuid = GetYoDigits(6, pluginName);\n\n if(!this.$element.attr(`data-${pluginName}`)){ this.$element.attr(`data-${pluginName}`, this.uuid); }\n if(!this.$element.data('zfPlugin')){ this.$element.data('zfPlugin', this); }\n /**\n * Fires when the plugin has initialized.\n * @event Plugin#init\n */\n this.$element.trigger(`init.zf.${pluginName}`);\n }\n\n destroy() {\n this._destroy();\n var pluginName = getPluginName(this);\n this.$element.removeAttr(`data-${pluginName}`).removeData('zfPlugin')\n /**\n * Fires when the plugin has been destroyed.\n * @event Plugin#destroyed\n */\n .trigger(`destroyed.zf.${pluginName}`);\n for(var prop in this){\n if (this.hasOwnProperty(prop)) {\n this[prop] = null; //clean up script to prep for garbage collection.\n }\n }\n }\n}\n\n// Convert PascalCase to kebab-case\n// Thank you: http://stackoverflow.com/a/8955580\nfunction hyphenate(str) {\n return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\n\nfunction getPluginName(obj) {\n return hyphenate(obj.className);\n}\n\nexport {Plugin};\n","/*******************************************\n * *\n * This util was created by Marius Olbertz *\n * Please thank Marius on GitHub /owlbertz *\n * or the web http://www.mariusolbertz.de/ *\n * *\n ******************************************/\n\nimport $ from 'jquery';\nimport { rtl as Rtl } from './foundation.core.utils';\n\nconst keyCodes = {\n 9: 'TAB',\n 13: 'ENTER',\n 27: 'ESCAPE',\n 32: 'SPACE',\n 35: 'END',\n 36: 'HOME',\n 37: 'ARROW_LEFT',\n 38: 'ARROW_UP',\n 39: 'ARROW_RIGHT',\n 40: 'ARROW_DOWN'\n}\n\nvar commands = {}\n\n// Functions pulled out to be referenceable from internals\nfunction findFocusable($element) {\n if(!$element) {return false; }\n return $element.find('a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]').filter(function() {\n if (!$(this).is(':visible') || $(this).attr('tabindex') < 0) { return false; } //only have visible elements and those that have a tabindex greater or equal 0\n return true;\n })\n .sort( function( a, b ) {\n if ($(a).attr('tabindex') === $(b).attr('tabindex')) {\n return 0;\n }\n let aTabIndex = parseInt($(a).attr('tabindex'), 10),\n bTabIndex = parseInt($(b).attr('tabindex'), 10);\n // Undefined is treated the same as 0\n if (typeof $(a).attr('tabindex') === 'undefined' && bTabIndex > 0) {\n return 1;\n }\n if (typeof $(b).attr('tabindex') === 'undefined' && aTabIndex > 0) {\n return -1;\n }\n if (aTabIndex === 0 && bTabIndex > 0) {\n return 1;\n }\n if (bTabIndex === 0 && aTabIndex > 0) {\n return -1;\n }\n if (aTabIndex < bTabIndex) {\n return -1;\n }\n if (aTabIndex > bTabIndex) {\n return 1;\n }\n });\n}\n\nfunction parseKey(event) {\n var key = keyCodes[event.which || event.keyCode] || String.fromCharCode(event.which).toUpperCase();\n\n // Remove un-printable characters, e.g. for `fromCharCode` calls for CTRL only events\n key = key.replace(/\\W+/, '');\n\n if (event.shiftKey) key = `SHIFT_${key}`;\n if (event.ctrlKey) key = `CTRL_${key}`;\n if (event.altKey) key = `ALT_${key}`;\n\n // Remove trailing underscore, in case only modifiers were used (e.g. only `CTRL_ALT`)\n key = key.replace(/_$/, '');\n\n return key;\n}\n\nvar Keyboard = {\n keys: getKeyCodes(keyCodes),\n\n /**\n * Parses the (keyboard) event and returns a String that represents its key\n * Can be used like Foundation.parseKey(event) === Foundation.keys.SPACE\n * @param {Event} event - the event generated by the event handler\n * @return String key - String that represents the key pressed\n */\n parseKey: parseKey,\n\n /**\n * Handles the given (keyboard) event\n * @param {Event} event - the event generated by the event handler\n * @param {String} component - Foundation component's name, e.g. Slider or Reveal\n * @param {Objects} functions - collection of functions that are to be executed\n */\n handleKey(event, component, functions) {\n var commandList = commands[component],\n keyCode = this.parseKey(event),\n cmds,\n command,\n fn;\n\n if (!commandList) return console.warn('Component not defined!');\n\n // Ignore the event if it was already handled\n if (event.zfIsKeyHandled === true) return;\n\n // This component does not differentiate between ltr and rtl\n if (typeof commandList.ltr === 'undefined') {\n cmds = commandList; // use plain list\n } else { // merge ltr and rtl: if document is rtl, rtl overwrites ltr and vice versa\n if (Rtl()) cmds = $.extend({}, commandList.ltr, commandList.rtl);\n\n else cmds = $.extend({}, commandList.rtl, commandList.ltr);\n }\n command = cmds[keyCode];\n\n fn = functions[command];\n // Execute the handler if found\n if (fn && typeof fn === 'function') {\n var returnValue = fn.apply();\n\n // Mark the event as \"handled\" to prevent future handlings\n event.zfIsKeyHandled = true;\n\n // Execute function when event was handled\n if (functions.handled || typeof functions.handled === 'function') {\n functions.handled(returnValue);\n }\n } else {\n // Execute function when event was not handled\n if (functions.unhandled || typeof functions.unhandled === 'function') {\n functions.unhandled();\n }\n }\n },\n\n /**\n * Finds all focusable elements within the given `$element`\n * @param {jQuery} $element - jQuery object to search within\n * @return {jQuery} $focusable - all focusable elements within `$element`\n */\n\n findFocusable: findFocusable,\n\n /**\n * Returns the component name name\n * @param {Object} component - Foundation component, e.g. Slider or Reveal\n * @return String componentName\n */\n\n register(componentName, cmds) {\n commands[componentName] = cmds;\n },\n\n\n // TODO9438: These references to Keyboard need to not require global. Will 'this' work in this context?\n //\n /**\n * Traps the focus in the given element.\n * @param {jQuery} $element jQuery object to trap the foucs into.\n */\n trapFocus($element) {\n var $focusable = findFocusable($element),\n $firstFocusable = $focusable.eq(0),\n $lastFocusable = $focusable.eq(-1);\n\n $element.on('keydown.zf.trapfocus', function(event) {\n if (event.target === $lastFocusable[0] && parseKey(event) === 'TAB') {\n event.preventDefault();\n $firstFocusable.focus();\n }\n else if (event.target === $firstFocusable[0] && parseKey(event) === 'SHIFT_TAB') {\n event.preventDefault();\n $lastFocusable.focus();\n }\n });\n },\n /**\n * Releases the trapped focus from the given element.\n * @param {jQuery} $element jQuery object to release the focus for.\n */\n releaseFocus($element) {\n $element.off('keydown.zf.trapfocus');\n }\n}\n\n/*\n * Constants for easier comparing.\n * Can be used like Foundation.parseKey(event) === Foundation.keys.SPACE\n */\nfunction getKeyCodes(kcs) {\n var k = {};\n for (var kc in kcs) {\n if (kcs.hasOwnProperty(kc)) k[kcs[kc]] = kcs[kc];\n }\n return k;\n}\n\nexport {Keyboard};\n","import $ from 'jquery';\nimport { Plugin } from './foundation.core.plugin';\nimport { onLoad, GetYoDigits } from './foundation.core.utils';\nimport { Keyboard } from './foundation.util.keyboard';\n\n/**\n * Accordion module.\n * @module foundation.accordion\n * @requires foundation.util.keyboard\n */\n\nclass Accordion extends Plugin {\n /**\n * Creates a new instance of an accordion.\n * @class\n * @name Accordion\n * @fires Accordion#init\n * @param {jQuery} element - jQuery object to make into an accordion.\n * @param {Object} options - a plain object with settings to override the default options.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Accordion.defaults, this.$element.data(), options);\n\n this.className = 'Accordion'; // ie9 back compat\n this._init();\n\n Keyboard.register('Accordion', {\n 'ENTER': 'toggle',\n 'SPACE': 'toggle',\n 'ARROW_DOWN': 'next',\n 'ARROW_UP': 'previous',\n 'HOME': 'first',\n 'END': 'last',\n });\n }\n\n /**\n * Initializes the accordion by animating the preset active pane(s).\n * @private\n */\n _init() {\n this._isInitializing = true;\n\n this.$tabs = this.$element.children('[data-accordion-item]');\n\n\n this.$tabs.each(function(idx, el) {\n var $el = $(el),\n $content = $el.children('[data-tab-content]'),\n id = $content[0].id || GetYoDigits(6, 'accordion'),\n linkId = (el.id) ? `${el.id}-label` : `${id}-label`;\n\n $el.find('a:first').attr({\n 'aria-controls': id,\n 'id': linkId,\n 'aria-expanded': false\n });\n\n $content.attr({'role': 'region', 'aria-labelledby': linkId, 'aria-hidden': true, 'id': id});\n });\n\n var $initActive = this.$element.find('.is-active').children('[data-tab-content]');\n if ($initActive.length) {\n // Save up the initial hash to return to it later when going back in history\n this._initialAnchor = $initActive.prev('a').attr('href');\n this._openSingleTab($initActive);\n }\n\n this._checkDeepLink = () => {\n var anchor = window.location.hash;\n\n if (!anchor.length) {\n // If we are still initializing and there is no anchor, then there is nothing to do\n if (this._isInitializing) return;\n // Otherwise, move to the initial anchor\n if (this._initialAnchor) anchor = this._initialAnchor;\n }\n\n var $anchor = anchor && $(anchor);\n var $link = anchor && this.$element.find(`[href$=\"${anchor}\"]`);\n // Whether the anchor element that has been found is part of this element\n var isOwnAnchor = !!($anchor.length && $link.length);\n\n if (isOwnAnchor) {\n // If there is an anchor for the hash, open it (if not already active)\n if ($anchor && $link && $link.length) {\n if (!$link.parent('[data-accordion-item]').hasClass('is-active')) {\n this._openSingleTab($anchor);\n }\n }\n // Otherwise, close everything\n else {\n this._closeAllTabs();\n }\n\n // Roll up a little to show the titles\n if (this.options.deepLinkSmudge) {\n onLoad($(window), () => {\n var offset = this.$element.offset();\n $('html, body').animate({ scrollTop: offset.top - this.options.deepLinkSmudgeOffset }, this.options.deepLinkSmudgeDelay);\n });\n }\n\n /**\n * Fires when the plugin has deeplinked at pageload\n * @event Accordion#deeplink\n */\n this.$element.trigger('deeplink.zf.accordion', [$link, $anchor]);\n }\n }\n\n //use browser to open a tab, if it exists in this tabset\n if (this.options.deepLink) {\n this._checkDeepLink();\n }\n\n this._events();\n\n this._isInitializing = false;\n }\n\n /**\n * Adds event handlers for items within the accordion.\n * @private\n */\n _events() {\n var _this = this;\n\n this.$tabs.each(function() {\n var $elem = $(this);\n var $tabContent = $elem.children('[data-tab-content]');\n if ($tabContent.length) {\n $elem.children('a').off('click.zf.accordion keydown.zf.accordion')\n .on('click.zf.accordion', function(e) {\n e.preventDefault();\n _this.toggle($tabContent);\n }).on('keydown.zf.accordion', function(e) {\n Keyboard.handleKey(e, 'Accordion', {\n toggle: function() {\n _this.toggle($tabContent);\n },\n next: function() {\n var $a = $elem.next().find('a').focus();\n if (!_this.options.multiExpand) {\n $a.trigger('click.zf.accordion')\n }\n },\n previous: function() {\n var $a = $elem.prev().find('a').focus();\n if (!_this.options.multiExpand) {\n $a.trigger('click.zf.accordion')\n }\n },\n first: function() {\n var $a = _this.$tabs.first().find('.accordion-title').focus();\n if (!_this.options.multiExpand) {\n $a.trigger('click.zf.accordion');\n }\n },\n last: function() {\n var $a = _this.$tabs.last().find('.accordion-title').focus();\n if (!_this.options.multiExpand) {\n $a.trigger('click.zf.accordion');\n }\n },\n handled: function() {\n e.preventDefault();\n }\n });\n });\n }\n });\n if (this.options.deepLink) {\n $(window).on('hashchange', this._checkDeepLink);\n }\n }\n\n /**\n * Toggles the selected content pane's open/close state.\n * @param {jQuery} $target - jQuery object of the pane to toggle (`.accordion-content`).\n * @function\n */\n toggle($target) {\n if ($target.closest('[data-accordion]').is('[disabled]')) {\n console.info('Cannot toggle an accordion that is disabled.');\n return;\n }\n if ($target.parent().hasClass('is-active')) {\n this.up($target);\n } else {\n this.down($target);\n }\n //either replace or update browser history\n if (this.options.deepLink) {\n var anchor = $target.prev('a').attr('href');\n\n if (this.options.updateHistory) {\n history.pushState({}, '', anchor);\n } else {\n history.replaceState({}, '', anchor);\n }\n }\n }\n\n /**\n * Opens the accordion tab defined by `$target`.\n * @param {jQuery} $target - Accordion pane to open (`.accordion-content`).\n * @fires Accordion#down\n * @function\n */\n down($target) {\n if ($target.closest('[data-accordion]').is('[disabled]')) {\n console.info('Cannot call down on an accordion that is disabled.');\n return;\n }\n\n if (this.options.multiExpand)\n this._openTab($target);\n else\n this._openSingleTab($target);\n }\n\n /**\n * Closes the tab defined by `$target`.\n * It may be ignored if the Accordion options don't allow it.\n *\n * @param {jQuery} $target - Accordion tab to close (`.accordion-content`).\n * @fires Accordion#up\n * @function\n */\n up($target) {\n if (this.$element.is('[disabled]')) {\n console.info('Cannot call up on an accordion that is disabled.');\n return;\n }\n\n // Don't close the item if it is already closed\n const $targetItem = $target.parent();\n if (!$targetItem.hasClass('is-active')) return;\n\n // Don't close the item if there is no other active item (unless with `allowAllClosed`)\n const $othersItems = $targetItem.siblings();\n if (!this.options.allowAllClosed && !$othersItems.hasClass('is-active')) return;\n\n this._closeTab($target);\n }\n\n /**\n * Make the tab defined by `$target` the only opened tab, closing all others tabs.\n * @param {jQuery} $target - Accordion tab to open (`.accordion-content`).\n * @function\n * @private\n */\n _openSingleTab($target) {\n // Close all the others active tabs.\n const $activeContents = this.$element.children('.is-active').children('[data-tab-content]');\n if ($activeContents.length) {\n this._closeTab($activeContents.not($target));\n }\n\n // Then open the target.\n this._openTab($target);\n }\n\n /**\n * Opens the tab defined by `$target`.\n * @param {jQuery} $target - Accordion tab to open (`.accordion-content`).\n * @fires Accordion#down\n * @function\n * @private\n */\n _openTab($target) {\n const $targetItem = $target.parent();\n const targetContentId = $target.attr('aria-labelledby');\n\n $target.attr('aria-hidden', false);\n $targetItem.addClass('is-active');\n\n $(`#${targetContentId}`).attr({\n 'aria-expanded': true\n });\n\n $target.finish().slideDown(this.options.slideSpeed, () => {\n /**\n * Fires when the tab is done opening.\n * @event Accordion#down\n */\n this.$element.trigger('down.zf.accordion', [$target]);\n });\n }\n\n /**\n * Closes the tab defined by `$target`.\n * @param {jQuery} $target - Accordion tab to close (`.accordion-content`).\n * @fires Accordion#up\n * @function\n * @private\n */\n _closeTab($target) {\n const $targetItem = $target.parent();\n const targetContentId = $target.attr('aria-labelledby');\n\n $target.attr('aria-hidden', true)\n $targetItem.removeClass('is-active');\n\n $(`#${targetContentId}`).attr({\n 'aria-expanded': false\n });\n\n $target.finish().slideUp(this.options.slideSpeed, () => {\n /**\n * Fires when the tab is done collapsing up.\n * @event Accordion#up\n */\n this.$element.trigger('up.zf.accordion', [$target]);\n });\n }\n\n /**\n * Closes all active tabs\n * @fires Accordion#up\n * @function\n * @private\n */\n _closeAllTabs() {\n var $activeTabs = this.$element.children('.is-active').children('[data-tab-content]');\n if ($activeTabs.length) {\n this._closeTab($activeTabs);\n }\n }\n\n /**\n * Destroys an instance of an accordion.\n * @fires Accordion#destroyed\n * @function\n */\n _destroy() {\n this.$element.find('[data-tab-content]').stop(true).slideUp(0).css('display', '');\n this.$element.find('a').off('.zf.accordion');\n if (this.options.deepLink) {\n $(window).off('hashchange', this._checkDeepLink);\n }\n\n }\n}\n\nAccordion.defaults = {\n /**\n * Amount of time to animate the opening of an accordion pane.\n * @option\n * @type {number}\n * @default 250\n */\n slideSpeed: 250,\n /**\n * Allow the accordion to have multiple open panes.\n * @option\n * @type {boolean}\n * @default false\n */\n multiExpand: false,\n /**\n * Allow the accordion to close all panes.\n * @option\n * @type {boolean}\n * @default false\n */\n allowAllClosed: false,\n /**\n * Link the location hash to the open pane.\n * Set the location hash when the opened pane changes, and open and scroll to the corresponding pane when the location changes.\n * @option\n * @type {boolean}\n * @default false\n */\n deepLink: false,\n /**\n * If `deepLink` is enabled, adjust the deep link scroll to make sure the top of the accordion panel is visible\n * @option\n * @type {boolean}\n * @default false\n */\n deepLinkSmudge: false,\n /**\n * If `deepLinkSmudge` is enabled, animation time (ms) for the deep link adjustment\n * @option\n * @type {number}\n * @default 300\n */\n deepLinkSmudgeDelay: 300,\n /**\n * If `deepLinkSmudge` is enabled, the offset for scrollToTtop to prevent overlap by a sticky element at the top of the page\n * @option\n * @type {number}\n * @default 0\n */\n deepLinkSmudgeOffset: 0,\n /**\n * If `deepLink` is enabled, update the browser history with the open accordion\n * @option\n * @type {boolean}\n * @default false\n */\n updateHistory: false\n};\n\nexport { Accordion };\n","import $ from 'jquery';\n\nconst Nest = {\n Feather(menu, type = 'zf') {\n menu.attr('role', 'menubar');\n menu.find('a').attr({'role': 'menuitem'});\n\n var items = menu.find('li').attr({'role': 'none'}),\n subMenuClass = `is-${type}-submenu`,\n subItemClass = `${subMenuClass}-item`,\n hasSubClass = `is-${type}-submenu-parent`,\n applyAria = (type !== 'accordion'); // Accordions handle their own ARIA attriutes.\n\n items.each(function() {\n var $item = $(this),\n $sub = $item.children('ul');\n\n if ($sub.length) {\n $item.addClass(hasSubClass);\n if(applyAria) {\n const firstItem = $item.children('a:first');\n firstItem.attr({\n 'aria-haspopup': true,\n 'aria-label': firstItem.attr('aria-label') || firstItem.text()\n });\n // Note: Drilldowns behave differently in how they hide, and so need\n // additional attributes. We should look if this possibly over-generalized\n // utility (Nest) is appropriate when we rework menus in 6.4\n if(type === 'drilldown') {\n $item.attr({'aria-expanded': false});\n }\n }\n $sub\n .addClass(`submenu ${subMenuClass}`)\n .attr({\n 'data-submenu': '',\n 'role': 'menubar'\n });\n if(type === 'drilldown') {\n $sub.attr({'aria-hidden': true});\n }\n }\n\n if ($item.parent('[data-submenu]').length) {\n $item.addClass(`is-submenu-item ${subItemClass}`);\n }\n });\n\n return;\n },\n\n Burn(menu, type) {\n var //items = menu.find('li'),\n subMenuClass = `is-${type}-submenu`,\n subItemClass = `${subMenuClass}-item`,\n hasSubClass = `is-${type}-submenu-parent`;\n\n menu\n .find('>li, > li > ul, .menu, .menu > li, [data-submenu] > li')\n .removeClass(`${subMenuClass} ${subItemClass} ${hasSubClass} is-submenu-item submenu is-active`)\n .removeAttr('data-submenu').css('display', '');\n\n }\n}\n\nexport {Nest};\n","import $ from 'jquery';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { Nest } from './foundation.util.nest';\nimport { GetYoDigits } from './foundation.core.utils';\nimport { Plugin } from './foundation.core.plugin';\n\n/**\n * AccordionMenu module.\n * @module foundation.accordionMenu\n * @requires foundation.util.keyboard\n * @requires foundation.util.nest\n */\n\nclass AccordionMenu extends Plugin {\n /**\n * Creates a new instance of an accordion menu.\n * @class\n * @name AccordionMenu\n * @fires AccordionMenu#init\n * @param {jQuery} element - jQuery object to make into an accordion menu.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, AccordionMenu.defaults, this.$element.data(), options);\n this.className = 'AccordionMenu'; // ie9 back compat\n\n this._init();\n\n Keyboard.register('AccordionMenu', {\n 'ENTER': 'toggle',\n 'SPACE': 'toggle',\n 'ARROW_RIGHT': 'open',\n 'ARROW_UP': 'up',\n 'ARROW_DOWN': 'down',\n 'ARROW_LEFT': 'close',\n 'ESCAPE': 'closeAll'\n });\n }\n\n\n\n /**\n * Initializes the accordion menu by hiding all nested menus.\n * @private\n */\n _init() {\n Nest.Feather(this.$element, 'accordion');\n\n var _this = this;\n\n this.$element.find('[data-submenu]').not('.is-active').slideUp(0);//.find('a').css('padding-left', '1rem');\n this.$element.attr({\n 'aria-multiselectable': this.options.multiOpen\n });\n\n this.$menuLinks = this.$element.find('.is-accordion-submenu-parent');\n this.$menuLinks.each(function() {\n var linkId = this.id || GetYoDigits(6, 'acc-menu-link'),\n $elem = $(this),\n $sub = $elem.children('[data-submenu]'),\n subId = $sub[0].id || GetYoDigits(6, 'acc-menu'),\n isActive = $sub.hasClass('is-active');\n\n if (_this.options.parentLink) {\n let $anchor = $elem.children('a');\n $anchor.clone().prependTo($sub).wrap('
  • ');\n }\n\n if (_this.options.submenuToggle) {\n $elem.addClass('has-submenu-toggle');\n $elem.children('a').after('');\n } else {\n $elem.attr({\n 'aria-controls': subId,\n 'aria-expanded': isActive,\n 'id': linkId\n });\n }\n $sub.attr({\n 'aria-labelledby': linkId,\n 'aria-hidden': !isActive,\n 'role': 'group',\n 'id': subId\n });\n });\n var initPanes = this.$element.find('.is-active');\n if (initPanes.length) {\n initPanes.each(function() {\n _this.down($(this));\n });\n }\n this._events();\n }\n\n /**\n * Adds event handlers for items within the menu.\n * @private\n */\n _events() {\n var _this = this;\n\n this.$element.find('li').each(function() {\n var $submenu = $(this).children('[data-submenu]');\n\n if ($submenu.length) {\n if (_this.options.submenuToggle) {\n $(this).children('.submenu-toggle').off('click.zf.accordionMenu').on('click.zf.accordionMenu', function() {\n _this.toggle($submenu);\n });\n } else {\n $(this).children('a').off('click.zf.accordionMenu').on('click.zf.accordionMenu', function(e) {\n e.preventDefault();\n _this.toggle($submenu);\n });\n }\n }\n }).on('keydown.zf.accordionMenu', function(e) {\n var $element = $(this),\n $elements = $element.parent('ul').children('li'),\n $prevElement,\n $nextElement,\n $target = $element.children('[data-submenu]');\n\n $elements.each(function(i) {\n if ($(this).is($element)) {\n $prevElement = $elements.eq(Math.max(0, i-1)).find('a').first();\n $nextElement = $elements.eq(Math.min(i+1, $elements.length-1)).find('a').first();\n\n if ($(this).children('[data-submenu]:visible').length) { // has open sub menu\n $nextElement = $element.find('li:first-child').find('a').first();\n }\n if ($(this).is(':first-child')) { // is first element of sub menu\n $prevElement = $element.parents('li').first().find('a').first();\n } else if ($prevElement.parents('li').first().children('[data-submenu]:visible').length) { // if previous element has open sub menu\n $prevElement = $prevElement.parents('li').find('li:last-child').find('a').first();\n }\n if ($(this).is(':last-child')) { // is last element of sub menu\n $nextElement = $element.parents('li').first().next('li').find('a').first();\n }\n\n return;\n }\n });\n\n Keyboard.handleKey(e, 'AccordionMenu', {\n open: function() {\n if ($target.is(':hidden')) {\n _this.down($target);\n $target.find('li').first().find('a').first().focus();\n }\n },\n close: function() {\n if ($target.length && !$target.is(':hidden')) { // close active sub of this item\n _this.up($target);\n } else if ($element.parent('[data-submenu]').length) { // close currently open sub\n _this.up($element.parent('[data-submenu]'));\n $element.parents('li').first().find('a').first().focus();\n }\n },\n up: function() {\n $prevElement.focus();\n return true;\n },\n down: function() {\n $nextElement.focus();\n return true;\n },\n toggle: function() {\n if (_this.options.submenuToggle) {\n return false;\n }\n if ($element.children('[data-submenu]').length) {\n _this.toggle($element.children('[data-submenu]'));\n return true;\n }\n },\n closeAll: function() {\n _this.hideAll();\n },\n handled: function(preventDefault) {\n if (preventDefault) {\n e.preventDefault();\n }\n }\n });\n });//.attr('tabindex', 0);\n }\n\n /**\n * Closes all panes of the menu.\n * @function\n */\n hideAll() {\n this.up(this.$element.find('[data-submenu]'));\n }\n\n /**\n * Opens all panes of the menu.\n * @function\n */\n showAll() {\n this.down(this.$element.find('[data-submenu]'));\n }\n\n /**\n * Toggles the open/close state of a submenu.\n * @function\n * @param {jQuery} $target - the submenu to toggle\n */\n toggle($target) {\n if (!$target.is(':animated')) {\n if (!$target.is(':hidden')) {\n this.up($target);\n }\n else {\n this.down($target);\n }\n }\n }\n\n /**\n * Opens the sub-menu defined by `$target`.\n * @param {jQuery} $target - Sub-menu to open.\n * @fires AccordionMenu#down\n */\n down($target) {\n // If having multiple submenus active is disabled, close all the submenus\n // that are not parents or children of the targeted submenu.\n if (!this.options.multiOpen) {\n // The \"branch\" of the targetted submenu, from the component root to\n // the active submenus nested in it.\n const $targetBranch = $target.parentsUntil(this.$element)\n .add($target)\n .add($target.find('.is-active'));\n // All the active submenus that are not in the branch.\n const $othersActiveSubmenus = this.$element.find('.is-active').not($targetBranch);\n\n this.up($othersActiveSubmenus);\n }\n\n $target\n .addClass('is-active')\n .attr({ 'aria-hidden': false });\n\n if (this.options.submenuToggle) {\n $target.prev('.submenu-toggle').attr({'aria-expanded': true});\n }\n else {\n $target.parent('.is-accordion-submenu-parent').attr({'aria-expanded': true});\n }\n\n $target.slideDown(this.options.slideSpeed, () => {\n /**\n * Fires when the menu is done opening.\n * @event AccordionMenu#down\n */\n this.$element.trigger('down.zf.accordionMenu', [$target]);\n });\n }\n\n /**\n * Closes the sub-menu defined by `$target`. All sub-menus inside the target will be closed as well.\n * @param {jQuery} $target - Sub-menu to close.\n * @fires AccordionMenu#up\n */\n up($target) {\n const $submenus = $target.find('[data-submenu]');\n const $allmenus = $target.add($submenus);\n\n $submenus.slideUp(0);\n $allmenus\n .removeClass('is-active')\n .attr('aria-hidden', true);\n\n if (this.options.submenuToggle) {\n $allmenus.prev('.submenu-toggle').attr('aria-expanded', false);\n }\n else {\n $allmenus.parent('.is-accordion-submenu-parent').attr('aria-expanded', false);\n }\n\n $target.slideUp(this.options.slideSpeed, () => {\n /**\n * Fires when the menu is done collapsing up.\n * @event AccordionMenu#up\n */\n this.$element.trigger('up.zf.accordionMenu', [$target]);\n });\n }\n\n /**\n * Destroys an instance of accordion menu.\n * @fires AccordionMenu#destroyed\n */\n _destroy() {\n this.$element.find('[data-submenu]').slideDown(0).css('display', '');\n this.$element.find('a').off('click.zf.accordionMenu');\n this.$element.find('[data-is-parent-link]').detach();\n\n if (this.options.submenuToggle) {\n this.$element.find('.has-submenu-toggle').removeClass('has-submenu-toggle');\n this.$element.find('.submenu-toggle').remove();\n }\n\n Nest.Burn(this.$element, 'accordion');\n }\n}\n\nAccordionMenu.defaults = {\n /**\n * Adds the parent link to the submenu.\n * @option\n * @type {boolean}\n * @default false\n */\n parentLink: false,\n /**\n * Amount of time to animate the opening of a submenu in ms.\n * @option\n * @type {number}\n * @default 250\n */\n slideSpeed: 250,\n /**\n * Adds a separate submenu toggle button. This allows the parent item to have a link.\n * @option\n * @example true\n */\n submenuToggle: false,\n /**\n * The text used for the submenu toggle if enabled. This is used for screen readers only.\n * @option\n * @example true\n */\n submenuToggleText: 'Toggle menu',\n /**\n * Allow the menu to have multiple open panes.\n * @option\n * @type {boolean}\n * @default true\n */\n multiOpen: true\n};\n\nexport { AccordionMenu };\n","var Box = {\n ImNotTouchingYou: ImNotTouchingYou,\n OverlapArea: OverlapArea,\n GetDimensions: GetDimensions,\n GetExplicitOffsets: GetExplicitOffsets\n}\n\n/**\n * Compares the dimensions of an element to a container and determines collision events with container.\n * @function\n * @param {jQuery} element - jQuery object to test for collisions.\n * @param {jQuery} parent - jQuery object to use as bounding container.\n * @param {Boolean} lrOnly - set to true to check left and right values only.\n * @param {Boolean} tbOnly - set to true to check top and bottom values only.\n * @default if no parent object passed, detects collisions with `window`.\n * @returns {Boolean} - true if collision free, false if a collision in any direction.\n */\nfunction ImNotTouchingYou(element, parent, lrOnly, tbOnly, ignoreBottom) {\n return OverlapArea(element, parent, lrOnly, tbOnly, ignoreBottom) === 0;\n}\n\nfunction OverlapArea(element, parent, lrOnly, tbOnly, ignoreBottom) {\n var eleDims = GetDimensions(element),\n topOver, bottomOver, leftOver, rightOver;\n if (parent) {\n var parDims = GetDimensions(parent);\n\n bottomOver = (parDims.height + parDims.offset.top) - (eleDims.offset.top + eleDims.height);\n topOver = eleDims.offset.top - parDims.offset.top;\n leftOver = eleDims.offset.left - parDims.offset.left;\n rightOver = (parDims.width + parDims.offset.left) - (eleDims.offset.left + eleDims.width);\n }\n else {\n bottomOver = (eleDims.windowDims.height + eleDims.windowDims.offset.top) - (eleDims.offset.top + eleDims.height);\n topOver = eleDims.offset.top - eleDims.windowDims.offset.top;\n leftOver = eleDims.offset.left - eleDims.windowDims.offset.left;\n rightOver = eleDims.windowDims.width - (eleDims.offset.left + eleDims.width);\n }\n\n bottomOver = ignoreBottom ? 0 : Math.min(bottomOver, 0);\n topOver = Math.min(topOver, 0);\n leftOver = Math.min(leftOver, 0);\n rightOver = Math.min(rightOver, 0);\n\n if (lrOnly) {\n return leftOver + rightOver;\n }\n if (tbOnly) {\n return topOver + bottomOver;\n }\n\n // use sum of squares b/c we care about overlap area.\n return Math.sqrt((topOver * topOver) + (bottomOver * bottomOver) + (leftOver * leftOver) + (rightOver * rightOver));\n}\n\n/**\n * Uses native methods to return an object of dimension values.\n * @function\n * @param {jQuery || HTML} element - jQuery object or DOM element for which to get the dimensions. Can be any element other that document or window.\n * @returns {Object} - nested object of integer pixel values\n * TODO - if element is window, return only those values.\n */\nfunction GetDimensions(elem){\n elem = elem.length ? elem[0] : elem;\n\n if (elem === window || elem === document) {\n throw new Error(\"I'm sorry, Dave. I'm afraid I can't do that.\");\n }\n\n var rect = elem.getBoundingClientRect(),\n parRect = elem.parentNode.getBoundingClientRect(),\n winRect = document.body.getBoundingClientRect(),\n winY = window.pageYOffset,\n winX = window.pageXOffset;\n\n return {\n width: rect.width,\n height: rect.height,\n offset: {\n top: rect.top + winY,\n left: rect.left + winX\n },\n parentDims: {\n width: parRect.width,\n height: parRect.height,\n offset: {\n top: parRect.top + winY,\n left: parRect.left + winX\n }\n },\n windowDims: {\n width: winRect.width,\n height: winRect.height,\n offset: {\n top: winY,\n left: winX\n }\n }\n }\n}\n\n/**\n * Returns an object of top and left integer pixel values for dynamically rendered elements,\n * such as: Tooltip, Reveal, and Dropdown. Maintained for backwards compatibility, and where\n * you don't know alignment, but generally from\n * 6.4 forward you should use GetExplicitOffsets, as GetOffsets conflates position and alignment.\n * @function\n * @param {jQuery} element - jQuery object for the element being positioned.\n * @param {jQuery} anchor - jQuery object for the element's anchor point.\n * @param {String} position - a string relating to the desired position of the element, relative to it's anchor\n * @param {Number} vOffset - integer pixel value of desired vertical separation between anchor and element.\n * @param {Number} hOffset - integer pixel value of desired horizontal separation between anchor and element.\n * @param {Boolean} isOverflow - if a collision event is detected, sets to true to default the element to full width - any desired offset.\n * TODO alter/rewrite to work with `em` values as well/instead of pixels\n */\nfunction GetExplicitOffsets(element, anchor, position, alignment, vOffset, hOffset, isOverflow) {\n var $eleDims = GetDimensions(element),\n $anchorDims = anchor ? GetDimensions(anchor) : null;\n\n var topVal, leftVal;\n\n if ($anchorDims !== null) {\n // set position related attribute\n switch (position) {\n case 'top':\n topVal = $anchorDims.offset.top - ($eleDims.height + vOffset);\n break;\n case 'bottom':\n topVal = $anchorDims.offset.top + $anchorDims.height + vOffset;\n break;\n case 'left':\n leftVal = $anchorDims.offset.left - ($eleDims.width + hOffset);\n break;\n case 'right':\n leftVal = $anchorDims.offset.left + $anchorDims.width + hOffset;\n break;\n }\n\n // set alignment related attribute\n switch (position) {\n case 'top':\n case 'bottom':\n switch (alignment) {\n case 'left':\n leftVal = $anchorDims.offset.left + hOffset;\n break;\n case 'right':\n leftVal = $anchorDims.offset.left - $eleDims.width + $anchorDims.width - hOffset;\n break;\n case 'center':\n leftVal = isOverflow ? hOffset : (($anchorDims.offset.left + ($anchorDims.width / 2)) - ($eleDims.width / 2)) + hOffset;\n break;\n }\n break;\n case 'right':\n case 'left':\n switch (alignment) {\n case 'bottom':\n topVal = $anchorDims.offset.top - vOffset + $anchorDims.height - $eleDims.height;\n break;\n case 'top':\n topVal = $anchorDims.offset.top + vOffset\n break;\n case 'center':\n topVal = ($anchorDims.offset.top + vOffset + ($anchorDims.height / 2)) - ($eleDims.height / 2)\n break;\n }\n break;\n }\n }\n\n return {top: topVal, left: leftVal};\n}\n\nexport {Box};\n","import { Box } from './foundation.util.box';\nimport { Plugin } from './foundation.core.plugin';\nimport { rtl as Rtl } from './foundation.core.utils';\n\nconst POSITIONS = ['left', 'right', 'top', 'bottom'];\nconst VERTICAL_ALIGNMENTS = ['top', 'bottom', 'center'];\nconst HORIZONTAL_ALIGNMENTS = ['left', 'right', 'center'];\n\nconst ALIGNMENTS = {\n 'left': VERTICAL_ALIGNMENTS,\n 'right': VERTICAL_ALIGNMENTS,\n 'top': HORIZONTAL_ALIGNMENTS,\n 'bottom': HORIZONTAL_ALIGNMENTS\n}\n\nfunction nextItem(item, array) {\n var currentIdx = array.indexOf(item);\n if(currentIdx === array.length - 1) {\n return array[0];\n } else {\n return array[currentIdx + 1];\n }\n}\n\n\nclass Positionable extends Plugin {\n /**\n * Abstract class encapsulating the tether-like explicit positioning logic\n * including repositioning based on overlap.\n * Expects classes to define defaults for vOffset, hOffset, position,\n * alignment, allowOverlap, and allowBottomOverlap. They can do this by\n * extending the defaults, or (for now recommended due to the way docs are\n * generated) by explicitly declaring them.\n *\n **/\n\n _init() {\n this.triedPositions = {};\n this.position = this.options.position === 'auto' ? this._getDefaultPosition() : this.options.position;\n this.alignment = this.options.alignment === 'auto' ? this._getDefaultAlignment() : this.options.alignment;\n this.originalPosition = this.position;\n this.originalAlignment = this.alignment;\n }\n\n _getDefaultPosition () {\n return 'bottom';\n }\n\n _getDefaultAlignment() {\n switch(this.position) {\n case 'bottom':\n case 'top':\n return Rtl() ? 'right' : 'left';\n case 'left':\n case 'right':\n return 'bottom';\n }\n }\n\n /**\n * Adjusts the positionable possible positions by iterating through alignments\n * and positions.\n * @function\n * @private\n */\n _reposition() {\n if(this._alignmentsExhausted(this.position)) {\n this.position = nextItem(this.position, POSITIONS);\n this.alignment = ALIGNMENTS[this.position][0];\n } else {\n this._realign();\n }\n }\n\n /**\n * Adjusts the dropdown pane possible positions by iterating through alignments\n * on the current position.\n * @function\n * @private\n */\n _realign() {\n this._addTriedPosition(this.position, this.alignment)\n this.alignment = nextItem(this.alignment, ALIGNMENTS[this.position])\n }\n\n _addTriedPosition(position, alignment) {\n this.triedPositions[position] = this.triedPositions[position] || []\n this.triedPositions[position].push(alignment);\n }\n\n _positionsExhausted() {\n var isExhausted = true;\n for(var i = 0; i < POSITIONS.length; i++) {\n isExhausted = isExhausted && this._alignmentsExhausted(POSITIONS[i]);\n }\n return isExhausted;\n }\n\n _alignmentsExhausted(position) {\n return this.triedPositions[position] && this.triedPositions[position].length === ALIGNMENTS[position].length;\n }\n\n\n // When we're trying to center, we don't want to apply offset that's going to\n // take us just off center, so wrap around to return 0 for the appropriate\n // offset in those alignments. TODO: Figure out if we want to make this\n // configurable behavior... it feels more intuitive, especially for tooltips, but\n // it's possible someone might actually want to start from center and then nudge\n // slightly off.\n _getVOffset() {\n return this.options.vOffset;\n }\n\n _getHOffset() {\n return this.options.hOffset;\n }\n\n _setPosition($anchor, $element, $parent) {\n if($anchor.attr('aria-expanded') === 'false'){ return false; }\n\n if (!this.options.allowOverlap) {\n // restore original position & alignment before checking overlap\n this.position = this.originalPosition;\n this.alignment = this.originalAlignment;\n }\n\n $element.offset(Box.GetExplicitOffsets($element, $anchor, this.position, this.alignment, this._getVOffset(), this._getHOffset()));\n\n if(!this.options.allowOverlap) {\n var minOverlap = 100000000;\n // default coordinates to how we start, in case we can't figure out better\n var minCoordinates = {position: this.position, alignment: this.alignment};\n while(!this._positionsExhausted()) {\n let overlap = Box.OverlapArea($element, $parent, false, false, this.options.allowBottomOverlap);\n if(overlap === 0) {\n return;\n }\n\n if(overlap < minOverlap) {\n minOverlap = overlap;\n minCoordinates = {position: this.position, alignment: this.alignment};\n }\n\n this._reposition();\n\n $element.offset(Box.GetExplicitOffsets($element, $anchor, this.position, this.alignment, this._getVOffset(), this._getHOffset()));\n }\n // If we get through the entire loop, there was no non-overlapping\n // position available. Pick the version with least overlap.\n this.position = minCoordinates.position;\n this.alignment = minCoordinates.alignment;\n $element.offset(Box.GetExplicitOffsets($element, $anchor, this.position, this.alignment, this._getVOffset(), this._getHOffset()));\n }\n }\n\n}\n\nPositionable.defaults = {\n /**\n * Position of positionable relative to anchor. Can be left, right, bottom, top, or auto.\n * @option\n * @type {string}\n * @default 'auto'\n */\n position: 'auto',\n /**\n * Alignment of positionable relative to anchor. Can be left, right, bottom, top, center, or auto.\n * @option\n * @type {string}\n * @default 'auto'\n */\n alignment: 'auto',\n /**\n * Allow overlap of container/window. If false, dropdown positionable first\n * try to position as defined by data-position and data-alignment, but\n * reposition if it would cause an overflow.\n * @option\n * @type {boolean}\n * @default false\n */\n allowOverlap: false,\n /**\n * Allow overlap of only the bottom of the container. This is the most common\n * behavior for dropdowns, allowing the dropdown to extend the bottom of the\n * screen but not otherwise influence or break out of the container.\n * @option\n * @type {boolean}\n * @default true\n */\n allowBottomOverlap: true,\n /**\n * Number of pixels the positionable should be separated vertically from anchor\n * @option\n * @type {number}\n * @default 0\n */\n vOffset: 0,\n /**\n * Number of pixels the positionable should be separated horizontally from anchor\n * @option\n * @type {number}\n * @default 0\n */\n hOffset: 0,\n}\n\nexport {Positionable};\n","import $ from 'jquery';\nimport { transitionend } from './foundation.core.utils';\n\n/**\n * Motion module.\n * @module foundation.motion\n */\n\nconst initClasses = ['mui-enter', 'mui-leave'];\nconst activeClasses = ['mui-enter-active', 'mui-leave-active'];\n\nconst Motion = {\n animateIn: function(element, animation, cb) {\n animate(true, element, animation, cb);\n },\n\n animateOut: function(element, animation, cb) {\n animate(false, element, animation, cb);\n }\n}\n\nfunction Move(duration, elem, fn){\n var anim, prog, start = null;\n\n if (duration === 0) {\n fn.apply(elem);\n elem.trigger('finished.zf.animate', [elem]).triggerHandler('finished.zf.animate', [elem]);\n return;\n }\n\n function move(ts){\n if(!start) start = ts;\n prog = ts - start;\n fn.apply(elem);\n\n if(prog < duration){ anim = window.requestAnimationFrame(move, elem); }\n else{\n window.cancelAnimationFrame(anim);\n elem.trigger('finished.zf.animate', [elem]).triggerHandler('finished.zf.animate', [elem]);\n }\n }\n anim = window.requestAnimationFrame(move);\n}\n\n/**\n * Animates an element in or out using a CSS transition class.\n * @function\n * @private\n * @param {Boolean} isIn - Defines if the animation is in or out.\n * @param {Object} element - jQuery or HTML object to animate.\n * @param {String} animation - CSS class to use.\n * @param {Function} cb - Callback to run when animation is finished.\n */\nfunction animate(isIn, element, animation, cb) {\n element = $(element).eq(0);\n\n if (!element.length) return;\n\n var initClass = isIn ? initClasses[0] : initClasses[1];\n var activeClass = isIn ? activeClasses[0] : activeClasses[1];\n\n // Set up the animation\n reset();\n\n element\n .addClass(animation)\n .css('transition', 'none');\n\n requestAnimationFrame(() => {\n element.addClass(initClass);\n if (isIn) element.show();\n });\n\n // Start the animation\n requestAnimationFrame(() => {\n // will trigger the browser to synchronously calculate the style and layout\n // also called reflow or layout thrashing\n // see https://gist.github.com/paulirish/5d52fb081b3570c81e3a\n element[0].offsetWidth;\n element\n .css('transition', '')\n .addClass(activeClass);\n });\n\n // Clean up the animation when it finishes\n element.one(transitionend(element), finish);\n\n // Hides the element (for out animations), resets the element, and runs a callback\n function finish() {\n if (!isIn) element.hide();\n reset();\n if (cb) cb.apply(element);\n }\n\n // Resets transitions and removes motion-specific classes\n function reset() {\n element[0].style.transitionDuration = 0;\n element.removeClass(`${initClass} ${activeClass} ${animation}`);\n }\n}\n\nexport { Move, Motion };\n\n","import $ from 'jquery';\nimport { onLoad } from './foundation.core.utils';\nimport { Motion } from './foundation.util.motion';\n\nconst MutationObserver = (function () {\n var prefixes = ['WebKit', 'Moz', 'O', 'Ms', ''];\n for (var i=0; i < prefixes.length; i++) {\n if (`${prefixes[i]}MutationObserver` in window) {\n return window[`${prefixes[i]}MutationObserver`];\n }\n }\n return false;\n})();\n\nconst triggers = (el, type) => {\n el.data(type).split(' ').forEach(id => {\n $(`#${id}`)[ type === 'close' ? 'trigger' : 'triggerHandler'](`${type}.zf.trigger`, [el]);\n });\n};\n\nvar Triggers = {\n Listeners: {\n Basic: {},\n Global: {}\n },\n Initializers: {}\n}\n\nTriggers.Listeners.Basic = {\n openListener: function() {\n triggers($(this), 'open');\n },\n closeListener: function() {\n let id = $(this).data('close');\n if (id) {\n triggers($(this), 'close');\n }\n else {\n $(this).trigger('close.zf.trigger');\n }\n },\n toggleListener: function() {\n let id = $(this).data('toggle');\n if (id) {\n triggers($(this), 'toggle');\n } else {\n $(this).trigger('toggle.zf.trigger');\n }\n },\n closeableListener: function(e) {\n let animation = $(this).data('closable');\n\n // Only close the first closable element. See https://git.io/zf-7833\n e.stopPropagation();\n\n if(animation !== ''){\n Motion.animateOut($(this), animation, function() {\n $(this).trigger('closed.zf');\n });\n }else{\n $(this).fadeOut().trigger('closed.zf');\n }\n },\n toggleFocusListener: function() {\n let id = $(this).data('toggle-focus');\n $(`#${id}`).triggerHandler('toggle.zf.trigger', [$(this)]);\n }\n};\n\n// Elements with [data-open] will reveal a plugin that supports it when clicked.\nTriggers.Initializers.addOpenListener = ($elem) => {\n $elem.off('click.zf.trigger', Triggers.Listeners.Basic.openListener);\n $elem.on('click.zf.trigger', '[data-open]', Triggers.Listeners.Basic.openListener);\n}\n\n// Elements with [data-close] will close a plugin that supports it when clicked.\n// If used without a value on [data-close], the event will bubble, allowing it to close a parent component.\nTriggers.Initializers.addCloseListener = ($elem) => {\n $elem.off('click.zf.trigger', Triggers.Listeners.Basic.closeListener);\n $elem.on('click.zf.trigger', '[data-close]', Triggers.Listeners.Basic.closeListener);\n}\n\n// Elements with [data-toggle] will toggle a plugin that supports it when clicked.\nTriggers.Initializers.addToggleListener = ($elem) => {\n $elem.off('click.zf.trigger', Triggers.Listeners.Basic.toggleListener);\n $elem.on('click.zf.trigger', '[data-toggle]', Triggers.Listeners.Basic.toggleListener);\n}\n\n// Elements with [data-closable] will respond to close.zf.trigger events.\nTriggers.Initializers.addCloseableListener = ($elem) => {\n $elem.off('close.zf.trigger', Triggers.Listeners.Basic.closeableListener);\n $elem.on('close.zf.trigger', '[data-closeable], [data-closable]', Triggers.Listeners.Basic.closeableListener);\n}\n\n// Elements with [data-toggle-focus] will respond to coming in and out of focus\nTriggers.Initializers.addToggleFocusListener = ($elem) => {\n $elem.off('focus.zf.trigger blur.zf.trigger', Triggers.Listeners.Basic.toggleFocusListener);\n $elem.on('focus.zf.trigger blur.zf.trigger', '[data-toggle-focus]', Triggers.Listeners.Basic.toggleFocusListener);\n}\n\n\n\n// More Global/complex listeners and triggers\nTriggers.Listeners.Global = {\n resizeListener: function($nodes) {\n if(!MutationObserver){//fallback for IE 9\n $nodes.each(function(){\n $(this).triggerHandler('resizeme.zf.trigger');\n });\n }\n //trigger all listening elements and signal a resize event\n $nodes.attr('data-events', \"resize\");\n },\n scrollListener: function($nodes) {\n if(!MutationObserver){//fallback for IE 9\n $nodes.each(function(){\n $(this).triggerHandler('scrollme.zf.trigger');\n });\n }\n //trigger all listening elements and signal a scroll event\n $nodes.attr('data-events', \"scroll\");\n },\n closeMeListener: function(e, pluginId){\n let plugin = e.namespace.split('.')[0];\n let plugins = $(`[data-${plugin}]`).not(`[data-yeti-box=\"${pluginId}\"]`);\n\n plugins.each(function(){\n let _this = $(this);\n _this.triggerHandler('close.zf.trigger', [_this]);\n });\n }\n}\n\n// Global, parses whole document.\nTriggers.Initializers.addClosemeListener = function(pluginName) {\n var yetiBoxes = $('[data-yeti-box]'),\n plugNames = ['dropdown', 'tooltip', 'reveal'];\n\n if(pluginName){\n if(typeof pluginName === 'string'){\n plugNames.push(pluginName);\n }else if(typeof pluginName === 'object' && typeof pluginName[0] === 'string'){\n plugNames = plugNames.concat(pluginName);\n }else{\n console.error('Plugin names must be strings');\n }\n }\n if(yetiBoxes.length){\n let listeners = plugNames.map((name) => {\n return `closeme.zf.${name}`;\n }).join(' ');\n\n $(window).off(listeners).on(listeners, Triggers.Listeners.Global.closeMeListener);\n }\n}\n\nfunction debounceGlobalListener(debounce, trigger, listener) {\n let timer, args = Array.prototype.slice.call(arguments, 3);\n $(window).on(trigger, function() {\n if (timer) { clearTimeout(timer); }\n timer = setTimeout(function(){\n listener.apply(null, args);\n }, debounce || 10); //default time to emit scroll event\n });\n}\n\nTriggers.Initializers.addResizeListener = function(debounce){\n let $nodes = $('[data-resize]');\n if($nodes.length){\n debounceGlobalListener(debounce, 'resize.zf.trigger', Triggers.Listeners.Global.resizeListener, $nodes);\n }\n}\n\nTriggers.Initializers.addScrollListener = function(debounce){\n let $nodes = $('[data-scroll]');\n if($nodes.length){\n debounceGlobalListener(debounce, 'scroll.zf.trigger', Triggers.Listeners.Global.scrollListener, $nodes);\n }\n}\n\nTriggers.Initializers.addMutationEventsListener = function($elem) {\n if(!MutationObserver){ return false; }\n let $nodes = $elem.find('[data-resize], [data-scroll], [data-mutate]');\n\n //element callback\n var listeningElementsMutation = function (mutationRecordsList) {\n var $target = $(mutationRecordsList[0].target);\n\n //trigger the event handler for the element depending on type\n switch (mutationRecordsList[0].type) {\n case \"attributes\":\n if ($target.attr(\"data-events\") === \"scroll\" && mutationRecordsList[0].attributeName === \"data-events\") {\n $target.triggerHandler('scrollme.zf.trigger', [$target, window.pageYOffset]);\n }\n if ($target.attr(\"data-events\") === \"resize\" && mutationRecordsList[0].attributeName === \"data-events\") {\n $target.triggerHandler('resizeme.zf.trigger', [$target]);\n }\n if (mutationRecordsList[0].attributeName === \"style\") {\n $target.closest(\"[data-mutate]\").attr(\"data-events\",\"mutate\");\n $target.closest(\"[data-mutate]\").triggerHandler('mutateme.zf.trigger', [$target.closest(\"[data-mutate]\")]);\n }\n break;\n\n case \"childList\":\n $target.closest(\"[data-mutate]\").attr(\"data-events\",\"mutate\");\n $target.closest(\"[data-mutate]\").triggerHandler('mutateme.zf.trigger', [$target.closest(\"[data-mutate]\")]);\n break;\n\n default:\n return false;\n //nothing\n }\n };\n\n if ($nodes.length) {\n //for each element that needs to listen for resizing, scrolling, or mutation add a single observer\n for (var i = 0; i <= $nodes.length - 1; i++) {\n var elementObserver = new MutationObserver(listeningElementsMutation);\n elementObserver.observe($nodes[i], { attributes: true, childList: true, characterData: false, subtree: true, attributeFilter: [\"data-events\", \"style\"] });\n }\n }\n}\n\nTriggers.Initializers.addSimpleListeners = function() {\n let $document = $(document);\n\n Triggers.Initializers.addOpenListener($document);\n Triggers.Initializers.addCloseListener($document);\n Triggers.Initializers.addToggleListener($document);\n Triggers.Initializers.addCloseableListener($document);\n Triggers.Initializers.addToggleFocusListener($document);\n\n}\n\nTriggers.Initializers.addGlobalListeners = function() {\n let $document = $(document);\n Triggers.Initializers.addMutationEventsListener($document);\n Triggers.Initializers.addResizeListener(250);\n Triggers.Initializers.addScrollListener();\n Triggers.Initializers.addClosemeListener();\n}\n\n\nTriggers.init = function (__, Foundation) {\n onLoad($(window), function () {\n if ($.triggersInitialized !== true) {\n Triggers.Initializers.addSimpleListeners();\n Triggers.Initializers.addGlobalListeners();\n $.triggersInitialized = true;\n }\n });\n\n if(Foundation) {\n Foundation.Triggers = Triggers;\n // Legacy included to be backwards compatible for now.\n Foundation.IHearYou = Triggers.Initializers.addGlobalListeners\n }\n}\n\nexport {Triggers};\n","//**************************************************\n//**Work inspired by multiple jquery swipe plugins**\n//**Done by Yohai Ararat ***************************\n//**************************************************\n\nimport $ from 'jquery';\n\nvar Touch = {};\n\nvar startPosX,\n startTime,\n elapsedTime,\n startEvent,\n isMoving = false,\n didMoved = false;\n\nfunction onTouchEnd(e) {\n this.removeEventListener('touchmove', onTouchMove);\n this.removeEventListener('touchend', onTouchEnd);\n\n // If the touch did not move, consider it as a \"tap\"\n if (!didMoved) {\n var tapEvent = $.Event('tap', startEvent || e);\n $(this).trigger(tapEvent);\n }\n\n startEvent = null;\n isMoving = false;\n didMoved = false;\n}\n\nfunction onTouchMove(e) {\n if (true === $.spotSwipe.preventDefault) { e.preventDefault(); }\n\n if(isMoving) {\n var x = e.touches[0].pageX;\n // var y = e.touches[0].pageY;\n var dx = startPosX - x;\n // var dy = startPosY - y;\n var dir;\n didMoved = true;\n elapsedTime = new Date().getTime() - startTime;\n if(Math.abs(dx) >= $.spotSwipe.moveThreshold && elapsedTime <= $.spotSwipe.timeThreshold) {\n dir = dx > 0 ? 'left' : 'right';\n }\n // else if(Math.abs(dy) >= $.spotSwipe.moveThreshold && elapsedTime <= $.spotSwipe.timeThreshold) {\n // dir = dy > 0 ? 'down' : 'up';\n // }\n if(dir) {\n e.preventDefault();\n onTouchEnd.apply(this, arguments);\n $(this)\n .trigger($.Event('swipe', Object.assign({}, e)), dir)\n .trigger($.Event(`swipe${dir}`, Object.assign({}, e)));\n }\n }\n\n}\n\nfunction onTouchStart(e) {\n\n if (e.touches.length === 1) {\n startPosX = e.touches[0].pageX;\n startEvent = e;\n isMoving = true;\n didMoved = false;\n startTime = new Date().getTime();\n this.addEventListener('touchmove', onTouchMove, { passive : true === $.spotSwipe.preventDefault });\n this.addEventListener('touchend', onTouchEnd, false);\n }\n}\n\nfunction init() {\n this.addEventListener && this.addEventListener('touchstart', onTouchStart, { passive : true });\n}\n\n// function teardown() {\n// this.removeEventListener('touchstart', onTouchStart);\n// }\n\nclass SpotSwipe {\n constructor() {\n this.version = '1.0.0';\n this.enabled = 'ontouchstart' in document.documentElement;\n this.preventDefault = false;\n this.moveThreshold = 75;\n this.timeThreshold = 200;\n this._init();\n }\n\n _init() {\n $.event.special.swipe = { setup: init };\n $.event.special.tap = { setup: init };\n\n $.each(['left', 'up', 'down', 'right'], function () {\n $.event.special[`swipe${this}`] = { setup: function(){\n $(this).on('swipe', $.noop);\n } };\n });\n }\n}\n\n/****************************************************\n * As far as I can tell, both setupSpotSwipe and *\n * setupTouchHandler should be idempotent, *\n * because they directly replace functions & *\n * values, and do not add event handlers directly. *\n ****************************************************/\n\nTouch.setupSpotSwipe = function() {\n $.spotSwipe = new SpotSwipe($);\n};\n\n/****************************************************\n * Method for adding pseudo drag events to elements *\n ***************************************************/\nTouch.setupTouchHandler = function() {\n $.fn.addTouch = function(){\n this.each(function(i, el){\n $(el).bind('touchstart touchmove touchend touchcancel', function(event) {\n //we pass the original event object because the jQuery event\n //object is normalized to w3c specs and does not provide the TouchList\n handleTouch(event);\n });\n });\n\n var handleTouch = function(event) {\n var touches = event.changedTouches,\n first = touches[0],\n eventTypes = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup'\n },\n type = eventTypes[event.type],\n simulatedEvent\n ;\n\n if('MouseEvent' in window && typeof window.MouseEvent === 'function') {\n simulatedEvent = new window.MouseEvent(type, {\n 'bubbles': true,\n 'cancelable': true,\n 'screenX': first.screenX,\n 'screenY': first.screenY,\n 'clientX': first.clientX,\n 'clientY': first.clientY\n });\n } else {\n simulatedEvent = document.createEvent('MouseEvent');\n simulatedEvent.initMouseEvent(type, true, true, window, 1, first.screenX, first.screenY, first.clientX, first.clientY, false, false, false, false, 0/*left*/, null);\n }\n first.target.dispatchEvent(simulatedEvent);\n };\n };\n};\n\nTouch.init = function () {\n if(typeof($.spotSwipe) === 'undefined') {\n Touch.setupSpotSwipe($);\n Touch.setupTouchHandler($);\n }\n};\n\nexport {Touch};\n","import $ from 'jquery';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { GetYoDigits, ignoreMousedisappear } from './foundation.core.utils';\nimport { Positionable } from './foundation.positionable';\n\nimport { Triggers } from './foundation.util.triggers';\nimport { Touch } from './foundation.util.touch'\n\n/**\n * Dropdown module.\n * @module foundation.dropdown\n * @requires foundation.util.keyboard\n * @requires foundation.util.box\n * @requires foundation.util.touch\n * @requires foundation.util.triggers\n */\nclass Dropdown extends Positionable {\n /**\n * Creates a new instance of a dropdown.\n * @class\n * @name Dropdown\n * @param {jQuery} element - jQuery object to make into a dropdown.\n * Object should be of the dropdown panel, rather than its anchor.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Dropdown.defaults, this.$element.data(), options);\n this.className = 'Dropdown'; // ie9 back compat\n\n // Touch and Triggers init are idempotent, just need to make sure they are initialized\n Touch.init($);\n Triggers.init($);\n\n this._init();\n\n Keyboard.register('Dropdown', {\n 'ENTER': 'toggle',\n 'SPACE': 'toggle',\n 'ESCAPE': 'close'\n });\n }\n\n /**\n * Initializes the plugin by setting/checking options and attributes, adding helper variables, and saving the anchor.\n * @function\n * @private\n */\n _init() {\n var $id = this.$element.attr('id');\n\n this.$anchors = $(`[data-toggle=\"${$id}\"]`).length ? $(`[data-toggle=\"${$id}\"]`) : $(`[data-open=\"${$id}\"]`);\n this.$anchors.attr({\n 'aria-controls': $id,\n 'data-is-focus': false,\n 'data-yeti-box': $id,\n 'aria-haspopup': true,\n 'aria-expanded': false\n });\n\n this._setCurrentAnchor(this.$anchors.first());\n\n if(this.options.parentClass){\n this.$parent = this.$element.parents('.' + this.options.parentClass);\n }else{\n this.$parent = null;\n }\n\n // Set [aria-labelledby] on the Dropdown if it is not set\n if (typeof this.$element.attr('aria-labelledby') === 'undefined') {\n // Get the anchor ID or create one\n if (typeof this.$currentAnchor.attr('id') === 'undefined') {\n this.$currentAnchor.attr('id', GetYoDigits(6, 'dd-anchor'));\n }\n\n this.$element.attr('aria-labelledby', this.$currentAnchor.attr('id'));\n }\n\n this.$element.attr({\n 'aria-hidden': 'true',\n 'data-yeti-box': $id,\n 'data-resize': $id,\n });\n\n super._init();\n this._events();\n }\n\n _getDefaultPosition() {\n // handle legacy classnames\n var position = this.$element[0].className.match(/(top|left|right|bottom)/g);\n if(position) {\n return position[0];\n } else {\n return 'bottom'\n }\n }\n\n _getDefaultAlignment() {\n // handle legacy float approach\n var horizontalPosition = /float-(\\S+)/.exec(this.$currentAnchor.attr('class'));\n if(horizontalPosition) {\n return horizontalPosition[1];\n }\n\n return super._getDefaultAlignment();\n }\n\n\n\n /**\n * Sets the position and orientation of the dropdown pane, checks for collisions if allow-overlap is not true.\n * Recursively calls itself if a collision is detected, with a new position class.\n * @function\n * @private\n */\n _setPosition() {\n this.$element.removeClass(`has-position-${this.position} has-alignment-${this.alignment}`);\n super._setPosition(this.$currentAnchor, this.$element, this.$parent);\n this.$element.addClass(`has-position-${this.position} has-alignment-${this.alignment}`);\n }\n\n /**\n * Make it a current anchor.\n * Current anchor as the reference for the position of Dropdown panes.\n * @param {HTML} el - DOM element of the anchor.\n * @function\n * @private\n */\n _setCurrentAnchor(el) {\n this.$currentAnchor = $(el);\n }\n\n /**\n * Adds event listeners to the element utilizing the triggers utility library.\n * @function\n * @private\n */\n _events() {\n var _this = this,\n hasTouch = 'ontouchstart' in window || (typeof window.ontouchstart !== 'undefined');\n\n this.$element.on({\n 'open.zf.trigger': this.open.bind(this),\n 'close.zf.trigger': this.close.bind(this),\n 'toggle.zf.trigger': this.toggle.bind(this),\n 'resizeme.zf.trigger': this._setPosition.bind(this)\n });\n\n this.$anchors.off('click.zf.trigger')\n .on('click.zf.trigger', function(e) {\n _this._setCurrentAnchor(this);\n\n if (\n // if forceFollow false, always prevent default action\n (_this.options.forceFollow === false) ||\n // if forceFollow true and hover option true, only prevent default action on 1st click\n // on 2nd click (dropown opened) the default action (e.g. follow a href) gets executed\n (hasTouch && _this.options.hover && _this.$element.hasClass('is-open') === false)\n ) {\n e.preventDefault();\n }\n });\n\n if(this.options.hover){\n this.$anchors.off('mouseenter.zf.dropdown mouseleave.zf.dropdown')\n .on('mouseenter.zf.dropdown', function(){\n _this._setCurrentAnchor(this);\n\n var bodyData = $('body').data();\n if(typeof(bodyData.whatinput) === 'undefined' || bodyData.whatinput === 'mouse') {\n clearTimeout(_this.timeout);\n _this.timeout = setTimeout(function(){\n _this.open();\n _this.$anchors.data('hover', true);\n }, _this.options.hoverDelay);\n }\n }).on('mouseleave.zf.dropdown', ignoreMousedisappear(function(){\n clearTimeout(_this.timeout);\n _this.timeout = setTimeout(function(){\n _this.close();\n _this.$anchors.data('hover', false);\n }, _this.options.hoverDelay);\n }));\n if(this.options.hoverPane){\n this.$element.off('mouseenter.zf.dropdown mouseleave.zf.dropdown')\n .on('mouseenter.zf.dropdown', function(){\n clearTimeout(_this.timeout);\n }).on('mouseleave.zf.dropdown', ignoreMousedisappear(function(){\n clearTimeout(_this.timeout);\n _this.timeout = setTimeout(function(){\n _this.close();\n _this.$anchors.data('hover', false);\n }, _this.options.hoverDelay);\n }));\n }\n }\n this.$anchors.add(this.$element).on('keydown.zf.dropdown', function(e) {\n\n var $target = $(this);\n\n Keyboard.handleKey(e, 'Dropdown', {\n open: function() {\n if ($target.is(_this.$anchors) && !$target.is('input, textarea')) {\n _this.open();\n _this.$element.attr('tabindex', -1).focus();\n e.preventDefault();\n }\n },\n close: function() {\n _this.close();\n _this.$anchors.focus();\n }\n });\n });\n }\n\n /**\n * Adds an event handler to the body to close any dropdowns on a click.\n * @function\n * @private\n */\n _addBodyHandler() {\n var $body = $(document.body).not(this.$element),\n _this = this;\n $body.off('click.zf.dropdown tap.zf.dropdown')\n .on('click.zf.dropdown tap.zf.dropdown', function (e) {\n if(_this.$anchors.is(e.target) || _this.$anchors.find(e.target).length) {\n return;\n }\n if(_this.$element.is(e.target) || _this.$element.find(e.target).length) {\n return;\n }\n _this.close();\n $body.off('click.zf.dropdown tap.zf.dropdown');\n });\n }\n\n /**\n * Opens the dropdown pane, and fires a bubbling event to close other dropdowns.\n * @function\n * @fires Dropdown#closeme\n * @fires Dropdown#show\n */\n open() {\n // var _this = this;\n /**\n * Fires to close other open dropdowns, typically when dropdown is opening\n * @event Dropdown#closeme\n */\n this.$element.trigger('closeme.zf.dropdown', this.$element.attr('id'));\n this.$anchors.addClass('hover')\n .attr({'aria-expanded': true});\n // this.$element/*.show()*/;\n\n this.$element.addClass('is-opening');\n this._setPosition();\n this.$element.removeClass('is-opening').addClass('is-open')\n .attr({'aria-hidden': false});\n\n if(this.options.autoFocus){\n var $focusable = Keyboard.findFocusable(this.$element);\n if($focusable.length){\n $focusable.eq(0).focus();\n }\n }\n\n if(this.options.closeOnClick){ this._addBodyHandler(); }\n\n if (this.options.trapFocus) {\n Keyboard.trapFocus(this.$element);\n }\n\n /**\n * Fires once the dropdown is visible.\n * @event Dropdown#show\n */\n this.$element.trigger('show.zf.dropdown', [this.$element]);\n }\n\n /**\n * Closes the open dropdown pane.\n * @function\n * @fires Dropdown#hide\n */\n close() {\n if(!this.$element.hasClass('is-open')){\n return false;\n }\n this.$element.removeClass('is-open')\n .attr({'aria-hidden': true});\n\n this.$anchors.removeClass('hover')\n .attr('aria-expanded', false);\n\n /**\n * Fires once the dropdown is no longer visible.\n * @event Dropdown#hide\n */\n this.$element.trigger('hide.zf.dropdown', [this.$element]);\n\n if (this.options.trapFocus) {\n Keyboard.releaseFocus(this.$element);\n }\n }\n\n /**\n * Toggles the dropdown pane's visibility.\n * @function\n */\n toggle() {\n if(this.$element.hasClass('is-open')){\n if(this.$anchors.data('hover')) return;\n this.close();\n }else{\n this.open();\n }\n }\n\n /**\n * Destroys the dropdown.\n * @function\n */\n _destroy() {\n this.$element.off('.zf.trigger').hide();\n this.$anchors.off('.zf.dropdown');\n $(document.body).off('click.zf.dropdown tap.zf.dropdown');\n\n }\n}\n\nDropdown.defaults = {\n /**\n * Class that designates bounding container of Dropdown (default: window)\n * @option\n * @type {?string}\n * @default null\n */\n parentClass: null,\n /**\n * Amount of time to delay opening a submenu on hover event.\n * @option\n * @type {number}\n * @default 250\n */\n hoverDelay: 250,\n /**\n * Allow submenus to open on hover events\n * @option\n * @type {boolean}\n * @default false\n */\n hover: false,\n /**\n * Don't close dropdown when hovering over dropdown pane\n * @option\n * @type {boolean}\n * @default false\n */\n hoverPane: false,\n /**\n * Number of pixels between the dropdown pane and the triggering element on open.\n * @option\n * @type {number}\n * @default 0\n */\n vOffset: 0,\n /**\n * Number of pixels between the dropdown pane and the triggering element on open.\n * @option\n * @type {number}\n * @default 0\n */\n hOffset: 0,\n /**\n * Position of dropdown. Can be left, right, bottom, top, or auto.\n * @option\n * @type {string}\n * @default 'auto'\n */\n position: 'auto',\n /**\n * Alignment of dropdown relative to anchor. Can be left, right, bottom, top, center, or auto.\n * @option\n * @type {string}\n * @default 'auto'\n */\n alignment: 'auto',\n /**\n * Allow overlap of container/window. If false, dropdown will first try to position as defined by data-position and data-alignment, but reposition if it would cause an overflow.\n * @option\n * @type {boolean}\n * @default false\n */\n allowOverlap: false,\n /**\n * Allow overlap of only the bottom of the container. This is the most common\n * behavior for dropdowns, allowing the dropdown to extend the bottom of the\n * screen but not otherwise influence or break out of the container.\n * @option\n * @type {boolean}\n * @default true\n */\n allowBottomOverlap: true,\n /**\n * Allow the plugin to trap focus to the dropdown pane if opened with keyboard commands.\n * @option\n * @type {boolean}\n * @default false\n */\n trapFocus: false,\n /**\n * Allow the plugin to set focus to the first focusable element within the pane, regardless of method of opening.\n * @option\n * @type {boolean}\n * @default false\n */\n autoFocus: false,\n /**\n * Allows a click on the body to close the dropdown.\n * @option\n * @type {boolean}\n * @default false\n */\n closeOnClick: false,\n /**\n * If true the default action of the toggle (e.g. follow a link with href) gets executed on click. If hover option is also true the default action gets prevented on first click for mobile / touch devices and executed on second click.\n * @option\n * @type {boolean}\n * @default true\n */\n forceFollow: true\n};\n\nexport {Dropdown};\n","import $ from 'jquery';\nimport { Plugin } from './foundation.core.plugin';\nimport { rtl as Rtl, ignoreMousedisappear } from './foundation.core.utils';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { Nest } from './foundation.util.nest';\nimport { Box } from './foundation.util.box';\nimport { Touch } from './foundation.util.touch'\n\n\n/**\n * DropdownMenu module.\n * @module foundation.dropdownMenu\n * @requires foundation.util.keyboard\n * @requires foundation.util.box\n * @requires foundation.util.nest\n * @requires foundation.util.touch\n */\n\nclass DropdownMenu extends Plugin {\n /**\n * Creates a new instance of DropdownMenu.\n * @class\n * @name DropdownMenu\n * @fires DropdownMenu#init\n * @param {jQuery} element - jQuery object to make into a dropdown menu.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, DropdownMenu.defaults, this.$element.data(), options);\n this.className = 'DropdownMenu'; // ie9 back compat\n\n Touch.init($); // Touch init is idempotent, we just need to make sure it's initialied.\n\n this._init();\n\n Keyboard.register('DropdownMenu', {\n 'ENTER': 'open',\n 'SPACE': 'open',\n 'ARROW_RIGHT': 'next',\n 'ARROW_UP': 'up',\n 'ARROW_DOWN': 'down',\n 'ARROW_LEFT': 'previous',\n 'ESCAPE': 'close'\n });\n }\n\n /**\n * Initializes the plugin, and calls _prepareMenu\n * @private\n * @function\n */\n _init() {\n Nest.Feather(this.$element, 'dropdown');\n\n var subs = this.$element.find('li.is-dropdown-submenu-parent');\n this.$element.children('.is-dropdown-submenu-parent').children('.is-dropdown-submenu').addClass('first-sub');\n\n this.$menuItems = this.$element.find('li[role=\"none\"]');\n this.$tabs = this.$element.children('li[role=\"none\"]');\n this.$tabs.find('ul.is-dropdown-submenu').addClass(this.options.verticalClass);\n\n if (this.options.alignment === 'auto') {\n if (this.$element.hasClass(this.options.rightClass) || Rtl() || this.$element.parents('.top-bar-right').is('*')) {\n this.options.alignment = 'right';\n subs.addClass('opens-left');\n } else {\n this.options.alignment = 'left';\n subs.addClass('opens-right');\n }\n } else {\n if (this.options.alignment === 'right') {\n subs.addClass('opens-left');\n } else {\n subs.addClass('opens-right');\n }\n }\n this.changed = false;\n this._events();\n };\n\n _isVertical() {\n return this.$tabs.css('display') === 'block' || this.$element.css('flex-direction') === 'column';\n }\n\n _isRtl() {\n return this.$element.hasClass('align-right') || (Rtl() && !this.$element.hasClass('align-left'));\n }\n\n /**\n * Adds event listeners to elements within the menu\n * @private\n * @function\n */\n _events() {\n var _this = this,\n hasTouch = 'ontouchstart' in window || (typeof window.ontouchstart !== 'undefined'),\n parClass = 'is-dropdown-submenu-parent';\n\n // used for onClick and in the keyboard handlers\n var handleClickFn = function(e) {\n var $elem = $(e.target).parentsUntil('ul', `.${parClass}`),\n hasSub = $elem.hasClass(parClass),\n hasClicked = $elem.attr('data-is-click') === 'true',\n $sub = $elem.children('.is-dropdown-submenu');\n\n if (hasSub) {\n if (hasClicked) {\n if (!_this.options.closeOnClick\n || (!_this.options.clickOpen && !hasTouch)\n || (_this.options.forceFollow && hasTouch)) {\n return;\n }\n e.stopImmediatePropagation();\n e.preventDefault();\n _this._hide($elem);\n }\n else {\n e.stopImmediatePropagation();\n e.preventDefault();\n _this._show($sub);\n $elem.add($elem.parentsUntil(_this.$element, `.${parClass}`)).attr('data-is-click', true);\n }\n }\n };\n\n if (this.options.clickOpen || hasTouch) {\n this.$menuItems.on('click.zf.dropdownMenu touchstart.zf.dropdownMenu', handleClickFn);\n }\n\n // Handle Leaf element Clicks\n if(_this.options.closeOnClickInside){\n this.$menuItems.on('click.zf.dropdownMenu', function() {\n var $elem = $(this),\n hasSub = $elem.hasClass(parClass);\n if(!hasSub){\n _this._hide();\n }\n });\n }\n\n if (hasTouch && this.options.disableHoverOnTouch) this.options.disableHover = true;\n\n if (!this.options.disableHover) {\n this.$menuItems.on('mouseenter.zf.dropdownMenu', function () {\n var $elem = $(this),\n hasSub = $elem.hasClass(parClass);\n\n if (hasSub) {\n clearTimeout($elem.data('_delay'));\n $elem.data('_delay', setTimeout(function () {\n _this._show($elem.children('.is-dropdown-submenu'));\n }, _this.options.hoverDelay));\n }\n }).on('mouseleave.zf.dropdownMenu', ignoreMousedisappear(function () {\n var $elem = $(this),\n hasSub = $elem.hasClass(parClass);\n if (hasSub && _this.options.autoclose) {\n if ($elem.attr('data-is-click') === 'true' && _this.options.clickOpen) { return false; }\n\n clearTimeout($elem.data('_delay'));\n $elem.data('_delay', setTimeout(function () {\n _this._hide($elem);\n }, _this.options.closingTime));\n }\n }));\n }\n this.$menuItems.on('keydown.zf.dropdownMenu', function(e) {\n var $element = $(e.target).parentsUntil('ul', '[role=\"none\"]'),\n isTab = _this.$tabs.index($element) > -1,\n $elements = isTab ? _this.$tabs : $element.siblings('li').add($element),\n $prevElement,\n $nextElement;\n\n $elements.each(function(i) {\n if ($(this).is($element)) {\n $prevElement = $elements.eq(i-1);\n $nextElement = $elements.eq(i+1);\n return;\n }\n });\n\n var nextSibling = function() {\n $nextElement.children('a:first').focus();\n e.preventDefault();\n }, prevSibling = function() {\n $prevElement.children('a:first').focus();\n e.preventDefault();\n }, openSub = function() {\n var $sub = $element.children('ul.is-dropdown-submenu');\n if ($sub.length) {\n _this._show($sub);\n $element.find('li > a:first').focus();\n e.preventDefault();\n } else { return; }\n }, closeSub = function() {\n //if ($element.is(':first-child')) {\n var close = $element.parent('ul').parent('li');\n close.children('a:first').focus();\n _this._hide(close);\n e.preventDefault();\n //}\n };\n var functions = {\n open: openSub,\n close: function() {\n _this._hide(_this.$element);\n _this.$menuItems.eq(0).children('a').focus(); // focus to first element\n e.preventDefault();\n }\n };\n\n if (isTab) {\n if (_this._isVertical()) { // vertical menu\n if (_this._isRtl()) { // right aligned\n $.extend(functions, {\n down: nextSibling,\n up: prevSibling,\n next: closeSub,\n previous: openSub\n });\n } else { // left aligned\n $.extend(functions, {\n down: nextSibling,\n up: prevSibling,\n next: openSub,\n previous: closeSub\n });\n }\n } else { // horizontal menu\n if (_this._isRtl()) { // right aligned\n $.extend(functions, {\n next: prevSibling,\n previous: nextSibling,\n down: openSub,\n up: closeSub\n });\n } else { // left aligned\n $.extend(functions, {\n next: nextSibling,\n previous: prevSibling,\n down: openSub,\n up: closeSub\n });\n }\n }\n } else { // not tabs -> one sub\n if (_this._isRtl()) { // right aligned\n $.extend(functions, {\n next: closeSub,\n previous: openSub,\n down: nextSibling,\n up: prevSibling\n });\n } else { // left aligned\n $.extend(functions, {\n next: openSub,\n previous: closeSub,\n down: nextSibling,\n up: prevSibling\n });\n }\n }\n Keyboard.handleKey(e, 'DropdownMenu', functions);\n\n });\n }\n\n /**\n * Adds an event handler to the body to close any dropdowns on a click.\n * @function\n * @private\n */\n _addBodyHandler() {\n const $body = $(document.body);\n this._removeBodyHandler();\n $body.on('click.zf.dropdownMenu tap.zf.dropdownMenu', (e) => {\n var isItself = !!$(e.target).closest(this.$element).length;\n if (isItself) return;\n\n this._hide();\n this._removeBodyHandler();\n });\n }\n\n /**\n * Remove the body event handler. See `_addBodyHandler`.\n * @function\n * @private\n */\n _removeBodyHandler() {\n $(document.body).off('click.zf.dropdownMenu tap.zf.dropdownMenu');\n }\n\n /**\n * Opens a dropdown pane, and checks for collisions first.\n * @param {jQuery} $sub - ul element that is a submenu to show\n * @function\n * @private\n * @fires DropdownMenu#show\n */\n _show($sub) {\n var idx = this.$tabs.index(this.$tabs.filter(function(i, el) {\n return $(el).find($sub).length > 0;\n }));\n var $sibs = $sub.parent('li.is-dropdown-submenu-parent').siblings('li.is-dropdown-submenu-parent');\n this._hide($sibs, idx);\n $sub.css('visibility', 'hidden').addClass('js-dropdown-active')\n .parent('li.is-dropdown-submenu-parent').addClass('is-active');\n var clear = Box.ImNotTouchingYou($sub, null, true);\n if (!clear) {\n var oldClass = this.options.alignment === 'left' ? '-right' : '-left',\n $parentLi = $sub.parent('.is-dropdown-submenu-parent');\n $parentLi.removeClass(`opens${oldClass}`).addClass(`opens-${this.options.alignment}`);\n clear = Box.ImNotTouchingYou($sub, null, true);\n if (!clear) {\n $parentLi.removeClass(`opens-${this.options.alignment}`).addClass('opens-inner');\n }\n this.changed = true;\n }\n $sub.css('visibility', '');\n if (this.options.closeOnClick) { this._addBodyHandler(); }\n /**\n * Fires when the new dropdown pane is visible.\n * @event DropdownMenu#show\n */\n this.$element.trigger('show.zf.dropdownMenu', [$sub]);\n }\n\n /**\n * Hides a single, currently open dropdown pane, if passed a parameter, otherwise, hides everything.\n * @function\n * @param {jQuery} $elem - element with a submenu to hide\n * @param {Number} idx - index of the $tabs collection to hide\n * @fires DropdownMenu#hide\n * @private\n */\n _hide($elem, idx) {\n var $toClose;\n if ($elem && $elem.length) {\n $toClose = $elem;\n } else if (typeof idx !== 'undefined') {\n $toClose = this.$tabs.not(function(i) {\n return i === idx;\n });\n }\n else {\n $toClose = this.$element;\n }\n var somethingToClose = $toClose.hasClass('is-active') || $toClose.find('.is-active').length > 0;\n\n if (somethingToClose) {\n var $activeItem = $toClose.find('li.is-active');\n $activeItem.add($toClose).attr({\n 'data-is-click': false\n }).removeClass('is-active');\n\n $toClose.find('ul.js-dropdown-active').removeClass('js-dropdown-active');\n\n if (this.changed || $toClose.find('opens-inner').length) {\n var oldClass = this.options.alignment === 'left' ? 'right' : 'left';\n $toClose.find('li.is-dropdown-submenu-parent').add($toClose)\n .removeClass(`opens-inner opens-${this.options.alignment}`)\n .addClass(`opens-${oldClass}`);\n this.changed = false;\n }\n\n clearTimeout($activeItem.data('_delay'));\n this._removeBodyHandler();\n\n /**\n * Fires when the open menus are closed.\n * @event DropdownMenu#hide\n */\n this.$element.trigger('hide.zf.dropdownMenu', [$toClose]);\n }\n }\n\n /**\n * Destroys the plugin.\n * @function\n */\n _destroy() {\n this.$menuItems.off('.zf.dropdownMenu').removeAttr('data-is-click')\n .removeClass('is-right-arrow is-left-arrow is-down-arrow opens-right opens-left opens-inner');\n $(document.body).off('.zf.dropdownMenu');\n Nest.Burn(this.$element, 'dropdown');\n }\n}\n\n/**\n * Default settings for plugin\n */\nDropdownMenu.defaults = {\n /**\n * Disallows hover events from opening submenus\n * @option\n * @type {boolean}\n * @default false\n */\n disableHover: false,\n /**\n * Disallows hover on touch devices\n * @option\n * @type {boolean}\n * @default true\n */\n disableHoverOnTouch: true,\n /**\n * Allow a submenu to automatically close on a mouseleave event, if not clicked open.\n * @option\n * @type {boolean}\n * @default true\n */\n autoclose: true,\n /**\n * Amount of time to delay opening a submenu on hover event.\n * @option\n * @type {number}\n * @default 50\n */\n hoverDelay: 50,\n /**\n * Allow a submenu to open/remain open on parent click event. Allows cursor to move away from menu.\n * @option\n * @type {boolean}\n * @default false\n */\n clickOpen: false,\n /**\n * Amount of time to delay closing a submenu on a mouseleave event.\n * @option\n * @type {number}\n * @default 500\n */\n\n closingTime: 500,\n /**\n * Position of the menu relative to what direction the submenus should open. Handled by JS. Can be `'auto'`, `'left'` or `'right'`.\n * @option\n * @type {string}\n * @default 'auto'\n */\n alignment: 'auto',\n /**\n * Allow clicks on the body to close any open submenus.\n * @option\n * @type {boolean}\n * @default true\n */\n closeOnClick: true,\n /**\n * Allow clicks on leaf anchor links to close any open submenus.\n * @option\n * @type {boolean}\n * @default true\n */\n closeOnClickInside: true,\n /**\n * Class applied to vertical oriented menus, Foundation default is `vertical`. Update this if using your own class.\n * @option\n * @type {string}\n * @default 'vertical'\n */\n verticalClass: 'vertical',\n /**\n * Class applied to right-side oriented menus, Foundation default is `align-right`. Update this if using your own class.\n * @option\n * @type {string}\n * @default 'align-right'\n */\n rightClass: 'align-right',\n /**\n * Boolean to force overide the clicking of links to perform default action, on second touch event for mobile.\n * @option\n * @type {boolean}\n * @default true\n */\n forceFollow: true\n};\n\nexport {DropdownMenu};\n","import $ from 'jquery';\n\n/**\n * Runs a callback function when images are fully loaded.\n * @param {Object} images - Image(s) to check if loaded.\n * @param {Func} callback - Function to execute when image is fully loaded.\n */\nfunction onImagesLoaded(images, callback){\n var unloaded = images.length;\n\n if (unloaded === 0) {\n callback();\n }\n\n images.each(function(){\n // Check if image is loaded\n if (this.complete && typeof this.naturalWidth !== 'undefined') {\n singleImageLoaded();\n }\n else {\n // If the above check failed, simulate loading on detached element.\n var image = new Image();\n // Still count image as loaded if it finalizes with an error.\n var events = \"load.zf.images error.zf.images\";\n $(image).one(events, function me(){\n // Unbind the event listeners. We're using 'one' but only one of the two events will have fired.\n $(this).off(events, me);\n singleImageLoaded();\n });\n image.src = $(this).attr('src');\n }\n });\n\n function singleImageLoaded() {\n unloaded--;\n if (unloaded === 0) {\n callback();\n }\n }\n}\n\nexport { onImagesLoaded };\n","import $ from 'jquery';\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { onImagesLoaded } from './foundation.util.imageLoader';\nimport { GetYoDigits } from './foundation.core.utils';\nimport { Plugin } from './foundation.core.plugin';\n\n/**\n * Equalizer module.\n * @module foundation.equalizer\n * @requires foundation.util.mediaQuery\n * @requires foundation.util.imageLoader if equalizer contains images\n */\n\nclass Equalizer extends Plugin {\n /**\n * Creates a new instance of Equalizer.\n * @class\n * @name Equalizer\n * @fires Equalizer#init\n * @param {Object} element - jQuery object to add the trigger to.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options){\n this.$element = element;\n this.options = $.extend({}, Equalizer.defaults, this.$element.data(), options);\n this.className = 'Equalizer'; // ie9 back compat\n\n this._init();\n }\n\n /**\n * Initializes the Equalizer plugin and calls functions to get equalizer functioning on load.\n * @private\n */\n _init() {\n var eqId = this.$element.attr('data-equalizer') || '';\n var $watched = this.$element.find(`[data-equalizer-watch=\"${eqId}\"]`);\n\n MediaQuery._init();\n\n this.$watched = $watched.length ? $watched : this.$element.find('[data-equalizer-watch]');\n this.$element.attr('data-resize', (eqId || GetYoDigits(6, 'eq')));\n this.$element.attr('data-mutate', (eqId || GetYoDigits(6, 'eq')));\n\n this.hasNested = this.$element.find('[data-equalizer]').length > 0;\n this.isNested = this.$element.parentsUntil(document.body, '[data-equalizer]').length > 0;\n this.isOn = false;\n this._bindHandler = {\n onResizeMeBound: this._onResizeMe.bind(this),\n onPostEqualizedBound: this._onPostEqualized.bind(this)\n };\n\n var imgs = this.$element.find('img');\n var tooSmall;\n if(this.options.equalizeOn){\n tooSmall = this._checkMQ();\n $(window).on('changed.zf.mediaquery', this._checkMQ.bind(this));\n }else{\n this._events();\n }\n if((typeof tooSmall !== 'undefined' && tooSmall === false) || typeof tooSmall === 'undefined'){\n if(imgs.length){\n onImagesLoaded(imgs, this._reflow.bind(this));\n }else{\n this._reflow();\n }\n }\n }\n\n /**\n * Removes event listeners if the breakpoint is too small.\n * @private\n */\n _pauseEvents() {\n this.isOn = false;\n this.$element.off({\n '.zf.equalizer': this._bindHandler.onPostEqualizedBound,\n 'resizeme.zf.trigger': this._bindHandler.onResizeMeBound,\n\t 'mutateme.zf.trigger': this._bindHandler.onResizeMeBound\n });\n }\n\n /**\n * function to handle $elements resizeme.zf.trigger, with bound this on _bindHandler.onResizeMeBound\n * @private\n */\n _onResizeMe() {\n this._reflow();\n }\n\n /**\n * function to handle $elements postequalized.zf.equalizer, with bound this on _bindHandler.onPostEqualizedBound\n * @private\n */\n _onPostEqualized(e) {\n if(e.target !== this.$element[0]){ this._reflow(); }\n }\n\n /**\n * Initializes events for Equalizer.\n * @private\n */\n _events() {\n this._pauseEvents();\n if(this.hasNested){\n this.$element.on('postequalized.zf.equalizer', this._bindHandler.onPostEqualizedBound);\n }else{\n this.$element.on('resizeme.zf.trigger', this._bindHandler.onResizeMeBound);\n\t this.$element.on('mutateme.zf.trigger', this._bindHandler.onResizeMeBound);\n }\n this.isOn = true;\n }\n\n /**\n * Checks the current breakpoint to the minimum required size.\n * @private\n */\n _checkMQ() {\n var tooSmall = !MediaQuery.is(this.options.equalizeOn);\n if(tooSmall){\n if(this.isOn){\n this._pauseEvents();\n this.$watched.css('height', 'auto');\n }\n }else{\n if(!this.isOn){\n this._events();\n }\n }\n return tooSmall;\n }\n\n /**\n * A noop version for the plugin\n * @private\n */\n _killswitch() {\n return;\n }\n\n /**\n * Calls necessary functions to update Equalizer upon DOM change\n * @private\n */\n _reflow() {\n if(!this.options.equalizeOnStack){\n if(this._isStacked()){\n this.$watched.css('height', 'auto');\n return false;\n }\n }\n if (this.options.equalizeByRow) {\n this.getHeightsByRow(this.applyHeightByRow.bind(this));\n }else{\n this.getHeights(this.applyHeight.bind(this));\n }\n }\n\n /**\n * Manually determines if the first 2 elements are *NOT* stacked.\n * @private\n */\n _isStacked() {\n if (!this.$watched[0] || !this.$watched[1]) {\n return true;\n }\n return this.$watched[0].getBoundingClientRect().top !== this.$watched[1].getBoundingClientRect().top;\n }\n\n /**\n * Finds the outer heights of children contained within an Equalizer parent and returns them in an array\n * @param {Function} cb - A non-optional callback to return the heights array to.\n * @returns {Array} heights - An array of heights of children within Equalizer container\n */\n getHeights(cb) {\n var heights = [];\n for(var i = 0, len = this.$watched.length; i < len; i++){\n this.$watched[i].style.height = 'auto';\n heights.push(this.$watched[i].offsetHeight);\n }\n cb(heights);\n }\n\n /**\n * Finds the outer heights of children contained within an Equalizer parent and returns them in an array\n * @param {Function} cb - A non-optional callback to return the heights array to.\n * @returns {Array} groups - An array of heights of children within Equalizer container grouped by row with element,height and max as last child\n */\n getHeightsByRow(cb) {\n var lastElTopOffset = (this.$watched.length ? this.$watched.first().offset().top : 0),\n groups = [],\n group = 0;\n //group by Row\n groups[group] = [];\n for(var i = 0, len = this.$watched.length; i < len; i++){\n this.$watched[i].style.height = 'auto';\n //maybe could use this.$watched[i].offsetTop\n var elOffsetTop = $(this.$watched[i]).offset().top;\n if (elOffsetTop !== lastElTopOffset) {\n group++;\n groups[group] = [];\n lastElTopOffset=elOffsetTop;\n }\n groups[group].push([this.$watched[i],this.$watched[i].offsetHeight]);\n }\n\n for (var j = 0, ln = groups.length; j < ln; j++) {\n var heights = $(groups[j]).map(function(){ return this[1]; }).get();\n var max = Math.max.apply(null, heights);\n groups[j].push(max);\n }\n cb(groups);\n }\n\n /**\n * Changes the CSS height property of each child in an Equalizer parent to match the tallest\n * @param {array} heights - An array of heights of children within Equalizer container\n * @fires Equalizer#preequalized\n * @fires Equalizer#postequalized\n */\n applyHeight(heights) {\n var max = Math.max.apply(null, heights);\n /**\n * Fires before the heights are applied\n * @event Equalizer#preequalized\n */\n this.$element.trigger('preequalized.zf.equalizer');\n\n this.$watched.css('height', max);\n\n /**\n * Fires when the heights have been applied\n * @event Equalizer#postequalized\n */\n this.$element.trigger('postequalized.zf.equalizer');\n }\n\n /**\n * Changes the CSS height property of each child in an Equalizer parent to match the tallest by row\n * @param {array} groups - An array of heights of children within Equalizer container grouped by row with element,height and max as last child\n * @fires Equalizer#preequalized\n * @fires Equalizer#preequalizedrow\n * @fires Equalizer#postequalizedrow\n * @fires Equalizer#postequalized\n */\n applyHeightByRow(groups) {\n /**\n * Fires before the heights are applied\n */\n this.$element.trigger('preequalized.zf.equalizer');\n for (var i = 0, len = groups.length; i < len ; i++) {\n var groupsILength = groups[i].length,\n max = groups[i][groupsILength - 1];\n if (groupsILength<=2) {\n $(groups[i][0][0]).css({'height':'auto'});\n continue;\n }\n /**\n * Fires before the heights per row are applied\n * @event Equalizer#preequalizedrow\n */\n this.$element.trigger('preequalizedrow.zf.equalizer');\n for (var j = 0, lenJ = (groupsILength-1); j < lenJ ; j++) {\n $(groups[i][j][0]).css({'height':max});\n }\n /**\n * Fires when the heights per row have been applied\n * @event Equalizer#postequalizedrow\n */\n this.$element.trigger('postequalizedrow.zf.equalizer');\n }\n /**\n * Fires when the heights have been applied\n */\n this.$element.trigger('postequalized.zf.equalizer');\n }\n\n /**\n * Destroys an instance of Equalizer.\n * @function\n */\n _destroy() {\n this._pauseEvents();\n this.$watched.css('height', 'auto');\n }\n}\n\n/**\n * Default settings for plugin\n */\nEqualizer.defaults = {\n /**\n * Enable height equalization when stacked on smaller screens.\n * @option\n * @type {boolean}\n * @default false\n */\n equalizeOnStack: false,\n /**\n * Enable height equalization row by row.\n * @option\n * @type {boolean}\n * @default false\n */\n equalizeByRow: false,\n /**\n * String representing the minimum breakpoint size the plugin should equalize heights on.\n * @option\n * @type {string}\n * @default ''\n */\n equalizeOn: ''\n};\n\nexport {Equalizer};\n","import $ from 'jquery';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { Nest } from './foundation.util.nest';\nimport { GetYoDigits, transitionend } from './foundation.core.utils';\nimport { Box } from './foundation.util.box';\nimport { Plugin } from './foundation.core.plugin';\n\n/**\n * Drilldown module.\n * @module foundation.drilldown\n * @requires foundation.util.keyboard\n * @requires foundation.util.nest\n * @requires foundation.util.box\n */\n\nclass Drilldown extends Plugin {\n /**\n * Creates a new instance of a drilldown menu.\n * @class\n * @name Drilldown\n * @param {jQuery} element - jQuery object to make into an accordion menu.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Drilldown.defaults, this.$element.data(), options);\n this.className = 'Drilldown'; // ie9 back compat\n\n this._init();\n\n Keyboard.register('Drilldown', {\n 'ENTER': 'open',\n 'SPACE': 'open',\n 'ARROW_RIGHT': 'next',\n 'ARROW_UP': 'up',\n 'ARROW_DOWN': 'down',\n 'ARROW_LEFT': 'previous',\n 'ESCAPE': 'close',\n });\n }\n\n /**\n * Initializes the drilldown by creating jQuery collections of elements\n * @private\n */\n _init() {\n Nest.Feather(this.$element, 'drilldown');\n\n if(this.options.autoApplyClass) {\n this.$element.addClass('drilldown');\n }\n\n this.$element.attr({\n 'aria-multiselectable': false\n });\n this.$submenuAnchors = this.$element.find('li.is-drilldown-submenu-parent').children('a');\n this.$submenus = this.$submenuAnchors.parent('li').children('[data-submenu]').attr('role', 'group');\n this.$menuItems = this.$element.find('li').not('.js-drilldown-back').find('a');\n\n // Set the main menu as current by default (unless a submenu is selected)\n // Used to set the wrapper height when the drilldown is closed/reopened from any (sub)menu\n this.$currentMenu = this.$element;\n\n this.$element.attr('data-mutate', (this.$element.attr('data-drilldown') || GetYoDigits(6, 'drilldown')));\n\n this._prepareMenu();\n this._registerEvents();\n\n this._keyboardEvents();\n }\n\n /**\n * prepares drilldown menu by setting attributes to links and elements\n * sets a min height to prevent content jumping\n * wraps the element if not already wrapped\n * @private\n * @function\n */\n _prepareMenu() {\n var _this = this;\n // if(!this.options.holdOpen){\n // this._menuLinkEvents();\n // }\n this.$submenuAnchors.each(function(){\n var $link = $(this);\n var $sub = $link.parent();\n if(_this.options.parentLink){\n $link.clone().prependTo($sub.children('[data-submenu]')).wrap('
  • ');\n }\n $link.data('savedHref', $link.attr('href')).removeAttr('href').attr('tabindex', 0);\n $link.children('[data-submenu]')\n .attr({\n 'aria-hidden': true,\n 'tabindex': 0,\n 'role': 'group'\n });\n _this._events($link);\n });\n this.$submenus.each(function(){\n var $menu = $(this),\n $back = $menu.find('.js-drilldown-back');\n if(!$back.length) {\n switch (_this.options.backButtonPosition) {\n case \"bottom\":\n $menu.append(_this.options.backButton);\n break;\n case \"top\":\n $menu.prepend(_this.options.backButton);\n break;\n default:\n console.error(\"Unsupported backButtonPosition value '\" + _this.options.backButtonPosition + \"'\");\n }\n }\n _this._back($menu);\n });\n\n this.$submenus.addClass('invisible');\n if(!this.options.autoHeight) {\n this.$submenus.addClass('drilldown-submenu-cover-previous');\n }\n\n // create a wrapper on element if it doesn't exist.\n if(!this.$element.parent().hasClass('is-drilldown')){\n this.$wrapper = $(this.options.wrapper).addClass('is-drilldown');\n if(this.options.animateHeight) this.$wrapper.addClass('animate-height');\n this.$element.wrap(this.$wrapper);\n }\n // set wrapper\n this.$wrapper = this.$element.parent();\n this.$wrapper.css(this._getMaxDims());\n }\n\n _resize() {\n this.$wrapper.css({'max-width': 'none', 'min-height': 'none'});\n // _getMaxDims has side effects (boo) but calling it should update all other necessary heights & widths\n this.$wrapper.css(this._getMaxDims());\n }\n\n /**\n * Adds event handlers to elements in the menu.\n * @function\n * @private\n * @param {jQuery} $elem - the current menu item to add handlers to.\n */\n _events($elem) {\n var _this = this;\n\n $elem.off('click.zf.drilldown')\n .on('click.zf.drilldown', function(e) {\n if($(e.target).parentsUntil('ul', 'li').hasClass('is-drilldown-submenu-parent')){\n e.preventDefault();\n }\n\n // if(e.target !== e.currentTarget.firstElementChild){\n // return false;\n // }\n _this._show($elem.parent('li'));\n\n if(_this.options.closeOnClick){\n var $body = $('body');\n $body.off('.zf.drilldown').on('click.zf.drilldown', function(ev) {\n if (ev.target === _this.$element[0] || $.contains(_this.$element[0], ev.target)) { return; }\n ev.preventDefault();\n _this._hideAll();\n $body.off('.zf.drilldown');\n });\n }\n });\n }\n\n /**\n * Adds event handlers to the menu element.\n * @function\n * @private\n */\n _registerEvents() {\n if(this.options.scrollTop){\n this._bindHandler = this._scrollTop.bind(this);\n this.$element.on('open.zf.drilldown hide.zf.drilldown close.zf.drilldown closed.zf.drilldown',this._bindHandler);\n }\n this.$element.on('mutateme.zf.trigger', this._resize.bind(this));\n }\n\n /**\n * Scroll to Top of Element or data-scroll-top-element\n * @function\n * @fires Drilldown#scrollme\n */\n _scrollTop() {\n var _this = this;\n var $scrollTopElement = _this.options.scrollTopElement !== ''?$(_this.options.scrollTopElement):_this.$element,\n scrollPos = parseInt($scrollTopElement.offset().top+_this.options.scrollTopOffset, 10);\n $('html, body').stop(true).animate({ scrollTop: scrollPos }, _this.options.animationDuration, _this.options.animationEasing,function(){\n /**\n * Fires after the menu has scrolled\n * @event Drilldown#scrollme\n */\n if(this===$('html')[0])_this.$element.trigger('scrollme.zf.drilldown');\n });\n }\n\n /**\n * Adds keydown event listener to `li`'s in the menu.\n * @private\n */\n _keyboardEvents() {\n var _this = this;\n\n this.$menuItems.add(this.$element.find('.js-drilldown-back > a, .is-submenu-parent-item > a')).on('keydown.zf.drilldown', function(e){\n var $element = $(this),\n $elements = $element.parent('li').parent('ul').children('li').children('a'),\n $prevElement,\n $nextElement;\n\n $elements.each(function(i) {\n if ($(this).is($element)) {\n $prevElement = $elements.eq(Math.max(0, i-1));\n $nextElement = $elements.eq(Math.min(i+1, $elements.length-1));\n return;\n }\n });\n\n Keyboard.handleKey(e, 'Drilldown', {\n next: function() {\n if ($element.is(_this.$submenuAnchors)) {\n _this._show($element.parent('li'));\n $element.parent('li').one(transitionend($element), function(){\n $element.parent('li').find('ul li a').not('.js-drilldown-back a').first().focus();\n });\n return true;\n }\n },\n previous: function() {\n _this._hide($element.parent('li').parent('ul'));\n $element.parent('li').parent('ul').one(transitionend($element), function(){\n setTimeout(function() {\n $element.parent('li').parent('ul').parent('li').children('a').first().focus();\n }, 1);\n });\n return true;\n },\n up: function() {\n $prevElement.focus();\n // Don't tap focus on first element in root ul\n return !$element.is(_this.$element.find('> li:first-child > a'));\n },\n down: function() {\n $nextElement.focus();\n // Don't tap focus on last element in root ul\n return !$element.is(_this.$element.find('> li:last-child > a'));\n },\n close: function() {\n // Don't close on element in root ul\n if (!$element.is(_this.$element.find('> li > a'))) {\n _this._hide($element.parent().parent());\n $element.parent().parent().siblings('a').focus();\n }\n },\n open: function() {\n if (_this.options.parentLink && $element.attr('href')) { // Link with href\n return false;\n } else if (!$element.is(_this.$menuItems)) { // not menu item means back button\n _this._hide($element.parent('li').parent('ul'));\n $element.parent('li').parent('ul').one(transitionend($element), function(){\n setTimeout(function() {\n $element.parent('li').parent('ul').parent('li').children('a').first().focus();\n }, 1);\n });\n return true;\n } else if ($element.is(_this.$submenuAnchors)) { // Sub menu item\n _this._show($element.parent('li'));\n $element.parent('li').one(transitionend($element), function(){\n $element.parent('li').find('ul li a').not('.js-drilldown-back a').first().focus();\n });\n return true;\n }\n },\n handled: function(preventDefault) {\n if (preventDefault) {\n e.preventDefault();\n }\n }\n });\n }); // end keyboardAccess\n }\n\n /**\n * Closes all open elements, and returns to root menu.\n * @function\n * @fires Drilldown#close\n * @fires Drilldown#closed\n */\n _hideAll() {\n var $elem = this.$element.find('.is-drilldown-submenu.is-active')\n $elem.addClass('is-closing');\n $elem.parent().closest('ul').removeClass('invisible');\n\n if (this.options.autoHeight) {\n const calcHeight = $elem.parent().closest('ul').data('calcHeight');\n this.$wrapper.css({ height: calcHeight });\n }\n\n /**\n * Fires when the menu is closing.\n * @event Drilldown#close\n */\n this.$element.trigger('close.zf.drilldown');\n\n $elem.one(transitionend($elem), () => {\n $elem.removeClass('is-active is-closing');\n\n /**\n * Fires when the menu is fully closed.\n * @event Drilldown#closed\n */\n this.$element.trigger('closed.zf.drilldown');\n });\n }\n\n /**\n * Adds event listener for each `back` button, and closes open menus.\n * @function\n * @fires Drilldown#back\n * @param {jQuery} $elem - the current sub-menu to add `back` event.\n */\n _back($elem) {\n var _this = this;\n $elem.off('click.zf.drilldown');\n $elem.children('.js-drilldown-back')\n .on('click.zf.drilldown', function() {\n _this._hide($elem);\n\n // If there is a parent submenu, call show\n let parentSubMenu = $elem.parent('li').parent('ul').parent('li');\n if (parentSubMenu.length) {\n _this._show(parentSubMenu);\n }\n else {\n _this.$currentMenu = _this.$element;\n }\n });\n }\n\n /**\n * Adds event listener to menu items w/o submenus to close open menus on click.\n * @function\n * @private\n */\n _menuLinkEvents() {\n var _this = this;\n this.$menuItems.not('.is-drilldown-submenu-parent')\n .off('click.zf.drilldown')\n .on('click.zf.drilldown', function() {\n setTimeout(function() {\n _this._hideAll();\n }, 0);\n });\n }\n\n /**\n * Sets the CSS classes for submenu to show it.\n * @function\n * @private\n * @param {jQuery} $elem - the target submenu (`ul` tag)\n * @param {boolean} trigger - trigger drilldown event\n */\n _setShowSubMenuClasses($elem, trigger) {\n $elem.addClass('is-active').removeClass('invisible').attr('aria-hidden', false);\n $elem.parent('li').attr('aria-expanded', true);\n if (trigger === true) {\n this.$element.trigger('open.zf.drilldown', [$elem]);\n }\n }\n\n /**\n * Sets the CSS classes for submenu to hide it.\n * @function\n * @private\n * @param {jQuery} $elem - the target submenu (`ul` tag)\n * @param {boolean} trigger - trigger drilldown event\n */\n _setHideSubMenuClasses($elem, trigger) {\n $elem.removeClass('is-active').addClass('invisible').attr('aria-hidden', true);\n $elem.parent('li').attr('aria-expanded', false);\n if (trigger === true) {\n $elem.trigger('hide.zf.drilldown', [$elem]);\n }\n }\n\n /**\n * Opens a specific drilldown (sub)menu no matter which (sub)menu in it is currently visible.\n * Compared to _show() this lets you jump into any submenu without clicking through every submenu on the way to it.\n * @function\n * @fires Drilldown#open\n * @param {jQuery} $elem - the target (sub)menu (`ul` tag)\n * @param {boolean} autoFocus - if true the first link in the target (sub)menu gets auto focused\n */\n _showMenu($elem, autoFocus) {\n\n var _this = this;\n\n // Reset drilldown\n var $expandedSubmenus = this.$element.find('li[aria-expanded=\"true\"] > ul[data-submenu]');\n $expandedSubmenus.each(function() {\n _this._setHideSubMenuClasses($(this));\n });\n\n // Save the menu as the currently displayed one.\n this.$currentMenu = $elem;\n\n // If target menu is root, focus first link & exit\n if ($elem.is('[data-drilldown]')) {\n if (autoFocus === true) $elem.find('li > a').first().focus();\n if (this.options.autoHeight) this.$wrapper.css('height', $elem.data('calcHeight'));\n return;\n }\n\n // Find all submenus on way to root incl. the element itself\n var $submenus = $elem.children().first().parentsUntil('[data-drilldown]', '[data-submenu]');\n\n // Open target menu and all submenus on its way to root\n $submenus.each(function(index) {\n\n // Update height of first child (target menu) if autoHeight option true\n if (index === 0 && _this.options.autoHeight) {\n _this.$wrapper.css('height', $(this).data('calcHeight'));\n }\n\n var isLastChild = index === $submenus.length - 1;\n\n // Add transitionsend listener to last child (root due to reverse order) to open target menu's first link\n // Last child makes sure the event gets always triggered even if going through several menus\n if (isLastChild === true) {\n $(this).one(transitionend($(this)), () => {\n if (autoFocus === true) {\n $elem.find('li > a').first().focus();\n }\n });\n }\n\n _this._setShowSubMenuClasses($(this), isLastChild);\n });\n }\n\n /**\n * Opens a submenu.\n * @function\n * @fires Drilldown#open\n * @param {jQuery} $elem - the current element with a submenu to open, i.e. the `li` tag.\n */\n _show($elem) {\n const $submenu = $elem.children('[data-submenu]');\n\n $elem.attr('aria-expanded', true);\n\n this.$currentMenu = $submenu;\n\n //hide drilldown parent menu when submenu is open\n // this removes it from the dom so that the tab key will take the user to the next visible element\n $elem.parent().closest('ul').addClass('invisible');\n\n // add visible class to submenu to override invisible class above\n $submenu.addClass('is-active visible').removeClass('invisible').attr('aria-hidden', false);\n\n if (this.options.autoHeight) {\n this.$wrapper.css({ height: $submenu.data('calcHeight') });\n }\n\n /**\n * Fires when the submenu has opened.\n * @event Drilldown#open\n */\n this.$element.trigger('open.zf.drilldown', [$elem]);\n }\n\n /**\n * Hides a submenu\n * @function\n * @fires Drilldown#hide\n * @param {jQuery} $elem - the current sub-menu to hide, i.e. the `ul` tag.\n */\n _hide($elem) {\n if(this.options.autoHeight) this.$wrapper.css({height:$elem.parent().closest('ul').data('calcHeight')});\n $elem.parent().closest('ul').removeClass('invisible');\n $elem.parent('li').attr('aria-expanded', false);\n $elem.attr('aria-hidden', true);\n $elem.addClass('is-closing')\n .one(transitionend($elem), function(){\n $elem.removeClass('is-active is-closing visible');\n $elem.blur().addClass('invisible');\n });\n /**\n * Fires when the submenu has closed.\n * @event Drilldown#hide\n */\n $elem.trigger('hide.zf.drilldown', [$elem]);\n }\n\n /**\n * Iterates through the nested menus to calculate the min-height, and max-width for the menu.\n * Prevents content jumping.\n * @function\n * @private\n */\n _getMaxDims() {\n var maxHeight = 0, result = {}, _this = this;\n\n // Recalculate menu heights and total max height\n this.$submenus.add(this.$element).each(function(){\n var height = Box.GetDimensions(this).height;\n\n maxHeight = height > maxHeight ? height : maxHeight;\n\n if(_this.options.autoHeight) {\n $(this).data('calcHeight',height);\n }\n });\n\n if (this.options.autoHeight)\n result.height = this.$currentMenu.data('calcHeight');\n else\n result['min-height'] = `${maxHeight}px`;\n\n result['max-width'] = `${this.$element[0].getBoundingClientRect().width}px`;\n\n return result;\n }\n\n /**\n * Destroys the Drilldown Menu\n * @function\n */\n _destroy() {\n $('body').off('.zf.drilldown');\n if(this.options.scrollTop) this.$element.off('.zf.drilldown',this._bindHandler);\n this._hideAll();\n\t this.$element.off('mutateme.zf.trigger');\n Nest.Burn(this.$element, 'drilldown');\n this.$element.unwrap()\n .find('.js-drilldown-back, .is-submenu-parent-item').remove()\n .end().find('.is-active, .is-closing, .is-drilldown-submenu').removeClass('is-active is-closing is-drilldown-submenu').off('transitionend otransitionend webkitTransitionEnd')\n .end().find('[data-submenu]').removeAttr('aria-hidden tabindex role');\n this.$submenuAnchors.each(function() {\n $(this).off('.zf.drilldown');\n });\n\n this.$element.find('[data-is-parent-link]').detach();\n this.$submenus.removeClass('drilldown-submenu-cover-previous invisible');\n\n this.$element.find('a').each(function(){\n var $link = $(this);\n $link.removeAttr('tabindex');\n if($link.data('savedHref')){\n $link.attr('href', $link.data('savedHref')).removeData('savedHref');\n }else{ return; }\n });\n };\n}\n\nDrilldown.defaults = {\n /**\n * Drilldowns depend on styles in order to function properly; in the default build of Foundation these are\n * on the `drilldown` class. This option auto-applies this class to the drilldown upon initialization.\n * @option\n * @type {boolean}\n * @default true\n */\n autoApplyClass: true,\n /**\n * Markup used for JS generated back button. Prepended or appended (see backButtonPosition) to submenu lists and deleted on `destroy` method, 'js-drilldown-back' class required. Remove the backslash (`\\`) if copy and pasting.\n * @option\n * @type {string}\n * @default '
  • Back
  • '\n */\n backButton: '
  • Back
  • ',\n /**\n * Position the back button either at the top or bottom of drilldown submenus. Can be `'left'` or `'bottom'`.\n * @option\n * @type {string}\n * @default top\n */\n backButtonPosition: 'top',\n /**\n * Markup used to wrap drilldown menu. Use a class name for independent styling; the JS applied class: `is-drilldown` is required. Remove the backslash (`\\`) if copy and pasting.\n * @option\n * @type {string}\n * @default '
    '\n */\n wrapper: '
    ',\n /**\n * Adds the parent link to the submenu.\n * @option\n * @type {boolean}\n * @default false\n */\n parentLink: false,\n /**\n * Allow the menu to return to root list on body click.\n * @option\n * @type {boolean}\n * @default false\n */\n closeOnClick: false,\n /**\n * Allow the menu to auto adjust height.\n * @option\n * @type {boolean}\n * @default false\n */\n autoHeight: false,\n /**\n * Animate the auto adjust height.\n * @option\n * @type {boolean}\n * @default false\n */\n animateHeight: false,\n /**\n * Scroll to the top of the menu after opening a submenu or navigating back using the menu back button\n * @option\n * @type {boolean}\n * @default false\n */\n scrollTop: false,\n /**\n * String jquery selector (for example 'body') of element to take offset().top from, if empty string the drilldown menu offset().top is taken\n * @option\n * @type {string}\n * @default ''\n */\n scrollTopElement: '',\n /**\n * ScrollTop offset\n * @option\n * @type {number}\n * @default 0\n */\n scrollTopOffset: 0,\n /**\n * Scroll animation duration\n * @option\n * @type {number}\n * @default 500\n */\n animationDuration: 500,\n /**\n * Scroll animation easing. Can be `'swing'` or `'linear'`.\n * @option\n * @type {string}\n * @see {@link https://api.jquery.com/animate|JQuery animate}\n * @default 'swing'\n */\n animationEasing: 'swing'\n // holdOpen: false\n};\n\nexport {Drilldown};\n","import $ from 'jquery';\n\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { GetYoDigits } from './foundation.core.utils';\nimport { Plugin } from './foundation.core.plugin';\n\nimport { DropdownMenu } from './foundation.dropdownMenu';\nimport { Drilldown } from './foundation.drilldown';\nimport { AccordionMenu } from './foundation.accordionMenu';\n\nlet MenuPlugins = {\n dropdown: {\n cssClass: 'dropdown',\n plugin: DropdownMenu\n },\n drilldown: {\n cssClass: 'drilldown',\n plugin: Drilldown\n },\n accordion: {\n cssClass: 'accordion-menu',\n plugin: AccordionMenu\n }\n};\n\n // import \"foundation.util.triggers.js\";\n\n\n/**\n * ResponsiveMenu module.\n * @module foundation.responsiveMenu\n * @requires foundation.util.triggers\n * @requires foundation.util.mediaQuery\n */\n\nclass ResponsiveMenu extends Plugin {\n /**\n * Creates a new instance of a responsive menu.\n * @class\n * @name ResponsiveMenu\n * @fires ResponsiveMenu#init\n * @param {jQuery} element - jQuery object to make into a dropdown menu.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element) {\n this.$element = $(element);\n this.rules = this.$element.data('responsive-menu');\n this.currentMq = null;\n this.currentPlugin = null;\n this.className = 'ResponsiveMenu'; // ie9 back compat\n\n this._init();\n this._events();\n }\n\n /**\n * Initializes the Menu by parsing the classes from the 'data-ResponsiveMenu' attribute on the element.\n * @function\n * @private\n */\n _init() {\n\n MediaQuery._init();\n // The first time an Interchange plugin is initialized, this.rules is converted from a string of \"classes\" to an object of rules\n if (typeof this.rules === 'string') {\n let rulesTree = {};\n\n // Parse rules from \"classes\" pulled from data attribute\n let rules = this.rules.split(' ');\n\n // Iterate through every rule found\n for (let i = 0; i < rules.length; i++) {\n let rule = rules[i].split('-');\n let ruleSize = rule.length > 1 ? rule[0] : 'small';\n let rulePlugin = rule.length > 1 ? rule[1] : rule[0];\n\n if (MenuPlugins[rulePlugin] !== null) {\n rulesTree[ruleSize] = MenuPlugins[rulePlugin];\n }\n }\n\n this.rules = rulesTree;\n }\n\n if (!$.isEmptyObject(this.rules)) {\n this._checkMediaQueries();\n }\n // Add data-mutate since children may need it.\n this.$element.attr('data-mutate', (this.$element.attr('data-mutate') || GetYoDigits(6, 'responsive-menu')));\n }\n\n /**\n * Initializes events for the Menu.\n * @function\n * @private\n */\n _events() {\n var _this = this;\n\n $(window).on('changed.zf.mediaquery', function() {\n _this._checkMediaQueries();\n });\n // $(window).on('resize.zf.ResponsiveMenu', function() {\n // _this._checkMediaQueries();\n // });\n }\n\n /**\n * Checks the current screen width against available media queries. If the media query has changed, and the plugin needed has changed, the plugins will swap out.\n * @function\n * @private\n */\n _checkMediaQueries() {\n var matchedMq, _this = this;\n // Iterate through each rule and find the last matching rule\n $.each(this.rules, function(key) {\n if (MediaQuery.atLeast(key)) {\n matchedMq = key;\n }\n });\n\n // No match? No dice\n if (!matchedMq) return;\n\n // Plugin already initialized? We good\n if (this.currentPlugin instanceof this.rules[matchedMq].plugin) return;\n\n // Remove existing plugin-specific CSS classes\n $.each(MenuPlugins, function(key, value) {\n _this.$element.removeClass(value.cssClass);\n });\n\n // Add the CSS class for the new plugin\n this.$element.addClass(this.rules[matchedMq].cssClass);\n\n // Create an instance of the new plugin\n if (this.currentPlugin) this.currentPlugin.destroy();\n this.currentPlugin = new this.rules[matchedMq].plugin(this.$element, {});\n }\n\n /**\n * Destroys the instance of the current plugin on this element, as well as the window resize handler that switches the plugins out.\n * @function\n */\n _destroy() {\n this.currentPlugin.destroy();\n $(window).off('.zf.ResponsiveMenu');\n }\n}\n\nResponsiveMenu.defaults = {};\n\nexport {ResponsiveMenu};\n","import $ from 'jquery';\n\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { Motion } from './foundation.util.motion';\nimport { Plugin } from './foundation.core.plugin';\n\n/**\n * ResponsiveToggle module.\n * @module foundation.responsiveToggle\n * @requires foundation.util.mediaQuery\n * @requires foundation.util.motion\n */\n\nclass ResponsiveToggle extends Plugin {\n /**\n * Creates a new instance of Tab Bar.\n * @class\n * @name ResponsiveToggle\n * @fires ResponsiveToggle#init\n * @param {jQuery} element - jQuery object to attach tab bar functionality to.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = $(element);\n this.options = $.extend({}, ResponsiveToggle.defaults, this.$element.data(), options);\n this.className = 'ResponsiveToggle'; // ie9 back compat\n\n this._init();\n this._events();\n }\n\n /**\n * Initializes the tab bar by finding the target element, toggling element, and running update().\n * @function\n * @private\n */\n _init() {\n MediaQuery._init();\n var targetID = this.$element.data('responsive-toggle');\n if (!targetID) {\n console.error('Your tab bar needs an ID of a Menu as the value of data-tab-bar.');\n }\n\n this.$targetMenu = $(`#${targetID}`);\n this.$toggler = this.$element.find('[data-toggle]').filter(function() {\n var target = $(this).data('toggle');\n return (target === targetID || target === \"\");\n });\n this.options = $.extend({}, this.options, this.$targetMenu.data());\n\n // If they were set, parse the animation classes\n if(this.options.animate) {\n let input = this.options.animate.split(' ');\n\n this.animationIn = input[0];\n this.animationOut = input[1] || null;\n }\n\n this._update();\n }\n\n /**\n * Adds necessary event handlers for the tab bar to work.\n * @function\n * @private\n */\n _events() {\n this._updateMqHandler = this._update.bind(this);\n\n $(window).on('changed.zf.mediaquery', this._updateMqHandler);\n\n this.$toggler.on('click.zf.responsiveToggle', this.toggleMenu.bind(this));\n }\n\n /**\n * Checks the current media query to determine if the tab bar should be visible or hidden.\n * @function\n * @private\n */\n _update() {\n // Mobile\n if (!MediaQuery.atLeast(this.options.hideFor)) {\n this.$element.show();\n this.$targetMenu.hide();\n }\n\n // Desktop\n else {\n this.$element.hide();\n this.$targetMenu.show();\n }\n }\n\n /**\n * Toggles the element attached to the tab bar. The toggle only happens if the screen is small enough to allow it.\n * @function\n * @fires ResponsiveToggle#toggled\n */\n toggleMenu() {\n if (!MediaQuery.atLeast(this.options.hideFor)) {\n /**\n * Fires when the element attached to the tab bar toggles.\n * @event ResponsiveToggle#toggled\n */\n if(this.options.animate) {\n if (this.$targetMenu.is(':hidden')) {\n Motion.animateIn(this.$targetMenu, this.animationIn, () => {\n this.$element.trigger('toggled.zf.responsiveToggle');\n this.$targetMenu.find('[data-mutate]').triggerHandler('mutateme.zf.trigger');\n });\n }\n else {\n Motion.animateOut(this.$targetMenu, this.animationOut, () => {\n this.$element.trigger('toggled.zf.responsiveToggle');\n });\n }\n }\n else {\n this.$targetMenu.toggle(0);\n this.$targetMenu.find('[data-mutate]').trigger('mutateme.zf.trigger');\n this.$element.trigger('toggled.zf.responsiveToggle');\n }\n }\n };\n\n _destroy() {\n this.$element.off('.zf.responsiveToggle');\n this.$toggler.off('.zf.responsiveToggle');\n\n $(window).off('changed.zf.mediaquery', this._updateMqHandler);\n }\n}\n\nResponsiveToggle.defaults = {\n /**\n * The breakpoint after which the menu is always shown, and the tab bar is hidden.\n * @option\n * @type {string}\n * @default 'medium'\n */\n hideFor: 'medium',\n\n /**\n * To decide if the toggle should be animated or not.\n * @option\n * @type {boolean}\n * @default false\n */\n animate: false\n};\n\nexport { ResponsiveToggle };\n","import $ from 'jquery';\nimport { Plugin } from './foundation.core.plugin';\nimport { onLoad } from './foundation.core.utils';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { Motion } from './foundation.util.motion';\nimport { Triggers } from './foundation.util.triggers';\nimport { Touch } from './foundation.util.touch'\n\n/**\n * Reveal module.\n * @module foundation.reveal\n * @requires foundation.util.keyboard\n * @requires foundation.util.touch\n * @requires foundation.util.triggers\n * @requires foundation.util.mediaQuery\n * @requires foundation.util.motion if using animations\n */\n\nclass Reveal extends Plugin {\n /**\n * Creates a new instance of Reveal.\n * @class\n * @name Reveal\n * @param {jQuery} element - jQuery object to use for the modal.\n * @param {Object} options - optional parameters.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Reveal.defaults, this.$element.data(), options);\n this.className = 'Reveal'; // ie9 back compat\n this._init();\n\n // Touch and Triggers init are idempotent, just need to make sure they are initialized\n Touch.init($);\n Triggers.init($);\n\n Keyboard.register('Reveal', {\n 'ESCAPE': 'close',\n });\n }\n\n /**\n * Initializes the modal by adding the overlay and close buttons, (if selected).\n * @private\n */\n _init() {\n MediaQuery._init();\n this.id = this.$element.attr('id');\n this.isActive = false;\n this.cached = {mq: MediaQuery.current};\n\n this.$anchor = $(`[data-open=\"${this.id}\"]`).length ? $(`[data-open=\"${this.id}\"]`) : $(`[data-toggle=\"${this.id}\"]`);\n this.$anchor.attr({\n 'aria-controls': this.id,\n 'aria-haspopup': 'dialog',\n 'tabindex': 0\n });\n\n if (this.options.fullScreen || this.$element.hasClass('full')) {\n this.options.fullScreen = true;\n this.options.overlay = false;\n }\n if (this.options.overlay && !this.$overlay) {\n this.$overlay = this._makeOverlay(this.id);\n }\n\n this.$element.attr({\n 'role': 'dialog',\n 'aria-hidden': true,\n 'data-yeti-box': this.id,\n 'data-resize': this.id\n });\n\n if(this.$overlay) {\n this.$element.detach().appendTo(this.$overlay);\n } else {\n this.$element.detach().appendTo($(this.options.appendTo));\n this.$element.addClass('without-overlay');\n }\n this._events();\n if (this.options.deepLink && window.location.hash === ( `#${this.id}`)) {\n this.onLoadListener = onLoad($(window), () => this.open());\n }\n }\n\n /**\n * Creates an overlay div to display behind the modal.\n * @private\n */\n _makeOverlay() {\n var additionalOverlayClasses = '';\n\n if (this.options.additionalOverlayClasses) {\n additionalOverlayClasses = ' ' + this.options.additionalOverlayClasses;\n }\n\n return $('
    ')\n .addClass('reveal-overlay' + additionalOverlayClasses)\n .appendTo(this.options.appendTo);\n }\n\n /**\n * Updates position of modal\n * TODO: Figure out if we actually need to cache these values or if it doesn't matter\n * @private\n */\n _updatePosition() {\n var width = this.$element.outerWidth();\n var outerWidth = $(window).width();\n var height = this.$element.outerHeight();\n var outerHeight = $(window).height();\n var left, top = null;\n if (this.options.hOffset === 'auto') {\n left = parseInt((outerWidth - width) / 2, 10);\n } else {\n left = parseInt(this.options.hOffset, 10);\n }\n if (this.options.vOffset === 'auto') {\n if (height > outerHeight) {\n top = parseInt(Math.min(100, outerHeight / 10), 10);\n } else {\n top = parseInt((outerHeight - height) / 4, 10);\n }\n } else if (this.options.vOffset !== null) {\n top = parseInt(this.options.vOffset, 10);\n }\n\n if (top !== null) {\n this.$element.css({top: top + 'px'});\n }\n\n // only worry about left if we don't have an overlay or we have a horizontal offset,\n // otherwise we're perfectly in the middle\n if (!this.$overlay || (this.options.hOffset !== 'auto')) {\n this.$element.css({left: left + 'px'});\n this.$element.css({margin: '0px'});\n }\n\n }\n\n /**\n * Adds event handlers for the modal.\n * @private\n */\n _events() {\n var _this = this;\n\n this.$element.on({\n 'open.zf.trigger': this.open.bind(this),\n 'close.zf.trigger': (event, $element) => {\n if ((event.target === _this.$element[0]) ||\n ($(event.target).parents('[data-closable]')[0] === $element)) { // only close reveal when it's explicitly called\n return this.close.apply(this);\n }\n },\n 'toggle.zf.trigger': this.toggle.bind(this),\n 'resizeme.zf.trigger': function() {\n _this._updatePosition();\n }\n });\n\n if (this.options.closeOnClick && this.options.overlay) {\n this.$overlay.off('.zf.reveal').on('click.zf.dropdown tap.zf.dropdown', function(e) {\n if (e.target === _this.$element[0] ||\n $.contains(_this.$element[0], e.target) ||\n !$.contains(document, e.target)) {\n return;\n }\n _this.close();\n });\n }\n if (this.options.deepLink) {\n $(window).on(`hashchange.zf.reveal:${this.id}`, this._handleState.bind(this));\n }\n }\n\n /**\n * Handles modal methods on back/forward button clicks or any other event that triggers hashchange.\n * @private\n */\n _handleState() {\n if(window.location.hash === ( '#' + this.id) && !this.isActive){ this.open(); }\n else{ this.close(); }\n }\n\n /**\n * Disables the scroll when Reveal is shown to prevent the background from shifting\n * @param {number} scrollTop - Scroll to visually apply, window current scroll by default\n */\n _disableScroll(scrollTop) {\n scrollTop = scrollTop || $(window).scrollTop();\n if ($(document).height() > $(window).height()) {\n $(\"html\")\n .css(\"top\", -scrollTop);\n }\n }\n\n /**\n * Reenables the scroll when Reveal closes\n * @param {number} scrollTop - Scroll to restore, html \"top\" property by default (as set by `_disableScroll`)\n */\n _enableScroll(scrollTop) {\n scrollTop = scrollTop || parseInt($(\"html\").css(\"top\"), 10);\n if ($(document).height() > $(window).height()) {\n $(\"html\")\n .css(\"top\", \"\");\n $(window).scrollTop(-scrollTop);\n }\n }\n\n\n /**\n * Opens the modal controlled by `this.$anchor`, and closes all others by default.\n * @function\n * @fires Reveal#closeme\n * @fires Reveal#open\n */\n open() {\n // either update or replace browser history\n const hash = `#${this.id}`;\n if (this.options.deepLink && window.location.hash !== hash) {\n\n if (window.history.pushState) {\n if (this.options.updateHistory) {\n window.history.pushState({}, '', hash);\n } else {\n window.history.replaceState({}, '', hash);\n }\n } else {\n window.location.hash = hash;\n }\n }\n\n // Remember anchor that opened it to set focus back later, have general anchors as fallback\n this.$activeAnchor = $(document.activeElement).is(this.$anchor) ? $(document.activeElement) : this.$anchor;\n\n this.isActive = true;\n\n // Make elements invisible, but remove display: none so we can get size and positioning\n this.$element\n .css({ 'visibility': 'hidden' })\n .show()\n .scrollTop(0);\n if (this.options.overlay) {\n this.$overlay.css({'visibility': 'hidden'}).show();\n }\n\n this._updatePosition();\n\n this.$element\n .hide()\n .css({ 'visibility': '' });\n\n if(this.$overlay) {\n this.$overlay.css({'visibility': ''}).hide();\n if(this.$element.hasClass('fast')) {\n this.$overlay.addClass('fast');\n } else if (this.$element.hasClass('slow')) {\n this.$overlay.addClass('slow');\n }\n }\n\n\n if (!this.options.multipleOpened) {\n /**\n * Fires immediately before the modal opens.\n * Closes any other modals that are currently open\n * @event Reveal#closeme\n */\n this.$element.trigger('closeme.zf.reveal', this.id);\n }\n\n if ($('.reveal:visible').length === 0) {\n this._disableScroll();\n }\n\n var _this = this;\n\n // Motion UI method of reveal\n if (this.options.animationIn) {\n function afterAnimation(){\n _this.$element\n .attr({\n 'aria-hidden': false,\n 'tabindex': -1\n })\n .focus();\n _this._addGlobalClasses();\n Keyboard.trapFocus(_this.$element);\n }\n if (this.options.overlay) {\n Motion.animateIn(this.$overlay, 'fade-in');\n }\n Motion.animateIn(this.$element, this.options.animationIn, () => {\n if(this.$element) { // protect against object having been removed\n this.focusableElements = Keyboard.findFocusable(this.$element);\n afterAnimation();\n }\n });\n }\n // jQuery method of reveal\n else {\n if (this.options.overlay) {\n this.$overlay.show(0);\n }\n this.$element.show(this.options.showDelay);\n }\n\n // handle accessibility\n this.$element\n .attr({\n 'aria-hidden': false,\n 'tabindex': -1\n })\n .focus();\n Keyboard.trapFocus(this.$element);\n\n this._addGlobalClasses();\n\n this._addGlobalListeners();\n\n /**\n * Fires when the modal has successfully opened.\n * @event Reveal#open\n */\n this.$element.trigger('open.zf.reveal');\n }\n\n /**\n * Adds classes and listeners on document required by open modals.\n *\n * The following classes are added and updated:\n * - `.is-reveal-open` - Prevents the scroll on document\n * - `.zf-has-scroll` - Displays a disabled scrollbar on document if required like if the\n * scroll was not disabled. This prevent a \"shift\" of the page content due\n * the scrollbar disappearing when the modal opens.\n *\n * @private\n */\n _addGlobalClasses() {\n const updateScrollbarClass = () => {\n $('html').toggleClass('zf-has-scroll', !!($(document).height() > $(window).height()));\n };\n\n this.$element.on('resizeme.zf.trigger.revealScrollbarListener', () => updateScrollbarClass());\n updateScrollbarClass();\n $('html').addClass('is-reveal-open');\n }\n\n /**\n * Removes classes and listeners on document that were required by open modals.\n * @private\n */\n _removeGlobalClasses() {\n this.$element.off('resizeme.zf.trigger.revealScrollbarListener');\n $('html').removeClass('is-reveal-open');\n $('html').removeClass('zf-has-scroll');\n }\n\n /**\n * Adds extra event handlers for the body and window if necessary.\n * @private\n */\n _addGlobalListeners() {\n var _this = this;\n if(!this.$element) { return; } // If we're in the middle of cleanup, don't freak out\n this.focusableElements = Keyboard.findFocusable(this.$element);\n\n if (!this.options.overlay && this.options.closeOnClick && !this.options.fullScreen) {\n $('body').on('click.zf.dropdown tap.zf.dropdown', function(e) {\n if (e.target === _this.$element[0] ||\n $.contains(_this.$element[0], e.target) ||\n !$.contains(document, e.target)) { return; }\n _this.close();\n });\n }\n\n if (this.options.closeOnEsc) {\n $(window).on('keydown.zf.reveal', function(e) {\n Keyboard.handleKey(e, 'Reveal', {\n close: function() {\n if (_this.options.closeOnEsc) {\n _this.close();\n }\n }\n });\n });\n }\n }\n\n /**\n * Closes the modal.\n * @function\n * @fires Reveal#closed\n */\n close() {\n if (!this.isActive || !this.$element.is(':visible')) {\n return false;\n }\n var _this = this;\n\n // Motion UI method of hiding\n if (this.options.animationOut) {\n if (this.options.overlay) {\n Motion.animateOut(this.$overlay, 'fade-out');\n }\n\n Motion.animateOut(this.$element, this.options.animationOut, finishUp);\n }\n // jQuery method of hiding\n else {\n this.$element.hide(this.options.hideDelay);\n\n if (this.options.overlay) {\n this.$overlay.hide(0, finishUp);\n }\n else {\n finishUp();\n }\n }\n\n // Conditionals to remove extra event listeners added on open\n if (this.options.closeOnEsc) {\n $(window).off('keydown.zf.reveal');\n }\n\n if (!this.options.overlay && this.options.closeOnClick) {\n $('body').off('click.zf.dropdown tap.zf.dropdown');\n }\n\n this.$element.off('keydown.zf.reveal');\n\n function finishUp() {\n\n // Get the current top before the modal is closed and restore the scroll after.\n // TODO: use component properties instead of HTML properties\n // See https://github.com/foundation/foundation-sites/pull/10786\n var scrollTop = parseInt($(\"html\").css(\"top\"), 10);\n\n if ($('.reveal:visible').length === 0) {\n _this._removeGlobalClasses(); // also remove .is-reveal-open from the html element when there is no opened reveal\n }\n\n Keyboard.releaseFocus(_this.$element);\n\n _this.$element.attr('aria-hidden', true);\n\n if ($('.reveal:visible').length === 0) {\n _this._enableScroll(scrollTop);\n }\n\n /**\n * Fires when the modal is done closing.\n * @event Reveal#closed\n */\n _this.$element.trigger('closed.zf.reveal');\n }\n\n /**\n * Resets the modal content\n * This prevents a running video to keep going in the background\n */\n if (this.options.resetOnClose) {\n this.$element.html(this.$element.html());\n }\n\n this.isActive = false;\n // If deepLink and we did not switched to an other modal...\n if (_this.options.deepLink && window.location.hash === `#${this.id}`) {\n // Remove the history hash\n if (window.history.replaceState) {\n const urlWithoutHash = window.location.pathname + window.location.search;\n if (this.options.updateHistory) {\n window.history.pushState({}, '', urlWithoutHash); // remove the hash\n } else {\n window.history.replaceState('', document.title, urlWithoutHash);\n }\n } else {\n window.location.hash = '';\n }\n }\n\n this.$activeAnchor.focus();\n }\n\n /**\n * Toggles the open/closed state of a modal.\n * @function\n */\n toggle() {\n if (this.isActive) {\n this.close();\n } else {\n this.open();\n }\n };\n\n /**\n * Destroys an instance of a modal.\n * @function\n */\n _destroy() {\n if (this.options.overlay) {\n this.$element.appendTo($(this.options.appendTo)); // move $element outside of $overlay to prevent error unregisterPlugin()\n this.$overlay.hide().off().remove();\n }\n this.$element.hide().off();\n this.$anchor.off('.zf');\n $(window).off(`.zf.reveal:${this.id}`)\n if (this.onLoadListener) $(window).off(this.onLoadListener);\n\n if ($('.reveal:visible').length === 0) {\n this._removeGlobalClasses(); // also remove .is-reveal-open from the html element when there is no opened reveal\n }\n };\n}\n\nReveal.defaults = {\n /**\n * Motion-UI class to use for animated elements. If none used, defaults to simple show/hide.\n * @option\n * @type {string}\n * @default ''\n */\n animationIn: '',\n /**\n * Motion-UI class to use for animated elements. If none used, defaults to simple show/hide.\n * @option\n * @type {string}\n * @default ''\n */\n animationOut: '',\n /**\n * Time, in ms, to delay the opening of a modal after a click if no animation used.\n * @option\n * @type {number}\n * @default 0\n */\n showDelay: 0,\n /**\n * Time, in ms, to delay the closing of a modal after a click if no animation used.\n * @option\n * @type {number}\n * @default 0\n */\n hideDelay: 0,\n /**\n * Allows a click on the body/overlay to close the modal.\n * @option\n * @type {boolean}\n * @default true\n */\n closeOnClick: true,\n /**\n * Allows the modal to close if the user presses the `ESCAPE` key.\n * @option\n * @type {boolean}\n * @default true\n */\n closeOnEsc: true,\n /**\n * If true, allows multiple modals to be displayed at once.\n * @option\n * @type {boolean}\n * @default false\n */\n multipleOpened: false,\n /**\n * Distance, in pixels, the modal should push down from the top of the screen.\n * @option\n * @type {number|string}\n * @default auto\n */\n vOffset: 'auto',\n /**\n * Distance, in pixels, the modal should push in from the side of the screen.\n * @option\n * @type {number|string}\n * @default auto\n */\n hOffset: 'auto',\n /**\n * Allows the modal to be fullscreen, completely blocking out the rest of the view. JS checks for this as well.\n * @option\n * @type {boolean}\n * @default false\n */\n fullScreen: false,\n /**\n * Allows the modal to generate an overlay div, which will cover the view when modal opens.\n * @option\n * @type {boolean}\n * @default true\n */\n overlay: true,\n /**\n * Allows the modal to remove and reinject markup on close. Should be true if using video elements w/o using provider's api, otherwise, videos will continue to play in the background.\n * @option\n * @type {boolean}\n * @default false\n */\n resetOnClose: false,\n /**\n * Link the location hash to the modal.\n * Set the location hash when the modal is opened/closed, and open/close the modal when the location changes.\n * @option\n * @type {boolean}\n * @default false\n */\n deepLink: false,\n /**\n * If `deepLink` is enabled, update the browser history with the open modal\n * @option\n * @default false\n */\n updateHistory: false,\n /**\n * Allows the modal to append to custom div.\n * @option\n * @type {string}\n * @default \"body\"\n */\n appendTo: \"body\",\n /**\n * Allows adding additional class names to the reveal overlay.\n * @option\n * @type {string}\n * @default ''\n */\n additionalOverlayClasses: ''\n};\n\nexport {Reveal};\n","import $ from 'jquery';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { Move } from './foundation.util.motion';\nimport { GetYoDigits, rtl as Rtl } from './foundation.core.utils';\n\nimport { Plugin } from './foundation.core.plugin';\n\nimport { Touch } from './foundation.util.touch';\n\nimport { Triggers } from './foundation.util.triggers';\n/**\n * Slider module.\n * @module foundation.slider\n * @requires foundation.util.motion\n * @requires foundation.util.triggers\n * @requires foundation.util.keyboard\n * @requires foundation.util.touch\n */\n\nclass Slider extends Plugin {\n /**\n * Creates a new instance of a slider control.\n * @class\n * @name Slider\n * @param {jQuery} element - jQuery object to make into a slider control.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Slider.defaults, this.$element.data(), options);\n this.className = 'Slider'; // ie9 back compat\n this.initialized = false;\n\n // Touch and Triggers inits are idempotent, we just need to make sure it's initialied.\n Touch.init($);\n Triggers.init($);\n\n this._init();\n\n Keyboard.register('Slider', {\n 'ltr': {\n 'ARROW_RIGHT': 'increase',\n 'ARROW_UP': 'increase',\n 'ARROW_DOWN': 'decrease',\n 'ARROW_LEFT': 'decrease',\n 'SHIFT_ARROW_RIGHT': 'increaseFast',\n 'SHIFT_ARROW_UP': 'increaseFast',\n 'SHIFT_ARROW_DOWN': 'decreaseFast',\n 'SHIFT_ARROW_LEFT': 'decreaseFast',\n 'HOME': 'min',\n 'END': 'max'\n },\n 'rtl': {\n 'ARROW_LEFT': 'increase',\n 'ARROW_RIGHT': 'decrease',\n 'SHIFT_ARROW_LEFT': 'increaseFast',\n 'SHIFT_ARROW_RIGHT': 'decreaseFast'\n }\n });\n }\n\n /**\n * Initilizes the plugin by reading/setting attributes, creating collections and setting the initial position of the handle(s).\n * @function\n * @private\n */\n _init() {\n this.inputs = this.$element.find('input');\n this.handles = this.$element.find('[data-slider-handle]');\n\n this.$handle = this.handles.eq(0);\n this.$input = this.inputs.length ? this.inputs.eq(0) : $(`#${this.$handle.attr('aria-controls')}`);\n this.$fill = this.$element.find('[data-slider-fill]').css(this.options.vertical ? 'height' : 'width', 0);\n\n if (this.options.disabled || this.$element.hasClass(this.options.disabledClass)) {\n this.options.disabled = true;\n this.$element.addClass(this.options.disabledClass);\n }\n if (!this.inputs.length) {\n this.inputs = $().add(this.$input);\n this.options.binding = true;\n }\n\n this._setInitAttr(0);\n\n if (this.handles[1]) {\n this.options.doubleSided = true;\n this.$handle2 = this.handles.eq(1);\n this.$input2 = this.inputs.length > 1 ? this.inputs.eq(1) : $(`#${this.$handle2.attr('aria-controls')}`);\n\n if (!this.inputs[1]) {\n this.inputs = this.inputs.add(this.$input2);\n }\n\n // this.$handle.triggerHandler('click.zf.slider');\n this._setInitAttr(1);\n }\n\n // Set handle positions\n this.setHandles();\n\n this._events();\n this.initialized = true;\n }\n\n setHandles() {\n if(this.handles[1]) {\n this._setHandlePos(this.$handle, this.inputs.eq(0).val(), () => {\n this._setHandlePos(this.$handle2, this.inputs.eq(1).val());\n });\n } else {\n this._setHandlePos(this.$handle, this.inputs.eq(0).val());\n }\n }\n\n _reflow() {\n this.setHandles();\n }\n /**\n * @function\n * @private\n * @param {Number} value - floating point (the value) to be transformed using to a relative position on the slider (the inverse of _value)\n */\n _pctOfBar(value) {\n var pctOfBar = percent(value - this.options.start, this.options.end - this.options.start)\n\n switch(this.options.positionValueFunction) {\n case \"pow\":\n pctOfBar = this._logTransform(pctOfBar);\n break;\n case \"log\":\n pctOfBar = this._powTransform(pctOfBar);\n break;\n }\n\n return pctOfBar.toFixed(2)\n }\n\n /**\n * @function\n * @private\n * @param {Number} pctOfBar - floating point, the relative position of the slider (typically between 0-1) to be transformed to a value\n */\n _value(pctOfBar) {\n switch(this.options.positionValueFunction) {\n case \"pow\":\n pctOfBar = this._powTransform(pctOfBar);\n break;\n case \"log\":\n pctOfBar = this._logTransform(pctOfBar);\n break;\n }\n\n var value\n if (this.options.vertical) {\n // linear interpolation which is working with negative values for start\n // https://math.stackexchange.com/a/1019084\n value = parseFloat(this.options.end) + pctOfBar * (this.options.start - this.options.end)\n } else {\n value = (this.options.end - this.options.start) * pctOfBar + parseFloat(this.options.start);\n }\n\n return value\n }\n\n /**\n * @function\n * @private\n * @param {Number} value - floating point (typically between 0-1) to be transformed using the log function\n */\n _logTransform(value) {\n return baseLog(this.options.nonLinearBase, ((value*(this.options.nonLinearBase-1))+1))\n }\n\n /**\n * @function\n * @private\n * @param {Number} value - floating point (typically between 0-1) to be transformed using the power function\n */\n _powTransform(value) {\n return (Math.pow(this.options.nonLinearBase, value) - 1) / (this.options.nonLinearBase - 1)\n }\n\n /**\n * Sets the position of the selected handle and fill bar.\n * @function\n * @private\n * @param {jQuery} $hndl - the selected handle to move.\n * @param {Number} location - floating point between the start and end values of the slider bar.\n * @param {Function} cb - callback function to fire on completion.\n * @fires Slider#moved\n * @fires Slider#changed\n */\n _setHandlePos($hndl, location, cb) {\n // don't move if the slider has been disabled since its initialization\n if (this.$element.hasClass(this.options.disabledClass)) {\n return;\n }\n //might need to alter that slightly for bars that will have odd number selections.\n location = parseFloat(location);//on input change events, convert string to number...grumble.\n\n // prevent slider from running out of bounds, if value exceeds the limits set through options, override the value to min/max\n if (location < this.options.start) { location = this.options.start; }\n else if (location > this.options.end) { location = this.options.end; }\n\n var isDbl = this.options.doubleSided;\n\n if (isDbl) { //this block is to prevent 2 handles from crossing eachother. Could/should be improved.\n if (this.handles.index($hndl) === 0) {\n var h2Val = parseFloat(this.$handle2.attr('aria-valuenow'));\n location = location >= h2Val ? h2Val - this.options.step : location;\n } else {\n var h1Val = parseFloat(this.$handle.attr('aria-valuenow'));\n location = location <= h1Val ? h1Val + this.options.step : location;\n }\n }\n\n var _this = this,\n vert = this.options.vertical,\n hOrW = vert ? 'height' : 'width',\n lOrT = vert ? 'top' : 'left',\n handleDim = $hndl[0].getBoundingClientRect()[hOrW],\n elemDim = this.$element[0].getBoundingClientRect()[hOrW],\n //percentage of bar min/max value based on click or drag point\n pctOfBar = this._pctOfBar(location),\n //number of actual pixels to shift the handle, based on the percentage obtained above\n pxToMove = (elemDim - handleDim) * pctOfBar,\n //percentage of bar to shift the handle\n movement = (percent(pxToMove, elemDim) * 100).toFixed(this.options.decimal);\n //fixing the decimal value for the location number, is passed to other methods as a fixed floating-point value\n location = parseFloat(location.toFixed(this.options.decimal));\n // declare empty object for css adjustments, only used with 2 handled-sliders\n var css = {};\n\n this._setValues($hndl, location);\n\n // TODO update to calculate based on values set to respective inputs??\n if (isDbl) {\n var isLeftHndl = this.handles.index($hndl) === 0,\n //empty variable, will be used for min-height/width for fill bar\n dim,\n //percentage w/h of the handle compared to the slider bar\n handlePct = Math.floor(percent(handleDim, elemDim) * 100);\n //if left handle, the math is slightly different than if it's the right handle, and the left/top property needs to be changed for the fill bar\n if (isLeftHndl) {\n //left or top percentage value to apply to the fill bar.\n css[lOrT] = `${movement}%`;\n //calculate the new min-height/width for the fill bar.\n dim = parseFloat(this.$handle2[0].style[lOrT]) - movement + handlePct;\n //this callback is necessary to prevent errors and allow the proper placement and initialization of a 2-handled slider\n //plus, it means we don't care if 'dim' isNaN on init, it won't be in the future.\n if (cb && typeof cb === 'function') { cb(); }//this is only needed for the initialization of 2 handled sliders\n } else {\n //just caching the value of the left/bottom handle's left/top property\n var handlePos = parseFloat(this.$handle[0].style[lOrT]);\n //calculate the new min-height/width for the fill bar. Use isNaN to prevent false positives for numbers <= 0\n //based on the percentage of movement of the handle being manipulated, less the opposing handle's left/top position, plus the percentage w/h of the handle itself\n dim = movement - (isNaN(handlePos) ? (this.options.initialStart - this.options.start)/((this.options.end-this.options.start)/100) : handlePos) + handlePct;\n }\n // assign the min-height/width to our css object\n css[`min-${hOrW}`] = `${dim}%`;\n }\n\n //because we don't know exactly how the handle will be moved, check the amount of time it should take to move.\n var moveTime = this.$element.data('dragging') ? 1000/60 : this.options.moveTime;\n\n Move(moveTime, $hndl, function() {\n // adjusting the left/top property of the handle, based on the percentage calculated above\n // if movement isNaN, that is because the slider is hidden and we cannot determine handle width,\n // fall back to next best guess.\n if (isNaN(movement)) {\n $hndl.css(lOrT, `${pctOfBar * 100}%`);\n }\n else {\n $hndl.css(lOrT, `${movement}%`);\n }\n\n if (!_this.options.doubleSided) {\n //if single-handled, a simple method to expand the fill bar\n _this.$fill.css(hOrW, `${pctOfBar * 100}%`);\n } else {\n //otherwise, use the css object we created above\n _this.$fill.css(css);\n }\n });\n\n if (this.initialized) {\n this.$element.one('finished.zf.animate', function() {\n /**\n * Fires when the handle is done moving.\n * @event Slider#moved\n */\n _this.$element.trigger('moved.zf.slider', [$hndl]);\n });\n /**\n * Fires when the value has not been change for a given time.\n * @event Slider#changed\n */\n clearTimeout(_this.timeout);\n _this.timeout = setTimeout(function(){\n _this.$element.trigger('changed.zf.slider', [$hndl]);\n }, _this.options.changedDelay);\n }\n }\n\n /**\n * Sets the initial attribute for the slider element.\n * @function\n * @private\n * @param {Number} idx - index of the current handle/input to use.\n */\n _setInitAttr(idx) {\n var initVal = (idx === 0 ? this.options.initialStart : this.options.initialEnd)\n var id = this.inputs.eq(idx).attr('id') || GetYoDigits(6, 'slider');\n this.inputs.eq(idx).attr({\n 'id': id,\n 'max': this.options.end,\n 'min': this.options.start,\n 'step': this.options.step\n });\n this.inputs.eq(idx).val(initVal);\n this.handles.eq(idx).attr({\n 'role': 'slider',\n 'aria-controls': id,\n 'aria-valuemax': this.options.end,\n 'aria-valuemin': this.options.start,\n 'aria-valuenow': initVal,\n 'aria-orientation': this.options.vertical ? 'vertical' : 'horizontal',\n 'tabindex': 0\n });\n }\n\n /**\n * Sets the input and `aria-valuenow` values for the slider element.\n * @function\n * @private\n * @param {jQuery} $handle - the currently selected handle.\n * @param {Number} val - floating point of the new value.\n */\n _setValues($handle, val) {\n var idx = this.options.doubleSided ? this.handles.index($handle) : 0;\n this.inputs.eq(idx).val(val);\n $handle.attr('aria-valuenow', val);\n }\n\n /**\n * Handles events on the slider element.\n * Calculates the new location of the current handle.\n * If there are two handles and the bar was clicked, it determines which handle to move.\n * @function\n * @private\n * @param {Object} e - the `event` object passed from the listener.\n * @param {jQuery} $handle - the current handle to calculate for, if selected.\n * @param {Number} val - floating point number for the new value of the slider.\n * TODO clean this up, there's a lot of repeated code between this and the _setHandlePos fn.\n */\n _handleEvent(e, $handle, val) {\n var value;\n if (!val) {//click or drag events\n e.preventDefault();\n var _this = this,\n vertical = this.options.vertical,\n param = vertical ? 'height' : 'width',\n direction = vertical ? 'top' : 'left',\n eventOffset = vertical ? e.pageY : e.pageX,\n barDim = this.$element[0].getBoundingClientRect()[param],\n windowScroll = vertical ? $(window).scrollTop() : $(window).scrollLeft();\n\n var elemOffset = this.$element.offset()[direction];\n\n // touch events emulated by the touch util give position relative to screen, add window.scroll to event coordinates...\n // best way to guess this is simulated is if clientY == pageY\n if (e.clientY === e.pageY) { eventOffset = eventOffset + windowScroll; }\n var eventFromBar = eventOffset - elemOffset;\n var barXY;\n if (eventFromBar < 0) {\n barXY = 0;\n } else if (eventFromBar > barDim) {\n barXY = barDim;\n } else {\n barXY = eventFromBar;\n }\n var offsetPct = percent(barXY, barDim);\n\n value = this._value(offsetPct);\n\n // turn everything around for RTL, yay math!\n if (Rtl() && !this.options.vertical) {value = this.options.end - value;}\n\n value = _this._adjustValue(null, value);\n\n if (!$handle) {//figure out which handle it is, pass it to the next function.\n var firstHndlPos = absPosition(this.$handle, direction, barXY, param),\n secndHndlPos = absPosition(this.$handle2, direction, barXY, param);\n $handle = firstHndlPos <= secndHndlPos ? this.$handle : this.$handle2;\n }\n\n } else {//change event on input\n value = this._adjustValue(null, val);\n }\n\n this._setHandlePos($handle, value);\n }\n\n /**\n * Adjustes value for handle in regard to step value. returns adjusted value\n * @function\n * @private\n * @param {jQuery} $handle - the selected handle.\n * @param {Number} value - value to adjust. used if $handle is falsy\n */\n _adjustValue($handle, value) {\n var val,\n step = this.options.step,\n div = parseFloat(step/2),\n left, previousVal, nextVal;\n if (!!$handle) {\n val = parseFloat($handle.attr('aria-valuenow'));\n }\n else {\n val = value;\n }\n if (val >= 0) {\n left = val % step;\n } else {\n left = step + (val % step);\n }\n previousVal = val - left;\n nextVal = previousVal + step;\n if (left === 0) {\n return val;\n }\n val = val >= previousVal + div ? nextVal : previousVal;\n return val;\n }\n\n /**\n * Adds event listeners to the slider elements.\n * @function\n * @private\n */\n _events() {\n this._eventsForHandle(this.$handle);\n if(this.handles[1]) {\n this._eventsForHandle(this.$handle2);\n }\n }\n\n\n /**\n * Adds event listeners a particular handle\n * @function\n * @private\n * @param {jQuery} $handle - the current handle to apply listeners to.\n */\n _eventsForHandle($handle) {\n var _this = this,\n curHandle;\n\n const handleChangeEvent = function(e) {\n const idx = _this.inputs.index($(this));\n _this._handleEvent(e, _this.handles.eq(idx), $(this).val());\n };\n\n // IE only triggers the change event when the input loses focus which strictly follows the HTML specification\n // listen for the enter key and trigger a change\n // @see https://html.spec.whatwg.org/multipage/input.html#common-input-element-events\n this.inputs.off('keyup.zf.slider').on('keyup.zf.slider', function (e) {\n if(e.keyCode === 13) handleChangeEvent.call(this, e);\n });\n\n this.inputs.off('change.zf.slider').on('change.zf.slider', handleChangeEvent);\n\n if (this.options.clickSelect) {\n this.$element.off('click.zf.slider').on('click.zf.slider', function(e) {\n if (_this.$element.data('dragging')) { return false; }\n\n if (!$(e.target).is('[data-slider-handle]')) {\n if (_this.options.doubleSided) {\n _this._handleEvent(e);\n } else {\n _this._handleEvent(e, _this.$handle);\n }\n }\n });\n }\n\n if (this.options.draggable) {\n this.handles.addTouch();\n\n var $body = $('body');\n $handle\n .off('mousedown.zf.slider')\n .on('mousedown.zf.slider', function(e) {\n $handle.addClass('is-dragging');\n _this.$fill.addClass('is-dragging');//\n _this.$element.data('dragging', true);\n\n curHandle = $(e.currentTarget);\n\n $body.on('mousemove.zf.slider', function(ev) {\n ev.preventDefault();\n _this._handleEvent(ev, curHandle);\n\n }).on('mouseup.zf.slider', function(ev) {\n _this._handleEvent(ev, curHandle);\n\n $handle.removeClass('is-dragging');\n _this.$fill.removeClass('is-dragging');\n _this.$element.data('dragging', false);\n\n $body.off('mousemove.zf.slider mouseup.zf.slider');\n });\n })\n // prevent events triggered by touch\n .on('selectstart.zf.slider touchmove.zf.slider', function(e) {\n e.preventDefault();\n });\n }\n\n $handle.off('keydown.zf.slider').on('keydown.zf.slider', function(e) {\n var _$handle = $(this),\n idx = _this.options.doubleSided ? _this.handles.index(_$handle) : 0,\n oldValue = parseFloat($handle.attr('aria-valuenow')),\n newValue;\n\n // handle keyboard event with keyboard util\n Keyboard.handleKey(e, 'Slider', {\n decrease: function() {\n newValue = oldValue - _this.options.step;\n },\n increase: function() {\n newValue = oldValue + _this.options.step;\n },\n decreaseFast: function() {\n newValue = oldValue - _this.options.step * 10;\n },\n increaseFast: function() {\n newValue = oldValue + _this.options.step * 10;\n },\n min: function() {\n newValue = _this.options.start;\n },\n max: function() {\n newValue = _this.options.end;\n },\n handled: function() { // only set handle pos when event was handled specially\n e.preventDefault();\n _this._setHandlePos(_$handle, newValue);\n }\n });\n /*if (newValue) { // if pressed key has special function, update value\n e.preventDefault();\n _this._setHandlePos(_$handle, newValue);\n }*/\n });\n }\n\n /**\n * Destroys the slider plugin.\n */\n _destroy() {\n this.handles.off('.zf.slider');\n this.inputs.off('.zf.slider');\n this.$element.off('.zf.slider');\n\n clearTimeout(this.timeout);\n }\n}\n\nSlider.defaults = {\n /**\n * Minimum value for the slider scale.\n * @option\n * @type {number}\n * @default 0\n */\n start: 0,\n /**\n * Maximum value for the slider scale.\n * @option\n * @type {number}\n * @default 100\n */\n end: 100,\n /**\n * Minimum value change per change event.\n * @option\n * @type {number}\n * @default 1\n */\n step: 1,\n /**\n * Value at which the handle/input *(left handle/first input)* should be set to on initialization.\n * @option\n * @type {number}\n * @default 0\n */\n initialStart: 0,\n /**\n * Value at which the right handle/second input should be set to on initialization.\n * @option\n * @type {number}\n * @default 100\n */\n initialEnd: 100,\n /**\n * Allows the input to be located outside the container and visible. Set to by the JS\n * @option\n * @type {boolean}\n * @default false\n */\n binding: false,\n /**\n * Allows the user to click/tap on the slider bar to select a value.\n * @option\n * @type {boolean}\n * @default true\n */\n clickSelect: true,\n /**\n * Set to true and use the `vertical` class to change alignment to vertical.\n * @option\n * @type {boolean}\n * @default false\n */\n vertical: false,\n /**\n * Allows the user to drag the slider handle(s) to select a value.\n * @option\n * @type {boolean}\n * @default true\n */\n draggable: true,\n /**\n * Disables the slider and prevents event listeners from being applied. Double checked by JS with `disabledClass`.\n * @option\n * @type {boolean}\n * @default false\n */\n disabled: false,\n /**\n * Allows the use of two handles. Double checked by the JS. Changes some logic handling.\n * @option\n * @type {boolean}\n * @default false\n */\n doubleSided: false,\n /**\n * Potential future feature.\n */\n // steps: 100,\n /**\n * Number of decimal places the plugin should go to for floating point precision.\n * @option\n * @type {number}\n * @default 2\n */\n decimal: 2,\n /**\n * Time delay for dragged elements.\n */\n // dragDelay: 0,\n /**\n * Time, in ms, to animate the movement of a slider handle if user clicks/taps on the bar. Needs to be manually set if updating the transition time in the Sass settings.\n * @option\n * @type {number}\n * @default 200\n */\n moveTime: 200,//update this if changing the transition time in the sass\n /**\n * Class applied to disabled sliders.\n * @option\n * @type {string}\n * @default 'disabled'\n */\n disabledClass: 'disabled',\n /**\n * Will invert the default layout for a vertical slider.\n * @option\n * @type {boolean}\n * @default false\n */\n invertVertical: false,\n /**\n * Milliseconds before the `changed.zf-slider` event is triggered after value change.\n * @option\n * @type {number}\n * @default 500\n */\n changedDelay: 500,\n /**\n * Basevalue for non-linear sliders\n * @option\n * @type {number}\n * @default 5\n */\n nonLinearBase: 5,\n /**\n * Basevalue for non-linear sliders, possible values are: `'linear'`, `'pow'` & `'log'`. Pow and Log use the nonLinearBase setting.\n * @option\n * @type {string}\n * @default 'linear'\n */\n positionValueFunction: 'linear',\n};\n\nfunction percent(frac, num) {\n return (frac / num);\n}\nfunction absPosition($handle, dir, clickPos, param) {\n return Math.abs(($handle.position()[dir] + ($handle[param]() / 2)) - clickPos);\n}\nfunction baseLog(base, value) {\n return Math.log(value)/Math.log(base)\n}\n\nexport {Slider};\n","import $ from 'jquery';\nimport { GetYoDigits } from './foundation.core.utils';\nimport { Plugin } from './foundation.core.plugin';\n\n/**\n * SmoothScroll module.\n * @module foundation.smoothScroll\n */\nclass SmoothScroll extends Plugin {\n /**\n * Creates a new instance of SmoothScroll.\n * @class\n * @name SmoothScroll\n * @fires SmoothScroll#init\n * @param {Object} element - jQuery object to add the trigger to.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, SmoothScroll.defaults, this.$element.data(), options);\n this.className = 'SmoothScroll'; // ie9 back compat\n\n this._init();\n }\n\n /**\n * Initialize the SmoothScroll plugin\n * @private\n */\n _init() {\n const id = this.$element[0].id || GetYoDigits(6, 'smooth-scroll');\n this.$element.attr({ id });\n\n this._events();\n }\n\n /**\n * Initializes events for SmoothScroll.\n * @private\n */\n _events() {\n this._linkClickListener = this._handleLinkClick.bind(this);\n this.$element.on('click.zf.smoothScroll', this._linkClickListener);\n this.$element.on('click.zf.smoothScroll', 'a[href^=\"#\"]', this._linkClickListener);\n }\n\n /**\n * Handle the given event to smoothly scroll to the anchor pointed by the event target.\n * @param {*} e - event\n * @function\n * @private\n */\n _handleLinkClick(e) {\n // Follow the link if it does not point to an anchor.\n if (!$(e.currentTarget).is('a[href^=\"#\"]')) return;\n\n const arrival = e.currentTarget.getAttribute('href');\n\n this._inTransition = true;\n\n SmoothScroll.scrollToLoc(arrival, this.options, () => {\n this._inTransition = false;\n });\n\n e.preventDefault();\n };\n\n /**\n * Function to scroll to a given location on the page.\n * @param {String} loc - A properly formatted jQuery id selector. Example: '#foo'\n * @param {Object} options - The options to use.\n * @param {Function} callback - The callback function.\n * @static\n * @function\n */\n static scrollToLoc(loc, options = SmoothScroll.defaults, callback) {\n const $loc = $(loc);\n\n // Do nothing if target does not exist to prevent errors\n if (!$loc.length) return false;\n\n var scrollPos = Math.round($loc.offset().top - options.threshold / 2 - options.offset);\n\n $('html, body').stop(true).animate(\n { scrollTop: scrollPos },\n options.animationDuration,\n options.animationEasing,\n () => {\n if (typeof callback === 'function'){\n callback();\n }\n }\n );\n }\n\n /**\n * Destroys the SmoothScroll instance.\n * @function\n */\n _destroy() {\n this.$element.off('click.zf.smoothScroll', this._linkClickListener)\n this.$element.off('click.zf.smoothScroll', 'a[href^=\"#\"]', this._linkClickListener);\n }\n}\n\n/**\n * Default settings for plugin.\n */\nSmoothScroll.defaults = {\n /**\n * Amount of time, in ms, the animated scrolling should take between locations.\n * @option\n * @type {number}\n * @default 500\n */\n animationDuration: 500,\n /**\n * Animation style to use when scrolling between locations. Can be `'swing'` or `'linear'`.\n * @option\n * @type {string}\n * @default 'linear'\n * @see {@link https://api.jquery.com/animate|Jquery animate}\n */\n animationEasing: 'linear',\n /**\n * Number of pixels to use as a marker for location changes.\n * @option\n * @type {number}\n * @default 50\n */\n threshold: 50,\n /**\n * Number of pixels to offset the scroll of the page on item click if using a sticky nav bar.\n * @option\n * @type {number}\n * @default 0\n */\n offset: 0\n}\n\nexport {SmoothScroll}\n","import $ from 'jquery';\nimport { Plugin } from './foundation.core.plugin';\nimport { onLoad, GetYoDigits } from './foundation.core.utils';\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { Triggers } from './foundation.util.triggers';\n\n/**\n * Sticky module.\n * @module foundation.sticky\n * @requires foundation.util.triggers\n * @requires foundation.util.mediaQuery\n */\n\nclass Sticky extends Plugin {\n /**\n * Creates a new instance of a sticky thing.\n * @class\n * @name Sticky\n * @param {jQuery} element - jQuery object to make sticky.\n * @param {Object} options - options object passed when creating the element programmatically.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Sticky.defaults, this.$element.data(), options);\n this.className = 'Sticky'; // ie9 back compat\n\n // Triggers init is idempotent, just need to make sure it is initialized\n Triggers.init($);\n\n this._init();\n }\n\n /**\n * Initializes the sticky element by adding classes, getting/setting dimensions, breakpoints and attributes\n * @function\n * @private\n */\n _init() {\n MediaQuery._init();\n\n var $parent = this.$element.parent('[data-sticky-container]'),\n id = this.$element[0].id || GetYoDigits(6, 'sticky'),\n _this = this;\n\n if($parent.length){\n this.$container = $parent;\n } else {\n this.wasWrapped = true;\n this.$element.wrap(this.options.container);\n this.$container = this.$element.parent();\n }\n this.$container.addClass(this.options.containerClass);\n\n this.$element.addClass(this.options.stickyClass).attr({ 'data-resize': id, 'data-mutate': id });\n if (this.options.anchor !== '') {\n $('#' + _this.options.anchor).attr({ 'data-mutate': id });\n }\n\n this.scrollCount = this.options.checkEvery;\n this.isStuck = false;\n this.onLoadListener = onLoad($(window), function () {\n //We calculate the container height to have correct values for anchor points offset calculation.\n _this.containerHeight = _this.$element.css(\"display\") === \"none\" ? 0 : _this.$element[0].getBoundingClientRect().height;\n _this.$container.css('height', _this.containerHeight);\n _this.elemHeight = _this.containerHeight;\n if (_this.options.anchor !== '') {\n _this.$anchor = $('#' + _this.options.anchor);\n } else {\n _this._parsePoints();\n }\n\n _this._setSizes(function () {\n var scroll = window.pageYOffset;\n _this._calc(false, scroll);\n //Unstick the element will ensure that proper classes are set.\n if (!_this.isStuck) {\n _this._removeSticky((scroll >= _this.topPoint) ? false : true);\n }\n });\n _this._events(id.split('-').reverse().join('-'));\n });\n }\n\n /**\n * If using multiple elements as anchors, calculates the top and bottom pixel values the sticky thing should stick and unstick on.\n * @function\n * @private\n */\n _parsePoints() {\n var top = this.options.topAnchor === \"\" ? 1 : this.options.topAnchor,\n btm = this.options.btmAnchor === \"\" ? document.documentElement.scrollHeight : this.options.btmAnchor,\n pts = [top, btm],\n breaks = {};\n for (var i = 0, len = pts.length; i < len && pts[i]; i++) {\n var pt;\n if (typeof pts[i] === 'number') {\n pt = pts[i];\n } else {\n var place = pts[i].split(':'),\n anchor = $(`#${place[0]}`);\n\n pt = anchor.offset().top;\n if (place[1] && place[1].toLowerCase() === 'bottom') {\n pt += anchor[0].getBoundingClientRect().height;\n }\n }\n breaks[i] = pt;\n }\n\n\n this.points = breaks;\n return;\n }\n\n /**\n * Adds event handlers for the scrolling element.\n * @private\n * @param {String} id - pseudo-random id for unique scroll event listener.\n */\n _events(id) {\n var _this = this,\n scrollListener = this.scrollListener = `scroll.zf.${id}`;\n if (this.isOn) { return; }\n if (this.canStick) {\n this.isOn = true;\n $(window).off(scrollListener)\n .on(scrollListener, function() {\n if (_this.scrollCount === 0) {\n _this.scrollCount = _this.options.checkEvery;\n _this._setSizes(function() {\n _this._calc(false, window.pageYOffset);\n });\n } else {\n _this.scrollCount--;\n _this._calc(false, window.pageYOffset);\n }\n });\n }\n\n this.$element.off('resizeme.zf.trigger')\n .on('resizeme.zf.trigger', function() {\n _this._eventsHandler(id);\n });\n\n this.$element.on('mutateme.zf.trigger', function () {\n _this._eventsHandler(id);\n });\n\n if(this.$anchor) {\n this.$anchor.on('mutateme.zf.trigger', function () {\n _this._eventsHandler(id);\n });\n }\n }\n\n /**\n * Handler for events.\n * @private\n * @param {String} id - pseudo-random id for unique scroll event listener.\n */\n _eventsHandler(id) {\n var _this = this,\n scrollListener = this.scrollListener = `scroll.zf.${id}`;\n\n _this._setSizes(function() {\n _this._calc(false);\n if (_this.canStick) {\n if (!_this.isOn) {\n _this._events(id);\n }\n } else if (_this.isOn) {\n _this._pauseListeners(scrollListener);\n }\n });\n }\n\n /**\n * Removes event handlers for scroll and change events on anchor.\n * @fires Sticky#pause\n * @param {String} scrollListener - unique, namespaced scroll listener attached to `window`\n */\n _pauseListeners(scrollListener) {\n this.isOn = false;\n $(window).off(scrollListener);\n\n /**\n * Fires when the plugin is paused due to resize event shrinking the view.\n * @event Sticky#pause\n * @private\n */\n this.$element.trigger('pause.zf.sticky');\n }\n\n /**\n * Called on every `scroll` event and on `_init`\n * fires functions based on booleans and cached values\n * @param {Boolean} checkSizes - true if plugin should recalculate sizes and breakpoints.\n * @param {Number} scroll - current scroll position passed from scroll event cb function. If not passed, defaults to `window.pageYOffset`.\n */\n _calc(checkSizes, scroll) {\n if (checkSizes) { this._setSizes(); }\n\n if (!this.canStick) {\n if (this.isStuck) {\n this._removeSticky(true);\n }\n return false;\n }\n\n if (!scroll) { scroll = window.pageYOffset; }\n\n if (scroll >= this.topPoint) {\n if (scroll <= this.bottomPoint) {\n if (!this.isStuck) {\n this._setSticky();\n }\n } else {\n if (this.isStuck) {\n this._removeSticky(false);\n }\n }\n } else {\n if (this.isStuck) {\n this._removeSticky(true);\n }\n }\n }\n\n /**\n * Causes the $element to become stuck.\n * Adds `position: fixed;`, and helper classes.\n * @fires Sticky#stuckto\n * @function\n * @private\n */\n _setSticky() {\n var _this = this,\n stickTo = this.options.stickTo,\n mrgn = stickTo === 'top' ? 'marginTop' : 'marginBottom',\n notStuckTo = stickTo === 'top' ? 'bottom' : 'top',\n css = {};\n\n css[mrgn] = `${this.options[mrgn]}em`;\n css[stickTo] = 0;\n css[notStuckTo] = 'auto';\n this.isStuck = true;\n this.$element.removeClass(`is-anchored is-at-${notStuckTo}`)\n .addClass(`is-stuck is-at-${stickTo}`)\n .css(css)\n /**\n * Fires when the $element has become `position: fixed;`\n * Namespaced to `top` or `bottom`, e.g. `sticky.zf.stuckto:top`\n * @event Sticky#stuckto\n */\n .trigger(`sticky.zf.stuckto:${stickTo}`);\n this.$element.on(\"transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd\", function() {\n _this._setSizes();\n });\n }\n\n /**\n * Causes the $element to become unstuck.\n * Removes `position: fixed;`, and helper classes.\n * Adds other helper classes.\n * @param {Boolean} isTop - tells the function if the $element should anchor to the top or bottom of its $anchor element.\n * @fires Sticky#unstuckfrom\n * @private\n */\n _removeSticky(isTop) {\n var stickTo = this.options.stickTo,\n stickToTop = stickTo === 'top',\n css = {},\n anchorPt = (this.points ? this.points[1] - this.points[0] : this.anchorHeight) - this.elemHeight,\n mrgn = stickToTop ? 'marginTop' : 'marginBottom',\n topOrBottom = isTop ? 'top' : 'bottom';\n\n css[mrgn] = 0;\n\n css.bottom = 'auto';\n if(isTop) {\n css.top = 0;\n } else {\n css.top = anchorPt;\n }\n\n this.isStuck = false;\n this.$element.removeClass(`is-stuck is-at-${stickTo}`)\n .addClass(`is-anchored is-at-${topOrBottom}`)\n .css(css)\n /**\n * Fires when the $element has become anchored.\n * Namespaced to `top` or `bottom`, e.g. `sticky.zf.unstuckfrom:bottom`\n * @event Sticky#unstuckfrom\n */\n .trigger(`sticky.zf.unstuckfrom:${topOrBottom}`);\n }\n\n /**\n * Sets the $element and $container sizes for plugin.\n * Calls `_setBreakPoints`.\n * @param {Function} cb - optional callback function to fire on completion of `_setBreakPoints`.\n * @private\n */\n _setSizes(cb) {\n this.canStick = MediaQuery.is(this.options.stickyOn);\n if (!this.canStick) {\n if (cb && typeof cb === 'function') { cb(); }\n }\n\n var newElemWidth = this.$container[0].getBoundingClientRect().width,\n comp = window.getComputedStyle(this.$container[0]),\n pdngl = parseInt(comp['padding-left'], 10),\n pdngr = parseInt(comp['padding-right'], 10);\n\n if (this.$anchor && this.$anchor.length) {\n this.anchorHeight = this.$anchor[0].getBoundingClientRect().height;\n } else {\n this._parsePoints();\n }\n\n this.$element.css({\n 'max-width': `${newElemWidth - pdngl - pdngr}px`\n });\n\n // Recalculate the height only if it is \"dynamic\"\n if (this.options.dynamicHeight || !this.containerHeight) {\n // Get the sticked element height and apply it to the container to \"hold the place\"\n var newContainerHeight = this.$element[0].getBoundingClientRect().height || this.containerHeight;\n newContainerHeight = this.$element.css(\"display\") === \"none\" ? 0 : newContainerHeight;\n this.$container.css('height', newContainerHeight);\n this.containerHeight = newContainerHeight;\n }\n this.elemHeight = this.containerHeight;\n\n if (!this.isStuck) {\n if (this.$element.hasClass('is-at-bottom')) {\n var anchorPt = (this.points ? this.points[1] - this.$container.offset().top : this.anchorHeight) - this.elemHeight;\n this.$element.css('top', anchorPt);\n }\n }\n\n this._setBreakPoints(this.containerHeight, function() {\n if (cb && typeof cb === 'function') { cb(); }\n });\n }\n\n /**\n * Sets the upper and lower breakpoints for the element to become sticky/unsticky.\n * @param {Number} elemHeight - px value for sticky.$element height, calculated by `_setSizes`.\n * @param {Function} cb - optional callback function to be called on completion.\n * @private\n */\n _setBreakPoints(elemHeight, cb) {\n if (!this.canStick) {\n if (cb && typeof cb === 'function') { cb(); }\n else { return false; }\n }\n var mTop = emCalc(this.options.marginTop),\n mBtm = emCalc(this.options.marginBottom),\n topPoint = this.points ? this.points[0] : this.$anchor.offset().top,\n bottomPoint = this.points ? this.points[1] : topPoint + this.anchorHeight,\n // topPoint = this.$anchor.offset().top || this.points[0],\n // bottomPoint = topPoint + this.anchorHeight || this.points[1],\n winHeight = window.innerHeight;\n\n if (this.options.stickTo === 'top') {\n topPoint -= mTop;\n bottomPoint -= (elemHeight + mTop);\n } else if (this.options.stickTo === 'bottom') {\n topPoint -= (winHeight - (elemHeight + mBtm));\n bottomPoint -= (winHeight - mBtm);\n } else {\n //this would be the stickTo: both option... tricky\n }\n\n this.topPoint = topPoint;\n this.bottomPoint = bottomPoint;\n\n if (cb && typeof cb === 'function') { cb(); }\n }\n\n /**\n * Destroys the current sticky element.\n * Resets the element to the top position first.\n * Removes event listeners, JS-added css properties and classes, and unwraps the $element if the JS added the $container.\n * @function\n */\n _destroy() {\n this._removeSticky(true);\n\n this.$element.removeClass(`${this.options.stickyClass} is-anchored is-at-top`)\n .css({\n height: '',\n top: '',\n bottom: '',\n 'max-width': ''\n })\n .off('resizeme.zf.trigger')\n .off('mutateme.zf.trigger');\n if (this.$anchor && this.$anchor.length) {\n this.$anchor.off('change.zf.sticky');\n }\n if (this.scrollListener) $(window).off(this.scrollListener)\n if (this.onLoadListener) $(window).off(this.onLoadListener)\n\n if (this.wasWrapped) {\n this.$element.unwrap();\n } else {\n this.$container.removeClass(this.options.containerClass)\n .css({\n height: ''\n });\n }\n }\n}\n\nSticky.defaults = {\n /**\n * Customizable container template. Add your own classes for styling and sizing.\n * @option\n * @type {string}\n * @default '<div data-sticky-container></div>'\n */\n container: '
    ',\n /**\n * Location in the view the element sticks to. Can be `'top'` or `'bottom'`.\n * @option\n * @type {string}\n * @default 'top'\n */\n stickTo: 'top',\n /**\n * If anchored to a single element, the id of that element.\n * @option\n * @type {string}\n * @default ''\n */\n anchor: '',\n /**\n * If using more than one element as anchor points, the id of the top anchor.\n * @option\n * @type {string}\n * @default ''\n */\n topAnchor: '',\n /**\n * If using more than one element as anchor points, the id of the bottom anchor.\n * @option\n * @type {string}\n * @default ''\n */\n btmAnchor: '',\n /**\n * Margin, in `em`'s to apply to the top of the element when it becomes sticky.\n * @option\n * @type {number}\n * @default 1\n */\n marginTop: 1,\n /**\n * Margin, in `em`'s to apply to the bottom of the element when it becomes sticky.\n * @option\n * @type {number}\n * @default 1\n */\n marginBottom: 1,\n /**\n * Breakpoint string that is the minimum screen size an element should become sticky.\n * @option\n * @type {string}\n * @default 'medium'\n */\n stickyOn: 'medium',\n /**\n * Class applied to sticky element, and removed on destruction. Foundation defaults to `sticky`.\n * @option\n * @type {string}\n * @default 'sticky'\n */\n stickyClass: 'sticky',\n /**\n * Class applied to sticky container. Foundation defaults to `sticky-container`.\n * @option\n * @type {string}\n * @default 'sticky-container'\n */\n containerClass: 'sticky-container',\n /**\n * If true (by default), keep the sticky container the same height as the element. Otherwise, the container height is set once and does not change.\n * @option\n * @type {boolean}\n * @default true\n */\n dynamicHeight: true,\n /**\n * Number of scroll events between the plugin's recalculating sticky points. Setting it to `0` will cause it to recalc every scroll event, setting it to `-1` will prevent recalc on scroll.\n * @option\n * @type {number}\n * @default -1\n */\n checkEvery: -1\n};\n\n/**\n * Helper function to calculate em values\n * @param Number {em} - number of em's to calculate into pixels\n */\nfunction emCalc(em) {\n return parseInt(window.getComputedStyle(document.body, null).fontSize, 10) * em;\n}\n\nexport {Sticky};\n","import $ from 'jquery';\nimport { Plugin } from './foundation.core.plugin';\nimport { onLoad } from './foundation.core.utils';\nimport { Keyboard } from './foundation.util.keyboard';\nimport { onImagesLoaded } from './foundation.util.imageLoader';\n/**\n * Tabs module.\n * @module foundation.tabs\n * @requires foundation.util.keyboard\n * @requires foundation.util.imageLoader if tabs contain images\n */\n\nclass Tabs extends Plugin {\n /**\n * Creates a new instance of tabs.\n * @class\n * @name Tabs\n * @fires Tabs#init\n * @param {jQuery} element - jQuery object to make into tabs.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Tabs.defaults, this.$element.data(), options);\n this.className = 'Tabs'; // ie9 back compat\n\n this._init();\n Keyboard.register('Tabs', {\n 'ENTER': 'open',\n 'SPACE': 'open',\n 'ARROW_RIGHT': 'next',\n 'ARROW_UP': 'previous',\n 'ARROW_DOWN': 'next',\n 'ARROW_LEFT': 'previous'\n // 'TAB': 'next',\n // 'SHIFT_TAB': 'previous'\n });\n }\n\n /**\n * Initializes the tabs by showing and focusing (if autoFocus=true) the preset active tab.\n * @private\n */\n _init() {\n var _this = this;\n this._isInitializing = true;\n\n this.$element.attr({'role': 'tablist'});\n this.$tabTitles = this.$element.find(`.${this.options.linkClass}`);\n this.$tabContent = $(`[data-tabs-content=\"${this.$element[0].id}\"]`);\n\n this.$tabTitles.each(function(){\n var $elem = $(this),\n $link = $elem.find('a'),\n isActive = $elem.hasClass(`${_this.options.linkActiveClass}`),\n hash = $link.attr('data-tabs-target') || $link[0].hash.slice(1),\n linkId = $link[0].id ? $link[0].id : `${hash}-label`,\n $tabContent = $(`#${hash}`);\n\n $elem.attr({'role': 'presentation'});\n\n $link.attr({\n 'role': 'tab',\n 'aria-controls': hash,\n 'aria-selected': isActive,\n 'id': linkId,\n 'tabindex': isActive ? '0' : '-1'\n });\n\n $tabContent.attr({\n 'role': 'tabpanel',\n 'aria-labelledby': linkId\n });\n\n // Save up the initial hash to return to it later when going back in history\n if (isActive) {\n _this._initialAnchor = `#${hash}`;\n }\n\n if(!isActive) {\n $tabContent.attr('aria-hidden', 'true');\n }\n\n if(isActive && _this.options.autoFocus){\n _this.onLoadListener = onLoad($(window), function() {\n $('html, body').animate({ scrollTop: $elem.offset().top }, _this.options.deepLinkSmudgeDelay, () => {\n $link.focus();\n });\n });\n }\n });\n\n if(this.options.matchHeight) {\n var $images = this.$tabContent.find('img');\n\n if ($images.length) {\n onImagesLoaded($images, this._setHeight.bind(this));\n } else {\n this._setHeight();\n }\n }\n\n // Current context-bound function to open tabs on page load or history hashchange\n this._checkDeepLink = () => {\n var anchor = window.location.hash;\n\n if (!anchor.length) {\n // If we are still initializing and there is no anchor, then there is nothing to do\n if (this._isInitializing) return;\n // Otherwise, move to the initial anchor\n if (this._initialAnchor) anchor = this._initialAnchor;\n }\n\n var anchorNoHash = anchor.indexOf('#') >= 0 ? anchor.slice(1) : anchor;\n var $anchor = anchorNoHash && $(`#${anchorNoHash}`);\n var $link = anchor && this.$element.find(`[href$=\"${anchor}\"],[data-tabs-target=\"${anchorNoHash}\"]`).first();\n // Whether the anchor element that has been found is part of this element\n var isOwnAnchor = !!($anchor.length && $link.length);\n\n if (isOwnAnchor) {\n // If there is an anchor for the hash, select it\n if ($anchor && $anchor.length && $link && $link.length) {\n this.selectTab($anchor, true);\n }\n // Otherwise, collapse everything\n else {\n this._collapse();\n }\n\n // Roll up a little to show the titles\n if (this.options.deepLinkSmudge) {\n var offset = this.$element.offset();\n $('html, body').animate({ scrollTop: offset.top - this.options.deepLinkSmudgeOffset}, this.options.deepLinkSmudgeDelay);\n }\n\n /**\n * Fires when the plugin has deeplinked at pageload\n * @event Tabs#deeplink\n */\n this.$element.trigger('deeplink.zf.tabs', [$link, $anchor]);\n }\n }\n\n //use browser to open a tab, if it exists in this tabset\n if (this.options.deepLink) {\n this._checkDeepLink();\n }\n\n this._events();\n\n this._isInitializing = false;\n }\n\n /**\n * Adds event handlers for items within the tabs.\n * @private\n */\n _events() {\n this._addKeyHandler();\n this._addClickHandler();\n this._setHeightMqHandler = null;\n\n if (this.options.matchHeight) {\n this._setHeightMqHandler = this._setHeight.bind(this);\n\n $(window).on('changed.zf.mediaquery', this._setHeightMqHandler);\n }\n\n if(this.options.deepLink) {\n $(window).on('hashchange', this._checkDeepLink);\n }\n }\n\n /**\n * Adds click handlers for items within the tabs.\n * @private\n */\n _addClickHandler() {\n var _this = this;\n\n this.$element\n .off('click.zf.tabs')\n .on('click.zf.tabs', `.${this.options.linkClass}`, function(e){\n e.preventDefault();\n _this._handleTabChange($(this));\n });\n }\n\n /**\n * Adds keyboard event handlers for items within the tabs.\n * @private\n */\n _addKeyHandler() {\n var _this = this;\n\n this.$tabTitles.off('keydown.zf.tabs').on('keydown.zf.tabs', function(e){\n if (e.which === 9) return;\n\n\n var $element = $(this),\n $elements = $element.parent('ul').children('li'),\n $prevElement,\n $nextElement;\n\n $elements.each(function(i) {\n if ($(this).is($element)) {\n if (_this.options.wrapOnKeys) {\n $prevElement = i === 0 ? $elements.last() : $elements.eq(i-1);\n $nextElement = i === $elements.length -1 ? $elements.first() : $elements.eq(i+1);\n } else {\n $prevElement = $elements.eq(Math.max(0, i-1));\n $nextElement = $elements.eq(Math.min(i+1, $elements.length-1));\n }\n return;\n }\n });\n\n // handle keyboard event with keyboard util\n Keyboard.handleKey(e, 'Tabs', {\n open: function() {\n $element.find('[role=\"tab\"]').focus();\n _this._handleTabChange($element);\n },\n previous: function() {\n $prevElement.find('[role=\"tab\"]').focus();\n _this._handleTabChange($prevElement);\n },\n next: function() {\n $nextElement.find('[role=\"tab\"]').focus();\n _this._handleTabChange($nextElement);\n },\n handled: function() {\n e.preventDefault();\n }\n });\n });\n }\n\n /**\n * Opens the tab `$targetContent` defined by `$target`. Collapses active tab.\n * @param {jQuery} $target - Tab to open.\n * @param {boolean} historyHandled - browser has already handled a history update\n * @fires Tabs#change\n * @function\n */\n _handleTabChange($target, historyHandled) {\n\n // With `activeCollapse`, if the target is the active Tab, collapse it.\n if ($target.hasClass(`${this.options.linkActiveClass}`)) {\n if(this.options.activeCollapse) {\n this._collapse();\n }\n return;\n }\n\n var $oldTab = this.$element.\n find(`.${this.options.linkClass}.${this.options.linkActiveClass}`),\n $tabLink = $target.find('[role=\"tab\"]'),\n target = $tabLink.attr('data-tabs-target'),\n anchor = target && target.length ? `#${target}` : $tabLink[0].hash,\n $targetContent = this.$tabContent.find(anchor);\n\n //close old tab\n this._collapseTab($oldTab);\n\n //open new tab\n this._openTab($target);\n\n //either replace or update browser history\n if (this.options.deepLink && !historyHandled) {\n if (this.options.updateHistory) {\n history.pushState({}, '', anchor);\n } else {\n history.replaceState({}, '', anchor);\n }\n }\n\n /**\n * Fires when the plugin has successfully changed tabs.\n * @event Tabs#change\n */\n this.$element.trigger('change.zf.tabs', [$target, $targetContent]);\n\n //fire to children a mutation event\n $targetContent.find(\"[data-mutate]\").trigger(\"mutateme.zf.trigger\");\n }\n\n /**\n * Opens the tab `$targetContent` defined by `$target`.\n * @param {jQuery} $target - Tab to open.\n * @function\n */\n _openTab($target) {\n var $tabLink = $target.find('[role=\"tab\"]'),\n hash = $tabLink.attr('data-tabs-target') || $tabLink[0].hash.slice(1),\n $targetContent = this.$tabContent.find(`#${hash}`);\n\n $target.addClass(`${this.options.linkActiveClass}`);\n\n $tabLink.attr({\n 'aria-selected': 'true',\n 'tabindex': '0'\n });\n\n $targetContent\n .addClass(`${this.options.panelActiveClass}`).removeAttr('aria-hidden');\n }\n\n /**\n * Collapses `$targetContent` defined by `$target`.\n * @param {jQuery} $target - Tab to collapse.\n * @function\n */\n _collapseTab($target) {\n var $targetAnchor = $target\n .removeClass(`${this.options.linkActiveClass}`)\n .find('[role=\"tab\"]')\n .attr({\n 'aria-selected': 'false',\n 'tabindex': -1\n });\n\n $(`#${$targetAnchor.attr('aria-controls')}`)\n .removeClass(`${this.options.panelActiveClass}`)\n .attr({ 'aria-hidden': 'true' })\n }\n\n /**\n * Collapses the active Tab.\n * @fires Tabs#collapse\n * @function\n */\n _collapse() {\n var $activeTab = this.$element.find(`.${this.options.linkClass}.${this.options.linkActiveClass}`);\n\n if ($activeTab.length) {\n this._collapseTab($activeTab);\n\n /**\n * Fires when the plugin has successfully collapsed tabs.\n * @event Tabs#collapse\n */\n this.$element.trigger('collapse.zf.tabs', [$activeTab]);\n }\n }\n\n /**\n * Public method for selecting a content pane to display.\n * @param {jQuery | String} elem - jQuery object or string of the id of the pane to display.\n * @param {boolean} historyHandled - browser has already handled a history update\n * @function\n */\n selectTab(elem, historyHandled) {\n var idStr, hashIdStr;\n\n if (typeof elem === 'object') {\n idStr = elem[0].id;\n } else {\n idStr = elem;\n }\n\n if (idStr.indexOf('#') < 0) {\n hashIdStr = `#${idStr}`;\n } else {\n hashIdStr = idStr;\n idStr = idStr.slice(1);\n }\n\n var $target = this.$tabTitles.has(`[href$=\"${hashIdStr}\"],[data-tabs-target=\"${idStr}\"]`).first();\n\n this._handleTabChange($target, historyHandled);\n };\n\n /**\n * Sets the height of each panel to the height of the tallest panel.\n * If enabled in options, gets called on media query change.\n * If loading content via external source, can be called directly or with _reflow.\n * If enabled with `data-match-height=\"true\"`, tabs sets to equal height\n * @function\n * @private\n */\n _setHeight() {\n var max = 0,\n _this = this; // Lock down the `this` value for the root tabs object\n\n if (!this.$tabContent) {\n return;\n }\n\n this.$tabContent\n .find(`.${this.options.panelClass}`)\n .css('min-height', '')\n .each(function() {\n\n var panel = $(this),\n isActive = panel.hasClass(`${_this.options.panelActiveClass}`); // get the options from the parent instead of trying to get them from the child\n\n if (!isActive) {\n panel.css({'visibility': 'hidden', 'display': 'block'});\n }\n\n var temp = this.getBoundingClientRect().height;\n\n if (!isActive) {\n panel.css({\n 'visibility': '',\n 'display': ''\n });\n }\n\n max = temp > max ? temp : max;\n })\n .css('min-height', `${max}px`);\n }\n\n /**\n * Destroys an instance of tabs.\n * @fires Tabs#destroyed\n */\n _destroy() {\n this.$element\n .find(`.${this.options.linkClass}`)\n .off('.zf.tabs').hide().end()\n .find(`.${this.options.panelClass}`)\n .hide();\n\n if (this.options.matchHeight) {\n if (this._setHeightMqHandler != null) {\n $(window).off('changed.zf.mediaquery', this._setHeightMqHandler);\n }\n }\n\n if (this.options.deepLink) {\n $(window).off('hashchange', this._checkDeepLink);\n }\n\n if (this.onLoadListener) {\n $(window).off(this.onLoadListener);\n }\n }\n}\n\nTabs.defaults = {\n /**\n * Link the location hash to the active pane.\n * Set the location hash when the active pane changes, and open the corresponding pane when the location changes.\n * @option\n * @type {boolean}\n * @default false\n */\n deepLink: false,\n\n /**\n * If `deepLink` is enabled, adjust the deep link scroll to make sure the top of the tab panel is visible\n * @option\n * @type {boolean}\n * @default false\n */\n deepLinkSmudge: false,\n\n /**\n * If `deepLinkSmudge` is enabled, animation time (ms) for the deep link adjustment\n * @option\n * @type {number}\n * @default 300\n */\n deepLinkSmudgeDelay: 300,\n\n /**\n * If `deepLinkSmudge` is enabled, animation offset from the top for the deep link adjustment\n * @option\n * @type {number}\n * @default 0\n */\n deepLinkSmudgeOffset: 0,\n\n /**\n * If `deepLink` is enabled, update the browser history with the open tab\n * @option\n * @type {boolean}\n * @default false\n */\n updateHistory: false,\n\n /**\n * Allows the window to scroll to content of active pane on load.\n * Not recommended if more than one tab panel per page.\n * @option\n * @type {boolean}\n * @default false\n */\n autoFocus: false,\n\n /**\n * Allows keyboard input to 'wrap' around the tab links.\n * @option\n * @type {boolean}\n * @default true\n */\n wrapOnKeys: true,\n\n /**\n * Allows the tab content panes to match heights if set to true.\n * @option\n * @type {boolean}\n * @default false\n */\n matchHeight: false,\n\n /**\n * Allows active tabs to collapse when clicked.\n * @option\n * @type {boolean}\n * @default false\n */\n activeCollapse: false,\n\n /**\n * Class applied to `li`'s in tab link list.\n * @option\n * @type {string}\n * @default 'tabs-title'\n */\n linkClass: 'tabs-title',\n\n /**\n * Class applied to the active `li` in tab link list.\n * @option\n * @type {string}\n * @default 'is-active'\n */\n linkActiveClass: 'is-active',\n\n /**\n * Class applied to the content containers.\n * @option\n * @type {string}\n * @default 'tabs-panel'\n */\n panelClass: 'tabs-panel',\n\n /**\n * Class applied to the active content container.\n * @option\n * @type {string}\n * @default 'is-active'\n */\n panelActiveClass: 'is-active'\n};\n\nexport {Tabs};\n","import $ from 'jquery';\nimport { Motion } from './foundation.util.motion';\nimport { Plugin } from './foundation.core.plugin';\nimport { RegExpEscape } from './foundation.core.utils';\nimport { Triggers } from './foundation.util.triggers';\n\n/**\n * Toggler module.\n * @module foundation.toggler\n * @requires foundation.util.motion\n * @requires foundation.util.triggers\n */\n\nclass Toggler extends Plugin {\n /**\n * Creates a new instance of Toggler.\n * @class\n * @name Toggler\n * @fires Toggler#init\n * @param {Object} element - jQuery object to add the trigger to.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Toggler.defaults, element.data(), options);\n this.className = '';\n this.className = 'Toggler'; // ie9 back compat\n\n // Triggers init is idempotent, just need to make sure it is initialized\n Triggers.init($);\n\n this._init();\n this._events();\n }\n\n /**\n * Initializes the Toggler plugin by parsing the toggle class from data-toggler, or animation classes from data-animate.\n * @function\n * @private\n */\n _init() {\n // Collect triggers to set ARIA attributes to\n var id = this.$element[0].id,\n $triggers = $(`[data-open~=\"${id}\"], [data-close~=\"${id}\"], [data-toggle~=\"${id}\"]`);\n\n var input;\n // Parse animation classes if they were set\n if (this.options.animate) {\n input = this.options.animate.split(' ');\n\n this.animationIn = input[0];\n this.animationOut = input[1] || null;\n\n // - aria-expanded: according to the element visibility.\n $triggers.attr('aria-expanded', !this.$element.is(':hidden'));\n }\n // Otherwise, parse toggle class\n else {\n input = this.options.toggler;\n if (typeof input !== 'string' || !input.length) {\n throw new Error(`The 'toggler' option containing the target class is required, got \"${input}\"`);\n }\n // Allow for a . at the beginning of the string\n this.className = input[0] === '.' ? input.slice(1) : input;\n\n // - aria-expanded: according to the elements class set.\n $triggers.attr('aria-expanded', this.$element.hasClass(this.className));\n }\n\n // - aria-controls: adding the element id to it if not already in it.\n $triggers.each((index, trigger) => {\n const $trigger = $(trigger);\n const controls = $trigger.attr('aria-controls') || '';\n\n const containsId = new RegExp(`\\\\b${RegExpEscape(id)}\\\\b`).test(controls);\n if (!containsId) $trigger.attr('aria-controls', controls ? `${controls} ${id}` : id);\n });\n }\n\n /**\n * Initializes events for the toggle trigger.\n * @function\n * @private\n */\n _events() {\n this.$element.off('toggle.zf.trigger').on('toggle.zf.trigger', this.toggle.bind(this));\n }\n\n /**\n * Toggles the target class on the target element. An event is fired from the original trigger depending on if the resultant state was \"on\" or \"off\".\n * @function\n * @fires Toggler#on\n * @fires Toggler#off\n */\n toggle() {\n this[ this.options.animate ? '_toggleAnimate' : '_toggleClass']();\n }\n\n _toggleClass() {\n this.$element.toggleClass(this.className);\n\n var isOn = this.$element.hasClass(this.className);\n if (isOn) {\n /**\n * Fires if the target element has the class after a toggle.\n * @event Toggler#on\n */\n this.$element.trigger('on.zf.toggler');\n }\n else {\n /**\n * Fires if the target element does not have the class after a toggle.\n * @event Toggler#off\n */\n this.$element.trigger('off.zf.toggler');\n }\n\n this._updateARIA(isOn);\n this.$element.find('[data-mutate]').trigger('mutateme.zf.trigger');\n }\n\n _toggleAnimate() {\n var _this = this;\n\n if (this.$element.is(':hidden')) {\n Motion.animateIn(this.$element, this.animationIn, function() {\n _this._updateARIA(true);\n this.trigger('on.zf.toggler');\n this.find('[data-mutate]').trigger('mutateme.zf.trigger');\n });\n }\n else {\n Motion.animateOut(this.$element, this.animationOut, function() {\n _this._updateARIA(false);\n this.trigger('off.zf.toggler');\n this.find('[data-mutate]').trigger('mutateme.zf.trigger');\n });\n }\n }\n\n _updateARIA(isOn) {\n var id = this.$element[0].id;\n $(`[data-open=\"${id}\"], [data-close=\"${id}\"], [data-toggle=\"${id}\"]`)\n .attr({\n 'aria-expanded': isOn ? true : false\n });\n }\n\n /**\n * Destroys the instance of Toggler on the element.\n * @function\n */\n _destroy() {\n this.$element.off('.zf.toggler');\n }\n}\n\nToggler.defaults = {\n /**\n * Class of the element to toggle. It can be provided with or without \".\"\n * @option\n * @type {string}\n */\n toggler: undefined,\n /**\n * Tells the plugin if the element should animated when toggled.\n * @option\n * @type {boolean}\n * @default false\n */\n animate: false\n};\n\nexport {Toggler};\n","import $ from 'jquery';\nimport { GetYoDigits, ignoreMousedisappear } from './foundation.core.utils';\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { Triggers } from './foundation.util.triggers';\nimport { Positionable } from './foundation.positionable';\n\n/**\n * Tooltip module.\n * @module foundation.tooltip\n * @requires foundation.util.box\n * @requires foundation.util.mediaQuery\n * @requires foundation.util.triggers\n */\n\nclass Tooltip extends Positionable {\n /**\n * Creates a new instance of a Tooltip.\n * @class\n * @name Tooltip\n * @fires Tooltip#init\n * @param {jQuery} element - jQuery object to attach a tooltip to.\n * @param {Object} options - object to extend the default configuration.\n */\n _setup(element, options) {\n this.$element = element;\n this.options = $.extend({}, Tooltip.defaults, this.$element.data(), options);\n this.className = 'Tooltip'; // ie9 back compat\n\n this.isActive = false;\n this.isClick = false;\n\n // Triggers init is idempotent, just need to make sure it is initialized\n Triggers.init($);\n\n this._init();\n }\n\n /**\n * Initializes the tooltip by setting the creating the tip element, adding it's text, setting private variables and setting attributes on the anchor.\n * @private\n */\n _init() {\n MediaQuery._init();\n var elemId = this.$element.attr('aria-describedby') || GetYoDigits(6, 'tooltip');\n\n this.options.tipText = this.options.tipText || this.$element.attr('title');\n this.template = this.options.template ? $(this.options.template) : this._buildTemplate(elemId);\n\n if (this.options.allowHtml) {\n this.template.appendTo(document.body)\n .html(this.options.tipText)\n .hide();\n } else {\n this.template.appendTo(document.body)\n .text(this.options.tipText)\n .hide();\n }\n\n this.$element.attr({\n 'title': '',\n 'aria-describedby': elemId,\n 'data-yeti-box': elemId,\n 'data-toggle': elemId,\n 'data-resize': elemId\n }).addClass(this.options.triggerClass);\n\n super._init();\n this._events();\n }\n\n _getDefaultPosition() {\n // handle legacy classnames\n var elementClassName = this.$element[0].className;\n if (this.$element[0] instanceof SVGElement) {\n elementClassName = elementClassName.baseVal;\n }\n var position = elementClassName.match(/\\b(top|left|right|bottom)\\b/g);\n return position ? position[0] : 'top';\n }\n\n _getDefaultAlignment() {\n return 'center';\n }\n\n _getHOffset() {\n if(this.position === 'left' || this.position === 'right') {\n return this.options.hOffset + this.options.tooltipWidth;\n } else {\n return this.options.hOffset\n }\n }\n\n _getVOffset() {\n if(this.position === 'top' || this.position === 'bottom') {\n return this.options.vOffset + this.options.tooltipHeight;\n } else {\n return this.options.vOffset\n }\n }\n\n /**\n * builds the tooltip element, adds attributes, and returns the template.\n * @private\n */\n _buildTemplate(id) {\n var templateClasses = (`${this.options.tooltipClass} ${this.options.templateClasses}`).trim();\n var $template = $('
    ').addClass(templateClasses).attr({\n 'role': 'tooltip',\n 'aria-hidden': true,\n 'data-is-active': false,\n 'data-is-focus': false,\n 'id': id\n });\n return $template;\n }\n\n /**\n * sets the position class of an element and recursively calls itself until there are no more possible positions to attempt, or the tooltip element is no longer colliding.\n * if the tooltip is larger than the screen width, default to full width - any user selected margin\n * @private\n */\n _setPosition() {\n super._setPosition(this.$element, this.template);\n }\n\n /**\n * reveals the tooltip, and fires an event to close any other open tooltips on the page\n * @fires Tooltip#closeme\n * @fires Tooltip#show\n * @function\n */\n show() {\n if (this.options.showOn !== 'all' && !MediaQuery.is(this.options.showOn)) {\n // console.error('The screen is too small to display this tooltip');\n return false;\n }\n\n var _this = this;\n this.template.css('visibility', 'hidden').show();\n this._setPosition();\n this.template.removeClass('top bottom left right').addClass(this.position)\n this.template.removeClass('align-top align-bottom align-left align-right align-center').addClass('align-' + this.alignment);\n\n /**\n * Fires to close all other open tooltips on the page\n * @event Closeme#tooltip\n */\n this.$element.trigger('closeme.zf.tooltip', this.template.attr('id'));\n\n\n this.template.attr({\n 'data-is-active': true,\n 'aria-hidden': false\n });\n _this.isActive = true;\n this.template.stop().hide().css('visibility', '').fadeIn(this.options.fadeInDuration, function() {\n //maybe do stuff?\n });\n /**\n * Fires when the tooltip is shown\n * @event Tooltip#show\n */\n this.$element.trigger('show.zf.tooltip');\n }\n\n /**\n * Hides the current tooltip, and resets the positioning class if it was changed due to collision\n * @fires Tooltip#hide\n * @function\n */\n hide() {\n var _this = this;\n this.template.stop().attr({\n 'aria-hidden': true,\n 'data-is-active': false\n }).fadeOut(this.options.fadeOutDuration, function() {\n _this.isActive = false;\n _this.isClick = false;\n });\n /**\n * fires when the tooltip is hidden\n * @event Tooltip#hide\n */\n this.$element.trigger('hide.zf.tooltip');\n }\n\n /**\n * adds event listeners for the tooltip and its anchor\n * TODO combine some of the listeners like focus and mouseenter, etc.\n * @private\n */\n _events() {\n const _this = this;\n const hasTouch = 'ontouchstart' in window || (typeof window.ontouchstart !== 'undefined');\n var isFocus = false;\n\n // `disableForTouch: Fully disable the tooltip on touch devices\n if (hasTouch && this.options.disableForTouch) return;\n\n if (!this.options.disableHover) {\n this.$element\n .on('mouseenter.zf.tooltip', function() {\n if (!_this.isActive) {\n _this.timeout = setTimeout(function() {\n _this.show();\n }, _this.options.hoverDelay);\n }\n })\n .on('mouseleave.zf.tooltip', ignoreMousedisappear(function() {\n clearTimeout(_this.timeout);\n if (!isFocus || (_this.isClick && !_this.options.clickOpen)) {\n _this.hide();\n }\n }));\n }\n\n if (hasTouch) {\n this.$element\n .on('tap.zf.tooltip touchend.zf.tooltip', function () {\n _this.isActive ? _this.hide() : _this.show();\n });\n }\n\n if (this.options.clickOpen) {\n this.$element.on('mousedown.zf.tooltip', function() {\n if (_this.isClick) {\n //_this.hide();\n // _this.isClick = false;\n } else {\n _this.isClick = true;\n if ((_this.options.disableHover || !_this.$element.attr('tabindex')) && !_this.isActive) {\n _this.show();\n }\n }\n });\n } else {\n this.$element.on('mousedown.zf.tooltip', function() {\n _this.isClick = true;\n });\n }\n\n this.$element.on({\n // 'toggle.zf.trigger': this.toggle.bind(this),\n // 'close.zf.trigger': this.hide.bind(this)\n 'close.zf.trigger': this.hide.bind(this)\n });\n\n this.$element\n .on('focus.zf.tooltip', function() {\n isFocus = true;\n if (_this.isClick) {\n // If we're not showing open on clicks, we need to pretend a click-launched focus isn't\n // a real focus, otherwise on hover and come back we get bad behavior\n if(!_this.options.clickOpen) { isFocus = false; }\n return false;\n } else {\n _this.show();\n }\n })\n\n .on('focusout.zf.tooltip', function() {\n isFocus = false;\n _this.isClick = false;\n _this.hide();\n })\n\n .on('resizeme.zf.trigger', function() {\n if (_this.isActive) {\n _this._setPosition();\n }\n });\n }\n\n /**\n * adds a toggle method, in addition to the static show() & hide() functions\n * @function\n */\n toggle() {\n if (this.isActive) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n /**\n * Destroys an instance of tooltip, removes template element from the view.\n * @function\n */\n _destroy() {\n this.$element.attr('title', this.template.text())\n .off('.zf.trigger .zf.tooltip')\n .removeClass(this.options.triggerClass)\n .removeClass('top right left bottom')\n .removeAttr('aria-describedby data-disable-hover data-resize data-toggle data-tooltip data-yeti-box');\n\n this.template.remove();\n }\n}\n\nTooltip.defaults = {\n /**\n * Time, in ms, before a tooltip should open on hover.\n * @option\n * @type {number}\n * @default 200\n */\n hoverDelay: 200,\n /**\n * Time, in ms, a tooltip should take to fade into view.\n * @option\n * @type {number}\n * @default 150\n */\n fadeInDuration: 150,\n /**\n * Time, in ms, a tooltip should take to fade out of view.\n * @option\n * @type {number}\n * @default 150\n */\n fadeOutDuration: 150,\n /**\n * Disables hover events from opening the tooltip if set to true\n * @option\n * @type {boolean}\n * @default false\n */\n disableHover: false,\n /**\n * Disable the tooltip for touch devices.\n * This can be useful to make elements with a tooltip on it trigger their\n * action on the first tap instead of displaying the tooltip.\n * @option\n * @type {booelan}\n * @default false\n */\n disableForTouch: false,\n /**\n * Optional addtional classes to apply to the tooltip template on init.\n * @option\n * @type {string}\n * @default ''\n */\n templateClasses: '',\n /**\n * Non-optional class added to tooltip templates. Foundation default is 'tooltip'.\n * @option\n * @type {string}\n * @default 'tooltip'\n */\n tooltipClass: 'tooltip',\n /**\n * Class applied to the tooltip anchor element.\n * @option\n * @type {string}\n * @default 'has-tip'\n */\n triggerClass: 'has-tip',\n /**\n * Minimum breakpoint size at which to open the tooltip.\n * @option\n * @type {string}\n * @default 'small'\n */\n showOn: 'small',\n /**\n * Custom template to be used to generate markup for tooltip.\n * @option\n * @type {string}\n * @default ''\n */\n template: '',\n /**\n * Text displayed in the tooltip template on open.\n * @option\n * @type {string}\n * @default ''\n */\n tipText: '',\n touchCloseText: 'Tap to close.',\n /**\n * Allows the tooltip to remain open if triggered with a click or touch event.\n * @option\n * @type {boolean}\n * @default true\n */\n clickOpen: true,\n /**\n * Position of tooltip. Can be left, right, bottom, top, or auto.\n * @option\n * @type {string}\n * @default 'auto'\n */\n position: 'auto',\n /**\n * Alignment of tooltip relative to anchor. Can be left, right, bottom, top, center, or auto.\n * @option\n * @type {string}\n * @default 'auto'\n */\n alignment: 'auto',\n /**\n * Allow overlap of container/window. If false, tooltip will first try to\n * position as defined by data-position and data-alignment, but reposition if\n * it would cause an overflow. @option\n * @type {boolean}\n * @default false\n */\n allowOverlap: false,\n /**\n * Allow overlap of only the bottom of the container. This is the most common\n * behavior for dropdowns, allowing the dropdown to extend the bottom of the\n * screen but not otherwise influence or break out of the container.\n * Less common for tooltips.\n * @option\n * @type {boolean}\n * @default false\n */\n allowBottomOverlap: false,\n /**\n * Distance, in pixels, the template should push away from the anchor on the Y axis.\n * @option\n * @type {number}\n * @default 0\n */\n vOffset: 0,\n /**\n * Distance, in pixels, the template should push away from the anchor on the X axis\n * @option\n * @type {number}\n * @default 0\n */\n hOffset: 0,\n /**\n * Distance, in pixels, the template spacing auto-adjust for a vertical tooltip\n * @option\n * @type {number}\n * @default 14\n */\n tooltipHeight: 14,\n /**\n * Distance, in pixels, the template spacing auto-adjust for a horizontal tooltip\n * @option\n * @type {number}\n * @default 12\n */\n tooltipWidth: 12,\n /**\n * Allow HTML in tooltip. Warning: If you are loading user-generated content into tooltips,\n * allowing HTML may open yourself up to XSS attacks.\n * @option\n * @type {boolean}\n * @default false\n */\n allowHtml: false\n};\n\n/**\n * TODO utilize resize event trigger\n */\n\nexport {Tooltip};\n","import $ from 'jquery';\nimport { MediaQuery } from './foundation.util.mediaQuery';\nimport { GetYoDigits } from './foundation.core.utils';\nimport { Plugin }from './foundation.core.plugin';\n\nimport { Accordion } from './foundation.accordion';\nimport { Tabs } from './foundation.tabs';\n\n// The plugin matches the plugin classes with these plugin instances.\nvar MenuPlugins = {\n tabs: {\n cssClass: 'tabs',\n plugin: Tabs,\n open: (plugin, target) => plugin.selectTab(target),\n close: null /* not supported */,\n toggle: null /* not supported */,\n },\n accordion: {\n cssClass: 'accordion',\n plugin: Accordion,\n open: (plugin, target) => plugin.down($(target)),\n close: (plugin, target) => plugin.up($(target)),\n toggle: (plugin, target) => plugin.toggle($(target)),\n }\n};\n\n\n/**\n * ResponsiveAccordionTabs module.\n * @module foundation.responsiveAccordionTabs\n * @requires foundation.util.motion\n * @requires foundation.accordion\n * @requires foundation.tabs\n */\n\nclass ResponsiveAccordionTabs extends Plugin{\n constructor(element, options) {\n super(element, options);\n return this.options.reflow && this.storezfData || this;\n }\n\n /**\n * Creates a new instance of a responsive accordion tabs.\n * @class\n * @name ResponsiveAccordionTabs\n * @fires ResponsiveAccordionTabs#init\n * @param {jQuery} element - jQuery object to make into Responsive Accordion Tabs.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n _setup(element, options) {\n this.$element = $(element);\n this.$element.data('zfPluginBase', this);\n this.options = $.extend({}, ResponsiveAccordionTabs.defaults, this.$element.data(), options);\n\n this.rules = this.$element.data('responsive-accordion-tabs');\n this.currentMq = null;\n this.currentRule = null;\n this.currentPlugin = null;\n this.className = 'ResponsiveAccordionTabs'; // ie9 back compat\n if (!this.$element.attr('id')) {\n this.$element.attr('id',GetYoDigits(6, 'responsiveaccordiontabs'));\n }\n\n this._init();\n this._events();\n }\n\n /**\n * Initializes the Menu by parsing the classes from the 'data-responsive-accordion-tabs' attribute on the element.\n * @function\n * @private\n */\n _init() {\n MediaQuery._init();\n\n // The first time an Interchange plugin is initialized, this.rules is converted from a string of \"classes\" to an object of rules\n if (typeof this.rules === 'string') {\n let rulesTree = {};\n\n // Parse rules from \"classes\" pulled from data attribute\n let rules = this.rules.split(' ');\n\n // Iterate through every rule found\n for (let i = 0; i < rules.length; i++) {\n let rule = rules[i].split('-');\n let ruleSize = rule.length > 1 ? rule[0] : 'small';\n let rulePlugin = rule.length > 1 ? rule[1] : rule[0];\n\n if (MenuPlugins[rulePlugin] !== null) {\n rulesTree[ruleSize] = MenuPlugins[rulePlugin];\n }\n }\n\n this.rules = rulesTree;\n }\n\n this._getAllOptions();\n\n if (!$.isEmptyObject(this.rules)) {\n this._checkMediaQueries();\n }\n }\n\n _getAllOptions() {\n //get all defaults and options\n var _this = this;\n _this.allOptions = {};\n for (var key in MenuPlugins) {\n if (MenuPlugins.hasOwnProperty(key)) {\n var obj = MenuPlugins[key];\n try {\n var dummyPlugin = $('
      ');\n var tmpPlugin = new obj.plugin(dummyPlugin,_this.options);\n for (var keyKey in tmpPlugin.options) {\n if (tmpPlugin.options.hasOwnProperty(keyKey) && keyKey !== 'zfPlugin') {\n var objObj = tmpPlugin.options[keyKey];\n _this.allOptions[keyKey] = objObj;\n }\n }\n tmpPlugin.destroy();\n }\n catch(e) {\n console.warn(`Warning: Problems getting Accordion/Tab options: ${e}`);\n }\n }\n }\n }\n\n /**\n * Initializes events for the Menu.\n * @function\n * @private\n */\n _events() {\n this._changedZfMediaQueryHandler = this._checkMediaQueries.bind(this);\n $(window).on('changed.zf.mediaquery', this._changedZfMediaQueryHandler);\n }\n\n /**\n * Checks the current screen width against available media queries. If the media query has changed, and the plugin needed has changed, the plugins will swap out.\n * @function\n * @private\n */\n _checkMediaQueries() {\n var matchedMq, _this = this;\n // Iterate through each rule and find the last matching rule\n $.each(this.rules, function(key) {\n if (MediaQuery.atLeast(key)) {\n matchedMq = key;\n }\n });\n\n // No match? No dice\n if (!matchedMq) return;\n\n // Plugin already initialized? We good\n if (this.currentPlugin instanceof this.rules[matchedMq].plugin) return;\n\n // Remove existing plugin-specific CSS classes\n $.each(MenuPlugins, function(key, value) {\n _this.$element.removeClass(value.cssClass);\n });\n\n // Add the CSS class for the new plugin\n this.$element.addClass(this.rules[matchedMq].cssClass);\n\n // Create an instance of the new plugin\n if (this.currentPlugin) {\n //don't know why but on nested elements data zfPlugin get's lost\n if (!this.currentPlugin.$element.data('zfPlugin') && this.storezfData) this.currentPlugin.$element.data('zfPlugin',this.storezfData);\n this.currentPlugin.destroy();\n }\n this._handleMarkup(this.rules[matchedMq].cssClass);\n this.currentRule = this.rules[matchedMq];\n this.currentPlugin = new this.currentRule.plugin(this.$element, this.options);\n this.storezfData = this.currentPlugin.$element.data('zfPlugin');\n\n }\n\n _handleMarkup(toSet){\n var _this = this, fromString = 'accordion';\n var $panels = $('[data-tabs-content='+this.$element.attr('id')+']');\n if ($panels.length) fromString = 'tabs';\n if (fromString === toSet) {\n return;\n }\n\n var tabsTitle = _this.allOptions.linkClass?_this.allOptions.linkClass:'tabs-title';\n var tabsPanel = _this.allOptions.panelClass?_this.allOptions.panelClass:'tabs-panel';\n\n this.$element.removeAttr('role');\n var $liHeads = this.$element.children('.'+tabsTitle+',[data-accordion-item]').removeClass(tabsTitle).removeClass('accordion-item').removeAttr('data-accordion-item');\n var $liHeadsA = $liHeads.children('a').removeClass('accordion-title');\n\n if (fromString === 'tabs') {\n $panels = $panels.children('.'+tabsPanel).removeClass(tabsPanel).removeAttr('role').removeAttr('aria-hidden').removeAttr('aria-labelledby');\n $panels.children('a').removeAttr('role').removeAttr('aria-controls').removeAttr('aria-selected');\n } else {\n $panels = $liHeads.children('[data-tab-content]').removeClass('accordion-content');\n }\n\n $panels.css({display:'',visibility:''});\n $liHeads.css({display:'',visibility:''});\n if (toSet === 'accordion') {\n $panels.each(function(key,value){\n $(value).appendTo($liHeads.get(key)).addClass('accordion-content').attr('data-tab-content','').removeClass('is-active').css({height:''});\n $('[data-tabs-content='+_this.$element.attr('id')+']').after('
      ').detach();\n $liHeads.addClass('accordion-item').attr('data-accordion-item','');\n $liHeadsA.addClass('accordion-title');\n });\n } else if (toSet === 'tabs') {\n var $tabsContent = $('[data-tabs-content='+_this.$element.attr('id')+']');\n var $placeholder = $('#tabs-placeholder-'+_this.$element.attr('id'));\n if ($placeholder.length) {\n $tabsContent = $('
      ').insertAfter($placeholder).attr('data-tabs-content',_this.$element.attr('id'));\n $placeholder.remove();\n } else {\n $tabsContent = $('
      ').insertAfter(_this.$element).attr('data-tabs-content',_this.$element.attr('id'));\n }\n $panels.each(function(key,value){\n var tempValue = $(value).appendTo($tabsContent).addClass(tabsPanel);\n var hash = $liHeadsA.get(key).hash.slice(1);\n var id = $(value).attr('id') || GetYoDigits(6, 'accordion');\n if (hash !== id) {\n if (hash !== '') {\n $(value).attr('id',hash);\n } else {\n hash = id;\n $(value).attr('id',hash);\n $($liHeadsA.get(key)).attr('href',$($liHeadsA.get(key)).attr('href').replace('#','')+'#'+hash);\n }\n }\n var isActive = $($liHeads.get(key)).hasClass('is-active');\n if (isActive) {\n tempValue.addClass('is-active');\n }\n });\n $liHeads.addClass(tabsTitle);\n };\n }\n\n /**\n * Opens the plugin pane defined by `target`.\n * @param {jQuery | String} target - jQuery object or string of the id of the pane to open.\n * @see Accordion.down\n * @see Tabs.selectTab\n * @function\n */\n open() {\n if (this.currentRule && typeof this.currentRule.open === 'function') {\n return this.currentRule.open(this.currentPlugin, ...arguments);\n }\n }\n\n /**\n * Closes the plugin pane defined by `target`. Not availaible for Tabs.\n * @param {jQuery | String} target - jQuery object or string of the id of the pane to close.\n * @see Accordion.up\n * @function\n */\n close() {\n if (this.currentRule && typeof this.currentRule.close === 'function') {\n return this.currentRule.close(this.currentPlugin, ...arguments);\n }\n }\n\n /**\n * Toggles the plugin pane defined by `target`. Not availaible for Tabs.\n * @param {jQuery | String} target - jQuery object or string of the id of the pane to toggle.\n * @see Accordion.toggle\n * @function\n */\n toggle() {\n if (this.currentRule && typeof this.currentRule.toggle === 'function') {\n return this.currentRule.toggle(this.currentPlugin, ...arguments);\n }\n }\n\n /**\n * Destroys the instance of the current plugin on this element, as well as the window resize handler that switches the plugins out.\n * @function\n */\n _destroy() {\n if (this.currentPlugin) this.currentPlugin.destroy();\n $(window).off('changed.zf.mediaquery', this._changedZfMediaQueryHandler);\n }\n}\n\nResponsiveAccordionTabs.defaults = {};\n\nexport {ResponsiveAccordionTabs};\n","// Import jQuery and bind it.\nimport $ from \"jquery\";\nwindow.$ = $;\n\n// Import WhatInput.\nimport whatInput from \"what-input\";\n\n// Import Foundation and utilities. DO NOT REMOVE.\nimport { Foundation } from \"foundation-sites/js/foundation.core\";\nFoundation.addToJquery($);\nimport { MediaQuery } from \"foundation-sites/js/foundation.util.mediaQuery\";\nFoundation.MediaQuery = MediaQuery;\n\n// Uncomment 'import' AND 'Foundation.plugin' for each plugin you do not want to use.\n// import { Abide } from 'foundation-sites/js/foundation.abide'\n// Foundation.plugin(Abide, 'Abide')\n\nimport { Accordion } from \"foundation-sites/js/foundation.accordion\";\nFoundation.plugin(Accordion, \"Accordion\");\n\nimport { AccordionMenu } from \"foundation-sites/js/foundation.accordionMenu\";\nFoundation.plugin(AccordionMenu, \"AccordionMenu\");\n\n// import { Drilldown } from 'foundation-sites/js/foundation.drilldown'\n// Foundation.plugin(Drilldown, 'Drilldown')\n\nimport { Dropdown } from \"foundation-sites/js/foundation.dropdown\";\nFoundation.plugin(Dropdown, \"Dropdown\");\n\nimport { DropdownMenu } from \"foundation-sites/js/foundation.dropdownMenu\";\nFoundation.plugin(DropdownMenu, \"DropdownMenu\");\n\nimport { Equalizer } from \"foundation-sites/js/foundation.equalizer\";\nFoundation.plugin(Equalizer, \"Equalizer\");\n\n// import { Interchange } from 'foundation-sites/js/foundation.interchange'\n// Foundation.plugin(Interchange, 'Interchange')\n\n// import { Magellan } from 'foundation-sites/js/foundation.magellan'\n// Foundation.plugin(Magellan, 'Magellan')\n\n// import { OffCanvas } from 'foundation-sites/js/foundation.offcanvas'\n// Foundation.plugin(OffCanvas, 'OffCanvas')\n\n// import { Orbit } from 'foundation-sites/js/foundation.orbit'\n// Foundation.plugin(Orbit, 'Orbit')\n\nimport { ResponsiveMenu } from \"foundation-sites/js/foundation.responsiveMenu\";\nFoundation.plugin(ResponsiveMenu, \"ResponsiveMenu\");\n\nimport { ResponsiveToggle } from \"foundation-sites/js/foundation.responsiveToggle\";\nFoundation.plugin(ResponsiveToggle, \"ResponsiveToggle\");\n\nimport { Reveal } from \"foundation-sites/js/foundation.reveal\";\nFoundation.plugin(Reveal, \"Reveal\");\n\nimport { Slider } from \"foundation-sites/js/foundation.slider\";\nFoundation.plugin(Slider, \"Slider\");\n\nimport { SmoothScroll } from \"foundation-sites/js/foundation.smoothScroll\";\nFoundation.plugin(SmoothScroll, \"SmoothScroll\");\n\nimport { Sticky } from \"foundation-sites/js/foundation.sticky\";\nFoundation.plugin(Sticky, \"Sticky\");\n\nimport { Tabs } from \"foundation-sites/js/foundation.tabs\";\nFoundation.plugin(Tabs, \"Tabs\");\n\nimport { Toggler } from \"foundation-sites/js/foundation.toggler\";\nFoundation.plugin(Toggler, \"Toggler\");\n\nimport { Tooltip } from \"foundation-sites/js/foundation.tooltip\";\nFoundation.plugin(Tooltip, \"Tooltip\");\n\nimport { ResponsiveAccordionTabs } from \"foundation-sites/js/foundation.responsiveAccordionTabs\";\nFoundation.plugin(ResponsiveAccordionTabs, \"ResponsiveAccordionTabs\");\n\n// Init.\nwindow.addEventListener(\n \"load\",\n () => {\n $(document).foundation();\n },\n { passive: true }\n);\n\n$(document).on(\"closed.zf.reveal\", function () {\n Foundation.reInit(\"sticky\");\n});\n","// Masonry layout.\nimport Macy from \"macy\";\n\ndocument.addEventListener(\n \"DOMContentLoaded\",\n () => {\n if (typeof masonryGrids !== \"undefined\") {\n // Loop through each registered masonry grids and initialize them.\n masonryGrids = masonryGrids.map(({ container, id }) => {\n const instance = Macy({\n container,\n columns: 1,\n trueOrder: true,\n waitForImages: true,\n mobileFirst: true,\n breakAt: {\n 640: 2,\n 1024: 3,\n },\n });\n instance.recalculate();\n\n // Return instance for usage with AJAX content.\n return {\n id,\n container,\n instance,\n };\n });\n }\n },\n { passive: true }\n);\n","import $ from \"jquery\";\nimport objectFitImages from \"object-fit-images\";\n\n$(function () {\n // Adds support for 'object-fit: cover;'.\n objectFitImages();\n});\n","var __assign=this&&this.__assign||function(){return(__assign=Object.assign||function(t){for(var i,n=1,s=arguments.length;ns.endVal;s.frameVal=n?s.endVal:s.frameVal,s.frameVal=Number(s.frameVal.toFixed(s.options.decimalPlaces)),s.printValue(s.frameVal),i1?s.options.decimal+o[1]:\"\",s.options.useGrouping){e=\"\";for(var l=0,h=n.length;lwindow.scrollY&&t.paused?(t.paused=!1,setTimeout(function(){return t.start()},t.options.scrollSpyDelay),t.options.scrollSpyOnce&&(t.once=!0)):window.scrollY>s&&!t.paused&&t.reset()}},t.prototype.determineDirectionAndSmartEasing=function(){var t=this.finalEndVal?this.finalEndVal:this.endVal;this.countDown=this.startVal>t;var i=t-this.startVal;if(Math.abs(i)>this.options.smartEasingThreshold&&this.options.useEasing){this.finalEndVal=t;var n=this.countDown?1:-1;this.endVal=t+n*this.options.smartEasingAmount,this.duration=this.duration/2}else this.endVal=t,this.finalEndVal=null;null!==this.finalEndVal?this.useEasing=!1:this.useEasing=this.options.useEasing},t.prototype.start=function(t){this.error||(this.callback=t,this.duration>0?(this.determineDirectionAndSmartEasing(),this.paused=!1,this.rAF=requestAnimationFrame(this.count)):this.printValue(this.endVal))},t.prototype.pauseResume=function(){this.paused?(this.startTime=null,this.duration=this.remaining,this.startVal=this.frameVal,this.determineDirectionAndSmartEasing(),this.rAF=requestAnimationFrame(this.count)):cancelAnimationFrame(this.rAF),this.paused=!this.paused},t.prototype.reset=function(){cancelAnimationFrame(this.rAF),this.paused=!0,this.resetDuration(),this.startVal=this.validateValue(this.options.startVal),this.frameVal=this.startVal,this.printValue(this.startVal)},t.prototype.update=function(t){cancelAnimationFrame(this.rAF),this.startTime=null,this.endVal=this.validateValue(t),this.endVal!==this.frameVal&&(this.startVal=this.frameVal,null==this.finalEndVal&&this.resetDuration(),this.finalEndVal=null,this.determineDirectionAndSmartEasing(),this.rAF=requestAnimationFrame(this.count))},t.prototype.printValue=function(t){var i=this.formattingFn(t);\"INPUT\"===this.el.tagName?this.el.value=i:\"text\"===this.el.tagName||\"tspan\"===this.el.tagName?this.el.textContent=i:this.el.innerHTML=i},t.prototype.ensureNumber=function(t){return\"number\"==typeof t&&!isNaN(t)},t.prototype.validateValue=function(t){var i=Number(t);return this.ensureNumber(i)?i:(this.error=\"[CountUp] invalid start or end value: \".concat(t),null)},t.prototype.resetDuration=function(){this.startTime=null,this.duration=1e3*Number(this.options.duration),this.remaining=this.duration},t}();export{CountUp};","import { CountUp } from \"countup.js\";\n\nconst event = new Event(\"wpsoup.counter.completed\", {\n bubbles: true,\n cancelable: true,\n composed: false,\n});\n\nfunction registerEventListeners() {\n const elements = document.querySelectorAll(\".counter\");\n const intersectionSupported = intersectionListenerSupported();\n\n if (intersectionSupported) {\n const intersectionObserver = new IntersectionObserver(animateModern, {\n root: null,\n rootMargin: \"20px\",\n threshold: 0.5,\n });\n\n for (let i = 0; i < elements.length; i++) {\n intersectionObserver.observe(elements[i]);\n }\n } else {\n if (window.addEventListener) {\n animateLegacy(elements);\n\n window.addEventListener(\n \"scroll\",\n (e) => {\n animateLegacy(elements);\n },\n { passive: true }\n );\n }\n }\n}\n\nfunction animateLegacy(elements) {\n elements.forEach((element) => {\n if (elementIsInView(element)) {\n animateElement(element);\n }\n });\n}\n\nfunction animateModern(elements) {\n elements.forEach((element) => {\n if (element.isIntersecting) {\n animateElement(element);\n }\n });\n}\n\nfunction animateElement(element) {\n const target = element.target ? element.target : element;\n const dataset = target.dataset;\n\n const countUp = new CountUp(target, dataset.counterEnd, {\n duration: dataset.counterDuration,\n useGrouping: dataset.counterGrouping ? true : false,\n separator: dataset.counterSeparator,\n decimal: dataset.counterDecimal,\n });\n target.counter = countUp;\n countUp.start(() => {\n // Create event listener.\n target.dispatchEvent(event);\n });\n}\n\nfunction elementIsInView(element) {\n let top = element.offsetTop;\n let left = element.offsetLeft;\n const width = element.offsetWidth;\n const height = element.offsetHeight;\n\n while (element.offsetParent) {\n element = element.offsetParent;\n top += element.offsetTop;\n left += element.offsetLeft;\n }\n\n return (\n top >= window.pageYOffset &&\n left >= window.pageXOffset &&\n top + height <= window.pageYOffset + window.innerHeight &&\n left + width <= window.pageXOffset + window.innerWidth\n );\n}\n\nfunction intersectionListenerSupported() {\n return (\n \"IntersectionObserver\" in window &&\n \"IntersectionObserverEntry\" in window &&\n \"intersectionRatio\" in window.IntersectionObserverEntry.prototype\n );\n}\n\n(() => {\n registerEventListeners();\n})();\n","'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n const pattern = '[object FormData]';\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) ||\n toString.call(thing) === pattern ||\n (isFunction(thing.toString) && thing.toString() === pattern)\n );\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self;\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n\n const iterator = generator.call(obj);\n\n let result;\n\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[_-\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n if (reducer(descriptor, name, obj) !== false) {\n reducedDescriptors[name] = descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n value = +value;\n return Number.isFinite(value) ? value : defaultValue;\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n toJSONObject\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","import FormData from 'form-data';\nexport default FormData;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport envFormData from '../env/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliant(thing) {\n return thing && utils.isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator];\n}\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (envFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && isSpecCompliant(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n (utils.isFileList(value) || utils.endsWith(key, '[]') && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object} params - The parameters to be converted to a FormData object.\n * @param {Object} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?object} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default FormData;\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst isStandardBrowserEnv = (() => {\n let product;\n if (typeof navigator !== 'undefined' && (\n (product = navigator.product) === 'ReactNative' ||\n product === 'NativeScript' ||\n product === 'NS')\n ) {\n return false;\n }\n\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n})();\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\n const isStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n isStandardBrowserEnv,\n isStandardBrowserWebWorkerEnv,\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\nconst DEFAULT_CONTENT_TYPE = {\n 'Content-Type': undefined\n};\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n if (!hasJSONContentType) {\n return data;\n }\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nfunction isValidHeaderName(str) {\n return /^[-_a-zA-Z]+$/.test(str.trim());\n}\n\nfunction matchHeaderValue(context, value, header, filter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear() {\n return Object.keys(this).forEach(this.delete.bind(this));\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent']);\n\nutils.freezeMethods(AxiosHeaders.prototype);\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.isStandardBrowserEnv ?\n\n// Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n const cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n// Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })();\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.isStandardBrowserEnv ?\n\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n const msie = /(msie|trident)/i.test(navigator.userAgent);\n const urlParsingNode = document.createElement('a');\n let originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n let href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n const parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })();\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","'use strict';\n\nimport utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport cookies from './../helpers/cookies.js';\nimport buildURL from './../helpers/buildURL.js';\nimport buildFullPath from '../core/buildFullPath.js';\nimport isURLSameOrigin from './../helpers/isURLSameOrigin.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport speedometer from '../helpers/speedometer.js';\n\nfunction progressEventReducer(listener, isDownloadStream) {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e\n };\n\n data[isDownloadStream ? 'download' : 'upload'] = true;\n\n listener(data);\n };\n}\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n let requestData = config.data;\n const requestHeaders = AxiosHeaders.from(config.headers).normalize();\n const responseType = config.responseType;\n let onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n if (utils.isFormData(requestData) && (platform.isStandardBrowserEnv || platform.isStandardBrowserWebWorkerEnv)) {\n requestHeaders.setContentType(false); // Let the browser set it\n }\n\n let request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n const username = config.auth.username || '';\n const password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.set('Authorization', 'Basic ' + btoa(username + ':' + password));\n }\n\n const fullPath = buildFullPath(config.baseURL, config.url);\n\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (platform.isStandardBrowserEnv) {\n // Add xsrf header\n const xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath))\n && config.xsrfCookieName && cookies.read(config.xsrfCookieName);\n\n if (xsrfValue) {\n requestHeaders.set(config.xsrfHeaderName, xsrfValue);\n }\n }\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', progressEventReducer(config.onDownloadProgress, true));\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', progressEventReducer(config.onUploadProgress));\n }\n\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(fullPath);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if(fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n if((adapter = utils.isString(nameOrAdapter) ? knownAdapters[nameOrAdapter.toLowerCase()] : nameOrAdapter)) {\n break;\n }\n }\n\n if (!adapter) {\n if (adapter === false) {\n throw new AxiosError(\n `Adapter ${nameOrAdapter} is not supported by the environment`,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n throw new Error(\n utils.hasOwnProp(knownAdapters, nameOrAdapter) ?\n `Adapter '${nameOrAdapter}' is not available in the build` :\n `Unknown adapter '${nameOrAdapter}'`\n );\n }\n\n if (!utils.isFunction(adapter)) {\n throw new TypeError('adapter is not a function');\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? thing.toJSON() : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)\n };\n\n utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","export const VERSION = \"1.2.1\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer !== undefined) {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n let contextHeaders;\n\n // Flatten headers\n contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n contextHeaders && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","import axios from \"/srv/www/f/friesland-boating.nl/vhosts/www/htdocs/wp-content/plugins/wp-soup-framework/node_modules/axios\";\n\ndocument.addEventListener(\n `DOMContentLoaded`,\n () => {\n const favoriteButtons = document.querySelectorAll(\".favorite-button\");\n for (const button of favoriteButtons) {\n button.addEventListener(\n \"click\",\n function (event) {\n const postID = this.dataset.postId;\n if (!postID) {\n return;\n }\n\n const action = this.dataset.action;\n if (action === \"add\") {\n addToFavorites(postID, button);\n } else if (action === \"remove\") {\n removeFromFavorites(postID, button);\n }\n },\n { passive: true }\n );\n }\n\n function addToFavorites(postID, button) {\n let formData = new FormData();\n formData.append(\"action\", \"add_to_favorites\");\n formData.append(\"security\", themosis.nonce);\n formData.append(\"post_id\", postID);\n\n axios.post(themosis.ajaxurl, formData).then((response) => {\n if (response.data.success) {\n button.classList.add(\"is-favorited\");\n button.querySelector(\"iconify-icon\").outerHTML = themosis.wpsoup.favorites.button_icon_favorited;\n button.dataset.action = \"remove\";\n }\n });\n }\n\n function removeFromFavorites(postID, button) {\n let formData = new FormData();\n formData.append(\"action\", \"remove_from_favorites\");\n formData.append(\"security\", themosis.nonce);\n formData.append(\"post_id\", postID);\n\n axios.post(themosis.ajaxurl, formData).then((response) => {\n if (response.data.success) {\n button.classList.remove(\"is-favorited\");\n button.querySelector(\"iconify-icon\").outerHTML = themosis.wpsoup.favorites.button_icon;\n button.dataset.action = \"add\";\n }\n });\n }\n },\n { passive: true }\n);\n","import $ from \"jquery\";\n\nwindow.addEventListener(\n \"load\",\n () => {\n if (Foundation.MediaQuery.atLeast(\"large\")) {\n const directions = [\"left\", \"right\"];\n directions.forEach((direction) => {\n const columns = $(`.wp-block-column.half-width-image-${direction}`);\n if (columns.length) {\n columns.each(function () {\n const column = $(this);\n const container = $(this).closest(\".wp-block-ms-container\");\n const containerId = container.attr(\"id\");\n const img = $(this).find(\"img\");\n let src = img.attr(\"src\");\n if (typeof src === \"undefined\") {\n return;\n }\n\n if (typeof LazyLoad === \"function\") {\n if (!src.includes(\"data:image/svg+xml\")) {\n img.parent().css(\"display\", \"none\");\n column.append(\n ``\n );\n }\n\n img.on(\"load\", function () {\n src = img.attr(\"src\");\n img.parent().css(\"display\", \"none\");\n column.append(\n ``\n );\n });\n } else {\n if (!src.includes(\"data:image/svg+xml\")) {\n img.parent().css(\"display\", \"none\");\n column.append(\n ``\n );\n }\n }\n });\n }\n });\n }\n },\n { passive: true }\n);\n","import $ from \"jquery\";\n\ndocument.addEventListener(\n `DOMContentLoaded`,\n () => {\n /**\n * Add submenu toggle functionality.\n */\n const menus = document.querySelectorAll(\".js-ms-has-submenu\");\n let i = 0;\n // For every menu item with a submenu.\n for (const menu of menus) {\n // Apply id for toggling purposes.\n const randomID = \"id-\" + i++;\n const submenu = menu.querySelector(\".submenu\");\n if (submenu) {\n submenu.setAttribute(\"id\", randomID);\n }\n const toggle = menu.querySelector(\".toggle\");\n if (toggle) {\n toggle.setAttribute(\"data-toggle\", randomID);\n }\n\n // On toggling.\n $(`#${randomID}`).on(\"on.zf.toggler off.zf.toggler\", function (event) {\n if (event.target !== this) return;\n\n switch (event.type) {\n case \"on\":\n $(this).slideDown({\n start: function () {\n $(this).css({\n display: \"flex\",\n });\n },\n });\n break;\n case \"off\":\n $(this).slideUp();\n break;\n }\n\n // Recalculate sticky height if sticky exists.\n if ($(\".ms-menu .sticky\").length) {\n $(\".ms-menu .sticky\").foundation(\"_calc\", true);\n }\n });\n }\n\n // Recalculate sticky height on toggling submenu.\n $(\".menu-mobile\").on(\"on.zf.toggler off.zf.toggler\", function (event) {\n if (event.target !== this) return;\n\n switch (event.type) {\n case \"on\":\n $(this).slideDown();\n break;\n case \"off\":\n $(this).slideUp();\n break;\n }\n\n // Recalculate sticky height if sticky exists.\n if ($(\".ms-menu .sticky\").length) {\n $(\".ms-menu .sticky\").foundation(\"_calc\", true);\n }\n });\n\n // Properly update the ARIA states on focus (keyboard) and mouse over events.\n $('[role=\"menubar\"]').on(\"focus.aria mouseenter.aria\", '[aria-haspopup=\"true\"]', (event) => {\n $(event.currentTarget).attr(\"aria-expanded\", true);\n });\n\n // Properly update the ARIA states on blur (keyboard) and mouse out events.\n $('[role=\"menubar\"]').on(\"blur.aria mouseleave.aria\", '[aria-haspopup=\"true\"]', (event) => {\n $(event.currentTarget).attr(\"aria-expanded\", false);\n });\n\n const overlayToggles = document.querySelectorAll(\".trigger-overlay\");\n for (const toggle of overlayToggles) {\n toggle.addEventListener(\n \"click\",\n () => {\n const body = document.querySelector(\"body\");\n const logo = document.querySelector(\".logo-image-overlay\");\n const logoMobile = document.querySelector(\".logo-mobile-image-overlay\");\n const language = document.querySelector(\".language-block\");\n const overlay = document.querySelector(\".top-bar-overlay\");\n const overlayItems = overlay.querySelectorAll(\"li\");\n if (overlay.classList.contains(\"visible\")) {\n body.classList.remove(\"overlay-visible\");\n overlay.classList.remove(\"visible\");\n if (logo) {\n logo.classList.remove(\"fadeInUp\");\n }\n if (logoMobile) {\n logoMobile.classList.remove(\"fadeInUp\");\n }\n if (language) {\n language.classList.remove(\"fadeInUp\");\n }\n for (const li of overlayItems) {\n li.classList.remove(\"fadeInUp\");\n }\n } else {\n body.classList.add(\"overlay-visible\");\n overlay.classList.add(\"visible\");\n if (logo) {\n logo.classList.add(\"fadeInUp\");\n }\n if (logoMobile) {\n logoMobile.classList.add(\"fadeInUp\");\n }\n if (language) {\n language.classList.add(\"fadeInUp\");\n }\n for (const li of overlayItems) {\n li.classList.add(\"fadeInUp\");\n }\n }\n },\n { passive: true }\n );\n }\n\n const toggleArrow = document.querySelector(\".hide.icon-arrow\");\n if (toggleArrow) {\n const submenuTogglesCheckInterval = setInterval(function () {\n const submenuToggles = document.getElementsByClassName(\"submenu-toggle\");\n\n if (submenuToggles.length !== 0) {\n for (let toggle of submenuToggles) {\n if (toggle.getElementsByTagName(\"svg\").length === 0) {\n toggle.innerHTML += toggleArrow.innerHTML;\n }\n }\n\n clearInterval(submenuTogglesCheckInterval);\n }\n });\n }\n\n const searchBlockButton = document.querySelector(\".search-block-button\");\n const searchFormBlock = document.querySelector(\".search-form-block\");\n if (searchBlockButton) {\n searchBlockButton.addEventListener(\n \"click\",\n () => {\n searchBlockButton.classList.toggle(\"visible\");\n if (searchFormBlock) {\n searchFormBlock.classList.toggle(\"visible\");\n }\n },\n { passive: true }\n );\n }\n },\n { passive: true }\n);\n","import $ from \"jquery\";\n\n$(function () {\n if ($(\".woocommerce .product-image-slider\").length) {\n const galleryThumbs = new window.Swiper(\".woocommerce .product-thumbnail-slider\", {\n slidesPerView: 5,\n freeMode: true,\n watchSlidesVisibility: true,\n watchSlidesProgress: true,\n scrollbar: {\n el: \".swiper-scrollbar\",\n hide: true,\n },\n });\n\n if ($(\".woocommerce .product-thumbnail-slider\").length) {\n const galleryTop = new window.Swiper(\".woocommerce .product-image-slider\", {\n autoHeight: true,\n navigation: {\n nextEl: \".swiper-button-next\",\n prevEl: \".swiper-button-prev\",\n },\n thumbs: {\n swiper: galleryThumbs,\n },\n });\n }\n }\n});\n\n$(document).on(\"change input\", \".woocommerce-cart-form .cart_item :input\", function (e) {\n $('.woocommerce-cart-form :input[name=\"update_cart\"]').prop(\"disabled\", false);\n});\n\n$(document.body).on(\"change blur\", \"form.woocommerce-cart-form .qty-field select\", function (e) {\n const select = $(this);\n const value = select.val();\n const parent = select.parent();\n parent.find(\"input\").val(value);\n});\n","import $ from \"jquery\";\n\nif (wp && wp.data) {\n if ($(window).width() > 600 && $(\"body\").hasClass(\"custom-admin-styling\")) {\n $(\"html\").css(\"padding-top\", \"50px\");\n }\n\n $(window).on(\"resize\", () => {\n if ($(\"body\").hasClass(\"custom-admin-styling\")) {\n if ($(window).width() > 600) {\n if ($(\"html\").css(\"padding-top\") != \"50px\") {\n $(\"html\").css(\"padding-top\", \"50px\");\n }\n } else {\n $(\"html\").css(\"padding-top\", \"\");\n }\n }\n });\n\n document.addEventListener(\"DOMContentLoaded\", () => {\n const gutenbergLoadCheck = setInterval(() => {\n const anchors = $(\"[data-block] a\");\n if (anchors.length > 0) {\n anchors.on(\"click\", (e) => {\n e.preventDefault();\n });\n\n clearInterval(gutenbergLoadCheck);\n }\n }, 100);\n\n const editPost = wp.data.select(\"core/edit-post\");\n if (editPost) {\n editPost.isFeatureActive(\"fullscreenMode\") &&\n wp.data.dispatch(\"core/edit-post\").toggleFeature(\"fullscreenMode\");\n }\n });\n}\n\nif (typeof acf !== \"undefined\") {\n acf.addFilter(\"acf_blocks_parse_node_attr\", function (shortcut, nodeAttr) {\n if (nodeAttr.name === \"class\" && nodeAttr.value.indexOf(\"iconify\") !== -1) {\n return {\n name: nodeAttr.name,\n value: nodeAttr.value,\n };\n }\n\n return shortcut;\n });\n}\n","import $ from \"jquery\";\nimport axios from \"axios\";\n\n$(() => {\n $(\".load-more\").on(\"click\", function () {\n const id = $(this).data(\"id\");\n const fields = $(this).data(\"fields\");\n if (!fields) {\n return;\n }\n\n const initialOffset = $(this).data(\"initial-offset\") ?? 0;\n const offset = $(`#${id} .related-pages .related-page-card:not([class$=\"included\"])`).length ?? 0;\n const masonry = $(this).data(\"is-masonry\") ?? 0;\n const slider = $(this).data(\"is-slider\") ?? 0;\n const textLoadMore = $(this).data(\"text-load-more\");\n const textLoading = $(this).data(\"text-loading\");\n const textLoadFailed = $(this).data(\"text-load-failed\");\n\n // Data to send back to WordPress.\n const formData = new FormData();\n formData.append(\"action\", \"load_posts_by_ajax\");\n formData.append(\"security\", themosis.nonce);\n formData.append(\"offset\", initialOffset + offset);\n formData.append(\"fields\", JSON.stringify(fields));\n\n // Change button text to loading text.\n $(`#${id} .load-more`).html(textLoading);\n\n // Do request.\n axios\n .post(themosis.ajaxurl, formData)\n .then(({ data }) => {\n // Create a placeholder div to store retrieved posts.\n const cards = document.createElement(\"div\");\n cards.innerHTML = data;\n\n // If retrieved posts length is smaller than the amount to load,\n // hide the button, else replace text with initial text.\n if (cards.children.length < fields.ajax_amount_to_load) {\n $(`#${id} .load-more`).remove();\n } else {\n $(`#${id} .load-more`).html(textLoadMore);\n }\n\n // Append loaded posts to the end.\n $(`#${id} .related-pages`).append(data);\n\n // Reinit masonry or equalizer.\n if (slider) {\n const instance = cardSliders.find((x) => x.id === id).instance;\n instance.update();\n }\n\n // Reinit masonry or equalizer.\n if (masonry) {\n const instance = masonryGrids.find((x) => x.id === id).instance;\n instance.runOnImageLoad(function () {\n instance.recalculate(true);\n }, true);\n } else {\n Foundation.reInit(\"equalizer\");\n }\n })\n .catch((error) => {\n $(`#${id} .load-more`).html(textLoadFailed);\n });\n });\n});\n","/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target = {}, src = {}) {\n Object.keys(src).forEach((key) => {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nconst ssrDocument = {\n body: {},\n addEventListener() { },\n removeEventListener() { },\n activeElement: {\n blur() { },\n nodeName: '',\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() { },\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() { },\n getElementsByTagName() {\n return [];\n },\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\n\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: '',\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n history: {\n replaceState() { },\n pushState() { },\n go() { },\n back() { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() { },\n removeEventListener() { },\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n },\n };\n },\n Image() { },\n Date() { },\n screen: {},\n setTimeout() { },\n clearTimeout() { },\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n },\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","import $ from \"jquery\";\n\ndocument.addEventListener(\n `DOMContentLoaded`,\n function () {\n $(\".ms_tag-filter .smart-tags\").change(function () {\n const $hiddenInput = $(\".ms_tag-filter .hidden-input\");\n const $emptyInput = $(\".ms_tag-filter .empty-input\");\n const $smartTag = $(this).val();\n\n $.ajax({\n url: themosis.ajaxurl,\n type: \"POST\",\n cache: false,\n data: {\n action: \"populate_posts_with_tag\",\n smart_tag: $smartTag,\n },\n success: function (data) {\n const $select = $(\".ms_tag-filter .posts-with-tag\");\n if (!data || data.length === 0) {\n $select.html(``);\n } else {\n $select.html(`${data}`);\n }\n },\n });\n });\n\n $(\".ms_tag-filter .posts-with-tag\").change(function () {\n const options = this.options;\n const selectedOption = this.options[this.selectedIndex];\n const selectedSmartTagLabel =\n document.querySelector(\".ms_tag-filter .smart-tags\").options[\n document.querySelector(\".ms_tag-filter .smart-tags\").selectedIndex\n ].label;\n\n if (options && selectedOption.value !== \"\") {\n if (typeof ga !== \"undefined\" && typeof ga.getAll === \"function\") {\n new Promise((resolve, _) => {\n const analyticsGTMID = ga.getAll()[0].get(\"trackingId\");\n ga(\n `gtag_${analyticsGTMID}.send`,\n \"event\",\n \"Tag filter\",\n \"redirect\",\n selectedSmartTagLabel + \" -> \" + selectedOption.label\n );\n resolve();\n }).then(() => {\n // Redirect to the selected option.\n window.location = this.options[this.selectedIndex].value;\n });\n } else {\n // Redirect to the selected option.\n window.location = this.options[this.selectedIndex].value;\n }\n }\n });\n },\n { passive: true }\n);\n","import $ from \"jquery\";\n\nwindow.addEventListener(\n \"load\",\n () => {\n if ($(\".scrollhide-nav\").length > 0 && Foundation.MediaQuery.only(\"small\")) {\n let prev = 0;\n const height = $(\".ms_thintopbar\").outerHeight();\n\n $(window).on(\"scroll\", () => {\n const scrollTop = $(window).scrollTop();\n $(\".scrollhide-nav\").toggleClass(\"hidden\", scrollTop > prev);\n\n let offset = 0;\n if (scrollTop > prev) {\n offset = 0;\n } else {\n offset = height - 1;\n }\n\n $(\".ms-menu .sticky\").attr(\"style\", `top: ${offset}px !important`);\n\n prev = scrollTop;\n });\n\n $(\".ms-menu .sticky\").on(\"sticky.zf.unstuckfrom:top\", function () {\n $(\".ms-menu .sticky\").attr(\"style\", `margin-top: ${height - 1}px !important`);\n });\n $(\".ms-menu .sticky\").on(\"sticky.zf.stuckto:top\", function () {\n $(\".ms-menu .sticky\").attr(\"style\", `margin-top: 0px !important`);\n });\n }\n },\n { passive: true }\n);\n","/**\n * SSR Window 4.0.1\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: October 27, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target = {}, src = {}) {\n Object.keys(src).forEach((key) => {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nconst ssrDocument = {\n body: {},\n addEventListener() { },\n removeEventListener() { },\n activeElement: {\n blur() { },\n nodeName: '',\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() { },\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() { },\n getElementsByTagName() {\n return [];\n },\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\n\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: '',\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n history: {\n replaceState() { },\n pushState() { },\n go() { },\n back() { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() { },\n removeEventListener() { },\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n },\n };\n },\n Image() { },\n Date() { },\n screen: {},\n setTimeout() { },\n clearTimeout() { },\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n },\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","/**\n * Dom7 4.0.4\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2022, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: January 11, 2022\n */\nimport { getWindow, getDocument } from 'ssr-window';\n\n/* eslint-disable no-proto */\nfunction makeReactive(obj) {\n const proto = obj.__proto__;\n Object.defineProperty(obj, '__proto__', {\n get() {\n return proto;\n },\n\n set(value) {\n proto.__proto__ = value;\n }\n\n });\n}\n\nclass Dom7 extends Array {\n constructor(items) {\n if (typeof items === 'number') {\n super(items);\n } else {\n super(...(items || []));\n makeReactive(this);\n }\n }\n\n}\n\nfunction arrayFlat(arr = []) {\n const res = [];\n arr.forEach(el => {\n if (Array.isArray(el)) {\n res.push(...arrayFlat(el));\n } else {\n res.push(el);\n }\n });\n return res;\n}\nfunction arrayFilter(arr, callback) {\n return Array.prototype.filter.call(arr, callback);\n}\nfunction arrayUnique(arr) {\n const uniqueArray = [];\n\n for (let i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n\n return uniqueArray;\n}\nfunction toCamelCase(string) {\n return string.toLowerCase().replace(/-(.)/g, (match, group) => group.toUpperCase());\n}\n\n// eslint-disable-next-line\n\nfunction qsa(selector, context) {\n if (typeof selector !== 'string') {\n return [selector];\n }\n\n const a = [];\n const res = context.querySelectorAll(selector);\n\n for (let i = 0; i < res.length; i += 1) {\n a.push(res[i]);\n }\n\n return a;\n}\n\nfunction $(selector, context) {\n const window = getWindow();\n const document = getDocument();\n let arr = [];\n\n if (!context && selector instanceof Dom7) {\n return selector;\n }\n\n if (!selector) {\n return new Dom7(arr);\n }\n\n if (typeof selector === 'string') {\n const html = selector.trim();\n\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n let toCreate = 'div';\n if (html.indexOf(' c.split(' ')));\n this.forEach(el => {\n el.classList.add(...classNames);\n });\n return this;\n}\n\nfunction removeClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.remove(...classNames);\n });\n return this;\n}\n\nfunction toggleClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n classNames.forEach(className => {\n el.classList.toggle(className);\n });\n });\n}\n\nfunction hasClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n return arrayFilter(this, el => {\n return classNames.filter(className => el.classList.contains(className)).length > 0;\n }).length > 0;\n}\n\nfunction attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n return undefined;\n } // Set attrs\n\n\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n for (const attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n\n return this;\n}\n\nfunction removeAttr(attr) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n\n return this;\n}\n\nfunction prop(props, value) {\n if (arguments.length === 1 && typeof props === 'string') {\n // Get prop\n if (this[0]) return this[0][props];\n } else {\n // Set props\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i][props] = value;\n } else {\n // Object\n for (const propName in props) {\n this[i][propName] = props[propName];\n }\n }\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction data(key, value) {\n let el;\n\n if (typeof value === 'undefined') {\n el = this[0];\n if (!el) return undefined; // Get value\n\n if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {\n return el.dom7ElementDataStorage[key];\n }\n\n const dataKey = el.getAttribute(`data-${key}`);\n\n if (dataKey) {\n return dataKey;\n }\n\n return undefined;\n } // Set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n\n return this;\n}\n\nfunction removeData(key) {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n el.dom7ElementDataStorage[key] = null;\n delete el.dom7ElementDataStorage[key];\n }\n }\n}\n\nfunction dataset() {\n const el = this[0];\n if (!el) return undefined;\n const dataset = {}; // eslint-disable-line\n\n if (el.dataset) {\n for (const dataKey in el.dataset) {\n dataset[dataKey] = el.dataset[dataKey];\n }\n } else {\n for (let i = 0; i < el.attributes.length; i += 1) {\n const attr = el.attributes[i];\n\n if (attr.name.indexOf('data-') >= 0) {\n dataset[toCamelCase(attr.name.split('data-')[1])] = attr.value;\n }\n }\n }\n\n for (const key in dataset) {\n if (dataset[key] === 'false') dataset[key] = false;else if (dataset[key] === 'true') dataset[key] = true;else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n }\n\n return dataset;\n}\n\nfunction val(value) {\n if (typeof value === 'undefined') {\n // get value\n const el = this[0];\n if (!el) return undefined;\n\n if (el.multiple && el.nodeName.toLowerCase() === 'select') {\n const values = [];\n\n for (let i = 0; i < el.selectedOptions.length; i += 1) {\n values.push(el.selectedOptions[i].value);\n }\n\n return values;\n }\n\n return el.value;\n } // set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') {\n for (let j = 0; j < el.options.length; j += 1) {\n el.options[j].selected = value.indexOf(el.options[j].value) >= 0;\n }\n } else {\n el.value = value;\n }\n }\n\n return this;\n}\n\nfunction value(value) {\n return this.val(value);\n}\n\nfunction transform(transform) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transform = transform;\n }\n\n return this;\n}\n\nfunction transition(duration) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transitionDuration = typeof duration !== 'string' ? `${duration}ms` : duration;\n }\n\n return this;\n}\n\nfunction on(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n\n function handleLiveEvent(e) {\n const target = e.target;\n if (!target) return;\n const eventData = e.target.dom7EventData || [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n const parents = $(target).parents(); // eslint-disable-line\n\n for (let k = 0; k < parents.length; k += 1) {\n if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);\n }\n }\n }\n\n function handleEvent(e) {\n const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n listener.apply(this, eventData);\n }\n\n const events = eventType.split(' ');\n let j;\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7Listeners) el.dom7Listeners = {};\n if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n el.dom7Listeners[event].push({\n listener,\n proxyListener: handleEvent\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];\n el.dom7LiveListeners[event].push({\n listener,\n proxyListener: handleLiveEvent\n });\n el.addEventListener(event, handleLiveEvent, capture);\n }\n }\n }\n\n return this;\n}\n\nfunction off(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n const events = eventType.split(' ');\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n let handlers;\n\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n\n if (handlers && handlers.length) {\n for (let k = handlers.length - 1; k >= 0; k -= 1) {\n const handler = handlers[k];\n\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n\n return this;\n}\n\nfunction once(...args) {\n const dom = this;\n let [eventName, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventName, listener, capture] = args;\n targetSelector = undefined;\n }\n\n function onceHandler(...eventArgs) {\n listener.apply(this, eventArgs);\n dom.off(eventName, targetSelector, onceHandler, capture);\n\n if (onceHandler.dom7proxy) {\n delete onceHandler.dom7proxy;\n }\n }\n\n onceHandler.dom7proxy = listener;\n return dom.on(eventName, targetSelector, onceHandler, capture);\n}\n\nfunction trigger(...args) {\n const window = getWindow();\n const events = args[0].split(' ');\n const eventData = args[1];\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n\n if (window.CustomEvent) {\n const evt = new window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true\n });\n el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n }\n\n return this;\n}\n\nfunction transitionEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionend', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionend', fireCallBack);\n }\n\n return this;\n}\n\nfunction animationEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('animationend', fireCallBack);\n }\n\n if (callback) {\n dom.on('animationend', fireCallBack);\n }\n\n return this;\n}\n\nfunction width() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerWidth;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n\n return null;\n}\n\nfunction outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n\n return this[0].offsetWidth;\n }\n\n return null;\n}\n\nfunction height() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerHeight;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n\n return null;\n}\n\nfunction outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n\n return this[0].offsetHeight;\n }\n\n return null;\n}\n\nfunction offset() {\n if (this.length > 0) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n }\n\n return null;\n}\n\nfunction hide() {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.display = 'none';\n }\n\n return this;\n}\n\nfunction show() {\n const window = getWindow();\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.style.display === 'none') {\n el.style.display = '';\n }\n\n if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n // Still not visible\n el.style.display = 'block';\n }\n }\n\n return this;\n}\n\nfunction styles() {\n const window = getWindow();\n if (this[0]) return window.getComputedStyle(this[0], null);\n return {};\n}\n\nfunction css(props, value) {\n const window = getWindow();\n let i;\n\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n // .css('width')\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n // .css({ width: '100px' })\n for (i = 0; i < this.length; i += 1) {\n for (const prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n\n return this;\n }\n }\n\n if (arguments.length === 2 && typeof props === 'string') {\n // .css('width', '100px')\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction each(callback) {\n if (!callback) return this;\n this.forEach((el, index) => {\n callback.apply(el, [el, index]);\n });\n return this;\n}\n\nfunction filter(callback) {\n const result = arrayFilter(this, callback);\n return $(result);\n}\n\nfunction html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n\n return this;\n}\n\nfunction text(text) {\n if (typeof text === 'undefined') {\n return this[0] ? this[0].textContent.trim() : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n\n return this;\n}\n\nfunction is(selector) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n let compareWith;\n let i;\n if (!el || typeof selector === 'undefined') return false;\n\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);\n if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n compareWith = $(selector);\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n if (selector === document) {\n return el === document;\n }\n\n if (selector === window) {\n return el === window;\n }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n return false;\n}\n\nfunction index() {\n let child = this[0];\n let i;\n\n if (child) {\n i = 0; // eslint-disable-next-line\n\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n\n return i;\n }\n\n return undefined;\n}\n\nfunction eq(index) {\n if (typeof index === 'undefined') return this;\n const length = this.length;\n\n if (index > length - 1) {\n return $([]);\n }\n\n if (index < 0) {\n const returnIndex = length + index;\n if (returnIndex < 0) return $([]);\n return $([this[returnIndex]]);\n }\n\n return $([this[index]]);\n}\n\nfunction append(...els) {\n let newChild;\n const document = getDocument();\n\n for (let k = 0; k < els.length; k += 1) {\n newChild = els[k];\n\n for (let i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (let j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n}\n\nfunction appendTo(parent) {\n $(parent).append(this);\n return this;\n}\n\nfunction prepend(newChild) {\n const document = getDocument();\n let i;\n let j;\n\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n\n return this;\n}\n\nfunction prependTo(parent) {\n $(parent).prepend(this);\n return this;\n}\n\nfunction insertBefore(selector) {\n const before = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n } else if (before.length > 1) {\n for (let j = 0; j < before.length; j += 1) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n}\n\nfunction insertAfter(selector) {\n const after = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n } else if (after.length > 1) {\n for (let j = 0; j < after.length; j += 1) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n}\n\nfunction next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return $([this[0].nextElementSibling]);\n }\n\n return $([]);\n }\n\n if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction nextAll(selector) {\n const nextEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(next).is(selector)) nextEls.push(next);\n } else nextEls.push(next);\n\n el = next;\n }\n\n return $(nextEls);\n}\n\nfunction prev(selector) {\n if (this.length > 0) {\n const el = this[0];\n\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return $([el.previousElementSibling]);\n }\n\n return $([]);\n }\n\n if (el.previousElementSibling) return $([el.previousElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction prevAll(selector) {\n const prevEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(prev).is(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n\n el = prev;\n }\n\n return $(prevEls);\n}\n\nfunction siblings(selector) {\n return this.nextAll(selector).add(this.prevAll(selector));\n}\n\nfunction parent(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n\n return $(parents);\n}\n\nfunction parents(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n let parent = this[i].parentNode; // eslint-disable-line\n\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n\n parent = parent.parentNode;\n }\n }\n\n return $(parents);\n}\n\nfunction closest(selector) {\n let closest = this; // eslint-disable-line\n\n if (typeof selector === 'undefined') {\n return $([]);\n }\n\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n\n return closest;\n}\n\nfunction find(selector) {\n const foundElements = [];\n\n for (let i = 0; i < this.length; i += 1) {\n const found = this[i].querySelectorAll(selector);\n\n for (let j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n\n return $(foundElements);\n}\n\nfunction children(selector) {\n const children = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n const childNodes = this[i].children;\n\n for (let j = 0; j < childNodes.length; j += 1) {\n if (!selector || $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n\n return $(children);\n}\n\nfunction remove() {\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n\n return this;\n}\n\nfunction detach() {\n return this.remove();\n}\n\nfunction add(...els) {\n const dom = this;\n let i;\n let j;\n\n for (i = 0; i < els.length; i += 1) {\n const toAdd = $(els[i]);\n\n for (j = 0; j < toAdd.length; j += 1) {\n dom.push(toAdd[j]);\n }\n }\n\n return dom;\n}\n\nfunction empty() {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.nodeType === 1) {\n for (let j = 0; j < el.childNodes.length; j += 1) {\n if (el.childNodes[j].parentNode) {\n el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n }\n }\n\n el.textContent = '';\n }\n }\n\n return this;\n}\n\n// eslint-disable-next-line\n\nfunction scrollTo(...args) {\n const window = getWindow();\n let [left, top, duration, easing, callback] = args;\n\n if (args.length === 4 && typeof easing === 'function') {\n callback = easing;\n [left, top, duration, callback, easing] = args;\n }\n\n if (typeof easing === 'undefined') easing = 'swing';\n return this.each(function animate() {\n const el = this;\n let currentTop;\n let currentLeft;\n let maxTop;\n let maxLeft;\n let newTop;\n let newLeft;\n let scrollTop; // eslint-disable-line\n\n let scrollLeft; // eslint-disable-line\n\n let animateTop = top > 0 || top === 0;\n let animateLeft = left > 0 || left === 0;\n\n if (typeof easing === 'undefined') {\n easing = 'swing';\n }\n\n if (animateTop) {\n currentTop = el.scrollTop;\n\n if (!duration) {\n el.scrollTop = top;\n }\n }\n\n if (animateLeft) {\n currentLeft = el.scrollLeft;\n\n if (!duration) {\n el.scrollLeft = left;\n }\n }\n\n if (!duration) return;\n\n if (animateTop) {\n maxTop = el.scrollHeight - el.offsetHeight;\n newTop = Math.max(Math.min(top, maxTop), 0);\n }\n\n if (animateLeft) {\n maxLeft = el.scrollWidth - el.offsetWidth;\n newLeft = Math.max(Math.min(left, maxLeft), 0);\n }\n\n let startTime = null;\n if (animateTop && newTop === currentTop) animateTop = false;\n if (animateLeft && newLeft === currentLeft) animateLeft = false;\n\n function render(time = new Date().getTime()) {\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = easing === 'linear' ? progress : 0.5 - Math.cos(progress * Math.PI) / 2;\n let done;\n if (animateTop) scrollTop = currentTop + easeProgress * (newTop - currentTop);\n if (animateLeft) scrollLeft = currentLeft + easeProgress * (newLeft - currentLeft);\n\n if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (done) {\n if (callback) callback();\n return;\n }\n\n if (animateTop) el.scrollTop = scrollTop;\n if (animateLeft) el.scrollLeft = scrollLeft;\n window.requestAnimationFrame(render);\n }\n\n window.requestAnimationFrame(render);\n });\n} // scrollTop(top, duration, easing, callback) {\n\n\nfunction scrollTop(...args) {\n let [top, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [top, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof top === 'undefined') {\n if (dom.length > 0) return dom[0].scrollTop;\n return null;\n }\n\n return dom.scrollTo(undefined, top, duration, easing, callback);\n}\n\nfunction scrollLeft(...args) {\n let [left, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [left, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof left === 'undefined') {\n if (dom.length > 0) return dom[0].scrollLeft;\n return null;\n }\n\n return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\n// eslint-disable-next-line\n\nfunction animate(initialProps, initialParams) {\n const window = getWindow();\n const els = this;\n const a = {\n props: Object.assign({}, initialProps),\n params: Object.assign({\n duration: 300,\n easing: 'swing' // or 'linear'\n\n /* Callbacks\n begin(elements)\n complete(elements)\n progress(elements, complete, remaining, start, tweenValue)\n */\n\n }, initialParams),\n elements: els,\n animating: false,\n que: [],\n\n easingProgress(easing, progress) {\n if (easing === 'swing') {\n return 0.5 - Math.cos(progress * Math.PI) / 2;\n }\n\n if (typeof easing === 'function') {\n return easing(progress);\n }\n\n return progress;\n },\n\n stop() {\n if (a.frameId) {\n window.cancelAnimationFrame(a.frameId);\n }\n\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n a.que = [];\n },\n\n done(complete) {\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n if (complete) complete(els);\n\n if (a.que.length > 0) {\n const que = a.que.shift();\n a.animate(que[0], que[1]);\n }\n },\n\n animate(props, params) {\n if (a.animating) {\n a.que.push([props, params]);\n return a;\n }\n\n const elements = []; // Define & Cache Initials & Units\n\n a.elements.each((el, index) => {\n let initialFullValue;\n let initialValue;\n let unit;\n let finalValue;\n let finalFullValue;\n if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n elements[index] = {\n container: el\n };\n Object.keys(props).forEach(prop => {\n initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n initialValue = parseFloat(initialFullValue);\n unit = initialFullValue.replace(initialValue, '');\n finalValue = parseFloat(props[prop]);\n finalFullValue = props[prop] + unit;\n elements[index][prop] = {\n initialFullValue,\n initialValue,\n unit,\n finalValue,\n finalFullValue,\n currentValue: initialValue\n };\n });\n });\n let startTime = null;\n let time;\n let elementsDone = 0;\n let propsDone = 0;\n let done;\n let began = false;\n a.animating = true;\n\n function render() {\n time = new Date().getTime();\n let progress;\n let easeProgress; // let el;\n\n if (!began) {\n began = true;\n if (params.begin) params.begin(els);\n }\n\n if (startTime === null) {\n startTime = time;\n }\n\n if (params.progress) {\n // eslint-disable-next-line\n params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), startTime + params.duration - time < 0 ? 0 : startTime + params.duration - time, startTime);\n }\n\n elements.forEach(element => {\n const el = element;\n if (done || el.done) return;\n Object.keys(props).forEach(prop => {\n if (done || el.done) return;\n progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n easeProgress = a.easingProgress(params.easing, progress);\n const {\n initialValue,\n finalValue,\n unit\n } = el[prop];\n el[prop].currentValue = initialValue + easeProgress * (finalValue - initialValue);\n const currentValue = el[prop].currentValue;\n\n if (finalValue > initialValue && currentValue >= finalValue || finalValue < initialValue && currentValue <= finalValue) {\n el.container.style[prop] = finalValue + unit;\n propsDone += 1;\n\n if (propsDone === Object.keys(props).length) {\n el.done = true;\n elementsDone += 1;\n }\n\n if (elementsDone === elements.length) {\n done = true;\n }\n }\n\n if (done) {\n a.done(params.complete);\n return;\n }\n\n el.container.style[prop] = currentValue + unit;\n });\n });\n if (done) return; // Then call\n\n a.frameId = window.requestAnimationFrame(render);\n }\n\n a.frameId = window.requestAnimationFrame(render);\n return a;\n }\n\n };\n\n if (a.elements.length === 0) {\n return els;\n }\n\n let animateInstance;\n\n for (let i = 0; i < a.elements.length; i += 1) {\n if (a.elements[i].dom7AnimateInstance) {\n animateInstance = a.elements[i].dom7AnimateInstance;\n } else a.elements[i].dom7AnimateInstance = a;\n }\n\n if (!animateInstance) {\n animateInstance = a;\n }\n\n if (initialProps === 'stop') {\n animateInstance.stop();\n } else {\n animateInstance.animate(a.props, a.params);\n }\n\n return els;\n}\n\nfunction stop() {\n const els = this;\n\n for (let i = 0; i < els.length; i += 1) {\n if (els[i].dom7AnimateInstance) {\n els[i].dom7AnimateInstance.stop();\n }\n }\n}\n\nconst noTrigger = 'resize scroll'.split(' ');\n\nfunction shortcut(name) {\n function eventHandler(...args) {\n if (typeof args[0] === 'undefined') {\n for (let i = 0; i < this.length; i += 1) {\n if (noTrigger.indexOf(name) < 0) {\n if (name in this[i]) this[i][name]();else {\n $(this[i]).trigger(name);\n }\n }\n }\n\n return this;\n }\n\n return this.on(name, ...args);\n }\n\n return eventHandler;\n}\n\nconst click = shortcut('click');\nconst blur = shortcut('blur');\nconst focus = shortcut('focus');\nconst focusin = shortcut('focusin');\nconst focusout = shortcut('focusout');\nconst keyup = shortcut('keyup');\nconst keydown = shortcut('keydown');\nconst keypress = shortcut('keypress');\nconst submit = shortcut('submit');\nconst change = shortcut('change');\nconst mousedown = shortcut('mousedown');\nconst mousemove = shortcut('mousemove');\nconst mouseup = shortcut('mouseup');\nconst mouseenter = shortcut('mouseenter');\nconst mouseleave = shortcut('mouseleave');\nconst mouseout = shortcut('mouseout');\nconst mouseover = shortcut('mouseover');\nconst touchstart = shortcut('touchstart');\nconst touchend = shortcut('touchend');\nconst touchmove = shortcut('touchmove');\nconst resize = shortcut('resize');\nconst scroll = shortcut('scroll');\n\nexport default $;\nexport { $, add, addClass, animate, animationEnd, append, appendTo, attr, blur, change, children, click, closest, css, data, dataset, detach, each, empty, eq, filter, find, focus, focusin, focusout, hasClass, height, hide, html, index, insertAfter, insertBefore, is, keydown, keypress, keyup, mousedown, mouseenter, mouseleave, mousemove, mouseout, mouseover, mouseup, next, nextAll, off, offset, on, once, outerHeight, outerWidth, parent, parents, prepend, prependTo, prev, prevAll, prop, remove, removeAttr, removeClass, removeData, resize, scroll, scrollLeft, scrollTo, scrollTop, show, siblings, stop, styles, submit, text, toggleClass, touchend, touchmove, touchstart, transform, transition, transitionEnd, trigger, val, value, width };\n","import { $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, transform, transition, on, off, trigger, transitionEnd, outerWidth, outerHeight, styles, offset, css, each, html, text, is, index, eq, append, prepend, next, nextAll, prev, prevAll, parent, parents, closest, find, children, filter, remove } from 'dom7';\nconst Methods = {\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n attr,\n removeAttr,\n transform,\n transition,\n on,\n off,\n trigger,\n transitionEnd,\n outerWidth,\n outerHeight,\n styles,\n offset,\n css,\n each,\n html,\n text,\n is,\n index,\n eq,\n append,\n prepend,\n next,\n nextAll,\n prev,\n prevAll,\n parent,\n parents,\n closest,\n find,\n children,\n filter,\n remove\n};\nObject.keys(Methods).forEach(methodName => {\n Object.defineProperty($.fn, methodName, {\n value: Methods[methodName],\n writable: true\n });\n});\nexport default $;","import { getWindow } from 'ssr-window';\n\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {// no getter for object\n }\n\n try {\n delete object[key];\n } catch (e) {// something got wrong\n }\n });\n}\n\nfunction nextTick(callback, delay = 0) {\n return setTimeout(callback, delay);\n}\n\nfunction now() {\n return Date.now();\n}\n\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n\n if (!style) {\n style = el.style;\n }\n\n return style;\n}\n\nfunction getTranslate(el, axis = 'x') {\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el, null);\n\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n } // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n\n\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n\n return curTransform || 0;\n}\n\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\n\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\n\nfunction extend(...args) {\n const to = Object(args[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n\n for (let i = 1; i < args.length; i += 1) {\n const nextSource = args[i];\n\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n\n return to;\n}\n\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\n\nfunction animateCSSModeScroll({\n swiper,\n targetPosition,\n side\n}) {\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n\n const animate = () => {\n time = new Date().getTime();\n\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n\n animate();\n}\n\nexport { animateCSSModeScroll, deleteProps, nextTick, now, getTranslate, isObject, extend, getComputedStyle, setCSSProperty };","import { getWindow, getDocument } from 'ssr-window';\nlet support;\n\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch),\n passiveListener: function checkPassiveListener() {\n let supportsPassive = false;\n\n try {\n const opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get() {\n supportsPassive = true;\n }\n\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {// No support\n }\n\n return supportsPassive;\n }(),\n gestures: function checkGestures() {\n return 'ongesturestart' in window;\n }()\n };\n}\n\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n\n return support;\n}\n\nexport { getSupport };","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support.js';\nlet deviceCached;\n\nfunction calcDevice({\n userAgent\n} = {}) {\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel'; // iPadOs 13 fix\n\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n } // Android\n\n\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n } // Export object\n\n\n return device;\n}\n\nfunction getDevice(overrides = {}) {\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n\n return deviceCached;\n}\n\nexport { getDevice };","import { getWindow } from 'ssr-window';\nlet browser;\n\nfunction calcBrowser() {\n const window = getWindow();\n\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n\n return {\n isSafari: isSafari(),\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n };\n}\n\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n\n return browser;\n}\n\nexport { getBrowser };","/* eslint-disable no-underscore-dangle */\nexport default {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n\n function onceHandler(...args) {\n self.off(events, onceHandler);\n\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n\n handler.apply(self, args);\n }\n\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n\n return self;\n },\n\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n\n return self;\n },\n\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n\n emit(...args) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n\n};","import updateSize from './updateSize.js';\nimport updateSlides from './updateSlides.js';\nimport updateAutoHeight from './updateAutoHeight.js';\nimport updateSlidesOffset from './updateSlidesOffset.js';\nimport updateSlidesProgress from './updateSlidesProgress.js';\nimport updateProgress from './updateProgress.js';\nimport updateSlidesClasses from './updateSlidesClasses.js';\nimport updateActiveIndex from './updateActiveIndex.js';\nimport updateClickedSlide from './updateClickedSlide.js';\nexport default {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};","export default function updateSize() {\n const swiper = this;\n let width;\n let height;\n const $el = swiper.$el;\n\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = $el[0].clientWidth;\n }\n\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = $el[0].clientHeight;\n }\n\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n } // Subtract paddings\n\n\n width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10);\n height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}","import { setCSSProperty } from '../../shared/utils.js';\nexport default function updateSlides() {\n const swiper = this;\n\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n } // prettier-ignore\n\n\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n\n const params = swiper.params;\n const {\n $wrapperEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n\n let offsetAfter = params.slidesOffsetAfter;\n\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n\n if (typeof swiperSize === 'undefined') {\n return;\n }\n\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n }\n\n swiper.virtualSize = -spaceBetween; // reset margins\n\n if (rtl) slides.css({\n marginLeft: '',\n marginBottom: '',\n marginTop: ''\n });else slides.css({\n marginRight: '',\n marginBottom: '',\n marginTop: ''\n }); // reset cssMode offsets\n\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', '');\n }\n\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n } // Calc slides\n\n\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n const slide = slides.eq(i);\n\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n\n if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n\n const slideStyles = getComputedStyle(slide[0]);\n const currentTransform = slide[0].style.transform;\n const currentWebKitTransform = slide[0].style.webkitTransform;\n\n if (currentTransform) {\n slide[0].style.transform = 'none';\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = 'none';\n }\n\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide[0];\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n\n if (currentTransform) {\n slide[0].style.transform = currentTransform;\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = currentWebKitTransform;\n }\n\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n if (slides[i]) {\n slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n\n slidesSizesGrid.push(slideSize);\n\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperEl.css({\n width: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (params.setWrapperSize) {\n $wrapperEl.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n } // Remove last grid elements depending on width\n\n\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n\n snapGrid = newSlidesGrid;\n\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n\n if (snapGrid.length === 0) snapGrid = [0];\n\n if (params.spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode) return true;\n\n if (slideIndex === slides.length - 1) {\n return false;\n }\n\n return true;\n }).css({\n [key]: `${spaceBetween}px`\n });\n }\n\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap < 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.$el.hasClass(backFaceHiddenClass);\n\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.$el.addClass(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.$el.removeClass(backFaceHiddenClass);\n }\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides.filter(el => parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index)[0];\n }\n\n return swiper.slides.eq(index)[0];\n }; // Find slides currently in view\n\n\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n (swiper.visibleSlides || $([])).each(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n } // Find new height from highest slide in view\n\n\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n } // Update Height\n\n\n if (newHeight || newHeight === 0) swiper.$wrapperEl.css('height', `${newHeight}px`);\n}","export default function updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateSlidesProgress(translate = this && this.translate || 0) {\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate; // Visible Slides\n\n slides.removeClass(params.slideVisibleClass);\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides.eq(i).addClass(params.slideVisibleClass);\n }\n\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n\n swiper.visibleSlides = $(swiper.visibleSlides);\n}","export default function updateProgress(translate) {\n const swiper = this;\n\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line\n\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n isBeginning = progress <= 0;\n isEnd = progress >= 1;\n }\n\n Object.assign(swiper, {\n progress,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n\n swiper.emit('progress', progress);\n}","export default function updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n $wrapperEl,\n activeIndex,\n realIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);\n let activeSlide;\n\n if (isVirtual) {\n activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`);\n } else {\n activeSlide = slides.eq(activeIndex);\n } // Active classes\n\n\n activeSlide.addClass(params.slideActiveClass);\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n }\n } // Next Slide\n\n\n let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);\n\n if (params.loop && nextSlide.length === 0) {\n nextSlide = slides.eq(0);\n nextSlide.addClass(params.slideNextClass);\n } // Prev Slide\n\n\n let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);\n\n if (params.loop && prevSlide.length === 0) {\n prevSlide = slides.eq(-1);\n prevSlide.addClass(params.slidePrevClass);\n }\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n }\n\n if (prevSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n }\n }\n\n swiper.emitSlidesClasses();\n}","export default function updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n slidesGrid,\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n\n if (typeof activeIndex === 'undefined') {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n } // Normalize slideIndex\n\n\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n }\n\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n\n return;\n } // Get real index\n\n\n const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n Object.assign(swiper, {\n snapIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateClickedSlide(e) {\n const swiper = this;\n const params = swiper.params;\n const slide = $(e).closest(`.${params.slideClass}`)[0];\n let slideFound = false;\n let slideIndex;\n\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}","import getTranslate from './getTranslate.js';\nimport setTranslate from './setTranslate.js';\nimport minTranslate from './minTranslate.js';\nimport maxTranslate from './maxTranslate.js';\nimport translateTo from './translateTo.js';\nexport default {\n getTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};","import { getTranslate } from '../../shared/utils.js';\nexport default function getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n $wrapperEl\n } = swiper;\n\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n\n if (params.cssMode) {\n return translate;\n }\n\n let currentTranslate = getTranslate($wrapperEl[0], axis);\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}","export default function setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n $wrapperEl,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n }\n\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress\n\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, byController);\n}","export default function minTranslate() {\n return -this.snapGrid[0];\n}","export default function maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function translateTo(translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress\n\n swiper.updateProgress(newTranslate);\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n\n if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n\n return true;\n}","export default function transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step\n}) {\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n\n swiper.emit(`transition${step}`);\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n\n swiper.emit(`slideChangeTransition${step}`);\n\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}","import slideTo from './slideTo.js';\nimport slideToLoop from './slideToLoop.js';\nimport slideNext from './slideNext.js';\nimport slidePrev from './slidePrev.js';\nimport slideReset from './slideReset.js';\nimport slideToClosest from './slideToClosest.js';\nimport slideToClickedSlide from './slideToClickedSlide.js';\nexport default {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function slideTo(index = 0, speed = this.params.speed, runCallbacks = true, internal, initial) {\n if (typeof index !== 'number' && typeof index !== 'string') {\n throw new Error(`The 'index' argument cannot have type other than 'number' or 'string'. [${typeof index}] given.`);\n }\n\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`);\n } // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n\n\n index = indexAsNumber;\n }\n\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n return false;\n }\n\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n const translate = -snapGrid[snapIndex]; // Normalize slideIndex\n\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n } // Directions locks\n\n\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n return false;\n }\n\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) return false;\n }\n }\n\n if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n } // Update progress\n\n\n swiper.updateProgress(translate);\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index\n\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex); // Update Height\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n swiper.updateSlidesClasses();\n\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n\n return false;\n }\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._swiperImmediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n }\n\n return true;\n}","export default function slideToLoop(index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`);\n } // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n\n\n index = indexAsNumber;\n }\n\n const swiper = this;\n let newIndex = index;\n\n if (swiper.params.loop) {\n newIndex += swiper.loopedSlides;\n }\n\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideNext(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n animating,\n enabled,\n params\n } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slidePrev(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n params,\n animating,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return swiper;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n\n let prevIndex = 0;\n\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n }\n\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideReset(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideToClosest(speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {\n const swiper = this;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}","import $ from '../../shared/dom.js';\nimport { nextTick } from '../../shared/utils.js';\nexport default function slideToClickedSlide() {\n const swiper = this;\n const {\n params,\n $wrapperEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}","import loopCreate from './loopCreate.js';\nimport loopFix from './loopFix.js';\nimport loopDestroy from './loopDestroy.js';\nexport default {\n loopCreate,\n loopFix,\n loopDestroy\n};","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function loopCreate() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n $wrapperEl\n } = swiper; // Remove duplicated slides\n\n const $selector = $wrapperEl.children().length > 0 ? $($wrapperEl.children()[0].parentNode) : $wrapperEl;\n $selector.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n let slides = $selector.children(`.${params.slideClass}`);\n\n if (params.loopFillGroupWithBlank) {\n const blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;\n\n if (blankSlidesNum !== params.slidesPerGroup) {\n for (let i = 0; i < blankSlidesNum; i += 1) {\n const blankNode = $(document.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);\n $selector.append(blankNode);\n }\n\n slides = $selector.children(`.${params.slideClass}`);\n }\n }\n\n if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n swiper.loopedSlides += params.loopAdditionalSlides;\n\n if (swiper.loopedSlides > slides.length && swiper.params.loopedSlidesLimit) {\n swiper.loopedSlides = slides.length;\n }\n\n const prependSlides = [];\n const appendSlides = [];\n slides.each((el, index) => {\n const slide = $(el);\n slide.attr('data-swiper-slide-index', index);\n });\n\n for (let i = 0; i < swiper.loopedSlides; i += 1) {\n const index = i - Math.floor(i / slides.length) * slides.length;\n appendSlides.push(slides.eq(index)[0]);\n prependSlides.unshift(slides.eq(slides.length - index - 1)[0]);\n }\n\n for (let i = 0; i < appendSlides.length; i += 1) {\n $selector.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n\n for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n $selector.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n}","export default function loopFix() {\n const swiper = this;\n swiper.emit('beforeLoopFix');\n const {\n activeIndex,\n slides,\n loopedSlides,\n allowSlidePrev,\n allowSlideNext,\n snapGrid,\n rtlTranslate: rtl\n } = swiper;\n let newIndex;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n const snapTranslate = -snapGrid[activeIndex];\n const diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding\n\n if (activeIndex < loopedSlides) {\n newIndex = slides.length - loopedSlides * 3 + activeIndex;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n } else if (activeIndex >= slides.length - loopedSlides) {\n // Fix For Positive Oversliding\n newIndex = -slides.length + activeIndex + loopedSlides;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n }\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n}","export default function loopDestroy() {\n const swiper = this;\n const {\n $wrapperEl,\n params,\n slides\n } = swiper;\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();\n slides.removeAttr('data-swiper-slide-index');\n}","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js'; // Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\n\nfunction closestElement(selector, base = this) {\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n\n if (!found && !el.getRootNode) {\n return null;\n }\n\n return found || __closestFrom(el.getRootNode().host);\n }\n\n return __closestFrom(base);\n}\n\nexport default function onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let $targetEl = $(e.target);\n\n if (params.touchEventsTarget === 'wrapper') {\n if (!$targetEl.closest(swiper.wrapperEl).length) return;\n }\n\n data.isTouchEvent = e.type === 'touchstart';\n if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return; // change target el for shadow root component\n\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== ''; // eslint-disable-next-line\n\n const eventPath = event.composedPath ? event.composedPath() : event.path;\n\n if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n $targetEl = $(eventPath[0]);\n }\n\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot); // use closestElement for shadow root element to get the actual closest for nested shadow root element\n\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, $targetEl[0]) : $targetEl.closest(noSwipingSelector)[0])) {\n swiper.allowClick = true;\n return;\n }\n\n if (params.swipeHandler) {\n if (!$targetEl.closest(params.swipeHandler)[0]) return;\n }\n\n touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\n }\n\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n\n if (e.type !== 'touchstart') {\n let preventDefault = true;\n\n if ($targetEl.is(data.focusableElements)) {\n preventDefault = false;\n\n if ($targetEl[0].nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n\n if (document.activeElement && $(document.activeElement).is(data.focusableElements) && document.activeElement !== $targetEl[0]) {\n document.activeElement.blur();\n }\n\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !$targetEl[0].isContentEditable) {\n e.preventDefault();\n }\n }\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n\n swiper.emit('touchStart', e);\n}","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js';\nexport default function onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n return;\n }\n\n if (data.isTouchEvent && e.type !== 'touchmove') return;\n const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n\n if (!swiper.allowTouchMove) {\n if (!$(e.target).is(data.focusableElements)) {\n swiper.allowClick = false;\n }\n\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n\n return;\n }\n\n if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n\n if (data.isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n\n if (e.targetTouches && e.targetTouches.length > 1) return;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n\n if (data.isScrolling) {\n data.isTouched = false;\n return;\n }\n\n if (!data.startMoving) {\n return;\n }\n\n swiper.allowClick = false;\n\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n\n if (!data.isMoved) {\n if (params.loop && !params.cssMode) {\n swiper.loopFix();\n }\n\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n\n if (swiper.animating) {\n swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n }\n\n data.allowMomentumBounce = false; // Grab Cursor\n\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n\n swiper.emit('sliderFirstMove', e);\n }\n\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n let diff = swiper.isHorizontal() ? diffX : diffY;\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) diff = -diff;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n\n if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n } // Directions locks\n\n\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n } // Threshold\n\n\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n\n if (!params.followFinger || params.cssMode) return; // Update active index in free mode\n\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n } // Update progress\n\n\n swiper.updateProgress(data.currentTranslate); // Update translate\n\n swiper.setTranslate(data.currentTranslate);\n}","import { now, nextTick } from '../../shared/utils.js';\nexport default function onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n\n data.allowTouchCallbacks = false;\n\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n\n data.isMoved = false;\n data.startMoving = false;\n return;\n } // Return Grab Cursor\n\n\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n } // Time diff\n\n\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click\n\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target);\n swiper.emit('tap click', e);\n\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n\n if (params.cssMode) {\n return;\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n } // Find current slide\n\n\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n } // Find current slide size\n\n\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}","export default function onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n } // Save locks\n\n\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper; // Disable locks on resize\n\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.run();\n } // Return locks after resize\n\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}","export default function onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}","export default function onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n } // eslint-disable-next-line\n\n\n if (swiper.translate === 0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, false);\n}","import { getDocument } from 'ssr-window';\nimport onTouchStart from './onTouchStart.js';\nimport onTouchMove from './onTouchMove.js';\nimport onTouchEnd from './onTouchEnd.js';\nimport onResize from './onResize.js';\nimport onClick from './onClick.js';\nimport onScroll from './onScroll.js';\nlet dummyEventAttached = false;\n\nfunction dummyEventListener() {}\n\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n touchEvents,\n el,\n wrapperEl,\n device,\n support\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method; // Touch Events\n\n if (!support.touch) {\n el[domMethod](touchEvents.start, swiper.onTouchStart, false);\n document[domMethod](touchEvents.move, swiper.onTouchMove, capture);\n document[domMethod](touchEvents.end, swiper.onTouchEnd, false);\n } else {\n const passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n el[domMethod](touchEvents.start, swiper.onTouchStart, passiveListener);\n el[domMethod](touchEvents.move, swiper.onTouchMove, support.passiveListener ? {\n passive: false,\n capture\n } : capture);\n el[domMethod](touchEvents.end, swiper.onTouchEnd, passiveListener);\n\n if (touchEvents.cancel) {\n el[domMethod](touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n }\n } // Prevent Links Clicks\n\n\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n } // Resize handler\n\n\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n};\n\nfunction attachEvents() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n support\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n\n swiper.onClick = onClick.bind(swiper);\n\n if (support.touch && !dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n\n events(swiper, 'on');\n}\n\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\n\nexport default {\n attachEvents,\n detachEvents\n};","import { extend } from '../../shared/utils.js';\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\n\nexport default function setBreakpoint() {\n const swiper = this;\n const {\n activeIndex,\n initialized,\n loopedSlides = 0,\n params,\n $el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters\n\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasEnabled = params.enabled;\n\n if (wasMultiRow && !isMultiRow) {\n $el.removeClass(`${params.containerModifierClass}grid ${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n $el.addClass(`${params.containerModifierClass}grid`);\n\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n $el.addClass(`${params.containerModifierClass}grid-column`);\n }\n\n swiper.emitContainerClasses();\n } // Toggle navigation, pagination, scrollbar\n\n\n ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n const wasModuleEnabled = params[prop] && params[prop].enabled;\n const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n\n if (wasModuleEnabled && !isModuleEnabled) {\n swiper[prop].disable();\n }\n\n if (!wasModuleEnabled && isModuleEnabled) {\n swiper[prop].enable();\n }\n });\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate();\n swiper.updateSlides();\n swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);\n }\n\n swiper.emit('breakpoint', breakpointParams);\n}","import setBreakpoint from './setBreakpoint.js';\nimport getBreakpoint from './getBreakpoint.js';\nexport default {\n setBreakpoint,\n getBreakpoint\n};","import { getWindow } from 'ssr-window';\nexport default function getBreakpoint(breakpoints, base = 'window', containerEl) {\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n\n return breakpoint || 'max';\n}","import addClasses from './addClasses.js';\nimport removeClasses from './removeClasses.js';\nexport default {\n addClasses,\n removeClasses\n};","function prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\n\nexport default function addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n $el,\n device,\n support\n } = swiper; // prettier-ignore\n\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'pointer-events': !support.touch\n }, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n $el.addClass([...classNames].join(' '));\n swiper.emitContainerClasses();\n}","export default function removeClasses() {\n const swiper = this;\n const {\n $el,\n classNames\n } = swiper;\n $el.removeClass(classNames.join(' '));\n swiper.emitContainerClasses();\n}","function checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\n\nexport default {\n checkOverflow\n};","export default {\n init: true,\n direction: 'horizontal',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 0,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n loopedSlidesLimit: true,\n loopFillGroupWithBlank: false,\n loopPreventsSlide: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-invisible-blank',\n slideActiveClass: 'swiper-slide-active',\n slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n slidePrevClass: 'swiper-slide-prev',\n slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n wrapperClass: 'swiper-wrapper',\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};","import { extend } from '../shared/utils.js';\nexport default function moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj = {}) {\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\n params[moduleParamName] = {\n auto: true\n };\n }\n\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}","/* eslint no-param-reassign: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport $ from '../shared/dom.js';\nimport { extend, now, deleteProps } from '../shared/utils.js';\nimport { getSupport } from '../shared/get-support.js';\nimport { getDevice } from '../shared/get-device.js';\nimport { getBrowser } from '../shared/get-browser.js';\nimport Resize from './modules/resize/resize.js';\nimport Observer from './modules/observer/observer.js';\nimport eventsEmitter from './events-emitter.js';\nimport update from './update/index.js';\nimport translate from './translate/index.js';\nimport transition from './transition/index.js';\nimport slide from './slide/index.js';\nimport loop from './loop/index.js';\nimport grabCursor from './grab-cursor/index.js';\nimport events from './events/index.js';\nimport breakpoints from './breakpoints/index.js';\nimport classes from './classes/index.js';\nimport images from './images/index.js';\nimport checkOverflow from './check-overflow/index.js';\nimport defaults from './defaults.js';\nimport moduleExtendParams from './moduleExtendParams.js';\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events,\n breakpoints,\n checkOverflow,\n classes,\n images\n};\nconst extendedDefaults = {};\n\nclass Swiper {\n constructor(...args) {\n let el;\n let params;\n\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n\n if (params.el && $(params.el).length > 1) {\n const swipers = [];\n $(params.el).each(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n }); // eslint-disable-next-line no-constructor-return\n\n return swipers;\n } // Swiper Instance\n\n\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n }); // Extend defaults with modules params\n\n const swiperParams = extend({}, defaults, allModulesParams); // Extend defaults with passed params\n\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params); // add event listeners\n\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n } // Save Dom lib\n\n\n swiper.$ = $; // Extend Swiper\n\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: $(),\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEvents: function touchEvents() {\n const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n const desktop = ['pointerdown', 'pointermove', 'pointerup'];\n swiper.touchEventsTouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2],\n cancel: touch[3]\n };\n swiper.touchEventsDesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2]\n };\n return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n }(),\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: now(),\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n isTouchEvent: undefined,\n startMoving: undefined\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper'); // Init\n\n if (swiper.params.init) {\n swiper.init();\n } // Return app instance\n // eslint-disable-next-line no-constructor-return\n\n\n return swiper;\n }\n\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n\n swiper.emit('enable');\n }\n\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n\n swiper.emit('disable');\n }\n\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n\n getSlideClasses(slideEl) {\n const swiper = this;\n if (swiper.destroyed) return '';\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.each(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n\n slidesPerViewDynamic(view = 'current', exact = false) {\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex].swiperSlideSize;\n let breakLoop;\n\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n\n return spv;\n }\n\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n let translated;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled) {\n setTranslate();\n\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (!translated) {\n setTranslate();\n }\n }\n\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n\n swiper.emit('update');\n }\n\n changeDirection(newDirection, needUpdate = true) {\n const swiper = this;\n const currentDirection = swiper.params.direction;\n\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n\n swiper.$el.removeClass(`${swiper.params.containerModifierClass}${currentDirection}`).addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.each(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n\n changeLanguageDirection(direction) {\n const swiper = this;\n if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n swiper.rtl = direction === 'rtl';\n swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n\n if (swiper.rtl) {\n swiper.$el.addClass(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'rtl';\n } else {\n swiper.$el.removeClass(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'ltr';\n }\n\n swiper.update();\n }\n\n mount(el) {\n const swiper = this;\n if (swiper.mounted) return true; // Find el\n\n const $el = $(el || swiper.params.el);\n el = $el[0];\n\n if (!el) {\n return false;\n }\n\n el.swiper = swiper;\n\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = $(el.shadowRoot.querySelector(getWrapperSelector())); // Children needs to return slot items\n\n res.children = options => $el.children(options);\n\n return res;\n }\n\n if (!$el.children) {\n return $($el).children(getWrapperSelector());\n }\n\n return $el.children(getWrapperSelector());\n }; // Find Wrapper\n\n\n let $wrapperEl = getWrapper();\n\n if ($wrapperEl.length === 0 && swiper.params.createElements) {\n const document = getDocument();\n const wrapper = document.createElement('div');\n $wrapperEl = $(wrapper);\n wrapper.className = swiper.params.wrapperClass;\n $el.append(wrapper);\n $el.children(`.${swiper.params.slideClass}`).each(slideEl => {\n $wrapperEl.append(slideEl);\n });\n }\n\n Object.assign(swiper, {\n $el,\n el,\n $wrapperEl,\n wrapperEl: $wrapperEl[0],\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n wrongRTL: $wrapperEl.css('display') === '-webkit-box'\n });\n return true;\n }\n\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit'); // Set breakpoint\n\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n } // Add Classes\n\n\n swiper.addClasses(); // Create loop\n\n if (swiper.params.loop) {\n swiper.loopCreate();\n } // Update size\n\n\n swiper.updateSize(); // Update slides\n\n swiper.updateSlides();\n\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n } // Set Grab Cursor\n\n\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n if (swiper.params.preloadImages) {\n swiper.preloadImages();\n } // Slide To Initial Slide\n\n\n if (swiper.params.loop) {\n swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n } // Attach events\n\n\n swiper.attachEvents(); // Init Flag\n\n swiper.initialized = true; // Emit\n\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n\n destroy(deleteInstance = true, cleanStyles = true) {\n const swiper = this;\n const {\n params,\n $el,\n $wrapperEl,\n slides\n } = swiper;\n\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n\n swiper.emit('beforeDestroy'); // Init Flag\n\n swiper.initialized = false; // Detach events\n\n swiper.detachEvents(); // Destroy loop\n\n if (params.loop) {\n swiper.loopDestroy();\n } // Cleanup styles\n\n\n if (cleanStyles) {\n swiper.removeClasses();\n $el.removeAttr('style');\n $wrapperEl.removeAttr('style');\n\n if (slides && slides.length) {\n slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index');\n }\n }\n\n swiper.emit('destroy'); // Detach emitter events\n\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n\n if (deleteInstance !== false) {\n swiper.$el[0].swiper = null;\n deleteProps(swiper);\n }\n\n swiper.destroyed = true;\n return null;\n }\n\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n\n static get extendedDefaults() {\n return extendedDefaults;\n }\n\n static get defaults() {\n return defaults;\n }\n\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n\n Swiper.installModule(module);\n return Swiper;\n }\n\n}\n\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\nexport default Swiper;","import setTransition from './setTransition.js';\nimport transitionStart from './transitionStart.js';\nimport transitionEnd from './transitionEnd.js';\nexport default {\n setTransition,\n transitionStart,\n transitionEnd\n};","export default function setTransition(duration, byController) {\n const swiper = this;\n\n if (!swiper.params.cssMode) {\n swiper.$wrapperEl.transition(duration);\n }\n\n swiper.emit('setTransition', duration, byController);\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionStart(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionEnd(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}","import setGrabCursor from './setGrabCursor.js';\nimport unsetGrabCursor from './unsetGrabCursor.js';\nexport default {\n setGrabCursor,\n unsetGrabCursor\n};","export default function setGrabCursor(moving) {\n const swiper = this;\n if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n}","export default function unsetGrabCursor() {\n const swiper = this;\n\n if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n}","import loadImage from './loadImage.js';\nimport preloadImages from './preloadImages.js';\nexport default {\n loadImage,\n preloadImages\n};","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n const window = getWindow();\n let image;\n\n function onReady() {\n if (callback) callback();\n }\n\n const isPicture = $(imageEl).parent('picture')[0];\n\n if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n\n if (sizes) {\n image.sizes = sizes;\n }\n\n if (srcset) {\n image.srcset = srcset;\n }\n\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n } else {\n // image already loaded...\n onReady();\n }\n}","export default function preloadImages() {\n const swiper = this;\n swiper.imagesToLoad = swiper.$el.find('img');\n\n function onReady() {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n\n if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n if (swiper.params.updateOnImagesReady) swiper.update();\n swiper.emit('imagesReady');\n }\n }\n\n for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n const imageEl = swiper.imagesToLoad[i];\n swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);\n }\n}","import { getWindow } from 'ssr-window';\nexport default function Resize({\n swiper,\n on,\n emit\n}) {\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(({\n contentBoxSize,\n contentRect,\n target\n }) => {\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}","import { getWindow } from 'ssr-window';\nexport default function Observer({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const observers = [];\n const window = getWindow();\n\n const attach = (target, options = {}) => {\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n\n const init = () => {\n if (!swiper.params.observer) return;\n\n if (swiper.params.observeParents) {\n const containerParents = swiper.$el.parents();\n\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n } // Observe container\n\n\n attach(swiper.$el[0], {\n childList: swiper.params.observeSlideChildren\n }); // Observe wrapper\n\n attach(swiper.$wrapperEl[0], {\n attributes: false\n });\n };\n\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}","import { getDocument } from 'ssr-window';\nexport default function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n const document = getDocument();\n\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = swiper.$el.children(`.${checkProps[key]}`)[0];\n\n if (!element) {\n element = document.createElement('div');\n element.className = checkProps[key];\n swiper.$el.append(element);\n }\n\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n\n return params;\n}","export default function classesToSelector(classes = '') {\n return `.${classes.trim().replace(/([\\.:!\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}","import $ from './dom.js';\nexport default function createShadow(params, $slideEl, side) {\n const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}`;\n const $shadowContainer = params.transformEl ? $slideEl.find(params.transformEl) : $slideEl;\n let $shadowEl = $shadowContainer.children(`.${shadowClass}`);\n\n if (!$shadowEl.length) {\n $shadowEl = $(`
      `);\n $shadowContainer.append($shadowEl);\n }\n\n return $shadowEl;\n}","export default function effectTarget(effectParams, $slideEl) {\n if (effectParams.transformEl) {\n return $slideEl.find(effectParams.transformEl).css({\n 'backface-visibility': 'hidden',\n '-webkit-backface-visibility': 'hidden'\n });\n }\n\n return $slideEl;\n}","import $ from \"/srv/www/f/friesland-boating.nl/vhosts/www/htdocs/wp-content/plugins/wp-soup-framework/node_modules/jquery\";\n// import Swiper, { Navigation, Pagination, Scrollbar, Autoplay, Thumbs, Controller, EffectCoverflow } from \"swiper\";\n// Swiper.use([Navigation, Pagination, Scrollbar, Autoplay, Thumbs, Controller, EffectCoverflow]);\n\nimport Swiper, {\n Navigation,\n Pagination,\n Scrollbar,\n Autoplay,\n Thumbs,\n Controller,\n EffectCoverflow,\n} from \"/srv/www/f/friesland-boating.nl/vhosts/www/htdocs/wp-content/plugins/wp-soup-framework/node_modules/swiper\";\n\nSwiper.use([\n Navigation,\n Pagination,\n Scrollbar,\n Autoplay,\n Thumbs,\n Controller,\n EffectCoverflow,\n]);\n\n\n$(document).ready(function () {\n $(\".article-date\").insertAfter(\".wp-block-acf-breadcrumbs\");\n\n $(\".exclusive-price\").click(function () {\n $(\".panels\").removeClass(\"is-active\");\n $(\".ms-tabs\").removeClass(\"is-active\");\n $(\".exclusive-tab\").addClass(\"is-active\");\n $(\".ms-tabs-sevice\").addClass(\"is-active\");\n });\n var galleryThumbs = new Swiper(\".ms_boat-gallery-thumbs\", {\n spaceBetween: 10,\n slidesPerView: 4,\n loop: true,\n freeMode: true,\n loopedSlides: 5, // looped slides should be the same\n navigation: {\n nextEl: \".ms_boat-thumbnail-swiper-button-next\",\n prevEl: \".ms_boat-thumbnail-swiper-button-prev\",\n },\n watchSlidesVisibility: true,\n watchSlidesProgress: true,\n });\n var galleryTop = new Swiper(\".ms_boat-gallery-top\", {\n spaceBetween: 10,\n loop: true,\n loopedSlides: 5, // looped slides should be the same\n navigation: {\n nextEl: \".ms_boat-swiper-button-next\",\n prevEl: \".ms_boat-swiper-button-prev\",\n },\n thumbs: {\n swiper: galleryThumbs,\n },\n });\n var lastMinuteBoatSlider = new Swiper(\".last-minute-boat-slider\", {\n loop: true,\n loopedSlides: 0,\n slidesPerView: 1,\n spaceBetween: 0,\n autoplay: { delay: 5000 },\n effect: 'fade',\n fadeEffect: {\n crossFade: true\n },\n navigation: {\n 'nextEl': '.swiper-button-next',\n 'prevEl': '.swiper-button-prev',\n },\n });\n\n\n /**\n * Register click events for all calendar links\n */\n function registerCalendarLinks() {\n registerScrollOnClick(\"addlink\", \"addperiodes\", registerBoekenLinks);\n }\n registerCalendarLinks();\n\n /**\n *\n *\n * register click events in boeken links\n */\n function registerBoekenLinks() {\n registerScrollOnClick(\"xaddlink\", \"rental\", registerCustomerInfo);\n }\n\n /**\n * register click events in customer info\n */\n function registerCustomerInfo() {\n registerScrollOnClick(\"button_verder\", \"rental\");\n }\n\n /**\n * Register a click event that will scroll to a given element\n * @param string from_class which classes can be clicked\n * @param string to_id where to scroll to\n * @param function|null on_finish optional what to do on finish besides scrolling\n */\n function registerScrollOnClick(from_class, to_id, on_finish = null) {\n const elements = document.getElementsByClassName(from_class);\n // if not empty\n if (elements.length > 0) {\n Array.from(elements).forEach((element) => {\n element.addEventListener(\"click\", () => {\n scrollToSmooth(to_id);\n if (on_finish) {\n on_finish();\n }\n });\n });\n } else {\n window.setTimeout(() => {\n registerScrollOnClick(from_class, to_id, on_finish);\n }, 100);\n }\n }\n\n /**\n * Scroll to id, smoothly\n * @param string id\n */\n function scrollToSmooth(id) {\n const element = document.getElementById(id);\n if (element) {\n // how far extra it has to scroll up:\n const offset = 80;\n const body_pos = document.body.getBoundingClientRect().top;\n const element_pos = element.getBoundingClientRect().top;\n\n window.scrollTo({\n top: element_pos - body_pos - offset,\n behavior: \"smooth\",\n });\n } else {\n window.setTimeout(() => {\n scrollToSmooth(id);\n }, 100);\n }\n }\n\n if (document.getElementById(\"boeken_wrapper\")) {\n $(\"#boeken_wrapper .stappen ul li\").wrapInner(\"\");\n\n document\n .getElementById(\"boeken_wrapper\")\n .addEventListener(\"DOMSubtreeModified\", LocalMain, false);\n function LocalMain() {\n document\n .getElementById(\"boeken_wrapper\")\n .removeEventListener(\"DOMSubtreeModified\", LocalMain);\n\n if ($(\"#boeken_wrapper .stappen ul li\").children(\"span\").length === 0) {\n $(\"#boeken_wrapper .stappen ul li\").wrapInner(\"\");\n }\n\n document\n .getElementById(\"boeken_wrapper\")\n .addEventListener(\"DOMSubtreeModified\", LocalMain, false);\n }\n }\n});\n","import createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nimport $ from '../../shared/dom.js';\nexport default function Navigation({\n swiper,\n extendParams,\n on,\n emit\n}) {\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n navigationDisabledClass: 'swiper-navigation-disabled'\n }\n });\n swiper.navigation = {\n nextEl: null,\n $nextEl: null,\n prevEl: null,\n $prevEl: null\n };\n\n function getEl(el) {\n let $el;\n\n if (el) {\n $el = $(el);\n\n if (swiper.params.uniqueNavElements && typeof el === 'string' && $el.length > 1 && swiper.$el.find(el).length === 1) {\n $el = swiper.$el.find(el);\n }\n }\n\n return $el;\n }\n\n function toggleEl($el, disabled) {\n const params = swiper.params.navigation;\n\n if ($el && $el.length > 0) {\n $el[disabled ? 'addClass' : 'removeClass'](params.disabledClass);\n if ($el[0] && $el[0].tagName === 'BUTTON') $el[0].disabled = disabled;\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n }\n\n function update() {\n // Update Navigation Buttons\n if (swiper.params.loop) return;\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n toggleEl($prevEl, swiper.isBeginning && !swiper.params.rewind);\n toggleEl($nextEl, swiper.isEnd && !swiper.params.rewind);\n }\n\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slidePrev();\n emit('navigationPrev');\n }\n\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slideNext();\n emit('navigationNext');\n }\n\n function init() {\n const params = swiper.params.navigation;\n swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev'\n });\n if (!(params.nextEl || params.prevEl)) return;\n const $nextEl = getEl(params.nextEl);\n const $prevEl = getEl(params.prevEl);\n\n if ($nextEl && $nextEl.length > 0) {\n $nextEl.on('click', onNextClick);\n }\n\n if ($prevEl && $prevEl.length > 0) {\n $prevEl.on('click', onPrevClick);\n }\n\n Object.assign(swiper.navigation, {\n $nextEl,\n nextEl: $nextEl && $nextEl[0],\n $prevEl,\n prevEl: $prevEl && $prevEl[0]\n });\n\n if (!swiper.enabled) {\n if ($nextEl) $nextEl.addClass(params.lockClass);\n if ($prevEl) $prevEl.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl && $nextEl.length) {\n $nextEl.off('click', onNextClick);\n $nextEl.removeClass(swiper.params.navigation.disabledClass);\n }\n\n if ($prevEl && $prevEl.length) {\n $prevEl.off('click', onPrevClick);\n $prevEl.removeClass(swiper.params.navigation.disabledClass);\n }\n }\n\n on('init', () => {\n if (swiper.params.navigation.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n update();\n }\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl) {\n $nextEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n\n if ($prevEl) {\n $prevEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n });\n on('click', (_s, e) => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n const targetEl = e.target;\n\n if (swiper.params.navigation.hideOnClick && !$(targetEl).is($prevEl) && !$(targetEl).is($nextEl)) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n let isHidden;\n\n if ($nextEl) {\n isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n } else if ($prevEl) {\n isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n }\n\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n\n if ($nextEl) {\n $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n\n if ($prevEl) {\n $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n }\n });\n\n const enable = () => {\n swiper.$el.removeClass(swiper.params.navigation.navigationDisabledClass);\n init();\n update();\n };\n\n const disable = () => {\n swiper.$el.addClass(swiper.params.navigation.navigationDisabledClass);\n destroy();\n };\n\n Object.assign(swiper.navigation, {\n enable,\n disable,\n update,\n init,\n destroy\n });\n}","import $ from '../../shared/dom.js';\nimport classesToSelector from '../../shared/classes-to-selector.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nexport default function Pagination({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`,\n paginationDisabledClass: `${pfx}-disabled`\n }\n });\n swiper.pagination = {\n el: null,\n $el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0;\n }\n\n function setSideBullets($bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n $bulletEl[position]().addClass(`${bulletActiveClass}-${position}`)[position]().addClass(`${bulletActiveClass}-${position}-${position}`);\n }\n\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el; // Current/Total\n\n let current;\n const total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n if (swiper.params.loop) {\n current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n\n if (current > slidesLength - 1 - swiper.loopedSlides * 2) {\n current -= slidesLength - swiper.loopedSlides * 2;\n }\n\n if (current > total - 1) current -= total;\n if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n } else {\n current = swiper.activeIndex || 0;\n } // Types\n\n\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n\n if (params.dynamicBullets) {\n bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n $el.css(swiper.isHorizontal() ? 'width' : 'height', `${bulletSize * (params.dynamicMainBullets + 4)}px`);\n\n if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n dynamicBulletIndex += current - (swiper.previousIndex - swiper.loopedSlides || 0);\n\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n\n firstIndex = Math.max(current - dynamicBulletIndex, 0);\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n\n bullets.removeClass(['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`).join(' '));\n\n if ($el.length > 1) {\n bullets.each(bullet => {\n const $bullet = $(bullet);\n const bulletIndex = $bullet.index();\n\n if (bulletIndex === current) {\n $bullet.addClass(params.bulletActiveClass);\n }\n\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n $bullet.addClass(`${params.bulletActiveClass}-main`);\n }\n\n if (bulletIndex === firstIndex) {\n setSideBullets($bullet, 'prev');\n }\n\n if (bulletIndex === lastIndex) {\n setSideBullets($bullet, 'next');\n }\n }\n });\n } else {\n const $bullet = bullets.eq(current);\n const bulletIndex = $bullet.index();\n $bullet.addClass(params.bulletActiveClass);\n\n if (params.dynamicBullets) {\n const $firstDisplayedBullet = bullets.eq(firstIndex);\n const $lastDisplayedBullet = bullets.eq(lastIndex);\n\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);\n }\n\n if (swiper.params.loop) {\n if (bulletIndex >= bullets.length) {\n for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {\n bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);\n }\n\n bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`);\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n }\n }\n\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);\n }\n }\n\n if (params.type === 'fraction') {\n $el.find(classesToSelector(params.currentClass)).text(params.formatFractionCurrent(current + 1));\n $el.find(classesToSelector(params.totalClass)).text(params.formatFractionTotal(total));\n }\n\n if (params.type === 'progressbar') {\n let progressbarDirection;\n\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n\n $el.find(classesToSelector(params.progressbarFillClass)).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);\n }\n\n if (params.type === 'custom' && params.renderCustom) {\n $el.html(params.renderCustom(swiper, current + 1, total));\n emit('paginationRender', $el[0]);\n } else {\n emit('paginationUpdate', $el[0]);\n }\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el;\n let paginationHTML = '';\n\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.loop && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n paginationHTML += `<${params.bulletElement} class=\"${params.bulletClass}\">`;\n }\n }\n\n $el.html(paginationHTML);\n swiper.pagination.bullets = $el.find(classesToSelector(params.bulletClass));\n }\n\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = `` + ' / ' + ``;\n }\n\n $el.html(paginationHTML);\n }\n\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = ``;\n }\n\n $el.html(paginationHTML);\n }\n\n if (params.type !== 'custom') {\n emit('paginationRender', swiper.pagination.$el[0]);\n }\n }\n\n function init() {\n swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n el: 'swiper-pagination'\n });\n const params = swiper.params.pagination;\n if (!params.el) return;\n let $el = $(params.el);\n if ($el.length === 0) return;\n\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) {\n $el = swiper.$el.find(params.el); // check if it belongs to another nested Swiper\n\n if ($el.length > 1) {\n $el = $el.filter(el => {\n if ($(el).parents('.swiper')[0] !== swiper.el) return false;\n return true;\n });\n }\n }\n\n if (params.type === 'bullets' && params.clickable) {\n $el.addClass(params.clickableClass);\n }\n\n $el.addClass(params.modifierClass + params.type);\n $el.addClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n\n if (params.type === 'bullets' && params.dynamicBullets) {\n $el.addClass(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n $el.addClass(params.progressbarOppositeClass);\n }\n\n if (params.clickable) {\n $el.on('click', classesToSelector(params.bulletClass), function onClick(e) {\n e.preventDefault();\n let index = $(this).index() * swiper.params.slidesPerGroup;\n if (swiper.params.loop) index += swiper.loopedSlides;\n swiper.slideTo(index);\n });\n }\n\n Object.assign(swiper.pagination, {\n $el,\n el: $el[0]\n });\n\n if (!swiper.enabled) {\n $el.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const $el = swiper.pagination.$el;\n $el.removeClass(params.hiddenClass);\n $el.removeClass(params.modifierClass + params.type);\n $el.removeClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (swiper.pagination.bullets && swiper.pagination.bullets.removeClass) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n\n if (params.clickable) {\n $el.off('click', classesToSelector(params.bulletClass));\n }\n }\n\n on('init', () => {\n if (swiper.params.pagination.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n render();\n update();\n }\n });\n on('activeIndexChange', () => {\n if (swiper.params.loop) {\n update();\n } else if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n if (!swiper.params.loop) {\n update();\n }\n });\n on('slidesLengthChange', () => {\n if (swiper.params.loop) {\n render();\n update();\n }\n });\n on('snapGridLengthChange', () => {\n if (!swiper.params.loop) {\n render();\n update();\n }\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const {\n $el\n } = swiper.pagination;\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.pagination.lockClass);\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n const {\n $el\n } = swiper.pagination;\n\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && $el && $el.length > 0 && !$(targetEl).hasClass(swiper.params.pagination.bulletClass)) {\n if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n const isHidden = $el.hasClass(swiper.params.pagination.hiddenClass);\n\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n\n $el.toggleClass(swiper.params.pagination.hiddenClass);\n }\n });\n\n const enable = () => {\n swiper.$el.removeClass(swiper.params.pagination.paginationDisabledClass);\n\n if (swiper.pagination.$el) {\n swiper.pagination.$el.removeClass(swiper.params.pagination.paginationDisabledClass);\n }\n\n init();\n render();\n update();\n };\n\n const disable = () => {\n swiper.$el.addClass(swiper.params.pagination.paginationDisabledClass);\n\n if (swiper.pagination.$el) {\n swiper.pagination.$el.addClass(swiper.params.pagination.paginationDisabledClass);\n }\n\n destroy();\n };\n\n Object.assign(swiper.pagination, {\n enable,\n disable,\n render,\n update,\n init,\n destroy\n });\n}","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { nextTick } from '../../shared/utils.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nexport default function Scrollbar({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const document = getDocument();\n let isTouched = false;\n let timeout = null;\n let dragTimeout = null;\n let dragStartPos;\n let dragSize;\n let trackSize;\n let divider;\n extendParams({\n scrollbar: {\n el: null,\n dragSize: 'auto',\n hide: false,\n draggable: false,\n snapOnRelease: true,\n lockClass: 'swiper-scrollbar-lock',\n dragClass: 'swiper-scrollbar-drag',\n scrollbarDisabledClass: 'swiper-scrollbar-disabled',\n horizontalClass: `swiper-scrollbar-horizontal`,\n verticalClass: `swiper-scrollbar-vertical`\n }\n });\n swiper.scrollbar = {\n el: null,\n dragEl: null,\n $el: null,\n $dragEl: null\n };\n\n function setTranslate() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar,\n rtlTranslate: rtl,\n progress\n } = swiper;\n const {\n $dragEl,\n $el\n } = scrollbar;\n const params = swiper.params.scrollbar;\n let newSize = dragSize;\n let newPos = (trackSize - dragSize) * progress;\n\n if (rtl) {\n newPos = -newPos;\n\n if (newPos > 0) {\n newSize = dragSize - newPos;\n newPos = 0;\n } else if (-newPos + dragSize > trackSize) {\n newSize = trackSize + newPos;\n }\n } else if (newPos < 0) {\n newSize = dragSize + newPos;\n newPos = 0;\n } else if (newPos + dragSize > trackSize) {\n newSize = trackSize - newPos;\n }\n\n if (swiper.isHorizontal()) {\n $dragEl.transform(`translate3d(${newPos}px, 0, 0)`);\n $dragEl[0].style.width = `${newSize}px`;\n } else {\n $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`);\n $dragEl[0].style.height = `${newSize}px`;\n }\n\n if (params.hide) {\n clearTimeout(timeout);\n $el[0].style.opacity = 1;\n timeout = setTimeout(() => {\n $el[0].style.opacity = 0;\n $el.transition(400);\n }, 1000);\n }\n }\n\n function setTransition(duration) {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.$dragEl.transition(duration);\n }\n\n function updateSize() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar\n } = swiper;\n const {\n $dragEl,\n $el\n } = scrollbar;\n $dragEl[0].style.width = '';\n $dragEl[0].style.height = '';\n trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\n\n if (swiper.params.scrollbar.dragSize === 'auto') {\n dragSize = trackSize * divider;\n } else {\n dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n }\n\n if (swiper.isHorizontal()) {\n $dragEl[0].style.width = `${dragSize}px`;\n } else {\n $dragEl[0].style.height = `${dragSize}px`;\n }\n\n if (divider >= 1) {\n $el[0].style.display = 'none';\n } else {\n $el[0].style.display = '';\n }\n\n if (swiper.params.scrollbar.hide) {\n $el[0].style.opacity = 0;\n }\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n scrollbar.$el[swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);\n }\n }\n\n function getPointerPosition(e) {\n if (swiper.isHorizontal()) {\n return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientX : e.clientX;\n }\n\n return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientY : e.clientY;\n }\n\n function setDragPosition(e) {\n const {\n scrollbar,\n rtlTranslate: rtl\n } = swiper;\n const {\n $el\n } = scrollbar;\n let positionRatio;\n positionRatio = (getPointerPosition(e) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\n\n const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n function onDragStart(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el,\n $dragEl\n } = scrollbar;\n isTouched = true;\n dragStartPos = e.target === $dragEl[0] || e.target === $dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n e.preventDefault();\n e.stopPropagation();\n $wrapperEl.transition(100);\n $dragEl.transition(100);\n setDragPosition(e);\n clearTimeout(dragTimeout);\n $el.transition(0);\n\n if (params.hide) {\n $el.css('opacity', 1);\n }\n\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', 'none');\n }\n\n emit('scrollbarDragStart', e);\n }\n\n function onDragMove(e) {\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el,\n $dragEl\n } = scrollbar;\n if (!isTouched) return;\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n setDragPosition(e);\n $wrapperEl.transition(0);\n $el.transition(0);\n $dragEl.transition(0);\n emit('scrollbarDragMove', e);\n }\n\n function onDragEnd(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n $wrapperEl\n } = swiper;\n const {\n $el\n } = scrollbar;\n if (!isTouched) return;\n isTouched = false;\n\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', '');\n $wrapperEl.transition('');\n }\n\n if (params.hide) {\n clearTimeout(dragTimeout);\n dragTimeout = nextTick(() => {\n $el.css('opacity', 0);\n $el.transition(400);\n }, 1000);\n }\n\n emit('scrollbarDragEnd', e);\n\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n }\n\n function events(method) {\n const {\n scrollbar,\n touchEventsTouch,\n touchEventsDesktop,\n params,\n support\n } = swiper;\n const $el = scrollbar.$el;\n if (!$el) return;\n const target = $el[0];\n const activeListener = support.passiveListener && params.passiveListeners ? {\n passive: false,\n capture: false\n } : false;\n const passiveListener = support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n if (!target) return;\n const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n\n if (!support.touch) {\n target[eventMethod](touchEventsDesktop.start, onDragStart, activeListener);\n document[eventMethod](touchEventsDesktop.move, onDragMove, activeListener);\n document[eventMethod](touchEventsDesktop.end, onDragEnd, passiveListener);\n } else {\n target[eventMethod](touchEventsTouch.start, onDragStart, activeListener);\n target[eventMethod](touchEventsTouch.move, onDragMove, activeListener);\n target[eventMethod](touchEventsTouch.end, onDragEnd, passiveListener);\n }\n }\n\n function enableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('on');\n }\n\n function disableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('off');\n }\n\n function init() {\n const {\n scrollbar,\n $el: $swiperEl\n } = swiper;\n swiper.params.scrollbar = createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, {\n el: 'swiper-scrollbar'\n });\n const params = swiper.params.scrollbar;\n if (!params.el) return;\n let $el = $(params.el);\n\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {\n $el = $swiperEl.find(params.el);\n }\n\n $el.addClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`);\n\n if ($dragEl.length === 0) {\n $dragEl = $(`
      `);\n $el.append($dragEl);\n }\n\n Object.assign(scrollbar, {\n $el,\n el: $el[0],\n $dragEl,\n dragEl: $dragEl[0]\n });\n\n if (params.draggable) {\n enableDraggable();\n }\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n }\n }\n\n function destroy() {\n const params = swiper.params.scrollbar;\n const $el = swiper.scrollbar.$el;\n\n if ($el) {\n $el.removeClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n }\n\n disableDraggable();\n }\n\n on('init', () => {\n if (swiper.params.scrollbar.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n updateSize();\n setTranslate();\n }\n });\n on('update resize observerUpdate lock unlock', () => {\n updateSize();\n });\n on('setTranslate', () => {\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n setTransition(duration);\n });\n on('enable disable', () => {\n const {\n $el\n } = swiper.scrollbar;\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n }\n });\n on('destroy', () => {\n destroy();\n });\n\n const enable = () => {\n swiper.$el.removeClass(swiper.params.scrollbar.scrollbarDisabledClass);\n\n if (swiper.scrollbar.$el) {\n swiper.scrollbar.$el.removeClass(swiper.params.scrollbar.scrollbarDisabledClass);\n }\n\n init();\n updateSize();\n setTranslate();\n };\n\n const disable = () => {\n swiper.$el.addClass(swiper.params.scrollbar.scrollbarDisabledClass);\n\n if (swiper.scrollbar.$el) {\n swiper.scrollbar.$el.addClass(swiper.params.scrollbar.scrollbarDisabledClass);\n }\n\n destroy();\n };\n\n Object.assign(swiper.scrollbar, {\n enable,\n disable,\n updateSize,\n setTranslate,\n init,\n destroy\n });\n}","/* eslint no-underscore-dangle: \"off\" */\n\n/* eslint no-use-before-define: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport { nextTick } from '../../shared/utils.js';\nexport default function Autoplay({\n swiper,\n extendParams,\n on,\n emit\n}) {\n let timeout;\n swiper.autoplay = {\n running: false,\n paused: false\n };\n extendParams({\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: true,\n stopOnLastSlide: false,\n reverseDirection: false,\n pauseOnMouseEnter: false\n }\n });\n\n function run() {\n if (!swiper.size) {\n swiper.autoplay.running = false;\n swiper.autoplay.paused = false;\n return;\n }\n\n const $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n let delay = swiper.params.autoplay.delay;\n\n if ($activeSlideEl.attr('data-swiper-autoplay')) {\n delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n }\n\n clearTimeout(timeout);\n timeout = nextTick(() => {\n let autoplayResult;\n\n if (swiper.params.autoplay.reverseDirection) {\n if (swiper.params.loop) {\n swiper.loopFix();\n autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.isBeginning) {\n autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n autoplayResult = swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n emit('autoplay');\n } else {\n stop();\n }\n } else if (swiper.params.loop) {\n swiper.loopFix();\n autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.isEnd) {\n autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n autoplayResult = swiper.slideTo(0, swiper.params.speed, true, true);\n emit('autoplay');\n } else {\n stop();\n }\n\n if (swiper.params.cssMode && swiper.autoplay.running) run();else if (autoplayResult === false) {\n run();\n }\n }, delay);\n }\n\n function start() {\n if (typeof timeout !== 'undefined') return false;\n if (swiper.autoplay.running) return false;\n swiper.autoplay.running = true;\n emit('autoplayStart');\n run();\n return true;\n }\n\n function stop() {\n if (!swiper.autoplay.running) return false;\n if (typeof timeout === 'undefined') return false;\n\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n\n swiper.autoplay.running = false;\n emit('autoplayStop');\n return true;\n }\n\n function pause(speed) {\n if (!swiper.autoplay.running) return;\n if (swiper.autoplay.paused) return;\n if (timeout) clearTimeout(timeout);\n swiper.autoplay.paused = true;\n\n if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n swiper.autoplay.paused = false;\n run();\n } else {\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].addEventListener(event, onTransitionEnd);\n });\n }\n }\n\n function onVisibilityChange() {\n const document = getDocument();\n\n if (document.visibilityState === 'hidden' && swiper.autoplay.running) {\n pause();\n }\n\n if (document.visibilityState === 'visible' && swiper.autoplay.paused) {\n run();\n swiper.autoplay.paused = false;\n }\n }\n\n function onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;\n if (e.target !== swiper.$wrapperEl[0]) return;\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n });\n swiper.autoplay.paused = false;\n\n if (!swiper.autoplay.running) {\n stop();\n } else {\n run();\n }\n }\n\n function onMouseEnter() {\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n } else {\n emit('autoplayPause');\n pause();\n }\n\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n });\n }\n\n function onMouseLeave() {\n if (swiper.params.autoplay.disableOnInteraction) {\n return;\n }\n\n swiper.autoplay.paused = false;\n emit('autoplayResume');\n run();\n }\n\n function attachMouseEvents() {\n if (swiper.params.autoplay.pauseOnMouseEnter) {\n swiper.$el.on('mouseenter', onMouseEnter);\n swiper.$el.on('mouseleave', onMouseLeave);\n }\n }\n\n function detachMouseEvents() {\n swiper.$el.off('mouseenter', onMouseEnter);\n swiper.$el.off('mouseleave', onMouseLeave);\n }\n\n on('init', () => {\n if (swiper.params.autoplay.enabled) {\n start();\n const document = getDocument();\n document.addEventListener('visibilitychange', onVisibilityChange);\n attachMouseEvents();\n }\n });\n on('beforeTransitionStart', (_s, speed, internal) => {\n if (swiper.autoplay.running) {\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.pause(speed);\n } else {\n stop();\n }\n }\n });\n on('sliderFirstMove', () => {\n if (swiper.autoplay.running) {\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n } else {\n pause();\n }\n }\n });\n on('touchEnd', () => {\n if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {\n run();\n }\n });\n on('destroy', () => {\n detachMouseEvents();\n\n if (swiper.autoplay.running) {\n stop();\n }\n\n const document = getDocument();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n });\n Object.assign(swiper.autoplay, {\n pause,\n run,\n start,\n stop\n });\n}","import { isObject } from '../../shared/utils.js';\nimport $ from '../../shared/dom.js';\nexport default function Thumb({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n thumbs: {\n swiper: null,\n multipleActiveThumbs: true,\n autoScrollOffset: 0,\n slideThumbActiveClass: 'swiper-slide-thumb-active',\n thumbsContainerClass: 'swiper-thumbs'\n }\n });\n let initialized = false;\n let swiperCreated = false;\n swiper.thumbs = {\n swiper: null\n };\n\n function onThumbClick() {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const clickedIndex = thumbsSwiper.clickedIndex;\n const clickedSlide = thumbsSwiper.clickedSlide;\n if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;\n if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n let slideToIndex;\n\n if (thumbsSwiper.params.loop) {\n slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n } else {\n slideToIndex = clickedIndex;\n }\n\n if (swiper.params.loop) {\n let currentIndex = swiper.activeIndex;\n\n if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n currentIndex = swiper.activeIndex;\n }\n\n const prevIndex = swiper.slides.eq(currentIndex).prevAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n const nextIndex = swiper.slides.eq(currentIndex).nextAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;else slideToIndex = prevIndex;\n }\n\n swiper.slideTo(slideToIndex);\n }\n\n function init() {\n const {\n thumbs: thumbsParams\n } = swiper.params;\n if (initialized) return false;\n initialized = true;\n const SwiperClass = swiper.constructor;\n\n if (thumbsParams.swiper instanceof SwiperClass) {\n swiper.thumbs.swiper = thumbsParams.swiper;\n Object.assign(swiper.thumbs.swiper.originalParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n Object.assign(swiper.thumbs.swiper.params, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n } else if (isObject(thumbsParams.swiper)) {\n const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);\n Object.assign(thumbsSwiperParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);\n swiperCreated = true;\n }\n\n swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);\n swiper.thumbs.swiper.on('tap', onThumbClick);\n return true;\n }\n\n function update(initial) {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView; // Activate thumbs\n\n let thumbsToActivate = 1;\n const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n\n if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n thumbsToActivate = swiper.params.slidesPerView;\n }\n\n if (!swiper.params.thumbs.multipleActiveThumbs) {\n thumbsToActivate = 1;\n }\n\n thumbsToActivate = Math.floor(thumbsToActivate);\n thumbsSwiper.slides.removeClass(thumbActiveClass);\n\n if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.$wrapperEl.children(`[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).addClass(thumbActiveClass);\n }\n } else {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.slides.eq(swiper.realIndex + i).addClass(thumbActiveClass);\n }\n }\n\n const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n\n if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n let currentThumbsIndex = thumbsSwiper.activeIndex;\n let newThumbsIndex;\n let direction;\n\n if (thumbsSwiper.params.loop) {\n if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {\n thumbsSwiper.loopFix(); // eslint-disable-next-line\n\n thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;\n currentThumbsIndex = thumbsSwiper.activeIndex;\n } // Find actual thumbs index to slide to\n\n\n const prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0).index();\n const nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0).index();\n\n if (typeof prevThumbsIndex === 'undefined') {\n newThumbsIndex = nextThumbsIndex;\n } else if (typeof nextThumbsIndex === 'undefined') {\n newThumbsIndex = prevThumbsIndex;\n } else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) {\n newThumbsIndex = thumbsSwiper.params.slidesPerGroup > 1 ? nextThumbsIndex : currentThumbsIndex;\n } else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) {\n newThumbsIndex = nextThumbsIndex;\n } else {\n newThumbsIndex = prevThumbsIndex;\n }\n\n direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n } else {\n newThumbsIndex = swiper.realIndex;\n direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n }\n\n if (useOffset) {\n newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n }\n\n if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n if (thumbsSwiper.params.centeredSlides) {\n if (newThumbsIndex > currentThumbsIndex) {\n newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n } else {\n newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n }\n } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) {// newThumbsIndex = newThumbsIndex - slidesPerView + 1;\n }\n\n thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n }\n }\n }\n\n on('beforeInit', () => {\n const {\n thumbs\n } = swiper.params;\n if (!thumbs || !thumbs.swiper) return;\n init();\n update(true);\n });\n on('slideChange update resize observerUpdate', () => {\n update();\n });\n on('setTransition', (_s, duration) => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n thumbsSwiper.setTransition(duration);\n });\n on('beforeDestroy', () => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n\n if (swiperCreated) {\n thumbsSwiper.destroy();\n }\n });\n Object.assign(swiper.thumbs, {\n init,\n update\n });\n}","/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\nimport { nextTick } from '../../shared/utils.js';\nexport default function Controller({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n controller: {\n control: undefined,\n inverse: false,\n by: 'slide' // or 'container'\n\n }\n });\n swiper.controller = {\n control: undefined\n };\n\n function LinearSpline(x, y) {\n const binarySearch = function search() {\n let maxIndex;\n let minIndex;\n let guess;\n return (array, val) => {\n minIndex = -1;\n maxIndex = array.length;\n\n while (maxIndex - minIndex > 1) {\n guess = maxIndex + minIndex >> 1;\n\n if (array[guess] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n }\n\n return maxIndex;\n };\n }();\n\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1; // Given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n\n let i1;\n let i3;\n\n this.interpolate = function interpolate(x2) {\n if (!x2) return 0; // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1; // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n\n return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];\n };\n\n return this;\n } // xxx: for now i will just save one spline function to to\n\n\n function getInterpolateFunction(c) {\n if (!swiper.controller.spline) {\n swiper.controller.spline = swiper.params.loop ? new LinearSpline(swiper.slidesGrid, c.slidesGrid) : new LinearSpline(swiper.snapGrid, c.snapGrid);\n }\n }\n\n function setTranslate(_t, byController) {\n const controlled = swiper.controller.control;\n let multiplier;\n let controlledTranslate;\n const Swiper = swiper.constructor;\n\n function setControlledTranslate(c) {\n // this will create an Interpolate function based on the snapGrids\n // x is the Grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n\n if (swiper.params.controller.by === 'slide') {\n getInterpolateFunction(c); // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n // but it did not work out\n\n controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n }\n\n if (!controlledTranslate || swiper.params.controller.by === 'container') {\n multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();\n }\n\n if (swiper.params.controller.inverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n\n c.updateProgress(controlledTranslate);\n c.setTranslate(controlledTranslate, swiper);\n c.updateActiveIndex();\n c.updateSlidesClasses();\n }\n\n if (Array.isArray(controlled)) {\n for (let i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTranslate(controlled);\n }\n }\n\n function setTransition(duration, byController) {\n const Swiper = swiper.constructor;\n const controlled = swiper.controller.control;\n let i;\n\n function setControlledTransition(c) {\n c.setTransition(duration, swiper);\n\n if (duration !== 0) {\n c.transitionStart();\n\n if (c.params.autoHeight) {\n nextTick(() => {\n c.updateAutoHeight();\n });\n }\n\n c.$wrapperEl.transitionEnd(() => {\n if (!controlled) return;\n\n if (c.params.loop && swiper.params.controller.by === 'slide') {\n c.loopFix();\n }\n\n c.transitionEnd();\n });\n }\n }\n\n if (Array.isArray(controlled)) {\n for (i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n }\n\n function removeSpline() {\n if (!swiper.controller.control) return;\n\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n }\n\n on('beforeInit', () => {\n swiper.controller.control = swiper.params.controller.control;\n });\n on('update', () => {\n removeSpline();\n });\n on('resize', () => {\n removeSpline();\n });\n on('observerUpdate', () => {\n removeSpline();\n });\n on('setTranslate', (_s, translate, byController) => {\n if (!swiper.controller.control) return;\n swiper.controller.setTranslate(translate, byController);\n });\n on('setTransition', (_s, duration, byController) => {\n if (!swiper.controller.control) return;\n swiper.controller.setTransition(duration, byController);\n });\n Object.assign(swiper.controller, {\n setTranslate,\n setTransition\n });\n}","import createShadow from '../../shared/create-shadow.js';\nimport effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nexport default function EffectCoverflow({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n coverflowEffect: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n scale: 1,\n modifier: 1,\n slideShadows: true,\n transformEl: null\n }\n });\n\n const setTranslate = () => {\n const {\n width: swiperWidth,\n height: swiperHeight,\n slides,\n slidesSizesGrid\n } = swiper;\n const params = swiper.params.coverflowEffect;\n const isHorizontal = swiper.isHorizontal();\n const transform = swiper.translate;\n const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;\n const rotate = isHorizontal ? params.rotate : -params.rotate;\n const translate = params.depth; // Each slide offset from center\n\n for (let i = 0, length = slides.length; i < length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideSize = slidesSizesGrid[i];\n const slideOffset = $slideEl[0].swiperSlideOffset;\n const centerOffset = (center - slideOffset - slideSize / 2) / slideSize;\n const offsetMultiplier = typeof params.modifier === 'function' ? params.modifier(centerOffset) : centerOffset * params.modifier;\n let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier; // var rotateZ = 0\n\n let translateZ = -translate * Math.abs(offsetMultiplier);\n let stretch = params.stretch; // Allow percentage to make a relative stretch for responsive sliders\n\n if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\n stretch = parseFloat(params.stretch) / 100 * slideSize;\n }\n\n let translateY = isHorizontal ? 0 : stretch * offsetMultiplier;\n let translateX = isHorizontal ? stretch * offsetMultiplier : 0;\n let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier); // Fix for ultra small values\n\n if (Math.abs(translateX) < 0.001) translateX = 0;\n if (Math.abs(translateY) < 0.001) translateY = 0;\n if (Math.abs(translateZ) < 0.001) translateZ = 0;\n if (Math.abs(rotateY) < 0.001) rotateY = 0;\n if (Math.abs(rotateX) < 0.001) rotateX = 0;\n if (Math.abs(scale) < 0.001) scale = 0;\n const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`;\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(slideTransform);\n $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n\n if (params.slideShadows) {\n // Set shadows\n let $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n let $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n if ($shadowBeforeEl.length === 0) {\n $shadowBeforeEl = createShadow(params, $slideEl, isHorizontal ? 'left' : 'top');\n }\n\n if ($shadowAfterEl.length === 0) {\n $shadowAfterEl = createShadow(params, $slideEl, isHorizontal ? 'right' : 'bottom');\n }\n\n if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;\n }\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.coverflowEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n };\n\n effectInit({\n effect: 'coverflow',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n watchSlidesProgress: true\n })\n });\n}","export default function effectInit(params) {\n const {\n effect,\n swiper,\n on,\n setTranslate,\n setTransition,\n overwriteParams,\n perspective,\n recreateShadows,\n getEffectParams\n } = params;\n on('beforeInit', () => {\n if (swiper.params.effect !== effect) return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);\n\n if (perspective && perspective()) {\n swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n }\n\n const overwriteParamsResult = overwriteParams ? overwriteParams() : {};\n Object.assign(swiper.params, overwriteParamsResult);\n Object.assign(swiper.originalParams, overwriteParamsResult);\n });\n on('setTranslate', () => {\n if (swiper.params.effect !== effect) return;\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n if (swiper.params.effect !== effect) return;\n setTransition(duration);\n });\n on('transitionEnd', () => {\n if (swiper.params.effect !== effect) return;\n\n if (recreateShadows) {\n if (!getEffectParams || !getEffectParams().slideShadows) return; // remove shadows\n\n swiper.slides.each(slideEl => {\n const $slideEl = swiper.$(slideEl);\n $slideEl.find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').remove();\n }); // create new one\n\n recreateShadows();\n }\n });\n let requireUpdateOnVirtual;\n on('virtualUpdate', () => {\n if (swiper.params.effect !== effect) return;\n\n if (!swiper.slides.length) {\n requireUpdateOnVirtual = true;\n }\n\n requestAnimationFrame(() => {\n if (requireUpdateOnVirtual && swiper.slides && swiper.slides.length) {\n setTranslate();\n requireUpdateOnVirtual = false;\n }\n });\n });\n}","import $ from \"/srv/www/f/friesland-boating.nl/vhosts/www/htdocs/wp-content/plugins/wp-soup-framework/node_modules/jquery\";\nimport Isotope from \"/srv/www/f/friesland-boating.nl/vhosts/www/htdocs/wp-content/plugins/wp-soup-framework/node_modules/isotope-layout\";\n\n$(document).ready(() => {\n const $container = $(\".ms_boat-filter .boats\");\n const filters = {};\n let totalAmountOfPersons = 2;\n let comboFilter;\n let i = 0;\n\n if ($container.length) {\n new Isotope('.ms_boat-filter .boats', {\n itemSelector: \".filter-boat-card\",\n filter: multipleFilter\n });\n\n // Create filters when checkboxes change.\n $(\".ms_boat-filter [data-slider]\").on(\"moved.zf.slider\", () => {\n // Change the comparator for the range slider.\n totalAmountOfPersons = +$(\"#selectedValue\").val();\n // Increase value so we can check if the user has checked a checkbox.\n i++;\n new Isotope('.ms_boat-filter .boats', {\n filter: multipleFilter\n });\n });\n\n // Create filters when checkboxes change.\n const $checkboxes = $(\".filter .checkboxes input\");\n $checkboxes.on(\"change\", ({ target }) => {\n // Increase value so we can check if the user has moved the range slider.\n i++;\n const $checkbox = $(target);\n manageCheckbox($checkbox);\n comboFilter = getComboFilter(filters);\n new Isotope('.ms_boat-filter .boats', {\n filter: multipleFilter\n });\n });\n\n function multipleFilter() {\n const item = $(this);\n // Check if selected range value is between min and max of an item.\n function checkValue() {\n const min = item.attr(\"data-min-persons\");\n const max = item.attr(\"data-max-persons\");\n const isInPersonsRange =\n totalAmountOfPersons >= min && totalAmountOfPersons <= max;\n return isInPersonsRange;\n }\n\n // Show all items when totalAmountOfPersons is 2.\n if (totalAmountOfPersons === 2) {\n console.log(totalAmountOfPersons, comboFilter || \"*\");\n return item.is(comboFilter || \"*\");\n }\n\n console.log('normal ', checkValue(), item.is(comboFilter || \"*\"));\n\n // Show or do not show item based on conditions.\n return checkValue() && item.is(comboFilter || \"*\");\n }\n\n function getComboFilter(filters) {\n let combo = [];\n for (const prop in filters) {\n const group = filters[prop];\n if (!group.length) {\n // No filters in the group, so continue.\n continue;\n }\n // Add first group.\n if (!combo.length) {\n combo = group.slice(0);\n continue;\n }\n // Add additional groups.\n const nextCombo = [];\n // Split group into combo: [ A, B ] & [ 1, 2 ] => [ A1, A2, B1, B2 ]\n for (let i = 0; i < combo.length; i++) {\n for (let j = 0; j < group.length; j++) {\n const item = combo[i] + group[j];\n nextCombo.push(item);\n }\n }\n combo = nextCombo;\n }\n const comboFilter = combo.join(\", \");\n return comboFilter;\n }\n\n function manageCheckbox($checkbox) {\n const checkbox = $checkbox[0];\n const group = $checkbox.parents(\".options\").attr(\"data-group\");\n // Create array for filter group, if not there yet.\n let filterGroup = filters[group];\n if (!filterGroup) {\n filterGroup = filters[group] = [];\n }\n\n const index = $.inArray(checkbox.value, filterGroup);\n if (checkbox.checked) {\n // Check if index is not yet in group.\n if (index === -1) {\n // Add filter to group.\n filters[group].push(checkbox.value);\n }\n } else {\n // Remove filter from group.\n filters[group].splice(index, 1);\n }\n }\n }\n});\n"],"names":["wpSoupGetBlocksOnPage","blocks","wp","data","select","getBlocks","forEach","block","wpSoupGetBlocksFromBlock","hasOwnProperty","innerBlocks","inner_block","undefined","hooks","addFilter","props","blockType","attributes","notDefined","className","name","Object","assign","domReady","wp_soup_deprecated_blocks","available_blocks","getBlockTypes","blocks_in_page","deprecated_block","find","result","category","unregisterBlockType","document","addEventListener","i","_step","querySelectorAll","c","window","$clamp","clamp","_iterator","passive","changeOption","selector","label","field","querySelector","option","innerHTML","disabled","translationNotice","e","cname","cvalue","exdays","d","Date","setTime","getTime","expires","toUTCString","cookie","setCookie","documentMode","Foundation","MediaQuery","current","column","flexBasis","style","isMargin","parentElement","classList","contains","setAttribute","setProperty","_step2","_iterator2","setScrollbarSize","scrollbox","createElement","overflow","body","appendChild","scrollBarWidth","offsetWidth","clientWidth","removeChild","scrollHeight","innerHeight","add","remove","epve","getEditorWidth","width","backTop","getElementsByClassName","checkBackToTop","windowTop","scrollElement","scrollTop","documentElement","dataElement","scrollY","scrollOffset","scrolling","scrollTo","final","duration","cb","scrollEl","element","start","currentTime","requestAnimationFrame","animateScroll","timestamp","progress","val","Math","easeInOutQuad","getAttribute","scrollDuration","parseInt","event","preventDefault","getElementById","replace","getElementsByTagName","focus","activeElement","setTimeout","t","b","options","truncationHTMLContainer","win","opt","useNativeClamp","splitOnChars","animate","truncationChar","truncationHTML","sty","originalText","supportsNativeClamp","webkitLineClamp","clampValue","isCSSValue","indexOf","computeStyle","elem","prop","getComputedStyle","el","pseudo","this","getPropertyValue","re","test","arguments","toUpperCase","currentStyle","getMaxLines","height","availHeight","clientHeight","lineHeight","getLineHeight","max","floor","lh","chunks","lastChunk","clampedText","clmp","slice","splitChar","getLastChild","lastChild","children","length","Array","prototype","call","pop","nodeValue","parentNode","applyEllipsis","str","textOverflow","webkitBoxOrient","display","truncate","target","maxHeight","shift","split","join","original","clamped","navigator","platform","maxTouchPoints","MSStream","containers","_toConsumableArray","container","$","Parallax","self","_typeof","refresh","render","extend","$element","imageSrc","is","attr","positions","position","toLowerCase","match","push","positionX","positionY","isNaN","userAgent","iosFix","css","backgroundImage","backgroundSize","backgroundPosition","androidFix","$mirror","prependTo","mirrorContainer","slider","sliderExisted","$slider","addClass","visibility","zIndex","top","left","one","naturalHeight","naturalWidth","aspectRatio","isSetup","setup","sliders","isFresh","requestRender","src","complete","trigger","lastTime","vendors","x","cancelAnimationFrame","callback","currTime","timeToCall","id","clearTimeout","speed","bleed","overScrollFix","boxWidth","outerWidth","boxHeight","outerHeight","boxOffsetTop","offset","boxOffsetLeft","boxOffsetBottom","margin","winHeight","docHeight","maxOffset","min","minOffset","imageHeightMin","imageOffsetMin","imageWidth","imageHeight","offsetBaseTop","offsetLeft","scrollLeft","overScroll","scrollBottom","mirrorTop","mirrorLeft","offsetTop","transform","maxWidth","winWidth","docWidth","isReady","isBusy","$doc","$win","loadDimensions","loadScrollPosition","winScrollTop","scrollTopMax","scrollLeftMax","on","lastPosition","frameLoop","pageYOffset","configure","each","destroy","parallaxElement","splice","off","old","fn","parallax","$this","Constructor","noConflict","menu","previews","link","dataset","_link$dataset","_step3","preview","_preview$dataset","content","_iterator3","_loop2","_loop","priceToggle","priceContent","extraPriceContent","toggle","reInit","priceBlocks","title","textContent","buttonWC","buttonWCHref","href","button","buttonHref","extraOptions","selectedOptionsID","selectedOptions","_step4","entries","index","optionName","trim","optionID","firstPriceNode","secondPriceNode","optionPrice","parseFloat","price","optionPrice2","secondPrice","firstPrice","newFirstPriceHTML","checked","toFixed","secondPriceHTML","filter","value","params","URLSearchParams","newParams","key","append","toString","optionsString","_iterator4","msInitializeReviewSlider","sliderOptions","JSON","parse","Swiper","acf","addAction","$el","factory","matchesMethod","ElemProto","Element","matches","matchesSelector","prefixes","method","EvEmitter","proto","eventName","listener","events","_events","listeners","once","onceEvents","_onceEvents","emitEvent","args","onceListeners","apply","allOff","utils","a","num","div","arraySlice","makeArray","obj","isArray","removeFrom","ary","getParent","getQueryElement","handleEvent","type","filterFindElements","elems","ffElems","HTMLElement","childElems","debounceMethod","_class","methodName","threshold","timeoutName","timeout","_this","docReady","readyState","toDashed","$1","$2","console","htmlInit","WidgetClass","namespace","dashedNamespace","dataAttr","dataAttrElems","jsDashElems","concat","dataOptionsAttr","jQuery","error","instance","module","exports","FormData","getStyleSize","noop","logError","message","measurements","measurementsLength","getZeroSize","size","innerWidth","getStyle","isBoxSizeOuter","padding","borderStyle","borderWidth","boxSizing","round","getSize","nodeType","offsetHeight","isBorderBox","measurement","paddingWidth","paddingLeft","paddingRight","paddingHeight","paddingTop","paddingBottom","marginWidth","marginLeft","marginRight","marginHeight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderHeight","borderTopWidth","borderBottomWidth","isBorderBoxSizeOuter","styleWidth","styleHeight","Outlayer","Item","LayoutMode","String","Isotope","create","layoutMode","isJQueryFiltering","sortAscending","_create","itemGUID","_sorters","_getSorters","modes","filteredItems","items","sortHistory","_initLayoutMode","reloadItems","_itemize","_updateItemsSortData","Mode","initialOpts","layout","_isLayoutInited","_getOption","_layout","arrange","isInstant","_getIsInstant","_resetLayout","_manageStamps","layoutItems","opts","filtered","_filter","_bindArrangeComplete","_isInstant","_noTransition","_hideReveal","_sort","_init","reveal","needReveal","hide","needHide","isLayoutInstant","isLayoutComplete","isHideComplete","isRevealComplete","arrangeParallelCallback","dispatchEvent","hiddenMatched","visibleUnmatched","_getFilterTest","item","isIgnored","isMatched","isHidden","updateSortData","getItems","getSortData","sorter","mungeSorter","len","query","attrMatch","getValue","getValueGetter","parser","sortDataParsers","child","getItemSorter","sortBys","sortAsc","itemA","itemB","sortBy","sortData","_getIsSameSortBy","itemSorter","sort","_mode","mode","Error","_getItemLayoutPosition","_manageStamp","stamp","_getContainerSize","needsResizeLayout","appended","addItems","_filterRevealAdded","prepended","insert","filteredInsertItems","_remove","removeItems","shuffle","random","transitionDuration","returnValue","getFilteredItemElements","map","sorters","_destroy","isotope","needsVerticalResizeLayout","_getMeasurement","getColumnWidth","getSegmentSize","getRowHeight","segment","segmentName","outerSize","firstItemSize","getFirstItemSize","firstItem","constructor","FitRows","y","maxY","itemWidth","gutter","containerWidth","Masonry","MasonryMode","keepModeMethods","_getElementOffset","measureColumns","isFitWidth","fitWidth","Vertical","horizontalAlignment","n","r","o","Promise","A","recalculate","responsiveOptions","keys","s","breakAt","O","useContainerForBreakpoints","columns","mobileFirst","u","l","rows","v","p","M","cols","macyComplete","tmpRows","f","lastcol","C","h","nodeName","byCss","selectors","RegExp","substring","m","running","run","clear","emit","g","E","then","constants","EVENT_IMAGE_LOAD","img","catch","EVENT_IMAGE_ERROR","w","all","EVENT_IMAGE_COMPLETE","I","EVENT_RESIZE","queue","N","debug","T","resizer","L","useOwnImageLoader","waitForImages","EVENT_INITIALIZED","_","V","from","offsetParent","trueOrder","EVENT_RECALCULATED","R","k","useImageLoader","onInit","cancelLegacy","removeAttribute","q","init","warn","recalculateOnImageLoad","runOnImageLoad","removeEventListener","compatOptions","colYs","horizontalColIndex","getContainerWidth","columnWidth","firstItemElem","excess","remainder","colSpan","colPosition","horizontalOrder","col","setHeight","setMax","_getTopColPosition","colGroup","_getTopColGroup","minimumY","groupCount","_getColGroupY","groupColYs","_getHorizontalColPosition","hasSize","stampSize","firstX","right","lastX","firstCol","lastCol","stampMaxY","bottom","_getContainerFitWidth","unusedCols","previousWidth","OFI","propRegex","testImg","Image","supportsObjectFit","supportsObjectPosition","supportsOFI","supportsCurrentSrc","currentSrc","nativeGetAttribute","nativeSetAttribute","autoModeEnabled","setPlaceholder","placeholder","onImageReady","fixOne","parsed","fontFamily","exec","ofi","skipTest","srcset","descriptors","get","set","defineProperty","ss","keepSrcUsable","err","picturefill","pf","ns","evaled","fillImg","reselect","curSrc","supported","polyfillCurrentSrc","backgroundRepeat","backgroundOrigin","fix","imgs","startAutoMode","tagName","watchMQ","bind","getOfiImageMaybe","HTMLImageElement","hijackAttributes","isEmptyObj","docElemStyle","transitionProperty","transition","transformProperty","transitionEndEvent","WebkitTransition","vendorProperties","transitionDelay","toDashedAll","_transn","ingProperties","clean","onEnd","elemStyle","getPosition","isOriginLeft","isOriginTop","xValue","yValue","layoutSize","layoutPosition","xPadding","xProperty","xResetProperty","getXValue","yPadding","yProperty","yResetProperty","getYValue","isHorizontal","percentPosition","_transitionTo","curX","curY","didNotMove","setPosition","isTransitioning","transX","transY","transitionStyle","getTranslate","to","onTransitionEnd","isCleaning","goTo","moveTo","_nonTransition","_removeStyles","_transition","enableTransition","transitionProps","staggerDelay","onwebkitTransitionEnd","ontransitionend","onotransitionend","dashedVendorProperties","propertyName","disableTransition","removeTransitionStyles","cleanStyle","cleanTransitionStyle","stagger","delay","removeElem","getHideRevealTransitionEndProperty","onRevealTransitionEnd","hiddenStyle","visibleStyle","styleProperty","optionStyle","opacity","onHideTransitionEnd","GUID","instances","queryElement","defaults","outlayerGUID","containerStyle","initLayout","originLeft","originTop","resize","resizeContainer","subclass","Parent","SubClass","oldOption","horizontal","layoutInstant","stamps","bindResize","itemElems","_filterFindItemElements","itemSelector","getItemElements","_getItemsForLayout","_layoutItems","_postLayout","_emitCompleteOnItems","_processLayoutQueue","updateStagger","_positionItem","getMilliseconds","_setContainerMeasure","measure","isWidth","elemSize","onComplete","count","doneCount","tick","emitArgs","$event","Event","ignore","getItem","unignore","_find","unstamp","_getBoundingRect","boundingRect","getBoundingClientRect","_boundingRect","thisRect","isResizeBound","unbindResize","onresize","previousItems","revealItemElements","hideItemElements","removeData","Layout","bridget","msUnits","ms","time","unit","modules","installedModules","moduleId","loaded","ask","ignoreKeys","specificKeys","registerOnChange","unRegisterOnChange","docElem","currentElement","currentInput","currentIntent","currentTimestamp","now","shouldPersist","formInputs","functionList","ignoreMap","specificMap","inputMap","keydown","keyup","mousedown","mousemove","MSPointerDown","MSPointerMove","pointerdown","pointermove","touchstart","touchend","isScrolling","mousePos","pointerMap","supportsPassive","addListeners","capture","setPersist","PointerEvent","setInput","setIntent","MSPointerEvent","detectWheel","setElement","clearElement","sessionStorage","doUpdate","eventKey","which","pointerType","ignoreMatch","specificMatch","shouldUpdate","validateTouch","persistInput","activeElem","checkClosest","fireFunctions","detectScrolling","setItem","touchIsValid","onmousewheel","screenX","screenY","tag","ElementPrototype","msMatchesSelector","webkitMatchesSelector","closest","arr","eventType","objPos","clearStorage","__webpack_module_cache__","__webpack_require__","cachedModule","__webpack_modules__","getter","__esModule","definition","enumerable","rtl","GetYoDigits","chars","charsLength","transitionend","$elem","end","transitions","triggerHandler","onLoad","handler","didLoad","ignoreMousedisappear","ignoreLeaveWindow","ignoreReappear","eLeave","rest","relatedTarget","hasFocus","eReenter","currentTarget","has","matchMedia","styleMedia","media","info","script","insertBefore","head","matchMedium","text","styleSheet","cssText","queries","isInitialized","appendTo","namedQueries","extractedStyles","styleObject","reduce","ret","param","parts","decodeURIComponent","parseStyleToObject","_getCurrentSize","_watcher","_reInit","atLeast","only","upTo","nextSize","next","bpSize","bpModifier","queryIndex","findIndex","_getQueryName","nextQuery","TypeError","matched","newSize","currentSize","version","_plugins","_uuids","plugin","functionName","attrName","hyphenate","registerPlugin","pluginName","uuid","unregisterPlugin","removeAttr","plugins","isJQ","plgs","foundation","object","reflow","addBack","parseValue","er","getFnName","addToJquery","$noJS","removeClass","plugClass","ReferenceError","Function","results","util","throttle","func","timer","context","vp","nextTime","performance","oThis","aArgs","fToBind","fNOP","fBound","Plugin","_setup","getPluginName","keyCodes","commands","findFocusable","aTabIndex","bTabIndex","parseKey","keyCode","fromCharCode","shiftKey","ctrlKey","altKey","Keyboard","kcs","kc","getKeyCodes","handleKey","component","functions","commandList","zfIsKeyHandled","ltr","handled","unhandled","register","componentName","cmds","trapFocus","$focusable","$firstFocusable","eq","$lastFocusable","releaseFocus","Accordion","_isInitializing","$tabs","idx","$content","linkId","$initActive","_initialAnchor","prev","_openSingleTab","_checkDeepLink","anchor","location","hash","$anchor","$link","parent","hasClass","_closeAllTabs","deepLinkSmudge","deepLinkSmudgeOffset","deepLinkSmudgeDelay","deepLink","$tabContent","$a","multiExpand","previous","first","last","$target","up","down","updateHistory","history","pushState","replaceState","_openTab","$targetItem","$othersItems","siblings","allowAllClosed","_closeTab","$activeContents","not","targetContentId","finish","slideDown","slideSpeed","slideUp","$activeTabs","stop","Nest","Feather","subMenuClass","subItemClass","hasSubClass","applyAria","$item","$sub","Burn","AccordionMenu","multiOpen","$menuLinks","subId","isActive","parentLink","clone","wrap","submenuToggle","after","submenuToggleText","initPanes","$submenu","$prevElement","$nextElement","$elements","parents","open","close","closeAll","hideAll","showAll","$targetBranch","parentsUntil","$othersActiveSubmenus","$submenus","$allmenus","detach","Box","ImNotTouchingYou","lrOnly","tbOnly","ignoreBottom","OverlapArea","GetDimensions","GetExplicitOffsets","alignment","vOffset","hOffset","isOverflow","topVal","leftVal","$eleDims","$anchorDims","topOver","bottomOver","leftOver","rightOver","eleDims","parDims","windowDims","sqrt","rect","parRect","winRect","winY","winX","pageXOffset","parentDims","POSITIONS","VERTICAL_ALIGNMENTS","HORIZONTAL_ALIGNMENTS","ALIGNMENTS","nextItem","array","currentIdx","Positionable","triedPositions","_getDefaultPosition","_getDefaultAlignment","originalPosition","originalAlignment","_reposition","_alignmentsExhausted","_realign","_addTriedPosition","_positionsExhausted","isExhausted","_getVOffset","_getHOffset","_setPosition","$parent","allowOverlap","minOverlap","minCoordinates","overlap","allowBottomOverlap","initClasses","activeClasses","Motion","animation","isIn","initClass","activeClass","reset","show","MutationObserver","triggers","Triggers","Listeners","Basic","Global","Initializers","debounceGlobalListener","debounce","openListener","closeListener","toggleListener","closeableListener","stopPropagation","fadeOut","toggleFocusListener","addOpenListener","addCloseListener","addToggleListener","addCloseableListener","addToggleFocusListener","resizeListener","$nodes","scrollListener","closeMeListener","pluginId","addClosemeListener","yetiBoxes","plugNames","addResizeListener","addScrollListener","addMutationEventsListener","listeningElementsMutation","mutationRecordsList","attributeName","observe","childList","characterData","subtree","attributeFilter","addSimpleListeners","$document","addGlobalListeners","__","IHearYou","startPosX","startTime","elapsedTime","startEvent","Touch","isMoving","didMoved","onTouchEnd","onTouchMove","tapEvent","dir","touches","pageX","dx","abs","onTouchStart","SpotSwipe","enabled","moveThreshold","timeThreshold","setupSpotSwipe","setupTouchHandler","handleTouch","simulatedEvent","changedTouches","touchmove","MouseEvent","clientX","clientY","createEvent","initMouseEvent","Dropdown","$id","$anchors","_setCurrentAnchor","parentClass","$currentAnchor","super","horizontalPosition","hasTouch","ontouchstart","forceFollow","hover","bodyData","whatinput","hoverDelay","hoverPane","_addBodyHandler","$body","autoFocus","closeOnClick","DropdownMenu","subs","$menuItems","verticalClass","rightClass","changed","_isVertical","_isRtl","parClass","clickOpen","hasSub","hasClicked","stopImmediatePropagation","_hide","_show","closeOnClickInside","disableHoverOnTouch","disableHover","autoclose","closingTime","isTab","nextSibling","prevSibling","openSub","closeSub","_removeBodyHandler","$sibs","oldClass","$parentLi","$toClose","$activeItem","onImagesLoaded","images","unloaded","singleImageLoaded","image","me","Equalizer","eqId","$watched","hasNested","isNested","isOn","_bindHandler","onResizeMeBound","_onResizeMe","onPostEqualizedBound","_onPostEqualized","tooSmall","equalizeOn","_checkMQ","_reflow","_pauseEvents","_killswitch","equalizeOnStack","_isStacked","equalizeByRow","getHeightsByRow","applyHeightByRow","getHeights","applyHeight","heights","lastElTopOffset","groups","group","elOffsetTop","j","ln","groupsILength","lenJ","Drilldown","autoApplyClass","$submenuAnchors","$currentMenu","_prepareMenu","_registerEvents","_keyboardEvents","$menu","backButtonPosition","backButton","prepend","_back","autoHeight","$wrapper","wrapper","animateHeight","_getMaxDims","_resize","ev","_hideAll","_scrollTop","$scrollTopElement","scrollTopElement","scrollPos","scrollTopOffset","animationDuration","animationEasing","calcHeight","parentSubMenu","_menuLinkEvents","_setShowSubMenuClasses","_setHideSubMenuClasses","_showMenu","isLastChild","blur","unwrap","MenuPlugins","dropdown","cssClass","drilldown","accordion","ResponsiveMenu","rules","currentMq","currentPlugin","rulesTree","rule","ruleSize","rulePlugin","_checkMediaQueries","matchedMq","ResponsiveToggle","targetID","$targetMenu","$toggler","input","animationIn","animationOut","_update","_updateMqHandler","toggleMenu","hideFor","Reveal","cached","mq","fullScreen","overlay","$overlay","_makeOverlay","onLoadListener","additionalOverlayClasses","_updatePosition","_handleState","_disableScroll","_enableScroll","$activeAnchor","multipleOpened","focusableElements","_addGlobalClasses","showDelay","_addGlobalListeners","updateScrollbarClass","toggleClass","_removeGlobalClasses","closeOnEsc","finishUp","hideDelay","resetOnClose","html","urlWithoutHash","pathname","search","Slider","initialized","inputs","handles","$handle","$input","$fill","vertical","disabledClass","binding","_setInitAttr","doubleSided","$handle2","$input2","setHandles","_setHandlePos","_pctOfBar","pctOfBar","percent","positionValueFunction","_logTransform","_powTransform","_value","base","log","baseLog","nonLinearBase","pow","$hndl","isDbl","h2Val","step","h1Val","vert","hOrW","lOrT","handleDim","elemDim","movement","decimal","_setValues","dim","isLeftHndl","handlePct","handlePos","initialStart","anim","prog","move","ts","Move","moveTime","changedDelay","initVal","initialEnd","_handleEvent","_adjustValue","direction","eventOffset","pageY","barDim","windowScroll","elemOffset","barXY","eventFromBar","offsetPct","absPosition","previousVal","_eventsForHandle","curHandle","handleChangeEvent","clickSelect","draggable","addTouch","newValue","_$handle","oldValue","decrease","increase","decreaseFast","increaseFast","frac","clickPos","invertVertical","SmoothScroll","_linkClickListener","_handleLinkClick","arrival","_inTransition","scrollToLoc","static","loc","$loc","Sticky","$container","wasWrapped","containerClass","stickyClass","scrollCount","checkEvery","isStuck","containerHeight","elemHeight","_parsePoints","_setSizes","scroll","_calc","_removeSticky","topPoint","reverse","pts","topAnchor","btmAnchor","breaks","pt","place","points","canStick","_eventsHandler","_pauseListeners","checkSizes","bottomPoint","_setSticky","stickTo","mrgn","notStuckTo","isTop","stickToTop","anchorPt","anchorHeight","topOrBottom","stickyOn","newElemWidth","comp","pdngl","pdngr","dynamicHeight","newContainerHeight","_setBreakPoints","mTop","emCalc","mBtm","em","fontSize","Tabs","$tabTitles","linkClass","linkActiveClass","matchHeight","$images","_setHeight","anchorNoHash","selectTab","_collapse","_addKeyHandler","_addClickHandler","_setHeightMqHandler","_handleTabChange","wrapOnKeys","historyHandled","activeCollapse","$oldTab","$tabLink","$targetContent","_collapseTab","panelActiveClass","$targetAnchor","$activeTab","idStr","hashIdStr","panelClass","panel","temp","Toggler","$triggers","toggler","$trigger","controls","_toggleClass","_updateARIA","_toggleAnimate","Tooltip","isClick","elemId","tipText","template","_buildTemplate","allowHtml","triggerClass","elementClassName","SVGElement","baseVal","tooltipWidth","tooltipHeight","templateClasses","tooltipClass","showOn","fadeIn","fadeInDuration","fadeOutDuration","isFocus","disableForTouch","touchCloseText","tabs","ResponsiveAccordionTabs","storezfData","currentRule","_getAllOptions","allOptions","dummyPlugin","tmpPlugin","keyKey","objObj","_changedZfMediaQueryHandler","_handleMarkup","toSet","fromString","$panels","tabsTitle","tabsPanel","$liHeads","$liHeadsA","$tabsContent","$placeholder","insertAfter","tempValue","masonryGrids","Macy","objectFitImages","__assign","CountUp","endVal","startVal","decimalPlaces","useEasing","useGrouping","smartEasingThreshold","smartEasingAmount","separator","prefix","suffix","enableScrollSpy","scrollSpyDelay","scrollSpyOnce","finalEndVal","countDown","paused","remaining","frameVal","easingFn","Number","printValue","rAF","update","formatNumber","numerals","easeOutExpo","formattingFn","validateValue","resetDuration","onScrollFns","handleScroll","onscroll","determineDirectionAndSmartEasing","pauseResume","ensureNumber","bubbles","cancelable","composed","registerEventListeners","elements","IntersectionObserverEntry","intersectionObserver","IntersectionObserver","animateModern","root","rootMargin","animateLegacy","elementIsInView","animateElement","isIntersecting","countUp","counterEnd","counterDuration","counterGrouping","counterSeparator","counterDecimal","counter","thisArg","getPrototypeOf","kindOf","cache","thing","kindOfTest","typeOfTest","isUndefined","isArrayBuffer","isString","isFunction","isNumber","isObject","isPlainObject","Symbol","toStringTag","iterator","isDate","isFile","isBlob","isFileList","isURLSearchParams","allOwnKeys","getOwnPropertyNames","findKey","_key","_global","global","isContextDefined","isTypedArray","TypedArray","Uint8Array","isHTMLForm","isRegExp","reduceDescriptors","reducer","getOwnPropertyDescriptors","reducedDescriptors","descriptor","defineProperties","isBuffer","isFormData","pattern","isArrayBufferView","ArrayBuffer","isView","buffer","isBoolean","isStream","pipe","merge","caseless","assignValue","targetKey","stripBOM","charCodeAt","inherits","superConstructor","toFlatObject","sourceObj","destObj","propFilter","merged","endsWith","searchString","lastIndex","toArray","forEachEntry","done","pair","matchAll","regExp","hasOwnProp","freezeMethods","writable","toObjectSet","arrayOrString","delimiter","define","toCamelCase","p1","p2","toFiniteNumber","defaultValue","isFinite","toJSONObject","stack","visit","source","reducedValue","AxiosError","code","config","request","response","captureStackTrace","toJSON","description","number","fileName","lineNumber","columnNumber","status","customProps","axiosError","cause","isVisitable","removeBrackets","renderKey","path","dots","token","predicates","formData","metaTokens","indexes","visitor","defaultVisitor","useBlob","Blob","convertValue","toISOString","Buffer","stringify","some","isFlatArray","exposedHelpers","build","encode","charMap","encodeURIComponent","AxiosURLSearchParams","_pairs","encoder","_encode","buildURL","url","serializeFn","serialize","serializedParams","hashmarkIndex","handlers","use","fulfilled","rejected","synchronous","runWhen","eject","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","isStandardBrowserEnv","product","isStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","isBrowser","classes","protocols","buildPath","isNumericKey","isLast","arrayToObject","parsePropPath","DEFAULT_CONTENT_TYPE","transitional","adapter","transformRequest","headers","contentType","getContentType","hasJSONContentType","isObjectPayload","setContentType","helpers","toURLEncodedForm","formSerializer","_FormData","env","rawValue","stringifySafely","transformResponse","JSONRequested","responseType","strictJSONParsing","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","ignoreDuplicateOf","$internals","normalizeHeader","header","normalizeValue","matchHeaderValue","AxiosHeaders","valueOrRewrite","rewrite","setHeader","_header","_rewrite","lHeader","setHeaders","rawHeaders","line","parseHeaders","tokens","tokensRE","parseTokens","matcher","delete","deleted","deleteHeader","normalize","format","normalized","char","formatHeader","targets","asStrings","computed","accessors","defineAccessor","accessorName","arg1","arg2","arg3","configurable","buildAccessors","accessor","transformData","fns","isCancel","__CANCEL__","CanceledError","write","domain","secure","toGMTString","read","buildFullPath","baseURL","requestedURL","relativeURL","combineURLs","msie","urlParsingNode","originURL","resolveURL","protocol","host","hostname","port","charAt","requestURL","samplesCount","bytes","timestamps","firstSampleTS","tail","chunkLength","startedAt","bytesCount","passed","progressEventReducer","isDownloadStream","bytesNotified","_speedometer","total","lengthComputable","progressBytes","rate","estimated","XMLHttpRequest","resolve","reject","requestData","requestHeaders","onCanceled","cancelToken","unsubscribe","signal","auth","username","password","unescape","btoa","fullPath","onloadend","responseHeaders","getAllResponseHeaders","settle","responseText","statusText","paramsSerializer","onreadystatechange","responseURL","onabort","onerror","ontimeout","timeoutErrorMessage","xsrfValue","withCredentials","isURLSameOrigin","setRequestHeader","onDownloadProgress","onUploadProgress","upload","cancel","abort","subscribe","aborted","parseProtocol","send","knownAdapters","http","xhr","adapters","nameOrAdapter","throwIfCancellationRequested","throwIfRequested","dispatchRequest","reason","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","timeoutMessage","decompress","beforeRedirect","transport","httpAgent","httpsAgent","socketPath","responseEncoding","configValue","VERSION","validators","deprecatedWarnings","validator","formatMessage","desc","assertOptions","schema","allowUnknown","Axios","instanceConfig","interceptors","configOrUrl","contextHeaders","boolean","function","requestInterceptorChain","synchronousRequestInterceptors","interceptor","unshift","responseInterceptorChain","promise","chain","newConfig","onFulfilled","onRejected","getUri","generateHTTPMethod","isForm","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","axios","createInstance","defaultConfig","toFormData","Cancel","promises","spread","isAxiosError","payload","formToJSON","default","postID","postId","action","themosis","nonce","ajaxurl","success","outerHTML","wpsoup","favorites","button_icon_favorited","addToFavorites","button_icon","removeFromFavorites","containerId","LazyLoad","includes","randomID","submenu","logo","logoMobile","language","overlayItems","_step5","_iterator5","toggleArrow","submenuTogglesCheckInterval","setInterval","submenuToggles","clearInterval","searchBlockButton","searchFormBlock","galleryThumbs","slidesPerView","freeMode","watchSlidesVisibility","watchSlidesProgress","scrollbar","navigation","nextEl","prevEl","thumbs","swiper","gutenbergLoadCheck","anchors","editPost","isFeatureActive","dispatch","toggleFeature","shortcut","nodeAttr","fields","initialOffset","masonry","textLoadMore","textLoading","textLoadFailed","cards","ajax_amount_to_load","cardSliders","change","$hiddenInput","$emptyInput","$smartTag","smart_tag","$select","selectedOption","selectedIndex","selectedSmartTagLabel","ga","getAll","analyticsGTMID","ssrDocument","initEvent","childNodes","createElementNS","importNode","origin","doc","ssrWindow","go","back","CustomEvent","screen","Dom7","__proto__","makeReactive","arrayFlat","res","arrayFilter","toCreate","tempParent","qsa","uniqueArray","arrayUnique","noTrigger","Methods","classNames","attrs","targetSelector","handleLiveEvent","eventData","dom7EventData","dom7LiveListeners","proxyListener","dom7Listeners","dom7proxy","evt","detail","dataIndex","transitionEnd","dom","fireCallBack","includeMargins","styles","box","clientTop","clientLeft","scrollX","compareWith","previousSibling","returnIndex","els","newChild","tempDiv","firstChild","nextElementSibling","nextAll","nextEls","previousElementSibling","prevAll","prevEls","foundElements","found","axis","matrix","curTransform","transformMatrix","curStyle","WebKitCSSMatrix","webkitTransform","MozTransform","OTransform","MsTransform","msTransform","m41","m42","noExtend","nextSource","node","keysArray","nextIndex","nextKey","getOwnPropertyDescriptor","__swiper__","varName","varValue","animateCSSModeScroll","targetPosition","side","startPosition","translate","wrapperEl","scrollSnapType","cssModeFrameID","isOutOfBound","easeProgress","cos","PI","currentPosition","support","deviceCached","getSupport","smoothScroll","touch","DocumentTouch","passiveListener","gestures","calcSupport","getDevice","overrides","ua","device","ios","android","screenWidth","screenHeight","ipad","ipod","iphone","windows","macos","os","calcDevice","getBrowser","isSafari","isWebView","calcBrowser","priority","eventsListeners","destroyed","onceHandler","__emitterProxy","onAny","eventsAnyListeners","offAny","eventHandler","updateSize","isVertical","updateSlides","getDirectionLabel","property","getDirectionPropertyValue","$wrapperEl","swiperSize","rtlTranslate","wrongRTL","isVirtual","virtual","previousSlidesLength","slides","slideClass","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","virtualSize","centeredSlides","cssMode","gridEnabled","grid","slideSize","initSlides","shouldResetSlideSize","breakpoints","slide","updateSlide","slideStyles","currentTransform","currentWebKitTransform","roundLengths","swiperSlideSize","slidesPerGroup","slidesPerGroupSkip","effect","setWrapperSize","updateWrapperSize","newSlidesGrid","slidesGridItem","slideIndex","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","watchOverflow","checkOverflow","updateSlidesOffset","backFaceHiddenClass","containerModifierClass","hasClassBackfaceClassAdded","maxBackfaceHiddenSlides","updateAutoHeight","activeSlides","newHeight","setTransition","getSlideByIndex","visibleSlides","ceil","activeIndex","swiperSlideOffset","updateSlidesProgress","offsetCenter","slideVisibleClass","visibleSlidesIndexes","slideOffset","slideProgress","minTranslate","originalSlideProgress","slideBefore","slideAfter","originalProgress","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","wasBeginning","wasEnd","updateSlidesClasses","realIndex","activeSlide","slideActiveClass","slideNextClass","slidePrevClass","slideDuplicateActiveClass","slideDuplicateNextClass","slideDuplicatePrevClass","loop","slideDuplicateClass","nextSlide","prevSlide","emitSlidesClasses","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","normalizeSlideIndex","skip","runCallbacksOnInit","updateClickedSlide","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","virtualTranslate","currentTranslate","setTranslate","byController","newProgress","previousTranslate","translateTo","runCallbacks","translateBounds","internal","animating","preventInteractionOnTransition","newTranslate","isH","behavior","onTranslateToWrapperTransitionEnd","transitionEmit","slideTo","initial","indexAsNumber","normalizedTranslate","normalizedGrid","normalizedGridNext","allowSlideNext","allowSlidePrev","transitionStart","_immediateVirtual","_swiperImmediateVirtual","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","loopedSlides","slideNext","perGroup","slidesPerGroupAuto","slidesPerViewDynamic","increment","loopPreventsSlide","loopFix","_clientLeft","rewind","slidePrev","normalizedSnapGrid","prevSnap","prevSnapIndex","prevIndex","slideReset","slideToClosest","currentSnap","slideToIndex","loopCreate","$selector","loopFillGroupWithBlank","blankSlidesNum","blankNode","slideBlankClass","loopAdditionalSlides","loopedSlidesLimit","prependSlides","appendSlides","cloneNode","diff","loopDestroy","touchEventsData","originalEvent","$targetEl","touchEventsTarget","isTouchEvent","isTouched","isMoved","swipingClassHasValue","noSwipingClass","eventPath","composedPath","shadowRoot","noSwipingSelector","isTargetShadow","noSwiping","__closestFrom","assignedSlot","getRootNode","closestElement","allowClick","swipeHandler","currentX","targetTouches","currentY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","allowTouchCallbacks","startMoving","touchStartTime","swipeDirection","allowThresholdMove","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","targetTouch","preventedByNestedSwiper","touchReleaseOnEdges","diffX","diffY","touchAngle","atan2","touchMoveStopPropagation","nested","startTranslate","allowMomentumBounce","grabCursor","setGrabCursor","touchRatio","disableParentSwiper","resistanceRatio","resistance","followFinger","touchEndTime","timeDiff","pathTree","lastClickTime","currentPos","stopIndex","groupSize","rewindFirstIndex","rewindLastIndex","ratio","longSwipesMs","longSwipes","longSwipesRatio","shortSwipes","onResize","setBreakpoint","autoplay","onClick","preventClicks","preventClicksPropagation","onScroll","dummyEventAttached","dummyEventListener","touchEvents","domMethod","swiperMethod","passiveListeners","updateOnWindowResize","attachEvents","detachEvents","isGridEnabled","breakpoint","getBreakpoint","breakpointsBase","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasEnabled","emitContainerClasses","fill","wasModuleEnabled","isModuleEnabled","disable","enable","directionChanged","needsReLoop","changeDirection","isEnabled","containerEl","currentHeight","point","minRatio","substr","addClasses","suffixes","resultClasses","prepareClasses","removeClasses","initialSlide","resizeObserver","createElements","simulateTouch","uniqueNavElements","preloadImages","updateOnImagesReady","wrapperClass","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","auto","prototypes","eventsEmitter","moving","isLocked","cursor","unsetGrabCursor","wasLocked","lastSlideIndex","lastSlideRightEdge","loadImage","imageEl","sizes","checkForComplete","onReady","onload","imagesLoaded","imagesToLoad","extendedDefaults","swipers","browser","__modules__","mod","extendParams","swiperParams","passedParams","velocity","desktop","touchEventsTouch","touchEventsDesktop","clickTimeout","velocities","setProgress","cls","getSlideClasses","slideEl","updates","view","exact","spv","breakLoop","translateValue","translated","newDirection","needUpdate","currentDirection","changeLanguageDirection","mount","mounted","getWrapperSelector","getWrapper","deleteInstance","cleanStyles","deleteProps","newDefaults","installModule","prototypeGroup","protoMethod","observer","animationFrame","resizeHandler","orientationChangeHandler","ResizeObserver","newWidth","contentBoxSize","contentRect","inlineSize","blockSize","unobserve","observers","attach","WebkitMutationObserver","mutations","observerUpdate","observeParents","observeSlideChildren","containerParents","disconnect","createElementIfNotDefined","checkProps","$slideEl","shadowClass","$shadowContainer","transformEl","$shadowEl","effectParams","getEl","toggleEl","lockClass","$nextEl","$prevEl","onPrevClick","onNextClick","hideOnClick","hiddenClass","navigationDisabledClass","_s","targetEl","pagination","clickable","pfx","bulletSize","bulletElement","renderBullet","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","formatFractionTotal","bulletClass","bulletActiveClass","modifierClass","currentClass","totalClass","progressbarFillClass","progressbarOppositeClass","clickableClass","horizontalClass","paginationDisabledClass","bullets","dynamicBulletIndex","isPaginationDisabled","setSideBullets","$bulletEl","paginationType","firstIndex","midIndex","bullet","$bullet","bulletIndex","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","offsetProp","progressbarDirection","scale","scaleX","scaleY","paginationHTML","numberOfBullets","dragStartPos","dragSize","trackSize","divider","dragTimeout","$dragEl","newPos","getPointerPosition","setDragPosition","positionRatio","onDragStart","onDragMove","onDragEnd","snapOnRelease","activeListener","eventMethod","$swiperEl","dragClass","dragEl","scrollbarDisabledClass","$activeSlideEl","autoplayResult","reverseDirection","stopOnLastSlide","pause","waitForTransition","onVisibilityChange","visibilityState","onMouseEnter","disableOnInteraction","onMouseLeave","pauseOnMouseEnter","multipleActiveThumbs","autoScrollOffset","slideThumbActiveClass","thumbsContainerClass","swiperCreated","onThumbClick","thumbsSwiper","currentIndex","thumbsParams","SwiperClass","thumbsSwiperParams","thumbsToActivate","thumbActiveClass","useOffset","newThumbsIndex","currentThumbsIndex","prevThumbsIndex","nextThumbsIndex","LinearSpline","binarySearch","maxIndex","minIndex","guess","i1","i3","interpolate","x2","removeSpline","controller","control","spline","inverse","by","_t","controlled","controlledTranslate","setControlledTranslate","getInterpolateFunction","setControlledTransition","coverflowEffect","rotate","stretch","depth","modifier","slideShadows","overwriteParams","perspective","recreateShadows","getEffectParams","requireUpdateOnVirtual","overwriteParamsResult","swiperWidth","swiperHeight","center","centerOffset","offsetMultiplier","rotateY","rotateX","translateZ","translateY","translateX","slideTransform","$shadowBeforeEl","$shadowAfterEl","ready","click","fadeEffect","crossFade","registerBoekenLinks","registerScrollOnClick","registerCustomerInfo","from_class","to_id","on_finish","scrollToSmooth","body_pos","element_pos","wrapInner","LocalMain","comboFilter","filters","totalAmountOfPersons","multipleFilter","checkValue","$checkbox","checkbox","filterGroup","manageCheckbox","combo","nextCombo","getComboFilter"],"sourceRoot":""}