{"version":3,"file":"js/5303-43ab9d5ae31a4d5cc2dd.js","mappings":"oFAAA,MAAMA,EAAe,EAAQ,OAE7BC,EAAOC,QAAU,CACfF,aAAcA,EACdG,cAAeH,EACfI,cAAe,EAAQ,O,qBCMxB,SAAWC,GACV,GAAsB,qBAAXC,OAAX,CAEA,IAAIC,GAAa,EACfC,EAAO,GACPC,EAAiB,GACjBC,EAAa,EACbC,EAAgB,GAChBC,EAAe,KACfC,EAAc,GACdC,GAAiB,EACjBC,EAAkB,CAAEC,OAAQ,EAAGC,MAAO,GACtCC,EAAmB,IACnBC,GAAW,EACXC,EAAS,EACTC,EAAwB,aACxBC,EAAiBD,EACjBE,GAAW,EACXC,EAAU,GACVC,EAAc,CAAC,EACfC,EAAW,GACXC,EAAgB,KAChBC,GAAU,EACVC,GAAc,EACdC,EAAQ,gBACRC,EAAWD,EAAME,OACjBC,EAAO,GACPC,EAAuB,CACrBC,IAAK,EACLC,IAAK,EACLC,WAAY,EACZC,sBAAuB,GAEzBC,EAAa,QACbC,GAAa,EACbC,EAASnC,OAAOoC,OAChBC,EAAsB,IACtBC,EAAY,EACZC,GAAgB,EAChBC,EAAqB,KACrBC,EAAiB,GACjBC,EAAQ,EACRC,EAAuB,SACvBC,EAAgBD,EAChBE,EAAM7C,OACN8C,EAAY,WACVC,GAAK,iCACP,EACAC,EAAU,WAAa,EACvBC,EAAa,WAAa,EAC1BC,EAAoB,CAClBpC,OAAQ,WAEN,OADAiC,GAAK,kDACEI,SAASC,gBAAgBC,YAClC,EACAX,MAAO,WAEL,OADAK,GAAK,iDACEI,SAASG,KAAKC,WACvB,GAEFC,EAAsB,CAAC,EACvBC,GAAmB,EAIrB,IACE,IAAIC,EAAUC,OAAOC,OACnB,CAAC,EACD,CACEC,QAAS,CAEPC,IAAK,WACHL,GAAmB,CACrB,KAINzD,OAAO+D,iBAAiB,OAAQC,GAAMN,GACtC1D,OAAOiE,oBAAoB,OAAQD,GAAMN,EAC3C,CAAE,MAAOQ,IAET,CA80BA,IA/zBkBC,EACZC,EACFC,EACAC,EACAC,EACAC,EACAC,EAyzBAC,EAAY,CACZC,WAAY,WACV,OACExB,SAASG,KAAKD,aACduB,GAAiB,aACjBA,GAAiB,eAErB,EAEAC,OAAQ,WACN,OAAOH,EAAUC,YACnB,EAEA5C,WAAY,WACV,OAAOoB,SAASG,KAAKwB,YACvB,EAEAC,OAAQ,WACN,OAAO7B,EAAkBpC,QAC3B,EAEAkE,sBAAuB,WACrB,OAAO7B,SAASC,gBAAgBC,YAClC,EAEArB,sBAAuB,WACrB,OAAOmB,SAASC,gBAAgB0B,YAClC,EAEAjD,IAAK,WACH,OAAOoD,KAAKpD,IAAIqD,MAAM,KAAMC,GAAmBT,GACjD,EAEA5C,IAAK,WACH,OAAOmD,KAAKnD,IAAIoD,MAAM,KAAMC,GAAmBT,GACjD,EAEAU,KAAM,WACJ,OAAOV,EAAU7C,KACnB,EAEAwD,cAAe,WACb,OAAOJ,KAAKpD,IACV6C,EAAUC,cAAgBD,EAAUM,wBACpCM,GAAc,SAAUC,MAE5B,EAEAC,cAAe,WACb,OAAOC,GAAkB,SAAU,qBACrC,GAEFC,GAAW,CACT3D,WAAY,WACV,OAAOoB,SAASG,KAAKC,WACvB,EAEAoB,WAAY,WACV,OAAOxB,SAASG,KAAKqC,WACvB,EAEAZ,OAAQ,WACN,OAAO7B,EAAkBR,OAC3B,EAEAV,sBAAuB,WACrB,OAAOmB,SAASC,gBAAgBG,WAClC,EAEAyB,sBAAuB,WACrB,OAAO7B,SAASC,gBAAgBuC,WAClC,EAEAC,OAAQ,WACN,OAAOX,KAAKpD,IAAI6D,GAAS3D,aAAc2D,GAAS1D,wBAClD,EAEAH,IAAK,WACH,OAAOoD,KAAKpD,IAAIqD,MAAM,KAAMC,GAAmBO,IACjD,EAEA5D,IAAK,WACH,OAAOmD,KAAKnD,IAAIoD,MAAM,KAAMC,GAAmBO,IACjD,EAEAG,iBAAkB,WAChB,OAAOP,GAAc,QAASC,KAChC,EAEAC,cAAe,WACb,OAAOC,GAAkB,QAAS,oBACpC,GAkEAK,IA59Bc3B,EA49BiB4B,GAx9B/BxB,EAAU,KACVC,EAAW,EACXC,EAAQ,WACND,EAAWwB,KAAKC,MAChB1B,EAAU,KACVD,EAASH,EAAKe,MAAMd,EAASC,GACxBE,IAEHH,EAAUC,EAAO,KAErB,EAEK,WACL,IAAI4B,EAAMD,KAAKC,MAEVzB,IACHA,EAAWyB,GAGb,IAAIC,EAAYzD,GAAkBwD,EAAMzB,GAsBxC,OApBAJ,EAAU+B,KACV9B,EAAO+B,UAEHF,GAAa,GAAKA,EAAYzD,GAC5B8B,IACF8B,aAAa9B,GACbA,EAAU,MAGZC,EAAWyB,EACX3B,EAASH,EAAKe,MAAMd,EAASC,GAExBE,IAEHH,EAAUC,EAAO,OAETE,IACVA,EAAU+B,WAAW7B,EAAOyB,IAGvB5B,CACT,GA0nCFP,GAAiB/D,OAAQ,WAlHzB,SAAkBuG,GAChB,IAAIC,EAA2B,CAC7BC,KAAM,WACJvF,EAAUqF,EAAMG,KAChBvE,EAASoE,EAAMI,OAEfF,KACA5F,GAAW,EACXyF,YAAW,WACTrF,GAAW,CACb,GAAGL,EACL,EAEAgG,MAAO,WACD3F,EACF4F,GAAI,+BAEJA,GAAI,gCACJC,GAAa,aAEjB,EAEApG,OAAQ,WACNqG,GAAS,eAAgB,qCAC3B,EAEAC,aAAc,WACZ7F,EAAY8F,WAAWC,IACzB,EACAC,WAAY,WACVhB,KAAKa,cACP,EAEAI,SAAU,WACR,IAAIC,EAAUH,IACdL,GAAI,0CAA4CQ,GAChDpE,EAAWqE,KAAKC,MAAMF,IACtBR,GAAI,MACN,EAEAW,QAAS,WACP,IAAIH,EAAUH,IAEdL,GAAI,iCAAmCQ,GAEvCvE,EAAUwE,KAAKC,MAAMF,IACrBR,GAAI,MACN,GAOF,SAASY,IACP,OAAOlB,EAAMG,KAAKgB,MAAM,KAAK,GAAGA,MAAM,KAAK,EAC7C,CAEA,SAASR,IACP,OAAOX,EAAMG,KAAKiB,MAAMpB,EAAMG,KAAKkB,QAAQ,KAAO,EACpD,CAWA,SAASC,IAGP,OAAOtB,EAAMG,KAAKgB,MAAM,KAAK,IAAM,CAAEI,KAAM,EAAGC,MAAO,EACvD,CAEA,SAASC,IACP,IAAIC,EAAcR,IAEdQ,KAAezB,EACjBA,EAAyByB,MAjBWtI,EAAOC,SACzC,iBAAkBI,QACnBA,OAAOkI,SAAWnI,GACjB,iBAAkBC,OAAOkI,OAAOC,WAeLN,KAC7B9E,GAAK,uBAAyBwD,EAAMG,KAAO,IAE/C,CAlCSlF,KAAW,GAAK+E,EAAMG,MAAMiB,MAAM,EAAGlG,MAqCxC,IAAUZ,EACZmH,IACSH,IACTrB,EAAyBC,OAEzBI,GACE,4BACEY,IACA,sCAQV,IAWA1D,GAAiB/D,OAAQ,mBAAoBoI,IAC7CA,IAzwCmC,CA8DnC,SAASpE,KAAQ,CAoBjB,SAASD,GAAiBsE,EAAIC,EAAKnE,EAAMT,GACvC2E,EAAGtE,iBAAiBuE,EAAKnE,IAAMV,IAAmBC,GAAW,CAAC,GAChE,CAMA,SAAS6E,GAAsBC,GAC7B,OAAOA,EAAOC,OAAO,GAAGC,cAAgBF,EAAOb,MAAM,EACvD,CAoDA,SAASgB,GAAaC,GACpB,OAAOpH,EAAQ,IAAMG,EAAO,KAAOiH,CACrC,CAEA,SAAS/B,GAAI+B,GACPtH,GAAW,kBAAoBtB,OAAO6I,SAExCA,QAAQhC,IAAI8B,GAAaC,GAE7B,CAEA,SAAS7F,GAAK6F,GACR,kBAAoB5I,OAAO6I,SAE7BA,QAAQ9F,KAAK4F,GAAaC,GAE9B,CAEA,SAASnC,KAoVT,IACMqC,GAlUN,WACE,SAASC,EAAQC,GACf,MAAO,SAAWA,CACpB,CAEA,IAAItC,EAAOxF,EAAQyG,MAAMlG,GAAUiG,MAAM,KAEzC/F,EAAO+E,EAAK,GACZtG,EAAaL,IAAc2G,EAAK,GAAKtG,EAAa6I,OAAOvC,EAAK,IAC9DlG,EAAiBT,IAAc2G,EAAK,GAAKlG,EAAiBuI,EAAQrC,EAAK,IACvEpF,EAAUvB,IAAc2G,EAAK,GAAKpF,EAAUyH,EAAQrC,EAAK,IACzDtF,EAAWrB,IAAc2G,EAAK,GAAKtF,EAAW6H,OAAOvC,EAAK,IAC1DzG,EAAaF,IAAc2G,EAAK,GAAKzG,EAAa8I,EAAQrC,EAAK,IAC/DrG,EAAgBqG,EAAK,GACrB1F,EAAiBjB,IAAc2G,EAAK,GAAK1F,EAAiB0F,EAAK,GAC/DvG,EAAiBuG,EAAK,GACtBnG,EAAcmG,EAAK,IACnBpE,EAAYvC,IAAc2G,EAAK,IAAMpE,EAAY2G,OAAOvC,EAAK,KAC7DvF,EAAY+H,OAASnJ,IAAc2G,EAAK,KAAcqC,EAAQrC,EAAK,KACnEzE,EAAalC,IAAc2G,EAAK,IAAMzE,EAAayE,EAAK,IACxD9D,EAAgB7C,IAAc2G,EAAK,IAAM9D,EAAgB8D,EAAK,IAC9DnF,EAAcxB,IAAc2G,EAAK,IAAMnF,EAAcwH,EAAQrC,EAAK,IACpE,CAxCEyC,GACAtC,GAAI,wBAA0B7G,OAAOoJ,SAASC,KAAO,KA2DvD,WACE,SAASC,IACP,IAAI5C,EAAO1G,OAAOuJ,cAElB1C,GAAI,2BAA6BS,KAAKkC,UAAU9C,IAChD/C,OAAO8F,KAAK/C,GAAMgD,QAAQC,GAAWjD,GAErC5D,EAAY,cAAe4D,EAAOA,EAAK5D,UAAYA,EACnDE,EAAU,YAAa0D,EAAOA,EAAK1D,QAAUA,EAC7CX,EACE,iBAAkBqE,EAAOA,EAAKkD,aAAevH,EAC/CrB,EACE,4BAA6B0F,EACzBA,EAAKmD,wBACL7I,EACN4B,EACE,2BAA4B8D,EACxBA,EAAKoD,uBACLlH,CACR,CAEA,SAASmH,EAAuBC,EAAUC,GAOxC,MANI,oBAAsBD,IACxBnD,GAAI,gBAAkBoD,EAAW,cACjC/G,EAAkB+G,GAAYD,EAC9BA,EAAW,UAGNA,CACT,CAGE,kBAAmBhK,QACnB2D,SAAW3D,OAAOuJ,cAAcW,cAEhCZ,IACAtI,EAAiB+I,EAAuB/I,EAAgB,UACxD4B,EAAgBmH,EAAuBnH,EAAe,UAGxDiE,GAAI,mCAAqCxE,EAC3C,CAnGE8H,GAoHF,WAEMpK,IAAcM,IAChBA,EAAgBD,EAAa,MAG/BgK,GAAa,SArBf,SAAgBC,EAAMC,IACf,IAAMA,EAAM1C,QAAQ,OACvB7E,GAAK,kCAAoCsH,GACzCC,EAAQ,IAEV,OAAOA,CACT,CAeyBC,CAAO,SAAUlK,GAC1C,CA1HEmK,GACAJ,GAAa,aAAcjK,GAC3BiK,GAAa,UAAW7J,IA+UpBuI,EAAW3F,SAASsH,cAAc,QAC7BC,MAAMC,MAAQ,OAEvB7B,EAAS4B,MAAME,QAAU,QACzB9B,EAAS4B,MAAM5J,OAAS,IACxBqC,SAASG,KAAKuH,YAAY/B,GAlV1BgC,KACAC,KAwHA5H,SAASC,gBAAgBsH,MAAM5J,OAAS,GACxCqC,SAASG,KAAKoH,MAAM5J,OAAS,GAC7B+F,GAAI,oCAmWJA,GAAI,yBAEJhE,EAAImI,aAAe,CACjB/K,WAAY,SAAqBS,GAS/B,OARI,IAASA,IAAU,IAAUT,GAC/BA,GAAa,EACbgL,OACS,IAAUvK,IAAU,IAAST,IACtCA,GAAa,EArKnBiL,GAAqB,UAPjB,OAAS5K,GAEXA,EAAa6K,aAOfC,cAAc/J,IAsKVgK,GAAQ,EAAG,EAAG,aAAc/D,KAAKkC,UAAUvJ,IACpCA,CACT,EAEAqL,MAAO,WACLD,GAAQ,EAAG,EAAG,QAEhB,EAEAE,MAAO,WACL,OAAO5J,CACT,EAEA6J,YAAa,SAAsBC,GAC7B,oBAAsBA,GACxBxI,EAAawI,EACbJ,GAAQ,EAAG,EAAG,cAEdpI,EAAa,WAAa,EAC1BoI,GAAQ,EAAG,EAAG,gBAElB,EAEArE,aAAc,SAAuB0E,GACnCvK,EAAY8F,WAAWyE,EACzB,EAEA9E,MAAO,WACL+E,GAAY,qBACd,EAEAC,SAAU,SAAmBC,EAAGC,GAC9BT,GAAQS,EAAGD,EAAG,WAChB,EAEAE,eAAgB,SAAmBF,EAAGC,GACpCT,GAAQS,EAAGD,EAAG,iBAChB,EAEAG,YAAa,SAAsBpD,EAAKgB,GACtCyB,GAAQ,EAAG,EAAG,UAAW/D,KAAKkC,UAAUZ,GAAMgB,EAChD,EAEAqC,2BAA4B,SAC1BpC,GAEA7I,EAAiB6I,EACjBiB,IACF,EAEAoB,0BAA2B,SACzBpC,GAEAlH,EAAgBkH,EAChBiB,IACF,EAEAoB,gBAAiB,SAA0BvC,GACzC/C,GAAI,qBAAuB+C,GAC3BvH,EAAsBuH,CACxB,EAEAwC,KAAM,SAAeC,EAAcC,GAGjCvF,GACE,OACA,sBAHMsF,GAAgB,KAAOC,EAAc,IAAMA,EAAc,IAG5B,IACnCD,EACAC,EAEJ,GAnGJ,WACE,IAAoB,IAAhB/K,EAAsB,OAE1B,SAASgL,EAAUC,GACjBnB,GAAQ,EAAG,EAAGmB,EAAEC,KAAMD,EAAEE,QAAU,IAAMF,EAAEG,QAC5C,CAEA,SAASC,EAAiBtE,EAAKuE,GAC7BhG,GAAI,uBAAyBgG,GAC7B9I,GAAiB/D,OAAOmD,SAAUmF,EAAKiE,EACzC,CAEAK,EAAiB,aAAc,eAC/BA,EAAiB,aAAc,cACjC,CAvdEE,GACA7B,KACA9J,EA+UF,WACE,SAAS4L,IACP,MAAO,CACLlB,EACE7L,OAAOgN,cAAgBjN,EACnBoD,SAASC,gBAAgB6J,WACzBjN,OAAOgN,YACblB,EACE9L,OAAOkN,cAAgBnN,EACnBoD,SAASC,gBAAgB+J,UACzBnN,OAAOkN,YAEjB,CAEA,SAASE,EAAmB/E,GAC1B,IAAIgF,EAAahF,EAAGiF,wBAClBC,EAAeR,IAEjB,MAAO,CACLlB,EAAG2B,SAASH,EAAWI,KAAM,IAAMD,SAASD,EAAa1B,EAAG,IAC5DC,EAAG0B,SAASH,EAAWK,IAAK,IAAMF,SAASD,EAAazB,EAAG,IAE/D,CAEA,SAAS7E,EAAWmC,GAClB,SAASuE,EAAaxL,GACpB,IAAIyL,EAAeR,EAAmBjL,GAEtC0E,GACE,4BACE6E,EACA,WACAkC,EAAa/B,EACb,OACA+B,EAAa9B,GAEjBT,GAAQuC,EAAa9B,EAAG8B,EAAa/B,EAAG,iBAC1C,CAEA,IAAIH,EAAOtC,EAAS1B,MAAM,KAAK,IAAM0B,EACnCyE,EAAWC,mBAAmBpC,GAC9BvJ,EACEgB,SAAS4K,eAAeF,IACxB1K,SAAS6K,kBAAkBH,GAAU,GAErC9N,IAAcoC,GAChB0E,GACE,kBACE6E,EACA,+CAEJL,GAAQ,EAAG,EAAG,aAAc,IAAMK,IAElCiC,EAAaxL,EAEjB,CAEA,SAAS8L,IACP,IAAIvC,EAAO1L,OAAOoJ,SAASsC,KACvBrC,EAAOrJ,OAAOoJ,SAASC,KAEvB,KAAOqC,GAAQ,MAAQA,GACzBzE,EAAWoC,EAEf,CAEA,SAAS6E,IACP,SAASC,EAAU9F,GACjB,SAAS+F,EAAY5B,GACnBA,EAAE6B,iBAGFpH,EAAWd,KAAKmI,aAAa,QAC/B,CAEI,MAAQjG,EAAGiG,aAAa,SAC1BvK,GAAiBsE,EAAI,QAAS+F,EAElC,CAEAG,MAAMpG,UAAUuB,QAAQ8E,KACtBrL,SAASsL,iBAAiB,gBAC1BN,EAEJ,CAEA,SAASO,IACP3K,GAAiB/D,OAAQ,aAAciO,EACzC,CAEA,SAASU,IAEPrI,WAAW2H,EAAmBrN,EAChC,CAEA,SAASgO,IAEHL,MAAMpG,UAAUuB,SAAWvG,SAASsL,kBACtC5H,GAAI,qCACJqH,IACAQ,IACAC,KAEA5L,GACE,0FAGN,CAEI5B,EAAY+H,OACd0F,IAEA/H,GAAI,+BAGN,MAAO,CACLI,WAAYA,EAEhB,CArcgB4H,GACd9H,GAAS,OAAQ,+BACjB/D,GACF,CA0BA,SAAS2G,GAAUmF,GACjB,IAAIC,EAAYD,EAAIpH,MAAM,YAE1B,GAAyB,IAArBqH,EAAUrN,OAAc,CAC1B,IAAImL,EACF,KAAOkC,EAAU,GAAGtG,OAAO,GAAGC,cAAgBqG,EAAU,GAAGpH,MAAM,GACnExB,KAAK0G,GAAQ1G,KAAK2I,UACX3I,KAAK2I,GACZ/L,GACE,gBACE+L,EACA,uBACAjC,EACA,+DAEN,CACF,CAqDA,SAASzC,GAAaC,EAAMC,GACtBvK,IAAcuK,GAAS,KAAOA,GAAS,SAAWA,IACpDnH,SAASG,KAAKoH,MAAML,GAAQC,EAC5BzD,GAAI,QAAUwD,EAAO,YAAcC,EAAQ,KAE/C,CAiBA,SAAS0E,GAAmBtL,GAC1B,IAAIuL,EAAW,CACbC,IAAK,SAAUC,GACb,SAASC,IACPrI,GAASrD,EAAQyL,UAAWzL,EAAQ2L,UACtC,CAEA7L,EAAoB2L,GAAaC,EAEjCrL,GAAiB/D,OAAQmP,EAAWC,EAAa,CAAEvL,SAAS,GAC9D,EACAyL,OAAQ,SAAUH,GAChB,IA9NuB9G,EAAIC,EAAKnE,EA8N5BiL,EAAc5L,EAAoB2L,UAC/B3L,EAAoB2L,GA/NJ9G,EAiOHrI,OAjOOsI,EAiOC6G,EAjOIhL,EAiOOiL,EAhO3C/G,EAAGpE,oBAAoBqE,EAAKnE,GAAM,EAiOhC,GAGET,EAAQ6L,YAAchB,MAAMpG,UAAUqH,KACxC9L,EAAQyL,UAAYzL,EAAQ6L,WAAW,GACvC7L,EAAQ6L,WAAWC,IAAIP,EAASvL,EAAQ+L,UAExCR,EAASvL,EAAQ+L,QAAQ/L,EAAQyL,WAGnCtI,GACE0B,GAAsB7E,EAAQ+L,QAC5B,oBACA/L,EAAQ2L,UAEd,CAEA,SAASnE,GAAqBuE,GAC5BT,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,kBACXE,WAAY,CAAC,iBAAkB,0BAEjCP,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,sBACXE,WAAY,CAAC,qBAAsB,8BAErCP,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,gBACXE,WAAY,CAAC,eAAgB,wBAE/BP,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,QACXF,UAAW,UAEbH,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,WACXF,UAAW,YAEbH,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,aACXF,UAAW,cAEbH,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,qBACXF,UAAW,sBAEbH,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,QACXE,WAAY,CAAC,aAAc,iBAE7BP,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,qBACXF,UAAW,qBAEbH,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,cACXF,UAAW,eAEbH,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,YACXF,UAAW,aAEbH,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,eACXF,UAAW,gBAEbH,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,mBACXE,WAAY,CACV,kBACA,wBACA,oBACA,mBACA,sBAGJP,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,uBACXE,WAAY,CACV,sBACA,4BACA,wBACA,uBACA,0BAGJP,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,iBACXE,WAAY,CACV,gBACA,sBACA,kBACA,iBACA,oBAGA,UAAYtN,GACd+M,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,iBACXF,UAAW,UAGjB,CAEA,SAASO,GAAc1F,EAAU2F,EAAiBC,EAAOnD,GAWvD,OAVIkD,IAAoB3F,IAChBA,KAAY4F,IAChB7M,GACEiH,EAAW,8BAAgCyC,EAAO,sBAEpDzC,EAAW2F,GAEb9I,GAAI4F,EAAO,+BAAiCzC,EAAW,MAGlDA,CACT,CAEA,SAASc,KACP9J,EAAiB0O,GACf1O,EACAD,EACA2D,EACA,SAEJ,CAEA,SAASqG,KACPnI,EAAgB8M,GACd9M,EACAD,EACA+C,GACA,QAEJ,CAEA,SAASuF,KAmXT,IACM4E,GAnXA,IAAS5P,GACXiL,GAAqB,OAkXnB2E,EAAqB,EAAIzO,EAI3BpB,OAAO8P,kBACP9P,OAAO+P,uBAEHF,EACFG,KAEA1P,EArGN,WACE,SAAS2P,EAAqBC,GAC5B,SAASC,EAAqBC,IACxB,IAAUA,EAAQC,WACpBxJ,GAAI,uBAAyBuJ,EAAQE,KACrCF,EAAQrM,iBAAiB,OAAQwM,GAAa,GAC9CH,EAAQrM,iBAAiB,QAASyM,GAAY,GAC9CC,EAASC,KAAKN,GAElB,CAEsB,eAAlBF,EAASzD,MAAoD,QAA3ByD,EAASS,cAC7CR,EAAqBD,EAAS/N,QACH,cAAlB+N,EAASzD,MAClB8B,MAAMpG,UAAUuB,QAAQ8E,KACtB0B,EAAS/N,OAAOsM,iBAAiB,OACjC0B,EAGN,CAEA,SAASS,EAAgBR,GACvBK,EAASI,OAAOJ,EAAS7I,QAAQwI,GAAU,EAC7C,CAEA,SAASU,EAAwBV,GAC/BvJ,GAAI,yBAA2BuJ,EAAQE,KACvCF,EAAQnM,oBAAoB,OAAQsM,GAAa,GACjDH,EAAQnM,oBAAoB,QAASuM,GAAY,GACjDI,EAAgBR,EAClB,CAEA,SAASW,EAAoBxK,EAAOkG,EAAMuE,GACxCF,EAAwBvK,EAAMpE,QAC9B4E,GAAS0F,EAAMuE,EAAW,KAAOzK,EAAMpE,OAAOmO,IAChD,CAEA,SAASC,EAAYhK,GACnBwK,EAAoBxK,EAAO,YAAa,eAC1C,CAEA,SAASiK,EAAWjK,GAClBwK,EAAoBxK,EAAO,kBAAmB,oBAChD,CAEA,SAAS0K,EAAiBC,GACxBnK,GACE,mBACA,qBAAuBmK,EAAU,GAAG/O,OAAS,IAAM+O,EAAU,GAAGzE,MAIlEyE,EAAUxH,QAAQuG,EACpB,CAEA,SAASkB,IACP,IAAIhP,EAASgB,SAASiO,cAAc,QAClCC,EAAS,CACPC,YAAY,EACZC,mBAAmB,EACnBC,eAAe,EACfC,uBAAuB,EACvBC,WAAW,EACXC,SAAS,GAQb,OALAC,EAAW,IAAI9B,EAAiBmB,GAEhCpK,GAAI,gCACJ+K,EAASC,QAAQ1P,EAAQkP,GAElBO,CACT,CAEA,IAAInB,EAAW,GACbX,EACE9P,OAAO8P,kBAAoB9P,OAAO+P,uBACpC6B,EAAWT,IAEb,MAAO,CACLhG,WAAY,WACN,eAAgByG,IAClB/K,GAAI,oCACJ+K,EAASzG,aACTsF,EAAS/G,QAAQoH,GAErB,EAEJ,CAaqBgB,IAGjBjL,GAAI,mDACJmJ,OA7XAnJ,GAAI,uBAER,CAuQA,SAASmJ,KACH,IAAM5O,IACRyF,GAAI,gBAAkBzF,EAAW,MACjCC,EAAgB0Q,aAAY,WAC1BhL,GAAS,WAAY,gBAAkB3F,EACzC,GAAG6D,KAAK+M,IAAI5Q,IAEhB,CAmHA,SAASwD,GAAiBqN,EAAM5J,GAC9B,IAAI6J,EAAS,EAMb,OALA7J,EAAKA,GAAMlF,SAASG,KAGpB4O,EAAS,QADTA,EAAS/O,SAASgP,YAAYvN,iBAAiByD,EAAI,OACxB,EAAI6J,EAAOD,GAE/BzE,SAAS0E,EAAQhS,EAC1B,CAUA,SAASoF,GAAc8M,EAAM3B,GAO3B,IANA,IAAI4B,EAAiB5B,EAAS/O,OAC5B4Q,EAAQ,EACRC,EAAS,EACTC,EAAOjK,GAAsB6J,GAC7BK,EAAQzM,KAAKC,MAENyM,EAAI,EAAGA,EAAIL,EAAgBK,KAClCJ,EACE7B,EAASiC,GAAGpF,wBAAwB8E,GACpCxN,GAAiB,SAAW4N,EAAM/B,EAASiC,KACjCH,IACVA,EAASD,GAWb,OAPAG,EAAQzM,KAAKC,MAAQwM,EAErB5L,GAAI,UAAYwL,EAAiB,kBACjCxL,GAAI,kCAAoC4L,EAAQ,MA3BlD,SAAyBA,GACnBA,EAAQhQ,EAAiB,GAE3BoE,GAAI,gCADJpE,EAAiB,EAAIgQ,GACiC,KAE1D,CAwBEE,CAAgBF,GAETF,CACT,CAEA,SAASpN,GAAmByN,GAC1B,MAAO,CACLA,EAAWjO,aACXiO,EAAW7Q,aACX6Q,EAAW5N,wBACX4N,EAAW5Q,wBAEf,CAEA,SAASyD,GAAkB2M,EAAMS,GAM/B,IAAIpC,EAAWtN,SAASsL,iBAAiB,IAAMoE,EAAM,KAIrD,OAFwB,IAApBpC,EAAS/O,SANXqB,GAAK,uBAAyB8P,EAAM,mBAC7B1P,SAASsL,iBAAiB,WAO5BnJ,GAAc8M,EAAM3B,EAC7B,CAEA,SAASlL,KACP,OAAOpC,SAASsL,iBAAiB,SACnC,CAgGA,SAAS1I,GACP+M,EACAC,EACA1G,EACAC,GAiDA,IAAI0G,EAAeC,GAxCnB,WACE,SAASC,EAAeC,EAAGC,GAEzB,QADanO,KAAK+M,IAAImB,EAAIC,IAAM9Q,EAElC,CAOA,OALA0Q,EACEjT,IAAcsM,EAAe3H,EAAU1D,KAAoBqL,EAC7D4G,EACElT,IAAcuM,EAAc5G,GAAS9C,KAAmB0J,EAGxD4G,EAAepS,EAAQkS,IACtBxS,GAAkB0S,EAAexQ,EAAOuQ,EAE7C,CA2BII,IAA0B,SAAWP,IAxB9BA,IAAgB,CAAErM,KAAM,EAAGrF,SAAU,EAAGgL,KAAM,MAKrDpL,KAAkBY,GACjBpB,GAAkBoC,KAAiBhB,GAUpC+J,GAAYoH,GACDD,IAAgB,CAAE1R,SAAU,IANzCyF,GAAI,+BAcJyM,KA9CAjI,GAHAvK,EAASkS,EACTtQ,EAAQuQ,EAEeH,GAmD3B,CAIA,SAAS/L,GAAS+L,EAAcC,EAAkB1G,EAAcC,GAQrD/J,GAAiBuQ,KAAgBrS,EAIxCoG,GAAI,4BAA8BiM,IAV5BA,IAAgB,CAAElM,MAAO,EAAG2M,UAAW,EAAG9M,KAAM,IACpDI,GAAI,kBAAoBkM,GAYL,SAAjBD,EACF/M,GAAW+M,EAAcC,EAAkB1G,EAAcC,GAEzDxG,GACEgN,EACAC,EACA1G,EACAC,GAIR,CAEA,SAASgH,KACF/Q,IACHA,GAAgB,EAChBsE,GAAI,0BAENR,aAAa7D,GACbA,EAAqB8D,YAAW,WAC9B/D,GAAgB,EAChBsE,GAAI,0BACJA,GAAI,KACN,GAAGjG,EACL,CAEA,SAASkG,GAAagM,GACpBhS,EAAS4D,EAAU1D,KACnB0B,EAAQgD,GAAS9C,KAEjByI,GAAQvK,EAAQ4B,EAAOoQ,EACzB,CAEA,SAASnH,GAAYoH,GACnB,IAAIS,EAAMxS,EACVA,EAAiBD,EAEjB8F,GAAI,wBAA0BkM,GAC9BO,KACAxM,GAAa,SAEb9F,EAAiBwS,CACnB,CAEA,SAASnI,GAAQvK,EAAQ4B,EAAOoQ,EAAclK,EAAKgB,GASjD,IAEIpC,GAYA,IAAStF,IArBPnC,IAAc6J,EAChBA,EAAevH,EAEfwE,GAAI,yBAA2B+C,GAcjC/C,GAAI,kCARFW,EACE7F,EACA,IAHOb,EAAS,IAAM4B,EAKtB,IACAoQ,GACC/S,IAAc6I,EAAM,GAAK,IAAMA,IAEa,KACjDzG,EAAOsR,YAAYjS,EAAQgG,EAASoC,GAOxC,CA8GA,SAASxB,KACH,YAAcjF,SAASuQ,YACzB1T,OAAOoC,OAAOqR,YAAY,4BAA6B,IAE3D,CAOD,CA7wCA,E,sBCXD,WAWC,SAAW1T,GACV,GAAsB,qBAAXC,OAAX,CAEA,IAk5CkC2T,EAl5C9BC,EAAQ,EACVC,GAAa,EACbC,GAAqB,EAErBC,EAAeC,EACfC,EAAQ,gBACRxS,EAAWwS,EAAMvS,OACjB6L,EAAe,KACf2G,EAAwBlU,OAAOkU,sBAC/BtS,EAAuB+B,OAAOwQ,OAAO,CACnCtS,IAAK,EACL+D,OAAQ,EACR7D,WAAY,EACZC,sBAAuB,IAEzBoS,EAAW,CAAC,EACZ3B,EAAQ,KACR4B,EAAW1Q,OAAOwQ,OAAO,CACvBlU,YAAY,EACZE,eAAgB,KAChBC,WAAY,KACZkU,aAAc,EACd/T,YAAa,KACbgU,aAAa,EACbpT,aAAa,EACbqT,qBAAqB,EACrB3K,wBAAyB,aACzB4K,GAAI,gBACJrT,SAAU,GACVyF,KAAK,EACL6N,UAAWC,IACXC,SAAUD,IACVE,UAAW,EACXC,SAAU,EACVvT,aAAa,EACbU,WAAY,SACZ8S,WAAW,EACXC,YAAY,EACZC,WAAW,EACXC,eAAgB,IAChB5S,UAAW,EACXwH,uBAAwB,SACxBqL,QAAS,WACP,OAAO,CACT,EACAC,SAAU,WAAa,EACvBC,OAAQ,WAAa,EACrBvS,UAAW,WACTC,EAAK,iCACP,EACAuS,aAAc,WAAa,EAC3BC,aAAc,WAAa,EAC3BC,UAAW,WAAa,EACxBC,SAAU,WACR,OAAO,CACT,IAgqCAC,EAAa,CAAC,EAyMd1V,OAAOkI,SAAWnI,KAdY4T,EAeP3T,OAAOkI,QAdzByN,GAEKhC,EAAEgC,GAAGC,eACfjC,EAAEgC,GAAGC,aAAe,SAAwBlS,GAK1C,OAAOyC,KAAK0P,OAAO,UAAUC,MAJ7B,SAAcC,EAAO3F,GACnB4F,EAAY5F,EAAS1M,EACvB,IAEwCuS,KAC1C,GARAC,EAAK,GAAI,sDAiBX,EAAO,IAAW,sBAAP,EAAF,GAAS,mCAKpBlW,OAAO4V,aAAe5V,OAAO4V,cAAgBO,GA56CV,CA4DnC,SAASC,IACP,OACEpW,OAAO8P,kBACP9P,OAAO+P,wBACP/P,OAAOqW,mBAEX,CAEA,SAAStS,EAAiBsE,EAAIC,EAAKnE,GACjCkE,EAAGtE,iBAAiBuE,EAAKnE,GAAM,EACjC,CAEA,SAASF,EAAoBoE,EAAIC,EAAKnE,GACpCkE,EAAGpE,oBAAoBqE,EAAKnE,GAAM,EACpC,CAkCA,SAASmS,EAAgBC,GACvB,OAAOtC,EAAQ,IAdjB,SAAiBsC,GACf,IAAIC,EAAS,cAAgBD,EAS7B,OAPIvW,OAAO0N,MAAQ1N,OAAOyW,OACxBD,EACExW,OAAOgL,cAAgBhL,OAAOgL,aAAaO,MACvCvL,OAAOgL,aAAaO,QAAU,KAAOgL,EACrC,qBAAuBA,GAGxBC,CACT,CAGuBE,CAAQH,GAAY,GAC3C,CAEA,SAASI,EAAaJ,GACpB,OAAOnC,EAASmC,GAAYnC,EAASmC,GAAU1P,IAAMgN,CACvD,CAEA,SAAShN,EAAI0P,EAAU3N,GACrBgO,EAAO,MAAOL,EAAU3N,EAAK+N,EAAaJ,GAC5C,CAEA,SAASL,EAAKK,EAAU3N,GACtBgO,EAAO,OAAQL,EAAU3N,EAAK+N,EAAaJ,GAC7C,CAEA,SAASxT,EAAKwT,EAAU3N,GACtBgO,EAAO,OAAQL,EAAU3N,GAAK,EAChC,CAEA,SAASgO,EAAOnK,EAAM8J,EAAU3N,EAAKiO,IAC/B,IAASA,GAAW,kBAAoB7W,OAAO6I,SAEjDA,QAAQ4D,GAAM6J,EAAgBC,GAAW3N,EAE7C,CAEA,SAASkO,EAAevQ,GACtB,SAASwQ,IAOPC,EAAc,UACdA,EAAc,SAEdC,GATA,WACEC,EAAQC,GACRC,EAAgBb,GAChBc,EAAG,YAAaF,EAClB,GAKmBA,EAAa,OAClC,CAiBA,SAASG,EAAeC,GACtB,MAA4B,eAAxBA,EAAUC,UACL,GAECD,EAAUE,WAAajK,SAAS+J,EAAUE,WAAY,IAAM,IAC5DF,EAAUG,cAChBlK,SAAS+J,EAAUG,cAAe,IAClC,EAEN,CAEA,SAASC,EAAcJ,GACrB,MAA4B,eAAxBA,EAAUC,UACL,GAECD,EAAUK,eAChBpK,SAAS+J,EAAUK,eAAgB,IACnC,IACML,EAAUM,kBAChBrK,SAAS+J,EAAUM,kBAAmB,IACtC,EAEN,CAEA,SAASb,EAAcc,GACrB,IAAIjW,EAAMoH,OAAOmL,EAASmC,GAAU,MAAQuB,IAC1ChW,EAAMmH,OAAOmL,EAASmC,GAAU,MAAQuB,IACxCC,EAAYD,EAAUE,cACtB5L,EAAOnD,OAAOkO,EAAYY,IAE5BlR,EAAI0P,EAAU,YAAcwB,EAAY,gBAAkBjW,EAAM,IAAMD,GAElEuK,EAAOtK,IACTsK,EAAOtK,EACP+E,EAAI0P,EAAU,OAASwB,EAAY,kBAGjC3L,EAAOvK,IACTuK,EAAOvK,EACPgF,EAAI0P,EAAU,OAASwB,EAAY,kBAGrCZ,EAAYY,GAAa,GAAK3L,CAChC,CAqEA,SAAS6L,EAAWpT,GAClB,OAAO+D,EAAIjB,MAAMiB,EAAIhB,QAAQ,KAAOmM,EAAelP,EACrD,CA8CA,SAASqT,EAAqBC,EAAQ5B,GAs5BxC,IAA6BZ,EAAIyC,EAAMC,EAAV1C,EAr5BzB,WA3BF,IACM2C,EACFC,EA0BAC,EAAQ,iBAAkB,aA3BxBF,EAAenV,SAASG,KAAKgK,wBAC/BiL,EAAiBpB,EAAYgB,OAAO7K,wBAE/BhG,KAAKkC,UAAU,CACpBiP,aAAcF,EAAezX,OAC7B4X,YAAaH,EAAe7V,MAC5BiW,aAAc1T,KAAKpD,IACjBsB,SAASC,gBAAgBuV,aACzB3Y,OAAO4Y,aAAe,GAExBC,YAAa5T,KAAKpD,IAChBsB,SAASC,gBAAgByV,YACzB7Y,OAAO8Y,YAAc,GAEvBC,UAAWvL,SAAS+K,EAAe7K,IAAM4K,EAAa5K,IAAK,IAC3DsL,WAAYxL,SAAS+K,EAAe9K,KAAO6K,EAAa7K,KAAM,IAC9DN,UAAWnN,OAAOkN,YAClBD,WAAYjN,OAAOgN,YACnBiM,eAAgB9V,SAASC,gBAAgBuV,aACzCO,cAAe/V,SAASC,gBAAgByV,YACxCM,aAAcnZ,OAAO4Y,YACrBQ,YAAapZ,OAAO8Y,cAMmCX,EAAQ5B,EACjE,EAm5B6B6B,EAl5BS,GAm5BnC1C,EADgC2C,EAl5BO9B,KAo5B1Cb,EAAW2C,GAAW/R,YAAW,WAC/BoP,EAAW2C,GAAW,KACtB1C,GACF,GAAGyC,GAt5BL,CAoDA,SAAShL,EAAmBjL,GAC1B,IAAIoW,EAAiBpW,EAAOmL,wBAI5B,OAFAP,EAAgBwJ,GAET,CACL1K,EAAG5G,KAAKoU,MAAMpQ,OAAOsP,EAAe9K,MAAQxE,OAAOsE,EAAa1B,IAChEC,EAAG7G,KAAKoU,MAAMpQ,OAAOsP,EAAe7K,KAAOzE,OAAOsE,EAAazB,IAEnE,CAEA,SAASwN,EAAuBC,GA6B9B,IAAI1U,EAAS0U,EACPnM,EAAmB+J,EAAYgB,QAC/B,CAAEtM,EAAG,EAAGC,EAAG,GACf0N,EAvBO,CACL3N,EAAG5C,OAAOkO,EAAYzU,OAASmC,EAAOgH,EACtCC,EAAG7C,OAAOkO,EAAYrW,QAAU+D,EAAOiH,GAuB3CjF,EACE0P,EACA,8CACE1R,EAAOgH,EACP,MACAhH,EAAOiH,EACP,KAGA9L,OAAO0N,MAAQ1N,OAAOyW,MAxCxBlJ,EAAeiM,EACf5N,IACA/E,EAAI0P,EAAU,OAWVvW,OAAOgL,aACThL,OAAOgL,aAAa,YAAcuO,EAAY,SAAW,KACvDC,EAAY3N,EACZ2N,EAAY1N,GAGd/I,EACEwT,EACA,wEAwBR,CAEA,SAAS3K,KACH,IAAUyL,EAAG,WAAY9J,GAC3BkM,IAEArC,EAAgBb,EAEpB,CAoDA,SAASmD,EAAQnT,GACf,IAAIoT,EAAW,CAAC,EAEhB,GAAkC,IAA9B1Q,OAAOkO,EAAYzU,QAA+C,IAA/BuG,OAAOkO,EAAYrW,QAAe,CACvE,IAAI4F,EAAOuR,EAAW,GAAGvQ,MAAM,KAC/BiS,EAAW,CACT9N,EAAGnF,EAAK,GACRoF,EAAGpF,EAAK,GAEZ,MACEiT,EAAW,CACT9N,EAAGsL,EAAYzU,MACfoJ,EAAGqL,EAAYrW,QAInBuW,EAAG9Q,EAAO,CACR4R,OAAQhB,EAAYgB,OACpBxL,QAAS1D,OAAO0Q,EAAS9N,GACzBa,QAASzD,OAAO0Q,EAAS7N,GACzBW,KAAM0K,EAAY1K,MAEtB,CAEA,SAAS4K,EAAGuC,EAAUC,GACpB,OAAOC,EAASvD,EAAUqD,EAAUC,EACtC,CA4HA,IAtRME,EAzGAC,EArHAtT,EACA5F,EACAqX,EACAZ,EAifF3O,EAAMrC,EAAMG,KACdyQ,EAAc,CAAC,EACfZ,EAAW,KAET,8BAAgC3N,EAtBpC,WAEE,IAAK,IAAI2N,KAAYnC,EACnBoE,EACE,wBACAyB,EAAkB1D,GAClBnC,EAASmC,GAAU4B,OACnB5B,EAGN,CAaE2D,GA5YEjG,KAAW,GAAKrL,GAAKjB,MAAM,EAAGlG,IAC9BmH,EAAIjB,MAAMlG,GAAUiG,MAAM,KAAK,KAAM0M,GA9GnC1N,EAAOkC,EAAIjB,MAAMlG,GAAUiG,MAAM,KACjC5G,EAAS4F,EAAK,GAAK8G,SAAS9G,EAAK,GAAI,IAAM,EAC3CyR,EAAS/D,EAAS1N,EAAK,KAAO0N,EAAS1N,EAAK,IAAIyR,OAChDZ,EAAY3S,iBAAiBuT,GAwfjChB,EAtfO,CACLgB,OAAQA,EACR1D,GAAI/N,EAAK,GACT5F,OAAQA,EAASwW,EAAeC,GAAaI,EAAcJ,GAC3D7U,MAAOgE,EAAK,GACZ+F,KAAM/F,EAAK,IAkfb6P,EAAWY,EAAY1C,GACnBL,EAASmC,KACXnC,EAASmC,GAAU4D,QAAS,IAzY1BH,EAAU7C,EAAY1K,OAAQ,CAAE3E,KAAM,EAAGC,MAAO,EAAGhI,UAAW,KAGhE8G,EAAI0P,EAAU,gDAGTyD,GAsVT,SAAqBzD,GACnB,IAAIwD,GAAU,EAad,OAXK3F,EAASmC,KACZwD,GAAU,EACVhX,EACEoU,EAAY1K,KACV,oBACA8J,EACA,kBACA3N,IAICmR,CACT,CAiCoCK,CAAY7D,KAC5C1P,EAAI0P,EAAU,aAAe3N,GApS3BmR,GAAU,EAEV,OAAS5C,EAAYgB,SACvBpV,EAAKwT,EAAU,WAAaY,EAAY1C,GAAK,eAC7CsF,GAAU,GAELA,GAzKT,WA8BE,IARQM,EAQJC,EAAS/T,EAAM+T,OACjB/F,EAAcH,EAASmC,IAAanC,EAASmC,GAAUhC,YAEzD,GAAIA,GAAe,GAAK+F,IAAW,UAN1B/F,EAAYrK,cAAgBqE,MAzBnC,WACE,IAAImE,EAAI,EACNsH,GAAU,EAQZ,IANAnT,EACE0P,EACA,wDACEhC,GAGG7B,EAAI6B,EAAY7S,OAAQgR,IAC7B,GAAI6B,EAAY7B,KAAO4H,EAAQ,CAC7BN,GAAU,EACV,KACF,CAEF,OAAOA,CACT,CAQ2CO,IALrCF,EAAajG,EAASmC,IAAanC,EAASmC,GAAU8D,WAC1DxT,EAAI0P,EAAU,gCAAkC8D,GACzCC,IAAWD,IAUpB,MAAM,IAAIG,MACR,qCACEF,EACA,QACAnD,EAAYgB,OAAO1D,GACnB,kBACAlO,EAAMG,KACN,sHAIN,OAAO,CACT,CA2Z+B+T,IA1I/B,WAGE,OAFIrG,EAASmC,IAAanC,EAASmC,GAAU1V,UAoHzCuT,EAASmC,KACXnC,EAASmC,GAAU1V,UAAW,GAnHxBsW,EAAY1K,MAClB,IAAK,QACHiO,EAAYvD,EAAYgB,QACxB,MAGF,IAAK,UAjQqB9Q,EAkQH4Q,EAAW,GAjQpCpR,EACE0P,EACA,8BACEY,EAAYgB,OAAO1D,GACnB,cACApN,EACA,KAGJgQ,EAAG,YAAa,CACdc,OAAQhB,EAAYgB,OACpB3Q,QAASF,KAAKC,MAAMF,KAGtBR,EAAI0P,EAAU,MAoPV,MAGF,IAAK,aACHmD,EAAQ,gBACR,MAGF,IAAK,aACHA,EAAQ,gBACR,MAGF,IAAK,aACHtF,EAASmC,GAAUtW,WAAaqH,KAAKC,MAAM0Q,EAAW,IACtD,MAGF,IAAK,WACHqB,GAAuB,GACvB,MAGF,IAAK,iBACHA,GAAuB,GACvB,MAGF,IAAK,WACHpB,EACE9D,EAASmC,IAAanC,EAASmC,GAAU4B,OACzC5B,GA/OR,WACE,SAASoE,EAAYlO,EAAMtI,GACzB,SAASyW,IACHxG,EAASK,GACXyD,EAAqB9D,EAASK,GAAI0D,OAAQ1D,GAE1CoG,GAEJ,CAEC,CAAC,SAAU,UAAUnR,SAAQ,SAAUpB,GACtCzB,EAAI4N,EAAIhI,EAAOnE,EAAM,8BACrBnE,EAAKnE,OAAQsI,EAAKsS,EACpB,GACF,CAEA,SAASC,IACPF,EAAY,UAAW1W,EACzB,CAMA,IAAIwQ,EAAK8B,EAHPoE,EAAY,OAAQ5W,GAOlBqQ,EAASK,KACXL,EAASK,GAAIqG,aAAeD,EAEhC,CAkNME,GACA,MAGF,IAAK,eAnNH3G,EAASmC,IAAanC,EAASmC,GAAUuE,eAC3C1G,EAASmC,GAAUuE,sBACZ1G,EAASmC,GAAUuE,cAmNxB,MAGF,IAAK,aAhGHpP,EAiGWuM,EAAW,GAjGNvQ,MAAM,KAAK,IAAM,GACnCmG,EAAWC,mBAAmBpC,IAC9BvJ,EACEgB,SAAS4K,eAAeF,IACxB1K,SAAS6K,kBAAkBH,GAAU,KArCnCD,EAAeR,EAAmBjL,GAEtC0E,EACE0P,EACA,4BACE7K,EACA,WACAkC,EAAa/B,EACb,OACA+B,EAAa9B,GAEjByB,EAAe,CACb1B,EAAG+B,EAAa/B,EAChBC,EAAG8B,EAAa9B,GAGlBF,IACA/E,EAAI0P,EAAU,OAwBLvW,OAAO0N,MAAQ1N,OAAOyW,KAC/B5P,EAAI0P,EAAU,iBAAmB7K,EAAO,cArBpC1L,OAAOgL,aACThL,OAAOgL,aAAahE,aAAa0E,GAEjC7E,EACE0P,EACA,iBACE7K,EACA,gDAuGJ,MAGF,IAAK,QACHC,EAAYwL,GACZ,MAGF,IAAK,OACHJ,IACAM,EAAG,SAAUF,EAAYgB,QACzB,MAGF,QAEkC,IAA9BlP,OAAOkO,EAAYzU,QACY,IAA/BuG,OAAOkO,EAAYrW,QAEnBiC,EACE,iCACEoU,EAAY1K,KADd,yGAMFsK,IA/JR,IAEQnJ,EAiCFlC,EACFmC,EACA1L,EA/M0BkF,CA6U9B,CAsDM2T,KAIJ9E,EAAKK,EAAU,YAAc3N,EAEjC,CAEA,SAASkR,EAASvD,EAAUqD,EAAUC,GACpC,IAAI1V,EAAO,KACT+N,EAAS,KAEX,GAAIkC,EAASmC,GAAW,CAGtB,GAAI,oBAFJpS,EAAOiQ,EAASmC,GAAUqD,IAKxB,MAAM,IAAIqB,UACRrB,EAAW,cAAgBrD,EAAW,uBAHxCrE,EAAS/N,EAAK0V,EAMlB,CAEA,OAAO3H,CACT,CAEA,SAASgJ,EAAsB/C,GAC7B,IAAI5B,EAAW4B,EAAO1D,UACfL,EAASmC,EAClB,CAEA,SAASmE,EAAYvC,GACnB,IAAI5B,EAAW4B,EAAO1D,GACtB,IAAgD,IAA5CqF,EAASvD,EAAU,UAAWA,GAAlC,CAIA1P,EAAI0P,EAAU,oBAAsBA,GAEpC,IAEM4B,EAAOgD,YACThD,EAAOgD,WAAWC,YAAYjD,EAElC,CAAE,MAAOjU,GACPnB,EAAKmB,EACP,CAEA4V,EAASvD,EAAU,WAAYA,GAC/B1P,EAAI0P,EAAU,MACd2E,EAAsB/C,EAdtB,MAFEtR,EAAI0P,EAAU,0CAiBlB,CAEA,SAASxJ,EAAgBwJ,GACnB,OAAShJ,GAWX1G,EACE0P,EACA,uBAZFhJ,EAAe,CACb1B,EACE7L,OAAOgN,cAAgBjN,EACnBoD,SAASC,gBAAgB6J,WACzBjN,OAAOgN,YACblB,EACE9L,OAAOkN,cAAgBnN,EACnBoD,SAASC,gBAAgB+J,UACzBnN,OAAOkN,cAIwBrB,EAAI,IAAM0B,EAAazB,EAGlE,CAEA,SAASsL,EAAgBb,GACnB,OAAShJ,IACXvN,OAAO4L,SAAS2B,EAAa1B,EAAG0B,EAAazB,GAC7CjF,EACE0P,EACA,sBAAwBhJ,EAAa1B,EAAI,IAAM0B,EAAazB,GAE9D2N,IAEJ,CAEA,SAASA,IACPlM,EAAe,IACjB,CAEA,SAAS5B,EAAYwL,GAMnBtQ,EACEsQ,EAAY1C,GACZ,4BACG,SAAW0C,EAAY1K,KAAO,YAAc,WAEjDM,EAAgBoK,EAAY1C,IAC5BwC,GAXA,WACEC,EAAQC,GACRqB,EAAQ,QAAS,QAASrB,EAAYgB,OAAQhB,EAAY1C,GAC5D,GAQkB0C,EAAa,QACjC,CAEA,SAASD,EAAQC,GAmBf,SAASkE,EAAQtD,GAMVjE,GAAsB,MAAQqD,EAAYY,KAC7CjE,GAAqB,EACrBjN,EAAI0P,EAAU,wDAycpB,WACE,SAAS+E,IACP,SAASC,EAAYC,GACnB,SAASC,EAAa1D,GACpB,MACE,SACC3D,EAASoH,IAAcpH,EAASoH,GAAWrD,OAAOzN,MAAMqN,GAE7D,CAEA,SAAS2D,EAAUrT,GACjB,OAAO,OAASA,EAAGsT,YACrB,CAGEvH,EAASoH,IACTE,EAAUtH,EAASoH,GAAWrD,UAC7BsD,EAAa,WAAaA,EAAa,WAExCjD,EACE,oBACA,SACApE,EAASoH,GAAWrD,OACpBqD,EAGN,CAEA7X,OAAO8F,KAAK2K,GAAU1K,SAAQ,SAAUoF,GACtCyM,EAAYzM,EACd,GACF,CAEA,SAASmC,EAAiBC,GACxBrK,EACE,SACA,sBAAwBqK,EAAU,GAAG/O,OAAS,IAAM+O,EAAU,GAAGzE,MAEnEmP,EAAQN,EAAc,GACxB,CAEA,SAASnK,IACP,IAAIhP,EAASgB,SAASiO,cAAc,QAClCC,EAAS,CACPC,YAAY,EACZC,mBAAmB,EACnBC,eAAe,EACfC,uBAAuB,EACvBC,WAAW,EACXC,SAAS,GAEA,IAAI7B,EAAiBmB,GAEzBY,QAAQ1P,EAAQkP,EAC3B,CAEA,IAAIvB,EAAmBsG,IACnBtG,GACFqB,GAEJ,CApgBM0K,GAEJ,CAEA,SAASC,EAAiB/D,IA/B1B,SAAsBA,GACfZ,EAAY1C,IAIjB0C,EAAYgB,OAAOzN,MAAMqN,GAAaZ,EAAYY,GAAa,KAC/DlR,EACEsQ,EAAY1C,GACZ,WACE8B,EACA,KACAwB,EACA,WACAZ,EAAYY,GACZ,OAZFlR,EAAI,YAAa,yBAcrB,CAgBEkV,CAAahE,GACbsD,EAAQtD,EACV,CAEA,IAAIxB,EAAWY,EAAYgB,OAAO1D,GAE9BL,EAASmC,KACPnC,EAASmC,GAAUvB,YACrB8G,EAAiB,UAEf1H,EAASmC,GAAUtB,WACrB6G,EAAiB,SAGvB,CAEA,SAAS7E,EAAW9S,EAAMgT,EAAa6E,GAGnCA,IAAc7E,EAAY1K,MAC1ByH,IAEClU,OAAOic,SAERpV,EAAIsQ,EAAY1C,GAAI,8BACpBP,EAAsB/P,IAEtBA,GAEJ,CAEA,SAASqU,EAAQ0D,EAAWtT,EAAKuP,EAAQ1D,EAAI0H,GA2D3C,IAzDMha,EAyDFia,GAAa,EAEjB3H,EAAKA,GAAM0D,EAAO1D,GAEdL,EAASK,KAxCT0D,GACA,kBAAmBA,GACnB,OAASA,EAAOrY,eAvBdqC,EAASiS,EAASK,IAAOL,EAASK,GAAI7K,aAC1C/C,EACE4N,EACA,IACEyH,EACA,2BACAzH,EACA,MACA7L,EACA,mBACAzG,GAEJgW,EAAOrY,cAAc2T,YAAYQ,EAAQrL,EAAKzG,IAI9CY,EAAK0R,EAAI,IAAMyH,EAAY,YAAczH,EAAK,eA8B1C0H,GACF/H,EAASK,IACPL,EAASK,GAAIS,iBAEfd,EAASK,GAAI4H,WAAa/V,YAjB5B,YACM8N,EAASK,IAAQL,EAASK,GAAI0F,QAAWiC,IAC3CA,GAAa,EACbrZ,EACE0R,EACA,mCACEL,EAASK,GAAIS,eAAiB,IAC9B,gOAGR,GASId,EAASK,GAAIS,iBAarB,CAEA,SAAS+E,EAAkB1D,GACzB,OACEA,EACA,IACAnC,EAASmC,GAAUjC,aACnB,IACAF,EAASmC,GAAUtB,UACnB,IACAb,EAASmC,GAAU1P,IACnB,IACAuN,EAASmC,GAAUnV,SACnB,IACAgT,EAASmC,GAAU/B,oBACnB,IACAJ,EAASmC,GAAUtW,WACnB,IACAmU,EAASmC,GAAUnW,WACnB,IACAgU,EAASmC,GAAU1M,wBACnB,IACAuK,EAASmC,GAAUpW,eACnB,IACAiU,EAASmC,GAAUhW,YACnB,IACA6T,EAASmC,GAAUjU,UACnB,IACA8R,EAASmC,GAAUpV,YACnB,IACAiT,EAASmC,GAAUtU,WACnB,IACAmS,EAASmC,GAAUzM,uBACnB,IACAsK,EAASmC,GAAUhV,WAEvB,CAMA,SAASyU,EAAYmC,EAAQzU,GAuO3B,SAASiG,EAAUmF,GACjB,IAAIC,EAAYD,EAAIpH,MAAM,YAE1B,GAAyB,IAArBqH,EAAUrN,OAAc,CAC1B,IAAImL,EACF,KAAOkC,EAAU,GAAGtG,OAAO,GAAGC,cAAgBqG,EAAU,GAAGpH,MAAM,GACnExB,KAAK0G,GAAQ1G,KAAK2I,UACX3I,KAAK2I,GACZ/L,EACEwT,EACA,gBACEzH,EACA,uBACAjC,EACA,+DAEN,CACF,CA2BA,IA1GcjE,EA0BRkH,EAgFFyG,EAxOJ,SAAqBA,GACnB,GAAwB,kBAAbA,EACT,MAAM,IAAI0E,UAAU,0CAVxB,IACMxG,EAsBJ,MAVI,KAAO8B,IAET4B,EAAO1D,IAdLA,EAAM/Q,GAAWA,EAAQ+Q,IAAOJ,EAASI,GAAKb,IAC9C,OAASzQ,SAAS4K,eAAe0G,KACnCA,GAAMb,KAYM2C,EAVP9B,GAWLZ,GAAcnQ,GAAW,CAAC,GAAGmD,IAC7BA,EACE0P,EACA,4BAA8BA,EAAW,KAAO4B,EAAO7H,IAAM,MAI1DiG,CACT,CAwNe+F,CAAYnE,EAAO1D,IAHzB8B,KAAYnC,GAAY,kBAAmB+D,EAMlDpV,EAAKwT,EAAU,oCA5BjB,SAAwB7S,GA1BxB,IAAyB2W,EA2BvB3W,EAAUA,GAAW,CAAC,EAEtB0Q,EAASmC,GAAY5S,OAAOC,OAAO,MACnCwQ,EAASmC,GAAU4B,OAASA,EAC5B/D,EAASmC,GAAU1V,UAAW,EAC9BuT,EAASmC,GAAU8D,WACjBlC,EAAO7H,KAAO6H,EAAO7H,IAAI5I,MAAM,KAAKC,MAAM,EAAG,GAAG4U,KAAK,KArDzD,SAAsB7Y,GACpB,GAAI,kBAAoBA,EACtB,MAAM,IAAIuX,UAAU,2BAExB,CAmDEuB,CAAa9Y,GACbC,OAAO8F,KAAK/F,GAASgG,QAAQC,EAAWjG,GAlD1C,SAAqBA,GAEnB,IAAK,IAAI+Y,KAAUpI,EACb1Q,OAAOwE,UAAUuU,eAAelO,KAAK6F,EAAUoI,KACjDrI,EAASmC,GAAUkG,GAAU9Y,OAAOwE,UAAUuU,eAAelO,KAC3D9K,EACA+Y,GAEE/Y,EAAQ+Y,GACRpI,EAASoI,GAGnB,CAuCEE,CAAYjZ,GAER0Q,EAASmC,KACXnC,EAASmC,GAAU3M,cACjB,IAASwK,EAASmC,GAAUhC,YAxCzB,MADgB8F,EA0CCjG,EAASmC,GAAU8D,aAxCzC,OAASA,EAAWuC,MAAM,wCACxB,IACAvC,EAuCI,IAEV,CAWEwC,CAAenZ,GA3NjB,WAcE,OAbAmD,EACE0P,EACA,qBACGnC,EAASmC,IAAanC,EAASmC,GAAUxB,UACtC,UACA,YACJ,QACAwB,GAEJ4B,EAAOzN,MAAMoS,UACX,KAAW1I,EAASmC,IAAanC,EAASmC,GAAUxB,WAChD,SACA,OACEX,EAASmC,IAAanC,EAASmC,GAAUxB,WAC/C,IAAK,OACH,MAGF,KAAK,EACHoD,EAAOpD,UAAY,MACnB,MAGF,KAAK,EACHoD,EAAOpD,UAAY,KACnB,MAGF,QACEoD,EAAOpD,UAAYX,EAASmC,GACxBnC,EAASmC,GAAUxB,UACnB,KAGV,CAyLEgI,GAxRF,WACE,SAASC,EAAStS,GAChB,IAAIuS,EAAa7I,EAASmC,GAAU7L,GAChCiK,MAAasI,GAAc,IAAMA,IACnC9E,EAAOzN,MAAMA,GARK,kBAQauS,EAC3BA,EAAa,KACbA,EACJpW,EAAI0P,EAAU,OAAS7L,EAAQ,MAAQyN,EAAOzN,MAAMA,IAExD,CAEA,SAASwS,EAAUnF,GACjB,GACE3D,EAASmC,GAAU,MAAQwB,GAC3B3D,EAASmC,GAAU,MAAQwB,GAE3B,MAAM,IAAIyC,MACR,gBACEzC,EACA,+BACAA,EAGR,CAEAmF,EAAU,UACVA,EAAU,SAEVF,EAAS,aACTA,EAAS,aACTA,EAAS,YACTA,EAAS,WACX,CAyPEG,GAnLE,kBACU/I,EAASmC,IAAanC,EAASmC,GAAUnW,aACnD,OAASgU,EAASmC,IAAanC,EAASmC,GAAUnW,cAElDgU,EAASmC,GAAUjC,aAAeF,EAASmC,GAAUnW,WACrDgU,EAASmC,GAAUnW,WACZgU,EAASmC,GAAUnW,WAAa,MA4D7BwI,EAmHPqR,EAAkB1D,IAzFnBzG,EAAmBsG,MApBvB,SAA+BtG,GACxBqI,EAAOgD,YAIU,IAAIrL,GAAiB,SAAUoB,GACnDA,EAAUxH,SAAQ,SAAUwG,GACP3B,MAAMpG,UAAUR,MAAM6G,KAAK0B,EAASkN,cAC1C1T,SAAQ,SAAU2T,GACzBA,IAAgBlF,GAClBuC,EAAYvC,EAEhB,GACF,GACF,IACgBtG,QAAQsG,EAAOgD,WAAY,CACzCzJ,WAAW,GAEf,CAIE4L,CAAsBxN,GAGxB/L,EAAiBoU,EAAQ,QA9BzB,WAzDF,IAIMtX,EACF0c,EAqDA/E,EAAQ,gBAAiB5P,EAAKuP,EAAQpY,GAAW,GAtD/Cc,EAAWuT,EAASmC,IAAanC,EAASmC,GAAU1V,SACtD0c,EACEnJ,EAASmC,IACTnC,EAASmC,GAAU1M,2BAA2BjI,GAE7Cf,GAAY0c,GACf5R,EAAY,CAAEwM,OAAQA,EAAQrX,OAAQ,EAAG4B,MAAO,EAAG+J,KAAM,QAkD3D,IA4BA+L,EAAQ,OAAQ5P,EAAKuP,EAAQpY,GAAW,GAzEpCqU,EAASmC,KACXnC,EAASmC,GAAU4B,OAAO5O,cAAgB,CACxC+B,MAAOoP,EAAY8C,KAAK,KAAMpJ,EAASmC,GAAU4B,QAEjDsF,gBAAiBvC,EAAsBsC,KACrC,KACApJ,EAASmC,GAAU4B,QAGrBzX,OAAQ8X,EAAQgF,KACd,KACA,gBACA,SACApJ,EAASmC,GAAU4B,QAGrBnR,aAAc,SAAU0W,GACtBlF,EACE,iBACA,gBAAkBkF,EAClBtJ,EAASmC,GAAU4B,OACnB5B,EAEJ,EAEAvK,YAAa,SAAUxE,GAErBgR,EACE,eACA,YAHFhR,EAAUF,KAAKkC,UAAUhC,IAIvB4M,EAASmC,GAAU4B,OACnB5B,EAEJ,IA8HR,CAEA,SAASqF,EAAQjG,EAAIyC,GACf,OAAS3F,IACXA,EAAQnM,YAAW,WACjBmM,EAAQ,KACRkD,GACF,GAAGyC,GAEP,CAwFA,SAASuF,IAKH,WAAaxa,SAASya,kBACxB/W,EAAI,WAAY,oCAChB+U,GANF,WACEiC,EAAe,cAAe,SAChC,GAIkB,IAEpB,CAEA,SAASA,EAAe1O,EAAW5I,GAUjC5C,OAAO8F,KAAK2K,GAAU1K,SAAQ,SAAU6M,IATxC,SAA+BA,GAC7B,OACEnC,EAASmC,IACT,WAAanC,EAASmC,GAAUtU,YAChCmS,EAASmC,GAAUtW,aAClBmU,EAASmC,GAAU1V,QAExB,EAGMid,CAAsBvH,IACxBiC,EAAQrJ,EAAW5I,EAAO6N,EAASmC,GAAU4B,OAAQ5B,EAEzD,GACF,CAEA,SAASwH,IACPha,EAAiB/D,OAAQ,UAAW8W,GAEpC/S,EAAiB/D,OAAQ,UAAU,WA1CrC,IAAuBuG,EAKrBM,EAAI,SAAU,mBALON,EA2CL,WArChBqV,GALA,WACEiC,EAAe,UAAYtX,EAAO,SACpC,GAGgB,GAsChB,IAEAxC,EAAiBZ,SAAU,mBAAoBwa,GAE/C5Z,EAAiBZ,SAAU,2BAA4Bwa,EACzD,CAEA,SAASxH,IACP,SAAS1P,EAAK/C,EAAS0M,GAWjBA,KAVJ,WACE,IAAKA,EAAQ4N,QACX,MAAM,IAAI/C,UAAU,qCACf,GAAI,WAAa7K,EAAQ4N,QAAQtV,cACtC,MAAM,IAAIuS,UACR,iCAAmC7K,EAAQ4N,QAAU,IAG3D,CAGEC,GACAjI,EAAY5F,EAAS1M,GACrBwa,EAAQxN,KAAKN,GAEjB,CAUA,IAAI8N,EAKJ,OA3yCF,WACE,IACIrS,EADAsS,EAAU,CAAC,MAAO,SAAU,IAAK,MAIrC,IAAKtS,EAAI,EAAGA,EAAIsS,EAAQzc,SAAWwS,EAAuBrI,GAAK,EAC7DqI,EAAwBlU,OAAOme,EAAQtS,GAAK,yBAG1CqI,EAIFA,EAAwBA,EAAsBsJ,KAAKxd,QAEnD6G,EAAI,QAAS,sCAEjB,CAuxCEuX,GACAL,IAEO,SAAuBra,EAASvB,GAKrC,OAJA+b,EAAU,GAdZ,SAA+Bxa,GACzBA,GAAWA,EAAQ8Q,qBACrBzR,EACE,qGAGN,CAUEsb,CAAsB3a,UAEPvB,GACb,IAAK,YACL,IAAK,SACHoM,MAAMpG,UAAUuB,QAAQ8E,KACtBrL,SAASsL,iBAAiBtM,GAAU,UACpCsE,EAAK+W,KAAKzd,EAAW2D,IAEvB,MAGF,IAAK,SACH+C,EAAK/C,EAASvB,GACd,MAGF,QACE,MAAM,IAAI8Y,UAAU,gCAAkC9Y,EAAS,KAInE,OAAO+b,CACT,CACF,CA2BD,CA96CA,E","sources":["webpack://app/./node_modules/iframe-resizer/index.js","webpack://app/./node_modules/iframe-resizer/js/iframeResizer.contentWindow.js","webpack://app/./node_modules/iframe-resizer/js/iframeResizer.js"],"sourcesContent":["const iframeResize = require('./js/iframeResizer')\n\nmodule.exports = {\n iframeResize: iframeResize,\n iframeResizer: iframeResize, // Backwards compatibility\n contentWindow: require('./js/iframeResizer.contentWindow')\n}\n","/*\n * File: iframeResizer.contentWindow.js\n * Desc: Include this file in any page being loaded into an iframe\n * to force the iframe to resize to the content size.\n * Requires: iframeResizer.js on host page.\n * Doc: https://github.com/davidjbradshaw/iframe-resizer\n * Author: David J. Bradshaw - dave@bradshaw.net\n *\n */\n\n// eslint-disable-next-line sonarjs/cognitive-complexity, no-shadow-restricted-names\n;(function (undefined) {\n if (typeof window === 'undefined') return // don't run for server side render\n\n var autoResize = true,\n base = 10,\n bodyBackground = '',\n bodyMargin = 0,\n bodyMarginStr = '',\n bodyObserver = null,\n bodyPadding = '',\n calculateWidth = false,\n doubleEventList = { resize: 1, click: 1 },\n eventCancelTimer = 128,\n firstRun = true,\n height = 1,\n heightCalcModeDefault = 'bodyOffset',\n heightCalcMode = heightCalcModeDefault,\n initLock = true,\n initMsg = '',\n inPageLinks = {},\n interval = 32,\n intervalTimer = null,\n logging = false,\n mouseEvents = false,\n msgID = '[iFrameSizer]', // Must match host page msg ID\n msgIdLen = msgID.length,\n myID = '',\n resetRequiredMethods = {\n max: 1,\n min: 1,\n bodyScroll: 1,\n documentElementScroll: 1\n },\n resizeFrom = 'child',\n sendPermit = true,\n target = window.parent,\n targetOriginDefault = '*',\n tolerance = 0,\n triggerLocked = false,\n triggerLockedTimer = null,\n throttledTimer = 16,\n width = 1,\n widthCalcModeDefault = 'scroll',\n widthCalcMode = widthCalcModeDefault,\n win = window,\n onMessage = function () {\n warn('onMessage function not defined')\n },\n onReady = function () {},\n onPageInfo = function () {},\n customCalcMethods = {\n height: function () {\n warn('Custom height calculation function not defined')\n return document.documentElement.offsetHeight\n },\n width: function () {\n warn('Custom width calculation function not defined')\n return document.body.scrollWidth\n }\n },\n eventHandlersByName = {},\n passiveSupported = false\n\n function noop() {}\n\n try {\n var options = Object.create(\n {},\n {\n passive: {\n // eslint-disable-next-line getter-return\n get: function () {\n passiveSupported = true\n }\n }\n }\n )\n window.addEventListener('test', noop, options)\n window.removeEventListener('test', noop, options)\n } catch (error) {\n /* */\n }\n\n function addEventListener(el, evt, func, options) {\n el.addEventListener(evt, func, passiveSupported ? options || {} : false)\n }\n\n function removeEventListener(el, evt, func) {\n el.removeEventListener(evt, func, false)\n }\n\n function capitalizeFirstLetter(string) {\n return string.charAt(0).toUpperCase() + string.slice(1)\n }\n\n // Based on underscore.js\n function throttle(func) {\n var context,\n args,\n result,\n timeout = null,\n previous = 0,\n later = function () {\n previous = Date.now()\n timeout = null\n result = func.apply(context, args)\n if (!timeout) {\n // eslint-disable-next-line no-multi-assign\n context = args = null\n }\n }\n\n return function () {\n var now = Date.now()\n\n if (!previous) {\n previous = now\n }\n\n var remaining = throttledTimer - (now - previous)\n\n context = this\n args = arguments\n\n if (remaining <= 0 || remaining > throttledTimer) {\n if (timeout) {\n clearTimeout(timeout)\n timeout = null\n }\n\n previous = now\n result = func.apply(context, args)\n\n if (!timeout) {\n // eslint-disable-next-line no-multi-assign\n context = args = null\n }\n } else if (!timeout) {\n timeout = setTimeout(later, remaining)\n }\n\n return result\n }\n }\n\n function formatLogMsg(msg) {\n return msgID + '[' + myID + '] ' + msg\n }\n\n function log(msg) {\n if (logging && 'object' === typeof window.console) {\n // eslint-disable-next-line no-console\n console.log(formatLogMsg(msg))\n }\n }\n\n function warn(msg) {\n if ('object' === typeof window.console) {\n // eslint-disable-next-line no-console\n console.warn(formatLogMsg(msg))\n }\n }\n\n function init() {\n readDataFromParent()\n log('Initialising iFrame (' + window.location.href + ')')\n readDataFromPage()\n setMargin()\n setBodyStyle('background', bodyBackground)\n setBodyStyle('padding', bodyPadding)\n injectClearFixIntoBodyElement()\n checkHeightMode()\n checkWidthMode()\n stopInfiniteResizingOfIFrame()\n setupPublicMethods()\n setupMouseEvents()\n startEventListeners()\n inPageLinks = setupInPageLinks()\n sendSize('init', 'Init message from host page')\n onReady()\n }\n\n function readDataFromParent() {\n function strBool(str) {\n return 'true' === str\n }\n\n var data = initMsg.slice(msgIdLen).split(':')\n\n myID = data[0]\n bodyMargin = undefined === data[1] ? bodyMargin : Number(data[1]) // For V1 compatibility\n calculateWidth = undefined === data[2] ? calculateWidth : strBool(data[2])\n logging = undefined === data[3] ? logging : strBool(data[3])\n interval = undefined === data[4] ? interval : Number(data[4])\n autoResize = undefined === data[6] ? autoResize : strBool(data[6])\n bodyMarginStr = data[7]\n heightCalcMode = undefined === data[8] ? heightCalcMode : data[8]\n bodyBackground = data[9]\n bodyPadding = data[10]\n tolerance = undefined === data[11] ? tolerance : Number(data[11])\n inPageLinks.enable = undefined === data[12] ? false : strBool(data[12])\n resizeFrom = undefined === data[13] ? resizeFrom : data[13]\n widthCalcMode = undefined === data[14] ? widthCalcMode : data[14]\n mouseEvents = undefined === data[15] ? mouseEvents : strBool(data[15])\n }\n\n function depricate(key) {\n var splitName = key.split('Callback')\n\n if (splitName.length === 2) {\n var name =\n 'on' + splitName[0].charAt(0).toUpperCase() + splitName[0].slice(1)\n this[name] = this[key]\n delete this[key]\n warn(\n \"Deprecated: '\" +\n key +\n \"' has been renamed '\" +\n name +\n \"'. The old method will be removed in the next major version.\"\n )\n }\n }\n\n function readDataFromPage() {\n function readData() {\n var data = window.iFrameResizer\n\n log('Reading data from page: ' + JSON.stringify(data))\n Object.keys(data).forEach(depricate, data)\n\n onMessage = 'onMessage' in data ? data.onMessage : onMessage\n onReady = 'onReady' in data ? data.onReady : onReady\n targetOriginDefault =\n 'targetOrigin' in data ? data.targetOrigin : targetOriginDefault\n heightCalcMode =\n 'heightCalculationMethod' in data\n ? data.heightCalculationMethod\n : heightCalcMode\n widthCalcMode =\n 'widthCalculationMethod' in data\n ? data.widthCalculationMethod\n : widthCalcMode\n }\n\n function setupCustomCalcMethods(calcMode, calcFunc) {\n if ('function' === typeof calcMode) {\n log('Setup custom ' + calcFunc + 'CalcMethod')\n customCalcMethods[calcFunc] = calcMode\n calcMode = 'custom'\n }\n\n return calcMode\n }\n\n if (\n 'iFrameResizer' in window &&\n Object === window.iFrameResizer.constructor\n ) {\n readData()\n heightCalcMode = setupCustomCalcMethods(heightCalcMode, 'height')\n widthCalcMode = setupCustomCalcMethods(widthCalcMode, 'width')\n }\n\n log('TargetOrigin for parent set to: ' + targetOriginDefault)\n }\n\n function chkCSS(attr, value) {\n if (-1 !== value.indexOf('-')) {\n warn('Negative CSS value ignored for ' + attr)\n value = ''\n }\n return value\n }\n\n function setBodyStyle(attr, value) {\n if (undefined !== value && '' !== value && 'null' !== value) {\n document.body.style[attr] = value\n log('Body ' + attr + ' set to \"' + value + '\"')\n }\n }\n\n function setMargin() {\n // If called via V1 script, convert bodyMargin from int to str\n if (undefined === bodyMarginStr) {\n bodyMarginStr = bodyMargin + 'px'\n }\n\n setBodyStyle('margin', chkCSS('margin', bodyMarginStr))\n }\n\n function stopInfiniteResizingOfIFrame() {\n document.documentElement.style.height = ''\n document.body.style.height = ''\n log('HTML & body height set to \"auto\"')\n }\n\n function manageTriggerEvent(options) {\n var listener = {\n add: function (eventName) {\n function handleEvent() {\n sendSize(options.eventName, options.eventType)\n }\n\n eventHandlersByName[eventName] = handleEvent\n\n addEventListener(window, eventName, handleEvent, { passive: true })\n },\n remove: function (eventName) {\n var handleEvent = eventHandlersByName[eventName]\n delete eventHandlersByName[eventName]\n\n removeEventListener(window, eventName, handleEvent)\n }\n }\n\n if (options.eventNames && Array.prototype.map) {\n options.eventName = options.eventNames[0]\n options.eventNames.map(listener[options.method])\n } else {\n listener[options.method](options.eventName)\n }\n\n log(\n capitalizeFirstLetter(options.method) +\n ' event listener: ' +\n options.eventType\n )\n }\n\n function manageEventListeners(method) {\n manageTriggerEvent({\n method: method,\n eventType: 'Animation Start',\n eventNames: ['animationstart', 'webkitAnimationStart']\n })\n manageTriggerEvent({\n method: method,\n eventType: 'Animation Iteration',\n eventNames: ['animationiteration', 'webkitAnimationIteration']\n })\n manageTriggerEvent({\n method: method,\n eventType: 'Animation End',\n eventNames: ['animationend', 'webkitAnimationEnd']\n })\n manageTriggerEvent({\n method: method,\n eventType: 'Input',\n eventName: 'input'\n })\n manageTriggerEvent({\n method: method,\n eventType: 'Mouse Up',\n eventName: 'mouseup'\n })\n manageTriggerEvent({\n method: method,\n eventType: 'Mouse Down',\n eventName: 'mousedown'\n })\n manageTriggerEvent({\n method: method,\n eventType: 'Orientation Change',\n eventName: 'orientationchange'\n })\n manageTriggerEvent({\n method: method,\n eventType: 'Print',\n eventNames: ['afterprint', 'beforeprint']\n })\n manageTriggerEvent({\n method: method,\n eventType: 'Ready State Change',\n eventName: 'readystatechange'\n })\n manageTriggerEvent({\n method: method,\n eventType: 'Touch Start',\n eventName: 'touchstart'\n })\n manageTriggerEvent({\n method: method,\n eventType: 'Touch End',\n eventName: 'touchend'\n })\n manageTriggerEvent({\n method: method,\n eventType: 'Touch Cancel',\n eventName: 'touchcancel'\n })\n manageTriggerEvent({\n method: method,\n eventType: 'Transition Start',\n eventNames: [\n 'transitionstart',\n 'webkitTransitionStart',\n 'MSTransitionStart',\n 'oTransitionStart',\n 'otransitionstart'\n ]\n })\n manageTriggerEvent({\n method: method,\n eventType: 'Transition Iteration',\n eventNames: [\n 'transitioniteration',\n 'webkitTransitionIteration',\n 'MSTransitionIteration',\n 'oTransitionIteration',\n 'otransitioniteration'\n ]\n })\n manageTriggerEvent({\n method: method,\n eventType: 'Transition End',\n eventNames: [\n 'transitionend',\n 'webkitTransitionEnd',\n 'MSTransitionEnd',\n 'oTransitionEnd',\n 'otransitionend'\n ]\n })\n if ('child' === resizeFrom) {\n manageTriggerEvent({\n method: method,\n eventType: 'IFrame Resized',\n eventName: 'resize'\n })\n }\n }\n\n function checkCalcMode(calcMode, calcModeDefault, modes, type) {\n if (calcModeDefault !== calcMode) {\n if (!(calcMode in modes)) {\n warn(\n calcMode + ' is not a valid option for ' + type + 'CalculationMethod.'\n )\n calcMode = calcModeDefault\n }\n log(type + ' calculation method set to \"' + calcMode + '\"')\n }\n\n return calcMode\n }\n\n function checkHeightMode() {\n heightCalcMode = checkCalcMode(\n heightCalcMode,\n heightCalcModeDefault,\n getHeight,\n 'height'\n )\n }\n\n function checkWidthMode() {\n widthCalcMode = checkCalcMode(\n widthCalcMode,\n widthCalcModeDefault,\n getWidth,\n 'width'\n )\n }\n\n function startEventListeners() {\n if (true === autoResize) {\n manageEventListeners('add')\n setupMutationObserver()\n } else {\n log('Auto Resize disabled')\n }\n }\n\n // function stopMsgsToParent() {\n // log('Disable outgoing messages')\n // sendPermit = false\n // }\n\n // function removeMsgListener() {\n // log('Remove event listener: Message')\n // removeEventListener(window, 'message', receiver)\n // }\n\n function disconnectMutationObserver() {\n if (null !== bodyObserver) {\n /* istanbul ignore next */ // Not testable in PhantonJS\n bodyObserver.disconnect()\n }\n }\n\n function stopEventListeners() {\n manageEventListeners('remove')\n disconnectMutationObserver()\n clearInterval(intervalTimer)\n }\n\n // function teardown() {\n // stopMsgsToParent()\n // removeMsgListener()\n // if (true === autoResize) stopEventListeners()\n // }\n\n function injectClearFixIntoBodyElement() {\n var clearFix = document.createElement('div')\n clearFix.style.clear = 'both'\n // Guard against the following having been globally redefined in CSS.\n clearFix.style.display = 'block'\n clearFix.style.height = '0'\n document.body.appendChild(clearFix)\n }\n\n function setupInPageLinks() {\n function getPagePosition() {\n return {\n x:\n window.pageXOffset === undefined\n ? document.documentElement.scrollLeft\n : window.pageXOffset,\n y:\n window.pageYOffset === undefined\n ? document.documentElement.scrollTop\n : window.pageYOffset\n }\n }\n\n function getElementPosition(el) {\n var elPosition = el.getBoundingClientRect(),\n pagePosition = getPagePosition()\n\n return {\n x: parseInt(elPosition.left, 10) + parseInt(pagePosition.x, 10),\n y: parseInt(elPosition.top, 10) + parseInt(pagePosition.y, 10)\n }\n }\n\n function findTarget(location) {\n function jumpToTarget(target) {\n var jumpPosition = getElementPosition(target)\n\n log(\n 'Moving to in page link (#' +\n hash +\n ') at x: ' +\n jumpPosition.x +\n ' y: ' +\n jumpPosition.y\n )\n sendMsg(jumpPosition.y, jumpPosition.x, 'scrollToOffset') // X&Y reversed at sendMsg uses height/width\n }\n\n var hash = location.split('#')[1] || location, // Remove # if present\n hashData = decodeURIComponent(hash),\n target =\n document.getElementById(hashData) ||\n document.getElementsByName(hashData)[0]\n\n if (undefined === target) {\n log(\n 'In page link (#' +\n hash +\n ') not found in iFrame, so sending to parent'\n )\n sendMsg(0, 0, 'inPageLink', '#' + hash)\n } else {\n jumpToTarget(target)\n }\n }\n\n function checkLocationHash() {\n var hash = window.location.hash\n var href = window.location.href\n\n if ('' !== hash && '#' !== hash) {\n findTarget(href)\n }\n }\n\n function bindAnchors() {\n function setupLink(el) {\n function linkClicked(e) {\n e.preventDefault()\n\n /* jshint validthis:true */\n findTarget(this.getAttribute('href'))\n }\n\n if ('#' !== el.getAttribute('href')) {\n addEventListener(el, 'click', linkClicked)\n }\n }\n\n Array.prototype.forEach.call(\n document.querySelectorAll('a[href^=\"#\"]'),\n setupLink\n )\n }\n\n function bindLocationHash() {\n addEventListener(window, 'hashchange', checkLocationHash)\n }\n\n function initCheck() {\n // Check if page loaded with location hash after init resize\n setTimeout(checkLocationHash, eventCancelTimer)\n }\n\n function enableInPageLinks() {\n /* istanbul ignore else */ // Not testable in phantonJS\n if (Array.prototype.forEach && document.querySelectorAll) {\n log('Setting up location.hash handlers')\n bindAnchors()\n bindLocationHash()\n initCheck()\n } else {\n warn(\n 'In page linking not fully supported in this browser! (See README.md for IE8 workaround)'\n )\n }\n }\n\n if (inPageLinks.enable) {\n enableInPageLinks()\n } else {\n log('In page linking not enabled')\n }\n\n return {\n findTarget: findTarget\n }\n }\n\n function setupMouseEvents() {\n if (mouseEvents !== true) return\n\n function sendMouse(e) {\n sendMsg(0, 0, e.type, e.screenY + ':' + e.screenX)\n }\n\n function addMouseListener(evt, name) {\n log('Add event listener: ' + name)\n addEventListener(window.document, evt, sendMouse)\n }\n\n addMouseListener('mouseenter', 'Mouse Enter')\n addMouseListener('mouseleave', 'Mouse Leave')\n }\n\n function setupPublicMethods() {\n log('Enable public methods')\n\n win.parentIFrame = {\n autoResize: function autoResizeF(resize) {\n if (true === resize && false === autoResize) {\n autoResize = true\n startEventListeners()\n } else if (false === resize && true === autoResize) {\n autoResize = false\n stopEventListeners()\n }\n sendMsg(0, 0, 'autoResize', JSON.stringify(autoResize))\n return autoResize\n },\n\n close: function closeF() {\n sendMsg(0, 0, 'close')\n // teardown()\n },\n\n getId: function getIdF() {\n return myID\n },\n\n getPageInfo: function getPageInfoF(callback) {\n if ('function' === typeof callback) {\n onPageInfo = callback\n sendMsg(0, 0, 'pageInfo')\n } else {\n onPageInfo = function () {}\n sendMsg(0, 0, 'pageInfoStop')\n }\n },\n\n moveToAnchor: function moveToAnchorF(hash) {\n inPageLinks.findTarget(hash)\n },\n\n reset: function resetF() {\n resetIFrame('parentIFrame.reset')\n },\n\n scrollTo: function scrollToF(x, y) {\n sendMsg(y, x, 'scrollTo') // X&Y reversed at sendMsg uses height/width\n },\n\n scrollToOffset: function scrollToF(x, y) {\n sendMsg(y, x, 'scrollToOffset') // X&Y reversed at sendMsg uses height/width\n },\n\n sendMessage: function sendMessageF(msg, targetOrigin) {\n sendMsg(0, 0, 'message', JSON.stringify(msg), targetOrigin)\n },\n\n setHeightCalculationMethod: function setHeightCalculationMethodF(\n heightCalculationMethod\n ) {\n heightCalcMode = heightCalculationMethod\n checkHeightMode()\n },\n\n setWidthCalculationMethod: function setWidthCalculationMethodF(\n widthCalculationMethod\n ) {\n widthCalcMode = widthCalculationMethod\n checkWidthMode()\n },\n\n setTargetOrigin: function setTargetOriginF(targetOrigin) {\n log('Set targetOrigin: ' + targetOrigin)\n targetOriginDefault = targetOrigin\n },\n\n size: function sizeF(customHeight, customWidth) {\n var valString =\n '' + (customHeight || '') + (customWidth ? ',' + customWidth : '')\n sendSize(\n 'size',\n 'parentIFrame.size(' + valString + ')',\n customHeight,\n customWidth\n )\n }\n }\n }\n\n function initInterval() {\n if (0 !== interval) {\n log('setInterval: ' + interval + 'ms')\n intervalTimer = setInterval(function () {\n sendSize('interval', 'setInterval: ' + interval)\n }, Math.abs(interval))\n }\n }\n\n // Not testable in PhantomJS\n /* istanbul ignore next */\n function setupBodyMutationObserver() {\n function addImageLoadListners(mutation) {\n function addImageLoadListener(element) {\n if (false === element.complete) {\n log('Attach listeners to ' + element.src)\n element.addEventListener('load', imageLoaded, false)\n element.addEventListener('error', imageError, false)\n elements.push(element)\n }\n }\n\n if (mutation.type === 'attributes' && mutation.attributeName === 'src') {\n addImageLoadListener(mutation.target)\n } else if (mutation.type === 'childList') {\n Array.prototype.forEach.call(\n mutation.target.querySelectorAll('img'),\n addImageLoadListener\n )\n }\n }\n\n function removeFromArray(element) {\n elements.splice(elements.indexOf(element), 1)\n }\n\n function removeImageLoadListener(element) {\n log('Remove listeners from ' + element.src)\n element.removeEventListener('load', imageLoaded, false)\n element.removeEventListener('error', imageError, false)\n removeFromArray(element)\n }\n\n function imageEventTriggered(event, type, typeDesc) {\n removeImageLoadListener(event.target)\n sendSize(type, typeDesc + ': ' + event.target.src)\n }\n\n function imageLoaded(event) {\n imageEventTriggered(event, 'imageLoad', 'Image loaded')\n }\n\n function imageError(event) {\n imageEventTriggered(event, 'imageLoadFailed', 'Image load failed')\n }\n\n function mutationObserved(mutations) {\n sendSize(\n 'mutationObserver',\n 'mutationObserver: ' + mutations[0].target + ' ' + mutations[0].type\n )\n\n // Deal with WebKit / Blink asyncing image loading when tags are injected into the page\n mutations.forEach(addImageLoadListners)\n }\n\n function createMutationObserver() {\n var target = document.querySelector('body'),\n config = {\n attributes: true,\n attributeOldValue: false,\n characterData: true,\n characterDataOldValue: false,\n childList: true,\n subtree: true\n }\n\n observer = new MutationObserver(mutationObserved)\n\n log('Create body MutationObserver')\n observer.observe(target, config)\n\n return observer\n }\n\n var elements = [],\n MutationObserver =\n window.MutationObserver || window.WebKitMutationObserver,\n observer = createMutationObserver()\n\n return {\n disconnect: function () {\n if ('disconnect' in observer) {\n log('Disconnect body MutationObserver')\n observer.disconnect()\n elements.forEach(removeImageLoadListener)\n }\n }\n }\n }\n\n function setupMutationObserver() {\n var forceIntervalTimer = 0 > interval\n\n // Not testable in PhantomJS\n /* istanbul ignore if */ if (\n window.MutationObserver ||\n window.WebKitMutationObserver\n ) {\n if (forceIntervalTimer) {\n initInterval()\n } else {\n bodyObserver = setupBodyMutationObserver()\n }\n } else {\n log('MutationObserver not supported in this browser!')\n initInterval()\n }\n }\n\n // document.documentElement.offsetHeight is not reliable, so\n // we have to jump through hoops to get a better value.\n function getComputedStyle(prop, el) {\n var retVal = 0\n el = el || document.body // Not testable in phantonJS\n\n retVal = document.defaultView.getComputedStyle(el, null)\n retVal = null === retVal ? 0 : retVal[prop]\n\n return parseInt(retVal, base)\n }\n\n function chkEventThottle(timer) {\n if (timer > throttledTimer / 2) {\n throttledTimer = 2 * timer\n log('Event throttle increased to ' + throttledTimer + 'ms')\n }\n }\n\n // Idea from https://github.com/guardian/iframe-messenger\n function getMaxElement(side, elements) {\n var elementsLength = elements.length,\n elVal = 0,\n maxVal = 0,\n Side = capitalizeFirstLetter(side),\n timer = Date.now()\n\n for (var i = 0; i < elementsLength; i++) {\n elVal =\n elements[i].getBoundingClientRect()[side] +\n getComputedStyle('margin' + Side, elements[i])\n if (elVal > maxVal) {\n maxVal = elVal\n }\n }\n\n timer = Date.now() - timer\n\n log('Parsed ' + elementsLength + ' HTML elements')\n log('Element position calculated in ' + timer + 'ms')\n\n chkEventThottle(timer)\n\n return maxVal\n }\n\n function getAllMeasurements(dimensions) {\n return [\n dimensions.bodyOffset(),\n dimensions.bodyScroll(),\n dimensions.documentElementOffset(),\n dimensions.documentElementScroll()\n ]\n }\n\n function getTaggedElements(side, tag) {\n function noTaggedElementsFound() {\n warn('No tagged elements (' + tag + ') found on page')\n return document.querySelectorAll('body *')\n }\n\n var elements = document.querySelectorAll('[' + tag + ']')\n\n if (elements.length === 0) noTaggedElementsFound()\n\n return getMaxElement(side, elements)\n }\n\n function getAllElements() {\n return document.querySelectorAll('body *')\n }\n\n var getHeight = {\n bodyOffset: function getBodyOffsetHeight() {\n return (\n document.body.offsetHeight +\n getComputedStyle('marginTop') +\n getComputedStyle('marginBottom')\n )\n },\n\n offset: function () {\n return getHeight.bodyOffset() // Backwards compatibility\n },\n\n bodyScroll: function getBodyScrollHeight() {\n return document.body.scrollHeight\n },\n\n custom: function getCustomWidth() {\n return customCalcMethods.height()\n },\n\n documentElementOffset: function getDEOffsetHeight() {\n return document.documentElement.offsetHeight\n },\n\n documentElementScroll: function getDEScrollHeight() {\n return document.documentElement.scrollHeight\n },\n\n max: function getMaxHeight() {\n return Math.max.apply(null, getAllMeasurements(getHeight))\n },\n\n min: function getMinHeight() {\n return Math.min.apply(null, getAllMeasurements(getHeight))\n },\n\n grow: function growHeight() {\n return getHeight.max() // Run max without the forced downsizing\n },\n\n lowestElement: function getBestHeight() {\n return Math.max(\n getHeight.bodyOffset() || getHeight.documentElementOffset(),\n getMaxElement('bottom', getAllElements())\n )\n },\n\n taggedElement: function getTaggedElementsHeight() {\n return getTaggedElements('bottom', 'data-iframe-height')\n }\n },\n getWidth = {\n bodyScroll: function getBodyScrollWidth() {\n return document.body.scrollWidth\n },\n\n bodyOffset: function getBodyOffsetWidth() {\n return document.body.offsetWidth\n },\n\n custom: function getCustomWidth() {\n return customCalcMethods.width()\n },\n\n documentElementScroll: function getDEScrollWidth() {\n return document.documentElement.scrollWidth\n },\n\n documentElementOffset: function getDEOffsetWidth() {\n return document.documentElement.offsetWidth\n },\n\n scroll: function getMaxWidth() {\n return Math.max(getWidth.bodyScroll(), getWidth.documentElementScroll())\n },\n\n max: function getMaxWidth() {\n return Math.max.apply(null, getAllMeasurements(getWidth))\n },\n\n min: function getMinWidth() {\n return Math.min.apply(null, getAllMeasurements(getWidth))\n },\n\n rightMostElement: function rightMostElement() {\n return getMaxElement('right', getAllElements())\n },\n\n taggedElement: function getTaggedElementsWidth() {\n return getTaggedElements('right', 'data-iframe-width')\n }\n }\n\n function sizeIFrame(\n triggerEvent,\n triggerEventDesc,\n customHeight,\n customWidth\n ) {\n function resizeIFrame() {\n height = currentHeight\n width = currentWidth\n\n sendMsg(height, width, triggerEvent)\n }\n\n function isSizeChangeDetected() {\n function checkTolarance(a, b) {\n var retVal = Math.abs(a - b) <= tolerance\n return !retVal\n }\n\n currentHeight =\n undefined === customHeight ? getHeight[heightCalcMode]() : customHeight\n currentWidth =\n undefined === customWidth ? getWidth[widthCalcMode]() : customWidth\n\n return (\n checkTolarance(height, currentHeight) ||\n (calculateWidth && checkTolarance(width, currentWidth))\n )\n }\n\n function isForceResizableEvent() {\n return !(triggerEvent in { init: 1, interval: 1, size: 1 })\n }\n\n function isForceResizableCalcMode() {\n return (\n heightCalcMode in resetRequiredMethods ||\n (calculateWidth && widthCalcMode in resetRequiredMethods)\n )\n }\n\n function logIgnored() {\n log('No change in size detected')\n }\n\n function checkDownSizing() {\n if (isForceResizableEvent() && isForceResizableCalcMode()) {\n resetIFrame(triggerEventDesc)\n } else if (!(triggerEvent in { interval: 1 })) {\n logIgnored()\n }\n }\n\n var currentHeight, currentWidth\n\n if (isSizeChangeDetected() || 'init' === triggerEvent) {\n lockTrigger()\n resizeIFrame()\n } else {\n checkDownSizing()\n }\n }\n\n var sizeIFrameThrottled = throttle(sizeIFrame)\n\n function sendSize(triggerEvent, triggerEventDesc, customHeight, customWidth) {\n function recordTrigger() {\n if (!(triggerEvent in { reset: 1, resetPage: 1, init: 1 })) {\n log('Trigger event: ' + triggerEventDesc)\n }\n }\n\n function isDoubleFiredEvent() {\n return triggerLocked && triggerEvent in doubleEventList\n }\n\n if (isDoubleFiredEvent()) {\n log('Trigger event cancelled: ' + triggerEvent)\n } else {\n recordTrigger()\n if (triggerEvent === 'init') {\n sizeIFrame(triggerEvent, triggerEventDesc, customHeight, customWidth)\n } else {\n sizeIFrameThrottled(\n triggerEvent,\n triggerEventDesc,\n customHeight,\n customWidth\n )\n }\n }\n }\n\n function lockTrigger() {\n if (!triggerLocked) {\n triggerLocked = true\n log('Trigger event lock on')\n }\n clearTimeout(triggerLockedTimer)\n triggerLockedTimer = setTimeout(function () {\n triggerLocked = false\n log('Trigger event lock off')\n log('--')\n }, eventCancelTimer)\n }\n\n function triggerReset(triggerEvent) {\n height = getHeight[heightCalcMode]()\n width = getWidth[widthCalcMode]()\n\n sendMsg(height, width, triggerEvent)\n }\n\n function resetIFrame(triggerEventDesc) {\n var hcm = heightCalcMode\n heightCalcMode = heightCalcModeDefault\n\n log('Reset trigger event: ' + triggerEventDesc)\n lockTrigger()\n triggerReset('reset')\n\n heightCalcMode = hcm\n }\n\n function sendMsg(height, width, triggerEvent, msg, targetOrigin) {\n function setTargetOrigin() {\n if (undefined === targetOrigin) {\n targetOrigin = targetOriginDefault\n } else {\n log('Message targetOrigin: ' + targetOrigin)\n }\n }\n\n function sendToParent() {\n var size = height + ':' + width,\n message =\n myID +\n ':' +\n size +\n ':' +\n triggerEvent +\n (undefined === msg ? '' : ':' + msg)\n\n log('Sending message to host page (' + message + ')')\n target.postMessage(msgID + message, targetOrigin)\n }\n\n if (true === sendPermit) {\n setTargetOrigin()\n sendToParent()\n }\n }\n\n function receiver(event) {\n var processRequestFromParent = {\n init: function initFromParent() {\n initMsg = event.data\n target = event.source\n\n init()\n firstRun = false\n setTimeout(function () {\n initLock = false\n }, eventCancelTimer)\n },\n\n reset: function resetFromParent() {\n if (initLock) {\n log('Page reset ignored by init')\n } else {\n log('Page size reset by host page')\n triggerReset('resetPage')\n }\n },\n\n resize: function resizeFromParent() {\n sendSize('resizeParent', 'Parent window requested size check')\n },\n\n moveToAnchor: function moveToAnchorF() {\n inPageLinks.findTarget(getData())\n },\n inPageLink: function inPageLinkF() {\n this.moveToAnchor()\n }, // Backward compatibility\n\n pageInfo: function pageInfoFromParent() {\n var msgBody = getData()\n log('PageInfoFromParent called from parent: ' + msgBody)\n onPageInfo(JSON.parse(msgBody))\n log(' --')\n },\n\n message: function messageFromParent() {\n var msgBody = getData()\n\n log('onMessage called from parent: ' + msgBody)\n // eslint-disable-next-line sonarjs/no-extra-arguments\n onMessage(JSON.parse(msgBody))\n log(' --')\n }\n }\n\n function isMessageForUs() {\n return msgID === ('' + event.data).slice(0, msgIdLen) // ''+ Protects against non-string messages\n }\n\n function getMessageType() {\n return event.data.split(']')[1].split(':')[0]\n }\n\n function getData() {\n return event.data.slice(event.data.indexOf(':') + 1)\n }\n\n function isMiddleTier() {\n return (\n (!(typeof module !== 'undefined' && module.exports) &&\n 'iFrameResize' in window) ||\n (window.jQuery !== undefined &&\n 'iFrameResize' in window.jQuery.prototype)\n )\n }\n\n function isInitMsg() {\n // Test if this message is from a child below us. This is an ugly test, however, updating\n // the message format would break backwards compatibility.\n return event.data.split(':')[2] in { true: 1, false: 1 }\n }\n\n function callFromParent() {\n var messageType = getMessageType()\n\n if (messageType in processRequestFromParent) {\n processRequestFromParent[messageType]()\n } else if (!isMiddleTier() && !isInitMsg()) {\n warn('Unexpected message (' + event.data + ')')\n }\n }\n\n function processMessage() {\n if (false === firstRun) {\n callFromParent()\n } else if (isInitMsg()) {\n processRequestFromParent.init()\n } else {\n log(\n 'Ignored message of type \"' +\n getMessageType() +\n '\". Received before initialization.'\n )\n }\n }\n\n if (isMessageForUs()) {\n processMessage()\n }\n }\n\n // Normally the parent kicks things off when it detects the iFrame has loaded.\n // If this script is async-loaded, then tell parent page to retry init.\n function chkLateLoaded() {\n if ('loading' !== document.readyState) {\n window.parent.postMessage('[iFrameResizerChild]Ready', '*')\n }\n }\n\n addEventListener(window, 'message', receiver)\n addEventListener(window, 'readystatechange', chkLateLoaded)\n chkLateLoaded()\n\n \n})()\n","/*\n * File: iframeResizer.js\n * Desc: Force iframes to size to content.\n * Requires: iframeResizer.contentWindow.js to be loaded into the target frame.\n * Doc: https://github.com/davidjbradshaw/iframe-resizer\n * Author: David J. Bradshaw - dave@bradshaw.net\n * Contributor: Jure Mav - jure.mav@gmail.com\n * Contributor: Reed Dadoune - reed@dadoune.com\n */\n\n// eslint-disable-next-line sonarjs/cognitive-complexity, no-shadow-restricted-names\n;(function (undefined) {\n if (typeof window === 'undefined') return // don't run for server side render\n\n var count = 0,\n logEnabled = false,\n hiddenCheckEnabled = false,\n msgHeader = 'message',\n msgHeaderLen = msgHeader.length,\n msgId = '[iFrameSizer]', // Must match iframe msg ID\n msgIdLen = msgId.length,\n pagePosition = null,\n requestAnimationFrame = window.requestAnimationFrame,\n resetRequiredMethods = Object.freeze({\n max: 1,\n scroll: 1,\n bodyScroll: 1,\n documentElementScroll: 1\n }),\n settings = {},\n timer = null,\n defaults = Object.freeze({\n autoResize: true,\n bodyBackground: null,\n bodyMargin: null,\n bodyMarginV1: 8,\n bodyPadding: null,\n checkOrigin: true,\n inPageLinks: false,\n enablePublicMethods: true,\n heightCalculationMethod: 'bodyOffset',\n id: 'iFrameResizer',\n interval: 32,\n log: false,\n maxHeight: Infinity,\n maxWidth: Infinity,\n minHeight: 0,\n minWidth: 0,\n mouseEvents: true,\n resizeFrom: 'parent',\n scrolling: false,\n sizeHeight: true,\n sizeWidth: false,\n warningTimeout: 5000,\n tolerance: 0,\n widthCalculationMethod: 'scroll',\n onClose: function () {\n return true\n },\n onClosed: function () {},\n onInit: function () {},\n onMessage: function () {\n warn('onMessage function not defined')\n },\n onMouseEnter: function () {},\n onMouseLeave: function () {},\n onResized: function () {},\n onScroll: function () {\n return true\n }\n })\n\n function getMutationObserver() {\n return (\n window.MutationObserver ||\n window.WebKitMutationObserver ||\n window.MozMutationObserver\n )\n }\n\n function addEventListener(el, evt, func) {\n el.addEventListener(evt, func, false)\n }\n\n function removeEventListener(el, evt, func) {\n el.removeEventListener(evt, func, false)\n }\n\n function setupRequestAnimationFrame() {\n var vendors = ['moz', 'webkit', 'o', 'ms']\n var x\n\n // Remove vendor prefixing if prefixed and break early if not\n for (x = 0; x < vendors.length && !requestAnimationFrame; x += 1) {\n requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame']\n }\n\n if (requestAnimationFrame) {\n // Firefox extension content-scripts have a globalThis object that is not the same as window.\n // Binding `requestAnimationFrame` to window allows the function to work and prevents errors\n // being thrown when run in that context, and should be a no-op in every other context.\n requestAnimationFrame = requestAnimationFrame.bind(window)\n } else {\n log('setup', 'RequestAnimationFrame not supported')\n }\n }\n\n function getMyID(iframeId) {\n var retStr = 'Host page: ' + iframeId\n\n if (window.top !== window.self) {\n retStr =\n window.parentIFrame && window.parentIFrame.getId\n ? window.parentIFrame.getId() + ': ' + iframeId\n : 'Nested host page: ' + iframeId\n }\n\n return retStr\n }\n\n function formatLogHeader(iframeId) {\n return msgId + '[' + getMyID(iframeId) + ']'\n }\n\n function isLogEnabled(iframeId) {\n return settings[iframeId] ? settings[iframeId].log : logEnabled\n }\n\n function log(iframeId, msg) {\n output('log', iframeId, msg, isLogEnabled(iframeId))\n }\n\n function info(iframeId, msg) {\n output('info', iframeId, msg, isLogEnabled(iframeId))\n }\n\n function warn(iframeId, msg) {\n output('warn', iframeId, msg, true)\n }\n\n function output(type, iframeId, msg, enabled) {\n if (true === enabled && 'object' === typeof window.console) {\n // eslint-disable-next-line no-console\n console[type](formatLogHeader(iframeId), msg)\n }\n }\n\n function iFrameListener(event) {\n function resizeIFrame() {\n function resize() {\n setSize(messageData)\n setPagePosition(iframeId)\n on('onResized', messageData)\n }\n\n ensureInRange('Height')\n ensureInRange('Width')\n\n syncResize(resize, messageData, 'init')\n }\n\n function processMsg() {\n var data = msg.slice(msgIdLen).split(':')\n var height = data[1] ? parseInt(data[1], 10) : 0\n var iframe = settings[data[0]] && settings[data[0]].iframe\n var compStyle = getComputedStyle(iframe)\n\n return {\n iframe: iframe,\n id: data[0],\n height: height + getPaddingEnds(compStyle) + getBorderEnds(compStyle),\n width: data[2],\n type: data[3]\n }\n }\n\n function getPaddingEnds(compStyle) {\n if (compStyle.boxSizing !== 'border-box') {\n return 0\n }\n var top = compStyle.paddingTop ? parseInt(compStyle.paddingTop, 10) : 0\n var bot = compStyle.paddingBottom\n ? parseInt(compStyle.paddingBottom, 10)\n : 0\n return top + bot\n }\n\n function getBorderEnds(compStyle) {\n if (compStyle.boxSizing !== 'border-box') {\n return 0\n }\n var top = compStyle.borderTopWidth\n ? parseInt(compStyle.borderTopWidth, 10)\n : 0\n var bot = compStyle.borderBottomWidth\n ? parseInt(compStyle.borderBottomWidth, 10)\n : 0\n return top + bot\n }\n\n function ensureInRange(Dimension) {\n var max = Number(settings[iframeId]['max' + Dimension]),\n min = Number(settings[iframeId]['min' + Dimension]),\n dimension = Dimension.toLowerCase(),\n size = Number(messageData[dimension])\n\n log(iframeId, 'Checking ' + dimension + ' is in range ' + min + '-' + max)\n\n if (size < min) {\n size = min\n log(iframeId, 'Set ' + dimension + ' to min value')\n }\n\n if (size > max) {\n size = max\n log(iframeId, 'Set ' + dimension + ' to max value')\n }\n\n messageData[dimension] = '' + size\n }\n\n function isMessageFromIFrame() {\n function checkAllowedOrigin() {\n function checkList() {\n var i = 0,\n retCode = false\n\n log(\n iframeId,\n 'Checking connection is from allowed list of origins: ' +\n checkOrigin\n )\n\n for (; i < checkOrigin.length; i++) {\n if (checkOrigin[i] === origin) {\n retCode = true\n break\n }\n }\n return retCode\n }\n\n function checkSingle() {\n var remoteHost = settings[iframeId] && settings[iframeId].remoteHost\n log(iframeId, 'Checking connection is from: ' + remoteHost)\n return origin === remoteHost\n }\n\n return checkOrigin.constructor === Array ? checkList() : checkSingle()\n }\n\n var origin = event.origin,\n checkOrigin = settings[iframeId] && settings[iframeId].checkOrigin\n\n if (checkOrigin && '' + origin !== 'null' && !checkAllowedOrigin()) {\n throw new Error(\n 'Unexpected message received from: ' +\n origin +\n ' for ' +\n messageData.iframe.id +\n '. Message was: ' +\n event.data +\n '. This error can be disabled by setting the checkOrigin: false option or by providing of array of trusted domains.'\n )\n }\n\n return true\n }\n\n function isMessageForUs() {\n return (\n msgId === ('' + msg).slice(0, msgIdLen) &&\n msg.slice(msgIdLen).split(':')[0] in settings\n ) // ''+Protects against non-string msg\n }\n\n function isMessageFromMetaParent() {\n // Test if this message is from a parent above us. This is an ugly test, however, updating\n // the message format would break backwards compatibility.\n var retCode = messageData.type in { true: 1, false: 1, undefined: 1 }\n\n if (retCode) {\n log(iframeId, 'Ignoring init message from meta parent page')\n }\n\n return retCode\n }\n\n function getMsgBody(offset) {\n return msg.slice(msg.indexOf(':') + msgHeaderLen + offset)\n }\n\n function forwardMsgFromIFrame(msgBody) {\n log(\n iframeId,\n 'onMessage passed: {iframe: ' +\n messageData.iframe.id +\n ', message: ' +\n msgBody +\n '}'\n )\n\n on('onMessage', {\n iframe: messageData.iframe,\n message: JSON.parse(msgBody)\n })\n\n log(iframeId, '--')\n }\n\n function getPageInfo() {\n var bodyPosition = document.body.getBoundingClientRect(),\n iFramePosition = messageData.iframe.getBoundingClientRect()\n\n return JSON.stringify({\n iframeHeight: iFramePosition.height,\n iframeWidth: iFramePosition.width,\n clientHeight: Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0\n ),\n clientWidth: Math.max(\n document.documentElement.clientWidth,\n window.innerWidth || 0\n ),\n offsetTop: parseInt(iFramePosition.top - bodyPosition.top, 10),\n offsetLeft: parseInt(iFramePosition.left - bodyPosition.left, 10),\n scrollTop: window.pageYOffset,\n scrollLeft: window.pageXOffset,\n documentHeight: document.documentElement.clientHeight,\n documentWidth: document.documentElement.clientWidth,\n windowHeight: window.innerHeight,\n windowWidth: window.innerWidth\n })\n }\n\n function sendPageInfoToIframe(iframe, iframeId) {\n function debouncedTrigger() {\n trigger('Send Page Info', 'pageInfo:' + getPageInfo(), iframe, iframeId)\n }\n debounceFrameEvents(debouncedTrigger, 32, iframeId)\n }\n\n function startPageInfoMonitor() {\n function setListener(type, func) {\n function sendPageInfo() {\n if (settings[id]) {\n sendPageInfoToIframe(settings[id].iframe, id)\n } else {\n stop()\n }\n }\n\n ;['scroll', 'resize'].forEach(function (evt) {\n log(id, type + evt + ' listener for sendPageInfo')\n func(window, evt, sendPageInfo)\n })\n }\n\n function stop() {\n setListener('Remove ', removeEventListener)\n }\n\n function start() {\n setListener('Add ', addEventListener)\n }\n\n var id = iframeId // Create locally scoped copy of iFrame ID\n\n start()\n\n if (settings[id]) {\n settings[id].stopPageInfo = stop\n }\n }\n\n function stopPageInfoMonitor() {\n if (settings[iframeId] && settings[iframeId].stopPageInfo) {\n settings[iframeId].stopPageInfo()\n delete settings[iframeId].stopPageInfo\n }\n }\n\n function checkIFrameExists() {\n var retBool = true\n\n if (null === messageData.iframe) {\n warn(iframeId, 'IFrame (' + messageData.id + ') not found')\n retBool = false\n }\n return retBool\n }\n\n function getElementPosition(target) {\n var iFramePosition = target.getBoundingClientRect()\n\n getPagePosition(iframeId)\n\n return {\n x: Math.floor(Number(iFramePosition.left) + Number(pagePosition.x)),\n y: Math.floor(Number(iFramePosition.top) + Number(pagePosition.y))\n }\n }\n\n function scrollRequestFromChild(addOffset) {\n /* istanbul ignore next */ // Not testable in Karma\n function reposition() {\n pagePosition = newPosition\n scrollTo()\n log(iframeId, '--')\n }\n\n function calcOffset() {\n return {\n x: Number(messageData.width) + offset.x,\n y: Number(messageData.height) + offset.y\n }\n }\n\n function scrollParent() {\n if (window.parentIFrame) {\n window.parentIFrame['scrollTo' + (addOffset ? 'Offset' : '')](\n newPosition.x,\n newPosition.y\n )\n } else {\n warn(\n iframeId,\n 'Unable to scroll to requested position, window.parentIFrame not found'\n )\n }\n }\n\n var offset = addOffset\n ? getElementPosition(messageData.iframe)\n : { x: 0, y: 0 },\n newPosition = calcOffset()\n\n log(\n iframeId,\n 'Reposition requested from iFrame (offset x:' +\n offset.x +\n ' y:' +\n offset.y +\n ')'\n )\n\n if (window.top === window.self) {\n reposition()\n } else {\n scrollParent()\n }\n }\n\n function scrollTo() {\n if (false === on('onScroll', pagePosition)) {\n unsetPagePosition()\n } else {\n setPagePosition(iframeId)\n }\n }\n\n function findTarget(location) {\n function jumpToTarget() {\n var jumpPosition = getElementPosition(target)\n\n log(\n iframeId,\n 'Moving to in page link (#' +\n hash +\n ') at x: ' +\n jumpPosition.x +\n ' y: ' +\n jumpPosition.y\n )\n pagePosition = {\n x: jumpPosition.x,\n y: jumpPosition.y\n }\n\n scrollTo()\n log(iframeId, '--')\n }\n\n function jumpToParent() {\n if (window.parentIFrame) {\n window.parentIFrame.moveToAnchor(hash)\n } else {\n log(\n iframeId,\n 'In page link #' +\n hash +\n ' not found and window.parentIFrame not found'\n )\n }\n }\n\n var hash = location.split('#')[1] || '',\n hashData = decodeURIComponent(hash),\n target =\n document.getElementById(hashData) ||\n document.getElementsByName(hashData)[0]\n\n if (target) {\n jumpToTarget()\n } else if (window.top === window.self) {\n log(iframeId, 'In page link #' + hash + ' not found')\n } else {\n jumpToParent()\n }\n }\n\n function onMouse(event) {\n var mousePos = {}\n\n if (Number(messageData.width) === 0 && Number(messageData.height) === 0) {\n var data = getMsgBody(9).split(':')\n mousePos = {\n x: data[1],\n y: data[0]\n }\n } else {\n mousePos = {\n x: messageData.width,\n y: messageData.height\n }\n }\n\n on(event, {\n iframe: messageData.iframe,\n screenX: Number(mousePos.x),\n screenY: Number(mousePos.y),\n type: messageData.type\n })\n }\n\n function on(funcName, val) {\n return chkEvent(iframeId, funcName, val)\n }\n\n function actionMsg() {\n if (settings[iframeId] && settings[iframeId].firstRun) firstRun()\n\n switch (messageData.type) {\n case 'close': {\n closeIFrame(messageData.iframe)\n break\n }\n\n case 'message': {\n forwardMsgFromIFrame(getMsgBody(6))\n break\n }\n\n case 'mouseenter': {\n onMouse('onMouseEnter')\n break\n }\n\n case 'mouseleave': {\n onMouse('onMouseLeave')\n break\n }\n\n case 'autoResize': {\n settings[iframeId].autoResize = JSON.parse(getMsgBody(9))\n break\n }\n\n case 'scrollTo': {\n scrollRequestFromChild(false)\n break\n }\n\n case 'scrollToOffset': {\n scrollRequestFromChild(true)\n break\n }\n\n case 'pageInfo': {\n sendPageInfoToIframe(\n settings[iframeId] && settings[iframeId].iframe,\n iframeId\n )\n startPageInfoMonitor()\n break\n }\n\n case 'pageInfoStop': {\n stopPageInfoMonitor()\n break\n }\n\n case 'inPageLink': {\n findTarget(getMsgBody(9))\n break\n }\n\n case 'reset': {\n resetIFrame(messageData)\n break\n }\n\n case 'init': {\n resizeIFrame()\n on('onInit', messageData.iframe)\n break\n }\n\n default: {\n if (\n Number(messageData.width) === 0 &&\n Number(messageData.height) === 0\n ) {\n warn(\n 'Unsupported message received (' +\n messageData.type +\n '), this is likely due to the iframe containing a later ' +\n 'version of iframe-resizer than the parent page'\n )\n } else {\n resizeIFrame()\n }\n }\n }\n }\n\n function hasSettings(iframeId) {\n var retBool = true\n\n if (!settings[iframeId]) {\n retBool = false\n warn(\n messageData.type +\n ' No settings for ' +\n iframeId +\n '. Message was: ' +\n msg\n )\n }\n\n return retBool\n }\n\n function iFrameReadyMsgReceived() {\n // eslint-disable-next-line no-restricted-syntax, guard-for-in\n for (var iframeId in settings) {\n trigger(\n 'iFrame requested init',\n createOutgoingMsg(iframeId),\n settings[iframeId].iframe,\n iframeId\n )\n }\n }\n\n function firstRun() {\n if (settings[iframeId]) {\n settings[iframeId].firstRun = false\n }\n }\n\n var msg = event.data,\n messageData = {},\n iframeId = null\n\n if ('[iFrameResizerChild]Ready' === msg) {\n iFrameReadyMsgReceived()\n } else if (isMessageForUs()) {\n messageData = processMsg()\n iframeId = messageData.id\n if (settings[iframeId]) {\n settings[iframeId].loaded = true\n }\n\n if (!isMessageFromMetaParent() && hasSettings(iframeId)) {\n log(iframeId, 'Received: ' + msg)\n\n if (checkIFrameExists() && isMessageFromIFrame()) {\n actionMsg()\n }\n }\n } else {\n info(iframeId, 'Ignored: ' + msg)\n }\n }\n\n function chkEvent(iframeId, funcName, val) {\n var func = null,\n retVal = null\n\n if (settings[iframeId]) {\n func = settings[iframeId][funcName]\n\n if ('function' === typeof func) {\n retVal = func(val)\n } else {\n throw new TypeError(\n funcName + ' on iFrame[' + iframeId + '] is not a function'\n )\n }\n }\n\n return retVal\n }\n\n function removeIframeListeners(iframe) {\n var iframeId = iframe.id\n delete settings[iframeId]\n }\n\n function closeIFrame(iframe) {\n var iframeId = iframe.id\n if (chkEvent(iframeId, 'onClose', iframeId) === false) {\n log(iframeId, 'Close iframe cancelled by onClose event')\n return\n }\n log(iframeId, 'Removing iFrame: ' + iframeId)\n\n try {\n // Catch race condition error with React\n if (iframe.parentNode) {\n iframe.parentNode.removeChild(iframe)\n }\n } catch (error) {\n warn(error)\n }\n\n chkEvent(iframeId, 'onClosed', iframeId)\n log(iframeId, '--')\n removeIframeListeners(iframe)\n }\n\n function getPagePosition(iframeId) {\n if (null === pagePosition) {\n pagePosition = {\n x:\n window.pageXOffset === undefined\n ? document.documentElement.scrollLeft\n : window.pageXOffset,\n y:\n window.pageYOffset === undefined\n ? document.documentElement.scrollTop\n : window.pageYOffset\n }\n log(\n iframeId,\n 'Get page position: ' + pagePosition.x + ',' + pagePosition.y\n )\n }\n }\n\n function setPagePosition(iframeId) {\n if (null !== pagePosition) {\n window.scrollTo(pagePosition.x, pagePosition.y)\n log(\n iframeId,\n 'Set page position: ' + pagePosition.x + ',' + pagePosition.y\n )\n unsetPagePosition()\n }\n }\n\n function unsetPagePosition() {\n pagePosition = null\n }\n\n function resetIFrame(messageData) {\n function reset() {\n setSize(messageData)\n trigger('reset', 'reset', messageData.iframe, messageData.id)\n }\n\n log(\n messageData.id,\n 'Size reset requested by ' +\n ('init' === messageData.type ? 'host page' : 'iFrame')\n )\n getPagePosition(messageData.id)\n syncResize(reset, messageData, 'reset')\n }\n\n function setSize(messageData) {\n function setDimension(dimension) {\n if (!messageData.id) {\n log('undefined', 'messageData id not set')\n return\n }\n messageData.iframe.style[dimension] = messageData[dimension] + 'px'\n log(\n messageData.id,\n 'IFrame (' +\n iframeId +\n ') ' +\n dimension +\n ' set to ' +\n messageData[dimension] +\n 'px'\n )\n }\n\n function chkZero(dimension) {\n // FireFox sets dimension of hidden iFrames to zero.\n // So if we detect that set up an event to check for\n // when iFrame becomes visible.\n\n /* istanbul ignore next */ // Not testable in PhantomJS\n if (!hiddenCheckEnabled && '0' === messageData[dimension]) {\n hiddenCheckEnabled = true\n log(iframeId, 'Hidden iFrame detected, creating visibility listener')\n fixHiddenIFrames()\n }\n }\n\n function processDimension(dimension) {\n setDimension(dimension)\n chkZero(dimension)\n }\n\n var iframeId = messageData.iframe.id\n\n if (settings[iframeId]) {\n if (settings[iframeId].sizeHeight) {\n processDimension('height')\n }\n if (settings[iframeId].sizeWidth) {\n processDimension('width')\n }\n }\n }\n\n function syncResize(func, messageData, doNotSync) {\n /* istanbul ignore if */ // Not testable in PhantomJS\n if (\n doNotSync !== messageData.type &&\n requestAnimationFrame &&\n // including check for jasmine because had trouble getting spy to work in unit test using requestAnimationFrame\n !window.jasmine\n ) {\n log(messageData.id, 'Requesting animation frame')\n requestAnimationFrame(func)\n } else {\n func()\n }\n }\n\n function trigger(calleeMsg, msg, iframe, id, noResponseWarning) {\n function postMessageToIFrame() {\n var target = settings[id] && settings[id].targetOrigin\n log(\n id,\n '[' +\n calleeMsg +\n '] Sending msg to iframe[' +\n id +\n '] (' +\n msg +\n ') targetOrigin: ' +\n target\n )\n iframe.contentWindow.postMessage(msgId + msg, target)\n }\n\n function iFrameNotFound() {\n warn(id, '[' + calleeMsg + '] IFrame(' + id + ') not found')\n }\n\n function chkAndSend() {\n if (\n iframe &&\n 'contentWindow' in iframe &&\n null !== iframe.contentWindow\n ) {\n // Null test for PhantomJS\n postMessageToIFrame()\n } else {\n iFrameNotFound()\n }\n }\n\n function warnOnNoResponse() {\n function warning() {\n if (settings[id] && !settings[id].loaded && !errorShown) {\n errorShown = true\n warn(\n id,\n 'IFrame has not responded within ' +\n settings[id].warningTimeout / 1000 +\n ' seconds. Check iFrameResizer.contentWindow.js has been loaded in iFrame. This message can be ignored if everything is working, or you can set the warningTimeout option to a higher value or zero to suppress this warning.'\n )\n }\n }\n\n if (\n !!noResponseWarning &&\n settings[id] &&\n !!settings[id].warningTimeout\n ) {\n settings[id].msgTimeout = setTimeout(\n warning,\n settings[id].warningTimeout\n )\n }\n }\n\n var errorShown = false\n\n id = id || iframe.id\n\n if (settings[id]) {\n chkAndSend()\n warnOnNoResponse()\n }\n }\n\n function createOutgoingMsg(iframeId) {\n return (\n iframeId +\n ':' +\n settings[iframeId].bodyMarginV1 +\n ':' +\n settings[iframeId].sizeWidth +\n ':' +\n settings[iframeId].log +\n ':' +\n settings[iframeId].interval +\n ':' +\n settings[iframeId].enablePublicMethods +\n ':' +\n settings[iframeId].autoResize +\n ':' +\n settings[iframeId].bodyMargin +\n ':' +\n settings[iframeId].heightCalculationMethod +\n ':' +\n settings[iframeId].bodyBackground +\n ':' +\n settings[iframeId].bodyPadding +\n ':' +\n settings[iframeId].tolerance +\n ':' +\n settings[iframeId].inPageLinks +\n ':' +\n settings[iframeId].resizeFrom +\n ':' +\n settings[iframeId].widthCalculationMethod +\n ':' +\n settings[iframeId].mouseEvents\n )\n }\n\n function isNumber(value) {\n return typeof value === 'number'\n }\n\n function setupIFrame(iframe, options) {\n function setLimits() {\n function addStyle(style) {\n var styleValue = settings[iframeId][style]\n if (Infinity !== styleValue && 0 !== styleValue) {\n iframe.style[style] = isNumber(styleValue)\n ? styleValue + 'px'\n : styleValue\n log(iframeId, 'Set ' + style + ' = ' + iframe.style[style])\n }\n }\n\n function chkMinMax(dimension) {\n if (\n settings[iframeId]['min' + dimension] >\n settings[iframeId]['max' + dimension]\n ) {\n throw new Error(\n 'Value for min' +\n dimension +\n ' can not be greater than max' +\n dimension\n )\n }\n }\n\n chkMinMax('Height')\n chkMinMax('Width')\n\n addStyle('maxHeight')\n addStyle('minHeight')\n addStyle('maxWidth')\n addStyle('minWidth')\n }\n\n function newId() {\n var id = (options && options.id) || defaults.id + count++\n if (null !== document.getElementById(id)) {\n id += count++\n }\n return id\n }\n\n function ensureHasId(iframeId) {\n if (typeof iframeId !== 'string') {\n throw new TypeError('Invaild id for iFrame. Expected String')\n }\n\n if ('' === iframeId) {\n // eslint-disable-next-line no-multi-assign\n iframe.id = iframeId = newId()\n logEnabled = (options || {}).log\n log(\n iframeId,\n 'Added missing iframe ID: ' + iframeId + ' (' + iframe.src + ')'\n )\n }\n\n return iframeId\n }\n\n function setScrolling() {\n log(\n iframeId,\n 'IFrame scrolling ' +\n (settings[iframeId] && settings[iframeId].scrolling\n ? 'enabled'\n : 'disabled') +\n ' for ' +\n iframeId\n )\n iframe.style.overflow =\n false === (settings[iframeId] && settings[iframeId].scrolling)\n ? 'hidden'\n : 'auto'\n switch (settings[iframeId] && settings[iframeId].scrolling) {\n case 'omit': {\n break\n }\n\n case true: {\n iframe.scrolling = 'yes'\n break\n }\n\n case false: {\n iframe.scrolling = 'no'\n break\n }\n\n default: {\n iframe.scrolling = settings[iframeId]\n ? settings[iframeId].scrolling\n : 'no'\n }\n }\n }\n\n // The V1 iFrame script expects an int, where as in V2 expects a CSS\n // string value such as '1px 3em', so if we have an int for V2, set V1=V2\n // and then convert V2 to a string PX value.\n function setupBodyMarginValues() {\n if (\n 'number' ===\n typeof (settings[iframeId] && settings[iframeId].bodyMargin) ||\n '0' === (settings[iframeId] && settings[iframeId].bodyMargin)\n ) {\n settings[iframeId].bodyMarginV1 = settings[iframeId].bodyMargin\n settings[iframeId].bodyMargin =\n '' + settings[iframeId].bodyMargin + 'px'\n }\n }\n\n function checkReset() {\n // Reduce scope of firstRun to function, because IE8's JS execution\n // context stack is borked and this value gets externally\n // changed midway through running this function!!!\n var firstRun = settings[iframeId] && settings[iframeId].firstRun,\n resetRequertMethod =\n settings[iframeId] &&\n settings[iframeId].heightCalculationMethod in resetRequiredMethods\n\n if (!firstRun && resetRequertMethod) {\n resetIFrame({ iframe: iframe, height: 0, width: 0, type: 'init' })\n }\n }\n\n function setupIFrameObject() {\n if (settings[iframeId]) {\n settings[iframeId].iframe.iFrameResizer = {\n close: closeIFrame.bind(null, settings[iframeId].iframe),\n\n removeListeners: removeIframeListeners.bind(\n null,\n settings[iframeId].iframe\n ),\n\n resize: trigger.bind(\n null,\n 'Window resize',\n 'resize',\n settings[iframeId].iframe\n ),\n\n moveToAnchor: function (anchor) {\n trigger(\n 'Move to anchor',\n 'moveToAnchor:' + anchor,\n settings[iframeId].iframe,\n iframeId\n )\n },\n\n sendMessage: function (message) {\n message = JSON.stringify(message)\n trigger(\n 'Send Message',\n 'message:' + message,\n settings[iframeId].iframe,\n iframeId\n )\n }\n }\n }\n }\n\n // We have to call trigger twice, as we can not be sure if all\n // iframes have completed loading when this code runs. The\n // event listener also catches the page changing in the iFrame.\n function init(msg) {\n function iFrameLoaded() {\n trigger('iFrame.onload', msg, iframe, undefined, true)\n checkReset()\n }\n\n function createDestroyObserver(MutationObserver) {\n if (!iframe.parentNode) {\n return\n }\n\n var destroyObserver = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n var removedNodes = Array.prototype.slice.call(mutation.removedNodes) // Transform NodeList into an Array\n removedNodes.forEach(function (removedNode) {\n if (removedNode === iframe) {\n closeIFrame(iframe)\n }\n })\n })\n })\n destroyObserver.observe(iframe.parentNode, {\n childList: true\n })\n }\n\n var MutationObserver = getMutationObserver()\n if (MutationObserver) {\n createDestroyObserver(MutationObserver)\n }\n\n addEventListener(iframe, 'load', iFrameLoaded)\n trigger('init', msg, iframe, undefined, true)\n }\n\n function checkOptions(options) {\n if ('object' !== typeof options) {\n throw new TypeError('Options is not an object')\n }\n }\n\n function copyOptions(options) {\n // eslint-disable-next-line no-restricted-syntax\n for (var option in defaults) {\n if (Object.prototype.hasOwnProperty.call(defaults, option)) {\n settings[iframeId][option] = Object.prototype.hasOwnProperty.call(\n options,\n option\n )\n ? options[option]\n : defaults[option]\n }\n }\n }\n\n function getTargetOrigin(remoteHost) {\n return '' === remoteHost ||\n null !== remoteHost.match(/^(about:blank|javascript:|file:\\/\\/)/)\n ? '*'\n : remoteHost\n }\n\n function depricate(key) {\n var splitName = key.split('Callback')\n\n if (splitName.length === 2) {\n var name =\n 'on' + splitName[0].charAt(0).toUpperCase() + splitName[0].slice(1)\n this[name] = this[key]\n delete this[key]\n warn(\n iframeId,\n \"Deprecated: '\" +\n key +\n \"' has been renamed '\" +\n name +\n \"'. The old method will be removed in the next major version.\"\n )\n }\n }\n\n function processOptions(options) {\n options = options || {}\n\n settings[iframeId] = Object.create(null) // Protect against prototype attacks\n settings[iframeId].iframe = iframe\n settings[iframeId].firstRun = true\n settings[iframeId].remoteHost =\n iframe.src && iframe.src.split('/').slice(0, 3).join('/')\n\n checkOptions(options)\n Object.keys(options).forEach(depricate, options)\n copyOptions(options)\n\n if (settings[iframeId]) {\n settings[iframeId].targetOrigin =\n true === settings[iframeId].checkOrigin\n ? getTargetOrigin(settings[iframeId].remoteHost)\n : '*'\n }\n }\n\n function beenHere() {\n return iframeId in settings && 'iFrameResizer' in iframe\n }\n\n var iframeId = ensureHasId(iframe.id)\n\n if (beenHere()) {\n warn(iframeId, 'Ignored iFrame, already setup.')\n } else {\n processOptions(options)\n setScrolling()\n setLimits()\n setupBodyMarginValues()\n init(createOutgoingMsg(iframeId))\n setupIFrameObject()\n }\n }\n\n function debouce(fn, time) {\n if (null === timer) {\n timer = setTimeout(function () {\n timer = null\n fn()\n }, time)\n }\n }\n\n var frameTimer = {}\n function debounceFrameEvents(fn, time, frameId) {\n if (!frameTimer[frameId]) {\n frameTimer[frameId] = setTimeout(function () {\n frameTimer[frameId] = null\n fn()\n }, time)\n }\n }\n\n // Not testable in PhantomJS\n /* istanbul ignore next */\n\n function fixHiddenIFrames() {\n function checkIFrames() {\n function checkIFrame(settingId) {\n function chkDimension(dimension) {\n return (\n '0px' ===\n (settings[settingId] && settings[settingId].iframe.style[dimension])\n )\n }\n\n function isVisible(el) {\n return null !== el.offsetParent\n }\n\n if (\n settings[settingId] &&\n isVisible(settings[settingId].iframe) &&\n (chkDimension('height') || chkDimension('width'))\n ) {\n trigger(\n 'Visibility change',\n 'resize',\n settings[settingId].iframe,\n settingId\n )\n }\n }\n\n Object.keys(settings).forEach(function (key) {\n checkIFrame(key)\n })\n }\n\n function mutationObserved(mutations) {\n log(\n 'window',\n 'Mutation observed: ' + mutations[0].target + ' ' + mutations[0].type\n )\n debouce(checkIFrames, 16)\n }\n\n function createMutationObserver() {\n var target = document.querySelector('body'),\n config = {\n attributes: true,\n attributeOldValue: false,\n characterData: true,\n characterDataOldValue: false,\n childList: true,\n subtree: true\n },\n observer = new MutationObserver(mutationObserved)\n\n observer.observe(target, config)\n }\n\n var MutationObserver = getMutationObserver()\n if (MutationObserver) {\n createMutationObserver()\n }\n }\n\n function resizeIFrames(event) {\n function resize() {\n sendTriggerMsg('Window ' + event, 'resize')\n }\n\n log('window', 'Trigger event: ' + event)\n debouce(resize, 16)\n }\n\n // Not testable in PhantomJS\n /* istanbul ignore next */\n function tabVisible() {\n function resize() {\n sendTriggerMsg('Tab Visible', 'resize')\n }\n\n if ('hidden' !== document.visibilityState) {\n log('document', 'Trigger event: Visibility change')\n debouce(resize, 16)\n }\n }\n\n function sendTriggerMsg(eventName, event) {\n function isIFrameResizeEnabled(iframeId) {\n return (\n settings[iframeId] &&\n 'parent' === settings[iframeId].resizeFrom &&\n settings[iframeId].autoResize &&\n !settings[iframeId].firstRun\n )\n }\n\n Object.keys(settings).forEach(function (iframeId) {\n if (isIFrameResizeEnabled(iframeId)) {\n trigger(eventName, event, settings[iframeId].iframe, iframeId)\n }\n })\n }\n\n function setupEventListeners() {\n addEventListener(window, 'message', iFrameListener)\n\n addEventListener(window, 'resize', function () {\n resizeIFrames('resize')\n })\n\n addEventListener(document, 'visibilitychange', tabVisible)\n\n addEventListener(document, '-webkit-visibilitychange', tabVisible)\n }\n\n function factory() {\n function init(options, element) {\n function chkType() {\n if (!element.tagName) {\n throw new TypeError('Object is not a valid DOM element')\n } else if ('IFRAME' !== element.tagName.toUpperCase()) {\n throw new TypeError(\n 'Expected