{"version":3,"file":"js/58412-c726c58bf376e3d1f69a.js","mappings":";gHAeA,IAAIA,EAAkB,UAOtBC,EAAOC,QAUP,SAAoBC,GAClB,IAOIC,EAPAC,EAAM,GAAKF,EACXG,EAAQN,EAAgBO,KAAKF,GAEjC,IAAKC,EACH,OAAOD,EAIT,IAAIG,EAAO,GACPC,EAAQ,EACRC,EAAY,EAEhB,IAAKD,EAAQH,EAAMG,MAAOA,EAAQJ,EAAIM,OAAQF,IAAS,CACrD,OAAQJ,EAAIO,WAAWH,IACrB,KAAK,GACHL,EAAS,SACT,MACF,KAAK,GACHA,EAAS,QACT,MACF,KAAK,GACHA,EAAS,QACT,MACF,KAAK,GACHA,EAAS,OACT,MACF,KAAK,GACHA,EAAS,OACT,MACF,QACE,SAGAM,IAAcD,IAChBD,GAAQH,EAAIQ,UAAUH,EAAWD,IAGnCC,EAAYD,EAAQ,EACpBD,GAAQJ,EAGV,OAAOM,IAAcD,EACjBD,EAAOH,EAAIQ,UAAUH,EAAWD,GAChCD,qUC5EN,SAASM,EAAgBC,EAAKC,EAAKC,GAAiK,OAApJD,KAAOD,EAAOG,OAAOC,eAAeJ,EAAKC,EAAK,CAAEC,MAAOA,EAAOG,YAAY,EAAMC,cAAc,EAAMC,UAAU,IAAkBP,EAAIC,GAAOC,EAAgBF,EAQ3M,MAQMQ,EAAa,CACjBC,EAAG,CACDC,QAASC,EACTC,MAAM,EACNC,KAAMF,KAERG,QAAS,CACPC,QAAS,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,UAAW,UAAW,QAAS,UAAW,MAAO,SAAU,UACzGH,MAAM,GAERI,MAAO,CACLC,SAAU,CAAC,QAAS,WAEtBC,GAAI,CACFL,KAAMF,EACNQ,MAAM,GAERC,KAAM,CACJV,QAASC,KAEXU,OAAQ,CACNX,QA1BkB,EA2BlBG,KAAMF,KAERW,QAAS,CACPZ,QAjCc,EAkCda,OAAQ,CAAC,UAEXC,IAAK,CACHD,OAAQ,CAAC,YACTJ,MAAM,GAERM,SAAU,CACRR,SAAU,CAAC,OACXM,OAAQ,CAAC,UAEXG,QAAS,CACPT,SAAU,CAAC,WACXJ,KAAMF,IAERgB,GAAI,CACFjB,QAjDc,EAkDda,OAAQ,CAAC,OAEXK,GAAI,CACFX,SAAU,CAAC,KAAM,MACjBJ,KAtDc,GAwDhBgB,GAAI,CACFnB,QAzDc,EA0DdK,QAAS,CAAC,SAAU,UACpBQ,OAAQ,CAAC,OAEXO,WAAY,CACVpB,QA9Dc,EA+Dda,OAAQ,CAAC,WAEXQ,OAAQ,CACNhB,QAAS,CAAC,SAAU,WAEtBiB,OAAQ,CACNjB,QAAS,CAAC,SAAU,WAEtBkB,GAAI,CACFpB,KAxEc,EAyEdM,MAAM,GAERe,IAAK,CACHf,MAAM,GAERgB,GAAI,CACFzB,QA/Ec,EAgFda,OAAQ,CAAC,KAAM,KAAM,SAEvBa,KAAM,CACJxB,MAAM,GAERyB,GAAI,CACFpB,SAAU,CAAC,MACXJ,KAvFc,GAyFhByB,QAAS,CACPrB,SAAU,CAAC,SAAU,OACrBJ,KAAMF,IAER4B,GAAI,CACFhB,OAAQ,CAAC,OAAQ,QAEnBiB,GAAI,CACFjB,OAAQ,CAAC,OAAQ,QAEnBkB,GAAI,CACF/B,QAjGkB,EAkGlBa,OAAQ,CAAC,OAAQ,QAEnBmB,IAAK,CACHhC,QArGkB,EAsGlBa,OAAQ,CAAC,SAEXoB,KAAM,CACJ1B,SAAU,CAAC,KAAM,KAAM,KAAM,QAE/B2B,OAAQ,CACNrB,OAAQ,CAAC,QAAS,QAAS,WAC3BJ,MAAM,GAER0B,QAAS,CACPnC,QAhHkB,EAiHlBa,OAAQ,CAAC,YAEXuB,MAAO,CACL7B,SAAU,CAAC,UAAW,WAAY,QAAS,QAAS,QAAS,MAC7DJ,KAxHc,GA0HhBkC,MAAO,CACLxB,OAAQ,CAAC,SACTN,SAAU,CAAC,OAEb+B,GAAI,CACFtC,QA/Hc,EAgIda,OAAQ,CAAC,OAEX0B,MAAO,CACL1B,OAAQ,CAAC,SACTN,SAAU,CAAC,OAEbiC,GAAI,CACFxC,QAvIc,EAwIda,OAAQ,CAAC,OAEX4B,MAAO,CACL5B,OAAQ,CAAC,SACTN,SAAU,CAAC,OAEbmC,GAAI,CACF7B,OAAQ,CAAC,QAAS,QAAS,QAAS,SACpCN,SAAU,CAAC,KAAM,OAEnBoC,MAAO,CACL9B,OAAQ,CAAC,QAAS,SAClBJ,MAAM,GAERmC,GAAI,CACFrC,SAAU,CAAC,MACXJ,KAxJc,GA0JhB0C,MAAO,CACLtC,SAAU,CAAC,QAAS,WAEtBuC,IAAK,CACH3C,KAAMF,EACNQ,MAAM,IAIV,SAASsC,EAAoBC,GAC3B,OAAOC,IACLnD,EAAWmD,GAAW,IAAKD,KACtBlD,EAAWmD,KAKpB,CAAC,UAAW,OAAQ,MAAO,SAAU,IAAK,OAAOC,QAAQH,EAAoB,CAC3E/C,QA5KgB,EA6KhBG,KAAMF,MAER,CAAC,OAAQ,IAAK,MAAO,MAAO,OAAQ,OAAQ,OAAQ,MAAO,KAAM,IAAK,MAAO,OAAQ,IAAK,OAAQ,OAAQ,SAAU,MAAO,MAAO,OAAQ,IAAK,OAAOiD,QAAQH,EAAoB,CAChL/C,QA7KoB,EA8KpBG,KAAMF,MAER,CAAC,IAAK,OAAOiD,QAAQH,EAAoB,CACvC/C,QAjLoB,EAkLpBG,KAAMF,MAER,CAAC,IAAK,QAAS,OAAQ,MAAO,OAAOiD,QAAQH,EAAoB,CAC/D/C,QArLoB,EAsLpBG,KAAMF,KAER,CAAC,UAAW,QAAS,SAAU,SAAU,MAAO,UAAW,cAAciD,QAAQH,EAAoB,CACnG/C,QA5LgB,EA6LhBG,KAAMF,MAER,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MAAMiD,QAAQH,EAAoB,CAC/D/C,QA7LoB,EA8LpBG,KAAMF,MAER,CAAC,QAAS,SAAU,SAAU,MAAO,SAASiD,QAAQH,EAAoB,CACxE5C,KAAMF,MAGR,MAAMkD,EAAO1D,OAAO2D,OAAOtD,GAErBuD,EAAkB,CAAC,SAAU,OAAQ,OAAQ,UAAW,QAAS,QAAS,WAAY,OAAQ,OAAQ,OAAQ,OAAQ,WAAY,SAAU,SAAU,QAAS,SAC/JC,EAAmB7D,OAAO8D,KAAKJ,GAAMK,QAAOC,GAAe,WAARA,GAA4B,WAARA,IAGvEC,EAAc,EACdC,EAAqB,EACrBC,EAAmB,EACnBC,EAAiB,EAGjBC,EAAarE,OAAO2D,OAAO,CAC/BW,IARmB,EASnBC,KATmB,EAUnBC,MAVmB,EAWnBC,QAASP,EACTQ,SAAUP,EACVQ,SAbmB,EAcnBC,QAAST,EACTU,SAAUV,EACVW,IAhBmB,EAiBnBC,OAjBmB,EAkBnBC,KAlBmB,EAmBnBC,GAnBmB,EAoBnBC,KApBmB,EAqBnBC,MArBmB,EAsBnBC,KAtBmB,EAuBnBC,QAvBmB,EAwBnBC,KAAMnB,EACNoB,MAzBmB,EA0BnBC,MAAOrB,EACPsB,OA3BmB,EA4BnBC,IA5BmB,EA6BnBC,KA7BmB,EA8BnBC,QAAS1B,EACT2B,MA/BmB,EAgCnBC,MAhCmB,EAiCnBC,KAAM7B,EACN8B,MAAO9B,EACP+B,MAAO7B,EACP8B,IApCmB,EAqCnBC,QArCmB,EAsCnBC,OAtCmB,EAuCnBC,SAvCmB,EAwCnBC,OAxCmB,EAyCnBC,MAzCmB,EA0CnB7F,KA1CmB,EA2CnB8F,MA3CmB,IA8CfC,EAAsBzG,OAAO2D,OAAO,CACxCa,MAAO,YACPC,QAAS,UACTE,SAAU,WACViB,QAAS,UACTO,QAAS,UACTC,OAAQ,SACRC,SAAU,aAGZ,SAASK,IAeP,OAdAA,EAAW1G,OAAO2G,QAAU,SAAUL,GACpC,IAAK,IAAIM,EAAI,EAAGA,EAAIC,UAAUpH,OAAQmH,IAAK,CACzC,IAAInE,EAASoE,UAAUD,GAEvB,IAAK,IAAI9G,KAAO2C,EACVzC,OAAO8G,UAAUC,eAAeC,KAAKvE,EAAQ3C,KAC/CwG,EAAOxG,GAAO2C,EAAO3C,IAK3B,OAAOwG,GAGFI,EAASO,MAAMC,KAAML,WAG9B,SAASM,GAAQ,WACfC,EAAa,GAAE,UACfC,EAAS,SACTvG,EAAW,KAAI,UACfwG,GAAY,EAAK,QACjB9D,IAEA,MAAM+D,EAAM/D,EACZ,OAAO8D,EAAyB,gBAAoBC,EAAKb,EAAS,CAChEW,UAAWA,GACVD,IAA4B,gBAAoBG,EAAKb,EAAS,CAC/DW,UAAWA,GACVD,GAAatG,GAGlB,MAAM0G,EAIJC,UAAUC,EAAM3H,GAEd,OAAOA,EAOT4H,KAAKD,EAAMC,GACT,OAAOA,GA2BX,MAAMC,EACJC,YAAYH,EAAMI,EAASC,GACzBnI,EAAgBsH,KAAM,UAAU,GAEhCtH,EAAgBsH,KAAM,eAAW,GAEjCtH,EAAgBsH,KAAM,gBAAY,GAElCtH,EAAgBsH,KAAM,mBAAe,GAErCtH,EAAgBsH,KAAM,eAAW,GAOjCA,KAAKY,QAAU,IAAKA,GAEpBZ,KAAKc,SAAWN,EAChBR,KAAKe,YAAc,KAAKP,EAAKQ,OAAO,GAAGC,cAAgBT,EAAKU,MAAM,KAClElB,KAAKa,QAAsB,OAAZA,QAAgC,IAAZA,EAAqBA,EAAU,KAQpEM,cAAcvH,EAAUwH,GAOtB,OANgBpB,KAAKa,QAAuB,gBAAoBb,KAAKa,QAASO,EAAOxH,GAAYoG,KAAKqB,YAAYzH,EAAUwH,GAc9HE,QAAQvJ,EAAQwJ,EAASC,EAAUC,GAAS,GAC1C,OA9DJ,SAAe1J,EAAQwJ,EAASG,EAASD,GAAS,GAChD,MAAME,EAAU5J,EAAOG,MAAMqJ,aAAmBK,OAASL,EAAU,IAAIK,OAAOL,EAAS,MAEvF,OAAKI,EAIE,CACLzJ,MAAOyJ,EAAQ,GACf7H,KAAM2H,KACHC,EAAQC,GACXtJ,MAAOsJ,EAAQtJ,MACfE,OAAQoJ,EAAQ,GAAGpJ,OACnBsJ,OAAO,GATA,KA0DA3J,CAAMH,EAAQwJ,EAASC,EAAUC,GAO1CK,cAAczI,EAAS+H,GACrB,OAAO/H,EAOT0I,aAAa1I,EAAS+H,GACpB,OAAO/H,iICnZX,SAASX,EAAgBC,EAAKC,EAAKC,GAAiK,OAApJD,KAAOD,EAAOG,OAAOC,eAAeJ,EAAKC,EAAK,CAAEC,MAAOA,EAAOG,YAAY,EAAMC,cAAc,EAAMC,UAAU,IAAkBP,EAAIC,GAAOC,EAAgBF,EAQ3M,MAAMqJ,EAAiB,2BAEvB,MAAMC,UAAoB,EAAAC,EACxB3B,UAAUC,EAAM3H,GAWd,MAVa,UAAT2H,GACF1H,OAAO8D,KAAK/D,GAAO0D,SAAQ3D,IACrBuJ,OAAOtJ,EAAMD,IAAMV,MAAM8J,WAEpBnJ,EAAMD,MAMZC,GAOX,MAEMuJ,EAAgB,uCAChBC,EAAgB,wBAChBC,EAAa,iBAEnB,SAASC,IAEP,GAAsB,qBAAXC,QAA8C,qBAAbC,SAI5C,OAAOA,SAASC,eAAeC,mBAAmB,cAGpD,MAAMC,EACJjC,YAAYkC,EAAQzB,EAAQ,GAAI0B,EAAW,GAAIC,EAAU,IACvD,IAAIC,EAEJtK,EAAgBsH,KAAM,eAAW,GAEjCtH,EAAgBsH,KAAM,cAAU,GAEhCtH,EAAgBsH,KAAM,eAAW,GAEjCtH,EAAgBsH,KAAM,iBAAa,GAEnCtH,EAAgBsH,KAAM,UAAW,IAEjCtH,EAAgBsH,KAAM,aAAS,GAE/BtH,EAAgBsH,KAAM,gBAAY,GAElCtH,EAAgBsH,KAAM,eAAW,GAEjCtH,EAAgBsH,KAAM,gBAAY,GAMlCA,KAAKoB,MAAQA,EACbpB,KAAK8C,SAAWA,EAChB9C,KAAK+C,QAAU,IAAIA,EAAS,IAAId,GAChCjC,KAAKiD,UAAY,EACjBjD,KAAKkD,UAAYlD,KAAKmD,gBAAgBN,GAAU,IAChD7C,KAAKoD,QAAU,IAAIC,IAA6C,QAAxCL,EAAmB5B,EAAMkC,iBAA4C,IAArBN,EAA8BA,EAAmB,EAAAO,GACzHvD,KAAKwD,OAAS,IAAIH,IAAI,EAAAI,GACtBzD,KAAK0D,QAAU,IAAIL,IAAIjC,EAAMuC,WAO/BC,sBAAsBpD,EAAM3H,GAC1B,OAAOmH,KAAK+C,QAAQc,QAAO,CAACC,EAAWjH,IAAyB,OAAdiH,GAAkD,oBAArBjH,EAAO0D,UAA2B1D,EAAO0D,UAAUC,EAAMsD,GAAaA,GAAWjL,GAOlKkL,iBAAiBvD,EAAMC,GAErB,OAAOT,KAAK+C,QAAQc,QAAO,CAACG,EAAUnH,IAAwB,OAAbmH,GAA4C,oBAAhBnH,EAAO4D,KAAsB5D,EAAO4D,KAAKD,EAAMwD,GAAYA,GAAUvD,GASpJwD,cAAclM,EAAQmM,GACpB,MAAMC,EAAW,IACX,MACJ/C,GACEpB,KACJ,IAAIoE,EAAgBrM,EAChBsM,EAAe,EACfC,EAAQ,KAkEZ,OAjEAtE,KAAK8C,SAASvG,SAAQgI,IACpB,MAAMjI,EAAUiI,EAAQC,QAAQC,cAC1BpI,EAAS2D,KAAK0E,aAAapI,GAEjC,GAAI8E,EAAMmD,EAAQxD,eAAiBf,KAAK2E,aAAarI,GACnD,OAIF,IAAK0D,KAAK4E,eAAeV,EAAc7H,GACrC,OAIF,IAAIwI,EAAkB,GAEtB,KAAOT,IAAkBE,EAAQC,EAAQrM,MAAMkM,KAAiB,CAC9D,MAAM,MACJ/L,EAAK,OACLE,EAAM,MACNL,EAAK,MACL2J,EACA/H,KAAM2H,KACHqD,GACDR,EACES,EAAYR,EAAQzD,SAAWqB,OAAOkC,GAExChM,EAAQ,IACVwM,GAAmBT,EAAclD,MAAM,EAAG7I,IAGxCwJ,GACFgD,GAAmBpD,EAAS,MAAMsD,QAAkB,MAAMA,OAAe7M,QAAY6M,OACrF/E,KAAKiD,UAAY,EACjBoB,GAAgB,EAChBF,EAASY,GAAa,CACpBnL,SAAU1B,EACVqM,QAAAA,EACAnD,MAAO,IAAKA,KACP0D,EACHlM,IAAKoH,KAAKiD,YAId4B,GAAmB3M,EAKjBqM,EAAQS,QACVZ,EAAgBS,EAAkBT,EAAclD,MAAM7I,EAAQE,GAC9DsM,EAAkB,IAGlBT,EAAgBA,EAAclD,MAAM7I,GAASE,GAAUL,EAAMK,SAM5DgM,EAAQS,SACXZ,EAAgBS,EAAkBT,MAIjB,IAAjBC,EACKtM,EAGFiI,KAAKiF,cAAcb,EAAeD,GAO3CS,eAAeV,EAAcgB,GAC3B,SAAKhB,EAAa5H,UAAY4I,EAAY5I,YAKtC4H,EAAapK,OAKboK,EAAatK,SAASrB,OAAS,EAC1B2L,EAAatK,SAASuL,SAASD,EAAY5I,WAGhD4H,EAAaxK,QAAQnB,OAAS,GAAK2L,EAAaxK,QAAQyL,SAASD,EAAY5I,YAK7E4I,EAAYhL,OAAO3B,OAAS,EACvB2M,EAAYhL,OAAOiL,SAASjB,EAAa5H,YAI7C4H,EAAa3K,MAAQ2K,EAAa5H,UAAY4I,EAAY5I,UAKxD8I,QAAQlB,GAAgBA,EAAa7K,QAAU6L,EAAY1L,SASpE6L,kBAAkBxC,GAChB,MAAM,OACJyC,EAAM,kBACNC,GACEvF,KAAKoB,MAET,GAAIkE,GAAUC,GAAqB1C,EAAO3K,MAAM,qCAC9C,OAAO2K,EAIT,IAAI2C,EAAa3C,EAAO4C,QAAQ,QAAS,MAKzC,OAHAD,EAAaA,EAAWC,QAAQ,UAAW,UAE3CD,EAAaA,EAAWC,QAAQ,MAAO,SAChCD,EASTrC,gBAAgBN,GACd,IAAI6C,EAEJ,MACMC,GAD4B,qBAAX,EAAAC,GAA0B,EAAAA,EAAOC,yBAA2BtD,KAGnF,IAAKoD,EACH,OAGF,MAAM7I,EAAgE,QAAzD4I,EAAwB1F,KAAKoB,MAAM0E,wBAAwD,IAA1BJ,EAAmCA,EAAwB,OACnIK,EAAa,SAARjJ,GAA0B,aAARA,EAAqB6I,EAAI5L,KAAO4L,EAAIxE,cAAcrE,GAU/E,OARI+F,EAAO3K,MAAMkK,KAKf2D,EAAGC,UAAYhG,KAAKqF,kBAAkBrF,KAAKoB,MAAM6E,WAAa,IAAWpD,GAAUA,IAG9EkD,EAQTG,kBAAkBzF,GAChB,MAAM,gBACJ0F,GACEnG,KAAKoB,MACHlB,EAAa,GACnB,IAAIkG,EAAQ,EAEZ,OAlQiB,IAkQb3F,EAAK4F,UAA8B5F,EAAKP,YAK5C,IAAIO,EAAKP,YAAY3D,SAAQ+J,IAC3B,MAAM,KACJ9F,EAAI,MACJ3H,GACEyN,EACEC,EAAU/F,EAAKiE,cACf5H,EAAS,IAAW0J,IAAY,IAAW/F,GAEjD,IAAKR,KAAKwG,OAAO/F,GACf,OAKF,IAAK8F,EAAQrO,MAAMmK,MAAoB8D,KAAqBtJ,GAAUA,IAAW,MAAgB0J,EAAQE,WAAW,OAAS5N,EAAM4M,QAAQ,uBAAwB,IAAIvN,MAAM,2CAC3K,OAIF,IAAIwO,EAAuB,UAAZH,EAAsBvG,KAAK2G,sBAAsBlG,GAAQ5H,EAEpEgE,IAAW,IACb6J,GAAW,EACF7J,IAAW,IACpB6J,EAAWE,OAAOC,WAAW1E,OAAOuE,IAC3B7J,IAAW,MACpB6J,EAAWvE,OAAOuE,IAGpBxG,EAAW,IAAoBqG,IAAYA,GAAWvG,KAAK4D,sBAAsB2C,EAASG,GAC1FN,GAAS,KAGG,IAAVA,EACK,KAGFlG,GAzCE,KAgDXyG,sBAAsBlG,GACpB,MAAMqG,EAAS,GASf,OAPAC,MAAMC,KAAKvG,EAAK1B,OAAOxC,SAAQ3D,IAC7B,MAAMC,EAAQ4H,EAAK1B,MAAMnG,GAEJ,kBAAVC,GAAuC,kBAAVA,IACtCiO,EAAOlO,EAAI6M,QAAQ,aAAa,CAACvN,EAAO+O,IAAW9E,OAAO8E,GAAQhG,iBAAkBpI,MAGjFiO,EAOTpC,aAAapI,GACX,MAAM4K,EAAS,CACbtN,SAAU,GACVP,QAAS,EACTK,QAAS,GACTQ,OAAQ,GACRX,MAAM,EACN+C,QAAS,GACT9C,KAAM,EACNM,MAAM,GAKR,OAAI,EAAAqN,EAAK7K,GACA,IAAK4K,KACP,EAAAC,EAAK7K,GACRA,QAAAA,GAIG4K,EAOTV,OAAO/F,GAEL,GAAiC,qBAAtB2G,mBAAqC3G,aAAgB2G,kBAAmB,CACjF,MAAMtJ,EAAO2C,EAAK4G,aAAa,QAG/B,GAAa,OAATvJ,QAA0B,IAATA,GAAmBA,EAAK2I,WAAW,KACtD,OAAO,EAGT,MAAMa,EAAW7G,EAAK6G,SAAS7C,cAC/B,MAAoB,MAAb6C,GAAiC,UAAbA,GAAqC,WAAbA,GAAsC,YAAbA,GAAuC,SAAbA,EAGxG,OAAO,EAOT3C,aAAarI,GACX,OAAI0D,KAAKwD,OAAO+D,IAAIjL,KAAY0D,KAAK0D,QAAQ6D,IAAIjL,KAK1C0D,KAAKoB,MAAMoG,eAAiBxH,KAAKoD,QAAQmE,IAAIjL,IAStDmL,QACE,OAAKzH,KAAKkD,UAIHlD,KAAK0H,UAAU1H,KAAKkD,UAAWlD,KAAK0E,aAAa1E,KAAKkD,UAAUyE,SAASlD,gBAHvE,GAWXiD,UAAUE,EAAY1D,GACpB,MAAM,OACJoB,EAAM,qBACNuC,EAAoB,cACpBL,EAAa,UACbM,EAAS,uBACTC,GACE/H,KAAKoB,MACT,IAAI/H,EAAU,GACV2O,EAAa,GAiGjB,MA/FA,IAAIJ,EAAWK,YAAY1L,SAAQkE,IAEjC,GA9Ze,IA8ZXA,EAAK4F,SAA2B,CAClC,MAAM/J,EAAUmE,EAAKkH,SAASlD,cACxBpI,EAAS2D,KAAK0E,aAAapI,GAE7B0L,IACF3O,EAAQ6O,KAAKF,GACbA,EAAa,IAIf,MAAMhE,EAAWhE,KAAK+D,iBAAiBzH,EAASmE,GAEhD,IAAKuD,EACH,OAIF,IAAIpK,EAEJ,GAAIkO,KAAeC,GAA2B/H,KAAK2E,aAAarI,IAAW,CACzE0D,KAAKiD,UAAY,EACjB,MAAMrK,EAAMoH,KAAKiD,SAEjBrJ,EAAWoG,KAAK0H,UAAU1D,EAAU3H,GACpC,MAAM8L,EAAcL,EAAU9D,EAAUpK,EAAUyC,GAElD,GAAoB,OAAhB8L,EACF,OAGF,GAA2B,qBAAhBA,EAIT,YAHA9O,EAAQ6O,KAAmB,eAAmBC,EAAa,CACzDvP,IAAAA,KAMJoH,KAAKiD,SAAWrK,EAAM,EAIxB,GAAIoH,KAAKwD,OAAO+D,IAAIjL,GAClB,OAOF,GAAMgJ,GAAUuC,GAAoC,OAAZvL,IAAqB0D,KAAK2E,aAAarI,KAAakL,IAAiBxH,KAAK4E,eAAeV,EAAc7H,GAwB7IhD,EAAU,IAAIA,KAAY2G,KAAK0H,UAAU1D,EAAU3H,EAAOC,QAAUD,EAAS6H,QAxB0E,CACvJ,IAAIkE,EAEJpI,KAAKiD,UAAY,EAEjB,MAAM/C,EAAaF,KAAKkG,kBAAkBlC,GACpCqE,EAAe,CACnB/L,QAAAA,GAGE4D,IACFmI,EAAanI,WAAaA,GAGxB7D,EAAOvC,OACTuO,EAAajI,UAAY/D,EAAOvC,MAGlCT,EAAQ6O,KAAmB,gBAAoB,EAAAI,EAAS,IAAKD,EAC3DzP,IAAKoH,KAAKiD,UACkB,QAA1BmF,EAAYxO,SAAoC,IAAdwO,EAAuBA,EAAYpI,KAAK0H,UAAU1D,EAAU3H,WAO/F,GA1eK,IA0eDoE,EAAK4F,SAAwB,CACtC,MAAMkC,EAAOjD,IAAWuC,EAAuBpH,EAAK+H,YACpDxI,KAAKiE,cAAcxD,EAAK+H,aAAe,GAAItE,GAEvC6C,MAAM0B,QAAQF,GAChBlP,EAAU,IAAIA,KAAYkP,GAE1BP,GAAcO,MAKhBP,GACF3O,EAAQ6O,KAAKF,GAGR3O,EAQT4L,cAAcJ,EAAiBV,GAC7B,IAAKU,EAAgBM,SAAS,OAC5B,OAAON,EAGT,MAAM6D,EAAQ,GACd,IAAIH,EAAO1D,EACP8D,EAAO,KAEX,KAAOA,EAAOJ,EAAKrQ,MAAMoK,IAAa,CACpC,MAAOpK,EAAO6M,GAAa4D,EACrBC,EAAaD,EAAKtQ,MAClBoJ,EAASvJ,EAAMiN,SAAS,KAE1B,EAKAyD,EAAa,IACfF,EAAMR,KAAKK,EAAKrH,MAAM,EAAG0H,IAEzBL,EAAOA,EAAKrH,MAAM0H,IAGpB,MAAM,SACJhP,EAAQ,QACR2K,EACAnD,MAAOiH,GACLlE,EAASY,GACb,IAAI8D,EAEJ,GAAIpH,EACFoH,EAAW3Q,EAAMK,OACjBmQ,EAAMR,KAAK3D,EAAQpD,cAAcvH,EAAUyO,QACtC,CACL,MAAMS,EAAQP,EAAKrQ,MAAM,IAAI0J,OAAO,OAAOmD,SAEvC,EAIJ8D,EAAWC,EAAMzQ,MAAQyQ,EAAM,GAAGvQ,OAClCmQ,EAAMR,KAAK3D,EAAQpD,cAAcnB,KAAKiF,cAAcsD,EAAKrH,MAAMhJ,EAAMK,OAAQuQ,EAAMzQ,OAAQ8L,GAAWkE,IAIxGE,EAAOA,EAAKrH,MAAM2H,GASpB,OALIN,EAAKhQ,OAAS,GAChBmQ,EAAMR,KAAKK,GAIQ,IAAjBG,EAAMnQ,OACD,GAGY,IAAjBmQ,EAAMnQ,QAAoC,kBAAbmQ,EAAM,GAC9BA,EAAM,GAGRA,GAOX,SAASK,EAAO3H,GACd,IAAI4H,EAEJ,MAAM,WACJ9I,EAAU,UACVC,EAAS,iBACT2F,EAAgB,QAChBzM,EAAO,aACP4P,EAAY,cACZC,EAAa,QACb5M,EACA6M,OAAQC,GACNhI,EACEtE,EAAyG,QAAlGkM,EAA4B,OAArBlD,QAAkD,IAArBA,EAA8BA,EAAmBxJ,SAA8B,IAAT0M,EAAkBA,EAAO,OAC1IG,EAAiB,aAARrM,GAA4BsM,EAC3C,IAAIC,EAEJ,GAAIH,EACFG,EAAcH,MACT,CACL,MAAMrG,EAAS,IAAID,EAAmB,OAAZvJ,QAAgC,IAAZA,EAAqBA,EAAU,GAAI+H,GAAOqG,QAEpF5E,EAAOtK,OAAS,IAClB8Q,EAAcxG,GAQlB,OAJKwG,IACHA,EAAcJ,GAGZE,EAEkB,gBAAoB,WAAgB,KAAME,GAG5C,gBAAoB,EAAAf,EAAS,CAC/CpI,WAAYA,EACZC,UAAWA,EACX7D,QAASQ,GACRuM,GAKL,SAASC,EAAWlI,GAClB,MAAM,WACJlB,EAAU,UACVC,EAAS,QACT9G,EAAU,GAAE,eACZkQ,GAAiB,EAAK,gBACtBC,GAAkB,EAAK,aACvBP,EAAe,KAAI,QACnBlG,EAAU,GAAE,SACZD,EAAW,GAAE,aACbf,EAAe,KAAI,cACnBD,EAAgB,KAAI,QACpBxF,EAAU,OAAM,OAChB6M,GAAS,KACNM,GACDrI,EACEsI,EAAcF,EAAkB,GAAK1G,EACrC6G,EAAaJ,EAAiB,GAAKxG,EACnC6G,EAAkB9H,EAAgB,CAACA,GAAiB,GACpD+H,EAAiB9H,EAAe,CAACA,GAAgB,GAEvD2H,EAAYnN,SAAQgI,IACdA,EAAQzC,eACV8H,EAAgB1B,KAAK3D,EAAQzC,cAAcgI,KAAKvF,IAG9CA,EAAQxC,cACV8H,EAAe3B,KAAK3D,EAAQxC,aAAa+H,KAAKvF,OAIlD,MAAM1B,EAAS+G,EAAgB/F,QAAO,CAAC9L,EAAQyJ,IAC1BA,EAASzJ,EAAQqJ,IAOvB,OAAZ/H,QAAgC,IAAZA,EAAqBA,EAAU,IAEhD0Q,EAAS,IAAInH,EAAOC,EAAQ4G,EAAaC,EAAaC,GAEtDjB,EAAQmB,EAAehG,QAAO,CAACmG,EAAaxI,IAC9BA,EAASwI,EAAa5I,IAOvC2I,EAAOtC,SACV,OAAoB,gBAAoBsB,EAAQ,CAC9C7I,WAAYA,EACZC,UAAWA,EAEX2F,iBAAkB1E,EAAM0E,iBACxBmD,aAAcA,EACdE,OAAQA,EACRD,cAAgC,IAAjBR,EAAMnQ,YAAe0R,EAAYvB,EAChDpM,QAASA,sDCprBb,IALA,SAAkBzD,GAChB,MAAuB,iBAATA,IACXqR,EAAAA,EAAAA,GAAarR,IArBF,oBAqBYsR,EAAAA,EAAAA,GAAWtR","sources":["webpack://StravaModern/./node_modules/escape-html/index.js","webpack://StravaModern/./node_modules/interweave/esm/bundle-7aab7250.js","webpack://StravaModern/./node_modules/interweave/esm/index.js","webpack://StravaModern/./node_modules/@strava/ui/node_modules/lodash-es/isSymbol.js"],"sourcesContent":["/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n","function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// Bundled with Packemon: https://packemon.dev\n// Platform: browser, Support: stable, Format: esm\nimport React from 'react';\n/* eslint-disable no-bitwise, no-magic-numbers, sort-keys */\n// https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Content_categories\n\nconst TYPE_FLOW = 1;\nconst TYPE_SECTION = 1 << 1;\nconst TYPE_HEADING = 1 << 2;\nconst TYPE_PHRASING = 1 << 3;\nconst TYPE_EMBEDDED = 1 << 4;\nconst TYPE_INTERACTIVE = 1 << 5;\nconst TYPE_PALPABLE = 1 << 6; // https://developer.mozilla.org/en-US/docs/Web/HTML/Element\n\nconst tagConfigs = {\n a: {\n content: TYPE_FLOW | TYPE_PHRASING,\n self: false,\n type: TYPE_FLOW | TYPE_PHRASING | TYPE_INTERACTIVE | TYPE_PALPABLE\n },\n address: {\n invalid: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'address', 'article', 'aside', 'section', 'div', 'header', 'footer'],\n self: false\n },\n audio: {\n children: ['track', 'source']\n },\n br: {\n type: TYPE_FLOW | TYPE_PHRASING,\n void: true\n },\n body: {\n content: TYPE_FLOW | TYPE_SECTION | TYPE_HEADING | TYPE_PHRASING | TYPE_EMBEDDED | TYPE_INTERACTIVE | TYPE_PALPABLE\n },\n button: {\n content: TYPE_PHRASING,\n type: TYPE_FLOW | TYPE_PHRASING | TYPE_INTERACTIVE | TYPE_PALPABLE\n },\n caption: {\n content: TYPE_FLOW,\n parent: ['table']\n },\n col: {\n parent: ['colgroup'],\n void: true\n },\n colgroup: {\n children: ['col'],\n parent: ['table']\n },\n details: {\n children: ['summary'],\n type: TYPE_FLOW | TYPE_INTERACTIVE | TYPE_PALPABLE\n },\n dd: {\n content: TYPE_FLOW,\n parent: ['dl']\n },\n dl: {\n children: ['dt', 'dd'],\n type: TYPE_FLOW\n },\n dt: {\n content: TYPE_FLOW,\n invalid: ['footer', 'header'],\n parent: ['dl']\n },\n figcaption: {\n content: TYPE_FLOW,\n parent: ['figure']\n },\n footer: {\n invalid: ['footer', 'header']\n },\n header: {\n invalid: ['footer', 'header']\n },\n hr: {\n type: TYPE_FLOW,\n void: true\n },\n img: {\n void: true\n },\n li: {\n content: TYPE_FLOW,\n parent: ['ul', 'ol', 'menu']\n },\n main: {\n self: false\n },\n ol: {\n children: ['li'],\n type: TYPE_FLOW\n },\n picture: {\n children: ['source', 'img'],\n type: TYPE_FLOW | TYPE_PHRASING | TYPE_EMBEDDED\n },\n rb: {\n parent: ['ruby', 'rtc']\n },\n rp: {\n parent: ['ruby', 'rtc']\n },\n rt: {\n content: TYPE_PHRASING,\n parent: ['ruby', 'rtc']\n },\n rtc: {\n content: TYPE_PHRASING,\n parent: ['ruby']\n },\n ruby: {\n children: ['rb', 'rp', 'rt', 'rtc']\n },\n source: {\n parent: ['audio', 'video', 'picture'],\n void: true\n },\n summary: {\n content: TYPE_PHRASING,\n parent: ['details']\n },\n table: {\n children: ['caption', 'colgroup', 'thead', 'tbody', 'tfoot', 'tr'],\n type: TYPE_FLOW\n },\n tbody: {\n parent: ['table'],\n children: ['tr']\n },\n td: {\n content: TYPE_FLOW,\n parent: ['tr']\n },\n tfoot: {\n parent: ['table'],\n children: ['tr']\n },\n th: {\n content: TYPE_FLOW,\n parent: ['tr']\n },\n thead: {\n parent: ['table'],\n children: ['tr']\n },\n tr: {\n parent: ['table', 'tbody', 'thead', 'tfoot'],\n children: ['th', 'td']\n },\n track: {\n parent: ['audio', 'video'],\n void: true\n },\n ul: {\n children: ['li'],\n type: TYPE_FLOW\n },\n video: {\n children: ['track', 'source']\n },\n wbr: {\n type: TYPE_FLOW | TYPE_PHRASING,\n void: true\n }\n};\n\nfunction createConfigBuilder(config) {\n return tagName => {\n tagConfigs[tagName] = { ...config,\n ...tagConfigs[tagName]\n };\n };\n}\n\n['address', 'main', 'div', 'figure', 'p', 'pre'].forEach(createConfigBuilder({\n content: TYPE_FLOW,\n type: TYPE_FLOW | TYPE_PALPABLE\n}));\n['abbr', 'b', 'bdi', 'bdo', 'cite', 'code', 'data', 'dfn', 'em', 'i', 'kbd', 'mark', 'q', 'ruby', 'samp', 'strong', 'sub', 'sup', 'time', 'u', 'var'].forEach(createConfigBuilder({\n content: TYPE_PHRASING,\n type: TYPE_FLOW | TYPE_PHRASING | TYPE_PALPABLE\n}));\n['p', 'pre'].forEach(createConfigBuilder({\n content: TYPE_PHRASING,\n type: TYPE_FLOW | TYPE_PALPABLE\n}));\n['s', 'small', 'span', 'del', 'ins'].forEach(createConfigBuilder({\n content: TYPE_PHRASING,\n type: TYPE_FLOW | TYPE_PHRASING\n}));\n['article', 'aside', 'footer', 'header', 'nav', 'section', 'blockquote'].forEach(createConfigBuilder({\n content: TYPE_FLOW,\n type: TYPE_FLOW | TYPE_SECTION | TYPE_PALPABLE\n}));\n['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].forEach(createConfigBuilder({\n content: TYPE_PHRASING,\n type: TYPE_FLOW | TYPE_HEADING | TYPE_PALPABLE\n}));\n['audio', 'canvas', 'iframe', 'img', 'video'].forEach(createConfigBuilder({\n type: TYPE_FLOW | TYPE_PHRASING | TYPE_EMBEDDED | TYPE_PALPABLE\n})); // Disable this map from being modified\n\nconst TAGS = Object.freeze(tagConfigs); // Tags that should never be allowed, even if the allow list is disabled\n\nconst BANNED_TAG_LIST = ['applet', 'base', 'body', 'command', 'embed', 'frame', 'frameset', 'head', 'html', 'link', 'meta', 'noscript', 'object', 'script', 'style', 'title'];\nconst ALLOWED_TAG_LIST = Object.keys(TAGS).filter(tag => tag !== 'canvas' && tag !== 'iframe'); // Filters apply to HTML attributes\n\nconst FILTER_ALLOW = 1;\nconst FILTER_DENY = 2;\nconst FILTER_CAST_NUMBER = 3;\nconst FILTER_CAST_BOOL = 4;\nconst FILTER_NO_CAST = 5; // Attributes not listed here will be denied\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes\n\nconst ATTRIBUTES = Object.freeze({\n alt: FILTER_ALLOW,\n cite: FILTER_ALLOW,\n class: FILTER_ALLOW,\n colspan: FILTER_CAST_NUMBER,\n controls: FILTER_CAST_BOOL,\n datetime: FILTER_ALLOW,\n default: FILTER_CAST_BOOL,\n disabled: FILTER_CAST_BOOL,\n dir: FILTER_ALLOW,\n height: FILTER_ALLOW,\n href: FILTER_ALLOW,\n id: FILTER_ALLOW,\n kind: FILTER_ALLOW,\n label: FILTER_ALLOW,\n lang: FILTER_ALLOW,\n loading: FILTER_ALLOW,\n loop: FILTER_CAST_BOOL,\n media: FILTER_ALLOW,\n muted: FILTER_CAST_BOOL,\n poster: FILTER_ALLOW,\n rel: FILTER_ALLOW,\n role: FILTER_ALLOW,\n rowspan: FILTER_CAST_NUMBER,\n scope: FILTER_ALLOW,\n sizes: FILTER_ALLOW,\n span: FILTER_CAST_NUMBER,\n start: FILTER_CAST_NUMBER,\n style: FILTER_NO_CAST,\n src: FILTER_ALLOW,\n srclang: FILTER_ALLOW,\n srcset: FILTER_ALLOW,\n tabindex: FILTER_ALLOW,\n target: FILTER_ALLOW,\n title: FILTER_ALLOW,\n type: FILTER_ALLOW,\n width: FILTER_ALLOW\n}); // Attributes to camel case for React props\n\nconst ATTRIBUTES_TO_PROPS = Object.freeze({\n class: 'className',\n colspan: 'colSpan',\n datetime: 'dateTime',\n rowspan: 'rowSpan',\n srclang: 'srcLang',\n srcset: 'srcSet',\n tabindex: 'tabIndex'\n});\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction Element({\n attributes = {},\n className,\n children = null,\n selfClose = false,\n tagName\n}) {\n const Tag = tagName;\n return selfClose ? /*#__PURE__*/React.createElement(Tag, _extends({\n className: className\n }, attributes)) : /*#__PURE__*/React.createElement(Tag, _extends({\n className: className\n }, attributes), children);\n}\n\nclass Filter {\n /**\n * Filter and clean an HTML attribute value.\n */\n attribute(name, value) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return value;\n }\n /**\n * Filter and clean an HTML node.\n */\n\n\n node(name, node) {\n return node;\n }\n\n}\n/**\n * Trigger the actual pattern match and package the matched\n * response through a callback.\n */\n\n\nfunction match(string, pattern, process, isVoid = false) {\n const matches = string.match(pattern instanceof RegExp ? pattern : new RegExp(pattern, 'i'));\n\n if (!matches) {\n return null;\n }\n\n return {\n match: matches[0],\n void: isVoid,\n ...process(matches),\n index: matches.index,\n length: matches[0].length,\n valid: true\n };\n}\n\nclass Matcher {\n constructor(name, options, factory) {\n _defineProperty(this, \"greedy\", false);\n\n _defineProperty(this, \"options\", void 0);\n\n _defineProperty(this, \"propName\", void 0);\n\n _defineProperty(this, \"inverseName\", void 0);\n\n _defineProperty(this, \"factory\", void 0);\n\n if (process.env.NODE_ENV !== \"production\" && (!name || name.toLowerCase() === 'html')) {\n throw new Error(`The matcher name \"${name}\" is not allowed.`);\n } // @ts-expect-error Allow override\n\n\n this.options = { ...options\n };\n this.propName = name;\n this.inverseName = `no${name.charAt(0).toUpperCase() + name.slice(1)}`;\n this.factory = factory !== null && factory !== void 0 ? factory : null;\n }\n /**\n * Attempts to create a React element using a custom user provided factory,\n * or the default matcher factory.\n */\n\n\n createElement(children, props) {\n const element = this.factory ? /*#__PURE__*/React.createElement(this.factory, props, children) : this.replaceWith(children, props);\n\n if (process.env.NODE_ENV !== \"production\" && typeof element !== 'string' && ! /*#__PURE__*/React.isValidElement(element)) {\n throw new Error(`Invalid React element created from ${this.constructor.name}.`);\n }\n\n return element;\n }\n /**\n * Trigger the actual pattern match and package the matched\n * response through a callback.\n */\n\n\n doMatch(string, pattern, callback, isVoid = false) {\n return match(string, pattern, callback, isVoid);\n }\n /**\n * Callback triggered before parsing.\n */\n\n\n onBeforeParse(content, props) {\n return content;\n }\n /**\n * Callback triggered after parsing.\n */\n\n\n onAfterParse(content, props) {\n return content;\n }\n /**\n * Replace the match with a React element based on the matched token and optional props.\n */\n\n\n}\n\nexport { ALLOWED_TAG_LIST as A, BANNED_TAG_LIST as B, Element as E, Filter as F, Matcher as M, TAGS as T, _extends as _, ATTRIBUTES as a, FILTER_DENY as b, ATTRIBUTES_TO_PROPS as c, FILTER_CAST_BOOL as d, FILTER_CAST_NUMBER as e, FILTER_NO_CAST as f, TYPE_FLOW as g, TYPE_SECTION as h, TYPE_HEADING as i, TYPE_PHRASING as j, TYPE_EMBEDDED as k, TYPE_INTERACTIVE as l, TYPE_PALPABLE as m, FILTER_ALLOW as n, match as o };\n//# sourceMappingURL=bundle-7aab7250.js.map\n","function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// Bundled with Packemon: https://packemon.dev\n// Platform: browser, Support: stable, Format: esm\nimport { F as Filter, A as ALLOWED_TAG_LIST, B as BANNED_TAG_LIST, a as ATTRIBUTES, b as FILTER_DENY, c as ATTRIBUTES_TO_PROPS, T as TAGS, E as Element, d as FILTER_CAST_BOOL, e as FILTER_CAST_NUMBER, f as FILTER_NO_CAST } from './bundle-7aab7250.js';\nexport { A as ALLOWED_TAG_LIST, a as ATTRIBUTES, c as ATTRIBUTES_TO_PROPS, B as BANNED_TAG_LIST, E as Element, n as FILTER_ALLOW, d as FILTER_CAST_BOOL, e as FILTER_CAST_NUMBER, b as FILTER_DENY, f as FILTER_NO_CAST, F as Filter, M as Matcher, T as TAGS, k as TYPE_EMBEDDED, g as TYPE_FLOW, i as TYPE_HEADING, l as TYPE_INTERACTIVE, m as TYPE_PALPABLE, j as TYPE_PHRASING, h as TYPE_SECTION, o as match } from './bundle-7aab7250.js';\nimport React from 'react';\nimport escapeHtml from 'escape-html';\nconst INVALID_STYLES = /(url|image|image-set)\\(/i;\n\nclass StyleFilter extends Filter {\n attribute(name, value) {\n if (name === 'style') {\n Object.keys(value).forEach(key => {\n if (String(value[key]).match(INVALID_STYLES)) {\n // eslint-disable-next-line no-param-reassign\n delete value[key];\n }\n });\n } // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n\n\n return value;\n }\n\n}\n/* eslint-disable no-bitwise, no-cond-assign, complexity, @typescript-eslint/no-unsafe-return */\n\n\nconst ELEMENT_NODE = 1;\nconst TEXT_NODE = 3;\nconst INVALID_ROOTS = /^<(!doctype|(html|head|body)(\\s|>))/i;\nconst ALLOWED_ATTRS = /^(aria-|data-|\\w+:)/iu;\nconst OPEN_TOKEN = /{{{(\\w+)\\/?}}}/;\n\nfunction createDocument() {\n // Maybe SSR? Just do nothing instead of crashing!\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return undefined;\n }\n\n return document.implementation.createHTMLDocument('Interweave');\n}\n\nclass Parser {\n constructor(markup, props = {}, matchers = [], filters = []) {\n var _props$allowList;\n\n _defineProperty(this, \"allowed\", void 0);\n\n _defineProperty(this, \"banned\", void 0);\n\n _defineProperty(this, \"blocked\", void 0);\n\n _defineProperty(this, \"container\", void 0);\n\n _defineProperty(this, \"content\", []);\n\n _defineProperty(this, \"props\", void 0);\n\n _defineProperty(this, \"matchers\", void 0);\n\n _defineProperty(this, \"filters\", void 0);\n\n _defineProperty(this, \"keyIndex\", void 0);\n\n if (process.env.NODE_ENV !== \"production\" && markup && typeof markup !== 'string') {\n throw new TypeError('Interweave parser requires a valid string.');\n }\n\n this.props = props;\n this.matchers = matchers;\n this.filters = [...filters, new StyleFilter()];\n this.keyIndex = -1;\n this.container = this.createContainer(markup || '');\n this.allowed = new Set((_props$allowList = props.allowList) !== null && _props$allowList !== void 0 ? _props$allowList : ALLOWED_TAG_LIST);\n this.banned = new Set(BANNED_TAG_LIST);\n this.blocked = new Set(props.blockList);\n }\n /**\n * Loop through and apply all registered attribute filters.\n */\n\n\n applyAttributeFilters(name, value) {\n return this.filters.reduce((nextValue, filter) => nextValue !== null && typeof filter.attribute === 'function' ? filter.attribute(name, nextValue) : nextValue, value);\n }\n /**\n * Loop through and apply all registered node filters.\n */\n\n\n applyNodeFilters(name, node) {\n // Allow null to be returned\n return this.filters.reduce((nextNode, filter) => nextNode !== null && typeof filter.node === 'function' ? filter.node(name, nextNode) : nextNode, node);\n }\n /**\n * Loop through and apply all registered matchers to the string.\n * If a match is found, create a React element, and build a new array.\n * This array allows React to interpolate and render accordingly.\n */\n\n\n applyMatchers(string, parentConfig) {\n const elements = {};\n const {\n props\n } = this;\n let matchedString = string;\n let elementIndex = 0;\n let parts = null;\n this.matchers.forEach(matcher => {\n const tagName = matcher.asTag().toLowerCase();\n const config = this.getTagConfig(tagName); // Skip matchers that have been disabled from props or are not supported\n\n if (props[matcher.inverseName] || !this.isTagAllowed(tagName)) {\n return;\n } // Skip matchers in which the child cannot be rendered\n\n\n if (!this.canRenderChild(parentConfig, config)) {\n return;\n } // Continuously trigger the matcher until no matches are found\n\n\n let tokenizedString = '';\n\n while (matchedString && (parts = matcher.match(matchedString))) {\n const {\n index,\n length,\n match,\n valid,\n void: isVoid,\n ...partProps\n } = parts;\n const tokenName = matcher.propName + String(elementIndex); // Piece together a new string with interpolated tokens\n\n if (index > 0) {\n tokenizedString += matchedString.slice(0, index);\n }\n\n if (valid) {\n tokenizedString += isVoid ? `{{{${tokenName}/}}}` : `{{{${tokenName}}}}${match}{{{/${tokenName}}}}`;\n this.keyIndex += 1;\n elementIndex += 1;\n elements[tokenName] = {\n children: match,\n matcher,\n props: { ...props,\n ...partProps,\n key: this.keyIndex\n }\n };\n } else {\n tokenizedString += match;\n } // Reduce the string being matched against,\n // otherwise we end up in an infinite loop!\n\n\n if (matcher.greedy) {\n matchedString = tokenizedString + matchedString.slice(index + length);\n tokenizedString = '';\n } else {\n // eslint-disable-next-line unicorn/explicit-length-check\n matchedString = matchedString.slice(index + (length || match.length));\n }\n } // Update the matched string with the tokenized string,\n // so that the next matcher can apply to it.\n\n\n if (!matcher.greedy) {\n matchedString = tokenizedString + matchedString;\n }\n });\n\n if (elementIndex === 0) {\n return string;\n }\n\n return this.replaceTokens(matchedString, elements);\n }\n /**\n * Determine whether the child can be rendered within the parent.\n */\n\n\n canRenderChild(parentConfig, childConfig) {\n if (!parentConfig.tagName || !childConfig.tagName) {\n return false;\n } // No children\n\n\n if (parentConfig.void) {\n return false;\n } // Valid children\n\n\n if (parentConfig.children.length > 0) {\n return parentConfig.children.includes(childConfig.tagName);\n }\n\n if (parentConfig.invalid.length > 0 && parentConfig.invalid.includes(childConfig.tagName)) {\n return false;\n } // Valid parent\n\n\n if (childConfig.parent.length > 0) {\n return childConfig.parent.includes(parentConfig.tagName);\n } // Self nesting\n\n\n if (!parentConfig.self && parentConfig.tagName === childConfig.tagName) {\n return false;\n } // Content category type\n\n\n return Boolean(parentConfig && parentConfig.content & childConfig.type);\n }\n /**\n * Convert line breaks in a string to HTML `
` tags.\n * If the string contains HTML, we should not convert anything,\n * as line breaks should be handled by `
`s in the markup itself.\n */\n\n\n convertLineBreaks(markup) {\n const {\n noHtml,\n disableLineBreaks\n } = this.props;\n\n if (noHtml || disableLineBreaks || markup.match(/<((?:\\/[ a-z]+)|(?:[ a-z]+\\/))>/gi)) {\n return markup;\n } // Replace carriage returns\n\n\n let nextMarkup = markup.replace(/\\r\\n/g, '\\n'); // Replace long line feeds\n\n nextMarkup = nextMarkup.replace(/\\n{3,}/g, '\\n\\n\\n'); // Replace line feeds with `
`s\n\n nextMarkup = nextMarkup.replace(/\\n/g, '
');\n return nextMarkup;\n }\n /**\n * Create a detached HTML document that allows for easy HTML\n * parsing while not triggering scripts or loading external\n * resources.\n */\n\n\n createContainer(markup) {\n var _this$props$container;\n\n const factory = typeof global !== 'undefined' && global.INTERWEAVE_SSR_POLYFILL || createDocument;\n const doc = factory();\n\n if (!doc) {\n return undefined;\n }\n\n const tag = (_this$props$container = this.props.containerTagName) !== null && _this$props$container !== void 0 ? _this$props$container : 'body';\n const el = tag === 'body' || tag === 'fragment' ? doc.body : doc.createElement(tag);\n\n if (markup.match(INVALID_ROOTS)) {\n if (process.env.NODE_ENV !== \"production\") {\n throw new Error('HTML documents as Interweave content are not supported.');\n }\n } else {\n el.innerHTML = this.convertLineBreaks(this.props.escapeHtml ? escapeHtml(markup) : markup);\n }\n\n return el;\n }\n /**\n * Convert an elements attribute map to an object map.\n * Returns null if no attributes are defined.\n */\n\n\n extractAttributes(node) {\n const {\n allowAttributes\n } = this.props;\n const attributes = {};\n let count = 0;\n\n if (node.nodeType !== ELEMENT_NODE || !node.attributes) {\n return null;\n } // @ts-expect-error Cant type iterator\n\n\n [...node.attributes].forEach(attr => {\n const {\n name,\n value\n } = attr;\n const newName = name.toLowerCase();\n const filter = ATTRIBUTES[newName] || ATTRIBUTES[name]; // Verify the node is safe from attacks\n\n if (!this.isSafe(node)) {\n return;\n } // Do not allow denied attributes, excluding ARIA attributes\n // Do not allow events or XSS injections\n\n\n if (!newName.match(ALLOWED_ATTRS) && (!allowAttributes && (!filter || filter === FILTER_DENY) || newName.startsWith('on') || value.replace(/(\\s|\\0|�([9AD]);)/, '').match(/(javascript|vbscript|livescript|xss):/i))) {\n return;\n } // Apply attribute filters\n\n\n let newValue = newName === 'style' ? this.extractStyleAttribute(node) : value; // Cast to boolean\n\n if (filter === FILTER_CAST_BOOL) {\n newValue = true; // Cast to number\n } else if (filter === FILTER_CAST_NUMBER) {\n newValue = Number.parseFloat(String(newValue)); // Cast to string\n } else if (filter !== FILTER_NO_CAST) {\n newValue = String(newValue);\n }\n\n attributes[ATTRIBUTES_TO_PROPS[newName] || newName] = this.applyAttributeFilters(newName, newValue);\n count += 1;\n });\n\n if (count === 0) {\n return null;\n }\n\n return attributes;\n }\n /**\n * Extract the style attribute as an object and remove values that allow for attack vectors.\n */\n\n\n extractStyleAttribute(node) {\n const styles = {}; // eslint-disable-next-line unicorn/prefer-spread\n\n Array.from(node.style).forEach(key => {\n const value = node.style[key];\n\n if (typeof value === 'string' || typeof value === 'number') {\n styles[key.replace(/-([a-z])/g, (match, letter) => String(letter).toUpperCase())] = value;\n }\n });\n return styles;\n }\n /**\n * Return configuration for a specific tag.\n */\n\n\n getTagConfig(tagName) {\n const common = {\n children: [],\n content: 0,\n invalid: [],\n parent: [],\n self: true,\n tagName: '',\n type: 0,\n void: false\n }; // Only spread when a tag config exists,\n // otherwise we use the empty `tagName`\n // for parent config inheritance.\n\n if (TAGS[tagName]) {\n return { ...common,\n ...TAGS[tagName],\n tagName\n };\n }\n\n return common;\n }\n /**\n * Verify that a node is safe from XSS and injection attacks.\n */\n\n\n isSafe(node) {\n // URLs should only support HTTP, email and phone numbers\n if (typeof HTMLAnchorElement !== 'undefined' && node instanceof HTMLAnchorElement) {\n const href = node.getAttribute('href'); // Fragment protocols start with about:\n // So let's just allow them\n\n if (href !== null && href !== void 0 && href.startsWith('#')) {\n return true;\n }\n\n const protocol = node.protocol.toLowerCase();\n return protocol === ':' || protocol === 'http:' || protocol === 'https:' || protocol === 'mailto:' || protocol === 'tel:';\n }\n\n return true;\n }\n /**\n * Verify that an HTML tag is allowed to render.\n */\n\n\n isTagAllowed(tagName) {\n if (this.banned.has(tagName) || this.blocked.has(tagName)) {\n return false;\n } // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n\n\n return this.props.allowElements || this.allowed.has(tagName);\n }\n /**\n * Parse the markup by injecting it into a detached document,\n * while looping over all child nodes and generating an\n * array to interpolate into JSX.\n */\n\n\n parse() {\n if (!this.container) {\n return [];\n }\n\n return this.parseNode(this.container, this.getTagConfig(this.container.nodeName.toLowerCase()));\n }\n /**\n * Loop over the nodes children and generate a\n * list of text nodes and React elements.\n */\n\n\n parseNode(parentNode, parentConfig) {\n const {\n noHtml,\n noHtmlExceptMatchers,\n allowElements,\n transform,\n transformOnlyAllowList\n } = this.props;\n let content = [];\n let mergedText = ''; // @ts-expect-error Cant type iterator\n\n [...parentNode.childNodes].forEach(node => {\n // Create React elements from HTML elements\n if (node.nodeType === ELEMENT_NODE) {\n const tagName = node.nodeName.toLowerCase();\n const config = this.getTagConfig(tagName); // Persist any previous text\n\n if (mergedText) {\n content.push(mergedText);\n mergedText = '';\n } // Apply node filters first\n\n\n const nextNode = this.applyNodeFilters(tagName, node);\n\n if (!nextNode) {\n return;\n } // Apply transformation second\n\n\n let children;\n\n if (transform && !(transformOnlyAllowList && !this.isTagAllowed(tagName))) {\n this.keyIndex += 1;\n const key = this.keyIndex; // Must occur after key is set\n\n children = this.parseNode(nextNode, config);\n const transformed = transform(nextNode, children, config);\n\n if (transformed === null) {\n return;\n }\n\n if (typeof transformed !== 'undefined') {\n content.push( /*#__PURE__*/React.cloneElement(transformed, {\n key\n }));\n return;\n } // Reset as we're not using the transformation\n\n\n this.keyIndex = key - 1;\n } // Never allow these tags (except via a transformer)\n\n\n if (this.banned.has(tagName)) {\n return;\n } // Only render when the following criteria is met:\n // - HTML has not been disabled\n // - Tag is allowed\n // - Child is valid within the parent\n\n\n if (!(noHtml || noHtmlExceptMatchers && tagName !== 'br') && this.isTagAllowed(tagName) && (allowElements || this.canRenderChild(parentConfig, config))) {\n var _children;\n\n this.keyIndex += 1; // Build the props as it makes it easier to test\n\n const attributes = this.extractAttributes(nextNode);\n const elementProps = {\n tagName\n };\n\n if (attributes) {\n elementProps.attributes = attributes;\n }\n\n if (config.void) {\n elementProps.selfClose = config.void;\n }\n\n content.push( /*#__PURE__*/React.createElement(Element, { ...elementProps,\n key: this.keyIndex\n }, (_children = children) !== null && _children !== void 0 ? _children : this.parseNode(nextNode, config))); // Render the children of the current element only.\n // Important: If the current element is not allowed,\n // use the parent element for the next scope.\n } else {\n content = [...content, ...this.parseNode(nextNode, config.tagName ? config : parentConfig)];\n } // Apply matchers if a text node\n\n } else if (node.nodeType === TEXT_NODE) {\n const text = noHtml && !noHtmlExceptMatchers ? node.textContent : // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n this.applyMatchers(node.textContent || '', parentConfig);\n\n if (Array.isArray(text)) {\n content = [...content, ...text];\n } else {\n mergedText += text;\n }\n }\n });\n\n if (mergedText) {\n content.push(mergedText);\n }\n\n return content;\n }\n /**\n * Deconstruct the string into an array, by replacing custom tokens with React elements,\n * so that React can render it correctly.\n */\n\n\n replaceTokens(tokenizedString, elements) {\n if (!tokenizedString.includes('{{{')) {\n return tokenizedString;\n }\n\n const nodes = [];\n let text = tokenizedString;\n let open = null; // Find an open token tag\n\n while (open = text.match(OPEN_TOKEN)) {\n const [match, tokenName] = open;\n const startIndex = open.index;\n const isVoid = match.includes('/');\n\n if (process.env.NODE_ENV !== \"production\" && !elements[tokenName]) {\n throw new Error(`Token \"${tokenName}\" found but no matching element to replace with.`);\n } // Extract the previous non-token text\n\n\n if (startIndex > 0) {\n nodes.push(text.slice(0, startIndex)); // Reduce text so that the closing tag will be found after the opening\n\n text = text.slice(startIndex);\n }\n\n const {\n children,\n matcher,\n props: elementProps\n } = elements[tokenName];\n let endIndex; // Use tag as-is if void\n\n if (isVoid) {\n endIndex = match.length;\n nodes.push(matcher.createElement(children, elementProps)); // Find the closing tag if not void\n } else {\n const close = text.match(new RegExp(`{{{/${tokenName}}}}`));\n\n if (process.env.NODE_ENV !== \"production\" && !close) {\n throw new Error(`Closing token missing for interpolated element \"${tokenName}\".`);\n }\n\n endIndex = close.index + close[0].length;\n nodes.push(matcher.createElement(this.replaceTokens(text.slice(match.length, close.index), elements), elementProps));\n } // Reduce text for the next interation\n\n\n text = text.slice(endIndex);\n } // Extra the remaining text\n\n\n if (text.length > 0) {\n nodes.push(text);\n } // Reduce to a string if possible\n\n\n if (nodes.length === 0) {\n return '';\n }\n\n if (nodes.length === 1 && typeof nodes[0] === 'string') {\n return nodes[0];\n }\n\n return nodes;\n }\n\n}\n/* eslint-disable react/jsx-fragments */\n\n\nfunction Markup(props) {\n var _ref;\n\n const {\n attributes,\n className,\n containerTagName,\n content,\n emptyContent,\n parsedContent,\n tagName,\n noWrap: baseNoWrap\n } = props;\n const tag = (_ref = containerTagName !== null && containerTagName !== void 0 ? containerTagName : tagName) !== null && _ref !== void 0 ? _ref : 'span';\n const noWrap = tag === 'fragment' ? true : baseNoWrap;\n let mainContent;\n\n if (parsedContent) {\n mainContent = parsedContent;\n } else {\n const markup = new Parser(content !== null && content !== void 0 ? content : '', props).parse();\n\n if (markup.length > 0) {\n mainContent = markup;\n }\n }\n\n if (!mainContent) {\n mainContent = emptyContent;\n }\n\n if (noWrap) {\n // eslint-disable-next-line react/jsx-no-useless-fragment\n return /*#__PURE__*/React.createElement(React.Fragment, null, mainContent);\n }\n\n return /*#__PURE__*/React.createElement(Element, {\n attributes: attributes,\n className: className,\n tagName: tag\n }, mainContent);\n}\n/* eslint-disable promise/prefer-await-to-callbacks */\n\n\nfunction Interweave(props) {\n const {\n attributes,\n className,\n content = '',\n disableFilters = false,\n disableMatchers = false,\n emptyContent = null,\n filters = [],\n matchers = [],\n onAfterParse = null,\n onBeforeParse = null,\n tagName = 'span',\n noWrap = false,\n ...parserProps\n } = props;\n const allMatchers = disableMatchers ? [] : matchers;\n const allFilters = disableFilters ? [] : filters;\n const beforeCallbacks = onBeforeParse ? [onBeforeParse] : [];\n const afterCallbacks = onAfterParse ? [onAfterParse] : []; // Inherit callbacks from matchers\n\n allMatchers.forEach(matcher => {\n if (matcher.onBeforeParse) {\n beforeCallbacks.push(matcher.onBeforeParse.bind(matcher));\n }\n\n if (matcher.onAfterParse) {\n afterCallbacks.push(matcher.onAfterParse.bind(matcher));\n }\n }); // Trigger before callbacks\n\n const markup = beforeCallbacks.reduce((string, callback) => {\n const nextString = callback(string, props);\n\n if (process.env.NODE_ENV !== \"production\" && typeof nextString !== 'string') {\n throw new TypeError('Interweave `onBeforeParse` must return a valid HTML string.');\n }\n\n return nextString;\n }, content !== null && content !== void 0 ? content : ''); // Parse the markup\n\n const parser = new Parser(markup, parserProps, allMatchers, allFilters); // Trigger after callbacks\n\n const nodes = afterCallbacks.reduce((parserNodes, callback) => {\n const nextNodes = callback(parserNodes, props);\n\n if (process.env.NODE_ENV !== \"production\" && !Array.isArray(nextNodes)) {\n throw new TypeError('Interweave `onAfterParse` must return an array of strings and React elements.');\n }\n\n return nextNodes;\n }, parser.parse());\n return /*#__PURE__*/React.createElement(Markup, {\n attributes: attributes,\n className: className // eslint-disable-next-line react/destructuring-assignment\n ,\n containerTagName: props.containerTagName,\n emptyContent: emptyContent,\n noWrap: noWrap,\n parsedContent: nodes.length === 0 ? undefined : nodes,\n tagName: tagName\n });\n}\n\nexport { Interweave, Markup, Parser };\n//# sourceMappingURL=index.js.map\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n"],"names":["matchHtmlRegExp","module","exports","string","escape","str","match","exec","html","index","lastIndex","length","charCodeAt","substring","_defineProperty","obj","key","value","Object","defineProperty","enumerable","configurable","writable","tagConfigs","a","content","TYPE_FLOW","self","type","address","invalid","audio","children","br","void","body","button","caption","parent","col","colgroup","details","dd","dl","dt","figcaption","footer","header","hr","img","li","main","ol","picture","rb","rp","rt","rtc","ruby","source","summary","table","tbody","td","tfoot","th","thead","tr","track","ul","video","wbr","createConfigBuilder","config","tagName","forEach","TAGS","freeze","BANNED_TAG_LIST","ALLOWED_TAG_LIST","keys","filter","tag","FILTER_DENY","FILTER_CAST_NUMBER","FILTER_CAST_BOOL","FILTER_NO_CAST","ATTRIBUTES","alt","cite","class","colspan","controls","datetime","default","disabled","dir","height","href","id","kind","label","lang","loading","loop","media","muted","poster","rel","role","rowspan","scope","sizes","span","start","style","src","srclang","srcset","tabindex","target","title","width","ATTRIBUTES_TO_PROPS","_extends","assign","i","arguments","prototype","hasOwnProperty","call","apply","this","Element","attributes","className","selfClose","Tag","Filter","attribute","name","node","Matcher","constructor","options","factory","propName","inverseName","charAt","toUpperCase","slice","createElement","props","replaceWith","doMatch","pattern","callback","isVoid","process","matches","RegExp","valid","onBeforeParse","onAfterParse","INVALID_STYLES","StyleFilter","F","String","INVALID_ROOTS","ALLOWED_ATTRS","OPEN_TOKEN","createDocument","window","document","implementation","createHTMLDocument","Parser","markup","matchers","filters","_props$allowList","keyIndex","container","createContainer","allowed","Set","allowList","A","banned","B","blocked","blockList","applyAttributeFilters","reduce","nextValue","applyNodeFilters","nextNode","applyMatchers","parentConfig","elements","matchedString","elementIndex","parts","matcher","asTag","toLowerCase","getTagConfig","isTagAllowed","canRenderChild","tokenizedString","partProps","tokenName","greedy","replaceTokens","childConfig","includes","Boolean","convertLineBreaks","noHtml","disableLineBreaks","nextMarkup","replace","_this$props$container","doc","g","INTERWEAVE_SSR_POLYFILL","containerTagName","el","innerHTML","escapeHtml","extractAttributes","allowAttributes","count","nodeType","attr","newName","isSafe","startsWith","newValue","extractStyleAttribute","Number","parseFloat","styles","Array","from","letter","common","T","HTMLAnchorElement","getAttribute","protocol","has","allowElements","parse","parseNode","nodeName","parentNode","noHtmlExceptMatchers","transform","transformOnlyAllowList","mergedText","childNodes","push","transformed","_children","elementProps","E","text","textContent","isArray","nodes","open","startIndex","endIndex","close","Markup","_ref","emptyContent","parsedContent","noWrap","baseNoWrap","mainContent","Interweave","disableFilters","disableMatchers","parserProps","allMatchers","allFilters","beforeCallbacks","afterCallbacks","bind","parser","parserNodes","undefined","isObjectLike","baseGetTag"],"sourceRoot":""}