{"version":3,"file":"assets/chunk.5ac320725793d0fedb71.js","mappings":"wJAYIA,EAAUC,EAAAA,EAAED,QAASE,EAAWD,EAAAA,EAAEC,SAAUC,EAAUF,EAAAA,EAAEE,QAASC,EAAWH,EAAAA,EAAEG,SAAUC,EAAWJ,EAAAA,EAAEI,SAAUC,EAAQL,EAAAA,EAAEK,MAAOC,EAAaN,EAAAA,EAAEM,WAAYC,EAAOP,EAAAA,EAAEO,KAsCxK,SAASC,EAAWC,GAChB,OAAOL,EAASK,GACZJ,EAAM,CAAEK,SAAU,IAAKC,MAAO,GAAKF,GACnC,CAAEC,SAAUD,EAAY,IAAM,EAAGE,MAAO,EAChD,CA4HA,SAASC,EAAKC,EAAIC,GAGd,IAFA,IAAIC,EAAIC,EAAAA,EAAGC,OAAOC,OAEXH,KACCC,EAAAA,EAAGC,OAAOF,GAAGI,OAASN,GAAQC,GAAQA,IAASE,EAAAA,EAAGC,OAAOF,GAAGD,OAC5DE,EAAAA,EAAGC,OAAOF,GAAGK,SAAU,EAGnC,CAaA,QAZuB,CACnBC,QA7EJ,SAAiBR,EAAIS,EAAQC,GACzB,IAAIC,EAAkBC,EAAKC,EAAIC,EAApBC,EAAO,GACbxB,EAASmB,KAEVA,EAAM,CACFb,UAFJiB,EAAOE,WAEY,GACfC,OAAQH,EAAK,GACbI,SAAUJ,EAAK,KAGlBxB,EAASoB,EAAIb,YACda,EAAIb,SAAW,KAEnBa,EAAIO,OAA+B,mBAAfP,EAAIO,OACpBP,EAAIO,OACHE,KAAKT,EAAIO,SAAWE,KAAKC,cAC9BV,EAAIW,QAAU7B,EAAMiB,GACpBhB,EAAWgB,GAAQ,SAAUa,EAAKrB,GAE9BF,EAAKC,EAAIC,GACTY,EAAK,IAAIV,EAAAA,EAAGH,EAAIU,EAAKT,GACrBW,OAAM,EACO,MAATX,GAAgBZ,EAAQoB,EAAOc,IAC/BV,EAAGW,MAAQX,EAAGY,SAASzB,EAAIA,EAAG0B,UAAWjB,EAAOc,GAChDV,EAAGc,IAAMlB,EAAOc,EAChBZ,EAAQ,EACRC,EAAM,GAEDZ,EAAG4B,KACRjB,EAAQX,EAAG4B,KAAK3B,IAGhBU,EAAQkB,WAAWzC,EAASY,EAAIC,KAAU,EAC7B,YAATA,IACAc,EAAO,OAGVH,IACDA,EAAMU,GAES,iBAARV,GAAoBA,EAAIkB,MAAM,QACrClB,EAAMA,EAAImB,QAAQ,MAAO,KAE7BlB,EAAGmB,IAAIrB,EAAOC,EAAKG,EACvB,GACJ,EAiCIpB,WAAYA,EACZsC,qBArHJ,SAA8BC,EAAOtC,EAAWuC,GAC5C,IAAIC,EAAiBzC,EAAWC,GAAYyC,EAAIF,EAAS,CAACA,GAAUD,EAAMC,OACtErC,EAAQ,EAAGD,EAAW,EAgB1B,OAfAwC,EAAEC,SAAQ,SAAUH,GAChB,IAAII,EAAa5C,EAAWwC,EAAOK,QAAQ5C,WAC3CE,EAAQF,GAAaV,EAAQU,EAAUE,OACnCsC,EAAetC,MACfqB,KAAKsB,IAAI3C,EAAOyC,EAAW1C,SAAW0C,EAAWzC,OACrDD,EAAWsB,KAAKuB,IAAIN,EAAevC,SAAU0C,EAAW1C,SAC5D,IAEIqC,EAAMS,SAASC,YACf9C,EAAQ,GAED,CACPA,MAAOqB,KAAKsB,IAAI,EAAG3C,EAAQD,GAC3BA,SAAUsB,KAAKuB,IAAI5C,EAAOD,GAGlC,EAmGIgD,aA7JJ,SAAsBjD,EAAWsC,GAC7BA,EAAMS,SAASG,gBAAkBpD,EAAKE,EAAWsC,EAAMM,QAAQN,MAAMtC,WAAW,EACpF,EA4JIG,KAAMA,E,wECrLNgD,EAAQC,EAAAA,EAAMC,MAEdC,EAAMC,EAAAA,EAAED,IAER5D,EAAWH,EAAAA,EAAEG,SAAUG,EAAaN,EAAAA,EAAEM,WAmX1C,QAtVwB,WAMpB,SAASU,EAAGG,EAAMkC,EAASvC,GACvBmD,KAAKC,IAAMC,IACXF,KAAKZ,QAAUA,EACfY,KAAK9C,KAAOA,EACZ8C,KAAKnD,KAAOA,CAChB,CAoUA,OAxTAE,EAAGoD,UAAUC,QAAU,WACnB,IAAIhC,EAAQ4B,KAAK5B,MAAOb,EAAQa,GAASA,EAAM,GAAIZ,EAAMY,GAASA,EAAM,GAAIiC,EAAML,KAAKK,KAAO,EAC1FC,EAAO,GAEX,GAAY,IAARD,GAAc9C,GAAUC,EAGvB,GAAID,EAAMN,SAAWO,EAAIP,QAAUoD,EAAM,EAC1C,IAAK,IAAIvD,EAAI,EAAGA,EAAIU,EAAIP,OAAQH,IAAK,CAOjC,IAHA,IAAIyD,EAAWhD,EAAMT,GACjB0D,EAAShD,EAAIV,GACb2D,EAAW,GACNC,EAAI,EAAGA,EAAIF,EAAOvD,OAAQyD,IAAK,CACpC,IAAIC,EAAYJ,EAASG,GACrBE,EAAUJ,EAAOE,GAEjBxE,EAASyE,IACTzE,EAAS0E,KAEO,MAAdJ,EAAO,IAAqB,IAANE,GAAiB,IAANA,GACnCD,EAASC,GAAKC,EAAYN,GAAOO,EAAUD,GAI3CF,EAASC,GAAKE,CAEtB,CACAN,EAAKO,KAAKJ,EACd,MAIAH,EAAO9C,OA9BP8C,EAAON,KAAKzB,KAAO,GAgCvByB,KAAK9C,KAAKsB,KAAK,IAAK8B,OAAM,GAAQ,EACtC,EAOAvD,EAAGoD,UAAUW,OAAS,WAClB,IAAI5D,EAAO8C,KAAK9C,KAAML,EAAOmD,KAAKnD,KAClCwD,EAAML,KAAKK,IAAKU,EAAOf,KAAKZ,QAAQ2B,KAEhCf,KAAKnD,EAAO,UACZmD,KAAKnD,EAAO,YAGPK,EAAKsB,KACNtB,EAAK8D,SACL9D,EAAKsB,KAAK3B,EAAMwD,EAAK,MAAM,GAK/BnD,EAAK+D,MAAMpE,GAAQwD,EAAML,KAAKrC,KAE9BoD,GACAA,EAAKG,KAAKhE,EAAMmD,EAAKL,KAE7B,EAgBAjD,EAAGoD,UAAUvB,IAAM,SAAUuC,EAAMC,EAAIzD,GACnC,IAAI0D,EAAOrB,KAAMZ,EAAUiC,EAAKjC,QAASkC,EAAQ,SAAUC,GACvD,OAAOD,EAAMnE,SAAkBkE,EAAKN,KAAKQ,EAC7C,EAAGC,EAAwB1B,EAAI0B,uBAC3B,SAAUT,GACNU,WAAWV,EAAM,GACrB,EAAGA,EAAO,WACV,IAAK,IAAIjE,EAAI,EAAGA,EAAIC,EAAGC,OAAOC,OAAQH,IAC7BC,EAAGC,OAAOF,MACXC,EAAGC,OAAO0E,OAAO5E,IAAK,GAG1BC,EAAGC,OAAOC,QACVuE,EAAsBT,EAE9B,EACII,IAASC,GAAOpB,KAAK9C,KAAK,gBAAkB8C,KAAKnD,OAQjDmD,KAAK2B,WAAa,IAAIC,KACtB5B,KAAKzC,MAAQ4D,EACbnB,KAAKxC,IAAM4D,EACXpB,KAAKrC,KAAOA,EACZqC,KAAKK,IAAML,KAAKzC,MAChByC,KAAKC,IAAM,EACXqB,EAAMpE,KAAO8C,KAAK9C,KAClBoE,EAAMzE,KAAOmD,KAAKnD,KACdyE,KAAqC,IAA1BvE,EAAGC,OAAO6D,KAAKS,IAC1BE,EAAsBT,YAhBnB3B,EAAQnB,QAAQ+B,KAAKnD,MACxBuC,EAAQtB,UACgC,IAAxC+D,OAAOC,KAAK1C,EAAQnB,SAAShB,QAC7BmC,EAAQtB,SAASoD,KAAKlB,KAAK9C,MAgBvC,EAYAH,EAAGoD,UAAUY,KAAO,SAAUQ,GAC1B,IACIQ,EAAKC,EADLC,GAAK,IAAIL,KAAQxC,EAAUY,KAAKZ,QAASlC,EAAO8C,KAAK9C,KAAMY,EAAWsB,EAAQtB,SAAUrB,EAAW2C,EAAQ3C,SAAUwB,EAAUmB,EAAQnB,QA4B3I,OA1BKf,EAAKsB,OAAUtB,EAAK8D,QACrBe,GAAM,EAEDR,GAAWU,GAAKxF,EAAWuD,KAAK2B,WACrC3B,KAAKK,IAAML,KAAKxC,IAChBwC,KAAKC,IAAM,EACXD,KAAKc,SACL7C,EAAQ+B,KAAKnD,OAAQ,EACrBmF,GAAO,EACP3F,EAAW4B,GAAS,SAAUC,IACd,IAARA,IACA8D,GAAO,EAEf,IACIA,GAAQlE,GACRA,EAASoD,KAAKhE,GAElB6E,GAAM,IAGN/B,KAAKC,IAAMb,EAAQvB,QAAQoE,EAAIjC,KAAK2B,WAAalF,GACjDuD,KAAKK,IAAML,KAAKzC,OAAUyC,KAAKxC,IAC3BwC,KAAKzC,OAASyC,KAAKC,IACvBD,KAAKc,SACLiB,GAAM,GAEHA,CACX,EAmBAhF,EAAGoD,UAAU9B,SAAW,SAAUnB,EAAMgF,EAAO3D,GAC3C,IAEI4D,EAAOC,EAAYtF,EAAGuF,EAFtBC,EAASpF,EAAKoF,OAAQC,EAAOrF,EAAKqF,KAAM/E,EAAMe,EAAIiE,QACtDC,EAASvF,EAAKuF,OAAQC,EAAiBD,EAAS,EAAI,EACjBlF,EAAQ2E,GAASA,EAAMM,QAC1D,IAAKjF,EACD,MAAO,CAACC,EAAKA,GAMjB,SAASmF,EAAQC,EAAKC,GAClB,KAAOD,EAAI3F,OAASmF,GAAY,CAE5B,IAAIU,EAAcF,EAAI,GAAIG,EAAeF,EAAMT,EAAaQ,EAAI3F,QAqBhE,GApBI8F,GAAmC,MAAnBD,EAAY,KACJ,MAApBC,EAAa,GACbH,EAAI,GAAK,CACL,IACAE,EAAY,GACZA,EAAY,GACZA,EAAY,GACZA,EAAY,GACZA,EAAY,GACZA,EAAY,IAIhBF,EAAI,GAAK,CAAC,IAAKE,EAAY,GAAIA,EAAY,KAInDF,EAAII,QAAQF,GAGRL,EAAQ,CACR,IAAIQ,EAAIL,EAAIM,MACZN,EAAI/B,KAAK+B,EAAIA,EAAI3F,OAAS,GAAIgG,EAClC,CACJ,CACJ,CAKA,SAASE,EAAOP,EAAKC,GACjB,KAAOD,EAAI3F,OAASmF,GAAY,CAO5B,IAAIgB,EAAeR,EAAI7E,KAAKsF,MAAMT,EAAI3F,OAASyF,GAAkB,GAAGF,QAMpE,GAJwB,MAApBY,EAAa,KACbA,EAAa,GAAKA,EAAa,GAC/BA,EAAa,GAAKA,EAAa,IAE9BX,EAGA,CACD,IAAIa,EAAoBV,EAAI7E,KAAKsF,MAAMT,EAAI3F,OAASyF,IAAiBF,QACrEI,EAAIlB,OAAOkB,EAAI3F,OAAS,EAAG,EAAGmG,EAAcE,EAChD,MALIV,EAAI/B,KAAKuC,EAMjB,CACJ,CAGA,GAAId,GAAUC,GAAQA,EAAKtF,OAAQ,CAC/B,IAAKH,EAAI,EAAGA,EAAIwF,EAAOrF,OAAQH,IAAK,CAEhC,GAAIwF,EAAOxF,KAAOyF,EAAK,GAAI,CACvBJ,EAAQrF,EACR,KAEJ,CACK,GAAIwF,EAAO,KACZC,EAAKA,EAAKtF,OAASqF,EAAOrF,OAASH,GAAI,CACvCqF,EAAQrF,EACRuF,GAAU,EACV,KAEJ,CACK,GAAIC,EAAOA,EAAOrF,OAAS,KAC5BsF,EAAKA,EAAKtF,OAASqF,EAAOrF,OAASH,GAAI,CACvCqF,EAAQG,EAAOrF,OAASH,EACxB,KACJ,CACJ,MACqB,IAAVqF,IACP5E,EAAQ,GAEhB,CAcA,OAbIA,EAAMN,QAAUf,EAASiG,KAGzBC,EAAa5E,EAAIP,OAASkF,EAAQO,EAC7BL,GAKDM,EAAQpF,EAAOC,GACf2F,EAAO3F,KALPmF,EAAQnF,EAAKD,GACb4F,EAAO5F,KAOR,CAACA,EAAOC,EACnB,EAOAT,EAAGoD,UAAUoD,WAAa,WACtBxG,EAAGoD,UAAUqD,aAAaC,MAAMzD,KAAMpC,UAC1C,EAOAb,EAAGoD,UAAUqD,aAAe,WACxBxD,KAAK9C,KAAKsB,KAAKwB,KAAKnD,KAAM8C,EAAMK,KAAKzC,OAAOmG,QAAQ/D,EAAMK,KAAKxC,KAAMwC,KAAKC,UAAM,GAAQ,EAC5F,EAMAlD,EAAGC,OAAS,GACLD,CACX,CAhVwB,E,6DChCpBb,EAAWH,EAAAA,EAAEG,SAAUE,EAAQL,EAAAA,EAAEK,MAAOuH,EAAO5H,EAAAA,EAAE4H,KA8RrD,QA9Q2B,WAMvB,SAAS/D,EAAMgE,GACX5D,KAAK6D,KAAO,CAAC3D,IAAKA,IAAKA,IAAKA,KAC5BF,KAAK4D,MAAQA,EACb,IAAIE,EAAc/D,EAAAA,EAAEH,MAEpB,OAAIkE,GAAeA,IAAgBlE,EACxB,IAAIkE,EAAYF,GAGrB5D,gBAAgBJ,OAGtBI,KAAK+D,KAAKH,GAFC,IAAIhE,EAAMgE,EAGzB,CAoPA,OAnOAhE,EAAMC,MAAQ,SAAU+D,GACpB,OAAOA,EAAQ,IAAIhE,EAAMgE,GAAShE,EAAMoE,IAC5C,EAeApE,EAAMO,UAAU4D,KAAO,SAAUH,GAC7B,IAAIK,EAAQJ,EAAM/G,EAAGoH,EAErB,GAAqB,iBAAVN,QACgB,IAAhBA,EAAMO,MACbnE,KAAKmE,MAAQP,EAAMO,MAAMC,KAAI,SAAUzH,GAAQ,OAAO,IAAIiD,EAAMjD,EAAK,GAAK,SAGzE,GAAqB,iBAAViH,EAAoB,CAGhC,GAFA5D,KAAK4D,MAAQA,EAAShE,EAAMyE,MAAMT,EAAMU,gBAAkBV,EAElC,MAApBA,EAAMW,OAAO,GAAY,CACzB,IAAIC,EAAMZ,EAAM3G,OAAQwH,EAAMC,SAASd,EAAMe,OAAO,GAAI,IAE5C,IAARH,EACAX,EAAO,EACI,SAANY,IAAmB,IACb,MAANA,IAAiB,EACX,IAANA,EACD,GAMS,IAARD,IACLX,EAAO,EACM,KAANY,IAAgB,GACR,KAANA,IAAgB,GACZ,IAANA,IAAe,EACP,IAANA,GACG,GAANA,IAAc,EAAY,GAANA,EACtB,GAGZ,CAEA,IAAKZ,EAED,IADA/G,EAAI8C,EAAMgF,QAAQ3H,OACXH,MAAQ+G,IAEXI,GADAC,EAAStE,EAAMgF,QAAQ9H,IACP+H,MAAMC,KAAKlB,MAEvBC,EAAOK,EAAOrE,MAAMoE,GAIpC,CACIJ,IACA7D,KAAK6D,KAAOA,EAEpB,EAYAjE,EAAMO,UAAU4E,IAAM,SAAUC,GAC5B,IAAIpB,EAAQ5D,KAAK4D,MAAOC,EAAO7D,KAAK6D,KACpC,GAAqB,iBAAVD,QACe,IAAf5D,KAAKmE,MAAuB,CACnC,IAAIc,EAAQ7I,EAAMwH,GAQlB,OAPAqB,EAAMd,MAAQ,GAAG3B,MAAMtB,KAAK+D,EAAMd,OAClCnE,KAAKmE,MAAMjF,SAAQ,SAAUvC,EAAMG,GAC/BmI,EAAMd,MAAMrH,GAAK,CACbmI,EAAMd,MAAMrH,GAAG,GACfH,EAAKoI,IAAIC,GAEjB,IACOC,CACX,CAEA,OAAIpB,GAAQ3H,EAAS2H,EAAK,IACP,QAAXmB,IAAsBA,GAAsB,IAAZnB,EAAK,GAC9B,OAASA,EAAK,GAAK,IAAMA,EAAK,GAAK,IAAMA,EAAK,GAAK,IAE/C,MAAXmB,EACO,GAAGE,OAAOrB,EAAK,IAEnB,QAAUA,EAAKsB,KAAK,KAAO,IAE/BvB,CACX,EAYAhE,EAAMO,UAAUiF,SAAW,SAAUC,GACjC,IAAIxB,EAAO7D,KAAK6D,KAChB,GAAI7D,KAAKmE,MACLnE,KAAKmE,MAAMjF,SAAQ,SAAUvC,GACzBA,EAAKyI,SAASC,EAClB,SAEC,GAAInJ,EAASmJ,IAAoB,IAAVA,EACxB,IAAK,IAAIvI,EAAI,EAAGA,EAAI,EAAGA,IACnB+G,EAAK/G,IAAM6G,EAAa,IAAR0B,GACZxB,EAAK/G,GAAK,IACV+G,EAAK/G,GAAK,GAEV+G,EAAK/G,GAAK,MACV+G,EAAK/G,GAAK,KAItB,OAAOkD,IACX,EAYAJ,EAAMO,UAAUmF,WAAa,SAAUD,GAEnC,OADArF,KAAK6D,KAAK,GAAKwB,EACRrF,IACX,EAgBAJ,EAAMO,UAAUuD,QAAU,SAAUtC,EAAInB,GACpC,IAAIsF,EAAWvF,KAAK6D,KAAM2B,EAASpE,EAAGyC,KAEtC,IAAK3H,EAASqJ,EAAS,MAAQrJ,EAASsJ,EAAO,IAC3C,OAAOpE,EAAGwC,OAAS,OAIvB,IAAI6B,EAA0B,IAAdD,EAAO,IAA4B,IAAhBD,EAAS,GAC5C,OAAQE,EAAW,QAAU,QACzB1H,KAAK2H,MAAMF,EAAO,IAAMD,EAAS,GAAKC,EAAO,KAAO,EAAIvF,IACxD,IACAlC,KAAK2H,MAAMF,EAAO,IAAMD,EAAS,GAAKC,EAAO,KAAO,EAAIvF,IACxD,IACAlC,KAAK2H,MAAMF,EAAO,IAAMD,EAAS,GAAKC,EAAO,KAAO,EAAIvF,KACvDwF,EACI,KACID,EAAO,IAAMD,EAAS,GAAKC,EAAO,KAAO,EAAIvF,IAClD,IACJ,GACR,EAWAL,EAAMyE,MAAQ,CACVsB,MAAO,UACPC,MAAO,WAMXhG,EAAMgF,QAAU,CAAC,CAGTC,MAAO,+FACPhF,MAAO,SAAUoE,GACb,MAAO,CACHN,EAAKM,EAAO,IACZN,EAAKM,EAAO,IACZN,EAAKM,EAAO,IACZxF,WAAWwF,EAAO,GAAI,IAE9B,GACD,CAECY,MAAO,kEACPhF,MAAO,SAAUoE,GACb,MAAO,CAACN,EAAKM,EAAO,IAAKN,EAAKM,EAAO,IAAKN,EAAKM,EAAO,IAAK,EAC/D,IAGRrE,EAAMoE,KAAO,IAAIpE,EAAM,IAChBA,CACX,CAxQ2B,E,sFChBvBD,EAAQC,EAAAA,EAAMC,MAEdgG,EAAgB9F,EAAAA,EAAE8F,cAAeC,EAAM/F,EAAAA,EAAE+F,IAIzC1J,EAAQL,EAAAA,EAAEK,MAeV2J,EAAiB,CAmCjBC,OC5DQ,CACJ,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WDgEJC,QAAS,CAAC,SAAU,UAAW,SAAU,WAAY,iBAsBrDC,KAAM,CAKFC,QAAS,aAUTC,OAAQ,CACJ,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OACxD,SAAU,YAAa,UAAW,WAAY,YAUlDC,YAAa,CACT,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAC1C,MAAO,MAAO,MAAO,MAAO,OAShCC,SAAU,CACN,SAAU,SAAU,UAAW,YAC/B,WAAY,SAAU,YA8C1BC,aAAc,IAgBdC,eAAgB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAmB1CC,UAAW,aAMXC,eAAgB,uBAWhBC,aAAc,KAuFlBC,OAAQ,CAAC,EAoDTC,KAAM,CAUFjF,UAAM,EAiBNkF,uBAAmB,EAkBnBC,cAAU,EAeVC,eAAgB,EAchBC,QAAQ,GAEZnI,MErbgB,CA0EhBoI,iBAAiB,EA8TjBC,QAAS,CAQLC,SAAS,EAcTC,KAAM,KA+BVC,YAAY,EAYZC,aAAc,EAUdC,WAAY,GAWZC,mBAAmB,EAWnBC,kBAAmB,OAsBnBC,oBAAoB,EAkCpBC,QAAS,CAAC,GAAI,GAAI,GAAI,IAQtBC,gBAAiB,CA4BbC,MAAO,CAIHC,OAAQ,GAcZC,SAAU,CAINC,MAAO,QAIPC,GAAI,GAWJC,EAAG,KA4SXC,mBAAmB,EAKnBC,QAAS,CAqDLC,aAAa,EAKbC,YAAa,CA6BTT,MAAO,CAEHC,OAAQ,GAeZC,SAAU,CAINC,MAAO,QAIPC,GAAI,GAWJC,EAAG,MAiBfK,MAAO,KAuBPC,OAAQ,KAgBRC,YAAa,UAuCbC,gBAAiB,UAwDjBC,gBAAiB,WFjvBjBC,MAAO,CAqGHC,KAAM,cAeNb,MAAO,SAcPc,OAAQ,GAURC,aAAc,IAWlBC,SAAU,CA+FNH,KAAM,GAaNb,MAAO,SAYPe,aAAc,IAWlBE,QAAS,CAYLH,OAAQ,GA4CRD,KAAM,GAONb,MAAO,OAQPkB,cAAe,UAcnBC,YAAa,CAAC,EAUdC,OAAQ,CAoCJpI,MAAO,CAIH+G,SAAU,WAIVrI,MAAO,YAgBf2J,OAAQ,CAiDJlC,SAAS,EAmBTa,MAAO,SASPsB,cAAc,EAIdC,UAAW,wBAuCXC,OAAQ,aAqFRC,eAAgB,WAEZ,OAAO1J,KAAK2J,IAChB,EAwDAjB,YAAa,UAWbnB,aAAc,EAQdqC,WAAY,CA2ERC,YAAa,UAgBbC,cAAe,WAwEnBC,UAAW,CAIPpK,MAAO,UAIPqK,OAAQ,UAIRC,SAAU,OAIVC,WAAY,OAIZC,aAAc,YAkBlBC,eAAgB,CAIZzK,MAAO,WAiBX0K,gBAAiB,CAIb1K,MAAO,WAiBX2K,QAAQ,EAQRC,kBAAmB,CAIfvC,SAAU,WAIVQ,MAAO,OAIPC,OAAQ,QAUZ+B,cAAc,EAwGdC,cAAe,EAuBftB,cAAe,SAYfjB,EAAG,EAeHC,EAAG,EAWHU,MAAO,CAkBH5H,MAAO,CAIHiJ,WAAY,UAaxB/D,QAAS,CAsCLuE,WAAY,CAIRR,WAAY,OAIZlC,SAAU,WAIV2C,IAAK,OAiBT1J,MAAO,CAIH+G,SAAU,WAIVW,gBAAiB,UAIjBiC,QAAS,GAITC,UAAW,WASnBC,QAAS,CA2VL1D,SAAS,EAQT5K,UAAWsJ,EAWXyB,aAAc,EAadwD,qBAAsB,CAElBC,YAAa,yBAEbC,OAAQ,sBAERC,OAAQ,mBAERC,KAAM,mBAENC,IAAK,gBAELC,KAAM,0BAENC,MAAO,QAEPC,KAAM,MAYVC,aAAc,GAmBdC,YAAa,UAObC,UAAW,IAMXC,QAAS,EAgBTC,MAAO,UAwBPC,QAAQ,EAqBRC,KAAMjG,EAAgB,GAAK,GAoB3BkG,aAAc,wDAkCdC,YAAa,kFAwBbrD,gBAAiBhJ,EAAM,WAElB2F,WAAW,KAAMP,MAsBtBkH,YAAa,EAab3B,QAAQ,EAUR4B,gBAAgB,EAchBjL,MAAO,CAEHtB,MAAO,UAEPqK,OAAQ,UAERC,SAAU,OAEVkC,WAAY,UAiBhBC,SAAS,GAMbC,QAAS,CAuCLjF,SAAS,EASTkF,KAAM,qCAgBNtE,SAAU,CAENC,MAAO,QAEPC,GAAI,GAEJiB,cAAe,SAEfhB,GAAI,GAURlH,MAAO,CAEH+I,OAAQ,UAERrK,MAAO,UAEPsK,SAAU,OAednB,KAAM,mBAKd/C,EAAejH,MAAMwI,YAAa,EAGlC,IAAIiF,EAAc,IAAIC,EAAAA,EAAKpQ,EAAM2J,EAAea,OAAQb,EAAec,OA+DvE,QANqB,CACjBd,eAAgBA,EAChBwG,YAAaA,EACbE,WAjDJ,WACI,OAAO1G,CACX,EAgDI2G,WAhCJ,SAAoBtN,GAqBhB,OAnBAhD,GAAM,EAAM2J,EAAgB3G,IAExBA,EAAQyH,MAAQzH,EAAQwH,UACpB7G,EAAAA,EAAE8G,KACF9G,EAAAA,EAAE8G,KAAK/F,OAAO1E,EAAM2J,EAAea,OAAQb,EAAec,KAAMzH,EAAQwH,OAAQxH,EAAQyH,OAYxF9G,EAAAA,EAAE8G,KAAO0F,GAGVxG,CACX,E,4DG1gFIA,EAAiB4G,EAAAA,EAAE5G,eAAgBwG,EAAcI,EAAAA,EAAEJ,YAEnDK,EAAoB7Q,EAAAA,EAAE6Q,kBAAmB1Q,EAAWH,EAAAA,EAAEG,SAAUI,EAAOP,EAAAA,EAAEO,KAAMqH,EAAO5H,EAAAA,EAAE4H,KAuJ5F,SAASkJ,EAAaC,EAAQC,EAAUxG,EAAcI,GAGlD,IAAI5E,EAAKiL,EAFTF,GAAUA,GAAU,EACpBC,GAAYA,EAEZ,IAAI7G,EAAOH,EAAeG,KAAM+G,GAAWH,EAAOI,WAAWC,MAAM,KAAK,IAAM,IAAIA,MAAM,KAAK,GAAGlQ,OAAQmQ,EAAWN,EAAOI,WAAWC,MAAM,KAAME,EAAgBN,GAC/I,IAAdA,EAEAA,EAAWhP,KAAKuB,IAAI2N,EAAS,IAEvB/Q,EAAS6Q,GAGVA,GAAYK,EAAS,IAAMA,EAAS,GAAK,KAE9CJ,EAAiBD,IAAYK,EAAS,KAChB,GAElBA,EAAS,KAAOA,EAAS,IAAIE,cAAcN,GACtCG,MAAM,KAAK,GAChBJ,EAAWC,IAIXI,EAAS,GAAKA,EAAS,GAAGD,MAAM,KAAK,IAAM,EAGvCL,EAFAC,EAAW,IAEDK,EAAS,GAAKrP,KAAKwP,IAAI,GAAIH,EAAS,KACzCI,QAAQT,GAIJ,EAEbK,EAAS,GAAK,IAvBlBL,EAAW,EA4Bf,IAAIU,GAAiB1P,KAAK2P,IAAIN,EAAS,GAAKA,EAAS,GAAKN,GACtD/O,KAAKwP,IAAI,IAAKxP,KAAKsB,IAAI0N,EAAUE,GAAW,IAAIO,QAAQT,GAExDY,EAAaC,OAAOjK,EAAK8J,IAEzBI,EAAYF,EAAW1Q,OAAS,EAAI0Q,EAAW1Q,OAAS,EAAI,EA0BhE,OAxBAsJ,EAAejK,EAAKiK,EAAcL,EAAKK,cACvCI,EAAerK,EAAKqK,EAAcT,EAAKS,cAEvC5E,EAAM+K,EAAS,EAAI,IAAM,GAGzB/K,GAAO8L,EAAYF,EAAWhJ,OAAO,EAAGkJ,GAAalH,EAAe,IAC/DyG,EAAS,GAAK,IAAMC,EACrBtL,EAAM,IAINA,GAAO4L,EACFhJ,OAAOkJ,GACPlP,QAAQ,iBAAkB,KAAOgI,GAGtCoG,IAEAhL,GAAOwE,EAAekH,EAAcjL,OAAOuK,IAE3CK,EAAS,IAAe,IAARrL,IAChBA,GAAO,IAAMqL,EAAS,IAEnBrL,CACX,CAWA,QALsB,CAClB+L,WA/KJ,SAAoB9I,EAAQ+I,EAAWC,GACnC,OAAOzB,EAAYuB,WAAW9I,EAAQ+I,EAAWC,EACrD,EA8KIhJ,OAnJJ,SAAgBiJ,EAAKC,EAAKpP,GAQtB,IAPA,IAAsCqP,EAASC,EAAgBlQ,EAAKmQ,EAAhEC,EAAW,IAAKC,GAAW,EAC3BC,EAAa,KACbC,EAAW,YACXvI,EAAOH,EAAeG,KACtBW,EAAO/H,GAASA,EAAM+H,MAAQ0F,EAC9BmC,EAAkB5P,GAASA,EAAM4P,iBAAmB7B,EACpD9K,EAAM,GACHkM,IAEY,KADfI,EAAQJ,EAAIU,QAAQL,KADZ,CAMR,GADAH,EAAUF,EAAIzL,MAAM,EAAG6L,GACnBE,EAAU,CAIV,GAHAH,EAAiBD,EAAQhB,MAAM,KAC/BjP,EAAM0O,EAAkBwB,EAAejM,SAAW,GAAI+L,GAElDE,EAAenR,QAAyB,iBAARiB,EAEhC,GADAiQ,EAAUC,EAAejJ,KAAK,KAC1BqJ,EAAWI,KAAKT,GAAU,CAC1B,IAAIpB,EAAWrI,UAAUyJ,EAAQzP,MAAM+P,IAAa,CAAC,GAAI,OAAO,GAAI,IACxD,OAARvQ,IACAA,EAAMwQ,EAAgBxQ,EAAK6O,EAAU7G,EAAKK,aAAc4H,EAAQQ,QAAQ,MAAQ,EAAIzI,EAAKS,aAAe,IAEhH,MAEIzI,EAAM2I,EAAKiH,WAAWK,EAASjQ,GAIvC6D,EAAIlB,KAAK3C,EACb,MAEI6D,EAAIlB,KAAKsN,GAEbF,EAAMA,EAAIzL,MAAM6L,EAAQ,GAExBC,GADAC,GAAYA,GACU,IAAM,GAChC,CAEA,OADAxM,EAAIlB,KAAKoN,GACFlM,EAAIoD,KAAK,GACpB,EA0GI0H,aAAcA,E,kBChOlB,IAAIgC,E,iBACJ,SAAWA,GAMPA,EAAQC,OAAS,6BAA8BD,EAAQE,QAAU,aAAcF,EAAQG,QAAU,SAAUH,EAAQ/O,IAAyB,oBAAXmP,OAC7HA,OACA,CAAC,EACLJ,EAAQK,IAAML,EAAQ/O,IAAIqP,SAAUN,EAAQ/I,IAAO+I,EAAQK,KACvDL,EAAQK,IAAIE,mBACVP,EAAQK,IAAIE,gBAAgBP,EAAQC,OAAQ,OAAOO,cAAgBR,EAAQS,UAAaT,EAAQ/O,IAAIyP,WAAaV,EAAQ/O,IAAIyP,UAAUD,WAAc,GAAIT,EAAQW,UAAoD,IAAzCX,EAAQS,UAAUX,QAAQ,UAAkBE,EAAQY,WAAsD,IAA1CZ,EAAQS,UAAUX,QAAQ,WAAmBE,EAAQa,KAAO,uBAAuBd,KAAKC,EAAQS,aAAeT,EAAQ/O,IAAI6P,MAAOd,EAAQe,UAAYf,EAAQW,WAAqD,IAAzCX,EAAQS,UAAUX,QAAQ,UAAkBE,EAAQhJ,cAAgB,iCAAiC+I,KAAKC,EAAQS,WAAYT,EAAQgB,UAAyD,IAA9ChB,EAAQS,UAAUX,QAAQ,eAAuBE,EAAQiB,QAAoB,EAAV/R,KAAKgS,GAAS,IAAKlB,EAAQmB,WAAcnB,EAAQY,WAC7pB/K,SAASmK,EAAQS,UAAUnC,MAAM,YAAY,GAAI,IAAM,EACxD0B,EAAQoB,WAAapB,EAAQ/O,IAAIoQ,WAAYrB,EAAQsB,YAAc,CAClE,UACA,cACA,eACA,YACDtB,EAAQuB,KAAO,WAAc,EAAGvB,EAAQwB,sBAAyB,WAEhE,IAAIC,GAAkB,EAGtB,IAAKzB,EAAQa,KAAM,CACf,IAAIa,EAAO1O,OAAO2O,eAAe,CAAC,EAAG,UAAW,CAC5CzL,IAAK,WACDuL,GAAkB,CACtB,IAEAzB,EAAQ/O,IAAI2Q,kBAAoB5B,EAAQ/O,IAAI4Q,sBAC5C7B,EAAQ/O,IAAI2Q,iBAAiB,cAAe5B,EAAQuB,KAAMG,GAC1D1B,EAAQ/O,IAAI4Q,oBAAoB,cAAe7B,EAAQuB,KAAMG,GAErE,CACA,OAAOD,CACX,CAjBoE,GA0BpEzB,EAAQ8B,OAAS,GAcjB9B,EAAQ+B,YAAc,CAAC,EAMvB/B,EAAQgC,YAAc,CAAC,EAIvBhC,EAAQiC,YAAc,CAAC,EAOvBjC,EAAQkC,WAAa,CACxB,CA5ED,CA4EGlC,IAAYA,EAAU,CAAC,IAM1B,S,6DC3FIC,EAAS/O,EAAAA,EAAE+O,OAAQhP,EAAMC,EAAAA,EAAED,IAE3BtB,EAAOzC,EAAAA,EAAEyC,KAAMwS,EAAgBjV,EAAAA,EAAEiV,cAAeC,EAAMlV,EAAAA,EAAEkV,IAAKC,EAAQnV,EAAAA,EAAEmV,MAAOC,EAAapV,EAAAA,EAAEoV,WAAYC,EAAWrV,EAAAA,EAAEqV,SAAU/U,EAAaN,EAAAA,EAAEM,WAAYgV,EAAQtV,EAAAA,EAAEsV,MACrKC,EAAexR,EAAIwR,aAOnBC,EAAsBD,GACtBH,EAAWG,EAAaE,eACxBF,EAAaE,aAAa,aAAc,CACpCC,WAAY,SAAUxS,GAAK,OAAOA,CAAG,IAEzCyS,EAAYH,EACZA,EAAmBE,WAAW,IAC9B,GAEAE,EAAqB,WACrB,IACI,OAAOC,SAAQ,IAAIC,WAAYC,gBAAgBJ,EAAW,aAC9D,CACA,MAAOK,GACH,OAAO,CACX,CACJ,CAPyB,GAmfzB,QA3dyB,WAOrB,SAASC,EAAIC,GACTjS,KAAKkS,MAA0B,iBAAXD,EAChBjS,KAAKmS,YAAYF,GAAUA,CACnC,CA0cA,OAxbAD,EAAII,qBAAuB,SAAUC,GAqBjC,OApBAhW,EAAWgW,GAAY,SAAUnU,EAAKoU,GAClC,IAAIC,GAAQ,GACgC,IAAxCP,EAAIQ,kBAAkB7D,QAAQ2D,KAC9BC,GAAQ,IAGW,IADnB,CAAC,aAAc,SAAU,OAAQ,SAAU,OAC1C5D,QAAQ2D,KACTC,EAAQnB,EAASlT,IAAQ8T,EAAIS,kBAAkBC,MAAK,SAAUC,GAAO,OAA4B,IAArBzU,EAAIyQ,QAAQgE,EAAY,KAEnGJ,IACDrB,EAAM,IAAI,OAAO,EAAQ,CACrB,8BAA+B,GAAGhM,OAAOoN,YAEtCD,EAAWC,IAGlBlB,EAASlT,IAAQmU,EAAWC,KAC5BD,EAAWC,GAAOpU,EAAIS,QAAQ,KAAM,QAE5C,IACO0T,CACX,EACAL,EAAIY,WAAa,SAAU3R,GACvB,OAAOA,EACFkM,MAAM,KACN0F,QAAO,SAAUC,EAAQC,GAC1B,IAAIC,EAAOD,EAAK5F,MAAM,KAAK/I,KAAI,SAAUnF,GAAK,OAAOA,EAAEgU,MAAQ,IAAIX,EAAMU,EAAK7Q,QAI9E,OAHImQ,GAAOU,EAAK/V,SACZ6V,EAAOR,EAAI3T,QAAQ,aAAa,SAAUuU,GAAK,OAAOA,EAAE,GAAGC,aAAe,KAAMH,EAAK7N,KAAK,MAEvF2N,CACX,GAAG,CAAC,EACR,EAgBAd,EAAIoB,eAAiB,SAAUxW,EAAIyW,GAC/BzW,EAAG0W,UAAYtB,EAAIN,UACf2B,GACU,IAAIrB,EAAIqB,GACdE,SAAS3W,EAErB,EAiBAoV,EAAI7R,UAAUoT,SAAW,SAAUC,GAuE/B,OA7DA,SAASC,EAAQC,EAASC,GACtB,IAAI5R,EA0DJ,OAzDAsP,EAAMqC,GAASxU,SAAQ,SAAU0U,GAC7B,IAMIC,EANAC,EAAUF,EAAKE,QACfC,EAAWH,EAAKI,YAChBjU,EAAAA,EAAEmP,IAAI+E,eAAeL,EAAKI,kBAC1B,EAEAE,EAAsBlC,EAAIkC,oBAE9B,GAAIJ,EACA,GAAgB,UAAZA,EACAD,EAAOE,OAEN,IAA0C,IAAtC/B,EAAImC,YAAYxF,QAAQmF,IAC7BI,EAAqB,CACrB,IAAIE,EAAiB,QAAZN,EACLhF,EACC6E,EAAUU,cAAgBvF,EAC3B9N,EAAUjB,EAAAA,EAAEmP,IAAIE,gBAAgBgF,EAAIN,GACpCQ,EAAeV,EAAKvB,YAAc,CAAC,EAGvChW,EAAWuX,GAAM,SAAU1V,EAAKoU,GAChB,YAARA,GACQ,eAARA,GACQ,aAARA,GACQ,UAARA,GACQ,gBAARA,IACAgC,EAAahC,GAAOpU,EAE5B,IACAM,EAAKwC,EAASkT,EACVI,EACAtC,EAAII,qBAAqBkC,IACzBV,EAAK3S,OACLgQ,EAAIjQ,EAAS4S,EAAK3S,OAGlB8S,GACA/S,EAAQuT,YAAYR,GAGxBN,EAAQG,EAAKY,UAAY,GAAIxT,GAC7B6S,EAAO7S,CACX,MAEIkQ,EAAM,IAAI,OAAO,EAAQ,CACrB,4BAA6B4C,IAKrCD,GACAF,EAAUY,YAAYV,GAE1B9R,EAAM8R,CACV,IAEO9R,CACX,CACO0R,CAAQzT,KAAKkS,MAAOsB,EAC/B,EAaAxB,EAAI7R,UAAUgS,YAAc,SAAUsC,GAClC,IAOIvF,EAPAgD,EAAQ,GAQZ,GAPAuC,EAASA,EACJxB,OAIAtU,QAAQ,iBAAkB,kBAE3BgT,EACAzC,GAAM,IAAI2C,WAAYC,gBAAgBP,EAClCA,EAAmBE,WAAWgD,GAC9BA,EAAQ,iBAEX,CACD,IAAIC,EAAO1D,EAAc,OACzB0D,EAAKpB,UAAYmB,EACjBvF,EAAM,CAAEwF,KAAMA,EAClB,CACA,IAAIC,EAAmB,SAAUd,EAAMe,GACnC,IAAId,EAAUD,EAAKgB,SAASvQ,cAExBwQ,EAAU,CACVhB,QAASA,GAEG,UAAZA,IACAgB,EAAQd,YAAcH,EAAKG,aAAe,IAE9C,IAAIe,EAAmBlB,EAAKxB,WAE5B,GAAI0C,EAAkB,CAClB,IAAIC,EAAe,CAAC,EACpB,GAAG9V,QAAQgC,KAAK6T,GAAkB,SAAUE,GACpB,eAAhBA,EAAOtL,KACPmL,EAAQ7T,MAAQ+Q,EAAIY,WAAWqC,EAAOC,OAGtCF,EAAaC,EAAOtL,MAAQsL,EAAOC,KAE3C,IACAJ,EAAQzC,WAAa2C,CACzB,CAEA,GAAInB,EAAKsB,WAAWlY,OAAQ,CACxB,IAAImY,EAAa,GACjB,GAAGlW,QAAQgC,KAAK2S,EAAKsB,YAAY,SAAUE,GACvCV,EAAiBU,EAAWD,EAChC,IACIA,EAAWnY,SACX6X,EAAQN,SAAWY,EAE3B,CACAR,EAAM/T,KAAKiU,EACf,EAEA,MADA,GAAG5V,QAAQgC,KAAKgO,EAAIwF,KAAKS,YAAY,SAAUE,GAAa,OAAOV,EAAiBU,EAAWnD,EAAQ,IAChGA,CACX,EAqBAF,EAAIQ,kBAAoB,CACpB,gBACA,mBACA,gBACA,gBACA,cACA,aACA,kBACA,YACA,eACA,gBACA,uBACA,gBACA,QACA,YACA,QACA,UACA,KACA,KACA,IACA,KACA,KACA,WACA,OACA,SACA,OACA,KACA,KACA,eACA,cACA,SACA,UACA,SACA,UACA,cACA,eACA,eACA,IACA,OACA,OACA,OACA,QACA,QACA,MACA,cACA,eACA,SACA,iBACA,eACA,QACA,cACA,SACA,UACA,UACA,SACA,WACA,aACA,cACA,aACA,aACA,QACA,OACA,SACA,QACA,IACA,KACA,KACA,aACA,IACA,KACA,KACA,UAiBJR,EAAIS,kBAAoB,CACpB,WACA,UACA,UACA,IACA,MACA,KACA,KAgBJT,EAAImC,YAAc,CACd,IACA,OACA,IACA,KACA,SACA,UACA,SACA,WACA,OACA,KACA,OACA,MACA,KACA,KACA,KACA,sBACA,UACA,UACA,UACA,UACA,iBACA,WACA,UACA,cACA,SACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,MACA,KACA,iBACA,SACA,KACA,IACA,OACA,UACA,MACA,OACA,QACA,OACA,OACA,SACA,QACA,MACA,MACA,MACA,QACA,OACA,WACA,QACA,QACA,QACA,QACA,KACA,KACA,KACA,IACA,KACA,SAEJnC,EAAIN,UAAYA,EA4BhBM,EAAIkC,qBAAsB,EACnBlC,CACX,CArdyB,E,4FC1CrBzV,EAAa+Y,EAAAA,EAAE/Y,WAEfwJ,EAAiB4G,EAAAA,EAAE5G,eAEnBf,EAASuQ,EAAAA,EAAEvQ,OAEXwQ,EAAWzZ,EAAAA,EAAEyZ,SAAU1Z,EAAUC,EAAAA,EAAED,QAAS2Z,EAAQ1Z,EAAAA,EAAE0Z,MAAOC,EAAS3Z,EAAAA,EAAE2Z,OAAQC,EAAY5Z,EAAAA,EAAE4Z,UAAW/I,EAAoB7Q,EAAAA,EAAE6Q,kBAAmB3Q,EAAUF,EAAAA,EAAEE,QAASkV,EAAapV,EAAAA,EAAEoV,WAAYjV,EAAWH,EAAAA,EAAEG,SAAUC,EAAWJ,EAAAA,EAAEI,SAAUC,EAAQL,EAAAA,EAAEK,MAAOC,EAAaN,EAAAA,EAAEM,WAAYC,EAAOP,EAAAA,EAAEO,KAAMsZ,EAAc7Z,EAAAA,EAAE6Z,YAAaC,EAAc9Z,EAAAA,EAAE8Z,YAAaC,EAAY/Z,EAAAA,EAAE+Z,UA2mCvX,QA3lC2B,WACvB,SAASC,IAaL/V,KAAKgW,cAAW,EAChBhW,KAAKiW,aAAe,QACpBjW,KAAKkW,QAAK,EACVlW,KAAKmW,QAAS,EAwBdnW,KAAK2J,UAAO,EAiBZ3J,KAAKZ,aAAU,EAOfY,KAAKoW,gBAAa,EAClBpW,KAAKqW,UAAW,EAOhBrW,KAAKjB,YAAS,EASdiB,KAAKsW,eAAY,EAQjBtW,KAAKuW,WAAQ,EASbvW,KAAKwW,SAAU,EACfxW,KAAKkI,OAAI,CACb,CA++BA,OAn+BA6N,EAAM5V,UAAUsW,qBAAuB,WACnC,IAAIC,EAAQ1W,KAAM2W,EAAgB,CAAEzO,EAAGwO,EAAME,UAAWhM,QAAS,GAAKiM,EAAiBH,EAAMI,oBAC7FD,EAAeE,SAAS7X,SAAQ,SAAUrC,GACtC,IAAIma,EAAuB,cAATna,EAClB6Z,EAAM7Z,GAAQ6Z,EAAM7Z,GAAMO,QAAQ4Z,EAAc,CAC5C9O,EAAGwO,EAAM7Z,GAAM+Z,UACfzO,EAAGuO,EAAM7Z,GAAMoa,UACfrM,QAAS,GACT+L,EACR,IACAE,EAAeK,OAAOhY,SAAQ,SAAUgY,GACpCR,EAAMQ,GAAQhY,SAAQ,SAAU0U,GACxBA,EAAK5S,SACL4S,EAAKxW,QAAQsY,EAAO,CAAExN,EAAGwO,EAAME,WAAchD,EAAKqD,UAAY,CAC1D/O,EAAG0L,EAAKgD,UACRzO,EAAGyL,EAAKqD,WACR,CAAC,GAEb,GACJ,GACJ,EAiBAlB,EAAM5V,UAAUgX,aAAe,SAAU/X,EAAS8I,GAC9C,IAAIwO,EAAQ1W,KAAMjB,EAAS2X,EAAM3X,OAAQqY,EAAcrY,EAAOK,QAAQgY,aAAerY,EAAOqY,YAwD5F,OAvDAhY,EAAU2W,EAAM5V,UAAUkX,gBAAgBnW,KAAKlB,KAAMZ,GAErDsW,EAAOgB,EAAOtX,GACdsX,EAAMtX,QAAUsX,EAAMtX,QAClBsW,EAAOgB,EAAMtX,QAASA,GACtBA,EAGAA,EAAQkY,cACDZ,EAAMY,MAEblY,EAAQmY,mBACDb,EAAMa,WASbH,IACAV,EAAMvO,EAAI4N,EAAM5V,UAAUyM,kBAAkB1L,KAAKwV,EAAOU,IAE5DV,EAAMP,OAASnW,KAAKwX,UAAYxX,KAAKwX,UACrCd,EAAMT,aAAeS,EAAMP,OAAS,OAAS,QAEzCO,EAAML,WACNK,EAAMe,MAAQ,UAUd,SAAUf,QACG,IAANxO,GACPnJ,EAAO2Y,OACP3Y,EAAO2Y,MAAMC,WACbjB,EAAMxO,EAAInJ,EAAO2Y,MAAME,QAAQlB,SAEZ,IAAZA,EAAMxO,GAAqBnJ,EAE9B2X,EAAMxO,OADO,IAANA,EACGnJ,EAAO8Y,gBAGP3P,EAGThM,EAASkD,EAAQ8I,IAAMnJ,EAAOK,QAAQ0Y,iBAC3CpB,EAAMxO,EAAInJ,EAAO8Y,cAAczY,EAAQ8I,IAEpCwO,CACX,EAQAX,EAAM5V,UAAU4X,QAAU,WACtB,IACIlb,EADA6Z,EAAQ1W,KAAMjB,EAAS2X,EAAM3X,OAAQD,EAAQC,EAAOD,MAAOkZ,EAAcjZ,EAAOK,QAAQ4Y,YAAaC,EAAcnZ,EAAMmZ,YAAavY,EAAkBgX,EAAM3X,OAAOD,MAAMS,SAASG,gBAAiBlD,EAAYD,EAAWmD,GAMhO,SAASwY,IASL,IAAKrb,KAPD6Z,EAAMyB,SACNzB,EAAM0B,UACN1B,EAAM2B,WACN3B,EAAMa,cACN1B,EAAYa,GACZA,EAAM4B,mBAEG5B,EACTA,EAAM7Z,GAAQ,IAEtB,CACI6Z,EAAM6B,YAENzZ,EAAMwK,OAAOkP,YAAY9B,GAEzBuB,IACAvB,EAAM+B,WACNhD,EAAMwC,EAAavB,GACduB,EAAYhb,SACb6B,EAAMmZ,YAAc,OAGxBvB,IAAU5X,EAAM4Z,YAChBhC,EAAMiC,aAGLX,GAAgBA,EAAY5Q,SAI7BpH,KAAKyW,uBACLb,EAAYsC,EAAc1b,EAAUC,WAJpCyb,IAMJpZ,EAAM8Z,YACV,EAQA7C,EAAM5V,UAAUmY,gBAAkB,SAAUO,GACxC,IAAInC,EAAQ1W,KAAM8Y,EAAQpC,EAAMI,kBAAkB+B,GAClDC,EAAM/B,SAAS7X,SAAQ,SAAUrC,GAC7B6Z,EAAM7Z,GAAQ6Z,EAAM7Z,GAAMkb,SAC9B,IACAe,EAAM5B,OAAOhY,SAAQ,SAAUgY,GAC3BR,EAAMQ,GAAQhY,SAAQ,SAAU0U,GACxBA,GAAQA,EAAK5S,SACb4S,EAAKmE,SAEb,WACOrB,EAAMQ,EACjB,GACJ,EAkBAnB,EAAM5V,UAAU4Y,eAAiB,SAAUC,EAAWC,EAAWC,GAC7D,IAAIxC,EAAQ1W,KAA4BmZ,EAAbnZ,KAAKjB,OAA+BK,SAE3D+Z,EAAczC,MAAM0C,OAAOJ,IAC1BtC,EAAMtX,SACHsX,EAAMtX,QAAQga,QACd1C,EAAMtX,QAAQga,OAAOJ,KACzBtC,EAAM2C,eAGQ,UAAdL,GAAyBG,EAAcG,mBACvCJ,EAAkB,SAAUK,GAGpB7C,EAAM8C,QACN9C,EAAM8C,OAAO,KAAMD,EAAME,SAAWF,EAAMG,SAAWH,EAAMI,SAEnE,GAEJhE,EAAUe,EAAOsC,EAAWC,EAAWC,EAC3C,EAUAnD,EAAM5V,UAAUyZ,aAAe,WAC3B,IAAIlD,EAAQ1W,KACZ,MAAO,oBACF0W,EAAML,SAAW,2BAA6B,KAC9CK,EAAMmD,SAAW,uBAAyB,KAC1CnD,EAAMP,OAAS,yBAA2B,UACd,IAArBO,EAAMoD,WACV,qBAAuBpD,EAAMoD,WAAa,KAC7CpD,EAAMtX,QAAQoK,UAAY,IAAMkN,EAAMtX,QAAQoK,UAAY,KAC1DkN,EAAMqD,MAAQrD,EAAMqD,KAAKvQ,UAAY,IAClCkN,EAAMqD,KAAKvQ,UAAU7K,QAAQ,sBAAuB,IAAM,GACtE,EAOAoX,EAAM5V,UAAU2W,kBAAoB,SAAU+B,GAC1C,IACIhc,EAAMC,EADN4Z,EAAQ1W,KAAM8Y,EAAQ,GAAIjC,EAAiB,CAAEE,SAAU,GAAIG,OAAQ,IAUvE,KARA2B,EAAQA,GAAS,CAAEV,QAAS,EAAGE,UAAW,IAChCF,SACNW,EAAMjY,KAAK,UAAW,eAEtBgY,EAAMR,WACNS,EAAMjY,KAAK,YAAa,gBAAiB,iBAAkB,aAE/D/D,EAAIgc,EAAM7b,OACHH,KACHD,EAAOic,EAAMhc,GACT4Z,EAAM7Z,IACNga,EAAeE,SAASlW,KAAKhE,GAarC,MAVA,CACI,UACA,YACA,aACFqC,SAAQ,SAAUrC,GAChB,IAAIqa,EAASra,EAAO,IAChBgc,EAAMhc,IAAS6Z,EAAMQ,IACrBL,EAAeK,OAAOrW,KAAKqW,EAEnC,IACOL,CACX,EAUAd,EAAM5V,UAAU6Z,eAAiB,WAC7B,MAAO,CACH9R,EAAGlI,KAAKgW,SACR7N,EAAGnI,KAAKmI,EACRxI,MAAOK,KAAKL,MACZma,WAAY9Z,KAAK8Z,WACjBxH,IAAKtS,KAAK2J,MAAQ3J,KAAKgW,SACvBjX,OAAQiB,KAAKjB,OACb2X,MAAO1W,KACPoW,WAAYpW,KAAKoW,WACjBG,MAAOvW,KAAKuW,OAASvW,KAAKia,WAElC,EAKAlE,EAAM5V,UAAUyM,kBAAoB,SAAU0F,GAC1C,GAAKA,EAGL,OAA+B,IAA3BA,EAAI3D,QAAQ,WACL/B,EAAkB0F,EAAKtS,KAAKZ,SAEhCY,KAAKsS,EAChB,EASAyD,EAAM5V,UAAU+Z,QAAU,WACtB,IACIH,EADAhb,EAASiB,KAAKjB,OAAQob,EAAQpb,EAAOob,MAAOC,EAAWrb,EAAOqb,UAAY,IACpEtd,EAAI,EAEd,IADAid,EAAOI,EAAMrd,GACNkD,KAAKoa,IAAaL,EAAK7E,OAC1B6E,EAAOI,IAAQrd,GAYnB,OATKkD,KAAKqa,gBACNra,KAAKqa,cAAgBra,KAAKL,OAE1Boa,GAAQA,EAAKpa,QAAUK,KAAKZ,QAAQO,MACpCK,KAAKL,MAAQoa,EAAKpa,MAGlBK,KAAKL,MAAQK,KAAKqa,cAEfN,CACX,EAMAhE,EAAM5V,UAAUma,gBAAkB,WAC9B,IAAI5D,EAAQ1W,KAGZ,OAFmB0W,EAAMyB,UACpBzB,EAAMyB,QAAQoC,YAAc7D,EAAMyB,QAAQnX,QAAQ6T,aAC/B7U,KAAKwa,SACjC,EAqBAzE,EAAM5V,UAAU4D,KAAO,SAAUhF,EAAQK,EAAS8I,GAQ9C,OAPAlI,KAAKjB,OAASA,EACdiB,KAAKmX,aAAa/X,EAAS8I,GAE3BlI,KAAKkW,GAAKpa,EAAQkE,KAAKkW,IAAMlW,KAAKkW,GAAKJ,IACvC9V,KAAKya,eACL1b,EAAOD,MAAM8Z,aACbjD,EAAU3V,KAAM,aACTA,IACX,EAMA+V,EAAM5V,UAAUqX,QAAU,WACtB,OAAkB,OAAXxX,KAAKkI,GAAchM,EAAS8D,KAAKmI,EAC5C,EAiBA4N,EAAM5V,UAAUkX,gBAAkB,SAAUjY,GACxC,IACcsb,EADV3b,EAASiB,KAAKjB,OAAQ+C,EAAO/C,EAAOK,QAAQ0C,KAAM6Y,EAAgB7Y,GAAQ/C,EAAO4b,eAAiB,CAAC,KAAMC,EAAaD,EAAc1d,OACpI8E,EAAM,CAAC,EAAkBjF,EAAI,EAAG4D,EAAI,EACxC,GAAIxE,EAASkD,IAAwB,OAAZA,EACrB2C,EAAI4Y,EAAc,IAAMvb,OAEvB,GAAInD,EAAQmD,GAYb,KAVK0C,GAAQ1C,EAAQnC,OAAS2d,IAEJ,WADtBF,SAAuBtb,EAAQ,IAE3B2C,EAAI4H,KAAOvK,EAAQ,GAEI,WAAlBsb,IACL3Y,EAAImG,EAAI9I,EAAQ,IAEpBtC,KAEG4D,EAAIka,GAEF9Y,QAA8B,IAAf1C,EAAQtC,KACpB6d,EAAcja,GAAGiO,QAAQ,KAAO,EAGhCoH,EAAM5V,UAAU0a,kBAAkB9Y,EAAK3C,EAAQtC,GAAI6d,EAAcja,IAGjEqB,EAAI4Y,EAAcja,IAAMtB,EAAQtC,IAGxCA,IACA4D,QAGoB,iBAAZtB,IACZ2C,EAAM3C,EAIFA,EAAQmY,aACRxY,EAAO+b,iBAAkB,GAGzB1b,EAAQ2b,SACRhc,EAAOic,kBAAmB,IAGlC,OAAOjZ,CACX,EAMAgU,EAAM5V,UAAUF,IAAM,SAAUgb,EAAkBC,QAChC,IAAVA,IAAoBA,EAAQlb,KAAKkb,OACrC,IAAeC,EAANnb,KAAiBmb,MAAOpc,EAAxBiB,KAAoCjB,OAAQD,EAAQC,EAAOD,MAAO4Y,EAAQ3Y,EAAO2Y,MAAO0D,EAAQrc,EAAOqc,MAC5GC,EAAO,EAAGC,EAAO,EACrB,GAAIpf,EAASif,IAAUjf,EAASgf,GAK5B,OAJID,IACAI,EAAO3D,EAAQA,EAAMzX,IAAMnB,EAAMyc,SACjCD,EAAOF,EAAQA,EAAMnb,IAAMnB,EAAM0c,SAE9B1c,EAAM2c,UAAY/D,GAAS0D,EAC9B,CAACA,EAAM5W,IAAM0W,EAAQI,EAAM5D,EAAMlT,IAAM2W,EAAQE,GAC/C,CAACF,EAAQE,EAAMH,EAAQI,EAEnC,EAKAvF,EAAM5V,UAAUsa,aAAe,WAC3B,IACI9a,EAAOqG,EAA8C8T,EADrD/a,EAASiB,KAAKjB,OAAQ2c,EAAe3c,EAAOD,MAAMM,QAAQN,MAAOwI,EAAavI,EAAOD,MAAMwI,WAC5EE,EAAakU,EAAalU,kBAEtCxH,KAAKqa,cACRtb,EAAOK,QAAQuc,cACVrU,IAED3H,GADAqG,EAASjH,EAAOK,QAAQ4G,QAAUjH,EAAOD,MAAMM,QAAQ4G,QACxCjH,EAAO6c,cACtBpU,EAAaxB,EAAO/I,QAExB6c,EAAa/a,EAAO6c,aACpB7c,EAAO6c,eAEH7c,EAAO6c,eAAiBpU,IACxBzI,EAAO6c,aAAe,KAIrBtU,IACD3H,EAAQZ,EAAOY,OAEnBma,EAAa/a,EAAO+a,YASxB9Z,KAAK8Z,WAAaxd,EAAK0D,KAAKZ,QAAQ0a,WAAYA,GAOhD9Z,KAAKL,MAAQrD,EAAK0D,KAAKZ,QAAQO,MAAOA,EAC1C,EAoBAoW,EAAM5V,UAAU0a,kBAAoB,SAAUgB,EAAQ3G,EAAO5C,GAWzD,OAViBA,EAAInF,MAAM,KAChB0F,QAAO,SAAU5O,EAAQqO,EAAKxV,EAAG8F,GACxC,IAAIkZ,EAAYlZ,EAAI3F,OAAS,IAAMH,EAMnC,OALAmH,EAAOqO,GAAQwJ,EACX5G,EACA/Y,EAAS8H,EAAOqO,IAAM,GAClBrO,EAAOqO,GACP,CAAC,EACFrO,EAAOqO,EAClB,GAAGuJ,GACIA,CACX,EACA9F,EAAM5V,UAAU4b,WAAa,WACzB,OAAQ/b,KAAKmW,MACjB,EAYAJ,EAAM5V,UAAU6b,iBAAmB,SAAUhQ,GAEzC,IAAIjN,EAASiB,KAAKjB,OAAQkd,EAAuBld,EAAOmd,eAAgBC,EAAgB7f,EAAK2f,EAAqBE,cAAe,IAAKC,EAAcH,EAAqBG,aAAe,GAAIC,EAAcJ,EAAqBI,aAAe,GAe9O,OAbItd,EAAOD,MAAMwI,aACb0E,EACIjN,EAAOD,MAAMgM,QAAQwR,iBAAiBtQ,KAI7CjN,EAAO4b,eAAiB,CAAC,MAAMzb,SAAQ,SAAUoT,GAC9CA,EAAM,UAAYA,GACd8J,GAAeC,KACfrQ,EAAcA,EAAYrN,QAAQ4d,OAAOjK,EAAM,IAAK,KAAM8J,EAAc9J,EAAM,IAAM+J,IAExFrQ,EAAcA,EAAYrN,QAAQ4d,OAAOjK,EAAM,IAAK,KAAMA,EAAM,MAAQ6J,EAAgB,KAC5F,IACOnX,EAAOgH,EAAa,CACvB0K,MAAO1W,KACPjB,OAAQiB,KAAKjB,QACdA,EAAOD,MACd,EAiCAiX,EAAM5V,UAAUW,OAAS,SAAU1B,EAASod,EAAQhgB,EAAWigB,GAC3D,IACI3f,EADA4Z,EAAQ1W,KAAMjB,EAAS2X,EAAM3X,OAAQoZ,EAAUzB,EAAMyB,QAASrZ,EAAQC,EAAOD,MAAOqa,EAAgBpa,EAAOK,QAM/G,SAAS0B,IACL4V,EAAMS,aAAa/X,GAGnB,IAAIsd,EAAiBvE,GAAWzB,EAAMgG,eAClCC,EAAmC,OAAZjG,EAAMvO,GAC5BuU,EACDA,EACAvE,GAAWwE,IACXjG,EAAMyB,QAAUA,EAAQJ,iBACjBrB,EAAMgG,gBAEbvgB,EAASiD,GAAS,KAEd+Y,GAAWA,EAAQnX,SAEf5B,GACAA,EAAQ2b,aACyB,IAA1B3b,EAAQ2b,OAAO6B,SACtBlG,EAAMyB,QAAUA,EAAQJ,WAG5B3Y,GAAWA,EAAQmY,YAAcb,EAAM2B,YACvC3B,EAAM2B,UAAY3B,EAAM2B,UAAUN,WAElCrB,EAAMmG,YACNnG,EAAMmG,UAAYnG,EAAMmG,UAAU9E,YAI1Cjb,EAAI4Z,EAAMrI,MACVtP,EAAO+d,qBAAqBpG,EAAO5Z,GAInCqc,EAAc4D,KAAKjgB,GAAMX,EAASgd,EAAc4D,KAAKjgB,IAAI,IACrDX,EAASiD,GAAS,GAClBsX,EAAMtX,QACN9C,EAAK8C,EAAS+Z,EAAc4D,KAAKjgB,IAErCiC,EAAOie,QAAUje,EAAOke,aAAc,GACjCle,EAAOme,UAAYne,EAAOoe,qBAC3Bre,EAAMse,YAAa,GAEU,UAA7BjE,EAAckE,aACdve,EAAMwe,eAAgB,GAEtBd,GACA1d,EAAM0d,OAAOhgB,EAErB,CAtDAggB,EAASlgB,EAAKkgB,GAAQ,IAwDL,IAAbC,EACA3b,IAGA4V,EAAMqC,eAAe,SAAU,CAAE3Z,QAASA,GAAW0B,EAE7D,EAuBAiV,EAAM5V,UAAUod,OAAS,SAAUf,EAAQhgB,GACvCwD,KAAKjB,OAAOye,YAAYxd,KAAKjB,OAAOge,KAAKpO,QAAQ3O,MAAOwc,EAAQhgB,EACpE,EA8BAuZ,EAAM5V,UAAUqZ,OAAS,SAAUnD,EAAUoH,GACzC,IAAI/G,EAAQ1W,KAAMjB,EAAS2X,EAAM3X,OAAQD,EAAQC,EAAOD,MACxDuX,EAAW/Z,EAAK+Z,GAAWK,EAAML,UACjCrW,KAAK0d,gBAAkBrH,EAEvBK,EAAMqC,eAAe1C,EAAW,SAAW,WAAY,CAAEoH,WAAYA,IAAc,WAU/E/G,EAAML,SAAWK,EAAMtX,QAAQiX,SAAWA,EAC1CtX,EAAOK,QAAQ2d,KAAKhe,EAAOge,KAAKpO,QAAQ+H,IACpCA,EAAMtX,QACVsX,EAAM+B,SAASpC,GAAY,UAEtBoH,GACD3e,EAAM6e,oBAAoBze,SAAQ,SAAU0e,GACxC,IAAIC,EAAaD,EAAU7e,OACvB6e,EAAUvH,UAAYuH,IAAclH,IACpCkH,EAAUvH,SAAWuH,EAAUxe,QAAQiX,UACnC,EACJwH,EAAWze,QAAQ2d,KAAKc,EAAWd,KAAKpO,QAAQiP,IAAcA,EAAUxe,QAIxEwe,EAAUnF,SAAS3Z,EAAMmZ,aACrB4F,EAAWze,QAAQ0e,oBACnB,WAAa,IACjBF,EAAU7E,eAAe,YAEjC,GAER,WACO/Y,KAAK0d,eAChB,EAUA3H,EAAM5V,UAAU4d,YAAc,SAAUhM,GACpC,IAAI2E,EAAQ1W,KAA6BlB,EAAd4X,EAAM3X,OAAuBD,MAAOkf,EAAUlf,EAAMkf,QAC/EjM,EAAIA,EACAiM,EAAQC,UAAUlM,GAElBiM,EAAQE,6BAA6BxH,EAAO5X,EAAM2c,UACtDuC,EAAQG,gBAAgBpM,EAAG2E,EAC/B,EAQAX,EAAM5V,UAAUwY,WAAa,WACzB,IAAIjC,EAAQ1W,KAAMlB,EAAQ4X,EAAM3X,OAAOD,MACvC4X,EAAMqC,eAAe,YAChBrC,EAAM3X,OAAOK,QAAQ0e,sBACrBhf,EAAMmZ,aAAe,IAAI/Y,SAAQ,SAAUkf,GACxCA,EAAE3F,UACN,IAEJ3Z,EAAMmZ,YAAcnZ,EAAM4Z,WAAa,IAC3C,EAQA3C,EAAM5V,UAAUkZ,aAAe,WAC3B,IAAKrZ,KAAKqe,kBAAmB,CACzB,IAAIC,EAAUte,KAAsEoZ,EAAtDhd,EAAMkiB,EAAQvf,OAAOK,QAAQsX,MAAO4H,EAAQlf,SAA2Bga,OACrGkF,EAAQlF,OAASA,EACjB/c,EAAW+c,GAAQ,SAAUG,EAAOP,GAC5B7H,EAAWoI,IACX/D,EAAS8I,EAAStF,EAAWO,EAErC,IACAvZ,KAAKqe,mBAAoB,CAC7B,CACJ,EAeAtI,EAAM5V,UAAUsY,SAAW,SAAUhB,EAAO8G,GACxC,IAKwBC,EAAeC,EAAcC,EAAuEC,EALxHjI,EAAQ1W,KAAMjB,EAAS2X,EAAM3X,OAAQ6f,EAAgBlI,EAAMe,MAAOoH,EAAgB9f,EAAOK,QAAQ0f,OAAOrH,GAAS,WACjH,CAAC,EAAIsH,EAAiBhZ,EAAeqD,YAAYrK,EAAOsI,MAAM0T,QAC9Dhc,EAAOK,QAAQ2b,OAASiE,EAAkBD,IAA2C,IAA1BA,EAAc3X,QAAoB6X,EAAuBF,GACpHA,EAAcD,QACdC,EAAcD,OAAOrH,GAAS,WAAc,CAAC,EAAIyH,GAA+C,IAA/BD,EAAmB7X,QAAmB+X,EAAczI,EAAMqE,QAAU,CAAC,EAAGjc,EAAQC,EAAOD,MAAOsgB,EAAcL,GAAiBhgB,EAAOyf,cACrMa,EAAOtgB,EAAOsgB,KAA0DC,EAAqBvgB,EAAOugB,mBAExG,MADA7H,EAAQA,GAAS,MAGNf,EAAMe,QAAU8G,GAEtB7H,EAAML,UAAsB,WAAVoB,IAEO,IAAzBoH,EAAazX,SAEbqQ,IAAUyH,GACNF,IACkC,IAA/BC,EAAmB7X,UAE1BqQ,GACG0H,EAAYL,QACZK,EAAYL,OAAOrH,KACmB,IAAtC0H,EAAYL,OAAOrH,GAAOrQ,SAflC,CAyBA,GANAsP,EAAMe,MAAQA,EACV2H,IACAZ,EAAgBzf,EAAOyf,cAAc9H,EAAOe,IAI5Cf,EAAMyB,UAAYzB,EAAMgG,eAAgB,CAOxC,GANIkC,GACAlI,EAAMyB,QAAQoH,YAAY,oBAAsBX,GAEhDnH,GACAf,EAAMyB,QAAQqH,SAAS,oBAAsB/H,IAE5C3Y,EAAMwI,WAAY,CACnBmX,EAAe1f,EAAO0f,aAAa/H,EAAOe,GAC1CiH,EAAwBpiB,EAAKwC,EAAMM,QAAQN,MAAMtC,UAAWqiB,EAAariB,WACzE,IAAIijB,EAAYhB,EAAa7T,QAGzB7L,EAAOK,QAAQ0e,qBAAuB5hB,EAASujB,MAC9C/I,EAAMa,YAAc,IAAIrY,SAAQ,SAAUwgB,GACnCA,IACCA,EAAMC,SAAS,iCAChBD,EAAMtiB,QAAQ,CAAEwN,QAAS6U,GAAaf,EAE9C,IACIhI,EAAMmG,WACNnG,EAAMmG,UAAUzf,QAAQ,CAAEwN,QAAS6U,GAAaf,IAGxDhI,EAAMyB,QAAQ/a,QAAQqhB,EAAcC,EACxC,CACIF,GACA9H,EAAMyB,QAAQ/a,QAAQohB,EAAeliB,EAErCwC,EAAMM,QAAQN,MAAMtC,UAAWyiB,EAAmBziB,UAAWuiB,EAAcviB,YAG3E8iB,GACAA,EAAmBM,MAE3B,MAIQnI,GAASwH,IACTN,EAAYQ,EAAYvC,QAAU7d,EAAO6d,OAGrC0C,GACAA,EAAmBO,gBAAkBlB,IACrCW,EAAqBA,EAAmBvH,WAGxCyG,IACKc,EAWDA,EAAmBf,EAAO,UAAY,QAAQ,CAC1CrW,EAAGsW,EAActW,EACjBC,EAAGqW,EAAcrW,IAZjBwW,IACA5f,EAAOugB,mBAAqBA,EACxBxgB,EAAMS,SACDqd,OAAO+B,EAAWH,EAActW,EAAGsW,EAAcrW,EAAGqW,EAAchW,MAAOgW,EAAc/V,QACvFqX,IAAI/gB,EAAOghB,aACpBT,EAAmBO,cAAgBlB,KAW1C7f,EAAMwI,YAAcgY,GACL,aAAhB5I,EAAMe,OACN6H,EAAmB9gB,KAAKO,EAAO0f,aAAa/H,EAAOe,KAGvD6H,IACAA,EAAmB7H,GAASf,EAAMnI,SAAW,OAAS,UACtD+Q,EAAmBte,QAAQ0V,MAAQA,EACnC4I,EAAmBE,SAAS9I,EAAMkD,gBAAgB,IAI1D,IAAIoG,EAAcnB,EAAaQ,KAC3BY,EAAiBvJ,EAAMyB,SAAWmH,EAClCY,EAAoBD,GAAiBA,EAAcE,YAAc,UACjEH,GACAA,EAAYI,MACZH,GACqB,WAArBC,IACCxJ,EAAM2J,WACFhB,IACDtgB,EAAOsgB,KAAOA,EAAOvgB,EAAMS,SAASe,OAE/Bwf,IAAIG,EAAcK,cAE3BjB,EAAKkB,OAAOhC,EAAO,UAAY,QAAQ,CACnCpgB,EAAGuY,EAAM8J,SAASR,EAAYI,QAElCf,EAAK7gB,KAAK,CACN,MAAS,oCACLlC,EAAKoa,EAAMoD,WAAY/a,EAAO+a,aAC7BpD,EAAMlN,UAAY,IAAMkN,EAAMlN,UAAY,IAC/C,WAAc0W,EACd,QAAW,IAEfb,EAAK3I,MAAQA,EACR5X,EAAMwI,YACP+X,EAAK7gB,KAAKkX,EAAO,CACb,KAAQgB,EAAM/W,OAASZ,EAAOY,MAC9B,eAAgBqgB,EAAYpV,SAC7BoH,EAAAA,EAAII,qBAAqB4N,EAAY3N,YAAc,CAAC,MAGtDgN,GAAQA,EAAK3I,OAAS2I,EAAK3I,MAAM8J,UAEtCnB,EAAKjiB,QAAQ,CAAEe,EAAGkhB,EAAK3I,MAAM8J,SAAS,IAAM,KAG5CnB,EAAKO,MAETjK,EAAUe,EAAO,gBAAiB,CAAEe,MAAOA,GA3H3C,CA4HJ,EAaA1B,EAAM5V,UAAUqgB,SAAW,SAAUJ,GACjC,IAAIngB,EAAMD,KAAKC,MACf,OAAOA,EAAMD,KAAKjB,OAAOD,MAAMS,SAAS0G,QAAQwa,OAAO1iB,KAAKsF,MAAMpD,EAAI,IAAMmgB,EAAMngB,EAAI,GAAKmgB,EAAa,EAAPA,EAAiB,EAAPA,GAAY,EAC3H,EACOrK,CACX,CArlC2B,E,uCCbvB2K,E,2CATA3a,EAAiB4G,EAAAA,EAAE5G,eAGnB4a,EAAc5kB,EAAAA,EAAE4kB,YAAavkB,EAAQL,EAAAA,EAAEK,OAO3C,SAAWskB,GAqBP,SAASE,EAAmBC,EAAYC,GACpC,IAAIC,EAAqBhb,EAAeqD,aAAe,CAAC,EAAG+P,EAAgB2H,EAAY/a,eAAgBib,EAAcF,EAAY3gB,UACjI6gB,EAAY3Z,KAAOwZ,EACdG,EAAYC,aACbD,EAAYC,WAAalL,EAAAA,GAEzBoD,IACA4H,EAAmBF,GAAc1H,GAErCuH,EAAe7P,YAAYgQ,GAAcC,CAC7C,CArBAJ,EAAe7P,YAAc9Q,EAAAA,EAAE8Q,YAsB/B6P,EAAeE,mBAAqBA,EA0CpCF,EAAeG,WAdf,SAAoBxZ,EAAMmM,EAAQpU,EAAS4hB,EAAaE,GACpD,IAAIH,EAAqBhb,EAAeqD,aAAe,CAAC,EAWxD,OAVAoK,EAASA,GAAU,GAEnBuN,EAAmB1Z,GAAQjL,EAAM2kB,EAAmBvN,GAASpU,GAE7DwhB,EAAmBvZ,EAAMsZ,EAAYD,EAAe7P,YAAY2C,IAAW,WAAc,EAAGwN,IAC5FN,EAAe7P,YAAYxJ,GAAMlH,UAAUkH,KAAOA,EAE9C6Z,IACAR,EAAe7P,YAAYxJ,GAAMlH,UAAU8gB,WAAaN,EAAY5K,EAAAA,EAAOmL,IAExER,EAAe7P,YAAYxJ,EACtC,CAEH,CA3ED,CA2EGqZ,IAAmBA,EAAiB,CAAC,IAMxC,S,6DC5FI5gB,EAAMC,EAAAA,EAAED,IAERhE,EAAUC,EAAAA,EAAED,QAASoV,EAAQnV,EAAAA,EAAEmV,MAAOwE,EAAS3Z,EAAAA,EAAE2Z,OAAQvZ,EAAWJ,EAAAA,EAAEI,SAAUC,EAAQL,EAAAA,EAAEK,MAAOC,EAAaN,EAAAA,EAAEM,WAAY8kB,EAAMplB,EAAAA,EAAEolB,IAAK7kB,EAAOP,EAAAA,EAAEO,KAAM+U,EAAQtV,EAAAA,EAAEsV,MAAO+P,EAAYrlB,EAAAA,EAAEqlB,UAMvLC,EAAkBthB,EAAAA,EAAE6P,UACpB9P,EAAIwhB,MACJxhB,EAAIwhB,KAAKC,eAAephB,UAAUqhB,YAElCC,EAAkB1hB,EAAAA,EAAE6P,UACpB9P,EAAIwhB,OACHxhB,EAAIwhB,KAAKC,eAAephB,UAAUqhB,YAyoBvC,QAzlB0B,WAMtB,SAAShV,EAAKpN,GAMVY,KAAKZ,QAAU,CAAC,EAChBY,KAAKiH,QAAS,EACdjH,KAAK0hB,kBAAmB,EACxB1hB,KAAK4B,KAAO9B,EAAI8B,KAahB5B,KAAK8G,kBAAoB9G,KAAK2hB,yBAC9B3hB,KAAKc,OAAO1B,EAChB,CAojBA,OA1hBAoN,EAAKrM,UAAU4E,IAAM,SAAUpH,EAAMikB,GACjC,GAAI5hB,KAAK0hB,kBAAoB1hB,KAAKgH,eAAgB,CAC9C,IAAI6a,EAASD,EAAKE,UACdC,EAAKF,EAAS7hB,KAAK8G,kBAAkB8a,GACzCA,EAAKI,QAAQD,GACb,IAAIhgB,EAAM6f,EAAK,SAAWjkB,KAE1B,OADAikB,EAAKI,QAAQH,GACN9f,CACX,CAEA,OAAI/B,KAAKiH,OACE2a,EAAK,SAAWjkB,KAGpBikB,EAAK,MAAQjkB,IACxB,EAiBA6O,EAAKrM,UAAU8hB,IAAM,SAAUtkB,EAAMikB,EAAM1M,GAEvC,GAAIlV,KAAK0hB,kBAAoB1hB,KAAKgH,eAAgB,CAG9C,GAAa,iBAATrJ,GACS,YAATA,GACU,YAATA,GACGqC,KAAK8G,kBAAkB8a,GAAQ,MAAY,EAE/C,OAAOA,EAAK,SAAWjkB,GAAMuX,GAKjC,IAAIgN,EAASliB,KAAK8G,kBAAkB8a,GAChCG,EAAKH,EAAKE,UAAYI,EAC1BN,EAAKI,QAAQD,GACbH,EAAK,SAAWjkB,GAAMuX,GACtB,IAAIiN,EAAYniB,KAAK8G,kBAAkB8a,GAEvC,OADAG,EAAKH,EAAKE,UAAYK,EACfP,EAAKI,QAAQD,EACxB,CAEA,OAAI/hB,KAAKiH,QAEJoa,GAA4B,aAAT1jB,EACbikB,EAAK,SAAWjkB,GAAMuX,GAG1B0M,EAAK,MAAQjkB,GAAMuX,EAC9B,EAYA1I,EAAKrM,UAAUW,OAAS,SAAU1B,QACd,IAAZA,IAAsBA,EAAU,CAAC,GACrC,IAAI6H,EAAS3K,EAAK8C,EAAQ6H,QAAQ,GAClCjH,KAAKZ,QAAUA,EAAUhD,GAAM,EAAM4D,KAAKZ,QAASA,GAEnDY,KAAK4B,KAAOxC,EAAQwC,MAAQ9B,EAAI8B,MAAQA,KACxC5B,KAAKiH,OAASA,EACdjH,KAAKgH,eAAkBC,GAAU7H,EAAQ4H,qBAAmB,EAC5DhH,KAAK8G,kBAAoB9G,KAAK2hB,yBAK9B3hB,KAAK0hB,iBAAmBza,MAAa7H,EAAQ0H,oBACzC1H,EAAQ2H,SAChB,EA6BAyF,EAAKrM,UAAUiiB,SAAW,SAAU7W,EAAMD,EAAOsW,EAAMS,EAAOC,EAASC,GACnE,IAAIpkB,EAAG+jB,EAAQC,EAqBf,OApBIniB,KAAKiH,QACL9I,EAAI6B,KAAK4B,KAAK4gB,IAAI/e,MAAM,EAAG7F,WAE3BO,GADA+jB,EAASliB,KAAK8G,kBAAkB3I,GAG5B+jB,KADJC,EAAYniB,KAAK8G,kBAAkB3I,IAE/BA,GAAKgkB,EAAYD,EAMZA,EAAS,OAASliB,KAAK8G,kBAAkB3I,EAAI,OACjDsjB,IACDtjB,GAAK,OAITA,EAAI,IAAI6B,KAAK4B,KAAK2J,EAAMD,EAAOhP,EAAKslB,EAAM,GAAItlB,EAAK+lB,EAAO,GAAI/lB,EAAKgmB,EAAS,GAAIhmB,EAAKimB,EAAS,IAAIT,UAE/F3jB,CACX,EAcAqO,EAAKrM,UAAUwhB,uBAAyB,WACpC,IAAI9a,EAAO7G,KAAMZ,EAAUY,KAAKZ,QAAS0H,EAAoB1H,EAAQ0H,kBAAmB2b,EAASrjB,EAAQqjB,QAAU3iB,EAAI2iB,OACvH,IAAKziB,KAAKiH,OACN,OAAO,SAAU8G,GACb,OAA4D,IAArD,IAAInM,KAAKmM,EAAUb,YAAYpG,mBAC1C,EAEJ,GAAI1H,EAAQ2H,SAAU,CAClB,GAAK0b,EAMD,OAAO,SAAU1U,GACb,OAA6D,KAArD0U,EAAOC,GAAG3U,EAAW3O,EAAQ2H,UAAU4b,WACnD,EALAzR,EAAM,GAOd,CAEA,OAAIlR,KAAKiH,QAAUH,EACR,SAAUiH,GACb,OAAgD,IAAzCjH,EAAkBiH,EAAU6U,UACvC,EAGG,WACH,OAAoC,KAA5B/b,EAAKG,gBAAkB,EACnC,CACJ,EAgDAwF,EAAKrM,UAAU2N,WAAa,SAAU9I,EAAQ+I,EAAWC,GACrD,IAAKlS,EAAQiS,IAAc8U,MAAM9U,GAC7B,OAAQhO,EAAAA,EAAEgG,eAAeG,MACrBnG,EAAAA,EAAEgG,eAAeG,KAAK4c,aACtB,GAER9d,EAAS1I,EAAK0I,EAAQ,qBACtB,IAAI6B,EAAO7G,KAAM4hB,EAAO,IAAI5hB,KAAK4B,KAAKmM,GAEtCsU,EAAQriB,KAAK+E,IAAI,QAAS6c,GAAOxW,EAAMpL,KAAK+E,IAAI,MAAO6c,GAAOmB,EAAa/iB,KAAK+E,IAAI,OAAQ6c,GAAOtW,EAAQtL,KAAK+E,IAAI,QAAS6c,GAAOoB,EAAWhjB,KAAK+E,IAAI,WAAY6c,GAAO1b,EAAOnG,EAAAA,EAAEgG,eAAeG,KAAM+c,EAAgB/c,GAAQA,EAAKI,SAAW4c,EAAiBhd,GAAQA,EAAKgd,cAG/QC,EAAezN,EAAO,CAGlB0N,EAAGF,EACCA,EAAc9X,GACd6X,EAAa7X,GAAKzG,OAAO,EAAG,GAEhC2Q,EAAG2N,EAAa7X,GAEhBjN,EAAGgjB,EAAI4B,GAEPhR,EAAGoP,EAAI4B,EAAY,EAAG,KAEtBM,EAAGjY,EAKHkY,EAAGpd,EAAKG,YAAYiF,GAEpBiY,EAAGrd,EAAKE,OAAOkF,GAEfkY,EAAGrC,EAAI7V,EAAQ,GAEfmY,EAAGnY,EAAQ,EAGXnD,EAAG6a,EAAS9V,WAAWvI,OAAO,EAAG,GAEjC+e,EAAGV,EAGHjjB,EAAGohB,EAAIkB,GAEPsB,EAAGtB,EAEHuB,EAAGzC,EAAKkB,EAAQ,IAAO,IAEvBwB,EAAIxB,EAAQ,IAAO,GAEnByB,EAAG3C,EAAInhB,KAAK+E,IAAI,UAAW6c,IAE3BxD,EAAGiE,EAAQ,GAAK,KAAO,KAEvB0B,EAAG1B,EAAQ,GAAK,KAAO,KAEvB2B,EAAG7C,EAAIS,EAAKqC,cAEZC,EAAG/C,EAAIpjB,KAAKsF,MAAM0K,EAAY,KAAO,IACtChO,EAAAA,EAAE6Q,aASL,OAPAvU,EAAW8mB,GAAc,SAAUjlB,EAAKoU,GAEpC,MAAsC,IAA/BtN,EAAO2J,QAAQ,IAAM2D,IACxBtN,EAASA,EAAOrG,QAAQ,IAAM2T,EAAoB,mBAARpU,EAAqBA,EAAIgD,KAAK2F,EAAMkH,GAAa7P,EAEnG,IAEO8P,EACFhJ,EAAOL,OAAO,EAAG,GAAGwO,cACjBnO,EAAOL,OAAO,GAClBK,CACR,EAUAwH,EAAKrM,UAAUgkB,iBAAmB,SAAUC,GACxC,OAAKjoB,EAASioB,GAAG,GAQVA,EANI,CACHC,MAFJD,EAAI/S,EAAM+S,IAEE,GACRjjB,KAAMijB,EAAE,GACRhjB,GAAIgjB,EAAE,GAIlB,EAsBA5X,EAAKrM,UAAUmkB,aAAe,SAAUC,EAAoBjlB,EAAKD,EAAKmlB,GAClE,IAGI1nB,EAAG2nB,EACPC,EAAmBC,EAJf9d,EAAO7G,KAAM4B,EAAOiF,EAAKjF,KAAMgjB,EAAgB,GAAIC,EAAc,CAAC,EAEtEC,EAAU,IAAIljB,EAAKtC,GAAMylB,EAAWR,EAAmBS,UAAWC,EAAQV,EAAmBU,OAAS,EAItG,GADAT,EAAcloB,EAAKkoB,EAAa,GAC5B1oB,EAAQwD,GAAM,CACduH,EAAKob,IAAI,eAAgB6C,EAASC,GAAY3D,EAAUnW,OACpD,EACAga,EAAQlnB,KAAKsF,MAAMwD,EAAK9B,IAAI,eAAgB+f,GAAWG,IACvDF,GAAY3D,EAAUnW,QACtBpE,EAAKob,IAAI,UAAW6C,EAASC,GAAY3D,EAAUlW,OAC/C,EACA+Z,EAAQlnB,KAAKsF,MAAMwD,EAAK9B,IAAI,UAAW+f,GAAWG,IAEtDF,GAAY3D,EAAUlW,QACtBrE,EAAKob,IAAI,UAAW6C,EAASC,GAAY3D,EAAUjW,KAC/C,EACA8Z,EAAQlnB,KAAKsF,MAAMwD,EAAK9B,IAAI,UAAW+f,GAAWG,IAEtDF,GAAY3D,EAAUjW,MACtBtE,EAAKob,IAAI,QAAS6C,EAASC,GAAY3D,EAAUhW,IAC7C,EACA6Z,EAAQlnB,KAAKsF,MAAMwD,EAAK9B,IAAI,QAAS+f,GAAWG,IAEpDF,GAAY3D,EAAUhW,KACtBvE,EAAKob,IAAI,OAAQ6C,EAASC,GAAY3D,EAAU9V,MAC5C,EACAvN,KAAKsB,IAAI,EAAG4lB,EAAQlnB,KAAKsF,MAAMwD,EAAK9B,IAAI,OAAQ+f,GAAWG,KAE/DF,GAAY3D,EAAU9V,QACtBzE,EAAKob,IAAI,QAAS6C,EAASC,GAAY3D,EAAU7V,KAAO,EACpD0Z,EAAQlnB,KAAKsF,MAAMwD,EAAK9B,IAAI,QAAS+f,GAAWG,IACpDR,EAAU5d,EAAK9B,IAAI,WAAY+f,IAE/BC,GAAY3D,EAAU7V,OACtBkZ,GAAWA,EAAUQ,EACrBpe,EAAKob,IAAI,WAAY6C,EAASL,IAG9BM,IAAa3D,EAAU/V,OAEvBsZ,EAAS9d,EAAK9B,IAAI,MAAO+f,GACzBje,EAAKob,IAAI,OAAQ6C,EAAUje,EAAK9B,IAAI,OAAQ+f,GACxCH,EAASH,GAGRG,EAASH,GAAe,EAAI,KAGrCC,EAAU5d,EAAK9B,IAAI,WAAY+f,GAC/B,IAAII,EAAWre,EAAK9B,IAAI,QAAS+f,GAAUK,EAActe,EAAK9B,IAAI,OAAQ+f,GAAUM,EAAWve,EAAK9B,IAAI,QAAS+f,GAEjHxlB,EAAMwlB,EAAQhD,WAETjb,EAAK6a,kBAAqB7a,EAAKI,SAAWnL,EAAQuD,KAMnDqlB,EAEArlB,EAAMC,EAAM,EAAI8hB,EAAU9V,OAGtBzE,EAAKC,kBAAkBxH,KACnBuH,EAAKC,kBAAkBzH,IAGnC,IAAI4C,EAAI6iB,EAAQhD,UAEhB,IADAhlB,EAAI,EACGmF,EAAI5C,GACPulB,EAAc/jB,KAAKoB,GAEf8iB,IAAa3D,EAAU7V,KACvBtJ,EAAI4E,EAAKub,SAASqC,EAAU3nB,EAAImoB,EAAO,GAGlCF,IAAa3D,EAAU9V,MAC5BrJ,EAAI4E,EAAKub,SAASqC,EAASS,EAAWpoB,EAAImoB,IAIrCP,GACJK,IAAa3D,EAAUhW,KAAO2Z,IAAa3D,EAAU/V,KAIjDqZ,GACLK,IAAa3D,EAAUjW,MACvB8Z,EAAQ,EAGRhjB,EAAI4E,EAAKub,SAASqC,EAASS,EAAUC,EAAaC,EAAWtoB,EAAImoB,GAIjEhjB,GAAK8iB,EAAWE,EAZhBhjB,EAAI4E,EAAKub,SAASqC,EAASS,EAAUC,EACjCroB,EAAImoB,GAASF,IAAa3D,EAAUhW,IAAM,EAAI,IAatDtO,IAGJ8nB,EAAc/jB,KAAKoB,GAIf8iB,GAAY3D,EAAUjW,MAAQyZ,EAAc3nB,OAAS,KACrD2nB,EAAc1lB,SAAQ,SAAU+C,GAI5BA,EAAI,MAAY,GAEuB,cAAnC4E,EAAKiH,WAAW,WAAY7L,KAC5B4iB,EAAY5iB,GAAK,MAEzB,GAER,CAMA,OAJA2iB,EAAcS,KAAO3P,EAAO6O,EAAoB,CAC5CM,YAAaA,EACbS,WAAYP,EAAWE,IAEpBL,CACX,EAuBApY,EAAKrM,UAAUolB,cAAgB,SAAUC,EAAOzX,EAAWyW,EAAazZ,GACpE,IAAI0a,EAAUzlB,KAAK8N,WAAW,oBAAqBC,GAAY2X,EAAQ,qBAAsBC,EAAS,CAClG3a,YAAa,GACbC,OAAQ,GACRC,OAAQ,EACRC,KAAM,EACNC,IAAK,GAELwa,EAAI,cAERC,EAAQD,EACR,IAAKA,KAAKxE,EAAW,CAGjB,GAAIoE,IAAUpE,EAAU/V,OACnBrL,KAAK8N,WAAW,KAAMC,KAAeyW,GACtCiB,EAAQ9gB,OAAO,KAAO+gB,EAAM/gB,OAAO,GAAI,CACvCihB,EAAI,OACJ,KACJ,CAEA,GAAIxE,EAAUwE,GAAKJ,EAAO,CACtBI,EAAIC,EACJ,KACJ,CAGA,GAAIF,EAAOC,IACPH,EAAQ9gB,OAAOghB,EAAOC,MAAQF,EAAM/gB,OAAOghB,EAAOC,IAClD,MAIM,SAANA,IACAC,EAAQD,EAEhB,CACA,OAAO5lB,KAAKmkB,iBAAiBpZ,EAAqB6a,IAAIvB,IAC1D,EACO7X,CACX,CAnlB0B,E,kDC9DtBmE,EAAS5Q,EAAAA,EAAE4Q,OAAQzB,EAAMnP,EAAAA,EAAEmP,IAAKpP,EAAMC,EAAAA,EAAED,IAoC5C,SAASoR,EAAM4U,EAAMnpB,EAAMmC,EAAOzB,GAC9B,IAAI0oB,EAAWppB,EAAO,mBAAqB,qBAC9B,KAATmpB,IACAA,EAAO,GAAG5gB,OAAO6gB,EAAU,wBAE/B,IAAIC,EAAS9pB,EAAS4pB,GAClBG,EAAUD,EACV,GAAG9gB,OAAO6gB,EAAU,MAAM7gB,OAAO4gB,EAAM,gCAAgC5gB,OAAO4gB,EAAM,KACpFA,EAAK5Y,WAYT,QAAsB,IAAX7P,EAAwB,CAC/B,IAAI6oB,EAAuB,GACvBF,IACAC,GAAW,KAEf5pB,EAAWgB,GAAQ,SAAU6X,EAAO5C,GAChC4T,GAAwB,QAAQhhB,OAAOoN,EAAK,MAAMpN,OAAOgQ,GACrD8Q,IACAC,GAAWE,UAAU7T,GAAO,IAAM6T,UAAUjR,GAEpD,IACA+Q,GAAWC,CACf,CACAvQ,EAAU5V,EAAAA,EAAG,eAAgB,CAAEjB,MAAOA,EAAOgnB,KAAMA,EAAMG,QAASA,EAAS5oB,OAAQA,IAxB9D,WACjB,GAAIV,EACA,MAAM,IAAIypB,MAAMH,GAGhBnmB,EAAIumB,UACiC,IAArCnV,EAAMoV,SAAS3X,QAAQsX,IAEvBI,QAAQE,KAAKN,EAErB,IAeA/U,EAAMoV,SAASzlB,KAAKolB,EACxB,CA4IA,SAAStiB,EAAK1E,EAAGunB,GACb,OAAO9hB,SAASzF,EAAGunB,GAAO,GAC9B,CAYA,SAASpV,EAASnS,GACd,MAAoB,iBAANA,CAClB,CAYA,SAAShD,EAAQwqB,GACb,IAAIxY,EAAMpM,OAAO1B,UAAU+M,SAAShM,KAAKulB,GACzC,MAAe,mBAARxY,GAAoC,4BAARA,CACvC,CAeA,SAAS9R,EAASsqB,EAAKC,GACnB,SAAUD,GACS,iBAARA,GACLC,GAAWzqB,EAAQwqB,GAC7B,CAYA,SAASE,EAAaF,GAClB,OAAOtqB,EAASsqB,IAAgC,iBAAjBA,EAAIG,QACvC,CAYA,SAASC,EAAQJ,GACb,IAAIK,EAAIL,GAAOA,EAAIM,YACnB,SAAU5qB,EAASsqB,GAAK,IACnBE,EAAaF,KACbK,IAAKA,EAAEnd,MAAmB,WAAXmd,EAAEnd,KAC1B,CAaA,SAASzN,EAAS0pB,GACd,MAAoB,iBAANA,IAAmB/C,MAAM+C,IAAMA,EAAIoB,KAAYpB,GAAI,GACrE,CAkCA,SAAS9pB,EAAQ2qB,GACb,OAAO,MAAOA,CAClB,CAwBA,SAASjoB,EAAKtB,EAAM+pB,EAAc/R,GAC9B,IACInT,EADAmlB,EAAW9V,EAAS6V,KAAkBnrB,EAAQoZ,GAE9CiS,EAAa,SAAUjS,EAAO5C,GAE1BxW,EAAQoZ,GACRhY,EAAKkqB,aAAa9U,EAAK4C,GAGlBgS,GACLnlB,EAAM7E,EAAKmqB,aAAa/U,KAEJ,UAARA,IACRvQ,EAAM7E,EAAKmqB,aAAa/U,EAAM,SAKlCpV,EAAKoqB,gBAAgBhV,EAE7B,EASA,OAPIlB,EAAS6V,GACTE,EAAWjS,EAAO+R,GAIlB5qB,EAAW4qB,EAAcE,GAEtBplB,CACX,CAuEA,SAAS2T,EAAO0N,EAAGE,GAEf,IAAIsC,EAIJ,IAAKA,KAHAxC,IACDA,EAAI,CAAC,GAECE,EACNF,EAAEwC,GAAKtC,EAAEsC,GAEb,OAAOxC,CACX,CAaA,SAAS9mB,IAGL,IAFA,IAAIoB,EAAOE,UACPX,EAASS,EAAKT,OACTH,EAAI,EAAGA,EAAIG,EAAQH,IAAK,CAC7B,IAAIyqB,EAAM7pB,EAAKZ,GACf,GAAI,MAAOyqB,EACP,OAAOA,CAEf,CACJ,CAcA,SAAStW,EAAIrU,EAAIkW,GACT/S,EAAAA,EAAE2P,OAAS3P,EAAAA,EAAE+F,KACTgN,GAAUhX,EAAQgX,EAAOlI,WACzBkI,EAAO0U,OAAS,iBAAiBtiB,OAAwB,IAAjB4N,EAAOlI,QAAe,MAGtE8K,EAAO9Y,EAAGqE,MAAO6R,EACrB,CAoJA,SAAS2U,EAAaC,GAClB,OAAO3pB,KAAKwP,IAAI,GAAIxP,KAAKsF,MAAMtF,KAAK4pB,IAAID,GAAO3pB,KAAK6pB,MACxD,CAuMA,SAASC,EAAaH,EAAKI,GAEvB,OAAOJ,EAAM,KAAOA,EAAMjpB,WAAWipB,EAAIK,YAAYD,GAAQ,IACjE,EAjyBA,SAAW5W,GACPA,EAAMoV,SAAW,EACpB,CAFD,CAEGpV,IAAUA,EAAQ,CAAC,IA2zBtBnT,KAAKC,cAAgB,SAAUiC,GAC3B,OAAQ,IAAOlC,KAAKiqB,IAAIjqB,KAAKgS,GAAK9P,GAAO,EAC7C,EA2IA,IAyaIgoB,EAzaAC,EAAOC,MAAMhoB,UAAU+nB,KACvB,SAAUtlB,EAAKwlB,GACX,OAAOxlB,EAAIslB,KAAKE,EACpB,EAEA,SAAUxlB,EAAKwlB,GACX,IAAItrB,EACAG,EAAS2F,EAAI3F,OACjB,IAAKH,EAAI,EAAGA,EAAIG,EAAQH,IACpB,GAAIsrB,EAASxlB,EAAI9F,GAAIA,GACjB,OAAO8F,EAAI9F,EAGvB,EA4DJ,SAAST,EAAWoqB,EAAK4B,EAAIna,GAEzB,IAAK,IAAIoE,KAAOmU,EACR5kB,OAAOymB,eAAepnB,KAAKulB,EAAKnU,IAChC+V,EAAGnnB,KAAKgN,GAAOuY,EAAInU,GAAMmU,EAAInU,GAAMA,EAAKmU,EAGpD,CA+LA,SAAS5Q,EAAYjZ,EAAIyK,EAAMghB,GAK3B,SAASE,EAAelhB,EAAMghB,GAC1B,IAAI3X,EAAuB9T,EAAG8T,qBAAuB3Q,EAAAA,EAAEyoB,4BACnD9X,GACAA,EAAoBxP,KAAKtE,EAAIyK,EAAMghB,GAAI,EAE/C,CAIA,SAASI,EAAgBC,GACrB,IAAIC,EAAOnkB,EACN5H,EAAGiY,WAGJxN,GACAshB,EAAQ,CAAC,GACHthB,IAAQ,EAGdshB,EAAQD,EAEZrsB,EAAWssB,GAAO,SAAUC,EAAMhD,GAC9B,GAAI8C,EAAgB9C,GAEhB,IADAphB,EAAMkkB,EAAgB9C,GAAG3oB,OAClBuH,KACH+jB,EAAe3C,EAAG8C,EAAgB9C,GAAGphB,GAAK6jB,GAGtD,IACJ,CACA,IAAIQ,EAAsB,mBAAPjsB,GAAqBA,EAAGuD,WAAavD,EACxD,GAAIiF,OAAOymB,eAAepnB,KAAK2nB,EAAO,YAAa,CAC/C,IAAIzP,EAASyP,EAAMC,SACnB,GAAIzhB,EAAM,CACN,IAAI0hB,EAAc3P,EAAO/R,IAAS,GAC9BghB,GACAjP,EAAO/R,GAAQ0hB,EAAWvB,QAAO,SAAUf,GACvC,OAAO4B,IAAO5B,EAAI4B,EACtB,IACAE,EAAelhB,EAAMghB,KAGrBI,EAAgBrP,GAChBA,EAAO/R,GAAQ,GAEvB,MAEIohB,EAAgBrP,UACTyP,EAAMC,QAErB,CACJ,CAwBA,SAASnT,EAAU/Y,EAAIyK,EAAM2hB,EAAgB9P,GAEzC,IAAInH,EAEJ,GADAiX,EAAiBA,GAAkB,CAAC,EAChC9Z,EAAI+Z,cACHrsB,EAAGssB,eACCtsB,EAAG+Y,WAEA/Y,IAAOmD,EAAAA,IACfgS,EAAI7C,EAAI+Z,YAAY,WAClBE,UAAU9hB,GAAM,GAAM,GACxB2hB,EAAiBtT,EAAO3D,EAAGiX,GACvBpsB,EAAGssB,cACHtsB,EAAGssB,cAAcF,GAGjBpsB,EAAG+Y,UAAUtO,EAAM2hB,QAGtB,GAAIpsB,EAAGksB,SAAU,CACbE,EAAeI,QAEhB1T,EAAOsT,EAAgB,CAInBK,eAAgB,WACZL,EAAeM,kBAAmB,CACtC,EAGAF,OAAQxsB,EAIRyK,KAAMA,IAQd,IALA,IAAI+R,EAAS,GACTyC,EAASjf,EACT2sB,GAAa,EAGV1N,EAAOiN,UACNjnB,OAAOymB,eAAepnB,KAAK2a,EAAQ,aACnCA,EAAOiN,SAASzhB,KACZ+R,EAAOnc,SACPssB,GAAa,GAEjBnQ,EAAOpW,QAAQS,MAAM2V,EAAQyC,EAAOiN,SAASzhB,KAEjDwU,EAASha,OAAO2nB,eAAe3N,GAK/B0N,GAEAnQ,EAAOqQ,MAAK,SAAUrG,EAAGE,GAAK,OAAOF,EAAEsG,MAAQpG,EAAEoG,KAAO,IAG5DtQ,EAAOla,SAAQ,SAAUunB,IAGmB,IAApCA,EAAI4B,GAAGnnB,KAAKtE,EAAIosB,IAChBA,EAAeK,gBAEvB,GACJ,CAEInQ,IAAoB8P,EAAeM,kBACnCpQ,EAAgBhY,KAAKtE,EAAIosB,EAEjC,CA7PA3sB,EAAW,CACP+H,IAAK,MACLulB,KAAM,UACNC,KAAM,SACN/W,OAAQ,SACRH,KAAM,SACP,SAAUxU,EAAKoU,GACdvS,EAAAA,EAAEuS,GAAO,SAAU1P,GACf,IAAIinB,EAEJ,OADA3Y,EAAM,IAAI,OAAO,IAAS2Y,EAAK,CAAC,GAAM,cAAc3kB,OAAOoN,IAAQ,aAAapN,OAAOhH,GAAM2rB,IACtF1B,MAAMhoB,UAAUjC,GAAKuF,MAAMb,EAAK,GAAGJ,MAAMtB,KAAKtD,UAAW,GACpE,CACJ,IAgQA,IACQksB,EACA5T,EAFJJ,GACIgU,EAAO/rB,KAAKgsB,SAAS7c,SAAS,IAAI8c,UAAU,EAAG,GAAK,IACpD9T,EAAK,EACF,WACH,MAAO,eAAiB+R,EAAa,GAAK6B,GAAQ5T,GACtD,GAiCApW,EAAImqB,SAmCJnqB,EAAImqB,OAAO5B,GAAG6B,WAAa,WACvB,IAAIxsB,EAAO,GAAG8E,MAAMtB,KAAKtD,WACzB,GAAIoC,KAAK,GAEL,OAAItC,EAAK,IACL,IAAIqC,EAAAA,EAEJqR,EAAS1T,EAAK,IAAMA,EAAKyE,QAAU,UAASnC,KAAK,GAAItC,EAAK,GAAIA,EAAK,IAC5DsC,MAIJ2Q,EAAOnS,EAAKwB,KAAK,GAAI,yBAEpC,GAQJ,IAAImqB,EAAY,CACZ3U,SAzUJ,SAAkB5Y,EAAIyK,EAAMghB,EAAIjpB,QAEZ,IAAZA,IAAsBA,EAAU,CAAC,GAKrC,IAAIypB,EAAsB,mBAAPjsB,GAAqBA,EAAGuD,WAAavD,EACnDiF,OAAOymB,eAAepnB,KAAK2nB,EAAO,cACnCA,EAAMC,SAAW,CAAC,GAEtB,IAAI1P,EAASyP,EAAMC,SAGf/oB,EAAAA,EAAEgW,OACFnZ,aAAcmD,EAAAA,EAAEgW,OAChBnZ,EAAGmC,QACHnC,EAAGmC,OAAOD,QACVlC,EAAGmC,OAAOD,MAAMsrB,iBAAkB,GAKtC,IAAI3Z,EAAoB7T,EAAG6T,kBAAoB1Q,EAAAA,EAAEsqB,yBAC7C5Z,GACAA,EAAiBvP,KAAKtE,EAAIyK,EAAMghB,IAAItoB,EAAAA,EAAEsQ,uBAAwB,CAC1Dia,aAA6B,IAApBlrB,EAAQkrB,SACc,IAA3BjjB,EAAKsH,QAAQ,SAAkBvP,EAAQkrB,QAC3CC,SAAS,IAGZnR,EAAO/R,KACR+R,EAAO/R,GAAQ,IAEnB,IAAImjB,EAAc,CACdnC,GAAIA,EACJqB,MAAgC,iBAAlBtqB,EAAQsqB,MAAqBtqB,EAAQsqB,MAAQ1C,KAM/D,OAJA5N,EAAO/R,GAAMxG,KAAK2pB,GAElBpR,EAAO/R,GAAMoiB,MAAK,SAAUrG,EAAGE,GAAK,OAAOF,EAAEsG,MAAQpG,EAAEoG,KAAO,IAEvD,WACH7T,EAAYjZ,EAAIyK,EAAMghB,EAC1B,CACJ,EA6RIoC,SAhwBJ,SAAkB1N,GAEd,IADA,IAAIjgB,EAAIigB,EAAK9f,OAAQoC,EAAM0d,EAAK,GACzBjgB,KACCigB,EAAKjgB,GAAKuC,IACVA,EAAM0d,EAAKjgB,IAGnB,OAAOuC,CACX,EAyvBIqrB,SAvxBJ,SAAkB3N,GAEd,IADA,IAAIjgB,EAAIigB,EAAK9f,OAAQqC,EAAMyd,EAAK,GACzBjgB,KACCigB,EAAKjgB,GAAKwC,IACVA,EAAMyd,EAAKjgB,IAGnB,OAAOwC,CACX,EAgxBId,KAAMA,EACNmsB,MAz4CJ,SAAezV,EAAO5V,EAAKD,GACvB,OAAO6V,EAAQ5V,EAAM4V,EAAQ7V,EAAM6V,EAAQ7V,EAAMC,CACrD,EAw4CIsrB,iBAj4CJ,SAASA,EAAiBC,EAAOC,GAC7B,IAAI7mB,EAAS,CAAC,EAoBd,OAnBA5H,EAAWwuB,GAAO,SAAUjC,EAAMtW,GAC9B,IAAIyY,EAEA5uB,EAAS0uB,EAAMvY,IAAM,KACpBuY,EAAMjE,UACPkE,EAAMxY,IACNyY,EAAKH,EAAiBC,EAAMvY,GAAMwY,EAAMxY,IACpCzQ,OAAOC,KAAKipB,GAAI9tB,SAChBgH,EAAOqO,GAAOyY,KAIb5uB,EAAS0uB,EAAMvY,KACpBuY,EAAMvY,KAASwY,EAAMxY,IAEpBA,KAAOuY,KAAWvY,KAAOwY,MAC1B7mB,EAAOqO,GAAOuY,EAAMvY,GAE5B,IACOrO,CACX,EA42CI+mB,aA/mCJ,SAA8B9U,GACtBpa,EAAQoa,IACR8U,aAAa9U,EAErB,EA4mCI2R,aAAcA,EACd7W,cAhhCJ,SAAuBia,EAAKC,EAASpY,EAAQU,EAAQ2X,GACjD,IAAIvuB,EAAKsS,EAAI8B,cAAcia,GAa3B,OAZIC,GACAxV,EAAO9Y,EAAIsuB,GAEXC,GACAla,EAAIrU,EAAI,CAAE+O,QAAS,IAAKyf,OAAQ,OAAQriB,OAAQ,MAEhD+J,GACA7B,EAAIrU,EAAIkW,GAERU,GACAA,EAAOe,YAAY3X,GAEhBA,CACX,EAkgCIqU,IAAKA,EACLnV,QAASA,EACTuvB,wBApvBJ,SAAiC5E,EAAK6E,GAClCjvB,EAAWoqB,GAAK,SAAUvoB,EAAK0nB,GAEvB1nB,GAAOA,IAAQotB,GAAUptB,EAAI6Z,SAE7B7Z,EAAI6Z,iBAGD0O,EAAIb,EACf,GACJ,EA2uBI2F,eAluBJ,SAAwBvqB,GAChBA,GAAWA,EAAQwqB,eACnBxqB,EAAQwqB,cAAcC,YAAYzqB,EAE1C,EA+tBIyU,MArvCJ,SAAe7S,EAAKgR,GAEhB,IADA,IAAI9W,EAAI8F,EAAI3F,OACLH,KACH,GAAI8F,EAAI9F,KAAO8W,EAAM,CACjBhR,EAAIlB,OAAO5E,EAAG,GACd,KACJ,CAER,EA8uCIoU,MAAOA,EACPwE,OAAQA,EACRiL,YAx/BJ,SAAqBnN,EAAQkY,GACzB,IAAIjF,EAAO,WAAc,EAGzB,OADA/Q,EADA+Q,EAAItmB,UAAY,IAAIqT,EACEkY,GACfjF,CACX,EAo/BIyB,KAAMA,EACNvS,UAAWA,EACX8R,aAAcA,EACd7a,kBAtqBJ,SAA2BtM,EAAMkT,GAE7B,IADA,IAAImY,EAAerrB,EAAK6M,MAAM,KACvBwe,EAAa1uB,QAAUnB,EAAQ0X,IAAS,CAC3C,IAAIoY,EAAcD,EAAaxpB,QAE/B,QAA2B,IAAhBypB,GACS,cAAhBA,EACA,OAEJ,IAAIC,EAAQrY,EAAOoY,GAEnB,IAAK9vB,EAAQ+vB,IACQ,mBAAVA,GACmB,iBAAnBA,EAAMjF,UACbiF,IAAU/rB,EACV,OAGJ0T,EAASqY,CACb,CACA,OAAOrY,CACX,EAkpBIxX,SA9nBJ,SAASA,EAASY,EAAIC,EAAMivB,GACxB,IAEI7qB,EAFA8qB,EAAkBhsB,EAAAA,EAAE/D,UACpBA,EAGJ,GAAa,UAATa,EAAkB,CAClB,IAAImvB,EAAcjuB,KAAKuB,IAAI1C,EAAGovB,YAAapvB,EAAGqvB,aAG1CC,EAA0BtvB,EAAGuvB,uBAC7BvvB,EAAGuvB,wBAAwB3jB,MAQ/B,OAJI0jB,EAA0BF,GAC1BE,GAA2BF,EAAc,IACzCA,EAAcjuB,KAAKsF,MAAM6oB,IAEtBnuB,KAAKsB,IAAI,EACf2sB,GACID,EAAenvB,EAAI,gBAAgB,IAAS,IAC5CmvB,EAAenvB,EAAI,iBAAiB,IAAS,GACtD,CACA,GAAa,WAATC,EACA,OAAOkB,KAAKsB,IAAI,EACftB,KAAKuB,IAAI1C,EAAGwvB,aAAcxvB,EAAGyvB,eACzBN,EAAenvB,EAAI,eAAe,IAAS,IAC3CmvB,EAAenvB,EAAI,kBAAkB,IAAS,IAElDkD,EAAIwsB,kBAELpb,EAAM,IAAI,GAGd,IAAID,EAAMnR,EAAIwsB,iBAAiB1vB,OAAI,GAOnC,OANIqU,IACAhQ,EAAQgQ,EAAIsb,iBAAiB1vB,GACzBP,EAAKwvB,EAAgB,YAATjvB,KACZoE,EAAQ0C,EAAK1C,KAGdA,CACX,EAqlBIurB,QAjkBJ,SAAiB5Y,EAAMhR,EAAK6pB,GAExB,OADAvb,EAAM,IAAI,OAAO,EAAQ,CAAE,qBAAsB,sBAC1CtO,EAAI+L,QAAQiF,EAAM6Y,EAC7B,EA+jBIxwB,QAASA,EACT4qB,QAASA,EACTF,aAAcA,EACdxV,WAxFJ,SAAoBsV,GAChB,MAAsB,mBAARA,CAClB,EAuFIvqB,SAAUA,EACVC,SAAUA,EACViV,SAAUA,EACVtP,KA3hBJ,SAAc2kB,GAEV,OADAvV,EAAM,IAAI,OAAO,EAAQ,CAAE,kBAAmB,oBACvCrP,OAAOC,KAAK2kB,EACvB,EAyhBIrqB,MAp9CJ,WAEI,IAAIU,EAAGY,EAAOE,UAAWmE,EAAM,CAAC,EAC5B2qB,EAAS,SAAUC,EAAMC,GAqBzB,MAnBoB,iBAATD,IACPA,EAAO,CAAC,GAEZtwB,EAAWuwB,GAAU,SAAU1X,EAAO5C,GAEtB,cAARA,GAA+B,gBAARA,KAIvBnW,EAAS+Y,GAAO,IACf2R,EAAQ3R,IACRyR,EAAazR,GAKdyX,EAAKra,GAAOsa,EAASta,GAJrBqa,EAAKra,GAAOoa,EAAOC,EAAKra,IAAQ,CAAC,EAAG4C,GAM5C,IACOyX,CACX,GAGgB,IAAZjvB,EAAK,KACLqE,EAAMrE,EAAK,GACXA,EAAOyqB,MAAMhoB,UAAUqC,MAAMtB,KAAKxD,EAAM,IAG5C,IAAI8G,EAAM9G,EAAKT,OACf,IAAKH,EAAI,EAAGA,EAAI0H,EAAK1H,IACjBiF,EAAM2qB,EAAO3qB,EAAKrE,EAAKZ,IAE3B,OAAOiF,CACX,EA+6CI8qB,sBA54BJ,SAA+B9H,EAAU+H,EAAWC,EAAWC,EAAeC,GAC1E,IAAInwB,EAAGowB,EAAcnI,EAGjBoI,EAAapI,GADjBgI,EAAYzwB,EAAKywB,EAAWtF,EAAa1C,KAuBzC,IApBK+H,IACDA,EAAYG,EAGR,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,IAErC,CAAC,EAAG,EAAG,IAAK,EAAG,KAEG,IAAlBD,IACkB,IAAdD,EACAD,EAAYA,EAAUtF,QAAO,SAAUE,GACnC,OAAOA,EAAM,GAAM,CACvB,IAEKqF,GAAa,KAClBD,EAAY,CAAC,EAAIC,MAKxBjwB,EAAI,EAAGA,EAAIgwB,EAAU7vB,SACtBiwB,EAAcJ,EAAUhwB,KAEnBmwB,GACDC,EAAcH,GAAahI,IACzBkI,GACGE,IACIL,EAAUhwB,IACNgwB,EAAUhwB,EAAI,IAAMgwB,EAAUhwB,KAAO,IARxBA,KAelC,OADc+qB,EAAaqF,EAAcH,GAAYhvB,KAAK2H,MAAM3H,KAAK4pB,IAAI,MAAS5pB,KAAK6pB,MAE3F,EAm2BIvrB,WAAYA,EACZ6lB,OA/gBJ,SAAgBtlB,GACZ,IAAIwwB,EAAUle,EAAIme,gBAAiBC,EAAO1wB,EAAG4uB,eAAiB5uB,EAAG2wB,WAC7D3wB,EAAGuvB,wBACH,CAAExhB,IAAK,EAAG6iB,KAAM,EAAGhlB,MAAO,EAAGC,OAAQ,GACzC,MAAO,CACHkC,IAAK2iB,EAAI3iB,KAAO7K,EAAI2tB,aAAeL,EAAQM,YACtCN,EAAQO,WAAa,GAC1BH,KAAMF,EAAIE,MAAQ1tB,EAAI8tB,aAAeR,EAAQS,aACxCT,EAAQU,YAAc,GAC3BtlB,MAAO8kB,EAAI9kB,MACXC,OAAQ6kB,EAAI7kB,OAEpB,EAogBI0Y,IAp/BJ,SAAarU,EAAQ7P,EAAQ8wB,GACzB,OAAO,IAAI5F,OAAOlrB,GAAU,GACxB,EACA2Q,OAAOd,GACFnO,QAAQ,IAAK,IACb1B,QAAQkI,KAAK4oB,GAAU,KAAOjhB,CAC3C,EA++BIxQ,KAAMA,EACNqH,KAAMA,EACNqqB,eA99BJ,SAAwB9Y,EAAO+Y,EAAM/L,GACjC,MAAQ,KAAMtT,KAAKsG,GACd+Y,EAAOxvB,WAAWyW,GAAS,KAAQgN,GAAU,GAC9CzjB,WAAWyW,EACnB,EA29BIW,YAAaA,EACbxE,MAxrCJ,SAAeoV,GACX,OAAOxqB,EAAQwqB,GAAOA,EAAM,CAACA,EACjC,EAurCIyH,WA91BJ,SAAoBtrB,EAAKurB,GAIrB,IACIC,EAAWtxB,EADXG,EAAS2F,EAAI3F,OAGjB,IAAKH,EAAI,EAAGA,EAAIG,EAAQH,IACpB8F,EAAI9F,GAAGuxB,MAAQvxB,EAOnB,IALA8F,EAAI6mB,MAAK,SAAUrG,EAAGE,GAElB,OAAqB,KADrB8K,EAAYD,EAAa/K,EAAGE,IACHF,EAAEiL,MAAQ/K,EAAE+K,MAAQD,CACjD,IAEKtxB,EAAI,EAAGA,EAAIG,EAAQH,WACb8F,EAAI9F,GAAGuxB,KAEtB,EA60BIzY,YApqCJ,SAAqByS,EAAIiG,EAAOC,GAC5B,OAAID,EAAQ,EACD7sB,WAAW4mB,EAAIiG,EAAOC,IAEjClG,EAAGnnB,KAAK,EAAGqtB,IACH,EACZ,EA+pCInN,UAruBY,CACZpW,YAAa,EACbC,OAAQ,IACRC,OAAQ,IACRC,KAAM,KACNC,IAAK,MACLC,KAAM,OACNC,MAAO,QACPC,KAAM,UA8tBNuK,UAAWA,EACX0Y,aA9GJ,SAAsBC,GAClB,OAAQxG,EAAa3rB,EAAKmyB,EAAMxG,EACpC,EA6GIyG,KAh9BJ,SAAcjI,EAAKkI,EAAQC,GACvB,IAAIC,EAAUpI,EAAIkI,GAClBlI,EAAIkI,GAAU,WACV,IAAIG,EAAYlxB,UAAWmxB,EAAQ/uB,KACnC,OAAO4uB,EAAKnrB,MAAMzD,KAAM,CACpB,WACI,OAAO6uB,EAAQprB,MAAMsrB,EAAOnxB,UAAUX,OAASW,UAAYkxB,EAC/D,GACF5pB,OAAO,GAAG1C,MAAMtB,KAAKtD,YAC3B,CACJ,GAw8BA,S","sources":["../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Core/Animation/AnimationUtilities.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Core/Animation/Fx.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Core/Color/Color.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Core/Defaults.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Core/Color/Palettes.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Core/Chart/ChartDefaults.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Core/FormatUtilities.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Core/Globals.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Core/Renderer/HTML/AST.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Core/Series/Point.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Core/Series/SeriesRegistry.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Core/Time.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Core/Utilities.js"],"sourcesContent":["/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nimport Fx from './Fx.js';\nimport U from '../Utilities.js';\nvar defined = U.defined, getStyle = U.getStyle, isArray = U.isArray, isNumber = U.isNumber, isObject = U.isObject, merge = U.merge, objectEach = U.objectEach, pick = U.pick;\n/* *\n *\n * Functions\n *\n * */\n/**\n * Set the global animation to either a given value, or fall back to the given\n * chart's animation option.\n *\n * @function Highcharts.setAnimation\n *\n * @param {boolean|Partial|undefined} animation\n * The animation object.\n *\n * @param {Highcharts.Chart} chart\n * The chart instance.\n *\n * @todo\n * This function always relates to a chart, and sets a property on the renderer,\n * so it should be moved to the SVGRenderer.\n */\nfunction setAnimation(animation, chart) {\n chart.renderer.globalAnimation = pick(animation, chart.options.chart.animation, true);\n}\n/**\n * Get the animation in object form, where a disabled animation is always\n * returned as `{ duration: 0 }`.\n *\n * @function Highcharts.animObject\n *\n * @param {boolean|Highcharts.AnimationOptionsObject} [animation=0]\n * An animation setting. Can be an object with duration, complete and\n * easing properties, or a boolean to enable or disable.\n *\n * @return {Highcharts.AnimationOptionsObject}\n * An object with at least a duration property.\n */\nfunction animObject(animation) {\n return isObject(animation) ?\n merge({ duration: 500, defer: 0 }, animation) :\n { duration: animation ? 500 : 0, defer: 0 };\n}\n/**\n * Get the defer as a number value from series animation options.\n *\n * @function Highcharts.getDeferredAnimation\n *\n * @param {Highcharts.Chart} chart\n * The chart instance.\n *\n * @param {boolean|Highcharts.AnimationOptionsObject} animation\n * An animation setting. Can be an object with duration, complete and\n * easing properties, or a boolean to enable or disable.\n *\n * @param {Highcharts.Series} [series]\n * Series to defer animation.\n *\n * @return {number}\n * The numeric value.\n */\nfunction getDeferredAnimation(chart, animation, series) {\n var labelAnimation = animObject(animation), s = series ? [series] : chart.series;\n var defer = 0, duration = 0;\n s.forEach(function (series) {\n var seriesAnim = animObject(series.options.animation);\n defer = animation && defined(animation.defer) ?\n labelAnimation.defer :\n Math.max(defer, seriesAnim.duration + seriesAnim.defer);\n duration = Math.min(labelAnimation.duration, seriesAnim.duration);\n });\n // Disable defer for exporting\n if (chart.renderer.forExport) {\n defer = 0;\n }\n var anim = {\n defer: Math.max(0, defer - duration),\n duration: Math.min(defer, duration)\n };\n return anim;\n}\n/**\n * The global animate method, which uses Fx to create individual animators.\n *\n * @function Highcharts.animate\n *\n * @param {Highcharts.HTMLDOMElement|Highcharts.SVGElement} el\n * The element to animate.\n *\n * @param {Highcharts.CSSObject|Highcharts.SVGAttributes} params\n * An object containing key-value pairs of the properties to animate.\n * Supports numeric as pixel-based CSS properties for HTML objects and\n * attributes for SVGElements.\n *\n * @param {Partial} [opt]\n * Animation options.\n *\n * @return {void}\n */\nfunction animate(el, params, opt) {\n var start, unit = '', end, fx, args;\n if (!isObject(opt)) { // Number or undefined/null\n args = arguments;\n opt = {\n duration: args[2],\n easing: args[3],\n complete: args[4]\n };\n }\n if (!isNumber(opt.duration)) {\n opt.duration = 400;\n }\n opt.easing = typeof opt.easing === 'function' ?\n opt.easing :\n (Math[opt.easing] || Math.easeInOutSine);\n opt.curAnim = merge(params);\n objectEach(params, function (val, prop) {\n // Stop current running animation of this property\n stop(el, prop);\n fx = new Fx(el, opt, prop);\n end = void 0;\n if (prop === 'd' && isArray(params.d)) {\n fx.paths = fx.initPath(el, el.pathArray, params.d);\n fx.toD = params.d;\n start = 0;\n end = 1;\n }\n else if (el.attr) {\n start = el.attr(prop);\n }\n else {\n start = parseFloat(getStyle(el, prop)) || 0;\n if (prop !== 'opacity') {\n unit = 'px';\n }\n }\n if (!end) {\n end = val;\n }\n if (typeof end === 'string' && end.match('px')) {\n end = end.replace(/px/g, ''); // #4351\n }\n fx.run(start, end, unit);\n });\n}\n/**\n * Stop running animation.\n *\n * @function Highcharts.stop\n *\n * @param {Highcharts.SVGElement} el\n * The SVGElement to stop animation on.\n *\n * @param {string} [prop]\n * The property to stop animating. If given, the stop method will stop a\n * single property from animating, while others continue.\n *\n * @return {void}\n *\n * @todo\n * A possible extension to this would be to stop a single property, when\n * we want to continue animating others. Then assign the prop to the timer\n * in the Fx.run method, and check for the prop here. This would be an\n * improvement in all cases where we stop the animation from .attr. Instead of\n * stopping everything, we can just stop the actual attributes we're setting.\n */\nfunction stop(el, prop) {\n var i = Fx.timers.length;\n // Remove timers related to this element (#4519)\n while (i--) {\n if (Fx.timers[i].elem === el && (!prop || prop === Fx.timers[i].prop)) {\n Fx.timers[i].stopped = true; // #4667\n }\n }\n}\nvar animationExports = {\n animate: animate,\n animObject: animObject,\n getDeferredAnimation: getDeferredAnimation,\n setAnimation: setAnimation,\n stop: stop\n};\n/* *\n *\n * Default Export\n *\n * */\nexport default animationExports;\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nimport Color from '../Color/Color.js';\nvar color = Color.parse;\nimport H from '../Globals.js';\nvar win = H.win;\nimport U from '../Utilities.js';\nvar isNumber = U.isNumber, objectEach = U.objectEach;\n/* eslint-disable no-invalid-this, valid-jsdoc */\n/* *\n *\n * Class\n *\n * */\n/**\n * An animator object used internally. One instance applies to one property\n * (attribute or style prop) on one element. Animation is always initiated\n * through {@link SVGElement#animate}.\n *\n * @example\n * let rect = renderer.rect(0, 0, 10, 10).add();\n * rect.animate({ width: 100 });\n *\n * @private\n * @class\n * @name Highcharts.Fx\n *\n * @param {Highcharts.HTMLDOMElement|Highcharts.SVGElement} elem\n * The element to animate.\n *\n * @param {Partial} options\n * Animation options.\n *\n * @param {string} prop\n * The single attribute or CSS property to animate.\n */\nvar Fx = /** @class */ (function () {\n /* *\n *\n * Constructors\n *\n * */\n function Fx(elem, options, prop) {\n this.pos = NaN;\n this.options = options;\n this.elem = elem;\n this.prop = prop;\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Set the current step of a path definition on SVGElement.\n *\n * @function Highcharts.Fx#dSetter\n *\n */\n Fx.prototype.dSetter = function () {\n var paths = this.paths, start = paths && paths[0], end = paths && paths[1], now = this.now || 0;\n var path = [];\n // Land on the final path without adjustment points appended in the ends\n if (now === 1 || !start || !end) {\n path = this.toD || [];\n }\n else if (start.length === end.length && now < 1) {\n for (var i = 0; i < end.length; i++) {\n // Tween between the start segment and the end segment. Start\n // with a copy of the end segment and tween the appropriate\n // numerics\n var startSeg = start[i];\n var endSeg = end[i];\n var tweenSeg = [];\n for (var j = 0; j < endSeg.length; j++) {\n var startItem = startSeg[j];\n var endItem = endSeg[j];\n // Tween numbers\n if (isNumber(startItem) &&\n isNumber(endItem) &&\n // Arc boolean flags\n !(endSeg[0] === 'A' && (j === 4 || j === 5))) {\n tweenSeg[j] = startItem + now * (endItem - startItem);\n // Strings, take directly from the end segment\n }\n else {\n tweenSeg[j] = endItem;\n }\n }\n path.push(tweenSeg);\n }\n // If animation is finished or length not matching, land on right value\n }\n else {\n path = end;\n }\n this.elem.attr('d', path, void 0, true);\n };\n /**\n * Update the element with the current animation step.\n *\n * @function Highcharts.Fx#update\n *\n */\n Fx.prototype.update = function () {\n var elem = this.elem, prop = this.prop, // if destroyed, it is null\n now = this.now, step = this.options.step;\n // Animation setter defined from outside\n if (this[prop + 'Setter']) {\n this[prop + 'Setter']();\n // Other animations on SVGElement\n }\n else if (elem.attr) {\n if (elem.element) {\n elem.attr(prop, now, null, true);\n }\n // HTML styles, raw HTML content like container size\n }\n else {\n elem.style[prop] = now + this.unit;\n }\n if (step) {\n step.call(elem, now, this);\n }\n };\n /**\n * Run an animation.\n *\n * @function Highcharts.Fx#run\n *\n * @param {number} from\n * The current value, value to start from.\n *\n * @param {number} to\n * The end value, value to land on.\n *\n * @param {string} unit\n * The property unit, for example `px`.\n *\n */\n Fx.prototype.run = function (from, to, unit) {\n var self = this, options = self.options, timer = function (gotoEnd) {\n return timer.stopped ? false : self.step(gotoEnd);\n }, requestAnimationFrame = win.requestAnimationFrame ||\n function (step) {\n setTimeout(step, 13);\n }, step = function () {\n for (var i = 0; i < Fx.timers.length; i++) {\n if (!Fx.timers[i]()) {\n Fx.timers.splice(i--, 1);\n }\n }\n if (Fx.timers.length) {\n requestAnimationFrame(step);\n }\n };\n if (from === to && !this.elem['forceAnimate:' + this.prop]) {\n delete options.curAnim[this.prop];\n if (options.complete &&\n Object.keys(options.curAnim).length === 0) {\n options.complete.call(this.elem);\n }\n }\n else { // #7166\n this.startTime = +new Date();\n this.start = from;\n this.end = to;\n this.unit = unit;\n this.now = this.start;\n this.pos = 0;\n timer.elem = this.elem;\n timer.prop = this.prop;\n if (timer() && Fx.timers.push(timer) === 1) {\n requestAnimationFrame(step);\n }\n }\n };\n /**\n * Run a single step in the animation.\n *\n * @function Highcharts.Fx#step\n *\n * @param {boolean} [gotoEnd]\n * Whether to go to the endpoint of the animation after abort.\n *\n * @return {boolean}\n * Returns `true` if animation continues.\n */\n Fx.prototype.step = function (gotoEnd) {\n var t = +new Date(), options = this.options, elem = this.elem, complete = options.complete, duration = options.duration, curAnim = options.curAnim;\n var ret, done;\n if ((elem.attr) && !elem.element) { // #2616, element is destroyed\n ret = false;\n }\n else if (gotoEnd || t >= duration + this.startTime) {\n this.now = this.end;\n this.pos = 1;\n this.update();\n curAnim[this.prop] = true;\n done = true;\n objectEach(curAnim, function (val) {\n if (val !== true) {\n done = false;\n }\n });\n if (done && complete) {\n complete.call(elem);\n }\n ret = false;\n }\n else {\n this.pos = options.easing((t - this.startTime) / duration);\n this.now = this.start + ((this.end -\n this.start) * this.pos);\n this.update();\n ret = true;\n }\n return ret;\n };\n /**\n * Prepare start and end values so that the path can be animated one to one.\n *\n * @function Highcharts.Fx#initPath\n *\n * @param {Highcharts.SVGElement} elem\n * The SVGElement item.\n *\n * @param {Highcharts.SVGPathArray|undefined} fromD\n * Starting path definition.\n *\n * @param {Highcharts.SVGPathArray} toD\n * Ending path definition.\n *\n * @return {Array}\n * An array containing start and end paths in array form so that\n * they can be animated in parallel.\n */\n Fx.prototype.initPath = function (elem, fromD, toD) {\n var startX = elem.startX, endX = elem.endX, end = toD.slice(), // copy\n isArea = elem.isArea, positionFactor = isArea ? 2 : 1;\n var shift, fullLength, i, reverse, start = fromD && fromD.slice(); // copy\n if (!start) {\n return [end, end];\n }\n /**\n * If shifting points, prepend a dummy point to the end path.\n * @private\n */\n function prepend(arr, other) {\n while (arr.length < fullLength) {\n // Move to, line to or curve to?\n var moveSegment = arr[0], otherSegment = other[fullLength - arr.length];\n if (otherSegment && moveSegment[0] === 'M') {\n if (otherSegment[0] === 'C') {\n arr[0] = [\n 'C',\n moveSegment[1],\n moveSegment[2],\n moveSegment[1],\n moveSegment[2],\n moveSegment[1],\n moveSegment[2]\n ];\n }\n else {\n arr[0] = ['L', moveSegment[1], moveSegment[2]];\n }\n }\n // Prepend a copy of the first point\n arr.unshift(moveSegment);\n // For areas, the bottom path goes back again to the left, so we\n // need to append a copy of the last point.\n if (isArea) {\n var z = arr.pop();\n arr.push(arr[arr.length - 1], z); // append point and the Z\n }\n }\n }\n /**\n * Copy and append last point until the length matches the end length.\n * @private\n */\n function append(arr, other) {\n while (arr.length < fullLength) {\n // Pull out the slice that is going to be appended or inserted.\n // In a line graph, the positionFactor is 1, and the last point\n // is sliced out. In an area graph, the positionFactor is 2,\n // causing the middle two points to be sliced out, since an area\n // path starts at left, follows the upper path then turns and\n // follows the bottom back.\n var segmentToAdd = arr[Math.floor(arr.length / positionFactor) - 1].slice();\n // Disable the first control point of curve segments\n if (segmentToAdd[0] === 'C') {\n segmentToAdd[1] = segmentToAdd[5];\n segmentToAdd[2] = segmentToAdd[6];\n }\n if (!isArea) {\n arr.push(segmentToAdd);\n }\n else {\n var lowerSegmentToAdd = arr[Math.floor(arr.length / positionFactor)].slice();\n arr.splice(arr.length / 2, 0, segmentToAdd, lowerSegmentToAdd);\n }\n }\n }\n // For sideways animation, find out how much we need to shift to get the\n // start path Xs to match the end path Xs.\n if (startX && endX && endX.length) {\n for (i = 0; i < startX.length; i++) {\n // Moving left, new points coming in on right\n if (startX[i] === endX[0]) {\n shift = i;\n break;\n // Moving right\n }\n else if (startX[0] ===\n endX[endX.length - startX.length + i]) {\n shift = i;\n reverse = true;\n break;\n // Fixed from the right side, \"scaling\" left\n }\n else if (startX[startX.length - 1] ===\n endX[endX.length - startX.length + i]) {\n shift = startX.length - i;\n break;\n }\n }\n if (typeof shift === 'undefined') {\n start = [];\n }\n }\n if (start.length && isNumber(shift)) {\n // The common target length for the start and end array, where both\n // arrays are padded in opposite ends\n fullLength = end.length + shift * positionFactor;\n if (!reverse) {\n prepend(end, start);\n append(start, end);\n }\n else {\n prepend(start, end);\n append(end, start);\n }\n }\n return [start, end];\n };\n /**\n * Handle animation of the color attributes directly.\n *\n * @function Highcharts.Fx#fillSetter\n *\n */\n Fx.prototype.fillSetter = function () {\n Fx.prototype.strokeSetter.apply(this, arguments);\n };\n /**\n * Handle animation of the color attributes directly.\n *\n * @function Highcharts.Fx#strokeSetter\n *\n */\n Fx.prototype.strokeSetter = function () {\n this.elem.attr(this.prop, color(this.start).tweenTo(color(this.end), this.pos), void 0, true);\n };\n /* *\n *\n * Static Properties\n *\n * */\n Fx.timers = [];\n return Fx;\n}());\n/* *\n *\n * Default Export\n *\n * */\nexport default Fx;\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nimport H from '../Globals.js';\nimport U from '../Utilities.js';\nvar isNumber = U.isNumber, merge = U.merge, pInt = U.pInt;\n/* *\n *\n * Class\n *\n * */\n/* eslint-disable valid-jsdoc */\n/**\n * Handle color operations. Some object methods are chainable.\n *\n * @class\n * @name Highcharts.Color\n *\n * @param {Highcharts.ColorType} input\n * The input color in either rbga or hex format\n */\nvar Color = /** @class */ (function () {\n /* *\n *\n * Constructor\n *\n * */\n function Color(input) {\n this.rgba = [NaN, NaN, NaN, NaN];\n this.input = input;\n var GlobalColor = H.Color;\n // Backwards compatibility, allow class overwrite\n if (GlobalColor && GlobalColor !== Color) {\n return new GlobalColor(input);\n }\n // Backwards compatibility, allow instanciation without new (#13053)\n if (!(this instanceof Color)) {\n return new Color(input);\n }\n this.init(input);\n }\n /* *\n *\n * Static Functions\n *\n * */\n /**\n * Creates a color instance out of a color string or object.\n *\n * @function Highcharts.Color.parse\n *\n * @param {Highcharts.ColorType} [input]\n * The input color in either rbga or hex format.\n *\n * @return {Highcharts.Color}\n * Color instance.\n */\n Color.parse = function (input) {\n return input ? new Color(input) : Color.None;\n };\n /* *\n *\n * Functions\n *\n * */\n /**\n * Parse the input color to rgba array\n *\n * @private\n * @function Highcharts.Color#init\n *\n * @param {Highcharts.ColorType} input\n * The input color in either rbga or hex format\n */\n Color.prototype.init = function (input) {\n var result, rgba, i, parser;\n // Gradients\n if (typeof input === 'object' &&\n typeof input.stops !== 'undefined') {\n this.stops = input.stops.map(function (stop) { return new Color(stop[1]); });\n // Solid colors\n }\n else if (typeof input === 'string') {\n this.input = input = (Color.names[input.toLowerCase()] || input);\n // Bitmasking as input[0] is not working for legacy IE.\n if (input.charAt(0) === '#') {\n var len = input.length, col = parseInt(input.substr(1), 16);\n // Handle long-form, e.g. #AABBCC\n if (len === 7) {\n rgba = [\n (col & 0xFF0000) >> 16,\n (col & 0xFF00) >> 8,\n (col & 0xFF),\n 1\n ];\n // Handle short-form, e.g. #ABC\n // In short form, the value is assumed to be the same\n // for both nibbles for each component. e.g. #ABC = #AABBCC\n }\n else if (len === 4) {\n rgba = [\n (((col & 0xF00) >> 4) |\n (col & 0xF00) >> 8),\n (((col & 0xF0) >> 4) |\n (col & 0xF0)),\n ((col & 0xF) << 4) | (col & 0xF),\n 1\n ];\n }\n }\n // Otherwise, check regex parsers\n if (!rgba) {\n i = Color.parsers.length;\n while (i-- && !rgba) {\n parser = Color.parsers[i];\n result = parser.regex.exec(input);\n if (result) {\n rgba = parser.parse(result);\n }\n }\n }\n }\n if (rgba) {\n this.rgba = rgba;\n }\n };\n /**\n * Return the color or gradient stops in the specified format\n *\n * @function Highcharts.Color#get\n *\n * @param {string} [format]\n * Possible values are 'a', 'rgb', 'rgba' (default).\n *\n * @return {Highcharts.ColorType}\n * This color as a string or gradient stops.\n */\n Color.prototype.get = function (format) {\n var input = this.input, rgba = this.rgba;\n if (typeof input === 'object' &&\n typeof this.stops !== 'undefined') {\n var ret_1 = merge(input);\n ret_1.stops = [].slice.call(ret_1.stops);\n this.stops.forEach(function (stop, i) {\n ret_1.stops[i] = [\n ret_1.stops[i][0],\n stop.get(format)\n ];\n });\n return ret_1;\n }\n // it's NaN if gradient colors on a column chart\n if (rgba && isNumber(rgba[0])) {\n if (format === 'rgb' || (!format && rgba[3] === 1)) {\n return 'rgb(' + rgba[0] + ',' + rgba[1] + ',' + rgba[2] + ')';\n }\n if (format === 'a') {\n return \"\".concat(rgba[3]);\n }\n return 'rgba(' + rgba.join(',') + ')';\n }\n return input;\n };\n /**\n * Brighten the color instance.\n *\n * @function Highcharts.Color#brighten\n *\n * @param {number} alpha\n * The alpha value.\n *\n * @return {Highcharts.Color}\n * This color with modifications.\n */\n Color.prototype.brighten = function (alpha) {\n var rgba = this.rgba;\n if (this.stops) {\n this.stops.forEach(function (stop) {\n stop.brighten(alpha);\n });\n }\n else if (isNumber(alpha) && alpha !== 0) {\n for (var i = 0; i < 3; i++) {\n rgba[i] += pInt(alpha * 255);\n if (rgba[i] < 0) {\n rgba[i] = 0;\n }\n if (rgba[i] > 255) {\n rgba[i] = 255;\n }\n }\n }\n return this;\n };\n /**\n * Set the color's opacity to a given alpha value.\n *\n * @function Highcharts.Color#setOpacity\n *\n * @param {number} alpha\n * Opacity between 0 and 1.\n *\n * @return {Highcharts.Color}\n * Color with modifications.\n */\n Color.prototype.setOpacity = function (alpha) {\n this.rgba[3] = alpha;\n return this;\n };\n /**\n * Return an intermediate color between two colors.\n *\n * @function Highcharts.Color#tweenTo\n *\n * @param {Highcharts.Color} to\n * The color object to tween to.\n *\n * @param {number} pos\n * The intermediate position, where 0 is the from color (current color\n * item), and 1 is the `to` color.\n *\n * @return {Highcharts.ColorType}\n * The intermediate color in rgba notation, or unsupported type.\n */\n Color.prototype.tweenTo = function (to, pos) {\n var fromRgba = this.rgba, toRgba = to.rgba;\n // Unsupported color, return to-color (#3920, #7034)\n if (!isNumber(fromRgba[0]) || !isNumber(toRgba[0])) {\n return to.input || 'none';\n }\n // Check for has alpha, because rgba colors perform worse due to\n // lack of support in WebKit.\n var hasAlpha = (toRgba[3] !== 1 || fromRgba[3] !== 1);\n return (hasAlpha ? 'rgba(' : 'rgb(') +\n Math.round(toRgba[0] + (fromRgba[0] - toRgba[0]) * (1 - pos)) +\n ',' +\n Math.round(toRgba[1] + (fromRgba[1] - toRgba[1]) * (1 - pos)) +\n ',' +\n Math.round(toRgba[2] + (fromRgba[2] - toRgba[2]) * (1 - pos)) +\n (hasAlpha ?\n (',' +\n (toRgba[3] + (fromRgba[3] - toRgba[3]) * (1 - pos))) :\n '') +\n ')';\n };\n /* *\n *\n * Static Properties\n *\n * */\n /**\n * Collection of named colors. Can be extended from the outside by adding\n * colors to Highcharts.Color.names.\n * @private\n */\n Color.names = {\n white: '#ffffff',\n black: '#000000'\n };\n /**\n * Collection of parsers. This can be extended from the outside by pushing\n * parsers to `Color.parsers`.\n */\n Color.parsers = [{\n // RGBA color\n // eslint-disable-next-line max-len\n regex: /rgba\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]?(?:\\.[0-9]+)?)\\s*\\)/,\n parse: function (result) {\n return [\n pInt(result[1]),\n pInt(result[2]),\n pInt(result[3]),\n parseFloat(result[4], 10)\n ];\n }\n }, {\n // RGB color\n regex: /rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/,\n parse: function (result) {\n return [pInt(result[1]), pInt(result[2]), pInt(result[3]), 1];\n }\n }];\n // Must be last static member for init cycle\n Color.None = new Color('');\n return Color;\n}());\n/* *\n *\n * Default Export\n *\n * */\nexport default Color;\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * A valid color to be parsed and handled by Highcharts. Highcharts internally\n * supports hex colors like `#ffffff`, rgb colors like `rgb(255,255,255)` and\n * rgba colors like `rgba(255,255,255,1)`. Other colors may be supported by the\n * browsers and displayed correctly, but Highcharts is not able to process them\n * and apply concepts like opacity and brightening.\n *\n * @typedef {string} Highcharts.ColorString\n */\n/**\n * A valid color type than can be parsed and handled by Highcharts. It can be a\n * color string, a gradient object, or a pattern object.\n *\n * @typedef {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject} Highcharts.ColorType\n */\n/**\n * Gradient options instead of a solid color.\n *\n * @example\n * // Linear gradient used as a color option\n * color: {\n * linearGradient: { x1: 0, x2: 0, y1: 0, y2: 1 },\n * stops: [\n * [0, '#003399'], // start\n * [0.5, '#ffffff'], // middle\n * [1, '#3366AA'] // end\n * ]\n * }\n *\n * @interface Highcharts.GradientColorObject\n */ /**\n* Holds an object that defines the start position and the end position relative\n* to the shape.\n* @name Highcharts.GradientColorObject#linearGradient\n* @type {Highcharts.LinearGradientColorObject|undefined}\n*/ /**\n* Holds an object that defines the center position and the radius.\n* @name Highcharts.GradientColorObject#radialGradient\n* @type {Highcharts.RadialGradientColorObject|undefined}\n*/ /**\n* The first item in each tuple is the position in the gradient, where 0 is the\n* start of the gradient and 1 is the end of the gradient. Multiple stops can be\n* applied. The second item is the color for each stop. This color can also be\n* given in the rgba format.\n* @name Highcharts.GradientColorObject#stops\n* @type {Array}\n*/\n/**\n * Color stop tuple.\n *\n * @see Highcharts.GradientColorObject\n *\n * @interface Highcharts.GradientColorStopObject\n */ /**\n* @name Highcharts.GradientColorStopObject#0\n* @type {number}\n*/ /**\n* @name Highcharts.GradientColorStopObject#1\n* @type {Highcharts.ColorString}\n*/ /**\n* @name Highcharts.GradientColorStopObject#color\n* @type {Highcharts.Color|undefined}\n*/\n/**\n * Defines the start position and the end position for a gradient relative\n * to the shape. Start position (x1, y1) and end position (x2, y2) are relative\n * to the shape, where 0 means top/left and 1 is bottom/right.\n *\n * @interface Highcharts.LinearGradientColorObject\n */ /**\n* Start horizontal position of the gradient. Float ranges 0-1.\n* @name Highcharts.LinearGradientColorObject#x1\n* @type {number}\n*/ /**\n* End horizontal position of the gradient. Float ranges 0-1.\n* @name Highcharts.LinearGradientColorObject#x2\n* @type {number}\n*/ /**\n* Start vertical position of the gradient. Float ranges 0-1.\n* @name Highcharts.LinearGradientColorObject#y1\n* @type {number}\n*/ /**\n* End vertical position of the gradient. Float ranges 0-1.\n* @name Highcharts.LinearGradientColorObject#y2\n* @type {number}\n*/\n/**\n * Defines the center position and the radius for a gradient.\n *\n * @interface Highcharts.RadialGradientColorObject\n */ /**\n* Center horizontal position relative to the shape. Float ranges 0-1.\n* @name Highcharts.RadialGradientColorObject#cx\n* @type {number}\n*/ /**\n* Center vertical position relative to the shape. Float ranges 0-1.\n* @name Highcharts.RadialGradientColorObject#cy\n* @type {number}\n*/ /**\n* Radius relative to the shape. Float ranges 0-1.\n* @name Highcharts.RadialGradientColorObject#r\n* @type {number}\n*/\n/**\n * Creates a color instance out of a color string.\n *\n * @function Highcharts.color\n *\n * @param {Highcharts.ColorType} input\n * The input color in either rbga or hex format\n *\n * @return {Highcharts.Color}\n * Color instance\n */\n(''); // detach doclets above\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nimport ChartDefaults from './Chart/ChartDefaults.js';\nimport Color from './Color/Color.js';\nvar color = Color.parse;\nimport H from './Globals.js';\nvar isTouchDevice = H.isTouchDevice, svg = H.svg;\nimport Palettes from './Color/Palettes.js';\nimport Time from './Time.js';\nimport U from './Utilities.js';\nvar merge = U.merge;\n/* *\n *\n * API Options\n *\n * */\n/**\n * Global default settings.\n *\n * @name Highcharts.defaultOptions\n * @type {Highcharts.Options}\n */ /**\n* @optionparent\n* @private\n*/\nvar defaultOptions = {\n /**\n * An array containing the default colors for the chart's series. When\n * all colors are used, new colors are pulled from the start again.\n *\n * Default colors can also be set on a series or series.type basis,\n * see [column.colors](#plotOptions.column.colors),\n * [pie.colors](#plotOptions.pie.colors).\n *\n * In styled mode, the colors option doesn't exist. Instead, colors\n * are defined in CSS and applied either through series or point class\n * names, or through the [chart.colorCount](#chart.colorCount) option.\n *\n *\n * ### Legacy\n *\n * In Highcharts 3.x, the default colors were:\n * ```js\n * colors: ['#2f7ed8', '#0d233a', '#8bbc21', '#910000', '#1aadce',\n * '#492970', '#f28f43', '#77a1e5', '#c42525', '#a6c96a']\n * ```\n *\n * In Highcharts 2.x, the default colors were:\n * ```js\n * colors: ['#4572A7', '#AA4643', '#89A54E', '#80699B', '#3D96AE',\n * '#DB843D', '#92A8CD', '#A47D7C', '#B5CA92']\n * ```\n *\n * @sample {highcharts} highcharts/chart/colors/\n * Assign a global color theme\n *\n * @type {Array<(Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject)>}\n * @default [\"#7cb5ec\", \"#434348\", \"#90ed7d\", \"#f7a35c\", \"#8085e9\",\n * \"#f15c80\", \"#e4d354\", \"#2b908f\", \"#f45b5b\", \"#91e8e1\"]\n */\n colors: Palettes.colors,\n /**\n * Styled mode only. Configuration object for adding SVG definitions for\n * reusable elements. See [gradients, shadows and\n * patterns](https://www.highcharts.com/docs/chart-design-and-style/gradients-shadows-and-patterns)\n * for more information and code examples.\n *\n * @type {*}\n * @since 5.0.0\n * @apioption defs\n */\n /**\n * @ignore-option\n */\n symbols: ['circle', 'diamond', 'square', 'triangle', 'triangle-down'],\n /**\n * The language object is global and it can't be set on each chart\n * initialization. Instead, use `Highcharts.setOptions` to set it before any\n * chart is initialized.\n *\n * ```js\n * Highcharts.setOptions({\n * lang: {\n * months: [\n * 'Janvier', 'Février', 'Mars', 'Avril',\n * 'Mai', 'Juin', 'Juillet', 'Août',\n * 'Septembre', 'Octobre', 'Novembre', 'Décembre'\n * ],\n * weekdays: [\n * 'Dimanche', 'Lundi', 'Mardi', 'Mercredi',\n * 'Jeudi', 'Vendredi', 'Samedi'\n * ]\n * }\n * });\n * ```\n */\n lang: {\n /**\n * The loading text that appears when the chart is set into the loading\n * state following a call to `chart.showLoading`.\n */\n loading: 'Loading...',\n /**\n * An array containing the months names. Corresponds to the `%B` format\n * in `Highcharts.dateFormat()`.\n *\n * @type {Array}\n * @default [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\",\n * \"July\", \"August\", \"September\", \"October\", \"November\",\n * \"December\"]\n */\n months: [\n 'January', 'February', 'March', 'April', 'May', 'June', 'July',\n 'August', 'September', 'October', 'November', 'December'\n ],\n /**\n * An array containing the months names in abbreviated form. Corresponds\n * to the `%b` format in `Highcharts.dateFormat()`.\n *\n * @type {Array}\n * @default [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",\n * \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n */\n shortMonths: [\n 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul',\n 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'\n ],\n /**\n * An array containing the weekday names.\n *\n * @type {Array}\n * @default [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\",\n * \"Friday\", \"Saturday\"]\n */\n weekdays: [\n 'Sunday', 'Monday', 'Tuesday', 'Wednesday',\n 'Thursday', 'Friday', 'Saturday'\n ],\n /**\n * Short week days, starting Sunday. If not specified, Highcharts uses\n * the first three letters of the `lang.weekdays` option.\n *\n * @sample highcharts/lang/shortweekdays/\n * Finnish two-letter abbreviations\n *\n * @type {Array}\n * @since 4.2.4\n * @apioption lang.shortWeekdays\n */\n /**\n * What to show in a date field for invalid dates. Defaults to an empty\n * string.\n *\n * @type {string}\n * @since 4.1.8\n * @product highcharts highstock\n * @apioption lang.invalidDate\n */\n /**\n * The title appearing on hovering the zoom in button. The text itself\n * defaults to \"+\" and can be changed in the button options.\n *\n * @type {string}\n * @default Zoom in\n * @product highmaps\n * @apioption lang.zoomIn\n */\n /**\n * The title appearing on hovering the zoom out button. The text itself\n * defaults to \"-\" and can be changed in the button options.\n *\n * @type {string}\n * @default Zoom out\n * @product highmaps\n * @apioption lang.zoomOut\n */\n /**\n * The default decimal point used in the `Highcharts.numberFormat`\n * method unless otherwise specified in the function arguments.\n *\n * @since 1.2.2\n */\n decimalPoint: '.',\n /**\n * [Metric prefixes](https://en.wikipedia.org/wiki/Metric_prefix) used\n * to shorten high numbers in axis labels. Replacing any of the\n * positions with `null` causes the full number to be written. Setting\n * `numericSymbols` to `null` disables shortening altogether.\n *\n * @sample {highcharts} highcharts/lang/numericsymbols/\n * Replacing the symbols with text\n * @sample {highstock} highcharts/lang/numericsymbols/\n * Replacing the symbols with text\n *\n * @type {Array}\n * @default [\"k\", \"M\", \"G\", \"T\", \"P\", \"E\"]\n * @since 2.3.0\n */\n numericSymbols: ['k', 'M', 'G', 'T', 'P', 'E'],\n /**\n * The magnitude of [numericSymbols](#lang.numericSymbol) replacements.\n * Use 10000 for Japanese, Korean and various Chinese locales, which\n * use symbols for 10^4, 10^8 and 10^12.\n *\n * @sample highcharts/lang/numericsymbolmagnitude/\n * 10000 magnitude for Japanese\n *\n * @type {number}\n * @default 1000\n * @since 5.0.3\n * @apioption lang.numericSymbolMagnitude\n */\n /**\n * The text for the label appearing when a chart is zoomed.\n *\n * @since 1.2.4\n */\n resetZoom: 'Reset zoom',\n /**\n * The tooltip title for the label appearing when a chart is zoomed.\n *\n * @since 1.2.4\n */\n resetZoomTitle: 'Reset zoom level 1:1',\n /**\n * The default thousands separator used in the `Highcharts.numberFormat`\n * method unless otherwise specified in the function arguments. Defaults\n * to a single space character, which is recommended in\n * [ISO 31-0](https://en.wikipedia.org/wiki/ISO_31-0#Numbers) and works\n * across Anglo-American and continental European languages.\n *\n * @default \\u0020\n * @since 1.2.2\n */\n thousandsSep: ' '\n },\n /**\n * Global options that don't apply to each chart. These options, like\n * the `lang` options, must be set using the `Highcharts.setOptions`\n * method.\n *\n * ```js\n * Highcharts.setOptions({\n * global: {\n * useUTC: false\n * }\n * });\n * ```\n */\n /**\n * _Canvg rendering for Android 2.x is removed as of Highcharts 5.0\\.\n * Use the [libURL](#exporting.libURL) option to configure exporting._\n *\n * The URL to the additional file to lazy load for Android 2.x devices.\n * These devices don't support SVG, so we download a helper file that\n * contains [canvg](https://github.com/canvg/canvg), its dependency\n * rbcolor, and our own CanVG Renderer class. To avoid hotlinking to\n * our site, you can install canvas-tools.js on your own server and\n * change this option accordingly.\n *\n * @deprecated\n *\n * @type {string}\n * @default https://code.highcharts.com/{version}/modules/canvas-tools.js\n * @product highcharts highmaps\n * @apioption global.canvasToolsURL\n */\n /**\n * This option is deprecated since v6.0.5. Instead, use\n * [time.useUTC](#time.useUTC) that supports individual time settings\n * per chart.\n *\n * @deprecated\n *\n * @type {boolean}\n * @apioption global.useUTC\n */\n /**\n * This option is deprecated since v6.0.5. Instead, use\n * [time.Date](#time.Date) that supports individual time settings\n * per chart.\n *\n * @deprecated\n *\n * @type {Function}\n * @product highcharts highstock\n * @apioption global.Date\n */\n /**\n * This option is deprecated since v6.0.5. Instead, use\n * [time.getTimezoneOffset](#time.getTimezoneOffset) that supports\n * individual time settings per chart.\n *\n * @deprecated\n *\n * @type {Function}\n * @product highcharts highstock\n * @apioption global.getTimezoneOffset\n */\n /**\n * This option is deprecated since v6.0.5. Instead, use\n * [time.timezone](#time.timezone) that supports individual time\n * settings per chart.\n *\n * @deprecated\n *\n * @type {string}\n * @product highcharts highstock\n * @apioption global.timezone\n */\n /**\n * This option is deprecated since v6.0.5. Instead, use\n * [time.timezoneOffset](#time.timezoneOffset) that supports individual\n * time settings per chart.\n *\n * @deprecated\n *\n * @type {number}\n * @product highcharts highstock\n * @apioption global.timezoneOffset\n */\n global: {},\n /**\n * Time options that can apply globally or to individual charts. These\n * settings affect how `datetime` axes are laid out, how tooltips are\n * formatted, how series\n * [pointIntervalUnit](#plotOptions.series.pointIntervalUnit) works and how\n * the Highcharts Stock range selector handles time.\n *\n * The common use case is that all charts in the same Highcharts object\n * share the same time settings, in which case the global settings are set\n * using `setOptions`.\n *\n * ```js\n * // Apply time settings globally\n * Highcharts.setOptions({\n * time: {\n * timezone: 'Europe/London'\n * }\n * });\n * // Apply time settings by instance\n * let chart = Highcharts.chart('container', {\n * time: {\n * timezone: 'America/New_York'\n * },\n * series: [{\n * data: [1, 4, 3, 5]\n * }]\n * });\n *\n * // Use the Time object\n * console.log(\n * 'Current time in New York',\n * chart.time.dateFormat('%Y-%m-%d %H:%M:%S', Date.now())\n * );\n * ```\n *\n * Since v6.0.5, the time options were moved from the `global` obect to the\n * `time` object, and time options can be set on each individual chart.\n *\n * @sample {highcharts|highstock}\n * highcharts/time/timezone/\n * Set the timezone globally\n * @sample {highcharts}\n * highcharts/time/individual/\n * Set the timezone per chart instance\n * @sample {highstock}\n * stock/time/individual/\n * Set the timezone per chart instance\n *\n * @since 6.0.5\n * @optionparent time\n */\n time: {\n /**\n * A custom `Date` class for advanced date handling. For example,\n * [JDate](https://github.com/tahajahangir/jdate) can be hooked in to\n * handle Jalali dates.\n *\n * @type {*}\n * @since 4.0.4\n * @product highcharts highstock gantt\n */\n Date: void 0,\n /**\n * A callback to return the time zone offset for a given datetime. It\n * takes the timestamp in terms of milliseconds since January 1 1970,\n * and returns the timezone offset in minutes. This provides a hook\n * for drawing time based charts in specific time zones using their\n * local DST crossover dates, with the help of external libraries.\n *\n * @see [global.timezoneOffset](#global.timezoneOffset)\n *\n * @sample {highcharts|highstock} highcharts/time/gettimezoneoffset/\n * Use moment.js to draw Oslo time regardless of browser locale\n *\n * @type {Highcharts.TimezoneOffsetCallbackFunction}\n * @since 4.1.0\n * @product highcharts highstock gantt\n */\n getTimezoneOffset: void 0,\n /**\n * Requires [moment.js](https://momentjs.com/). If the timezone option\n * is specified, it creates a default\n * [getTimezoneOffset](#time.getTimezoneOffset) function that looks\n * up the specified timezone in moment.js. If moment.js is not included,\n * this throws a Highcharts error in the console, but does not crash the\n * chart.\n *\n * @see [getTimezoneOffset](#time.getTimezoneOffset)\n *\n * @sample {highcharts|highstock} highcharts/time/timezone/\n * Europe/Oslo\n *\n * @type {string}\n * @since 5.0.7\n * @product highcharts highstock gantt\n */\n timezone: void 0,\n /**\n * The timezone offset in minutes. Positive values are west, negative\n * values are east of UTC, as in the ECMAScript\n * [getTimezoneOffset](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset)\n * method. Use this to display UTC based data in a predefined time zone.\n *\n * @see [time.getTimezoneOffset](#time.getTimezoneOffset)\n *\n * @sample {highcharts|highstock} highcharts/time/timezoneoffset/\n * Timezone offset\n *\n * @since 3.0.8\n * @product highcharts highstock gantt\n */\n timezoneOffset: 0,\n /**\n * Whether to use UTC time for axis scaling, tickmark placement and\n * time display in `Highcharts.dateFormat`. Advantages of using UTC\n * is that the time displays equally regardless of the user agent's\n * time zone settings. Local time can be used when the data is loaded\n * in real time or when correct Daylight Saving Time transitions are\n * required.\n *\n * @sample {highcharts} highcharts/time/useutc-true/\n * True by default\n * @sample {highcharts} highcharts/time/useutc-false/\n * False\n */\n useUTC: true\n },\n chart: ChartDefaults,\n /**\n * The chart's main title.\n *\n * @sample {highmaps} maps/title/title/\n * Title options demonstrated\n */\n title: {\n /**\n * When the title is floating, the plot area will not move to make space\n * for it.\n *\n * @sample {highcharts} highcharts/chart/zoomtype-none/\n * False by default\n * @sample {highcharts} highcharts/title/floating/\n * True - title on top of the plot area\n * @sample {highstock} stock/chart/title-floating/\n * True - title on top of the plot area\n *\n * @type {boolean}\n * @default false\n * @since 2.1\n * @apioption title.floating\n */\n /**\n * CSS styles for the title. Use this for font styling, but use `align`,\n * `x` and `y` for text alignment.\n *\n * In styled mode, the title style is given in the `.highcharts-title`\n * class.\n *\n * @sample {highcharts} highcharts/title/style/\n * Custom color and weight\n * @sample {highstock} stock/chart/title-style/\n * Custom color and weight\n * @sample highcharts/css/titles/\n * Styled mode\n *\n * @type {Highcharts.CSSObject}\n * @default {highcharts|highmaps} { \"color\": \"#333333\", \"fontSize\": \"18px\" }\n * @default {highstock} { \"color\": \"#333333\", \"fontSize\": \"16px\" }\n * @apioption title.style\n */\n /**\n * Whether to\n * [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html)\n * to render the text.\n *\n * @type {boolean}\n * @default false\n * @apioption title.useHTML\n */\n /**\n * The vertical alignment of the title. Can be one of `\"top\"`,\n * `\"middle\"` and `\"bottom\"`. When a value is given, the title behaves\n * as if [floating](#title.floating) were `true`.\n *\n * @sample {highcharts} highcharts/title/verticalalign/\n * Chart title in bottom right corner\n * @sample {highstock} stock/chart/title-verticalalign/\n * Chart title in bottom right corner\n *\n * @type {Highcharts.VerticalAlignValue}\n * @since 2.1\n * @apioption title.verticalAlign\n */\n /**\n * The x position of the title relative to the alignment within\n * `chart.spacingLeft` and `chart.spacingRight`.\n *\n * @sample {highcharts} highcharts/title/align/\n * Aligned to the plot area (x = 70px = margin left - spacing\n * left)\n * @sample {highstock} stock/chart/title-align/\n * Aligned to the plot area (x = 50px = margin left - spacing\n * left)\n *\n * @type {number}\n * @default 0\n * @since 2.0\n * @apioption title.x\n */\n /**\n * The y position of the title relative to the alignment within\n * [chart.spacingTop](#chart.spacingTop) and [chart.spacingBottom](\n * #chart.spacingBottom). By default it depends on the font size.\n *\n * @sample {highcharts} highcharts/title/y/\n * Title inside the plot area\n * @sample {highstock} stock/chart/title-verticalalign/\n * Chart title in bottom right corner\n *\n * @type {number}\n * @since 2.0\n * @apioption title.y\n */\n /**\n * The title of the chart. To disable the title, set the `text` to\n * `undefined`.\n *\n * @sample {highcharts} highcharts/title/text/\n * Custom title\n * @sample {highstock} stock/chart/title-text/\n * Custom title\n *\n * @default {highcharts|highmaps} Chart title\n * @default {highstock} undefined\n */\n text: 'Chart title',\n /**\n * The horizontal alignment of the title. Can be one of \"left\", \"center\"\n * and \"right\".\n *\n * @sample {highcharts} highcharts/title/align/\n * Aligned to the plot area (x = 70px = margin left - spacing\n * left)\n * @sample {highstock} stock/chart/title-align/\n * Aligned to the plot area (x = 50px = margin left - spacing\n * left)\n *\n * @type {Highcharts.AlignValue}\n * @since 2.0\n */\n align: 'center',\n /**\n * The margin between the title and the plot area, or if a subtitle\n * is present, the margin between the subtitle and the plot area.\n *\n * @sample {highcharts} highcharts/title/margin-50/\n * A chart title margin of 50\n * @sample {highcharts} highcharts/title/margin-subtitle/\n * The same margin applied with a subtitle\n * @sample {highstock} stock/chart/title-margin/\n * A chart title margin of 50\n *\n * @since 2.1\n */\n margin: 15,\n /**\n * Adjustment made to the title width, normally to reserve space for\n * the exporting burger menu.\n *\n * @sample highcharts/title/widthadjust/\n * Wider menu, greater padding\n *\n * @since 4.2.5\n */\n widthAdjust: -44\n },\n /**\n * The chart's subtitle. This can be used both to display a subtitle below\n * the main title, and to display random text anywhere in the chart. The\n * subtitle can be updated after chart initialization through the\n * `Chart.setTitle` method.\n *\n * @sample {highmaps} maps/title/subtitle/\n * Subtitle options demonstrated\n */\n subtitle: {\n /**\n * When the subtitle is floating, the plot area will not move to make\n * space for it.\n *\n * @sample {highcharts} highcharts/subtitle/floating/\n * Floating title and subtitle\n * @sample {highstock} stock/chart/subtitle-footnote\n * Footnote floating at bottom right of plot area\n *\n * @type {boolean}\n * @default false\n * @since 2.1\n * @apioption subtitle.floating\n */\n /**\n * CSS styles for the title.\n *\n * In styled mode, the subtitle style is given in the\n * `.highcharts-subtitle` class.\n *\n * @sample {highcharts} highcharts/subtitle/style/\n * Custom color and weight\n * @sample {highcharts} highcharts/css/titles/\n * Styled mode\n * @sample {highstock} stock/chart/subtitle-style\n * Custom color and weight\n * @sample {highstock} highcharts/css/titles/\n * Styled mode\n * @sample {highmaps} highcharts/css/titles/\n * Styled mode\n *\n * @type {Highcharts.CSSObject}\n * @default {\"color\": \"#666666\"}\n * @apioption subtitle.style\n */\n /**\n * Whether to\n * [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html)\n * to render the text.\n *\n * @type {boolean}\n * @default false\n * @apioption subtitle.useHTML\n */\n /**\n * The vertical alignment of the title. Can be one of `\"top\"`,\n * `\"middle\"` and `\"bottom\"`. When middle, the subtitle behaves as\n * floating.\n *\n * @sample {highcharts} highcharts/subtitle/verticalalign/\n * Footnote at the bottom right of plot area\n * @sample {highstock} stock/chart/subtitle-footnote\n * Footnote at the bottom right of plot area\n *\n * @type {Highcharts.VerticalAlignValue}\n * @since 2.1\n * @apioption subtitle.verticalAlign\n */\n /**\n * The x position of the subtitle relative to the alignment within\n * `chart.spacingLeft` and `chart.spacingRight`.\n *\n * @sample {highcharts} highcharts/subtitle/align/\n * Footnote at right of plot area\n * @sample {highstock} stock/chart/subtitle-footnote\n * Footnote at the bottom right of plot area\n *\n * @type {number}\n * @default 0\n * @since 2.0\n * @apioption subtitle.x\n */\n /**\n * The y position of the subtitle relative to the alignment within\n * `chart.spacingTop` and `chart.spacingBottom`. By default the subtitle\n * is laid out below the title unless the title is floating.\n *\n * @sample {highcharts} highcharts/subtitle/verticalalign/\n * Footnote at the bottom right of plot area\n * @sample {highstock} stock/chart/subtitle-footnote\n * Footnote at the bottom right of plot area\n *\n * @type {number}\n * @since 2.0\n * @apioption subtitle.y\n */\n /**\n * The subtitle of the chart.\n *\n * @sample {highcharts|highstock} highcharts/subtitle/text/\n * Custom subtitle\n * @sample {highcharts|highstock} highcharts/subtitle/text-formatted/\n * Formatted and linked text.\n */\n text: '',\n /**\n * The horizontal alignment of the subtitle. Can be one of \"left\",\n * \"center\" and \"right\".\n *\n * @sample {highcharts} highcharts/subtitle/align/\n * Footnote at right of plot area\n * @sample {highstock} stock/chart/subtitle-footnote\n * Footnote at bottom right of plot area\n *\n * @type {Highcharts.AlignValue}\n * @since 2.0\n */\n align: 'center',\n /**\n * Adjustment made to the subtitle width, normally to reserve space\n * for the exporting burger menu.\n *\n * @see [title.widthAdjust](#title.widthAdjust)\n *\n * @sample highcharts/title/widthadjust/\n * Wider menu, greater padding\n *\n * @since 4.2.5\n */\n widthAdjust: -44\n },\n /**\n * The chart's caption, which will render below the chart and will be part\n * of exported charts. The caption can be updated after chart initialization\n * through the `Chart.update` or `Chart.caption.update` methods.\n *\n * @sample highcharts/caption/text/\n * A chart with a caption\n * @since 7.2.0\n */\n caption: {\n /**\n * When the caption is floating, the plot area will not move to make\n * space for it.\n *\n * @type {boolean}\n * @default false\n * @apioption caption.floating\n */\n /**\n * The margin between the caption and the plot area.\n */\n margin: 15,\n /**\n * CSS styles for the caption.\n *\n * In styled mode, the caption style is given in the\n * `.highcharts-caption` class.\n *\n * @sample {highcharts} highcharts/css/titles/\n * Styled mode\n *\n * @type {Highcharts.CSSObject}\n * @default {\"color\": \"#666666\"}\n * @apioption caption.style\n */\n /**\n * Whether to\n * [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html)\n * to render the text.\n *\n * @type {boolean}\n * @default false\n * @apioption caption.useHTML\n */\n /**\n * The x position of the caption relative to the alignment within\n * `chart.spacingLeft` and `chart.spacingRight`.\n *\n * @type {number}\n * @default 0\n * @apioption caption.x\n */\n /**\n * The y position of the caption relative to the alignment within\n * `chart.spacingTop` and `chart.spacingBottom`.\n *\n * @type {number}\n * @apioption caption.y\n */\n /**\n * The caption text of the chart.\n *\n * @sample {highcharts} highcharts/caption/text/\n * Custom caption\n */\n text: '',\n /**\n * The horizontal alignment of the caption. Can be one of \"left\",\n * \"center\" and \"right\".\n *\n * @type {Highcharts.AlignValue}\n */\n align: 'left',\n /**\n * The vertical alignment of the caption. Can be one of `\"top\"`,\n * `\"middle\"` and `\"bottom\"`. When middle, the caption behaves as\n * floating.\n *\n * @type {Highcharts.VerticalAlignValue}\n */\n verticalAlign: 'bottom'\n },\n /**\n * The plotOptions is a wrapper object for config objects for each series\n * type. The config objects for each series can also be overridden for\n * each series item as given in the series array.\n *\n * Configuration options for the series are given in three levels. Options\n * for all series in a chart are given in the [plotOptions.series](\n * #plotOptions.series) object. Then options for all series of a specific\n * type are given in the plotOptions of that type, for example\n * `plotOptions.line`. Next, options for one single series are given in\n * [the series array](#series).\n */\n plotOptions: {},\n /**\n * HTML labels that can be positioned anywhere in the chart area.\n *\n * This option is deprecated since v7.1.2. Instead, use\n * [annotations](#annotations) that support labels.\n *\n * @deprecated\n * @product highcharts highstock\n */\n labels: {\n /**\n * An HTML label that can be positioned anywhere in the chart area.\n *\n * @deprecated\n * @type {Array<*>}\n * @apioption labels.items\n */\n /**\n * Inner HTML or text for the label.\n *\n * @deprecated\n * @type {string}\n * @apioption labels.items.html\n */\n /**\n * CSS styles for each label. To position the label, use left and top\n * like this:\n * ```js\n * style: {\n * left: '100px',\n * top: '100px'\n * }\n * ```\n *\n * @deprecated\n * @type {Highcharts.CSSObject}\n * @apioption labels.items.style\n */\n /**\n * Shared CSS styles for all labels.\n *\n * @deprecated\n * @type {Highcharts.CSSObject}\n * @default {\"color\": \"#333333\", \"position\": \"absolute\"}\n */\n style: {\n /**\n * @ignore-option\n */\n position: 'absolute',\n /**\n * @ignore-option\n */\n color: \"#333333\" /* Palette.neutralColor80 */\n }\n },\n /**\n * The legend is a box containing a symbol and name for each series\n * item or point item in the chart. Each series (or points in case\n * of pie charts) is represented by a symbol and its name in the legend.\n *\n * It is possible to override the symbol creator function and create\n * [custom legend symbols](https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/studies/legend-custom-symbol/).\n *\n * @productdesc {highmaps}\n * A Highmaps legend by default contains one legend item per series, but if\n * a `colorAxis` is defined, the axis will be displayed in the legend.\n * Either as a gradient, or as multiple legend items for `dataClasses`.\n */\n legend: {\n /**\n * The background color of the legend.\n *\n * @see In styled mode, the legend background fill can be applied with\n * the `.highcharts-legend-box` class.\n *\n * @sample {highcharts} highcharts/legend/backgroundcolor/\n * Yellowish background\n * @sample {highstock} stock/legend/align/\n * Various legend options\n * @sample {highmaps} maps/legend/border-background/\n * Border and background options\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @apioption legend.backgroundColor\n */\n /**\n * The width of the drawn border around the legend.\n *\n * @see In styled mode, the legend border stroke width can be applied\n * with the `.highcharts-legend-box` class.\n *\n * @sample {highcharts} highcharts/legend/borderwidth/\n * 2px border width\n * @sample {highstock} stock/legend/align/\n * Various legend options\n * @sample {highmaps} maps/legend/border-background/\n * Border and background options\n *\n * @type {number}\n * @default 0\n * @apioption legend.borderWidth\n */\n /**\n * Enable or disable the legend. There is also a series-specific option,\n * [showInLegend](#plotOptions.series.showInLegend), that can hide the\n * series from the legend. In some series types this is `false` by\n * default, so it must set to `true` in order to show the legend for the\n * series.\n *\n * @sample {highcharts} highcharts/legend/enabled-false/ Legend disabled\n * @sample {highstock} stock/legend/align/ Various legend options\n * @sample {highmaps} maps/legend/enabled-false/ Legend disabled\n *\n * @default {highstock} false\n * @default {highmaps} true\n * @default {gantt} false\n */\n enabled: true,\n /**\n * The horizontal alignment of the legend box within the chart area.\n * Valid values are `left`, `center` and `right`.\n *\n * In the case that the legend is aligned in a corner position, the\n * `layout` option will determine whether to place it above/below\n * or on the side of the plot area.\n *\n * @sample {highcharts} highcharts/legend/align/\n * Legend at the right of the chart\n * @sample {highstock} stock/legend/align/\n * Various legend options\n * @sample {highmaps} maps/legend/alignment/\n * Legend alignment\n *\n * @type {Highcharts.AlignValue}\n * @since 2.0\n */\n align: 'center',\n /**\n * If the [layout](legend.layout) is `horizontal` and the legend items\n * span over two lines or more, whether to align the items into vertical\n * columns. Setting this to `false` makes room for more items, but will\n * look more messy.\n *\n * @since 6.1.0\n */\n alignColumns: true,\n /**\n * A CSS class name to apply to the legend group.\n */\n className: 'highcharts-no-tooltip',\n /**\n * When the legend is floating, the plot area ignores it and is allowed\n * to be placed below it.\n *\n * @sample {highcharts} highcharts/legend/floating-false/\n * False by default\n * @sample {highcharts} highcharts/legend/floating-true/\n * True\n * @sample {highmaps} maps/legend/alignment/\n * Floating legend\n *\n * @type {boolean}\n * @default false\n * @since 2.1\n * @apioption legend.floating\n */\n /**\n * The layout of the legend items. Can be one of `horizontal` or\n * `vertical` or `proximate`. When `proximate`, the legend items will be\n * placed as close as possible to the graphs they're representing,\n * except in inverted charts or when the legend position doesn't allow\n * it.\n *\n * @sample {highcharts} highcharts/legend/layout-horizontal/\n * Horizontal by default\n * @sample {highcharts} highcharts/legend/layout-vertical/\n * Vertical\n * @sample highcharts/legend/layout-proximate\n * Labels proximate to the data\n * @sample {highstock} stock/legend/layout-horizontal/\n * Horizontal by default\n * @sample {highmaps} maps/legend/padding-itemmargin/\n * Vertical with data classes\n * @sample {highmaps} maps/legend/layout-vertical/\n * Vertical with color axis gradient\n *\n * @validvalue [\"horizontal\", \"vertical\", \"proximate\"]\n */\n layout: 'horizontal',\n /**\n * In a legend with horizontal layout, the itemDistance defines the\n * pixel distance between each item.\n *\n * @sample {highcharts} highcharts/legend/layout-horizontal/\n * 50px item distance\n * @sample {highstock} highcharts/legend/layout-horizontal/\n * 50px item distance\n *\n * @type {number}\n * @default {highcharts} 20\n * @default {highstock} 20\n * @default {highmaps} 8\n * @since 3.0.3\n * @apioption legend.itemDistance\n */\n /**\n * The pixel bottom margin for each legend item.\n *\n * @sample {highcharts|highstock} highcharts/legend/padding-itemmargin/\n * Padding and item margins demonstrated\n * @sample {highmaps} maps/legend/padding-itemmargin/\n * Padding and item margins demonstrated\n *\n * @type {number}\n * @default 0\n * @since 2.2.0\n * @apioption legend.itemMarginBottom\n */\n /**\n * The pixel top margin for each legend item.\n *\n * @sample {highcharts|highstock} highcharts/legend/padding-itemmargin/\n * Padding and item margins demonstrated\n * @sample {highmaps} maps/legend/padding-itemmargin/\n * Padding and item margins demonstrated\n *\n * @type {number}\n * @default 0\n * @since 2.2.0\n * @apioption legend.itemMarginTop\n */\n /**\n * The width for each legend item. By default the items are laid out\n * successively. In a [horizontal layout](legend.layout), if the items\n * are laid out across two rows or more, they will be vertically aligned\n * depending on the [legend.alignColumns](legend.alignColumns) option.\n *\n * @sample {highcharts} highcharts/legend/itemwidth-default/\n * Undefined by default\n * @sample {highcharts} highcharts/legend/itemwidth-80/\n * 80 for aligned legend items\n *\n * @type {number}\n * @since 2.0\n * @apioption legend.itemWidth\n */\n /**\n * A [format string](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting)\n * for each legend label. Available variables relates to properties on\n * the series, or the point in case of pies.\n *\n * @type {string}\n * @default {name}\n * @since 1.3\n * @apioption legend.labelFormat\n */\n /* eslint-disable valid-jsdoc */\n /**\n * Callback function to format each of the series' labels. The `this`\n * keyword refers to the series object, or the point object in case of\n * pie charts. By default the series or point name is printed.\n *\n * @productdesc {highmaps}\n * In Highmaps the context can also be a data class in case of a\n * `colorAxis`.\n *\n * @sample {highcharts} highcharts/legend/labelformatter/\n * Add text\n * @sample {highmaps} maps/legend/labelformatter/\n * Data classes with label formatter\n *\n * @type {Highcharts.FormatterCallbackFunction}\n */\n labelFormatter: function () {\n /** eslint-enable valid-jsdoc */\n return this.name;\n },\n /**\n * Line height for the legend items. Deprecated as of 2.1\\. Instead,\n * the line height for each item can be set using\n * `itemStyle.lineHeight`, and the padding between items using\n * `itemMarginTop` and `itemMarginBottom`.\n *\n * @sample {highcharts} highcharts/legend/lineheight/\n * Setting padding\n *\n * @deprecated\n *\n * @type {number}\n * @default 16\n * @since 2.0\n * @product highcharts gantt\n * @apioption legend.lineHeight\n */\n /**\n * If the plot area sized is calculated automatically and the legend is\n * not floating, the legend margin is the space between the legend and\n * the axis labels or plot area.\n *\n * @sample {highcharts} highcharts/legend/margin-default/\n * 12 pixels by default\n * @sample {highcharts} highcharts/legend/margin-30/\n * 30 pixels\n *\n * @type {number}\n * @default 12\n * @since 2.1\n * @apioption legend.margin\n */\n /**\n * Maximum pixel height for the legend. When the maximum height is\n * extended, navigation will show.\n *\n * @type {number}\n * @since 2.3.0\n * @apioption legend.maxHeight\n */\n /**\n * The color of the drawn border around the legend.\n *\n * @see In styled mode, the legend border stroke can be applied with the\n * `.highcharts-legend-box` class.\n *\n * @sample {highcharts} highcharts/legend/bordercolor/\n * Brown border\n * @sample {highstock} stock/legend/align/\n * Various legend options\n * @sample {highmaps} maps/legend/border-background/\n * Border and background options\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n */\n borderColor: \"#999999\" /* Palette.neutralColor40 */,\n /**\n * The border corner radius of the legend.\n *\n * @sample {highcharts} highcharts/legend/borderradius-default/\n * Square by default\n * @sample {highcharts} highcharts/legend/borderradius-round/\n * 5px rounded\n * @sample {highmaps} maps/legend/border-background/\n * Border and background options\n */\n borderRadius: 0,\n /**\n * Options for the paging or navigation appearing when the legend is\n * overflown. Navigation works well on screen, but not in static\n * exported images. One way of working around that is to\n * [increase the chart height in\n * export](https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/legend/navigation-enabled-false/).\n */\n navigation: {\n /**\n * How to animate the pages when navigating up or down. A value of\n * `true` applies the default navigation given in the\n * `chart.animation` option. Additional options can be given as an\n * object containing values for easing and duration.\n *\n * @sample {highcharts} highcharts/legend/navigation/\n * Legend page navigation demonstrated\n * @sample {highstock} highcharts/legend/navigation/\n * Legend page navigation demonstrated\n *\n * @type {boolean|Partial}\n * @default true\n * @since 2.2.4\n * @apioption legend.navigation.animation\n */\n /**\n * The pixel size of the up and down arrows in the legend paging\n * navigation.\n *\n * @sample {highcharts} highcharts/legend/navigation/\n * Legend page navigation demonstrated\n * @sample {highstock} highcharts/legend/navigation/\n * Legend page navigation demonstrated\n *\n * @type {number}\n * @default 12\n * @since 2.2.4\n * @apioption legend.navigation.arrowSize\n */\n /**\n * Whether to enable the legend navigation. In most cases, disabling\n * the navigation results in an unwanted overflow.\n *\n * See also the\n * [adapt chart to legend](https://github.com/highcharts/adapt-chart-to-legend)\n * plugin for a solution to extend the chart height to make room for\n * the legend, optionally in exported charts only.\n *\n * @type {boolean}\n * @default true\n * @since 4.2.4\n * @apioption legend.navigation.enabled\n */\n /**\n * Text styles for the legend page navigation.\n *\n * @see In styled mode, the navigation items are styled with the\n * `.highcharts-legend-navigation` class.\n *\n * @sample {highcharts} highcharts/legend/navigation/\n * Legend page navigation demonstrated\n * @sample {highstock} highcharts/legend/navigation/\n * Legend page navigation demonstrated\n *\n * @type {Highcharts.CSSObject}\n * @since 2.2.4\n * @apioption legend.navigation.style\n */\n /**\n * The color for the active up or down arrow in the legend page\n * navigation.\n *\n * @see In styled mode, the active arrow be styled with the\n * `.highcharts-legend-nav-active` class.\n *\n * @sample {highcharts} highcharts/legend/navigation/\n * Legend page navigation demonstrated\n * @sample {highstock} highcharts/legend/navigation/\n * Legend page navigation demonstrated\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @since 2.2.4\n */\n activeColor: \"#003399\" /* Palette.highlightColor100 */,\n /**\n * The color of the inactive up or down arrow in the legend page\n * navigation. .\n *\n * @see In styled mode, the inactive arrow be styled with the\n * `.highcharts-legend-nav-inactive` class.\n *\n * @sample {highcharts} highcharts/legend/navigation/\n * Legend page navigation demonstrated\n * @sample {highstock} highcharts/legend/navigation/\n * Legend page navigation demonstrated\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @since 2.2.4\n */\n inactiveColor: \"#cccccc\" /* Palette.neutralColor20 */\n },\n /**\n * The inner padding of the legend box.\n *\n * @sample {highcharts|highstock} highcharts/legend/padding-itemmargin/\n * Padding and item margins demonstrated\n * @sample {highmaps} maps/legend/padding-itemmargin/\n * Padding and item margins demonstrated\n *\n * @type {number}\n * @default 8\n * @since 2.2.0\n * @apioption legend.padding\n */\n /**\n * Whether to reverse the order of the legend items compared to the\n * order of the series or points as defined in the configuration object.\n *\n * @see [yAxis.reversedStacks](#yAxis.reversedStacks),\n * [series.legendIndex](#series.legendIndex)\n *\n * @sample {highcharts} highcharts/legend/reversed/\n * Stacked bar with reversed legend\n *\n * @type {boolean}\n * @default false\n * @since 1.2.5\n * @apioption legend.reversed\n */\n /**\n * Whether to show the symbol on the right side of the text rather than\n * the left side. This is common in Arabic and Hebrew.\n *\n * @sample {highcharts} highcharts/legend/rtl/\n * Symbol to the right\n *\n * @type {boolean}\n * @default false\n * @since 2.2\n * @apioption legend.rtl\n */\n /**\n * CSS styles for the legend area. In the 1.x versions the position\n * of the legend area was determined by CSS. In 2.x, the position is\n * determined by properties like `align`, `verticalAlign`, `x` and `y`,\n * but the styles are still parsed for backwards compatibility.\n *\n * @deprecated\n *\n * @type {Highcharts.CSSObject}\n * @product highcharts highstock\n * @apioption legend.style\n */\n /**\n * CSS styles for each legend item. Only a subset of CSS is supported,\n * notably those options related to text. The default `textOverflow`\n * property makes long texts truncate. Set it to `undefined` to wrap\n * text instead. A `width` property can be added to control the text\n * width.\n *\n * @see In styled mode, the legend items can be styled with the\n * `.highcharts-legend-item` class.\n *\n * @sample {highcharts} highcharts/legend/itemstyle/\n * Bold black text\n * @sample {highmaps} maps/legend/itemstyle/\n * Item text styles\n *\n * @type {Highcharts.CSSObject}\n * @default {\"color\": \"#333333\", \"cursor\": \"pointer\", \"fontSize\": \"12px\", \"fontWeight\": \"bold\", \"textOverflow\": \"ellipsis\"}\n */\n itemStyle: {\n /**\n * @ignore\n */\n color: \"#333333\" /* Palette.neutralColor80 */,\n /**\n * @ignore\n */\n cursor: 'pointer',\n /**\n * @ignore\n */\n fontSize: '12px',\n /**\n * @ignore\n */\n fontWeight: 'bold',\n /**\n * @ignore\n */\n textOverflow: 'ellipsis'\n },\n /**\n * CSS styles for each legend item in hover mode. Only a subset of\n * CSS is supported, notably those options related to text. Properties\n * are inherited from `style` unless overridden here.\n *\n * @see In styled mode, the hovered legend items can be styled with\n * the `.highcharts-legend-item:hover` pesudo-class.\n *\n * @sample {highcharts} highcharts/legend/itemhoverstyle/\n * Red on hover\n * @sample {highmaps} maps/legend/itemstyle/\n * Item text styles\n *\n * @type {Highcharts.CSSObject}\n * @default {\"color\": \"#000000\"}\n */\n itemHoverStyle: {\n /**\n * @ignore\n */\n color: \"#000000\" /* Palette.neutralColor100 */\n },\n /**\n * CSS styles for each legend item when the corresponding series or\n * point is hidden. Only a subset of CSS is supported, notably those\n * options related to text. Properties are inherited from `style`\n * unless overridden here.\n *\n * @see In styled mode, the hidden legend items can be styled with\n * the `.highcharts-legend-item-hidden` class.\n *\n * @sample {highcharts} highcharts/legend/itemhiddenstyle/\n * Darker gray color\n *\n * @type {Highcharts.CSSObject}\n * @default {\"color\": \"#cccccc\"}\n */\n itemHiddenStyle: {\n /**\n * @ignore\n */\n color: \"#cccccc\" /* Palette.neutralColor20 */\n },\n /**\n * Whether to apply a drop shadow to the legend. A `backgroundColor`\n * also needs to be applied for this to take effect. The shadow can be\n * an object configuration containing `color`, `offsetX`, `offsetY`,\n * `opacity` and `width`.\n *\n * @sample {highcharts} highcharts/legend/shadow/\n * White background and drop shadow\n * @sample {highstock} stock/legend/align/\n * Various legend options\n * @sample {highmaps} maps/legend/border-background/\n * Border and background options\n *\n * @type {boolean|Highcharts.CSSObject}\n */\n shadow: false,\n /**\n * Default styling for the checkbox next to a legend item when\n * `showCheckbox` is true.\n *\n * @type {Highcharts.CSSObject}\n * @default {\"width\": \"13px\", \"height\": \"13px\", \"position\":\"absolute\"}\n */\n itemCheckboxStyle: {\n /**\n * @ignore\n */\n position: 'absolute',\n /**\n * @ignore\n */\n width: '13px',\n /**\n * @ignore\n */\n height: '13px'\n },\n // itemWidth: undefined,\n /**\n * When this is true, the legend symbol width will be the same as\n * the symbol height, which in turn defaults to the font size of the\n * legend items.\n *\n * @since 5.0.0\n */\n squareSymbol: true,\n /**\n * The pixel height of the symbol for series types that use a rectangle\n * in the legend. Defaults to the font size of legend items.\n *\n * @productdesc {highmaps}\n * In Highmaps, when the symbol is the gradient of a vertical color\n * axis, the height defaults to 200.\n *\n * @sample {highmaps} maps/legend/layout-vertical-sized/\n * Sized vertical gradient\n * @sample {highmaps} maps/legend/padding-itemmargin/\n * No distance between data classes\n *\n * @type {number}\n * @since 3.0.8\n * @apioption legend.symbolHeight\n */\n /**\n * The border radius of the symbol for series types that use a rectangle\n * in the legend. Defaults to half the `symbolHeight`.\n *\n * @sample {highcharts} highcharts/legend/symbolradius/\n * Round symbols\n * @sample {highstock} highcharts/legend/symbolradius/\n * Round symbols\n * @sample {highmaps} highcharts/legend/symbolradius/\n * Round symbols\n *\n * @type {number}\n * @since 3.0.8\n * @apioption legend.symbolRadius\n */\n /**\n * The pixel width of the legend item symbol. When the `squareSymbol`\n * option is set, this defaults to the `symbolHeight`, otherwise 16.\n *\n * @productdesc {highmaps}\n * In Highmaps, when the symbol is the gradient of a horizontal color\n * axis, the width defaults to 200.\n *\n * @sample {highcharts} highcharts/legend/symbolwidth/\n * Greater symbol width and padding\n * @sample {highmaps} maps/legend/padding-itemmargin/\n * Padding and item margins demonstrated\n * @sample {highmaps} maps/legend/layout-vertical-sized/\n * Sized vertical gradient\n *\n * @type {number}\n * @apioption legend.symbolWidth\n */\n /**\n * Whether to [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html)\n * to render the legend item texts.\n *\n * Prior to 4.1.7, when using HTML, [legend.navigation](\n * #legend.navigation) was disabled.\n *\n * @type {boolean}\n * @default false\n * @apioption legend.useHTML\n */\n /**\n * For a color axis with data classes, how many decimals to render in\n * the legend. The default preserves the decimals of the range numbers.\n *\n * @type {number}\n * @default -1\n * @product highcharts highmaps\n * @apioption legend.valueDecimals\n */\n /**\n * For a color axis with data classes, a suffix for the range numbers in\n * the legend.\n *\n * @type {string}\n * @default ''\n * @product highcharts highmaps\n * @apioption legend.valueSuffix\n */\n /**\n * The width of the legend box. If a number is set, it translates to\n * pixels. Since v7.0.2 it allows setting a percent string of the full\n * chart width, for example `40%`.\n *\n * Defaults to the full chart width for legends below or above the\n * chart, half the chart width for legends to the left and right.\n *\n * @sample {highcharts} highcharts/legend/width/\n * Aligned to the plot area\n * @sample {highcharts} highcharts/legend/width-percent/\n * A percent of the chart width\n *\n * @type {number|string}\n * @since 2.0\n * @apioption legend.width\n */\n /**\n * The pixel padding between the legend item symbol and the legend\n * item text.\n *\n * @sample {highcharts} highcharts/legend/symbolpadding/\n * Greater symbol width and padding\n */\n symbolPadding: 5,\n /**\n * The vertical alignment of the legend box. Can be one of `top`,\n * `middle` or `bottom`. Vertical position can be further determined\n * by the `y` option.\n *\n * In the case that the legend is aligned in a corner position, the\n * `layout` option will determine whether to place it above/below\n * or on the side of the plot area.\n *\n * When the [layout](#legend.layout) option is `proximate`, the\n * `verticalAlign` option doesn't apply.\n *\n * @sample {highcharts} highcharts/legend/verticalalign/\n * Legend 100px from the top of the chart\n * @sample {highstock} stock/legend/align/\n * Various legend options\n * @sample {highmaps} maps/legend/alignment/\n * Legend alignment\n *\n * @type {Highcharts.VerticalAlignValue}\n * @since 2.0\n */\n verticalAlign: 'bottom',\n // width: undefined,\n /**\n * The x offset of the legend relative to its horizontal alignment\n * `align` within chart.spacingLeft and chart.spacingRight. Negative\n * x moves it to the left, positive x moves it to the right.\n *\n * @sample {highcharts} highcharts/legend/width/\n * Aligned to the plot area\n *\n * @since 2.0\n */\n x: 0,\n /**\n * The vertical offset of the legend relative to it's vertical alignment\n * `verticalAlign` within chart.spacingTop and chart.spacingBottom.\n * Negative y moves it up, positive y moves it down.\n *\n * @sample {highcharts} highcharts/legend/verticalalign/\n * Legend 100px from the top of the chart\n * @sample {highstock} stock/legend/align/\n * Various legend options\n * @sample {highmaps} maps/legend/alignment/\n * Legend alignment\n *\n * @since 2.0\n */\n y: 0,\n /**\n * A title to be added on top of the legend.\n *\n * @sample {highcharts} highcharts/legend/title/\n * Legend title\n * @sample {highmaps} maps/legend/alignment/\n * Legend with title\n *\n * @since 3.0\n */\n title: {\n /**\n * A text or HTML string for the title.\n *\n * @type {string}\n * @since 3.0\n * @apioption legend.title.text\n */\n /**\n * Generic CSS styles for the legend title.\n *\n * @see In styled mode, the legend title is styled with the\n * `.highcharts-legend-title` class.\n *\n * @type {Highcharts.CSSObject}\n * @default {\"fontWeight\": \"bold\"}\n * @since 3.0\n */\n style: {\n /**\n * @ignore\n */\n fontWeight: 'bold'\n }\n }\n },\n /**\n * The loading options control the appearance of the loading screen\n * that covers the plot area on chart operations. This screen only\n * appears after an explicit call to `chart.showLoading()`. It is a\n * utility for developers to communicate to the end user that something\n * is going on, for example while retrieving new data via an XHR connection.\n * The \"Loading...\" text itself is not part of this configuration\n * object, but part of the `lang` object.\n */\n loading: {\n /**\n * The duration in milliseconds of the fade out effect.\n *\n * @sample highcharts/loading/hideduration/\n * Fade in and out over a second\n *\n * @type {number}\n * @default 100\n * @since 1.2.0\n * @apioption loading.hideDuration\n */\n /**\n * The duration in milliseconds of the fade in effect.\n *\n * @sample highcharts/loading/hideduration/\n * Fade in and out over a second\n *\n * @type {number}\n * @default 100\n * @since 1.2.0\n * @apioption loading.showDuration\n */\n /**\n * CSS styles for the loading label `span`.\n *\n * @see In styled mode, the loading label is styled with the\n * `.highcharts-loading-inner` class.\n *\n * @sample {highcharts|highmaps} highcharts/loading/labelstyle/\n * Vertically centered\n * @sample {highstock} stock/loading/general/\n * Label styles\n *\n * @type {Highcharts.CSSObject}\n * @default {\"fontWeight\": \"bold\", \"position\": \"relative\", \"top\": \"45%\"}\n * @since 1.2.0\n */\n labelStyle: {\n /**\n * @ignore\n */\n fontWeight: 'bold',\n /**\n * @ignore\n */\n position: 'relative',\n /**\n * @ignore\n */\n top: '45%'\n },\n /**\n * CSS styles for the loading screen that covers the plot area.\n *\n * In styled mode, the loading label is styled with the\n * `.highcharts-loading` class.\n *\n * @sample {highcharts|highmaps} highcharts/loading/style/\n * Gray plot area, white text\n * @sample {highstock} stock/loading/general/\n * Gray plot area, white text\n *\n * @type {Highcharts.CSSObject}\n * @default {\"position\": \"absolute\", \"backgroundColor\": \"#ffffff\", \"opacity\": 0.5, \"textAlign\": \"center\"}\n * @since 1.2.0\n */\n style: {\n /**\n * @ignore\n */\n position: 'absolute',\n /**\n * @ignore\n */\n backgroundColor: \"#ffffff\" /* Palette.backgroundColor */,\n /**\n * @ignore\n */\n opacity: 0.5,\n /**\n * @ignore\n */\n textAlign: 'center'\n }\n },\n /**\n * Options for the tooltip that appears when the user hovers over a\n * series or point.\n *\n * @declare Highcharts.TooltipOptions\n */\n tooltip: {\n /**\n * The color of the tooltip border. When `undefined`, the border takes\n * the color of the corresponding series or point.\n *\n * @sample {highcharts} highcharts/tooltip/bordercolor-default/\n * Follow series by default\n * @sample {highcharts} highcharts/tooltip/bordercolor-black/\n * Black border\n * @sample {highstock} stock/tooltip/general/\n * Styled tooltip\n * @sample {highmaps} maps/tooltip/background-border/\n * Background and border demo\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @apioption tooltip.borderColor\n */\n /**\n * A CSS class name to apply to the tooltip's container div,\n * allowing unique CSS styling for each chart.\n *\n * @type {string}\n * @apioption tooltip.className\n */\n /**\n * Since 4.1, the crosshair definitions are moved to the Axis object\n * in order for a better separation from the tooltip. See\n * [xAxis.crosshair](#xAxis.crosshair).\n *\n * @sample {highcharts} highcharts/tooltip/crosshairs-x/\n * Enable a crosshair for the x value\n *\n * @deprecated\n *\n * @type {*}\n * @default true\n * @apioption tooltip.crosshairs\n */\n /**\n * Distance from point to tooltip in pixels.\n *\n * @type {number}\n * @default 16\n * @apioption tooltip.distance\n */\n /**\n * Whether the tooltip should follow the mouse as it moves across\n * columns, pie slices and other point types with an extent.\n * By default it behaves this way for pie, polygon, map, sankey\n * and wordcloud series by override in the `plotOptions`\n * for those series types.\n *\n * Does not apply if [split](#tooltip.split) is `true`.\n *\n * For touch moves to behave the same way, [followTouchMove](\n * #tooltip.followTouchMove) must be `true` also.\n *\n * @type {boolean}\n * @default {highcharts} false\n * @default {highstock} false\n * @default {highmaps} true\n * @since 3.0\n * @apioption tooltip.followPointer\n */\n /**\n * Whether the tooltip should update as the finger moves on a touch\n * device. If this is `true` and [chart.panning](#chart.panning) is\n * set,`followTouchMove` will take over one-finger touches, so the user\n * needs to use two fingers for zooming and panning.\n *\n * Note the difference to [followPointer](#tooltip.followPointer) that\n * only defines the _position_ of the tooltip. If `followPointer` is\n * false in for example a column series, the tooltip will show above or\n * below the column, but as `followTouchMove` is true, the tooltip will\n * jump from column to column as the user swipes across the plot area.\n *\n * @type {boolean}\n * @default {highcharts} true\n * @default {highstock} true\n * @default {highmaps} false\n * @since 3.0.1\n * @apioption tooltip.followTouchMove\n */\n /**\n * Callback function to format the text of the tooltip from scratch. In\n * case of single or [shared](#tooltip.shared) tooltips, a string should\n * be returned. In case of [split](#tooltip.split) tooltips, it should\n * return an array where the first item is the header, and subsequent\n * items are mapped to the points. Return `false` to disable tooltip for\n * a specific point on series.\n *\n * A subset of HTML is supported. Unless `useHTML` is true, the HTML of\n * the tooltip is parsed and converted to SVG, therefore this isn't a\n * complete HTML renderer. The following HTML tags are supported: `b`,\n * `br`, `em`, `i`, `span`, `strong`. Spans can be styled with a `style`\n * attribute, but only text-related CSS, that is shared with SVG, is\n * handled.\n *\n * The available data in the formatter differ a bit depending on whether\n * the tooltip is shared or split, or belongs to a single point. In a\n * shared/split tooltip, all properties except `x`, which is common for\n * all points, are kept in an array, `this.points`.\n *\n * Available data are:\n *\n * - **this.percentage (not shared) /**\n * **this.points[i].percentage (shared)**:\n * Stacked series and pies only. The point's percentage of the total.\n *\n * - **this.point (not shared) / this.points[i].point (shared)**:\n * The point object. The point name, if defined, is available through\n * `this.point.name`.\n *\n * - **this.points**:\n * In a shared tooltip, this is an array containing all other\n * properties for each point.\n *\n * - **this.series (not shared) / this.points[i].series (shared)**:\n * The series object. The series name is available through\n * `this.series.name`.\n *\n * - **this.total (not shared) / this.points[i].total (shared)**:\n * Stacked series only. The total value at this point's x value.\n *\n * - **this.x**:\n * The x value. This property is the same regardless of the tooltip\n * being shared or not.\n *\n * - **this.y (not shared) / this.points[i].y (shared)**:\n * The y value.\n *\n * @sample {highcharts} highcharts/tooltip/formatter-simple/\n * Simple string formatting\n * @sample {highcharts} highcharts/tooltip/formatter-shared/\n * Formatting with shared tooltip\n * @sample {highcharts|highstock} highcharts/tooltip/formatter-split/\n * Formatting with split tooltip\n * @sample highcharts/tooltip/formatter-conditional-default/\n * Extending default formatter\n * @sample {highstock} stock/tooltip/formatter/\n * Formatting with shared tooltip\n * @sample {highmaps} maps/tooltip/formatter/\n * String formatting\n *\n * @type {Highcharts.TooltipFormatterCallbackFunction}\n * @apioption tooltip.formatter\n */\n /**\n * Callback function to format the text of the tooltip for\n * visible null points.\n * Works analogously to [formatter](#tooltip.formatter).\n *\n * @sample highcharts/plotoptions/series-nullformat\n * Format data label and tooltip for null point.\n *\n * @type {Highcharts.TooltipFormatterCallbackFunction}\n * @apioption tooltip.nullFormatter\n */\n /**\n * Whether to allow the tooltip to render outside the chart's SVG\n * element box. By default (`false`), the tooltip is rendered within the\n * chart's SVG element, which results in the tooltip being aligned\n * inside the chart area. For small charts, this may result in clipping\n * or overlapping. When `true`, a separate SVG element is created and\n * overlaid on the page, allowing the tooltip to be aligned inside the\n * page itself.\n *\n * Defaults to `true` if `chart.scrollablePlotArea` is activated,\n * otherwise `false`.\n *\n * @sample highcharts/tooltip/outside\n * Small charts with tooltips outside\n *\n * @type {boolean|undefined}\n * @default undefined\n * @since 6.1.1\n * @apioption tooltip.outside\n */\n /**\n * A callback function for formatting the HTML output for a single point\n * in the tooltip. Like the `pointFormat` string, but with more\n * flexibility.\n *\n * @type {Highcharts.FormatterCallbackFunction}\n * @since 4.1.0\n * @context Highcharts.Point\n * @apioption tooltip.pointFormatter\n */\n /**\n * A callback function to place the tooltip in a custom position. The\n * callback receives three parameters: `labelWidth`, `labelHeight` and\n * `point`, where point contains values for `plotX` and `plotY` telling\n * where the reference point is in the plot area. Add `chart.plotLeft`\n * and `chart.plotTop` to get the full coordinates.\n *\n * To find the actual hovered `Point` instance, use\n * `this.chart.hoverPoint`. For shared or split tooltips, all the hover\n * points are available in `this.chart.hoverPoints`.\n *\n * Since v7, when [tooltip.split](#tooltip.split) option is enabled,\n * positioner is called for each of the boxes separately, including\n * xAxis header. xAxis header is not a point, instead `point` argument\n * contains info: `{ plotX: Number, plotY: Number, isHeader: Boolean }`\n *\n * The return should be an object containing x and y values, for example\n * `{ x: 100, y: 100 }`.\n *\n * @sample {highcharts} highcharts/tooltip/positioner/\n * A fixed tooltip position\n * @sample {highstock} stock/tooltip/positioner/\n * A fixed tooltip position on top of the chart\n * @sample {highmaps} maps/tooltip/positioner/\n * A fixed tooltip position\n * @sample {highstock} stock/tooltip/split-positioner/\n * Split tooltip with fixed positions\n * @sample {highstock} stock/tooltip/positioner-scrollable-plotarea/\n * Scrollable plot area combined with tooltip positioner\n *\n * @type {Highcharts.TooltipPositionerCallbackFunction}\n * @since 2.2.4\n * @apioption tooltip.positioner\n */\n /**\n * Split the tooltip into one label per series, with the header close\n * to the axis. This is recommended over [shared](#tooltip.shared)\n * tooltips for charts with multiple line series, generally making them\n * easier to read. This option takes precedence over `tooltip.shared`.\n *\n * @productdesc {highstock} In Highcharts Stock, tooltips are split\n * by default since v6.0.0. Stock charts typically contain\n * multi-dimension points and multiple panes, making split tooltips\n * the preferred layout over\n * the previous `shared` tooltip.\n *\n * @sample highcharts/tooltip/split/\n * Split tooltip\n * @sample {highcharts|highstock} highcharts/tooltip/formatter-split/\n * Split tooltip and custom formatter callback\n *\n * @type {boolean}\n * @default {highcharts} false\n * @default {highstock} true\n * @since 5.0.0\n * @product highcharts highstock\n * @apioption tooltip.split\n */\n /**\n * Prevents the tooltip from switching or closing, when touched or\n * pointed.\n *\n * @sample highcharts/tooltip/stickoncontact/\n * Tooltip sticks on pointer contact\n *\n * @type {boolean}\n * @since 8.0.1\n * @apioption tooltip.stickOnContact\n */\n /**\n * Use HTML to render the contents of the tooltip instead of SVG. Using\n * HTML allows advanced formatting like tables and images in the\n * tooltip. It is also recommended for rtl languages as it works around\n * rtl bugs in early Firefox.\n *\n * @sample {highcharts|highstock} highcharts/tooltip/footerformat/\n * A table for value alignment\n * @sample {highcharts|highstock} highcharts/tooltip/fullhtml/\n * Full HTML tooltip\n * @sample {highmaps} maps/tooltip/usehtml/\n * Pure HTML tooltip\n *\n * @type {boolean}\n * @default false\n * @since 2.2\n * @apioption tooltip.useHTML\n */\n /**\n * How many decimals to show in each series' y value. This is\n * overridable in each series' tooltip options object. The default is to\n * preserve all decimals.\n *\n * @sample {highcharts|highstock} highcharts/tooltip/valuedecimals/\n * Set decimals, prefix and suffix for the value\n * @sample {highmaps} maps/tooltip/valuedecimals/\n * Set decimals, prefix and suffix for the value\n *\n * @type {number|undefined}\n * @since 2.2\n * @apioption tooltip.valueDecimals\n */\n /**\n * A string to prepend to each series' y value. Overridable in each\n * series' tooltip options object.\n *\n * @sample {highcharts|highstock} highcharts/tooltip/valuedecimals/\n * Set decimals, prefix and suffix for the value\n * @sample {highmaps} maps/tooltip/valuedecimals/\n * Set decimals, prefix and suffix for the value\n *\n * @type {string}\n * @since 2.2\n * @apioption tooltip.valuePrefix\n */\n /**\n * A string to append to each series' y value. Overridable in each\n * series' tooltip options object.\n *\n * @sample {highcharts|highstock} highcharts/tooltip/valuedecimals/\n * Set decimals, prefix and suffix for the value\n * @sample {highmaps} maps/tooltip/valuedecimals/\n * Set decimals, prefix and suffix for the value\n *\n * @type {string}\n * @since 2.2\n * @apioption tooltip.valueSuffix\n */\n /**\n * The format for the date in the tooltip header if the X axis is a\n * datetime axis. The default is a best guess based on the smallest\n * distance between points in the chart.\n *\n * @sample {highcharts} highcharts/tooltip/xdateformat/\n * A different format\n *\n * @type {string}\n * @product highcharts highstock gantt\n * @apioption tooltip.xDateFormat\n */\n /**\n * How many decimals to show for the `point.change`\n * or the `point.cumulativeSum` value when the `series.compare`\n * or the `series.cumulative` option is set.\n * This is overridable in each series' tooltip options object.\n *\n * @type {number}\n * @default 2\n * @since 1.0.1\n * @product highstock\n * @apioption tooltip.changeDecimals\n */\n /**\n * Enable or disable the tooltip.\n *\n * @sample {highcharts} highcharts/tooltip/enabled/\n * Disabled\n * @sample {highcharts} highcharts/plotoptions/series-point-events-mouseover/\n * Disable tooltip and show values on chart instead\n */\n enabled: true,\n /**\n * Enable or disable animation of the tooltip.\n *\n * @type {boolean}\n * @default true\n * @since 2.3.0\n */\n animation: svg,\n /**\n * The radius of the rounded border corners.\n *\n * @sample {highcharts} highcharts/tooltip/bordercolor-default/\n * 5px by default\n * @sample {highcharts} highcharts/tooltip/borderradius-0/\n * Square borders\n * @sample {highmaps} maps/tooltip/background-border/\n * Background and border demo\n */\n borderRadius: 3,\n /**\n * For series on datetime axes, the date format in the tooltip's\n * header will by default be guessed based on the closest data points.\n * This member gives the default string representations used for\n * each unit. For an overview of the replacement codes, see\n * [dateFormat](/class-reference/Highcharts.Time#dateFormat).\n *\n * @see [xAxis.dateTimeLabelFormats](#xAxis.dateTimeLabelFormats)\n *\n * @type {Highcharts.Dictionary}\n * @product highcharts highstock gantt\n */\n dateTimeLabelFormats: {\n /** @internal */\n millisecond: '%A, %b %e, %H:%M:%S.%L',\n /** @internal */\n second: '%A, %b %e, %H:%M:%S',\n /** @internal */\n minute: '%A, %b %e, %H:%M',\n /** @internal */\n hour: '%A, %b %e, %H:%M',\n /** @internal */\n day: '%A, %b %e, %Y',\n /** @internal */\n week: 'Week from %A, %b %e, %Y',\n /** @internal */\n month: '%B %Y',\n /** @internal */\n year: '%Y'\n },\n /**\n * A string to append to the tooltip format.\n *\n * @sample {highcharts} highcharts/tooltip/footerformat/\n * A table for value alignment\n * @sample {highmaps} maps/tooltip/format/\n * Format demo\n *\n * @since 2.2\n */\n footerFormat: '',\n /**\n * The name of a symbol to use for the border around the tooltip\n * header. Applies only when [tooltip.split](#tooltip.split) is\n * enabled.\n *\n * Custom callbacks for symbol path generation can also be added to\n * `Highcharts.SVGRenderer.prototype.symbols` the same way as for\n * [series.marker.symbol](plotOptions.line.marker.symbol).\n *\n * @see [tooltip.shape](#tooltip.shape)\n *\n * @sample {highstock} stock/tooltip/split-positioner/\n * Different shapes for header and split boxes\n *\n * @type {Highcharts.TooltipShapeValue}\n * @validvalue [\"callout\", \"square\"]\n * @since 7.0\n */\n headerShape: 'callout',\n /**\n * The number of milliseconds to wait until the tooltip is hidden when\n * mouse out from a point or chart.\n *\n * @since 3.0\n */\n hideDelay: 500,\n /**\n * Padding inside the tooltip, in pixels.\n *\n * @since 5.0.0\n */\n padding: 8,\n /**\n * The name of a symbol to use for the border around the tooltip. Can\n * be one of: `\"callout\"`, `\"circle\"` or `\"rect\"`. When\n * [tooltip.split](#tooltip.split)\n * option is enabled, shape is applied to all boxes except header, which\n * is controlled by\n * [tooltip.headerShape](#tooltip.headerShape).\n *\n * Custom callbacks for symbol path generation can also be added to\n * `Highcharts.SVGRenderer.prototype.symbols` the same way as for\n * [series.marker.symbol](plotOptions.line.marker.symbol).\n *\n * @type {Highcharts.TooltipShapeValue}\n * @since 4.0\n */\n shape: 'callout',\n /**\n * When the tooltip is shared, the entire plot area will capture mouse\n * movement or touch events. Tooltip texts for series types with ordered\n * data (not pie, scatter, flags etc) will be shown in a single bubble.\n * This is recommended for single series charts and for tablet/mobile\n * optimized charts.\n *\n * See also [tooltip.split](#tooltip.split), that is better suited for\n * charts with many series, especially line-type series. The\n * `tooltip.split` option takes precedence over `tooltip.shared`.\n *\n * @sample {highcharts} highcharts/tooltip/shared-false/\n * False by default\n * @sample {highcharts} highcharts/tooltip/shared-true/\n * True\n * @sample {highcharts} highcharts/tooltip/shared-x-crosshair/\n * True with x axis crosshair\n * @sample {highcharts} highcharts/tooltip/shared-true-mixed-types/\n * True with mixed series types\n *\n * @since 2.1\n * @product highcharts highstock\n */\n shared: false,\n /**\n * Proximity snap for graphs or single points. It defaults to 10 for\n * mouse-powered devices and 25 for touch devices.\n *\n * Note that in most cases the whole plot area captures the mouse\n * movement, and in these cases `tooltip.snap` doesn't make sense. This\n * applies when [stickyTracking](#plotOptions.series.stickyTracking)\n * is `true` (default) and when the tooltip is [shared](#tooltip.shared)\n * or [split](#tooltip.split).\n *\n * @sample {highcharts} highcharts/tooltip/bordercolor-default/\n * 10 px by default\n * @sample {highcharts} highcharts/tooltip/snap-50/\n * 50 px on graph\n *\n * @type {number}\n * @default 10/25\n * @since 1.2.0\n * @product highcharts highstock\n */\n snap: isTouchDevice ? 25 : 10,\n /**\n * The HTML of the tooltip header line. Variables are enclosed by\n * curly brackets. Available variables are `point.key`, `series.name`,\n * `series.color` and other members from the `point` and `series`\n * objects. The `point.key` variable contains the category name, x\n * value or datetime string depending on the type of axis. For datetime\n * axes, the `point.key` date format can be set using\n * `tooltip.xDateFormat`.\n *\n * @sample {highcharts} highcharts/tooltip/footerformat/\n * An HTML table in the tooltip\n * @sample {highstock} highcharts/tooltip/footerformat/\n * An HTML table in the tooltip\n * @sample {highmaps} maps/tooltip/format/\n * Format demo\n *\n * @type {string}\n * @apioption tooltip.headerFormat\n */\n headerFormat: '{point.key}
',\n /**\n * The HTML of the null point's line in the tooltip. Works analogously\n * to [pointFormat](#tooltip.pointFormat).\n *\n * @sample {highcharts} highcharts/plotoptions/series-nullformat\n * Format data label and tooltip for null point.\n *\n * @type {string}\n * @apioption tooltip.nullFormat\n */\n /**\n * The HTML of the point's line in the tooltip. Variables are enclosed\n * by curly brackets. Available variables are `point.x`, `point.y`,\n * `series.name` and `series.color` and other properties on the same\n * form. Furthermore, `point.y` can be extended by the\n * `tooltip.valuePrefix` and `tooltip.valueSuffix` variables. This can\n * also be overridden for each series, which makes it a good hook for\n * displaying units.\n *\n * In styled mode, the dot is colored by a class name rather\n * than the point color.\n *\n * @sample {highcharts} highcharts/tooltip/pointformat/\n * A different point format with value suffix\n * @sample {highcharts|highstock} highcharts/tooltip/pointformat-extra-information/\n * Show extra information about points in the tooltip\n * @sample {highmaps} maps/tooltip/format/\n * Format demo\n *\n * @type {string}\n * @since 2.2\n * @apioption tooltip.pointFormat\n */\n pointFormat: '\\u25CF {series.name}: {point.y}
',\n /**\n * The background color or gradient for the tooltip.\n *\n * In styled mode, the stroke width is set in the\n * `.highcharts-tooltip-box` class.\n *\n * @sample {highcharts} highcharts/tooltip/backgroundcolor-solid/\n * Yellowish background\n * @sample {highcharts} highcharts/tooltip/backgroundcolor-gradient/\n * Gradient\n * @sample {highcharts} highcharts/css/tooltip-border-background/\n * Tooltip in styled mode\n * @sample {highstock} stock/tooltip/general/\n * Custom tooltip\n * @sample {highstock} highcharts/css/tooltip-border-background/\n * Tooltip in styled mode\n * @sample {highmaps} maps/tooltip/background-border/\n * Background and border demo\n * @sample {highmaps} highcharts/css/tooltip-border-background/\n * Tooltip in styled mode\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n */\n backgroundColor: color(\"#f7f7f7\" /* Palette.neutralColor3 */)\n // @todo: Disallow undefined as input for colors\n .setOpacity(0.85).get(),\n /**\n * The pixel width of the tooltip border.\n *\n * In styled mode, the stroke width is set in the\n * `.highcharts-tooltip-box` class.\n *\n * @sample {highcharts} highcharts/tooltip/bordercolor-default/\n * 2px by default\n * @sample {highcharts} highcharts/tooltip/borderwidth/\n * No border (shadow only)\n * @sample {highcharts} highcharts/css/tooltip-border-background/\n * Tooltip in styled mode\n * @sample {highstock} stock/tooltip/general/\n * Custom tooltip\n * @sample {highstock} highcharts/css/tooltip-border-background/\n * Tooltip in styled mode\n * @sample {highmaps} maps/tooltip/background-border/\n * Background and border demo\n * @sample {highmaps} highcharts/css/tooltip-border-background/\n * Tooltip in styled mode\n */\n borderWidth: 1,\n /**\n * Whether to apply a drop shadow to the tooltip.\n *\n * @sample {highcharts} highcharts/tooltip/bordercolor-default/\n * True by default\n * @sample {highcharts} highcharts/tooltip/shadow/\n * False\n * @sample {highmaps} maps/tooltip/positioner/\n * Fixed tooltip position, border and shadow disabled\n *\n * @type {boolean|Highcharts.ShadowOptionsObject}\n */\n shadow: true,\n /**\n * Prevents the tooltip from switching or closing when touched or\n * pointed.\n *\n * @sample highcharts/tooltip/stickoncontact/\n * Tooltip sticks on pointer contact\n *\n * @since 8.0.1\n */\n stickOnContact: false,\n /**\n * CSS styles for the tooltip. The tooltip can also be styled through\n * the CSS class `.highcharts-tooltip`.\n *\n * Note that the default `pointerEvents` style makes the tooltip ignore\n * mouse events, so in order to use clickable tooltips, this value must\n * be set to `auto`.\n *\n * @sample {highcharts} highcharts/tooltip/style/\n * Greater padding, bold text\n *\n * @type {Highcharts.CSSObject}\n */\n style: {\n /** @internal */\n color: \"#333333\" /* Palette.neutralColor80 */,\n /** @internal */\n cursor: 'default',\n /** @internal */\n fontSize: '12px',\n /** @internal */\n whiteSpace: 'nowrap'\n },\n /**\n * Use HTML to render the contents of the tooltip instead of SVG. Using\n * HTML allows advanced formatting like tables and images in the\n * tooltip. It is also recommended for rtl languages as it works around\n * rtl bugs in early Firefox.\n *\n * @sample {highcharts|highstock} highcharts/tooltip/footerformat/\n * A table for value alignment\n * @sample {highcharts|highstock} highcharts/tooltip/fullhtml/\n * Full HTML tooltip\n * @sample {highmaps} maps/tooltip/usehtml/\n * Pure HTML tooltip\n *\n * @since 2.2\n */\n useHTML: false\n },\n /**\n * Highchart by default puts a credits label in the lower right corner\n * of the chart. This can be changed using these options.\n */\n credits: {\n /**\n * Credits for map source to be concatenated with conventional credit\n * text. By default this is a format string that collects copyright\n * information from the map if available.\n *\n * @see [mapTextFull](#credits.mapTextFull)\n * @see [text](#credits.text)\n *\n * @type {string}\n * @default \\u00a9 {geojson.copyrightShort}\n * @since 4.2.2\n * @product highmaps\n * @apioption credits.mapText\n */\n /**\n * Detailed credits for map source to be displayed on hover of credits\n * text. By default this is a format string that collects copyright\n * information from the map if available.\n *\n * @see [mapText](#credits.mapText)\n * @see [text](#credits.text)\n *\n * @type {string}\n * @default {geojson.copyright}\n * @since 4.2.2\n * @product highmaps\n * @apioption credits.mapTextFull\n */\n /**\n * Whether to show the credits text.\n *\n * @sample {highcharts} highcharts/credits/enabled-false/\n * Credits disabled\n * @sample {highstock} stock/credits/enabled/\n * Credits disabled\n * @sample {highmaps} maps/credits/enabled-false/\n * Credits disabled\n */\n enabled: true,\n /**\n * The URL for the credits label.\n *\n * @sample {highcharts} highcharts/credits/href/\n * Custom URL and text\n * @sample {highmaps} maps/credits/customized/\n * Custom URL and text\n */\n href: 'https://www.highcharts.com?credits',\n /**\n * Position configuration for the credits label.\n *\n * @sample {highcharts} highcharts/credits/position-left/\n * Left aligned\n * @sample {highcharts} highcharts/credits/position-left/\n * Left aligned\n * @sample {highmaps} maps/credits/customized/\n * Left aligned\n * @sample {highmaps} maps/credits/customized/\n * Left aligned\n *\n * @type {Highcharts.AlignObject}\n * @since 2.1\n */\n position: {\n /** @internal */\n align: 'right',\n /** @internal */\n x: -10,\n /** @internal */\n verticalAlign: 'bottom',\n /** @internal */\n y: -5\n },\n /**\n * CSS styles for the credits label.\n *\n * @see In styled mode, credits styles can be set with the\n * `.highcharts-credits` class.\n *\n * @type {Highcharts.CSSObject}\n */\n style: {\n /** @internal */\n cursor: 'pointer',\n /** @internal */\n color: \"#999999\" /* Palette.neutralColor40 */,\n /** @internal */\n fontSize: '9px'\n },\n /**\n * The text for the credits label.\n *\n * @productdesc {highmaps}\n * If a map is loaded as GeoJSON, the text defaults to\n * `Highcharts @ {map-credits}`. Otherwise, it defaults to\n * `Highcharts.com`.\n *\n * @sample {highcharts} highcharts/credits/href/\n * Custom URL and text\n * @sample {highmaps} maps/credits/customized/\n * Custom URL and text\n */\n text: 'Highcharts.com'\n }\n};\n/* eslint-disable spaced-comment */\n\ndefaultOptions.chart.styledMode = false;\n\n'';\nvar defaultTime = new Time(merge(defaultOptions.global, defaultOptions.time));\n/**\n * Get the updated default options. Until 3.0.7, merely exposing defaultOptions\n * for outside modules wasn't enough because the setOptions method created a new\n * object.\n *\n * @function Highcharts.getOptions\n *\n * @return {Highcharts.Options}\n * Default options.\n */\nfunction getOptions() {\n return defaultOptions;\n}\n/**\n * Merge the default options with custom options and return the new options\n * structure. Commonly used for defining reusable templates.\n *\n * @sample highcharts/global/useutc-false Setting a global option\n * @sample highcharts/members/setoptions Applying a global theme\n *\n * @function Highcharts.setOptions\n *\n * @param {Highcharts.Options} options\n * The new custom chart options.\n *\n * @return {Highcharts.Options}\n * Updated options.\n */\nfunction setOptions(options) {\n // Copy in the default options\n merge(true, defaultOptions, options);\n // Update the time object\n if (options.time || options.global) {\n if (H.time) {\n H.time.update(merge(defaultOptions.global, defaultOptions.time, options.global, options.time));\n }\n else {\n /**\n * Global `Time` object with default options. Since v6.0.5, time\n * settings can be applied individually for each chart. If no\n * individual settings apply, this `Time` object is shared by all\n * instances.\n *\n * @name Highcharts.time\n * @type {Highcharts.Time}\n */\n H.time = defaultTime;\n }\n }\n return defaultOptions;\n}\n/* *\n *\n * Default Export\n *\n * */\nvar DefaultOptions = {\n defaultOptions: defaultOptions,\n defaultTime: defaultTime,\n getOptions: getOptions,\n setOptions: setOptions\n};\nexport default DefaultOptions;\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * @typedef {\"plotBox\"|\"spacingBox\"} Highcharts.ButtonRelativeToValue\n */\n/**\n * Gets fired when a series is added to the chart after load time, using the\n * `addSeries` method. Returning `false` prevents the series from being added.\n *\n * @callback Highcharts.ChartAddSeriesCallbackFunction\n *\n * @param {Highcharts.Chart} this\n * The chart on which the event occured.\n *\n * @param {Highcharts.ChartAddSeriesEventObject} event\n * The event that occured.\n */\n/**\n * Contains common event information. Through the `options` property you can\n * access the series options that were passed to the `addSeries` method.\n *\n * @interface Highcharts.ChartAddSeriesEventObject\n */ /**\n* The series options that were passed to the `addSeries` method.\n* @name Highcharts.ChartAddSeriesEventObject#options\n* @type {Highcharts.SeriesOptionsType}\n*/ /**\n* Prevents the default behaviour of the event.\n* @name Highcharts.ChartAddSeriesEventObject#preventDefault\n* @type {Function}\n*/ /**\n* The event target.\n* @name Highcharts.ChartAddSeriesEventObject#target\n* @type {Highcharts.Chart}\n*/ /**\n* The event type.\n* @name Highcharts.ChartAddSeriesEventObject#type\n* @type {\"addSeries\"}\n*/\n/**\n * Gets fired when clicking on the plot background.\n *\n * @callback Highcharts.ChartClickCallbackFunction\n *\n * @param {Highcharts.Chart} this\n * The chart on which the event occured.\n *\n * @param {Highcharts.PointerEventObject} event\n * The event that occured.\n */\n/**\n * Contains an axes of the clicked spot.\n *\n * @interface Highcharts.ChartClickEventAxisObject\n */ /**\n* Axis at the clicked spot.\n* @name Highcharts.ChartClickEventAxisObject#axis\n* @type {Highcharts.Axis}\n*/ /**\n* Axis value at the clicked spot.\n* @name Highcharts.ChartClickEventAxisObject#value\n* @type {number}\n*/\n/**\n * Contains information about the clicked spot on the chart. Remember the unit\n * of a datetime axis is milliseconds since 1970-01-01 00:00:00.\n *\n * @interface Highcharts.ChartClickEventObject\n * @extends Highcharts.PointerEventObject\n */ /**\n* Information about the x-axis on the clicked spot.\n* @name Highcharts.ChartClickEventObject#xAxis\n* @type {Array}\n*/ /**\n* Information about the y-axis on the clicked spot.\n* @name Highcharts.ChartClickEventObject#yAxis\n* @type {Array}\n*/ /**\n* Information about the z-axis on the clicked spot.\n* @name Highcharts.ChartClickEventObject#zAxis\n* @type {Array|undefined}\n*/\n/**\n * Gets fired when the chart is finished loading.\n *\n * @callback Highcharts.ChartLoadCallbackFunction\n *\n * @param {Highcharts.Chart} this\n * The chart on which the event occured.\n *\n * @param {global.Event} event\n * The event that occured.\n */\n/**\n * Fires when the chart is redrawn, either after a call to `chart.redraw()` or\n * after an axis, series or point is modified with the `redraw` option set to\n * `true`.\n *\n * @callback Highcharts.ChartRedrawCallbackFunction\n *\n * @param {Highcharts.Chart} this\n * The chart on which the event occured.\n *\n * @param {global.Event} event\n * The event that occured.\n */\n/**\n * Gets fired after initial load of the chart (directly after the `load` event),\n * and after each redraw (directly after the `redraw` event).\n *\n * @callback Highcharts.ChartRenderCallbackFunction\n *\n * @param {Highcharts.Chart} this\n * The chart on which the event occured.\n *\n * @param {global.Event} event\n * The event that occured.\n */\n/**\n * Gets fired when an area of the chart has been selected. The default action\n * for the selection event is to zoom the chart to the selected area. It can be\n * prevented by calling `event.preventDefault()` or return false.\n *\n * @callback Highcharts.ChartSelectionCallbackFunction\n *\n * @param {Highcharts.Chart} this\n * The chart on which the event occured.\n *\n * @param {Highcharts.SelectEventObject} event\n * Event informations\n *\n * @return {boolean|undefined}\n * Return false to prevent the default action, usually zoom.\n */\n(''); // detach doclets above\n","/**\n * Series palettes for Highcharts. Series colors are defined in highcharts.scss.\n * **Do not edit this file!** This file is generated using the 'gulp palette' task.\n */\nvar SeriesPalettes = {\n /**\n * Colors for data series and points.\n */\n colors: [\n '#7cb5ec',\n '#434348',\n '#90ed7d',\n '#f7a35c',\n '#8085e9',\n '#f15c80',\n '#e4d354',\n '#2b908f',\n '#f45b5b',\n '#91e8e1'\n ]\n};\nexport default SeriesPalettes;\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\n/* *\n *\n * API Options\n *\n * */\n/**\n * General options for the chart.\n *\n * @optionparent chart\n */\nvar ChartDefaults = {\n /**\n * Default `mapData` for all series, in terms of a GeoJSON or TopoJSON\n * object. If set to a string, it functions as an index into the\n * `Highcharts.maps` array.\n *\n * For picking out individual shapes and geometries to use for each series\n * of the map, see [series.mapData](#series.map.mapData).\n *\n * @sample maps/demo/geojson\n * Loading GeoJSON data\n * @sample maps/chart/topojson\n * Loading TopoJSON data\n *\n * @type {string|Array<*>|Highcharts.GeoJSON|Highcharts.TopoJSON}\n * @since 5.0.0\n * @product highmaps\n * @apioption chart.map\n */\n /**\n * Set lat/lon transformation definitions for the chart. If not defined,\n * these are extracted from the map data.\n *\n * @type {*}\n * @since 5.0.0\n * @product highmaps\n * @apioption chart.mapTransforms\n */\n /**\n * When using multiple axes, the ticks of two or more opposite axes\n * will automatically be aligned by adding ticks to the axis or axes\n * with the least ticks, as if `tickAmount` were specified.\n *\n * This can be prevented by setting `alignTicks` to false. If the grid\n * lines look messy, it's a good idea to hide them for the secondary\n * axis by setting `gridLineWidth` to 0.\n *\n * If `startOnTick` or `endOnTick` in the axis options are set to false,\n * then the `alignTicks ` will be disabled for the axis.\n *\n * Disabled for logarithmic axes.\n *\n * @sample {highcharts} highcharts/chart/alignticks-true/\n * True by default\n * @sample {highcharts} highcharts/chart/alignticks-false/\n * False\n * @sample {highstock} stock/chart/alignticks-true/\n * True by default\n * @sample {highstock} stock/chart/alignticks-false/\n * False\n *\n * @type {boolean}\n * @default true\n * @product highcharts highstock gantt\n * @apioption chart.alignTicks\n */\n /**\n * When using multiple axes, align the thresholds. When this is true, other\n * ticks will also be aligned.\n *\n * Note that for line series and some other series types, the `threshold`\n * option is set to `null` by default. This will in turn cause their y-axis\n * to not have a threshold. In order to avoid that, set the series\n * `threshold` to 0 or another number.\n *\n * If `startOnTick` or `endOnTick` in the axis options are set to false, or\n * if the axis is logarithmic, the threshold will not be aligned.\n *\n * @sample {highcharts} highcharts/chart/alignthresholds/ Set to true\n *\n * @since 10.0.0\n * @product highcharts highstock gantt\n * @apioption chart.alignThresholds\n */\n alignThresholds: false,\n /**\n * Set the overall animation for all chart updating. Animation can be\n * disabled throughout the chart by setting it to false here. It can\n * be overridden for each individual API method as a function parameter.\n * The only animation not affected by this option is the initial series\n * animation, see [plotOptions.series.animation](\n * #plotOptions.series.animation).\n *\n * The animation can either be set as a boolean or a configuration\n * object. If `true`, it will use the 'swing' jQuery easing and a\n * duration of 500 ms. If used as a configuration object, the following\n * properties are supported:\n *\n * - `defer`: The animation delay time in milliseconds.\n *\n * - `duration`: The duration of the animation in milliseconds.\n *\n * - `easing`: A string reference to an easing function set on the\n * `Math` object. See\n * [the easing demo](https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/plotoptions/series-animation-easing/).\n *\n * When zooming on a series with less than 100 points, the chart redraw\n * will be done with animation, but in case of more data points, it is\n * necessary to set this option to ensure animation on zoom.\n *\n * @sample {highcharts} highcharts/chart/animation-none/\n * Updating with no animation\n * @sample {highcharts} highcharts/chart/animation-duration/\n * With a longer duration\n * @sample {highcharts} highcharts/chart/animation-easing/\n * With a jQuery UI easing\n * @sample {highmaps} maps/chart/animation-none/\n * Updating with no animation\n * @sample {highmaps} maps/chart/animation-duration/\n * With a longer duration\n *\n * @type {boolean|Partial}\n * @default undefined\n * @apioption chart.animation\n */\n /**\n * A CSS class name to apply to the charts container `div`, allowing\n * unique CSS styling for each chart.\n *\n * @type {string}\n * @apioption chart.className\n */\n /**\n * Event listeners for the chart.\n *\n * @apioption chart.events\n */\n /**\n * Fires when a series is added to the chart after load time, using the\n * `addSeries` method. One parameter, `event`, is passed to the\n * function, containing common event information. Through\n * `event.options` you can access the series options that were passed to\n * the `addSeries` method. Returning false prevents the series from\n * being added.\n *\n * @sample {highcharts} highcharts/chart/events-addseries/\n * Alert on add series\n * @sample {highstock} stock/chart/events-addseries/\n * Alert on add series\n *\n * @type {Highcharts.ChartAddSeriesCallbackFunction}\n * @since 1.2.0\n * @context Highcharts.Chart\n * @apioption chart.events.addSeries\n */\n /**\n * Fires when clicking on the plot background. One parameter, `event`,\n * is passed to the function, containing common event information.\n *\n * Information on the clicked spot can be found through `event.xAxis`\n * and `event.yAxis`, which are arrays containing the axes of each\n * dimension and each axis' value at the clicked spot. The primary axes\n * are `event.xAxis[0]` and `event.yAxis[0]`. Remember the unit of a\n * datetime axis is milliseconds since 1970-01-01 00:00:00.\n *\n * ```js\n * click: function(e) {\n * console.log(\n * Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', e.xAxis[0].value),\n * e.yAxis[0].value\n * )\n * }\n * ```\n *\n * @sample {highcharts} highcharts/chart/events-click/\n * Alert coordinates on click\n * @sample {highcharts} highcharts/chart/events-container/\n * Alternatively, attach event to container\n * @sample {highstock} stock/chart/events-click/\n * Alert coordinates on click\n * @sample {highstock} highcharts/chart/events-container/\n * Alternatively, attach event to container\n * @sample {highmaps} maps/chart/events-click/\n * Record coordinates on click\n * @sample {highmaps} highcharts/chart/events-container/\n * Alternatively, attach event to container\n *\n * @type {Highcharts.ChartClickCallbackFunction}\n * @since 1.2.0\n * @context Highcharts.Chart\n * @apioption chart.events.click\n */\n /**\n * Fires when the chart is finished loading. Since v4.2.2, it also waits\n * for images to be loaded, for example from point markers. One\n * parameter, `event`, is passed to the function, containing common\n * event information.\n *\n * There is also a second parameter to the chart constructor where a\n * callback function can be passed to be executed on chart.load.\n *\n * @sample {highcharts} highcharts/chart/events-load/\n * Alert on chart load\n * @sample {highstock} stock/chart/events-load/\n * Alert on chart load\n * @sample {highmaps} maps/chart/events-load/\n * Add series on chart load\n *\n * @type {Highcharts.ChartLoadCallbackFunction}\n * @context Highcharts.Chart\n * @apioption chart.events.load\n */\n /**\n * Fires when the chart is redrawn, either after a call to\n * `chart.redraw()` or after an axis, series or point is modified with\n * the `redraw` option set to `true`. One parameter, `event`, is passed\n * to the function, containing common event information.\n *\n * @sample {highcharts} highcharts/chart/events-redraw/\n * Alert on chart redraw\n * @sample {highstock} stock/chart/events-redraw/\n * Alert on chart redraw when adding a series or moving the\n * zoomed range\n * @sample {highmaps} maps/chart/events-redraw/\n * Set subtitle on chart redraw\n *\n * @type {Highcharts.ChartRedrawCallbackFunction}\n * @since 1.2.0\n * @context Highcharts.Chart\n * @apioption chart.events.redraw\n */\n /**\n * Fires after initial load of the chart (directly after the `load`\n * event), and after each redraw (directly after the `redraw` event).\n *\n * @type {Highcharts.ChartRenderCallbackFunction}\n * @since 5.0.7\n * @context Highcharts.Chart\n * @apioption chart.events.render\n */\n /**\n * Fires when an area of the chart has been selected. Selection is\n * enabled by setting the chart's zoomType. One parameter, `event`, is\n * passed to the function, containing common event information. The\n * default action for the selection event is to zoom the chart to the\n * selected area. It can be prevented by calling\n * `event.preventDefault()` or return false.\n *\n * Information on the selected area can be found through `event.xAxis`\n * and `event.yAxis`, which are arrays containing the axes of each\n * dimension and each axis' min and max values. The primary axes are\n * `event.xAxis[0]` and `event.yAxis[0]`. Remember the unit of a\n * datetime axis is milliseconds since 1970-01-01 00:00:00.\n *\n * ```js\n * selection: function(event) {\n * // log the min and max of the primary, datetime x-axis\n * console.log(\n * Highcharts.dateFormat(\n * '%Y-%m-%d %H:%M:%S',\n * event.xAxis[0].min\n * ),\n * Highcharts.dateFormat(\n * '%Y-%m-%d %H:%M:%S',\n * event.xAxis[0].max\n * )\n * );\n * // log the min and max of the y axis\n * console.log(event.yAxis[0].min, event.yAxis[0].max);\n * }\n * ```\n *\n * @sample {highcharts} highcharts/chart/events-selection/\n * Report on selection and reset\n * @sample {highcharts} highcharts/chart/events-selection-points/\n * Select a range of points through a drag selection\n * @sample {highstock} stock/chart/events-selection/\n * Report on selection and reset\n * @sample {highstock} highcharts/chart/events-selection-points/\n * Select a range of points through a drag selection\n * (Highcharts)\n *\n * @type {Highcharts.ChartSelectionCallbackFunction}\n * @apioption chart.events.selection\n */\n /**\n * The margin between the outer edge of the chart and the plot area.\n * The numbers in the array designate top, right, bottom and left\n * respectively. Use the options `marginTop`, `marginRight`,\n * `marginBottom` and `marginLeft` for shorthand setting of one option.\n *\n * By default there is no margin. The actual space is dynamically\n * calculated from the offset of axis labels, axis title, title,\n * subtitle and legend in addition to the `spacingTop`, `spacingRight`,\n * `spacingBottom` and `spacingLeft` options.\n *\n * @sample {highcharts} highcharts/chart/margins-zero/\n * Zero margins\n * @sample {highstock} stock/chart/margin-zero/\n * Zero margins\n *\n * @type {number|Array}\n * @apioption chart.margin\n */\n /**\n * The margin between the bottom outer edge of the chart and the plot\n * area. Use this to set a fixed pixel value for the margin as opposed\n * to the default dynamic margin. See also `spacingBottom`.\n *\n * @sample {highcharts} highcharts/chart/marginbottom/\n * 100px bottom margin\n * @sample {highstock} stock/chart/marginbottom/\n * 100px bottom margin\n * @sample {highmaps} maps/chart/margin/\n * 100px margins\n *\n * @type {number}\n * @since 2.0\n * @apioption chart.marginBottom\n */\n /**\n * The margin between the left outer edge of the chart and the plot\n * area. Use this to set a fixed pixel value for the margin as opposed\n * to the default dynamic margin. See also `spacingLeft`.\n *\n * @sample {highcharts} highcharts/chart/marginleft/\n * 150px left margin\n * @sample {highstock} stock/chart/marginleft/\n * 150px left margin\n * @sample {highmaps} maps/chart/margin/\n * 100px margins\n *\n * @type {number}\n * @since 2.0\n * @apioption chart.marginLeft\n */\n /**\n * The margin between the right outer edge of the chart and the plot\n * area. Use this to set a fixed pixel value for the margin as opposed\n * to the default dynamic margin. See also `spacingRight`.\n *\n * @sample {highcharts} highcharts/chart/marginright/\n * 100px right margin\n * @sample {highstock} stock/chart/marginright/\n * 100px right margin\n * @sample {highmaps} maps/chart/margin/\n * 100px margins\n *\n * @type {number}\n * @since 2.0\n * @apioption chart.marginRight\n */\n /**\n * The margin between the top outer edge of the chart and the plot area.\n * Use this to set a fixed pixel value for the margin as opposed to\n * the default dynamic margin. See also `spacingTop`.\n *\n * @sample {highcharts} highcharts/chart/margintop/ 100px top margin\n * @sample {highstock} stock/chart/margintop/\n * 100px top margin\n * @sample {highmaps} maps/chart/margin/\n * 100px margins\n *\n * @type {number}\n * @since 2.0\n * @apioption chart.marginTop\n */\n /**\n * Callback function to override the default function that formats all\n * the numbers in the chart. Returns a string with the formatted number.\n *\n * @sample highcharts/members/highcharts-numberformat\n * Arabic digits in Highcharts\n * @type {Highcharts.NumberFormatterCallbackFunction}\n * @since 8.0.0\n * @apioption chart.numberFormatter\n */\n /**\n * Allows setting a key to switch between zooming and panning. Can be\n * one of `alt`, `ctrl`, `meta` (the command key on Mac and Windows\n * key on Windows) or `shift`. The keys are mapped directly to the key\n * properties of the click event argument (`event.altKey`,\n * `event.ctrlKey`, `event.metaKey` and `event.shiftKey`).\n *\n * @type {string}\n * @since 4.0.3\n * @product highcharts gantt\n * @validvalue [\"alt\", \"ctrl\", \"meta\", \"shift\"]\n * @apioption chart.panKey\n */\n /**\n * Allow panning in a chart. Best used with [panKey](#chart.panKey)\n * to combine zooming and panning.\n *\n * On touch devices, when the [tooltip.followTouchMove](\n * #tooltip.followTouchMove) option is `true` (default), panning\n * requires two fingers. To allow panning with one finger, set\n * `followTouchMove` to `false`.\n *\n * @sample {highcharts} highcharts/chart/pankey/ Zooming and panning\n * @sample {highstock} stock/chart/panning/ Zooming and xy panning\n */\n panning: {\n /**\n * Enable or disable chart panning.\n *\n * @type {boolean}\n * @default {highcharts} false\n * @default {highstock|highmaps} true\n */\n enabled: false,\n /**\n * Decides in what dimensions the user can pan the chart. Can be\n * one of `x`, `y`, or `xy`.\n *\n * @sample {highcharts} highcharts/chart/panning-type\n * Zooming and xy panning\n *\n * @declare Highcharts.OptionsChartPanningTypeValue\n * @type {string}\n * @validvalue [\"x\", \"y\", \"xy\"]\n * @default {highcharts|highstock} x\n * @product highcharts highstock gantt\n */\n type: 'x'\n },\n /**\n * Equivalent to [zoomType](#chart.zoomType), but for multitouch\n * gestures only. By default, the `pinchType` is the same as the\n * `zoomType` setting. However, pinching can be enabled separately in\n * some cases, for example in stock charts where a mouse drag pans the\n * chart, while pinching is enabled. When [tooltip.followTouchMove](\n * #tooltip.followTouchMove) is true, pinchType only applies to\n * two-finger touches.\n *\n * @type {string}\n * @default {highcharts} undefined\n * @default {highstock} x\n * @since 3.0\n * @product highcharts highstock gantt\n * @deprecated\n * @validvalue [\"x\", \"y\", \"xy\"]\n * @apioption chart.pinchType\n */\n /**\n * Whether to apply styled mode. When in styled mode, no presentational\n * attributes or CSS are applied to the chart SVG. Instead, CSS rules\n * are required to style the chart. The default style sheet is\n * available from `https://code.highcharts.com/css/highcharts.css`.\n *\n * @type {boolean}\n * @default false\n * @since 7.0\n * @apioption chart.styledMode\n */\n styledMode: false,\n /**\n * The corner radius of the outer chart border.\n *\n * @sample {highcharts} highcharts/chart/borderradius/\n * 20px radius\n * @sample {highstock} stock/chart/border/\n * 10px radius\n * @sample {highmaps} maps/chart/border/\n * Border options\n *\n */\n borderRadius: 0,\n /**\n * In styled mode, this sets how many colors the class names\n * should rotate between. With ten colors, series (or points) are\n * given class names like `highcharts-color-0`, `highcharts-color-1`\n * [...] `highcharts-color-9`. The equivalent in non-styled mode\n * is to set colors using the [colors](#colors) setting.\n *\n * @since 5.0.0\n */\n colorCount: 10,\n /**\n * By default, (because of memory and performance reasons) the chart does\n * not copy the data but keeps it as a reference. In some cases, this might\n * result in mutating the original data source. In order to prevent that,\n * set that property to false. Please note that changing that might decrease\n * performance, especially with bigger sets of data.\n *\n * @type {boolean}\n * @since 10.1.0\n */\n allowMutatingData: true,\n /**\n * Alias of `type`.\n *\n * @sample {highcharts} highcharts/chart/defaultseriestype/\n * Bar\n *\n * @deprecated\n *\n * @product highcharts\n */\n defaultSeriesType: 'line',\n /**\n * If true, the axes will scale to the remaining visible series once\n * one series is hidden. If false, hiding and showing a series will\n * not affect the axes or the other series. For stacks, once one series\n * within the stack is hidden, the rest of the stack will close in\n * around it even if the axis is not affected.\n *\n * @sample {highcharts} highcharts/chart/ignorehiddenseries-true/\n * True by default\n * @sample {highcharts} highcharts/chart/ignorehiddenseries-false/\n * False\n * @sample {highcharts} highcharts/chart/ignorehiddenseries-true-stacked/\n * True with stack\n * @sample {highstock} stock/chart/ignorehiddenseries-true/\n * True by default\n * @sample {highstock} stock/chart/ignorehiddenseries-false/\n * False\n *\n * @since 1.2.0\n * @product highcharts highstock gantt\n */\n ignoreHiddenSeries: true,\n /**\n * Whether to invert the axes so that the x axis is vertical and y axis\n * is horizontal. When `true`, the x axis is [reversed](#xAxis.reversed)\n * by default.\n *\n * @productdesc {highcharts}\n * If a bar series is present in the chart, it will be inverted\n * automatically. Inverting the chart doesn't have an effect if there\n * are no cartesian series in the chart, or if the chart is\n * [polar](#chart.polar).\n *\n * @sample {highcharts} highcharts/chart/inverted/\n * Inverted line\n * @sample {highstock} stock/navigator/inverted/\n * Inverted stock chart\n *\n * @type {boolean}\n * @default false\n * @product highcharts highstock gantt\n * @apioption chart.inverted\n */\n /**\n * The distance between the outer edge of the chart and the content,\n * like title or legend, or axis title and labels if present. The\n * numbers in the array designate top, right, bottom and left\n * respectively. Use the options spacingTop, spacingRight, spacingBottom\n * and spacingLeft options for shorthand setting of one option.\n *\n * @type {Array}\n * @see [chart.margin](#chart.margin)\n * @default [10, 10, 15, 10]\n * @since 3.0.6\n */\n spacing: [10, 10, 15, 10],\n /**\n * The button that appears after a selection zoom, allowing the user\n * to reset zoom.\n *\n * @since 2.2\n * @deprecated 10.2.1\n */\n resetZoomButton: {\n /**\n * What frame the button placement should be related to. Can be\n * either `plotBox` or `spacingBox`.\n *\n * @sample {highcharts} highcharts/chart/resetzoombutton-relativeto/\n * Relative to the chart\n * @sample {highstock} highcharts/chart/resetzoombutton-relativeto/\n * Relative to the chart\n *\n * @type {Highcharts.ButtonRelativeToValue}\n * @default plot\n * @apioption chart.resetZoomButton.relativeTo\n */\n /**\n * A collection of attributes for the button. The object takes SVG\n * attributes like `fill`, `stroke`, `stroke-width` or `r`, the\n * border radius. The theme also supports `style`, a collection of\n * CSS properties for the text. Equivalent attributes for the hover\n * state are given in `theme.states.hover`.\n *\n * @sample {highcharts} highcharts/chart/resetzoombutton-theme/\n * Theming the button\n * @sample {highstock} highcharts/chart/resetzoombutton-theme/\n * Theming the button\n *\n * @type {Highcharts.SVGAttributes}\n */\n theme: {\n /**\n * @internal\n */\n zIndex: 6\n },\n /**\n * The position of the button.\n *\n * @sample {highcharts} highcharts/chart/resetzoombutton-position/\n * Above the plot area\n * @sample {highstock} highcharts/chart/resetzoombutton-position/\n * Above the plot area\n * @sample {highmaps} highcharts/chart/resetzoombutton-position/\n * Above the plot area\n *\n * @type {Highcharts.AlignObject}\n */\n position: {\n /**\n * The horizontal alignment of the button.\n */\n align: 'right',\n /**\n * The horizontal offset of the button.\n */\n x: -10,\n /**\n * The vertical alignment of the button.\n *\n * @type {Highcharts.VerticalAlignValue}\n * @default top\n * @apioption chart.resetZoomButton.position.verticalAlign\n */\n /**\n * The vertical offset of the button.\n */\n y: 10\n }\n },\n /**\n * The pixel width of the plot area border.\n *\n * @sample {highcharts} highcharts/chart/plotborderwidth/\n * 1px border\n * @sample {highstock} stock/chart/plotborder/\n * 2px border\n * @sample {highmaps} maps/chart/plotborder/\n * Plot border options\n *\n * @type {number}\n * @default 0\n * @apioption chart.plotBorderWidth\n */\n /**\n * Whether to apply a drop shadow to the plot area. Requires that\n * plotBackgroundColor be set. The shadow can be an object configuration\n * containing `color`, `offsetX`, `offsetY`, `opacity` and `width`.\n *\n * @sample {highcharts} highcharts/chart/plotshadow/\n * Plot shadow\n * @sample {highstock} stock/chart/plotshadow/\n * Plot shadow\n * @sample {highmaps} maps/chart/plotborder/\n * Plot border options\n *\n * @type {boolean|Highcharts.CSSObject}\n * @default false\n * @apioption chart.plotShadow\n */\n /**\n * When true, cartesian charts like line, spline, area and column are\n * transformed into the polar coordinate system. This produces _polar\n * charts_, also known as _radar charts_.\n *\n * @sample {highcharts} highcharts/demo/polar/\n * Polar chart\n * @sample {highcharts} highcharts/demo/polar-wind-rose/\n * Wind rose, stacked polar column chart\n * @sample {highcharts} highcharts/demo/polar-spider/\n * Spider web chart\n * @sample {highcharts} highcharts/parallel-coordinates/polar/\n * Star plot, multivariate data in a polar chart\n *\n * @type {boolean}\n * @default false\n * @since 2.3.0\n * @product highcharts\n * @requires highcharts-more\n * @apioption chart.polar\n */\n /**\n * Whether to reflow the chart to fit the width of the container div\n * on resizing the window.\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n * True by default\n * @sample {highcharts} highcharts/chart/reflow-false/\n * False\n * @sample {highstock} stock/chart/reflow-true/\n * True by default\n * @sample {highstock} stock/chart/reflow-false/\n * False\n * @sample {highmaps} maps/chart/reflow-true/\n * True by default\n * @sample {highmaps} maps/chart/reflow-false/\n * False\n *\n * @type {boolean}\n * @default true\n * @since 2.1\n * @apioption chart.reflow\n */\n /**\n * The HTML element where the chart will be rendered. If it is a string,\n * the element by that id is used. The HTML element can also be passed\n * by direct reference, or as the first argument of the chart\n * constructor, in which case the option is not needed.\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n * String\n * @sample {highcharts} highcharts/chart/renderto-object/\n * Object reference\n * @sample {highstock} stock/chart/renderto-string/\n * String\n * @sample {highstock} stock/chart/renderto-object/\n * Object reference\n *\n * @type {string|Highcharts.HTMLDOMElement}\n * @apioption chart.renderTo\n */\n /**\n * The background color of the marker square when selecting (zooming\n * in on) an area of the chart.\n *\n * @see In styled mode, the selection marker fill is set with the\n * `.highcharts-selection-marker` class.\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @default rgba(51,92,173,0.25)\n * @since 2.1.7\n * @apioption chart.selectionMarkerFill\n */\n /**\n * Whether to apply a drop shadow to the outer chart area. Requires\n * that backgroundColor be set. The shadow can be an object\n * configuration containing `color`, `offsetX`, `offsetY`, `opacity` and\n * `width`.\n *\n * @sample {highcharts} highcharts/chart/shadow/\n * Shadow\n * @sample {highstock} stock/chart/shadow/\n * Shadow\n * @sample {highmaps} maps/chart/border/\n * Chart border and shadow\n *\n * @type {boolean|Highcharts.CSSObject}\n * @default false\n * @apioption chart.shadow\n */\n /**\n * Whether to show the axes initially. This only applies to empty charts\n * where series are added dynamically, as axes are automatically added\n * to cartesian series.\n *\n * @sample {highcharts} highcharts/chart/showaxes-false/\n * False by default\n * @sample {highcharts} highcharts/chart/showaxes-true/\n * True\n *\n * @type {boolean}\n * @since 1.2.5\n * @product highcharts gantt\n * @apioption chart.showAxes\n */\n /**\n * The space between the bottom edge of the chart and the content (plot\n * area, axis title and labels, title, subtitle or legend in top\n * position).\n *\n * @sample {highcharts} highcharts/chart/spacingbottom/\n * Spacing bottom set to 100\n * @sample {highstock} stock/chart/spacingbottom/\n * Spacing bottom set to 100\n * @sample {highmaps} maps/chart/spacing/\n * Spacing 100 all around\n *\n * @type {number}\n * @default 15\n * @since 2.1\n * @apioption chart.spacingBottom\n */\n /**\n * The space between the left edge of the chart and the content (plot\n * area, axis title and labels, title, subtitle or legend in top\n * position).\n *\n * @sample {highcharts} highcharts/chart/spacingleft/\n * Spacing left set to 100\n * @sample {highstock} stock/chart/spacingleft/\n * Spacing left set to 100\n * @sample {highmaps} maps/chart/spacing/\n * Spacing 100 all around\n *\n * @type {number}\n * @default 10\n * @since 2.1\n * @apioption chart.spacingLeft\n */\n /**\n * The space between the right edge of the chart and the content (plot\n * area, axis title and labels, title, subtitle or legend in top\n * position).\n *\n * @sample {highcharts} highcharts/chart/spacingright-100/\n * Spacing set to 100\n * @sample {highcharts} highcharts/chart/spacingright-legend/\n * Legend in right position with default spacing\n * @sample {highstock} stock/chart/spacingright/\n * Spacing set to 100\n * @sample {highmaps} maps/chart/spacing/\n * Spacing 100 all around\n *\n * @type {number}\n * @default 10\n * @since 2.1\n * @apioption chart.spacingRight\n */\n /**\n * The space between the top edge of the chart and the content (plot\n * area, axis title and labels, title, subtitle or legend in top\n * position).\n *\n * @sample {highcharts} highcharts/chart/spacingtop-100/\n * A top spacing of 100\n * @sample {highcharts} highcharts/chart/spacingtop-10/\n * Floating chart title makes the plot area align to the default\n * spacingTop of 10.\n * @sample {highstock} stock/chart/spacingtop/\n * A top spacing of 100\n * @sample {highmaps} maps/chart/spacing/\n * Spacing 100 all around\n *\n * @type {number}\n * @default 10\n * @since 2.1\n * @apioption chart.spacingTop\n */\n /**\n * Additional CSS styles to apply inline to the container `div`. Note\n * that since the default font styles are applied in the renderer, it\n * is ignorant of the individual chart options and must be set globally.\n * Also note that changing the font size in the `chart.style` options only\n * applies to those elements that do not have a specific `fontSize` setting.\n *\n * @see In styled mode, general chart styles can be set with the\n * `.highcharts-root` class.\n * @sample {highcharts} highcharts/chart/style-serif-font/\n * Using a serif type font\n * @sample {highcharts} highcharts/css/em/\n * Styled mode with relative font sizes\n * @sample {highstock} stock/chart/style/\n * Using a serif type font\n * @sample {highmaps} maps/chart/style-serif-font/\n * Using a serif type font\n *\n * @type {Highcharts.CSSObject}\n * @default {\"fontFamily\": \"\\\"Lucida Grande\\\", \\\"Lucida Sans Unicode\\\", Verdana, Arial, Helvetica, sans-serif\",\"fontSize\":\"12px\"}\n * @apioption chart.style\n */\n /**\n * The default series type for the chart. Can be any of the chart types\n * listed under [plotOptions](#plotOptions) and [series](#series) or can\n * be a series provided by an additional module.\n *\n * In TypeScript this option has no effect in sense of typing and\n * instead the `type` option must always be set in the series.\n *\n * @sample {highcharts} highcharts/chart/type-bar/\n * Bar\n * @sample {highstock} stock/chart/type/\n * Areaspline\n * @sample {highmaps} maps/chart/type-mapline/\n * Mapline\n *\n * @type {string}\n * @default {highcharts} line\n * @default {highstock} line\n * @default {highmaps} map\n * @since 2.1.0\n * @apioption chart.type\n */\n /**\n * Decides in what dimensions the user can zoom by dragging the mouse.\n * Can be one of `x`, `y` or `xy`.\n *\n * @see [panKey](#chart.panKey)\n *\n * @sample {highcharts} highcharts/chart/zoomtype-none/\n * None by default\n * @sample {highcharts} highcharts/chart/zoomtype-x/\n * X\n * @sample {highcharts} highcharts/chart/zoomtype-y/\n * Y\n * @sample {highcharts} highcharts/chart/zoomtype-xy/\n * Xy\n * @sample {highcharts} highcharts/chart/zoomtype-polar/\n * Zoom on polar chart\n * @sample {highstock} stock/demo/basic-line/\n * None by default\n * @sample {highstock} stock/chart/zoomtype-x/\n * X\n * @sample {highstock} stock/chart/zoomtype-y/\n * Y\n * @sample {highstock} stock/chart/zoomtype-xy/\n * Xy\n * @sample {highmaps} maps/chart/zoomtype-xy/\n * Map with selection zoom\n *\n * @type {string}\n * @validvalue [\"x\", \"y\", \"xy\"]\n * @deprecated\n * @apioption chart.zoomType\n */\n /**\n * Enables zooming by a single touch, in combination with\n * [chart.zoomType](#chart.zoomType). When enabled, two-finger pinch\n * will still work as set up by [chart.pinchType](#chart.pinchType).\n * However, `zoomBySingleTouch` will interfere with touch-dragging the\n * chart to read the tooltip. And especially when vertical zooming is\n * enabled, it will make it hard to scroll vertically on the page.\n * @since 9.0.0\n * @sample highcharts/chart/zoombysingletouch\n * Zoom by single touch enabled, with buttons to toggle\n * @product highcharts highstock gantt\n * @deprecated\n */\n zoomBySingleTouch: false,\n /**\n * Chart zooming options.\n * @since 10.2.1\n */\n zooming: {\n /**\n * Equivalent to [type](#chart.zooming.type), but for multitouch\n * gestures only. By default, the `pinchType` is the same as the\n * `type` setting. However, pinching can be enabled separately in\n * some cases, for example in stock charts where a mouse drag pans the\n * chart, while pinching is enabled. When [tooltip.followTouchMove](\n * #tooltip.followTouchMove) is true, pinchType only applies to\n * two-finger touches.\n *\n * @type {string}\n * @default {highcharts} undefined\n * @default {highstock} x\n * @product highcharts highstock gantt\n * @validvalue [\"x\", \"y\", \"xy\"]\n * @apioption chart.zooming.pinchType\n */\n /**\n * Decides in what dimensions the user can zoom by dragging the mouse.\n * Can be one of `x`, `y` or `xy`.\n *\n * @declare Highcharts.OptionsChartZoomingTypeValue\n * @type {string}\n * @default {highcharts} undefined\n * @product highcharts highstock gantt\n * @validvalue [\"x\", \"y\", \"xy\"]\n * @apioption chart.zooming.type\n */\n /**\n * Set a key to hold when dragging to zoom the chart. This is useful to\n * avoid zooming while moving points. Should be set different than\n * [chart.panKey](#chart.panKey).\n *\n * @type {string}\n * @default {highcharts} undefined\n * @validvalue [\"alt\", \"ctrl\", \"meta\", \"shift\"]\n * @requires modules/draggable-points\n * @apioption chart.zooming.key\n */\n /**\n * Enables zooming by a single touch, in combination with\n * [chart.zooming.type](#chart.zooming.type). When enabled, two-finger\n * pinch will still work as set up by [chart.zooming.pinchType]\n * (#chart.zooming.pinchType). However, `singleTouch` will interfere\n * with touch-dragging the chart to read the tooltip. And especially\n * when vertical zooming is enabled, it will make it hard to scroll\n * vertically on the page.\n *\n * @sample highcharts/chart/zoombysingletouch\n * Zoom by single touch enabled, with buttons to toggle\n *\n * @product highcharts highstock gantt\n */\n singleTouch: false,\n /**\n * The button that appears after a selection zoom, allowing the user\n * to reset zoom.\n */\n resetButton: {\n /**\n * What frame the button placement should be related to. Can be\n * either `plotBox` or `spacingBox`.\n *\n * @sample {highcharts} highcharts/chart/resetzoombutton-relativeto/\n * Relative to the chart\n * @sample {highstock} highcharts/chart/resetzoombutton-relativeto/\n * Relative to the chart\n *\n * @type {Highcharts.ButtonRelativeToValue}\n * @default plot\n * @apioption chart.zooming.resetButton.relativeTo\n */\n /**\n * A collection of attributes for the button. The object takes SVG\n * attributes like `fill`, `stroke`, `stroke-width` or `r`, the\n * border radius. The theme also supports `style`, a collection of\n * CSS properties for the text. Equivalent attributes for the hover\n * state are given in `theme.states.hover`.\n *\n * @sample {highcharts} highcharts/chart/resetzoombutton-theme/\n * Theming the button\n * @sample {highstock} highcharts/chart/resetzoombutton-theme/\n * Theming the button\n *\n * @type {Highcharts.SVGAttributes}\n * @since 10.2.1\n */\n theme: {\n /** @internal */\n zIndex: 6\n },\n /**\n * The position of the button.\n *\n * @sample {highcharts} highcharts/chart/resetzoombutton-position/\n * Above the plot area\n * @sample {highstock} highcharts/chart/resetzoombutton-position/\n * Above the plot area\n * @sample {highmaps} highcharts/chart/resetzoombutton-position/\n * Above the plot area\n *\n * @type {Highcharts.AlignObject}\n * @since 10.2.1\n */\n position: {\n /**\n * The horizontal alignment of the button.\n */\n align: 'right',\n /**\n * The horizontal offset of the button.\n */\n x: -10,\n /**\n * The vertical alignment of the button.\n *\n * @type {Highcharts.VerticalAlignValue}\n * @default top\n * @apioption chart.zooming.resetButton.position.verticalAlign\n */\n /**\n * The vertical offset of the button.\n */\n y: 10\n }\n }\n },\n /**\n * An explicit width for the chart. By default (when `null`) the width\n * is calculated from the offset width of the containing element.\n *\n * @sample {highcharts} highcharts/chart/width/\n * 800px wide\n * @sample {highstock} stock/chart/width/\n * 800px wide\n * @sample {highmaps} maps/chart/size/\n * Chart with explicit size\n *\n * @type {null|number|string}\n */\n width: null,\n /**\n * An explicit height for the chart. If a _number_, the height is\n * given in pixels. If given a _percentage string_ (for example\n * `'56%'`), the height is given as the percentage of the actual chart\n * width. This allows for preserving the aspect ratio across responsive\n * sizes.\n *\n * By default (when `null`) the height is calculated from the offset\n * height of the containing element, or 400 pixels if the containing\n * element's height is 0.\n *\n * @sample {highcharts} highcharts/chart/height/\n * 500px height\n * @sample {highstock} stock/chart/height/\n * 300px height\n * @sample {highmaps} maps/chart/size/\n * Chart with explicit size\n * @sample highcharts/chart/height-percent/\n * Highcharts with percentage height\n *\n * @type {null|number|string}\n */\n height: null,\n /**\n * The color of the outer chart border.\n *\n * @see In styled mode, the stroke is set with the\n * `.highcharts-background` class.\n *\n * @sample {highcharts} highcharts/chart/bordercolor/\n * Brown border\n * @sample {highstock} stock/chart/border/\n * Brown border\n * @sample {highmaps} maps/chart/border/\n * Border options\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n */\n borderColor: \"#335cad\" /* Palette.highlightColor80 */,\n /**\n * The pixel width of the outer chart border.\n *\n * @see In styled mode, the stroke is set with the\n * `.highcharts-background` class.\n *\n * @sample {highcharts} highcharts/chart/borderwidth/\n * 5px border\n * @sample {highstock} stock/chart/border/\n * 2px border\n * @sample {highmaps} maps/chart/border/\n * Border options\n *\n * @type {number}\n * @default 0\n * @apioption chart.borderWidth\n */\n /**\n * The background color or gradient for the outer chart area.\n *\n * @see In styled mode, the background is set with the\n * `.highcharts-background` class.\n *\n * @sample {highcharts} highcharts/chart/backgroundcolor-color/\n * Color\n * @sample {highcharts} highcharts/chart/backgroundcolor-gradient/\n * Gradient\n * @sample {highstock} stock/chart/backgroundcolor-color/\n * Color\n * @sample {highstock} stock/chart/backgroundcolor-gradient/\n * Gradient\n * @sample {highmaps} maps/chart/backgroundcolor-color/\n * Color\n * @sample {highmaps} maps/chart/backgroundcolor-gradient/\n * Gradient\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n */\n backgroundColor: \"#ffffff\" /* Palette.backgroundColor */,\n /**\n * The background color or gradient for the plot area.\n *\n * @see In styled mode, the plot background is set with the\n * `.highcharts-plot-background` class.\n *\n * @sample {highcharts} highcharts/chart/plotbackgroundcolor-color/\n * Color\n * @sample {highcharts} highcharts/chart/plotbackgroundcolor-gradient/\n * Gradient\n * @sample {highstock} stock/chart/plotbackgroundcolor-color/\n * Color\n * @sample {highstock} stock/chart/plotbackgroundcolor-gradient/\n * Gradient\n * @sample {highmaps} maps/chart/plotbackgroundcolor-color/\n * Color\n * @sample {highmaps} maps/chart/plotbackgroundcolor-gradient/\n * Gradient\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @apioption chart.plotBackgroundColor\n */\n /**\n * The URL for an image to use as the plot background. To set an image\n * as the background for the entire chart, set a CSS background image\n * to the container element. Note that for the image to be applied to\n * exported charts, its URL needs to be accessible by the export server.\n *\n * @see In styled mode, a plot background image can be set with the\n * `.highcharts-plot-background` class and a [custom pattern](\n * https://www.highcharts.com/docs/chart-design-and-style/gradients-shadows-and-patterns).\n *\n * @sample {highcharts} highcharts/chart/plotbackgroundimage/\n * Skies\n * @sample {highstock} stock/chart/plotbackgroundimage/\n * Skies\n *\n * @type {string}\n * @apioption chart.plotBackgroundImage\n */\n /**\n * The color of the inner chart or plot area border.\n *\n * @see In styled mode, a plot border stroke can be set with the\n * `.highcharts-plot-border` class.\n *\n * @sample {highcharts} highcharts/chart/plotbordercolor/\n * Blue border\n * @sample {highstock} stock/chart/plotborder/\n * Blue border\n * @sample {highmaps} maps/chart/plotborder/\n * Plot border options\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n */\n plotBorderColor: \"#cccccc\" /* Palette.neutralColor20 */\n};\n/* *\n *\n * Default Export\n *\n * */\nexport default ChartDefaults;\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nimport D from './Defaults.js';\nvar defaultOptions = D.defaultOptions, defaultTime = D.defaultTime;\nimport U from './Utilities.js';\nvar getNestedProperty = U.getNestedProperty, isNumber = U.isNumber, pick = U.pick, pInt = U.pInt;\n/* *\n *\n * Functions\n *\n * */\n/**\n * Formats a JavaScript date timestamp (milliseconds since Jan 1st 1970) into a\n * human readable date string. The format is a subset of the formats for PHP's\n * [strftime](https://www.php.net/manual/en/function.strftime.php) function.\n * Additional formats can be given in the {@link Highcharts.dateFormats} hook.\n *\n * Since v6.0.5, all internal dates are formatted through the\n * {@link Highcharts.Chart#time} instance to respect chart-level time settings.\n * The `Highcharts.dateFormat` function only reflects global time settings set\n * with `setOptions`.\n *\n * Supported format keys:\n * - `%a`: Short weekday, like 'Mon'\n * - `%A`: Long weekday, like 'Monday'\n * - `%d`: Two digit day of the month, 01 to 31\n * - `%e`: Day of the month, 1 through 31\n * - `%w`: Day of the week, 0 through 6\n * - `%b`: Short month, like 'Jan'\n * - `%B`: Long month, like 'January'\n * - `%m`: Two digit month number, 01 through 12\n * - `%y`: Two digits year, like 09 for 2009\n * - `%Y`: Four digits year, like 2009\n * - `%H`: Two digits hours in 24h format, 00 through 23\n * - `%k`: Hours in 24h format, 0 through 23\n * - `%I`: Two digits hours in 12h format, 00 through 11\n * - `%l`: Hours in 12h format, 1 through 12\n * - `%M`: Two digits minutes, 00 through 59\n * - `%p`: Upper case AM or PM\n * - `%P`: Lower case AM or PM\n * - `%S`: Two digits seconds, 00 through 59\n * - `%L`: Milliseconds (naming from Ruby)\n *\n * @function Highcharts.dateFormat\n *\n * @param {string} format\n * The desired format where various time representations are prefixed\n * with `%`.\n *\n * @param {number} timestamp\n * The JavaScript timestamp.\n *\n * @param {boolean} [capitalize=false]\n * Upper case first letter in the return.\n *\n * @return {string}\n * The formatted date.\n */\nfunction dateFormat(format, timestamp, capitalize) {\n return defaultTime.dateFormat(format, timestamp, capitalize);\n}\n/**\n * Format a string according to a subset of the rules of Python's String.format\n * method.\n *\n * @example\n * let s = Highcharts.format(\n * 'The {color} fox was {len:.2f} feet long',\n * { color: 'red', len: Math.PI }\n * );\n * // => The red fox was 3.14 feet long\n *\n * @function Highcharts.format\n *\n * @param {string} str\n * The string to format.\n *\n * @param {Record} ctx\n * The context, a collection of key-value pairs where each key is\n * replaced by its value.\n *\n * @param {Highcharts.Chart} [chart]\n * A `Chart` instance used to get numberFormatter and time.\n *\n * @return {string}\n * The formatted string.\n */\nfunction format(str, ctx, chart) {\n var splitter = '{', isInside = false, segment, valueAndFormat, val, index;\n var floatRegex = /f$/;\n var decRegex = /\\.([0-9])/;\n var lang = defaultOptions.lang;\n var time = chart && chart.time || defaultTime;\n var numberFormatter = chart && chart.numberFormatter || numberFormat;\n var ret = [];\n while (str) {\n index = str.indexOf(splitter);\n if (index === -1) {\n break;\n }\n segment = str.slice(0, index);\n if (isInside) { // we're on the closing bracket looking back\n valueAndFormat = segment.split(':');\n val = getNestedProperty(valueAndFormat.shift() || '', ctx);\n // Format the replacement\n if (valueAndFormat.length && typeof val === 'number') {\n segment = valueAndFormat.join(':');\n if (floatRegex.test(segment)) { // float\n var decimals = parseInt((segment.match(decRegex) || ['', '-1'])[1], 10);\n if (val !== null) {\n val = numberFormatter(val, decimals, lang.decimalPoint, segment.indexOf(',') > -1 ? lang.thousandsSep : '');\n }\n }\n else {\n val = time.dateFormat(segment, val);\n }\n }\n // Push the result and advance the cursor\n ret.push(val);\n }\n else {\n ret.push(segment);\n }\n str = str.slice(index + 1); // the rest\n isInside = !isInside; // toggle\n splitter = isInside ? '}' : '{'; // now look for next matching bracket\n }\n ret.push(str);\n return ret.join('');\n}\n/**\n * Format a number and return a string based on input settings.\n *\n * @sample highcharts/members/highcharts-numberformat/\n * Custom number format\n *\n * @function Highcharts.numberFormat\n *\n * @param {number} number\n * The input number to format.\n *\n * @param {number} decimals\n * The amount of decimals. A value of -1 preserves the amount in the\n * input number.\n *\n * @param {string} [decimalPoint]\n * The decimal point, defaults to the one given in the lang options, or\n * a dot.\n *\n * @param {string} [thousandsSep]\n * The thousands separator, defaults to the one given in the lang\n * options, or a space character.\n *\n * @return {string}\n * The formatted number.\n */\nfunction numberFormat(number, decimals, decimalPoint, thousandsSep) {\n number = +number || 0;\n decimals = +decimals;\n var ret, fractionDigits;\n var lang = defaultOptions.lang, origDec = (number.toString().split('.')[1] || '').split('e')[0].length, exponent = number.toString().split('e'), firstDecimals = decimals;\n if (decimals === -1) {\n // Preserve decimals. Not huge numbers (#3793).\n decimals = Math.min(origDec, 20);\n }\n else if (!isNumber(decimals)) {\n decimals = 2;\n }\n else if (decimals && exponent[1] && exponent[1] < 0) {\n // Expose decimals from exponential notation (#7042)\n fractionDigits = decimals + +exponent[1];\n if (fractionDigits >= 0) {\n // remove too small part of the number while keeping the notation\n exponent[0] = (+exponent[0]).toExponential(fractionDigits)\n .split('e')[0];\n decimals = fractionDigits;\n }\n else {\n // fractionDigits < 0\n exponent[0] = exponent[0].split('.')[0] || 0;\n if (decimals < 20) {\n // use number instead of exponential notation (#7405)\n number = (exponent[0] * Math.pow(10, exponent[1]))\n .toFixed(decimals);\n }\n else {\n // or zero\n number = 0;\n }\n exponent[1] = 0;\n }\n }\n // Add another decimal to avoid rounding errors of float numbers. (#4573)\n // Then use toFixed to handle rounding.\n var roundedNumber = (Math.abs(exponent[1] ? exponent[0] : number) +\n Math.pow(10, -Math.max(decimals, origDec) - 1)).toFixed(decimals);\n // A string containing the positive integer component of the number\n var strinteger = String(pInt(roundedNumber));\n // Leftover after grouping into thousands. Can be 0, 1 or 2.\n var thousands = strinteger.length > 3 ? strinteger.length % 3 : 0;\n // Language\n decimalPoint = pick(decimalPoint, lang.decimalPoint);\n thousandsSep = pick(thousandsSep, lang.thousandsSep);\n // Start building the return\n ret = number < 0 ? '-' : '';\n // Add the leftover after grouping into thousands. For example, in the\n // number 42 000 000, this line adds 42.\n ret += thousands ? strinteger.substr(0, thousands) + thousandsSep : '';\n if (+exponent[1] < 0 && !firstDecimals) {\n ret = '0';\n }\n else {\n // Add the remaining thousands groups, joined by the thousands separator\n ret += strinteger\n .substr(thousands)\n .replace(/(\\d{3})(?=\\d)/g, '$1' + thousandsSep);\n }\n // Add the decimal point and the decimal component\n if (decimals) {\n // Get the decimal component\n ret += decimalPoint + roundedNumber.slice(-decimals);\n }\n if (exponent[1] && +ret !== 0) {\n ret += 'e' + exponent[1];\n }\n return ret;\n}\n/* *\n *\n * Default Export\n *\n * */\nvar FormatUtilities = {\n dateFormat: dateFormat,\n format: format,\n numberFormat: numberFormat\n};\nexport default FormatUtilities;\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\n/* *\n *\n * Namespace\n *\n * */\n/**\n * Shared Highcharts properties.\n * @private\n */\nvar Globals;\n(function (Globals) {\n /* *\n *\n * Constants\n *\n * */\n Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '10.3.3', Globals.win = (typeof window !== 'undefined' ?\n window :\n {}), // eslint-disable-line node/no-unsupported-features/es-builtins\n Globals.doc = Globals.win.document, Globals.svg = (Globals.doc &&\n Globals.doc.createElementNS &&\n !!Globals.doc.createElementNS(Globals.SVG_NS, 'svg').createSVGRect), Globals.userAgent = (Globals.win.navigator && Globals.win.navigator.userAgent) || '', Globals.isChrome = Globals.userAgent.indexOf('Chrome') !== -1, Globals.isFirefox = Globals.userAgent.indexOf('Firefox') !== -1, Globals.isMS = /(edge|msie|trident)/i.test(Globals.userAgent) && !Globals.win.opera, Globals.isSafari = !Globals.isChrome && Globals.userAgent.indexOf('Safari') !== -1, Globals.isTouchDevice = /(Mobile|Android|Windows Phone)/.test(Globals.userAgent), Globals.isWebKit = Globals.userAgent.indexOf('AppleWebKit') !== -1, Globals.deg2rad = Math.PI * 2 / 360, Globals.hasBidiBug = (Globals.isFirefox &&\n parseInt(Globals.userAgent.split('Firefox/')[1], 10) < 4 // issue #38\n ), Globals.hasTouch = !!Globals.win.TouchEvent, Globals.marginNames = [\n 'plotTop',\n 'marginRight',\n 'marginBottom',\n 'plotLeft'\n ], Globals.noop = function () { }, Globals.supportsPassiveEvents = (function () {\n // Checks whether the browser supports passive events, (#11353).\n var supportsPassive = false;\n // Object.defineProperty doesn't work on IE as well as passive\n // events - instead of using polyfill, we can exclude IE totally.\n if (!Globals.isMS) {\n var opts = Object.defineProperty({}, 'passive', {\n get: function () {\n supportsPassive = true;\n }\n });\n if (Globals.win.addEventListener && Globals.win.removeEventListener) {\n Globals.win.addEventListener('testPassive', Globals.noop, opts);\n Globals.win.removeEventListener('testPassive', Globals.noop, opts);\n }\n }\n return supportsPassive;\n }());\n /**\n * An array containing the current chart objects in the page. A chart's\n * position in the array is preserved throughout the page's lifetime. When\n * a chart is destroyed, the array item becomes `undefined`.\n *\n * @name Highcharts.charts\n * @type {Array}\n */\n Globals.charts = [];\n /**\n * A hook for defining additional date format specifiers. New\n * specifiers are defined as key-value pairs by using the\n * specifier as key, and a function which takes the timestamp as\n * value. This function returns the formatted portion of the\n * date.\n *\n * @sample highcharts/global/dateformats/\n * Adding support for week number\n *\n * @name Highcharts.dateFormats\n * @type {Record}\n */\n Globals.dateFormats = {};\n /**\n * @private\n * @deprecated\n * @todo Use only `Core/Series/SeriesRegistry.seriesTypes`\n */\n Globals.seriesTypes = {};\n /**\n * @private\n */\n Globals.symbolSizes = {};\n /* *\n *\n * Properties\n *\n * */\n // eslint-disable-next-line prefer-const\n Globals.chartCount = 0;\n})(Globals || (Globals = {}));\n/* *\n *\n * Default Export\n *\n * */\nexport default Globals;\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Theme options that should get applied to the chart. In module mode it\n * might not be possible to change this property because of read-only\n * restrictions, instead use {@link Highcharts.setOptions}.\n *\n * @deprecated\n * @name Highcharts.theme\n * @type {Highcharts.Options}\n */\n(''); // keeps doclets above in JS file\n","/* *\n *\n * (c) 2010-2020 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nimport H from '../../Globals.js';\nvar SVG_NS = H.SVG_NS, win = H.win;\nimport U from '../../Utilities.js';\nvar attr = U.attr, createElement = U.createElement, css = U.css, error = U.error, isFunction = U.isFunction, isString = U.isString, objectEach = U.objectEach, splat = U.splat;\nvar trustedTypes = win.trustedTypes;\n/* *\n *\n * Constants\n *\n * */\n// Create the trusted type policy. This should not be exposed.\nvar trustedTypesPolicy = (trustedTypes &&\n isFunction(trustedTypes.createPolicy) &&\n trustedTypes.createPolicy('highcharts', {\n createHTML: function (s) { return s; }\n }));\nvar emptyHTML = trustedTypesPolicy ?\n trustedTypesPolicy.createHTML('') :\n '';\n// In IE8, DOMParser is undefined. IE9 and PhantomJS are only able to parse XML.\nvar hasValidDOMParser = (function () {\n try {\n return Boolean(new DOMParser().parseFromString(emptyHTML, 'text/html'));\n }\n catch (e) {\n return false;\n }\n}());\n/* *\n *\n * Class\n *\n * */\n/**\n * The AST class represents an abstract syntax tree of HTML or SVG content. It\n * can take HTML as an argument, parse it, optionally transform it to SVG, then\n * perform sanitation before inserting it into the DOM.\n *\n * @class\n * @name Highcharts.AST\n *\n * @param {string|Array} source\n * Either an HTML string or an ASTNode list to populate the tree.\n */\nvar AST = /** @class */ (function () {\n /* *\n *\n * Constructor\n *\n * */\n // Construct an AST from HTML markup, or wrap an array of existing AST nodes\n function AST(source) {\n this.nodes = typeof source === 'string' ?\n this.parseMarkup(source) : source;\n }\n /* *\n *\n * Static Functions\n *\n * */\n /**\n * Filter an object of SVG or HTML attributes against the allow list.\n *\n * @static\n *\n * @function Highcharts.AST#filterUserAttributes\n *\n * @param {Highcharts.SVGAttributes} attributes The attributes to filter\n *\n * @return {Highcharts.SVGAttributes}\n * The filtered attributes\n */\n AST.filterUserAttributes = function (attributes) {\n objectEach(attributes, function (val, key) {\n var valid = true;\n if (AST.allowedAttributes.indexOf(key) === -1) {\n valid = false;\n }\n if (['background', 'dynsrc', 'href', 'lowsrc', 'src']\n .indexOf(key) !== -1) {\n valid = isString(val) && AST.allowedReferences.some(function (ref) { return val.indexOf(ref) === 0; });\n }\n if (!valid) {\n error(33, false, void 0, {\n 'Invalid attribute in config': \"\".concat(key)\n });\n delete attributes[key];\n }\n // #17753, < is not allowed in SVG attributes\n if (isString(val) && attributes[key]) {\n attributes[key] = val.replace(/} The parsed nodes.\n */\n AST.prototype.parseMarkup = function (markup) {\n var nodes = [];\n markup = markup\n .trim()\n // The style attribute throws a warning when parsing when CSP is\n // enabled (#6884), so use an alias and pick it up below\n // Make all quotation marks parse correctly to DOM (#17627)\n .replace(/ style=([\"'])/g, ' data-style=$1');\n var doc;\n if (hasValidDOMParser) {\n doc = new DOMParser().parseFromString(trustedTypesPolicy ?\n trustedTypesPolicy.createHTML(markup) :\n markup, 'text/html');\n }\n else {\n var body = createElement('div');\n body.innerHTML = markup;\n doc = { body: body };\n }\n var appendChildNodes = function (node, addTo) {\n var tagName = node.nodeName.toLowerCase();\n // Add allowed tags\n var astNode = {\n tagName: tagName\n };\n if (tagName === '#text') {\n astNode.textContent = node.textContent || '';\n }\n var parsedAttributes = node.attributes;\n // Add attributes\n if (parsedAttributes) {\n var attributes_2 = {};\n [].forEach.call(parsedAttributes, function (attrib) {\n if (attrib.name === 'data-style') {\n astNode.style = AST.parseStyle(attrib.value);\n }\n else {\n attributes_2[attrib.name] = attrib.value;\n }\n });\n astNode.attributes = attributes_2;\n }\n // Handle children\n if (node.childNodes.length) {\n var children_1 = [];\n [].forEach.call(node.childNodes, function (childNode) {\n appendChildNodes(childNode, children_1);\n });\n if (children_1.length) {\n astNode.children = children_1;\n }\n }\n addTo.push(astNode);\n };\n [].forEach.call(doc.body.childNodes, function (childNode) { return appendChildNodes(childNode, nodes); });\n return nodes;\n };\n /* *\n *\n * Static Properties\n *\n * */\n /**\n * The list of allowed SVG or HTML attributes, used for sanitizing\n * potentially harmful content from the chart configuration before adding to\n * the DOM.\n *\n * @see [Source code with default values](\n * https://github.com/highcharts/highcharts/blob/master/ts/Core/Renderer/HTML/AST.ts#:~:text=public%20static%20allowedAttributes)\n *\n * @example\n * // Allow a custom, trusted attribute\n * Highcharts.AST.allowedAttributes.push('data-value');\n *\n * @name Highcharts.AST.allowedAttributes\n * @type {Array}\n */\n AST.allowedAttributes = [\n 'aria-controls',\n 'aria-describedby',\n 'aria-expanded',\n 'aria-haspopup',\n 'aria-hidden',\n 'aria-label',\n 'aria-labelledby',\n 'aria-live',\n 'aria-pressed',\n 'aria-readonly',\n 'aria-roledescription',\n 'aria-selected',\n 'class',\n 'clip-path',\n 'color',\n 'colspan',\n 'cx',\n 'cy',\n 'd',\n 'dx',\n 'dy',\n 'disabled',\n 'fill',\n 'height',\n 'href',\n 'id',\n 'in',\n 'markerHeight',\n 'markerWidth',\n 'offset',\n 'opacity',\n 'orient',\n 'padding',\n 'paddingLeft',\n 'paddingRight',\n 'patternUnits',\n 'r',\n 'refX',\n 'refY',\n 'role',\n 'scope',\n 'slope',\n 'src',\n 'startOffset',\n 'stdDeviation',\n 'stroke',\n 'stroke-linecap',\n 'stroke-width',\n 'style',\n 'tableValues',\n 'result',\n 'rowspan',\n 'summary',\n 'target',\n 'tabindex',\n 'text-align',\n 'text-anchor',\n 'textAnchor',\n 'textLength',\n 'title',\n 'type',\n 'valign',\n 'width',\n 'x',\n 'x1',\n 'x2',\n 'xlink:href',\n 'y',\n 'y1',\n 'y2',\n 'zIndex'\n ];\n /**\n * The list of allowed references for referring attributes like `href` and\n * `src`. Attribute values will only be allowed if they start with one of\n * these strings.\n *\n * @see [Source code with default values](\n * https://github.com/highcharts/highcharts/blob/master/ts/Core/Renderer/HTML/AST.ts#:~:text=public%20static%20allowedReferences)\n *\n * @example\n * // Allow tel:\n * Highcharts.AST.allowedReferences.push('tel:');\n *\n * @name Highcharts.AST.allowedReferences\n * @type {Array}\n */\n AST.allowedReferences = [\n 'https://',\n 'http://',\n 'mailto:',\n '/',\n '../',\n './',\n '#'\n ];\n /**\n * The list of allowed SVG or HTML tags, used for sanitizing potentially\n * harmful content from the chart configuration before adding to the DOM.\n *\n * @see [Source code with default values](\n * https://github.com/highcharts/highcharts/blob/master/ts/Core/Renderer/HTML/AST.ts#:~:text=public%20static%20allowedTags)\n *\n * @example\n * // Allow a custom, trusted tag\n * Highcharts.AST.allowedTags.push('blink'); // ;)\n *\n * @name Highcharts.AST.allowedTags\n * @type {Array}\n */\n AST.allowedTags = [\n 'a',\n 'abbr',\n 'b',\n 'br',\n 'button',\n 'caption',\n 'circle',\n 'clipPath',\n 'code',\n 'dd',\n 'defs',\n 'div',\n 'dl',\n 'dt',\n 'em',\n 'feComponentTransfer',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feOffset',\n 'feMerge',\n 'feMergeNode',\n 'filter',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'hr',\n 'i',\n 'img',\n 'li',\n 'linearGradient',\n 'marker',\n 'ol',\n 'p',\n 'path',\n 'pattern',\n 'pre',\n 'rect',\n 'small',\n 'span',\n 'stop',\n 'strong',\n 'style',\n 'sub',\n 'sup',\n 'svg',\n 'table',\n 'text',\n 'textPath',\n 'thead',\n 'title',\n 'tbody',\n 'tspan',\n 'td',\n 'th',\n 'tr',\n 'u',\n 'ul',\n '#text'\n ];\n AST.emptyHTML = emptyHTML;\n /**\n * Allow all custom SVG and HTML attributes, references and tags (together\n * with potentially harmful ones) to be added to the DOM from the chart\n * configuration. In other words, disable the the allow-listing which is the\n * primary functionality of the AST.\n *\n * WARNING: Setting this property to `true` while allowing untrusted user\n * data in the chart configuration will expose your application to XSS\n * security risks!\n *\n * Note that in case you want to allow a known set of tags or attributes,\n * you should allow-list them instead of disabling the filtering totally.\n * See [allowedAttributes](Highcharts.AST#.allowedAttributes),\n * [allowedReferences](Highcharts.AST#.allowedReferences) and\n * [allowedTags](Highcharts.AST#.allowedTags). The `bypassHTMLFiltering`\n * setting is intended only for those cases where allow-listing is not\n * practical, and the chart configuration already comes from a secure\n * source.\n *\n * @example\n * // Allow all custom attributes, references and tags (disable DOM XSS\n * // filtering)\n * Highcharts.AST.bypassHTMLFiltering = true;\n *\n * @name Highcharts.AST.bypassHTMLFiltering\n * @static\n */\n AST.bypassHTMLFiltering = false;\n return AST;\n}());\n/* *\n *\n * Default Export\n *\n * */\nexport default AST;\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Serialized form of an SVG/HTML definition, including children.\n *\n * @interface Highcharts.ASTNode\n */ /**\n* @name Highcharts.ASTNode#attributes\n* @type {Highcharts.SVGAttributes|undefined}\n*/ /**\n* @name Highcharts.ASTNode#children\n* @type {Array|undefined}\n*/ /**\n* @name Highcharts.ASTNode#tagName\n* @type {string|undefined}\n*/ /**\n* @name Highcharts.ASTNode#textContent\n* @type {string|undefined}\n*/\n(''); // keeps doclets above in file\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nimport AST from '../Renderer/HTML/AST.js';\nimport A from '../Animation/AnimationUtilities.js';\nvar animObject = A.animObject;\nimport D from '../Defaults.js';\nvar defaultOptions = D.defaultOptions;\nimport F from '../FormatUtilities.js';\nvar format = F.format;\nimport U from '../Utilities.js';\nvar addEvent = U.addEvent, defined = U.defined, erase = U.erase, extend = U.extend, fireEvent = U.fireEvent, getNestedProperty = U.getNestedProperty, isArray = U.isArray, isFunction = U.isFunction, isNumber = U.isNumber, isObject = U.isObject, merge = U.merge, objectEach = U.objectEach, pick = U.pick, syncTimeout = U.syncTimeout, removeEvent = U.removeEvent, uniqueKey = U.uniqueKey;\n/* eslint-disable no-invalid-this, valid-jsdoc */\n/* *\n *\n * Class\n *\n * */\n/**\n * The Point object. The point objects are generated from the `series.data`\n * configuration objects or raw numbers. They can be accessed from the\n * `Series.points` array. Other ways to instantiate points are through {@link\n * Highcharts.Series#addPoint} or {@link Highcharts.Series#setData}.\n *\n * @class\n * @name Highcharts.Point\n */\nvar Point = /** @class */ (function () {\n function Point() {\n /* *\n *\n * Properties\n *\n * */\n /**\n * For categorized axes this property holds the category name for the\n * point. For other axes it holds the X value.\n *\n * @name Highcharts.Point#category\n * @type {number|string}\n */\n this.category = void 0;\n this.formatPrefix = 'point';\n this.id = void 0;\n this.isNull = false;\n /**\n * The name of the point. The name can be given as the first position of the\n * point configuration array, or as a `name` property in the configuration:\n *\n * @example\n * // Array config\n * data: [\n * ['John', 1],\n * ['Jane', 2]\n * ]\n *\n * // Object config\n * data: [{\n * name: 'John',\n * y: 1\n * }, {\n * name: 'Jane',\n * y: 2\n * }]\n *\n * @name Highcharts.Point#name\n * @type {string}\n */\n this.name = void 0;\n /**\n * The point's options as applied in the initial configuration, or\n * extended through `Point.update`.\n *\n * In TypeScript you have to extend `PointOptionsObject` via an\n * additional interface to allow custom data options:\n *\n * ```\n * declare interface PointOptionsObject {\n * customProperty: string;\n * }\n * ```\n *\n * @name Highcharts.Point#options\n * @type {Highcharts.PointOptionsObject}\n */\n this.options = void 0;\n /**\n * The percentage for points in a stacked series or pies.\n *\n * @name Highcharts.Point#percentage\n * @type {number|undefined}\n */\n this.percentage = void 0;\n this.selected = false;\n /**\n * The series object associated with the point.\n *\n * @name Highcharts.Point#series\n * @type {Highcharts.Series}\n */\n this.series = void 0;\n /**\n * The attributes of the rendered SVG shape like in `column` or `pie`\n * series.\n *\n * @readonly\n * @name Highcharts.Point#shapeArgs\n * @type {Readonly|undefined}\n */\n this.shapeArgs = void 0;\n /**\n * The total of values in either a stack for stacked series, or a pie in a\n * pie series.\n *\n * @name Highcharts.Point#total\n * @type {number|undefined}\n */\n this.total = void 0;\n /**\n * For certain series types, like pie charts, where individual points can\n * be shown or hidden.\n *\n * @name Highcharts.Point#visible\n * @type {boolean}\n * @default true\n */\n this.visible = true;\n this.x = void 0;\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Animate SVG elements associated with the point.\n *\n * @private\n * @function Highcharts.Point#animateBeforeDestroy\n */\n Point.prototype.animateBeforeDestroy = function () {\n var point = this, animateParams = { x: point.startXPos, opacity: 0 }, graphicalProps = point.getGraphicalProps();\n graphicalProps.singular.forEach(function (prop) {\n var isDataLabel = prop === 'dataLabel';\n point[prop] = point[prop].animate(isDataLabel ? {\n x: point[prop].startXPos,\n y: point[prop].startYPos,\n opacity: 0\n } : animateParams);\n });\n graphicalProps.plural.forEach(function (plural) {\n point[plural].forEach(function (item) {\n if (item.element) {\n item.animate(extend({ x: point.startXPos }, (item.startYPos ? {\n x: item.startXPos,\n y: item.startYPos\n } : {})));\n }\n });\n });\n };\n /**\n * Apply the options containing the x and y data and possible some extra\n * properties. Called on point init or from point.update.\n *\n * @private\n * @function Highcharts.Point#applyOptions\n *\n * @param {Highcharts.PointOptionsType} options\n * The point options as defined in series.data.\n *\n * @param {number} [x]\n * Optionally, the x value.\n *\n * @return {Highcharts.Point}\n * The Point instance.\n */\n Point.prototype.applyOptions = function (options, x) {\n var point = this, series = point.series, pointValKey = series.options.pointValKey || series.pointValKey;\n options = Point.prototype.optionsToObject.call(this, options);\n // copy options directly to point\n extend(point, options);\n point.options = point.options ?\n extend(point.options, options) :\n options;\n // Since options are copied into the Point instance, some accidental\n // options must be shielded (#5681)\n if (options.group) {\n delete point.group;\n }\n if (options.dataLabels) {\n delete point.dataLabels;\n }\n /**\n * The y value of the point.\n * @name Highcharts.Point#y\n * @type {number|undefined}\n */\n // For higher dimension series types. For instance, for ranges, point.y\n // is mapped to point.low.\n if (pointValKey) {\n point.y = Point.prototype.getNestedProperty.call(point, pointValKey);\n }\n point.isNull = this.isValid && !this.isValid();\n point.formatPrefix = point.isNull ? 'null' : 'point'; // #9233, #10874\n // The point is initially selected by options (#5777)\n if (point.selected) {\n point.state = 'select';\n }\n /**\n * The x value of the point.\n * @name Highcharts.Point#x\n * @type {number}\n */\n // If no x is set by now, get auto incremented value. All points must\n // have an x value, however the y value can be null to create a gap in\n // the series\n if ('name' in point &&\n typeof x === 'undefined' &&\n series.xAxis &&\n series.xAxis.hasNames) {\n point.x = series.xAxis.nameToX(point);\n }\n if (typeof point.x === 'undefined' && series) {\n if (typeof x === 'undefined') {\n point.x = series.autoIncrement();\n }\n else {\n point.x = x;\n }\n }\n else if (isNumber(options.x) && series.options.relativeXValue) {\n point.x = series.autoIncrement(options.x);\n }\n return point;\n };\n /**\n * Destroy a point to clear memory. Its reference still stays in\n * `series.data`.\n *\n * @private\n * @function Highcharts.Point#destroy\n */\n Point.prototype.destroy = function () {\n var point = this, series = point.series, chart = series.chart, dataSorting = series.options.dataSorting, hoverPoints = chart.hoverPoints, globalAnimation = point.series.chart.renderer.globalAnimation, animation = animObject(globalAnimation);\n var prop;\n /**\n * Allow to call after animation.\n * @private\n */\n function destroyPoint() {\n // Remove all events and elements\n if (point.graphic ||\n point.graphics ||\n point.dataLabel ||\n point.dataLabels) {\n removeEvent(point);\n point.destroyElements();\n }\n for (prop in point) { // eslint-disable-line guard-for-in\n point[prop] = null;\n }\n }\n if (point.legendItem) {\n // pies have legend items\n chart.legend.destroyItem(point);\n }\n if (hoverPoints) {\n point.setState();\n erase(hoverPoints, point);\n if (!hoverPoints.length) {\n chart.hoverPoints = null;\n }\n }\n if (point === chart.hoverPoint) {\n point.onMouseOut();\n }\n // Remove properties after animation\n if (!dataSorting || !dataSorting.enabled) {\n destroyPoint();\n }\n else {\n this.animateBeforeDestroy();\n syncTimeout(destroyPoint, animation.duration);\n }\n chart.pointCount--;\n };\n /**\n * Destroy SVG elements associated with the point.\n *\n * @private\n * @function Highcharts.Point#destroyElements\n * @param {Highcharts.Dictionary} [kinds]\n */\n Point.prototype.destroyElements = function (kinds) {\n var point = this, props = point.getGraphicalProps(kinds);\n props.singular.forEach(function (prop) {\n point[prop] = point[prop].destroy();\n });\n props.plural.forEach(function (plural) {\n point[plural].forEach(function (item) {\n if (item && item.element) {\n item.destroy();\n }\n });\n delete point[plural];\n });\n };\n /**\n * Fire an event on the Point object.\n *\n * @private\n * @function Highcharts.Point#firePointEvent\n *\n * @param {string} eventType\n * Type of the event.\n *\n * @param {Highcharts.Dictionary|Event} [eventArgs]\n * Additional event arguments.\n *\n * @param {Highcharts.EventCallbackFunction|Function} [defaultFunction]\n * Default event handler.\n *\n * @emits Highcharts.Point#event:*\n */\n Point.prototype.firePointEvent = function (eventType, eventArgs, defaultFunction) {\n var point = this, series = this.series, seriesOptions = series.options;\n // load event handlers on demand to save time on mouseover/out\n if (seriesOptions.point.events[eventType] ||\n (point.options &&\n point.options.events &&\n point.options.events[eventType])) {\n point.importEvents();\n }\n // add default handler if in selection mode\n if (eventType === 'click' && seriesOptions.allowPointSelect) {\n defaultFunction = function (event) {\n // Control key is for Windows, meta (= Cmd key) for Mac, Shift\n // for Opera.\n if (point.select) { // #2911\n point.select(null, event.ctrlKey || event.metaKey || event.shiftKey);\n }\n };\n }\n fireEvent(point, eventType, eventArgs, defaultFunction);\n };\n /**\n * Get the CSS class names for individual points. Used internally where the\n * returned value is set on every point.\n *\n * @function Highcharts.Point#getClassName\n *\n * @return {string}\n * The class names.\n */\n Point.prototype.getClassName = function () {\n var point = this;\n return 'highcharts-point' +\n (point.selected ? ' highcharts-point-select' : '') +\n (point.negative ? ' highcharts-negative' : '') +\n (point.isNull ? ' highcharts-null-point' : '') +\n (typeof point.colorIndex !== 'undefined' ?\n ' highcharts-color-' + point.colorIndex : '') +\n (point.options.className ? ' ' + point.options.className : '') +\n (point.zone && point.zone.className ? ' ' +\n point.zone.className.replace('highcharts-negative', '') : '');\n };\n /**\n * Get props of all existing graphical point elements.\n *\n * @private\n * @function Highcharts.Point#getGraphicalProps\n */\n Point.prototype.getGraphicalProps = function (kinds) {\n var point = this, props = [], graphicalProps = { singular: [], plural: [] };\n var prop, i;\n kinds = kinds || { graphic: 1, dataLabel: 1 };\n if (kinds.graphic) {\n props.push('graphic', 'shadowGroup');\n }\n if (kinds.dataLabel) {\n props.push('dataLabel', 'dataLabelPath', 'dataLabelUpper', 'connector');\n }\n i = props.length;\n while (i--) {\n prop = props[i];\n if (point[prop]) {\n graphicalProps.singular.push(prop);\n }\n }\n [\n 'graphic',\n 'dataLabel',\n 'connector'\n ].forEach(function (prop) {\n var plural = prop + 's';\n if (kinds[prop] && point[plural]) {\n graphicalProps.plural.push(plural);\n }\n });\n return graphicalProps;\n };\n /**\n * Return the configuration hash needed for the data label and tooltip\n * formatters.\n *\n * @function Highcharts.Point#getLabelConfig\n *\n * @return {Highcharts.PointLabelObject}\n * Abstract object used in formatters and formats.\n */\n Point.prototype.getLabelConfig = function () {\n return {\n x: this.category,\n y: this.y,\n color: this.color,\n colorIndex: this.colorIndex,\n key: this.name || this.category,\n series: this.series,\n point: this,\n percentage: this.percentage,\n total: this.total || this.stackTotal\n };\n };\n /**\n * Returns the value of the point property for a given value.\n * @private\n */\n Point.prototype.getNestedProperty = function (key) {\n if (!key) {\n return;\n }\n if (key.indexOf('custom.') === 0) {\n return getNestedProperty(key, this.options);\n }\n return this[key];\n };\n /**\n * In a series with `zones`, return the zone that the point belongs to.\n *\n * @function Highcharts.Point#getZone\n *\n * @return {Highcharts.SeriesZonesOptionsObject}\n * The zone item.\n */\n Point.prototype.getZone = function () {\n var series = this.series, zones = series.zones, zoneAxis = series.zoneAxis || 'y';\n var zone, i = 0;\n zone = zones[i];\n while (this[zoneAxis] >= zone.value) {\n zone = zones[++i];\n }\n // For resetting or reusing the point (#8100)\n if (!this.nonZonedColor) {\n this.nonZonedColor = this.color;\n }\n if (zone && zone.color && !this.options.color) {\n this.color = zone.color;\n }\n else {\n this.color = this.nonZonedColor;\n }\n return zone;\n };\n /**\n * Utility to check if point has new shape type. Used in column series and\n * all others that are based on column series.\n * @private\n */\n Point.prototype.hasNewShapeType = function () {\n var point = this;\n var oldShapeType = point.graphic &&\n (point.graphic.symbolName || point.graphic.element.nodeName);\n return oldShapeType !== this.shapeType;\n };\n /**\n * Initialize the point. Called internally based on the `series.data`\n * option.\n *\n * @function Highcharts.Point#init\n *\n * @param {Highcharts.Series} series\n * The series object containing this point.\n *\n * @param {Highcharts.PointOptionsType} options\n * The data in either number, array or object format.\n *\n * @param {number} [x]\n * Optionally, the X value of the point.\n *\n * @return {Highcharts.Point}\n * The Point instance.\n *\n * @emits Highcharts.Point#event:afterInit\n */\n Point.prototype.init = function (series, options, x) {\n this.series = series;\n this.applyOptions(options, x);\n // Add a unique ID to the point if none is assigned\n this.id = defined(this.id) ? this.id : uniqueKey();\n this.resolveColor();\n series.chart.pointCount++;\n fireEvent(this, 'afterInit');\n return this;\n };\n /**\n * Determine if point is valid.\n * @private\n * @function Highcharts.Point#isValid\n */\n Point.prototype.isValid = function () {\n return this.x !== null && isNumber(this.y);\n };\n /**\n * Transform number or array configs into objects. Also called for object\n * configs. Used internally to unify the different configuration formats for\n * points. For example, a simple number `10` in a line series will be\n * transformed to `{ y: 10 }`, and an array config like `[1, 10]` in a\n * scatter series will be transformed to `{ x: 1, y: 10 }`.\n *\n * @deprecated\n * @function Highcharts.Point#optionsToObject\n *\n * @param {Highcharts.PointOptionsType} options\n * Series data options.\n *\n * @return {Highcharts.Dictionary<*>}\n * Transformed point options.\n */\n Point.prototype.optionsToObject = function (options) {\n var series = this.series, keys = series.options.keys, pointArrayMap = keys || series.pointArrayMap || ['y'], valueCount = pointArrayMap.length;\n var ret = {}, firstItemType, i = 0, j = 0;\n if (isNumber(options) || options === null) {\n ret[pointArrayMap[0]] = options;\n }\n else if (isArray(options)) {\n // with leading x value\n if (!keys && options.length > valueCount) {\n firstItemType = typeof options[0];\n if (firstItemType === 'string') {\n ret.name = options[0];\n }\n else if (firstItemType === 'number') {\n ret.x = options[0];\n }\n i++;\n }\n while (j < valueCount) {\n // Skip undefined positions for keys\n if (!keys || typeof options[i] !== 'undefined') {\n if (pointArrayMap[j].indexOf('.') > 0) {\n // Handle nested keys, e.g. ['color.pattern.image']\n // Avoid function call unless necessary.\n Point.prototype.setNestedProperty(ret, options[i], pointArrayMap[j]);\n }\n else {\n ret[pointArrayMap[j]] = options[i];\n }\n }\n i++;\n j++;\n }\n }\n else if (typeof options === 'object') {\n ret = options;\n // This is the fastest way to detect if there are individual point\n // dataLabels that need to be considered in drawDataLabels. These\n // can only occur in object configs.\n if (options.dataLabels) {\n series._hasPointLabels = true;\n }\n // Same approach as above for markers\n if (options.marker) {\n series._hasPointMarkers = true;\n }\n }\n return ret;\n };\n /**\n * Get the pixel position of the point relative to the plot area.\n * @private\n * @function Highcharts.Point#pos\n */\n Point.prototype.pos = function (chartCoordinates, plotY) {\n if (plotY === void 0) { plotY = this.plotY; }\n var _a = this, plotX = _a.plotX, series = _a.series, chart = series.chart, xAxis = series.xAxis, yAxis = series.yAxis;\n var posX = 0, posY = 0;\n if (isNumber(plotX) && isNumber(plotY)) {\n if (chartCoordinates) {\n posX = xAxis ? xAxis.pos : chart.plotLeft;\n posY = yAxis ? yAxis.pos : chart.plotTop;\n }\n return chart.inverted && xAxis && yAxis ?\n [yAxis.len - plotY + posY, xAxis.len - plotX + posX] :\n [plotX + posX, plotY + posY];\n }\n };\n /**\n * @private\n * @function Highcharts.Point#resolveColor\n */\n Point.prototype.resolveColor = function () {\n var series = this.series, optionsChart = series.chart.options.chart, styledMode = series.chart.styledMode;\n var color, colors, colorCount = optionsChart.colorCount, colorIndex;\n // remove points nonZonedColor for later recalculation\n delete this.nonZonedColor;\n if (series.options.colorByPoint) {\n if (!styledMode) {\n colors = series.options.colors || series.chart.options.colors;\n color = colors[series.colorCounter];\n colorCount = colors.length;\n }\n colorIndex = series.colorCounter;\n series.colorCounter++;\n // loop back to zero\n if (series.colorCounter === colorCount) {\n series.colorCounter = 0;\n }\n }\n else {\n if (!styledMode) {\n color = series.color;\n }\n colorIndex = series.colorIndex;\n }\n /**\n * The point's current color index, used in styled mode instead of\n * `color`. The color index is inserted in class names used for styling.\n *\n * @name Highcharts.Point#colorIndex\n * @type {number|undefined}\n */\n this.colorIndex = pick(this.options.colorIndex, colorIndex);\n /**\n * The point's current color.\n *\n * @name Highcharts.Point#color\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject|undefined}\n */\n this.color = pick(this.options.color, color);\n };\n /**\n * Set a value in an object, on the property defined by key. The key\n * supports nested properties using dot notation. The function modifies the\n * input object and does not make a copy.\n *\n * @function Highcharts.Point#setNestedProperty\n *\n * @param {T} object\n * The object to set the value on.\n *\n * @param {*} value\n * The value to set.\n *\n * @param {string} key\n * Key to the property to set.\n *\n * @return {T}\n * The modified object.\n */\n Point.prototype.setNestedProperty = function (object, value, key) {\n var nestedKeys = key.split('.');\n nestedKeys.reduce(function (result, key, i, arr) {\n var isLastKey = arr.length - 1 === i;\n result[key] = (isLastKey ?\n value :\n isObject(result[key], true) ?\n result[key] :\n {});\n return result[key];\n }, object);\n return object;\n };\n Point.prototype.shouldDraw = function () {\n return !this.isNull;\n };\n /**\n * Extendable method for formatting each point's tooltip line.\n *\n * @function Highcharts.Point#tooltipFormatter\n *\n * @param {string} pointFormat\n * The point format.\n *\n * @return {string}\n * A string to be concatenated in to the common tooltip text.\n */\n Point.prototype.tooltipFormatter = function (pointFormat) {\n // Insert options for valueDecimals, valuePrefix, and valueSuffix\n var series = this.series, seriesTooltipOptions = series.tooltipOptions, valueDecimals = pick(seriesTooltipOptions.valueDecimals, ''), valuePrefix = seriesTooltipOptions.valuePrefix || '', valueSuffix = seriesTooltipOptions.valueSuffix || '';\n // Replace default point style with class name\n if (series.chart.styledMode) {\n pointFormat =\n series.chart.tooltip.styledModeFormat(pointFormat);\n }\n // Loop over the point array map and replace unformatted values with\n // sprintf formatting markup\n (series.pointArrayMap || ['y']).forEach(function (key) {\n key = '{point.' + key; // without the closing bracket\n if (valuePrefix || valueSuffix) {\n pointFormat = pointFormat.replace(RegExp(key + '}', 'g'), valuePrefix + key + '}' + valueSuffix);\n }\n pointFormat = pointFormat.replace(RegExp(key + '}', 'g'), key + ':,.' + valueDecimals + 'f}');\n });\n return format(pointFormat, {\n point: this,\n series: this.series\n }, series.chart);\n };\n /**\n * Update point with new options (typically x/y data) and optionally redraw\n * the series.\n *\n * @sample highcharts/members/point-update-column/\n * Update column value\n * @sample highcharts/members/point-update-pie/\n * Update pie slice\n * @sample maps/members/point-update/\n * Update map area value in Highmaps\n *\n * @function Highcharts.Point#update\n *\n * @param {Highcharts.PointOptionsType} options\n * The point options. Point options are handled as described under\n * the `series.type.data` item for each series type. For example\n * for a line series, if options is a single number, the point will\n * be given that number as the marin y value. If it is an array, it\n * will be interpreted as x and y values respectively. If it is an\n * object, advanced options are applied.\n *\n * @param {boolean} [redraw=true]\n * Whether to redraw the chart after the point is updated. If doing\n * more operations on the chart, it is best practice to set\n * `redraw` to false and call `chart.redraw()` after.\n *\n * @param {boolean|Partial} [animation=true]\n * Whether to apply animation, and optionally animation\n * configuration.\n *\n * @emits Highcharts.Point#event:update\n */\n Point.prototype.update = function (options, redraw, animation, runEvent) {\n var point = this, series = point.series, graphic = point.graphic, chart = series.chart, seriesOptions = series.options;\n var i;\n redraw = pick(redraw, true);\n /**\n * @private\n */\n function update() {\n point.applyOptions(options);\n // Update visuals, #4146\n // Handle mock graphic elements for a11y, #12718\n var hasMockGraphic = graphic && point.hasMockGraphic;\n var shouldDestroyGraphic = point.y === null ?\n !hasMockGraphic :\n hasMockGraphic;\n if (graphic && shouldDestroyGraphic) {\n point.graphic = graphic.destroy();\n delete point.hasMockGraphic;\n }\n if (isObject(options, true)) {\n // Destroy so we can get new elements\n if (graphic && graphic.element) {\n // \"null\" is also a valid symbol\n if (options &&\n options.marker &&\n typeof options.marker.symbol !== 'undefined') {\n point.graphic = graphic.destroy();\n }\n }\n if (options && options.dataLabels && point.dataLabel) {\n point.dataLabel = point.dataLabel.destroy(); // #2468\n }\n if (point.connector) {\n point.connector = point.connector.destroy(); // #7243\n }\n }\n // record changes in the parallel arrays\n i = point.index;\n series.updateParallelArrays(point, i);\n // Record the options to options.data. If the old or the new config\n // is an object, use point options, otherwise use raw options\n // (#4701, #4916).\n seriesOptions.data[i] = (isObject(seriesOptions.data[i], true) ||\n isObject(options, true)) ?\n point.options :\n pick(options, seriesOptions.data[i]);\n // redraw\n series.isDirty = series.isDirtyData = true;\n if (!series.fixedBox && series.hasCartesianSeries) { // #1906, #2320\n chart.isDirtyBox = true;\n }\n if (seriesOptions.legendType === 'point') { // #1831, #1885\n chart.isDirtyLegend = true;\n }\n if (redraw) {\n chart.redraw(animation);\n }\n }\n // Fire the event with a default handler of doing the update\n if (runEvent === false) { // When called from setData\n update();\n }\n else {\n point.firePointEvent('update', { options: options }, update);\n }\n };\n /**\n * Remove a point and optionally redraw the series and if necessary the axes\n *\n * @sample highcharts/plotoptions/series-point-events-remove/\n * Remove point and confirm\n * @sample highcharts/members/point-remove/\n * Remove pie slice\n * @sample maps/members/point-remove/\n * Remove selected points in Highmaps\n *\n * @function Highcharts.Point#remove\n *\n * @param {boolean} [redraw=true]\n * Whether to redraw the chart or wait for an explicit call. When\n * doing more operations on the chart, for example running\n * `point.remove()` in a loop, it is best practice to set `redraw`\n * to false and call `chart.redraw()` after.\n *\n * @param {boolean|Partial} [animation=false]\n * Whether to apply animation, and optionally animation\n * configuration.\n */\n Point.prototype.remove = function (redraw, animation) {\n this.series.removePoint(this.series.data.indexOf(this), redraw, animation);\n };\n /**\n * Toggle the selection status of a point.\n *\n * @see Highcharts.Chart#getSelectedPoints\n *\n * @sample highcharts/members/point-select/\n * Select a point from a button\n * @sample highcharts/chart/events-selection-points/\n * Select a range of points through a drag selection\n * @sample maps/series/data-id/\n * Select a point in Highmaps\n *\n * @function Highcharts.Point#select\n *\n * @param {boolean} [selected]\n * When `true`, the point is selected. When `false`, the point is\n * unselected. When `null` or `undefined`, the selection state is toggled.\n *\n * @param {boolean} [accumulate=false]\n * When `true`, the selection is added to other selected points.\n * When `false`, other selected points are deselected. Internally in\n * Highcharts, when\n * [allowPointSelect](https://api.highcharts.com/highcharts/plotOptions.series.allowPointSelect)\n * is `true`, selected points are accumulated on Control, Shift or Cmd\n * clicking the point.\n *\n * @emits Highcharts.Point#event:select\n * @emits Highcharts.Point#event:unselect\n */\n Point.prototype.select = function (selected, accumulate) {\n var point = this, series = point.series, chart = series.chart;\n selected = pick(selected, !point.selected);\n this.selectedStaging = selected;\n // fire the event with the default handler\n point.firePointEvent(selected ? 'select' : 'unselect', { accumulate: accumulate }, function () {\n /**\n * Whether the point is selected or not.\n *\n * @see Point#select\n * @see Chart#getSelectedPoints\n *\n * @name Highcharts.Point#selected\n * @type {boolean}\n */\n point.selected = point.options.selected = selected;\n series.options.data[series.data.indexOf(point)] =\n point.options;\n point.setState(selected && 'select');\n // unselect all other points unless Ctrl or Cmd + click\n if (!accumulate) {\n chart.getSelectedPoints().forEach(function (loopPoint) {\n var loopSeries = loopPoint.series;\n if (loopPoint.selected && loopPoint !== point) {\n loopPoint.selected = loopPoint.options.selected =\n false;\n loopSeries.options.data[loopSeries.data.indexOf(loopPoint)] = loopPoint.options;\n // Programatically selecting a point should restore\n // normal state, but when click happened on other\n // point, set inactive state to match other points\n loopPoint.setState(chart.hoverPoints &&\n loopSeries.options.inactiveOtherPoints ?\n 'inactive' : '');\n loopPoint.firePointEvent('unselect');\n }\n });\n }\n });\n delete this.selectedStaging;\n };\n /**\n * Runs on mouse over the point. Called internally from mouse and touch\n * events.\n *\n * @function Highcharts.Point#onMouseOver\n *\n * @param {Highcharts.PointerEventObject} [e]\n * The event arguments.\n */\n Point.prototype.onMouseOver = function (e) {\n var point = this, series = point.series, chart = series.chart, pointer = chart.pointer;\n e = e ?\n pointer.normalize(e) :\n // In cases where onMouseOver is called directly without an event\n pointer.getChartCoordinatesFromPoint(point, chart.inverted);\n pointer.runPointActions(e, point);\n };\n /**\n * Runs on mouse out from the point. Called internally from mouse and touch\n * events.\n *\n * @function Highcharts.Point#onMouseOut\n * @emits Highcharts.Point#event:mouseOut\n */\n Point.prototype.onMouseOut = function () {\n var point = this, chart = point.series.chart;\n point.firePointEvent('mouseOut');\n if (!point.series.options.inactiveOtherPoints) {\n (chart.hoverPoints || []).forEach(function (p) {\n p.setState();\n });\n }\n chart.hoverPoints = chart.hoverPoint = null;\n };\n /**\n * Import events from the series' and point's options. Only do it on\n * demand, to save processing time on hovering.\n *\n * @private\n * @function Highcharts.Point#importEvents\n */\n Point.prototype.importEvents = function () {\n if (!this.hasImportedEvents) {\n var point_1 = this, options = merge(point_1.series.options.point, point_1.options), events = options.events;\n point_1.events = events;\n objectEach(events, function (event, eventType) {\n if (isFunction(event)) {\n addEvent(point_1, eventType, event);\n }\n });\n this.hasImportedEvents = true;\n }\n };\n /**\n * Set the point's state.\n *\n * @function Highcharts.Point#setState\n *\n * @param {Highcharts.PointStateValue|\"\"} [state]\n * The new state, can be one of `'hover'`, `'select'`, `'inactive'`,\n * or `''` (an empty string), `'normal'` or `undefined` to set to\n * normal state.\n * @param {boolean} [move]\n * State for animation.\n *\n * @emits Highcharts.Point#event:afterSetState\n */\n Point.prototype.setState = function (state, move) {\n var point = this, series = point.series, previousState = point.state, stateOptions = (series.options.states[state || 'normal'] ||\n {}), markerOptions = (defaultOptions.plotOptions[series.type].marker &&\n series.options.marker), normalDisabled = (markerOptions && markerOptions.enabled === false), markerStateOptions = ((markerOptions &&\n markerOptions.states &&\n markerOptions.states[state || 'normal']) || {}), stateDisabled = markerStateOptions.enabled === false, pointMarker = point.marker || {}, chart = series.chart, hasMarkers = (markerOptions && series.markerAttribs);\n var halo = series.halo, markerAttribs, pointAttribs, pointAttribsAnimation, stateMarkerGraphic = series.stateMarkerGraphic, newSymbol;\n state = state || ''; // empty string\n if (\n // already has this state\n (state === point.state && !move) ||\n // selected points don't respond to hover\n (point.selected && state !== 'select') ||\n // series' state options is disabled\n (stateOptions.enabled === false) ||\n // general point marker's state options is disabled\n (state && (stateDisabled ||\n (normalDisabled &&\n markerStateOptions.enabled === false))) ||\n // individual point marker's state options is disabled\n (state &&\n pointMarker.states &&\n pointMarker.states[state] &&\n pointMarker.states[state].enabled === false) // #1610\n ) {\n return;\n }\n point.state = state;\n if (hasMarkers) {\n markerAttribs = series.markerAttribs(point, state);\n }\n // Apply hover styles to the existing point\n // Prevent from mocked null points (#14966)\n if (point.graphic && !point.hasMockGraphic) {\n if (previousState) {\n point.graphic.removeClass('highcharts-point-' + previousState);\n }\n if (state) {\n point.graphic.addClass('highcharts-point-' + state);\n }\n if (!chart.styledMode) {\n pointAttribs = series.pointAttribs(point, state);\n pointAttribsAnimation = pick(chart.options.chart.animation, stateOptions.animation);\n var opacity_1 = pointAttribs.opacity;\n // Some inactive points (e.g. slices in pie) should apply\n // opacity also for their labels\n if (series.options.inactiveOtherPoints && isNumber(opacity_1)) {\n (point.dataLabels || []).forEach(function (label) {\n if (label &&\n !label.hasClass('highcharts-data-label-hidden')) {\n label.animate({ opacity: opacity_1 }, pointAttribsAnimation);\n }\n });\n if (point.connector) {\n point.connector.animate({ opacity: opacity_1 }, pointAttribsAnimation);\n }\n }\n point.graphic.animate(pointAttribs, pointAttribsAnimation);\n }\n if (markerAttribs) {\n point.graphic.animate(markerAttribs, pick(\n // Turn off globally:\n chart.options.chart.animation, markerStateOptions.animation, markerOptions.animation));\n }\n // Zooming in from a range with no markers to a range with markers\n if (stateMarkerGraphic) {\n stateMarkerGraphic.hide();\n }\n }\n else {\n // if a graphic is not applied to each point in the normal state,\n // create a shared graphic for the hover state\n if (state && markerStateOptions) {\n newSymbol = pointMarker.symbol || series.symbol;\n // If the point has another symbol than the previous one, throw\n // away the state marker graphic and force a new one (#1459)\n if (stateMarkerGraphic &&\n stateMarkerGraphic.currentSymbol !== newSymbol) {\n stateMarkerGraphic = stateMarkerGraphic.destroy();\n }\n // Add a new state marker graphic\n if (markerAttribs) {\n if (!stateMarkerGraphic) {\n if (newSymbol) {\n series.stateMarkerGraphic = stateMarkerGraphic =\n chart.renderer\n .symbol(newSymbol, markerAttribs.x, markerAttribs.y, markerAttribs.width, markerAttribs.height)\n .add(series.markerGroup);\n stateMarkerGraphic.currentSymbol = newSymbol;\n }\n // Move the existing graphic\n }\n else {\n stateMarkerGraphic[move ? 'animate' : 'attr']({\n x: markerAttribs.x,\n y: markerAttribs.y\n });\n }\n }\n if (!chart.styledMode && stateMarkerGraphic &&\n point.state !== 'inactive') {\n stateMarkerGraphic.attr(series.pointAttribs(point, state));\n }\n }\n if (stateMarkerGraphic) {\n stateMarkerGraphic[state && point.isInside ? 'show' : 'hide'](); // #2450\n stateMarkerGraphic.element.point = point; // #4310\n stateMarkerGraphic.addClass(point.getClassName(), true);\n }\n }\n // Show me your halo\n var haloOptions = stateOptions.halo;\n var markerGraphic = (point.graphic || stateMarkerGraphic);\n var markerVisibility = (markerGraphic && markerGraphic.visibility || 'inherit');\n if (haloOptions &&\n haloOptions.size &&\n markerGraphic &&\n markerVisibility !== 'hidden' &&\n !point.isCluster) {\n if (!halo) {\n series.halo = halo = chart.renderer.path()\n // #5818, #5903, #6705\n .add(markerGraphic.parentGroup);\n }\n halo.show()[move ? 'animate' : 'attr']({\n d: point.haloPath(haloOptions.size)\n });\n halo.attr({\n 'class': 'highcharts-halo highcharts-color-' +\n pick(point.colorIndex, series.colorIndex) +\n (point.className ? ' ' + point.className : ''),\n 'visibility': markerVisibility,\n 'zIndex': -1 // #4929, #8276\n });\n halo.point = point; // #6055\n if (!chart.styledMode) {\n halo.attr(extend({\n 'fill': point.color || series.color,\n 'fill-opacity': haloOptions.opacity\n }, AST.filterUserAttributes(haloOptions.attributes || {})));\n }\n }\n else if (halo && halo.point && halo.point.haloPath) {\n // Animate back to 0 on the current halo point (#6055)\n halo.animate({ d: halo.point.haloPath(0) }, null, \n // Hide after unhovering. The `complete` callback runs in the\n // halo's context (#7681).\n halo.hide);\n }\n fireEvent(point, 'afterSetState', { state: state });\n };\n /**\n * Get the path definition for the halo, which is usually a shadow-like\n * circle around the currently hovered point.\n *\n * @function Highcharts.Point#haloPath\n *\n * @param {number} size\n * The radius of the circular halo.\n *\n * @return {Highcharts.SVGPathArray}\n * The path definition.\n */\n Point.prototype.haloPath = function (size) {\n var pos = this.pos();\n return pos ? this.series.chart.renderer.symbols.circle(Math.floor(pos[0]) - size, pos[1] - size, size * 2, size * 2) : [];\n };\n return Point;\n}());\n/* *\n *\n * Default Export\n *\n * */\nexport default Point;\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Function callback when a series point is clicked. Return false to cancel the\n * action.\n *\n * @callback Highcharts.PointClickCallbackFunction\n *\n * @param {Highcharts.Point} this\n * The point where the event occured.\n *\n * @param {Highcharts.PointClickEventObject} event\n * Event arguments.\n */\n/**\n * Common information for a click event on a series point.\n *\n * @interface Highcharts.PointClickEventObject\n * @extends Highcharts.PointerEventObject\n */ /**\n* Clicked point.\n* @name Highcharts.PointClickEventObject#point\n* @type {Highcharts.Point}\n*/\n/**\n * Configuration for the data label and tooltip formatters.\n *\n * @interface Highcharts.PointLabelObject\n */ /**\n* The point's current color.\n* @name Highcharts.PointLabelObject#color\n* @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject|undefined}\n*/ /**\n* The point's current color index, used in styled mode instead of `color`. The\n* color index is inserted in class names used for styling.\n* @name Highcharts.PointLabelObject#colorIndex\n* @type {number}\n*/ /**\n* The name of the related point.\n* @name Highcharts.PointLabelObject#key\n* @type {string|undefined}\n*/ /**\n* The percentage for related points in a stacked series or pies.\n* @name Highcharts.PointLabelObject#percentage\n* @type {number}\n*/ /**\n* The related point. The point name, if defined, is available through\n* `this.point.name`.\n* @name Highcharts.PointLabelObject#point\n* @type {Highcharts.Point}\n*/ /**\n* The related series. The series name is available through `this.series.name`.\n* @name Highcharts.PointLabelObject#series\n* @type {Highcharts.Series}\n*/ /**\n* The total of values in either a stack for stacked series, or a pie in a pie\n* series.\n* @name Highcharts.PointLabelObject#total\n* @type {number|undefined}\n*/ /**\n* For categorized axes this property holds the category name for the point. For\n* other axes it holds the X value.\n* @name Highcharts.PointLabelObject#x\n* @type {number|string|undefined}\n*/ /**\n* The y value of the point.\n* @name Highcharts.PointLabelObject#y\n* @type {number|null|undefined}\n*/\n/**\n * Gets fired when the mouse leaves the area close to the point.\n *\n * @callback Highcharts.PointMouseOutCallbackFunction\n *\n * @param {Highcharts.Point} this\n * Point where the event occured.\n *\n * @param {global.PointerEvent} event\n * Event that occured.\n */\n/**\n * Gets fired when the mouse enters the area close to the point.\n *\n * @callback Highcharts.PointMouseOverCallbackFunction\n *\n * @param {Highcharts.Point} this\n * Point where the event occured.\n *\n * @param {global.Event} event\n * Event that occured.\n */\n/**\n * The generic point options for all series.\n *\n * In TypeScript you have to extend `PointOptionsObject` with an additional\n * declaration to allow custom data options:\n *\n * ```\n * declare interface PointOptionsObject {\n * customProperty: string;\n * }\n * ```\n *\n * @interface Highcharts.PointOptionsObject\n */\n/**\n * Possible option types for a data point. Use `null` to indicate a gap.\n *\n * @typedef {number|string|Highcharts.PointOptionsObject|Array<(number|string|null)>|null} Highcharts.PointOptionsType\n */\n/**\n * Gets fired when the point is removed using the `.remove()` method.\n *\n * @callback Highcharts.PointRemoveCallbackFunction\n *\n * @param {Highcharts.Point} this\n * Point where the event occured.\n *\n * @param {global.Event} event\n * Event that occured.\n */\n/**\n * Possible key values for the point state options.\n *\n * @typedef {\"hover\"|\"inactive\"|\"normal\"|\"select\"} Highcharts.PointStateValue\n */\n/**\n * Gets fired when the point is updated programmatically through the `.update()`\n * method.\n *\n * @callback Highcharts.PointUpdateCallbackFunction\n *\n * @param {Highcharts.Point} this\n * Point where the event occured.\n *\n * @param {Highcharts.PointUpdateEventObject} event\n * Event that occured.\n */\n/**\n * Information about the update event.\n *\n * @interface Highcharts.PointUpdateEventObject\n * @extends global.Event\n */ /**\n* Options data of the update event.\n* @name Highcharts.PointUpdateEventObject#options\n* @type {Highcharts.PointOptionsType}\n*/\n/**\n * @interface Highcharts.PointEventsOptionsObject\n */ /**\n* Fires when the point is selected either programmatically or following a click\n* on the point. One parameter, `event`, is passed to the function. Returning\n* `false` cancels the operation.\n* @name Highcharts.PointEventsOptionsObject#select\n* @type {Highcharts.PointSelectCallbackFunction|undefined}\n*/ /**\n* Fires when the point is unselected either programmatically or following a\n* click on the point. One parameter, `event`, is passed to the function.\n* Returning `false` cancels the operation.\n* @name Highcharts.PointEventsOptionsObject#unselect\n* @type {Highcharts.PointUnselectCallbackFunction|undefined}\n*/\n/**\n * Information about the select/unselect event.\n *\n * @interface Highcharts.PointInteractionEventObject\n * @extends global.Event\n */ /**\n* @name Highcharts.PointInteractionEventObject#accumulate\n* @type {boolean}\n*/\n/**\n * Gets fired when the point is selected either programmatically or following a\n * click on the point.\n *\n * @callback Highcharts.PointSelectCallbackFunction\n *\n * @param {Highcharts.Point} this\n * Point where the event occured.\n *\n * @param {Highcharts.PointInteractionEventObject} event\n * Event that occured.\n */\n/**\n * Fires when the point is unselected either programmatically or following a\n * click on the point.\n *\n * @callback Highcharts.PointUnselectCallbackFunction\n *\n * @param {Highcharts.Point} this\n * Point where the event occured.\n *\n * @param {Highcharts.PointInteractionEventObject} event\n * Event that occured.\n */\n''; // keeps doclets above in JS file.\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nimport H from '../Globals.js';\nimport D from '../Defaults.js';\nvar defaultOptions = D.defaultOptions;\nimport Point from './Point.js';\nimport U from '../Utilities.js';\nvar extendClass = U.extendClass, merge = U.merge;\n/* *\n *\n * Namespace\n *\n * */\nvar SeriesRegistry;\n(function (SeriesRegistry) {\n /* *\n *\n * Properties\n *\n * */\n /**\n * @internal\n * @todo Move `Globals.seriesTypes` code to her.\n */\n SeriesRegistry.seriesTypes = H.seriesTypes;\n /* *\n *\n * Functions\n *\n * */\n /**\n * Registers class pattern of a series.\n *\n * @private\n */\n function registerSeriesType(seriesType, SeriesClass) {\n var defaultPlotOptions = defaultOptions.plotOptions || {}, seriesOptions = SeriesClass.defaultOptions, seriesProto = SeriesClass.prototype;\n seriesProto.type = seriesType;\n if (!seriesProto.pointClass) {\n seriesProto.pointClass = Point;\n }\n if (seriesOptions) {\n defaultPlotOptions[seriesType] = seriesOptions;\n }\n SeriesRegistry.seriesTypes[seriesType] = SeriesClass;\n }\n SeriesRegistry.registerSeriesType = registerSeriesType;\n /**\n * Old factory to create new series prototypes.\n *\n * @deprecated\n * @function Highcharts.seriesType\n *\n * @param {string} type\n * The series type name.\n *\n * @param {string} parent\n * The parent series type name. Use `line` to inherit from the basic\n * {@link Series} object.\n *\n * @param {Highcharts.SeriesOptionsType|Highcharts.Dictionary<*>} options\n * The additional default options that are merged with the parent's options.\n *\n * @param {Highcharts.Dictionary<*>} [props]\n * The properties (functions and primitives) to set on the new prototype.\n *\n * @param {Highcharts.Dictionary<*>} [pointProps]\n * Members for a series-specific extension of the {@link Point} prototype if\n * needed.\n *\n * @return {Highcharts.Series}\n * The newly created prototype as extended from {@link Series} or its\n * derivatives.\n */\n function seriesType(type, parent, options, seriesProto, pointProto) {\n var defaultPlotOptions = defaultOptions.plotOptions || {};\n parent = parent || '';\n // Merge the options\n defaultPlotOptions[type] = merge(defaultPlotOptions[parent], options);\n // Create the class\n registerSeriesType(type, extendClass(SeriesRegistry.seriesTypes[parent] || function () { }, seriesProto));\n SeriesRegistry.seriesTypes[type].prototype.type = type;\n // Create the point class if needed\n if (pointProto) {\n SeriesRegistry.seriesTypes[type].prototype.pointClass = extendClass(Point, pointProto);\n }\n return SeriesRegistry.seriesTypes[type];\n }\n SeriesRegistry.seriesType = seriesType;\n})(SeriesRegistry || (SeriesRegistry = {}));\n/* *\n *\n * Default Export\n *\n * */\nexport default SeriesRegistry;\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nimport H from './Globals.js';\nvar win = H.win;\nimport U from './Utilities.js';\nvar defined = U.defined, error = U.error, extend = U.extend, isObject = U.isObject, merge = U.merge, objectEach = U.objectEach, pad = U.pad, pick = U.pick, splat = U.splat, timeUnits = U.timeUnits;\n/* *\n *\n * Constants\n *\n * */\nvar hasNewSafariBug = H.isSafari &&\n win.Intl &&\n win.Intl.DateTimeFormat.prototype.formatRange;\n// To do: Remove this when we no longer need support for Safari < v14.1\nvar hasOldSafariBug = H.isSafari &&\n win.Intl &&\n !win.Intl.DateTimeFormat.prototype.formatRange;\n/* *\n *\n * Class\n *\n * */\n/* eslint-disable no-invalid-this, valid-jsdoc */\n/**\n * The Time class. Time settings are applied in general for each page using\n * `Highcharts.setOptions`, or individually for each Chart item through the\n * [time](https://api.highcharts.com/highcharts/time) options set.\n *\n * The Time object is available from {@link Highcharts.Chart#time},\n * which refers to `Highcharts.time` if no individual time settings are\n * applied.\n *\n * @example\n * // Apply time settings globally\n * Highcharts.setOptions({\n * time: {\n * timezone: 'Europe/London'\n * }\n * });\n *\n * // Apply time settings by instance\n * let chart = Highcharts.chart('container', {\n * time: {\n * timezone: 'America/New_York'\n * },\n * series: [{\n * data: [1, 4, 3, 5]\n * }]\n * });\n *\n * // Use the Time object\n * console.log(\n * 'Current time in New York',\n * chart.time.dateFormat('%Y-%m-%d %H:%M:%S', Date.now())\n * );\n *\n * @since 6.0.5\n *\n * @class\n * @name Highcharts.Time\n *\n * @param {Highcharts.TimeOptions} [options]\n * Time options as defined in [chart.options.time](/highcharts/time).\n */\nvar Time = /** @class */ (function () {\n /* *\n *\n * Constructors\n *\n * */\n function Time(options) {\n /* *\n *\n * Properties\n *\n * */\n this.options = {};\n this.useUTC = false;\n this.variableTimezone = false;\n this.Date = win.Date;\n /**\n * Get the time zone offset based on the current timezone information as\n * set in the global options.\n *\n * @function Highcharts.Time#getTimezoneOffset\n *\n * @param {number} timestamp\n * The JavaScript timestamp to inspect.\n *\n * @return {number}\n * The timezone offset in minutes compared to UTC.\n */\n this.getTimezoneOffset = this.timezoneOffsetFunction();\n this.update(options);\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Time units used in `Time.get` and `Time.set`\n *\n * @typedef {\"Date\"|\"Day\"|\"FullYear\"|\"Hours\"|\"Milliseconds\"|\"Minutes\"|\"Month\"|\"Seconds\"} Highcharts.TimeUnitValue\n */\n /**\n * Get the value of a date object in given units, and subject to the Time\n * object's current timezone settings. This function corresponds directly to\n * JavaScripts `Date.getXXX / Date.getUTCXXX`, so instead of calling\n * `date.getHours()` or `date.getUTCHours()` we will call\n * `time.get('Hours')`.\n *\n * @function Highcharts.Time#get\n *\n * @param {Highcharts.TimeUnitValue} unit\n * @param {Date} date\n *\n * @return {number}\n * The given time unit\n */\n Time.prototype.get = function (unit, date) {\n if (this.variableTimezone || this.timezoneOffset) {\n var realMs = date.getTime();\n var ms = realMs - this.getTimezoneOffset(date);\n date.setTime(ms); // Temporary adjust to timezone\n var ret = date['getUTC' + unit]();\n date.setTime(realMs); // Reset\n return ret;\n }\n // UTC time with no timezone handling\n if (this.useUTC) {\n return date['getUTC' + unit]();\n }\n // Else, local time\n return date['get' + unit]();\n };\n /**\n * Set the value of a date object in given units, and subject to the Time\n * object's current timezone settings. This function corresponds directly to\n * JavaScripts `Date.setXXX / Date.setUTCXXX`, so instead of calling\n * `date.setHours(0)` or `date.setUTCHours(0)` we will call\n * `time.set('Hours', 0)`.\n *\n * @function Highcharts.Time#set\n *\n * @param {Highcharts.TimeUnitValue} unit\n * @param {Date} date\n * @param {number} value\n *\n * @return {number}\n * The epoch milliseconds of the updated date\n */\n Time.prototype.set = function (unit, date, value) {\n // UTC time with timezone handling\n if (this.variableTimezone || this.timezoneOffset) {\n // For lower order time units, just set it directly using UTC\n // time\n if (unit === 'Milliseconds' ||\n unit === 'Seconds' ||\n (unit === 'Minutes' &&\n this.getTimezoneOffset(date) % 3600000 === 0) // #13961\n ) {\n return date['setUTC' + unit](value);\n }\n // Higher order time units need to take the time zone into\n // account\n // Adjust by timezone\n var offset = this.getTimezoneOffset(date);\n var ms = date.getTime() - offset;\n date.setTime(ms);\n date['setUTC' + unit](value);\n var newOffset = this.getTimezoneOffset(date);\n ms = date.getTime() + newOffset;\n return date.setTime(ms);\n }\n // UTC time with no timezone handling\n if (this.useUTC ||\n // leap calculation in UTC only\n (hasNewSafariBug && unit === 'FullYear')) {\n return date['setUTC' + unit](value);\n }\n // Else, local time\n return date['set' + unit](value);\n };\n /**\n * Update the Time object with current options. It is called internally on\n * initializing Highcharts, after running `Highcharts.setOptions` and on\n * `Chart.update`.\n *\n * @private\n * @function Highcharts.Time#update\n *\n * @param {Highcharts.TimeOptions} [options]\n *\n */\n Time.prototype.update = function (options) {\n if (options === void 0) { options = {}; }\n var useUTC = pick(options.useUTC, true);\n this.options = options = merge(true, this.options, options);\n // Allow using a different Date class\n this.Date = options.Date || win.Date || Date;\n this.useUTC = useUTC;\n this.timezoneOffset = (useUTC && options.timezoneOffset) || void 0;\n this.getTimezoneOffset = this.timezoneOffsetFunction();\n /*\n * The time object has options allowing for variable time zones, meaning\n * the axis ticks or series data needs to consider this.\n */\n this.variableTimezone = useUTC && !!(options.getTimezoneOffset ||\n options.timezone);\n };\n /**\n * Make a time and returns milliseconds. Interprets the inputs as UTC time,\n * local time or a specific timezone time depending on the current time\n * settings.\n *\n * @function Highcharts.Time#makeTime\n *\n * @param {number} year\n * The year\n *\n * @param {number} month\n * The month. Zero-based, so January is 0.\n *\n * @param {number} [date=1]\n * The day of the month\n *\n * @param {number} [hours=0]\n * The hour of the day, 0-23.\n *\n * @param {number} [minutes=0]\n * The minutes\n *\n * @param {number} [seconds=0]\n * The seconds\n *\n * @return {number}\n * The time in milliseconds since January 1st 1970.\n */\n Time.prototype.makeTime = function (year, month, date, hours, minutes, seconds) {\n var d, offset, newOffset;\n if (this.useUTC) {\n d = this.Date.UTC.apply(0, arguments);\n offset = this.getTimezoneOffset(d);\n d += offset;\n newOffset = this.getTimezoneOffset(d);\n if (offset !== newOffset) {\n d += newOffset - offset;\n // A special case for transitioning from summer time to winter time.\n // When the clock is set back, the same time is repeated twice, i.e.\n // 02:30 am is repeated since the clock is set back from 3 am to\n // 2 am. We need to make the same time as local Date does.\n }\n else if (offset - 36e5 === this.getTimezoneOffset(d - 36e5) &&\n !hasOldSafariBug) {\n d -= 36e5;\n }\n }\n else {\n d = new this.Date(year, month, pick(date, 1), pick(hours, 0), pick(minutes, 0), pick(seconds, 0)).getTime();\n }\n return d;\n };\n /**\n * Sets the getTimezoneOffset function. If the `timezone` option is set, a\n * default getTimezoneOffset function with that timezone is returned. If\n * a `getTimezoneOffset` option is defined, it is returned. If neither are\n * specified, the function using the `timezoneOffset` option or 0 offset is\n * returned.\n *\n * @private\n * @function Highcharts.Time#timezoneOffsetFunction\n *\n * @return {Function}\n * A getTimezoneOffset function\n */\n Time.prototype.timezoneOffsetFunction = function () {\n var time = this, options = this.options, getTimezoneOffset = options.getTimezoneOffset, moment = options.moment || win.moment;\n if (!this.useUTC) {\n return function (timestamp) {\n return new Date(timestamp.toString()).getTimezoneOffset() * 60000;\n };\n }\n if (options.timezone) {\n if (!moment) {\n // getTimezoneOffset-function stays undefined because it depends\n // on Moment.js\n error(25);\n }\n else {\n return function (timestamp) {\n return -moment.tz(timestamp, options.timezone).utcOffset() * 60000;\n };\n }\n }\n // If not timezone is set, look for the getTimezoneOffset callback\n if (this.useUTC && getTimezoneOffset) {\n return function (timestamp) {\n return getTimezoneOffset(timestamp.valueOf()) * 60000;\n };\n }\n // Last, use the `timezoneOffset` option if set\n return function () {\n return (time.timezoneOffset || 0) * 60000;\n };\n };\n /**\n * Formats a JavaScript date timestamp (milliseconds since Jan 1st 1970)\n * into a human readable date string. The available format keys are listed\n * below. Additional formats can be given in the\n * {@link Highcharts.dateFormats} hook.\n *\n * Supported format keys:\n * - `%a`: Short weekday, like 'Mon'\n * - `%A`: Long weekday, like 'Monday'\n * - `%d`: Two digit day of the month, 01 to 31\n * - `%e`: Day of the month, 1 through 31\n * - `%w`: Day of the week, 0 through 6\n * - `%b`: Short month, like 'Jan'\n * - `%B`: Long month, like 'January'\n * - `%m`: Two digit month number, 01 through 12\n * - `%y`: Two digits year, like 09 for 2009\n * - `%Y`: Four digits year, like 2009\n * - `%H`: Two digits hours in 24h format, 00 through 23\n * - `%k`: Hours in 24h format, 0 through 23\n * - `%I`: Two digits hours in 12h format, 00 through 11\n * - `%l`: Hours in 12h format, 1 through 12\n * - `%M`: Two digits minutes, 00 through 59\n * - `%p`: Upper case AM or PM\n * - `%P`: Lower case AM or PM\n * - `%S`: Two digits seconds, 00 through 59\n * - `%L`: Milliseconds (naming from Ruby)\n *\n * @example\n * const time = new Highcharts.Time();\n * const s = time.dateFormat('%Y-%m-%d %H:%M:%S', Date.UTC(2020, 0, 1));\n * console.log(s); // => 2020-01-01 00:00:00\n *\n * @function Highcharts.Time#dateFormat\n *\n * @param {string} format\n * The desired format where various time representations are\n * prefixed with %.\n *\n * @param {number} [timestamp]\n * The JavaScript timestamp.\n *\n * @param {boolean} [capitalize=false]\n * Upper case first letter in the return.\n *\n * @return {string}\n * The formatted date.\n */\n Time.prototype.dateFormat = function (format, timestamp, capitalize) {\n if (!defined(timestamp) || isNaN(timestamp)) {\n return (H.defaultOptions.lang &&\n H.defaultOptions.lang.invalidDate ||\n '');\n }\n format = pick(format, '%Y-%m-%d %H:%M:%S');\n var time = this, date = new this.Date(timestamp), \n // get the basic time values\n hours = this.get('Hours', date), day = this.get('Day', date), dayOfMonth = this.get('Date', date), month = this.get('Month', date), fullYear = this.get('FullYear', date), lang = H.defaultOptions.lang, langWeekdays = (lang && lang.weekdays), shortWeekdays = (lang && lang.shortWeekdays), \n // List all format keys. Custom formats can be added from the\n // outside.\n replacements = extend({\n // Day\n // Short weekday, like 'Mon'\n a: shortWeekdays ?\n shortWeekdays[day] :\n langWeekdays[day].substr(0, 3),\n // Long weekday, like 'Monday'\n A: langWeekdays[day],\n // Two digit day of the month, 01 to 31\n d: pad(dayOfMonth),\n // Day of the month, 1 through 31\n e: pad(dayOfMonth, 2, ' '),\n // Day of the week, 0 through 6\n w: day,\n // Week (none implemented)\n // 'W': weekNumber(),\n // Month\n // Short month, like 'Jan'\n b: lang.shortMonths[month],\n // Long month, like 'January'\n B: lang.months[month],\n // Two digit month number, 01 through 12\n m: pad(month + 1),\n // Month number, 1 through 12 (#8150)\n o: month + 1,\n // Year\n // Two digits year, like 09 for 2009\n y: fullYear.toString().substr(2, 2),\n // Four digits year, like 2009\n Y: fullYear,\n // Time\n // Two digits hours in 24h format, 00 through 23\n H: pad(hours),\n // Hours in 24h format, 0 through 23\n k: hours,\n // Two digits hours in 12h format, 00 through 11\n I: pad((hours % 12) || 12),\n // Hours in 12h format, 1 through 12\n l: (hours % 12) || 12,\n // Two digits minutes, 00 through 59\n M: pad(this.get('Minutes', date)),\n // Upper case AM or PM\n p: hours < 12 ? 'AM' : 'PM',\n // Lower case AM or PM\n P: hours < 12 ? 'am' : 'pm',\n // Two digits seconds, 00 through 59\n S: pad(date.getSeconds()),\n // Milliseconds (naming from Ruby)\n L: pad(Math.floor(timestamp % 1000), 3)\n }, H.dateFormats);\n // Do the replaces\n objectEach(replacements, function (val, key) {\n // Regex would do it in one line, but this is faster\n while (format.indexOf('%' + key) !== -1) {\n format = format.replace('%' + key, typeof val === 'function' ? val.call(time, timestamp) : val);\n }\n });\n // Optionally capitalize the string and return\n return capitalize ?\n (format.substr(0, 1).toUpperCase() +\n format.substr(1)) :\n format;\n };\n /**\n * Resolve legacy formats of dateTimeLabelFormats (strings and arrays) into\n * an object.\n * @private\n * @param {string|Array|Highcharts.Dictionary} f\n * General format description\n * @return {Highcharts.Dictionary}\n * The object definition\n */\n Time.prototype.resolveDTLFormat = function (f) {\n if (!isObject(f, true)) { // check for string or array\n f = splat(f);\n return {\n main: f[0],\n from: f[1],\n to: f[2]\n };\n }\n return f;\n };\n /**\n * Return an array with time positions distributed on round time values\n * right and right after min and max. Used in datetime axes as well as for\n * grouping data on a datetime axis.\n *\n * @function Highcharts.Time#getTimeTicks\n *\n * @param {Highcharts.TimeNormalizedObject} normalizedInterval\n * The interval in axis values (ms) and the count\n *\n * @param {number} [min]\n * The minimum in axis values\n *\n * @param {number} [max]\n * The maximum in axis values\n *\n * @param {number} [startOfWeek=1]\n *\n * @return {Highcharts.AxisTickPositionsArray}\n * Time positions\n */\n Time.prototype.getTimeTicks = function (normalizedInterval, min, max, startOfWeek) {\n var time = this, Date = time.Date, tickPositions = [], higherRanks = {}, \n // When crossing DST, use the max. Resolves #6278.\n minDate = new Date(min), interval = normalizedInterval.unitRange, count = normalizedInterval.count || 1;\n var i, minYear, // used in months and years as a basis for Date.UTC()\n variableDayLength, minDay;\n startOfWeek = pick(startOfWeek, 1);\n if (defined(min)) { // #1300\n time.set('Milliseconds', minDate, interval >= timeUnits.second ?\n 0 : // #3935\n count * Math.floor(time.get('Milliseconds', minDate) / count)); // #3652, #3654\n if (interval >= timeUnits.second) { // second\n time.set('Seconds', minDate, interval >= timeUnits.minute ?\n 0 : // #3935\n count * Math.floor(time.get('Seconds', minDate) / count));\n }\n if (interval >= timeUnits.minute) { // minute\n time.set('Minutes', minDate, interval >= timeUnits.hour ?\n 0 :\n count * Math.floor(time.get('Minutes', minDate) / count));\n }\n if (interval >= timeUnits.hour) { // hour\n time.set('Hours', minDate, interval >= timeUnits.day ?\n 0 :\n count * Math.floor(time.get('Hours', minDate) / count));\n }\n if (interval >= timeUnits.day) { // day\n time.set('Date', minDate, interval >= timeUnits.month ?\n 1 :\n Math.max(1, count * Math.floor(time.get('Date', minDate) / count)));\n }\n if (interval >= timeUnits.month) { // month\n time.set('Month', minDate, interval >= timeUnits.year ? 0 :\n count * Math.floor(time.get('Month', minDate) / count));\n minYear = time.get('FullYear', minDate);\n }\n if (interval >= timeUnits.year) { // year\n minYear -= minYear % count;\n time.set('FullYear', minDate, minYear);\n }\n // week is a special case that runs outside the hierarchy\n if (interval === timeUnits.week) {\n // get start of current week, independent of count\n minDay = time.get('Day', minDate);\n time.set('Date', minDate, (time.get('Date', minDate) -\n minDay + startOfWeek +\n // We don't want to skip days that are before\n // startOfWeek (#7051)\n (minDay < startOfWeek ? -7 : 0)));\n }\n // Get basics for variable time spans\n minYear = time.get('FullYear', minDate);\n var minMonth = time.get('Month', minDate), minDateDate = time.get('Date', minDate), minHours = time.get('Hours', minDate);\n // Redefine min to the floored/rounded minimum time (#7432)\n min = minDate.getTime();\n // Handle local timezone offset\n if ((time.variableTimezone || !time.useUTC) && defined(max)) {\n // Detect whether we need to take the DST crossover into\n // consideration. If we're crossing over DST, the day length may\n // be 23h or 25h and we need to compute the exact clock time for\n // each tick instead of just adding hours. This comes at a cost,\n // so first we find out if it is needed (#4951).\n variableDayLength = (\n // Long range, assume we're crossing over.\n max - min > 4 * timeUnits.month ||\n // Short range, check if min and max are in different time\n // zones.\n time.getTimezoneOffset(min) !==\n time.getTimezoneOffset(max));\n }\n // Iterate and add tick positions at appropriate values\n var t = minDate.getTime();\n i = 1;\n while (t < max) {\n tickPositions.push(t);\n // if the interval is years, use Date.UTC to increase years\n if (interval === timeUnits.year) {\n t = time.makeTime(minYear + i * count, 0);\n // if the interval is months, use Date.UTC to increase months\n }\n else if (interval === timeUnits.month) {\n t = time.makeTime(minYear, minMonth + i * count);\n // if we're using global time, the interval is not fixed as it\n // jumps one hour at the DST crossover\n }\n else if (variableDayLength &&\n (interval === timeUnits.day || interval === timeUnits.week)) {\n t = time.makeTime(minYear, minMonth, minDateDate +\n i * count * (interval === timeUnits.day ? 1 : 7));\n }\n else if (variableDayLength &&\n interval === timeUnits.hour &&\n count > 1) {\n // make sure higher ranks are preserved across DST (#6797,\n // #7621)\n t = time.makeTime(minYear, minMonth, minDateDate, minHours + i * count);\n // else, the interval is fixed and we use simple addition\n }\n else {\n t += interval * count;\n }\n i++;\n }\n // push the last time\n tickPositions.push(t);\n // Handle higher ranks. Mark new days if the time is on midnight\n // (#950, #1649, #1760, #3349). Use a reasonable dropout threshold\n // to prevent looping over dense data grouping (#6156).\n if (interval <= timeUnits.hour && tickPositions.length < 10000) {\n tickPositions.forEach(function (t) {\n if (\n // Speed optimization, no need to run dateFormat unless\n // we're on a full or half hour\n t % 1800000 === 0 &&\n // Check for local or global midnight\n time.dateFormat('%H%M%S%L', t) === '000000000') {\n higherRanks[t] = 'day';\n }\n });\n }\n }\n // record information on the chosen unit - for dynamic label formatter\n tickPositions.info = extend(normalizedInterval, {\n higherRanks: higherRanks,\n totalRange: interval * count\n });\n return tickPositions;\n };\n /**\n * Get the optimal date format for a point, based on a range.\n *\n * @private\n * @function Highcharts.Time#getDateFormat\n *\n * @param {number} range\n * The time range\n *\n * @param {number} timestamp\n * The timestamp of the date\n *\n * @param {number} startOfWeek\n * An integer representing the first day of the week, where 0 is\n * Sunday.\n *\n * @param {Highcharts.Dictionary} dateTimeLabelFormats\n * A map of time units to formats.\n *\n * @return {string}\n * The optimal date format for a point.\n */\n Time.prototype.getDateFormat = function (range, timestamp, startOfWeek, dateTimeLabelFormats) {\n var dateStr = this.dateFormat('%m-%d %H:%M:%S.%L', timestamp), blank = '01-01 00:00:00.000', strpos = {\n millisecond: 15,\n second: 12,\n minute: 9,\n hour: 6,\n day: 3\n };\n var n = 'millisecond', \n // for sub-millisecond data, #4223\n lastN = n;\n for (n in timeUnits) { // eslint-disable-line guard-for-in\n // If the range is exactly one week and we're looking at a\n // Sunday/Monday, go for the week format\n if (range === timeUnits.week &&\n +this.dateFormat('%w', timestamp) === startOfWeek &&\n dateStr.substr(6) === blank.substr(6)) {\n n = 'week';\n break;\n }\n // The first format that is too great for the range\n if (timeUnits[n] > range) {\n n = lastN;\n break;\n }\n // If the point is placed every day at 23:59, we need to show\n // the minutes as well. #2637.\n if (strpos[n] &&\n dateStr.substr(strpos[n]) !== blank.substr(strpos[n])) {\n break;\n }\n // Weeks are outside the hierarchy, only apply them on\n // Mondays/Sundays like in the first condition\n if (n !== 'week') {\n lastN = n;\n }\n }\n return this.resolveDTLFormat(dateTimeLabelFormats[n]).main;\n };\n return Time;\n}());\n/* *\n *\n * Default export\n *\n * */\nexport default Time;\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Normalized interval.\n *\n * @interface Highcharts.TimeNormalizedObject\n */ /**\n* The count.\n*\n* @name Highcharts.TimeNormalizedObject#count\n* @type {number|undefined}\n*/ /**\n* The interval in axis values (ms).\n*\n* @name Highcharts.TimeNormalizedObject#unitRange\n* @type {number}\n*/\n/**\n * Function of an additional date format specifier.\n *\n * @callback Highcharts.TimeFormatCallbackFunction\n *\n * @param {number} timestamp\n * The time to format.\n *\n * @return {string}\n * The formatted portion of the date.\n */\n/**\n * Time ticks.\n *\n * @interface Highcharts.AxisTickPositionsArray\n * @extends global.Array\n */ /**\n* @name Highcharts.AxisTickPositionsArray#info\n* @type {Highcharts.TimeTicksInfoObject|undefined}\n*/\n/**\n * A callback to return the time zone offset for a given datetime. It\n * takes the timestamp in terms of milliseconds since January 1 1970,\n * and returns the timezone offset in minutes. This provides a hook\n * for drawing time based charts in specific time zones using their\n * local DST crossover dates, with the help of external libraries.\n *\n * @callback Highcharts.TimezoneOffsetCallbackFunction\n *\n * @param {number} timestamp\n * Timestamp in terms of milliseconds since January 1 1970.\n *\n * @return {number}\n * Timezone offset in minutes.\n */\n/**\n * Allows to manually load the `moment.js` library from Highcharts options\n * instead of the `window`.\n * In case of loading the library from a `script` tag,\n * this option is not needed, it will be loaded from there by default.\n *\n * @type {Function}\n * @since 8.2.0\n * @apioption time.moment\n */\n''; // keeps doclets above in JS file\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nimport H from './Globals.js';\nvar charts = H.charts, doc = H.doc, win = H.win;\n/* *\n *\n * Functions\n *\n * */\n/**\n * Provide error messages for debugging, with links to online explanation. This\n * function can be overridden to provide custom error handling.\n *\n * @sample highcharts/chart/highcharts-error/\n * Custom error handler\n *\n * @function Highcharts.error\n *\n * @param {number|string} code\n * The error code. See\n * [errors.xml](https://github.com/highcharts/highcharts/blob/master/errors/errors.xml)\n * for available codes. If it is a string, the error message is printed\n * directly in the console.\n *\n * @param {boolean} [stop=false]\n * Whether to throw an error or just log a warning in the console.\n *\n * @param {Highcharts.Chart} [chart]\n * Reference to the chart that causes the error. Used in 'debugger'\n * module to display errors directly on the chart.\n * Important note: This argument is undefined for errors that lack\n * access to the Chart instance. In such case, the error will be\n * displayed on the last created chart.\n *\n * @param {Highcharts.Dictionary} [params]\n * Additional parameters for the generated message.\n *\n * @return {void}\n */\nfunction error(code, stop, chart, params) {\n var severity = stop ? 'Highcharts error' : 'Highcharts warning';\n if (code === 32) {\n code = \"\".concat(severity, \": Deprecated member\");\n }\n var isCode = isNumber(code);\n var message = isCode ?\n \"\".concat(severity, \" #\").concat(code, \": www.highcharts.com/errors/\").concat(code, \"/\") :\n code.toString();\n var defaultHandler = function () {\n if (stop) {\n throw new Error(message);\n }\n // else ...\n if (win.console &&\n error.messages.indexOf(message) === -1 // prevent console flooting\n ) {\n console.warn(message); // eslint-disable-line no-console\n }\n };\n if (typeof params !== 'undefined') {\n var additionalMessages_1 = '';\n if (isCode) {\n message += '?';\n }\n objectEach(params, function (value, key) {\n additionalMessages_1 += \"\\n - \".concat(key, \": \").concat(value);\n if (isCode) {\n message += encodeURI(key) + '=' + encodeURI(value);\n }\n });\n message += additionalMessages_1;\n }\n fireEvent(H, 'displayError', { chart: chart, code: code, message: message, params: params }, defaultHandler);\n error.messages.push(message);\n}\n(function (error) {\n error.messages = [];\n})(error || (error = {}));\n/* eslint-disable valid-jsdoc */\n/**\n * Utility function to deep merge two or more objects and return a third object.\n * If the first argument is true, the contents of the second object is copied\n * into the first object. The merge function can also be used with a single\n * object argument to create a deep copy of an object.\n *\n * @function Highcharts.merge\n *\n * @param {boolean} extend\n * Whether to extend the left-side object (a) or return a whole new\n * object.\n *\n * @param {T|undefined} a\n * The first object to extend. When only this is given, the function\n * returns a deep copy.\n *\n * @param {...Array} [n]\n * An object to merge into the previous one.\n *\n * @return {T}\n * The merged object. If the first argument is true, the return is the\n * same as the second argument.\n */ /**\n* Utility function to deep merge two or more objects and return a third object.\n* The merge function can also be used with a single object argument to create a\n* deep copy of an object.\n*\n* @function Highcharts.merge\n*\n* @param {T|undefined} a\n* The first object to extend. When only this is given, the function\n* returns a deep copy.\n*\n* @param {...Array} [n]\n* An object to merge into the previous one.\n*\n* @return {T}\n* The merged object. If the first argument is true, the return is the\n* same as the second argument.\n*/\nfunction merge() {\n /* eslint-enable valid-jsdoc */\n var i, args = arguments, ret = {};\n var doCopy = function (copy, original) {\n // An object is replacing a primitive\n if (typeof copy !== 'object') {\n copy = {};\n }\n objectEach(original, function (value, key) {\n // Prototype pollution (#14883)\n if (key === '__proto__' || key === 'constructor') {\n return;\n }\n // Copy the contents of objects, but not arrays or DOM nodes\n if (isObject(value, true) &&\n !isClass(value) &&\n !isDOMElement(value)) {\n copy[key] = doCopy(copy[key] || {}, value);\n // Primitives and arrays are copied over directly\n }\n else {\n copy[key] = original[key];\n }\n });\n return copy;\n };\n // If first argument is true, copy into the existing object. Used in\n // setOptions.\n if (args[0] === true) {\n ret = args[1];\n args = Array.prototype.slice.call(args, 2);\n }\n // For each argument, extend the return\n var len = args.length;\n for (i = 0; i < len; i++) {\n ret = doCopy(ret, args[i]);\n }\n return ret;\n}\n/**\n * Constrain a value to within a lower and upper threshold.\n *\n * @private\n * @param {number} value The initial value\n * @param {number} min The lower threshold\n * @param {number} max The upper threshold\n * @return {number} Returns a number value within min and max.\n */\nfunction clamp(value, min, max) {\n return value > min ? value < max ? value : max : min;\n}\n// eslint-disable-next-line valid-jsdoc\n/**\n * Remove settings that have not changed, to avoid unnecessary rendering or\n * computing (#9197).\n * @private\n */\nfunction cleanRecursively(newer, older) {\n var result = {};\n objectEach(newer, function (_val, key) {\n var ob;\n // Dive into objects (except DOM nodes)\n if (isObject(newer[key], true) &&\n !newer.nodeType && // #10044\n older[key]) {\n ob = cleanRecursively(newer[key], older[key]);\n if (Object.keys(ob).length) {\n result[key] = ob;\n }\n // Arrays, primitives and DOM nodes are copied directly\n }\n else if (isObject(newer[key]) ||\n newer[key] !== older[key] ||\n // If the newer key is explicitly undefined, keep it (#10525)\n (key in newer && !(key in older))) {\n result[key] = newer[key];\n }\n });\n return result;\n}\n/**\n * Shortcut for parseInt\n *\n * @private\n * @function Highcharts.pInt\n *\n * @param {*} s\n * any\n *\n * @param {number} [mag]\n * Magnitude\n *\n * @return {number}\n * number\n */\nfunction pInt(s, mag) {\n return parseInt(s, mag || 10);\n}\n/**\n * Utility function to check for string type.\n *\n * @function Highcharts.isString\n *\n * @param {*} s\n * The item to check.\n *\n * @return {boolean}\n * True if the argument is a string.\n */\nfunction isString(s) {\n return typeof s === 'string';\n}\n/**\n * Utility function to check if an item is an array.\n *\n * @function Highcharts.isArray\n *\n * @param {*} obj\n * The item to check.\n *\n * @return {boolean}\n * True if the argument is an array.\n */\nfunction isArray(obj) {\n var str = Object.prototype.toString.call(obj);\n return str === '[object Array]' || str === '[object Array Iterator]';\n}\n/**\n * Utility function to check if an item is of type object.\n *\n * @function Highcharts.isObject\n *\n * @param {*} obj\n * The item to check.\n *\n * @param {boolean} [strict=false]\n * Also checks that the object is not an array.\n *\n * @return {boolean}\n * True if the argument is an object.\n */\nfunction isObject(obj, strict) {\n return (!!obj &&\n typeof obj === 'object' &&\n (!strict || !isArray(obj))); // eslint-disable-line @typescript-eslint/no-explicit-any\n}\n/**\n * Utility function to check if an Object is a HTML Element.\n *\n * @function Highcharts.isDOMElement\n *\n * @param {*} obj\n * The item to check.\n *\n * @return {boolean}\n * True if the argument is a HTML Element.\n */\nfunction isDOMElement(obj) {\n return isObject(obj) && typeof obj.nodeType === 'number';\n}\n/**\n * Utility function to check if an Object is a class.\n *\n * @function Highcharts.isClass\n *\n * @param {object|undefined} obj\n * The item to check.\n *\n * @return {boolean}\n * True if the argument is a class.\n */\nfunction isClass(obj) {\n var c = obj && obj.constructor;\n return !!(isObject(obj, true) &&\n !isDOMElement(obj) &&\n (c && c.name && c.name !== 'Object'));\n}\n/**\n * Utility function to check if an item is a number and it is finite (not NaN,\n * Infinity or -Infinity).\n *\n * @function Highcharts.isNumber\n *\n * @param {*} n\n * The item to check.\n *\n * @return {boolean}\n * True if the item is a finite number\n */\nfunction isNumber(n) {\n return typeof n === 'number' && !isNaN(n) && n < Infinity && n > -Infinity;\n}\n/**\n * Remove the last occurence of an item from an array.\n *\n * @function Highcharts.erase\n *\n * @param {Array<*>} arr\n * The array.\n *\n * @param {*} item\n * The item to remove.\n *\n * @return {void}\n */\nfunction erase(arr, item) {\n var i = arr.length;\n while (i--) {\n if (arr[i] === item) {\n arr.splice(i, 1);\n break;\n }\n }\n}\n/**\n * Check if an object is null or undefined.\n *\n * @function Highcharts.defined\n *\n * @param {*} obj\n * The object to check.\n *\n * @return {boolean}\n * False if the object is null or undefined, otherwise true.\n */\nfunction defined(obj) {\n return typeof obj !== 'undefined' && obj !== null;\n}\n/**\n * Set or get an attribute or an object of attributes.\n *\n * To use as a setter, pass a key and a value, or let the second argument be a\n * collection of keys and values. When using a collection, passing a value of\n * `null` or `undefined` will remove the attribute.\n *\n * To use as a getter, pass only a string as the second argument.\n *\n * @function Highcharts.attr\n *\n * @param {Highcharts.HTMLDOMElement|Highcharts.SVGDOMElement} elem\n * The DOM element to receive the attribute(s).\n *\n * @param {string|Highcharts.HTMLAttributes|Highcharts.SVGAttributes} [keyOrAttribs]\n * The property or an object of key-value pairs.\n *\n * @param {number|string} [value]\n * The value if a single property is set.\n *\n * @return {string|null|undefined}\n * When used as a getter, return the value.\n */\nfunction attr(elem, keyOrAttribs, value) {\n var isGetter = isString(keyOrAttribs) && !defined(value);\n var ret;\n var attrSingle = function (value, key) {\n // Set the value\n if (defined(value)) {\n elem.setAttribute(key, value);\n // Get the value\n }\n else if (isGetter) {\n ret = elem.getAttribute(key);\n // IE7 and below cannot get class through getAttribute (#7850)\n if (!ret && key === 'class') {\n ret = elem.getAttribute(key + 'Name');\n }\n // Remove the value\n }\n else {\n elem.removeAttribute(key);\n }\n };\n // If keyOrAttribs is a string\n if (isString(keyOrAttribs)) {\n attrSingle(value, keyOrAttribs);\n // Else if keyOrAttribs is defined, it is a hash of key/value pairs\n }\n else {\n objectEach(keyOrAttribs, attrSingle);\n }\n return ret;\n}\n/**\n * Check if an element is an array, and if not, make it into an array.\n *\n * @function Highcharts.splat\n *\n * @param {*} obj\n * The object to splat.\n *\n * @return {Array}\n * The produced or original array.\n */\nfunction splat(obj) {\n return isArray(obj) ? obj : [obj];\n}\n/**\n * Set a timeout if the delay is given, otherwise perform the function\n * synchronously.\n *\n * @function Highcharts.syncTimeout\n *\n * @param {Function} fn\n * The function callback.\n *\n * @param {number} delay\n * Delay in milliseconds.\n *\n * @param {*} [context]\n * An optional context to send to the function callback.\n *\n * @return {number}\n * An identifier for the timeout that can later be cleared with\n * Highcharts.clearTimeout. Returns -1 if there is no timeout.\n */\nfunction syncTimeout(fn, delay, context) {\n if (delay > 0) {\n return setTimeout(fn, delay, context);\n }\n fn.call(0, context);\n return -1;\n}\n/**\n * Internal clear timeout. The function checks that the `id` was not removed\n * (e.g. by `chart.destroy()`). For the details see\n * [issue #7901](https://github.com/highcharts/highcharts/issues/7901).\n *\n * @function Highcharts.clearTimeout\n *\n * @param {number|undefined} id\n * Id of a timeout.\n */\nfunction internalClearTimeout(id) {\n if (defined(id)) {\n clearTimeout(id);\n }\n}\n/* eslint-disable valid-jsdoc */\n/**\n * Utility function to extend an object with the members of another.\n *\n * @function Highcharts.extend\n *\n * @param {T|undefined} a\n * The object to be extended.\n *\n * @param {Partial} b\n * The object to add to the first one.\n *\n * @return {T}\n * Object a, the original object.\n */\nfunction extend(a, b) {\n /* eslint-enable valid-jsdoc */\n var n;\n if (!a) {\n a = {};\n }\n for (n in b) { // eslint-disable-line guard-for-in\n a[n] = b[n];\n }\n return a;\n}\n/* eslint-disable valid-jsdoc */\n/**\n * Return the first value that is not null or undefined.\n *\n * @function Highcharts.pick\n *\n * @param {...Array} items\n * Variable number of arguments to inspect.\n *\n * @return {T}\n * The value of the first argument that is not null or undefined.\n */\nfunction pick() {\n var args = arguments;\n var length = args.length;\n for (var i = 0; i < length; i++) {\n var arg = args[i];\n if (typeof arg !== 'undefined' && arg !== null) {\n return arg;\n }\n }\n}\n/**\n * Set CSS on a given element.\n *\n * @function Highcharts.css\n *\n * @param {Highcharts.HTMLDOMElement|Highcharts.SVGDOMElement} el\n * An HTML DOM element.\n *\n * @param {Highcharts.CSSObject} styles\n * Style object with camel case property names.\n *\n * @return {void}\n */\nfunction css(el, styles) {\n if (H.isMS && !H.svg) { // #2686\n if (styles && defined(styles.opacity)) {\n styles.filter = \"alpha(opacity=\".concat(styles.opacity * 100, \")\");\n }\n }\n extend(el.style, styles);\n}\n/**\n * Utility function to create an HTML element with attributes and styles.\n *\n * @function Highcharts.createElement\n *\n * @param {string} tag\n * The HTML tag.\n *\n * @param {Highcharts.HTMLAttributes} [attribs]\n * Attributes as an object of key-value pairs.\n *\n * @param {Highcharts.CSSObject} [styles]\n * Styles as an object of key-value pairs.\n *\n * @param {Highcharts.HTMLDOMElement} [parent]\n * The parent HTML object.\n *\n * @param {boolean} [nopad=false]\n * If true, remove all padding, border and margin.\n *\n * @return {Highcharts.HTMLDOMElement}\n * The created DOM element.\n */\nfunction createElement(tag, attribs, styles, parent, nopad) {\n var el = doc.createElement(tag);\n if (attribs) {\n extend(el, attribs);\n }\n if (nopad) {\n css(el, { padding: '0', border: 'none', margin: '0' });\n }\n if (styles) {\n css(el, styles);\n }\n if (parent) {\n parent.appendChild(el);\n }\n return el;\n}\n// eslint-disable-next-line valid-jsdoc\n/**\n * Extend a prototyped class by new members.\n *\n * @function Highcharts.extendClass\n *\n * @param {Highcharts.Class} parent\n * The parent prototype to inherit.\n *\n * @param {Highcharts.Dictionary<*>} members\n * A collection of prototype members to add or override compared to the\n * parent prototype.\n *\n * @return {Highcharts.Class}\n * A new prototype.\n */\nfunction extendClass(parent, members) {\n var obj = (function () { });\n obj.prototype = new parent(); // eslint-disable-line new-cap\n extend(obj.prototype, members);\n return obj;\n}\n/**\n * Left-pad a string to a given length by adding a character repetitively.\n *\n * @function Highcharts.pad\n *\n * @param {number} number\n * The input string or number.\n *\n * @param {number} [length]\n * The desired string length.\n *\n * @param {string} [padder=0]\n * The character to pad with.\n *\n * @return {string}\n * The padded string.\n */\nfunction pad(number, length, padder) {\n return new Array((length || 2) +\n 1 -\n String(number)\n .replace('-', '')\n .length).join(padder || '0') + number;\n}\n/**\n * Return a length based on either the integer value, or a percentage of a base.\n *\n * @function Highcharts.relativeLength\n *\n * @param {Highcharts.RelativeSize} value\n * A percentage string or a number.\n *\n * @param {number} base\n * The full length that represents 100%.\n *\n * @param {number} [offset=0]\n * A pixel offset to apply for percentage values. Used internally in\n * axis positioning.\n *\n * @return {number}\n * The computed length.\n */\nfunction relativeLength(value, base, offset) {\n return (/%$/).test(value) ?\n (base * parseFloat(value) / 100) + (offset || 0) :\n parseFloat(value);\n}\n/**\n * Wrap a method with extended functionality, preserving the original function.\n *\n * @function Highcharts.wrap\n *\n * @param {*} obj\n * The context object that the method belongs to. In real cases, this is\n * often a prototype.\n *\n * @param {string} method\n * The name of the method to extend.\n *\n * @param {Highcharts.WrapProceedFunction} func\n * A wrapper function callback. This function is called with the same\n * arguments as the original function, except that the original function\n * is unshifted and passed as the first argument.\n */\nfunction wrap(obj, method, func) {\n var proceed = obj[method];\n obj[method] = function () {\n var outerArgs = arguments, scope = this;\n return func.apply(this, [\n function () {\n return proceed.apply(scope, arguments.length ? arguments : outerArgs);\n }\n ].concat([].slice.call(arguments)));\n };\n}\n/**\n * Get the magnitude of a number.\n *\n * @function Highcharts.getMagnitude\n *\n * @param {number} num\n * The number.\n *\n * @return {number}\n * The magnitude, where 1-9 are magnitude 1, 10-99 magnitude 2 etc.\n */\nfunction getMagnitude(num) {\n return Math.pow(10, Math.floor(Math.log(num) / Math.LN10));\n}\n/**\n * Take an interval and normalize it to multiples of round numbers.\n *\n * @deprecated\n * @function Highcharts.normalizeTickInterval\n *\n * @param {number} interval\n * The raw, un-rounded interval.\n *\n * @param {Array<*>} [multiples]\n * Allowed multiples.\n *\n * @param {number} [magnitude]\n * The magnitude of the number.\n *\n * @param {boolean} [allowDecimals]\n * Whether to allow decimals.\n *\n * @param {boolean} [hasTickAmount]\n * If it has tickAmount, avoid landing on tick intervals lower than\n * original.\n *\n * @return {number}\n * The normalized interval.\n *\n * @todo\n * Move this function to the Axis prototype. It is here only for historical\n * reasons.\n */\nfunction normalizeTickInterval(interval, multiples, magnitude, allowDecimals, hasTickAmount) {\n var i, retInterval = interval;\n // round to a tenfold of 1, 2, 2.5 or 5\n magnitude = pick(magnitude, getMagnitude(interval));\n var normalized = interval / magnitude;\n // multiples for a linear scale\n if (!multiples) {\n multiples = hasTickAmount ?\n // Finer grained ticks when the tick amount is hard set, including\n // when alignTicks is true on multiple axes (#4580).\n [1, 1.2, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10] :\n // Else, let ticks fall on rounder numbers\n [1, 2, 2.5, 5, 10];\n // the allowDecimals option\n if (allowDecimals === false) {\n if (magnitude === 1) {\n multiples = multiples.filter(function (num) {\n return num % 1 === 0;\n });\n }\n else if (magnitude <= 0.1) {\n multiples = [1 / magnitude];\n }\n }\n }\n // normalize the interval to the nearest multiple\n for (i = 0; i < multiples.length; i++) {\n retInterval = multiples[i];\n // only allow tick amounts smaller than natural\n if ((hasTickAmount &&\n retInterval * magnitude >= interval) ||\n (!hasTickAmount &&\n (normalized <=\n (multiples[i] +\n (multiples[i + 1] || multiples[i])) / 2))) {\n break;\n }\n }\n // Multiply back to the correct magnitude. Correct floats to appropriate\n // precision (#6085).\n retInterval = correctFloat(retInterval * magnitude, -Math.round(Math.log(0.001) / Math.LN10));\n return retInterval;\n}\n/**\n * Sort an object array and keep the order of equal items. The ECMAScript\n * standard does not specify the behaviour when items are equal.\n *\n * @function Highcharts.stableSort\n *\n * @param {Array<*>} arr\n * The array to sort.\n *\n * @param {Function} sortFunction\n * The function to sort it with, like with regular Array.prototype.sort.\n */\nfunction stableSort(arr, sortFunction) {\n // @todo It seems like Chrome since v70 sorts in a stable way internally,\n // plus all other browsers do it, so over time we may be able to remove this\n // function\n var length = arr.length;\n var sortValue, i;\n // Add index to each item\n for (i = 0; i < length; i++) {\n arr[i].safeI = i; // stable sort index\n }\n arr.sort(function (a, b) {\n sortValue = sortFunction(a, b);\n return sortValue === 0 ? a.safeI - b.safeI : sortValue;\n });\n // Remove index from items\n for (i = 0; i < length; i++) {\n delete arr[i].safeI; // stable sort index\n }\n}\n/**\n * Non-recursive method to find the lowest member of an array. `Math.min` raises\n * a maximum call stack size exceeded error in Chrome when trying to apply more\n * than 150.000 points. This method is slightly slower, but safe.\n *\n * @function Highcharts.arrayMin\n *\n * @param {Array<*>} data\n * An array of numbers.\n *\n * @return {number}\n * The lowest number.\n */\nfunction arrayMin(data) {\n var i = data.length, min = data[0];\n while (i--) {\n if (data[i] < min) {\n min = data[i];\n }\n }\n return min;\n}\n/**\n * Non-recursive method to find the lowest member of an array. `Math.max` raises\n * a maximum call stack size exceeded error in Chrome when trying to apply more\n * than 150.000 points. This method is slightly slower, but safe.\n *\n * @function Highcharts.arrayMax\n *\n * @param {Array<*>} data\n * An array of numbers.\n *\n * @return {number}\n * The highest number.\n */\nfunction arrayMax(data) {\n var i = data.length, max = data[0];\n while (i--) {\n if (data[i] > max) {\n max = data[i];\n }\n }\n return max;\n}\n/**\n * Utility method that destroys any SVGElement instances that are properties on\n * the given object. It loops all properties and invokes destroy if there is a\n * destroy method. The property is then delete.\n *\n * @function Highcharts.destroyObjectProperties\n *\n * @param {*} obj\n * The object to destroy properties on.\n *\n * @param {*} [except]\n * Exception, do not destroy this property, only delete it.\n */\nfunction destroyObjectProperties(obj, except) {\n objectEach(obj, function (val, n) {\n // If the object is non-null and destroy is defined\n if (val && val !== except && val.destroy) {\n // Invoke the destroy\n val.destroy();\n }\n // Delete the property from the object.\n delete obj[n];\n });\n}\n/**\n * Discard a HTML element\n *\n * @function Highcharts.discardElement\n *\n * @param {Highcharts.HTMLDOMElement} element\n * The HTML node to discard.\n */\nfunction discardElement(element) {\n if (element && element.parentElement) {\n element.parentElement.removeChild(element);\n }\n}\n/**\n * Fix JS round off float errors.\n *\n * @function Highcharts.correctFloat\n *\n * @param {number} num\n * A float number to fix.\n *\n * @param {number} [prec=14]\n * The precision.\n *\n * @return {number}\n * The corrected float number.\n */\nfunction correctFloat(num, prec) {\n // When the number is higher than 1e14 use the number (#16275)\n return num > 1e14 ? num : parseFloat(num.toPrecision(prec || 14));\n}\n/**\n * The time unit lookup\n *\n * @ignore\n */\nvar timeUnits = {\n millisecond: 1,\n second: 1000,\n minute: 60000,\n hour: 3600000,\n day: 24 * 3600000,\n week: 7 * 24 * 3600000,\n month: 28 * 24 * 3600000,\n year: 364 * 24 * 3600000\n};\n/**\n * Easing definition\n *\n * @private\n * @function Math.easeInOutSine\n *\n * @param {number} pos\n * Current position, ranging from 0 to 1.\n *\n * @return {number}\n * Ease result\n */\nMath.easeInOutSine = function (pos) {\n return -0.5 * (Math.cos(Math.PI * pos) - 1);\n};\n/**\n * Returns the value of a property path on a given object.\n *\n * @private\n * @function getNestedProperty\n *\n * @param {string} path\n * Path to the property, for example `custom.myValue`.\n *\n * @param {unknown} obj\n * Instance containing the property on the specific path.\n *\n * @return {unknown}\n * The unknown property value.\n */\nfunction getNestedProperty(path, parent) {\n var pathElements = path.split('.');\n while (pathElements.length && defined(parent)) {\n var pathElement = pathElements.shift();\n // Filter on the key\n if (typeof pathElement === 'undefined' ||\n pathElement === '__proto__') {\n return; // undefined\n }\n var child = parent[pathElement];\n // Filter on the child\n if (!defined(child) ||\n typeof child === 'function' ||\n typeof child.nodeType === 'number' ||\n child === win) {\n return; // undefined\n }\n // Else, proceed\n parent = child;\n }\n return parent;\n}\n/**\n * Get the computed CSS value for given element and property, only for numerical\n * properties. For width and height, the dimension of the inner box (excluding\n * padding) is returned. Used for fitting the chart within the container.\n *\n * @function Highcharts.getStyle\n *\n * @param {Highcharts.HTMLDOMElement} el\n * An HTML element.\n *\n * @param {string} prop\n * The property name.\n *\n * @param {boolean} [toInt=true]\n * Parse to integer.\n *\n * @return {number|string|undefined}\n * The style value.\n */\nfunction getStyle(el, prop, toInt) {\n var customGetStyle = (H.getStyle || // oldie getStyle\n getStyle);\n var style;\n // For width and height, return the actual inner pixel size (#4913)\n if (prop === 'width') {\n var offsetWidth = Math.min(el.offsetWidth, el.scrollWidth);\n // In flex boxes, we need to use getBoundingClientRect and floor it,\n // because scrollWidth doesn't support subpixel precision (#6427) ...\n var boundingClientRectWidth = el.getBoundingClientRect &&\n el.getBoundingClientRect().width;\n // ...unless if the containing div or its parents are transform-scaled\n // down, in which case the boundingClientRect can't be used as it is\n // also scaled down (#9871, #10498).\n if (boundingClientRectWidth < offsetWidth &&\n boundingClientRectWidth >= offsetWidth - 1) {\n offsetWidth = Math.floor(boundingClientRectWidth);\n }\n return Math.max(0, // #8377\n (offsetWidth -\n (customGetStyle(el, 'padding-left', true) || 0) -\n (customGetStyle(el, 'padding-right', true) || 0)));\n }\n if (prop === 'height') {\n return Math.max(0, // #8377\n (Math.min(el.offsetHeight, el.scrollHeight) -\n (customGetStyle(el, 'padding-top', true) || 0) -\n (customGetStyle(el, 'padding-bottom', true) || 0)));\n }\n if (!win.getComputedStyle) {\n // SVG not supported, forgot to load oldie.js?\n error(27, true);\n }\n // Otherwise, get the computed style\n var css = win.getComputedStyle(el, void 0); // eslint-disable-line no-undefined\n if (css) {\n style = css.getPropertyValue(prop);\n if (pick(toInt, prop !== 'opacity')) {\n style = pInt(style);\n }\n }\n return style;\n}\n/**\n * Search for an item in an array.\n *\n * @function Highcharts.inArray\n *\n * @deprecated\n *\n * @param {*} item\n * The item to search for.\n *\n * @param {Array<*>} arr\n * The array or node collection to search in.\n *\n * @param {number} [fromIndex=0]\n * The index to start searching from.\n *\n * @return {number}\n * The index within the array, or -1 if not found.\n */\nfunction inArray(item, arr, fromIndex) {\n error(32, false, void 0, { 'Highcharts.inArray': 'use Array.indexOf' });\n return arr.indexOf(item, fromIndex);\n}\n/**\n * Return the value of the first element in the array that satisfies the\n * provided testing function.\n *\n * @function Highcharts.find\n *\n * @param {Array} arr\n * The array to test.\n *\n * @param {Function} callback\n * The callback function. The function receives the item as the first\n * argument. Return `true` if this item satisfies the condition.\n *\n * @return {T|undefined}\n * The value of the element.\n */\nvar find = Array.prototype.find ?\n function (arr, callback) {\n return arr.find(callback);\n } :\n // Legacy implementation. PhantomJS, IE <= 11 etc. #7223.\n function (arr, callback) {\n var i;\n var length = arr.length;\n for (i = 0; i < length; i++) {\n if (callback(arr[i], i)) { // eslint-disable-line node/callback-return\n return arr[i];\n }\n }\n };\n/**\n * Returns an array of a given object's own properties.\n *\n * @function Highcharts.keys\n * @deprecated\n *\n * @param {*} obj\n * The object of which the properties are to be returned.\n *\n * @return {Array}\n * An array of strings that represents all the properties.\n */\nfunction keys(obj) {\n error(32, false, void 0, { 'Highcharts.keys': 'use Object.keys' });\n return Object.keys(obj);\n}\n/**\n * Get the element's offset position, corrected for `overflow: auto`.\n *\n * @function Highcharts.offset\n *\n * @param {global.Element} el\n * The DOM element.\n *\n * @return {Highcharts.OffsetObject}\n * An object containing `left` and `top` properties for the position in\n * the page.\n */\nfunction offset(el) {\n var docElem = doc.documentElement, box = (el.parentElement || el.parentNode) ?\n el.getBoundingClientRect() :\n { top: 0, left: 0, width: 0, height: 0 };\n return {\n top: box.top + (win.pageYOffset || docElem.scrollTop) -\n (docElem.clientTop || 0),\n left: box.left + (win.pageXOffset || docElem.scrollLeft) -\n (docElem.clientLeft || 0),\n width: box.width,\n height: box.height\n };\n}\n/* eslint-disable valid-jsdoc */\n/**\n * Iterate over object key pairs in an object.\n *\n * @function Highcharts.objectEach\n *\n * @param {*} obj\n * The object to iterate over.\n *\n * @param {Highcharts.ObjectEachCallbackFunction} fn\n * The iterator callback. It passes three arguments:\n * * value - The property value.\n * * key - The property key.\n * * obj - The object that objectEach is being applied to.\n *\n * @param {T} [ctx]\n * The context.\n */\nfunction objectEach(obj, fn, ctx) {\n /* eslint-enable valid-jsdoc */\n for (var key in obj) {\n if (Object.hasOwnProperty.call(obj, key)) {\n fn.call(ctx || obj[key], obj[key], key, obj);\n }\n }\n}\n/**\n * Iterate over an array.\n *\n * @deprecated\n * @function Highcharts.each\n *\n * @param {Array<*>} arr\n * The array to iterate over.\n *\n * @param {Function} fn\n * The iterator callback. It passes three arguments:\n * - `item`: The array item.\n * - `index`: The item's index in the array.\n * - `arr`: The array that each is being applied to.\n *\n * @param {*} [ctx]\n * The context.\n *\n * @return {void}\n */\n/**\n * Filter an array by a callback.\n *\n * @deprecated\n * @function Highcharts.grep\n *\n * @param {Array<*>} arr\n * The array to filter.\n *\n * @param {Function} callback\n * The callback function. The function receives the item as the first\n * argument. Return `true` if the item is to be preserved.\n *\n * @return {Array<*>}\n * A new, filtered array.\n */\n/**\n * Map an array by a callback.\n *\n * @deprecated\n * @function Highcharts.map\n *\n * @param {Array<*>} arr\n * The array to map.\n *\n * @param {Function} fn\n * The callback function. Return the new value for the new array.\n *\n * @return {Array<*>}\n * A new array item with modified items.\n */\n/**\n * Reduce an array to a single value.\n *\n * @deprecated\n * @function Highcharts.reduce\n *\n * @param {Array<*>} arr\n * The array to reduce.\n *\n * @param {Function} fn\n * The callback function. Return the reduced value. Receives 4\n * arguments: Accumulated/reduced value, current value, current array\n * index, and the array.\n *\n * @param {*} initialValue\n * The initial value of the accumulator.\n *\n * @return {*}\n * The reduced value.\n */\n/**\n * Test whether at least one element in the array passes the test implemented by\n * the provided function.\n *\n * @deprecated\n * @function Highcharts.some\n *\n * @param {Array<*>} arr\n * The array to test\n *\n * @param {Function} fn\n * The function to run on each item. Return truty to pass the test.\n * Receives arguments `currentValue`, `index` and `array`.\n *\n * @param {*} ctx\n * The context.\n *\n * @return {boolean}\n */\nobjectEach({\n map: 'map',\n each: 'forEach',\n grep: 'filter',\n reduce: 'reduce',\n some: 'some'\n}, function (val, key) {\n H[key] = function (arr) {\n var _a;\n error(32, false, void 0, (_a = {}, _a[\"Highcharts.\".concat(key)] = \"use Array.\".concat(val), _a));\n return Array.prototype[val].apply(arr, [].slice.call(arguments, 1));\n };\n});\n/* eslint-disable valid-jsdoc */\n/**\n * Add an event listener.\n *\n * @function Highcharts.addEvent\n *\n * @param {Highcharts.Class|T} el\n * The element or object to add a listener to. It can be a\n * {@link HTMLDOMElement}, an {@link SVGElement} or any other object.\n *\n * @param {string} type\n * The event type.\n *\n * @param {Highcharts.EventCallbackFunction|Function} fn\n * The function callback to execute when the event is fired.\n *\n * @param {Highcharts.EventOptionsObject} [options]\n * Options for adding the event.\n *\n * @return {Function}\n * A callback function to remove the added event.\n */\nfunction addEvent(el, type, fn, options) {\n /* eslint-enable valid-jsdoc */\n if (options === void 0) { options = {}; }\n // Add hcEvents to either the prototype (in case we're running addEvent on a\n // class) or the instance. If hasOwnProperty('hcEvents') is false, it is\n // inherited down the prototype chain, in which case we need to set the\n // property on this instance (which may itself be a prototype).\n var owner = typeof el === 'function' && el.prototype || el;\n if (!Object.hasOwnProperty.call(owner, 'hcEvents')) {\n owner.hcEvents = {};\n }\n var events = owner.hcEvents;\n // Allow click events added to points, otherwise they will be prevented by\n // the TouchPointer.pinch function after a pinch zoom operation (#7091).\n if (H.Point && // without H a dependency loop occurs\n el instanceof H.Point &&\n el.series &&\n el.series.chart) {\n el.series.chart.runTrackerClick = true;\n }\n // Handle DOM events\n // If the browser supports passive events, add it to improve performance\n // on touch events (#11353).\n var addEventListener = (el.addEventListener || H.addEventListenerPolyfill);\n if (addEventListener) {\n addEventListener.call(el, type, fn, H.supportsPassiveEvents ? {\n passive: options.passive === void 0 ?\n type.indexOf('touch') !== -1 : options.passive,\n capture: false\n } : false);\n }\n if (!events[type]) {\n events[type] = [];\n }\n var eventObject = {\n fn: fn,\n order: typeof options.order === 'number' ? options.order : Infinity\n };\n events[type].push(eventObject);\n // Order the calls\n events[type].sort(function (a, b) { return a.order - b.order; });\n // Return a function that can be called to remove this event.\n return function () {\n removeEvent(el, type, fn);\n };\n}\n/* eslint-disable valid-jsdoc */\n/**\n * Remove an event that was added with {@link Highcharts#addEvent}.\n *\n * @function Highcharts.removeEvent\n *\n * @param {Highcharts.Class|T} el\n * The element to remove events on.\n *\n * @param {string} [type]\n * The type of events to remove. If undefined, all events are removed\n * from the element.\n *\n * @param {Highcharts.EventCallbackFunction} [fn]\n * The specific callback to remove. If undefined, all events that match\n * the element and optionally the type are removed.\n *\n * @return {void}\n */\nfunction removeEvent(el, type, fn) {\n /* eslint-enable valid-jsdoc */\n /**\n * @private\n */\n function removeOneEvent(type, fn) {\n var removeEventListener = (el.removeEventListener || H.removeEventListenerPolyfill);\n if (removeEventListener) {\n removeEventListener.call(el, type, fn, false);\n }\n }\n /**\n * @private\n */\n function removeAllEvents(eventCollection) {\n var types, len;\n if (!el.nodeName) {\n return; // break on non-DOM events\n }\n if (type) {\n types = {};\n types[type] = true;\n }\n else {\n types = eventCollection;\n }\n objectEach(types, function (_val, n) {\n if (eventCollection[n]) {\n len = eventCollection[n].length;\n while (len--) {\n removeOneEvent(n, eventCollection[n][len].fn);\n }\n }\n });\n }\n var owner = typeof el === 'function' && el.prototype || el;\n if (Object.hasOwnProperty.call(owner, 'hcEvents')) {\n var events = owner.hcEvents;\n if (type) {\n var typeEvents = (events[type] || []);\n if (fn) {\n events[type] = typeEvents.filter(function (obj) {\n return fn !== obj.fn;\n });\n removeOneEvent(type, fn);\n }\n else {\n removeAllEvents(events);\n events[type] = [];\n }\n }\n else {\n removeAllEvents(events);\n delete owner.hcEvents;\n }\n }\n}\n/* eslint-disable valid-jsdoc */\n/**\n * Fire an event that was registered with {@link Highcharts#addEvent}.\n *\n * @function Highcharts.fireEvent\n *\n * @param {T} el\n * The object to fire the event on. It can be a {@link HTMLDOMElement},\n * an {@link SVGElement} or any other object.\n *\n * @param {string} type\n * The type of event.\n *\n * @param {Highcharts.Dictionary<*>|Event} [eventArguments]\n * Custom event arguments that are passed on as an argument to the event\n * handler.\n *\n * @param {Highcharts.EventCallbackFunction|Function} [defaultFunction]\n * The default function to execute if the other listeners haven't\n * returned false.\n *\n * @return {void}\n */\nfunction fireEvent(el, type, eventArguments, defaultFunction) {\n /* eslint-enable valid-jsdoc */\n var e, i;\n eventArguments = eventArguments || {};\n if (doc.createEvent &&\n (el.dispatchEvent ||\n (el.fireEvent &&\n // Enable firing events on Highcharts instance.\n el !== H))) {\n e = doc.createEvent('Events');\n e.initEvent(type, true, true);\n eventArguments = extend(e, eventArguments);\n if (el.dispatchEvent) {\n el.dispatchEvent(eventArguments);\n }\n else {\n el.fireEvent(type, eventArguments);\n }\n }\n else if (el.hcEvents) {\n if (!eventArguments.target) {\n // We're running a custom event\n extend(eventArguments, {\n // Attach a simple preventDefault function to skip\n // default handler if called. The built-in\n // defaultPrevented property is not overwritable (#5112)\n preventDefault: function () {\n eventArguments.defaultPrevented = true;\n },\n // Setting target to native events fails with clicking\n // the zoom-out button in Chrome.\n target: el,\n // If the type is not set, we're running a custom event\n // (#2297). If it is set, we're running a browser event,\n // and setting it will cause en error in IE8 (#2465).\n type: type\n });\n }\n var events = [];\n var object = el;\n var multilevel = false;\n // Recurse up the inheritance chain and collect hcEvents set as own\n // objects on the prototypes.\n while (object.hcEvents) {\n if (Object.hasOwnProperty.call(object, 'hcEvents') &&\n object.hcEvents[type]) {\n if (events.length) {\n multilevel = true;\n }\n events.unshift.apply(events, object.hcEvents[type]);\n }\n object = Object.getPrototypeOf(object);\n }\n // For performance reasons, only sort the event handlers in case we are\n // dealing with multiple levels in the prototype chain. Otherwise, the\n // events are already sorted in the addEvent function.\n if (multilevel) {\n // Order the calls\n events.sort(function (a, b) { return a.order - b.order; });\n }\n // Call the collected event handlers\n events.forEach(function (obj) {\n // If the event handler returns false, prevent the default handler\n // from executing\n if (obj.fn.call(el, eventArguments) === false) {\n eventArguments.preventDefault();\n }\n });\n }\n // Run the default if not prevented\n if (defaultFunction && !eventArguments.defaultPrevented) {\n defaultFunction.call(el, eventArguments);\n }\n}\nvar serialMode;\n/**\n * Get a unique key for using in internal element id's and pointers. The key is\n * composed of a random hash specific to this Highcharts instance, and a\n * counter.\n *\n * @example\n * let id = uniqueKey(); // => 'highcharts-x45f6hp-0'\n *\n * @function Highcharts.uniqueKey\n *\n * @return {string}\n * A unique key.\n */\nvar uniqueKey = (function () {\n var hash = Math.random().toString(36).substring(2, 9) + '-';\n var id = 0;\n return function () {\n return 'highcharts-' + (serialMode ? '' : hash) + id++;\n };\n}());\n/**\n * Activates a serial mode for element IDs provided by\n * {@link Highcharts.uniqueKey}. This mode can be used in automated tests, where\n * a simple comparison of two rendered SVG graphics is needed.\n *\n * **Note:** This is only for testing purposes and will break functionality in\n * webpages with multiple charts.\n *\n * @example\n * if (\n * process &&\n * process.env.NODE_ENV === 'development'\n * ) {\n * Highcharts.useSerialIds(true);\n * }\n *\n * @function Highcharts.useSerialIds\n *\n * @param {boolean} [mode]\n * Changes the state of serial mode.\n *\n * @return {boolean|undefined}\n * State of the serial mode.\n */\nfunction useSerialIds(mode) {\n return (serialMode = pick(mode, serialMode));\n}\nfunction isFunction(obj) {\n return typeof obj === 'function';\n}\n// Register Highcharts as a plugin in jQuery\nif (win.jQuery) {\n /**\n * Highcharts-extended JQuery.\n *\n * @external JQuery\n */\n /**\n * Helper function to return the chart of the current JQuery selector\n * element.\n *\n * @function external:JQuery#highcharts\n *\n * @return {Highcharts.Chart}\n * The chart that is linked to the JQuery selector element.\n */ /**\n * Factory function to create a chart in the current JQuery selector\n * element.\n *\n * @function external:JQuery#highcharts\n *\n * @param {'Chart'|'Map'|'StockChart'|string} [className]\n * Name of the factory class in the Highcharts namespace.\n *\n * @param {Highcharts.Options} [options]\n * The chart options structure.\n *\n * @param {Highcharts.ChartCallbackFunction} [callback]\n * Function to run when the chart has loaded and and all external\n * images are loaded. Defining a\n * [chart.events.load](https://api.highcharts.com/highcharts/chart.events.load)\n * handler is equivalent.\n *\n * @return {JQuery}\n * The current JQuery selector.\n */\n win.jQuery.fn.highcharts = function () {\n var args = [].slice.call(arguments);\n if (this[0]) { // this[0] is the renderTo div\n // Create the chart\n if (args[0]) {\n new H[ // eslint-disable-line computed-property-spacing, no-new\n // Constructor defaults to Chart\n isString(args[0]) ? args.shift() : 'Chart'](this[0], args[0], args[1]);\n return this;\n }\n // When called without parameters or with the return argument,\n // return an existing chart\n return charts[attr(this[0], 'data-highcharts-chart')];\n }\n };\n}\n/* *\n *\n * Default Export\n *\n * */\n// TODO use named exports when supported.\nvar Utilities = {\n addEvent: addEvent,\n arrayMax: arrayMax,\n arrayMin: arrayMin,\n attr: attr,\n clamp: clamp,\n cleanRecursively: cleanRecursively,\n clearTimeout: internalClearTimeout,\n correctFloat: correctFloat,\n createElement: createElement,\n css: css,\n defined: defined,\n destroyObjectProperties: destroyObjectProperties,\n discardElement: discardElement,\n erase: erase,\n error: error,\n extend: extend,\n extendClass: extendClass,\n find: find,\n fireEvent: fireEvent,\n getMagnitude: getMagnitude,\n getNestedProperty: getNestedProperty,\n getStyle: getStyle,\n inArray: inArray,\n isArray: isArray,\n isClass: isClass,\n isDOMElement: isDOMElement,\n isFunction: isFunction,\n isNumber: isNumber,\n isObject: isObject,\n isString: isString,\n keys: keys,\n merge: merge,\n normalizeTickInterval: normalizeTickInterval,\n objectEach: objectEach,\n offset: offset,\n pad: pad,\n pick: pick,\n pInt: pInt,\n relativeLength: relativeLength,\n removeEvent: removeEvent,\n splat: splat,\n stableSort: stableSort,\n syncTimeout: syncTimeout,\n timeUnits: timeUnits,\n uniqueKey: uniqueKey,\n useSerialIds: useSerialIds,\n wrap: wrap\n};\nexport default Utilities;\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * An animation configuration. Animation configurations can also be defined as\n * booleans, where `false` turns off animation and `true` defaults to a duration\n * of 500ms and defer of 0ms.\n *\n * @interface Highcharts.AnimationOptionsObject\n */ /**\n* A callback function to exectute when the animation finishes.\n* @name Highcharts.AnimationOptionsObject#complete\n* @type {Function|undefined}\n*/ /**\n* The animation defer in milliseconds.\n* @name Highcharts.AnimationOptionsObject#defer\n* @type {number|undefined}\n*/ /**\n* The animation duration in milliseconds.\n* @name Highcharts.AnimationOptionsObject#duration\n* @type {number|undefined}\n*/ /**\n* The name of an easing function as defined on the `Math` object.\n* @name Highcharts.AnimationOptionsObject#easing\n* @type {string|Function|undefined}\n*/ /**\n* A callback function to execute on each step of each attribute or CSS property\n* that's being animated. The first argument contains information about the\n* animation and progress.\n* @name Highcharts.AnimationOptionsObject#step\n* @type {Function|undefined}\n*/\n/**\n * Creates a frame for the animated SVG element.\n *\n * @callback Highcharts.AnimationStepCallbackFunction\n *\n * @param {Highcharts.SVGElement} this\n * The SVG element to animate.\n *\n * @return {void}\n */\n/**\n * Interface description for a class.\n *\n * @interface Highcharts.Class\n * @extends Function\n */ /**\n* Class costructor.\n* @function Highcharts.Class#new\n* @param {...Array<*>} args\n* Constructor arguments.\n* @return {T}\n* Class instance.\n*/\n/**\n * A style object with camel case property names to define visual appearance of\n * a SVG element or HTML element. The properties can be whatever styles are\n * supported on the given SVG or HTML element.\n *\n * @example\n * {\n * fontFamily: 'monospace',\n * fontSize: '1.2em'\n * }\n *\n * @interface Highcharts.CSSObject\n */ /**\n* @name Highcharts.CSSObject#[key:string]\n* @type {boolean|number|string|undefined}\n*/ /**\n* Background style for the element.\n* @name Highcharts.CSSObject#background\n* @type {string|undefined}\n*/ /**\n* Background color of the element.\n* @name Highcharts.CSSObject#backgroundColor\n* @type {Highcharts.ColorString|undefined}\n*/ /**\n* Border style for the element.\n* @name Highcharts.CSSObject#border\n* @type {string|undefined}\n*/ /**\n* Radius of the element border.\n* @name Highcharts.CSSObject#borderRadius\n* @type {number|undefined}\n*/ /**\n* Color used in the element. The 'contrast' option is a Highcharts custom\n* property that results in black or white, depending on the background of the\n* element.\n* @name Highcharts.CSSObject#color\n* @type {'contrast'|Highcharts.ColorString|undefined}\n*/ /**\n* Style of the mouse cursor when resting over the element.\n* @name Highcharts.CSSObject#cursor\n* @type {Highcharts.CursorValue|undefined}\n*/ /**\n* Font family of the element text. Multiple values have to be in decreasing\n* preference order and separated by comma.\n* @name Highcharts.CSSObject#fontFamily\n* @type {string|undefined}\n*/ /**\n* Font size of the element text.\n* @name Highcharts.CSSObject#fontSize\n* @type {string|undefined}\n*/ /**\n* Font weight of the element text.\n* @name Highcharts.CSSObject#fontWeight\n* @type {string|undefined}\n*/ /**\n* Height of the element.\n* @name Highcharts.CSSObject#height\n* @type {number|undefined}\n*/ /**\n* Width of the element border.\n* @name Highcharts.CSSObject#lineWidth\n* @type {number|undefined}\n*/ /**\n* Opacity of the element.\n* @name Highcharts.CSSObject#opacity\n* @type {number|undefined}\n*/ /**\n* Space around the element content.\n* @name Highcharts.CSSObject#padding\n* @type {string|undefined}\n*/ /**\n* Behaviour of the element when the mouse cursor rests over it.\n* @name Highcharts.CSSObject#pointerEvents\n* @type {string|undefined}\n*/ /**\n* Positioning of the element.\n* @name Highcharts.CSSObject#position\n* @type {string|undefined}\n*/ /**\n* Alignment of the element text.\n* @name Highcharts.CSSObject#textAlign\n* @type {string|undefined}\n*/ /**\n* Additional decoration of the element text.\n* @name Highcharts.CSSObject#textDecoration\n* @type {string|undefined}\n*/ /**\n* Outline style of the element text.\n* @name Highcharts.CSSObject#textOutline\n* @type {string|undefined}\n*/ /**\n* Line break style of the element text. Highcharts SVG elements support\n* `ellipsis` when a `width` is set.\n* @name Highcharts.CSSObject#textOverflow\n* @type {string|undefined}\n*/ /**\n* Top spacing of the element relative to the parent element.\n* @name Highcharts.CSSObject#top\n* @type {string|undefined}\n*/ /**\n* Animated transition of selected element properties.\n* @name Highcharts.CSSObject#transition\n* @type {string|undefined}\n*/ /**\n* Line break style of the element text.\n* @name Highcharts.CSSObject#whiteSpace\n* @type {string|undefined}\n*/ /**\n* Width of the element.\n* @name Highcharts.CSSObject#width\n* @type {number|undefined}\n*/\n/**\n * All possible cursor styles.\n *\n * @typedef {'alias'|'all-scroll'|'auto'|'cell'|'col-resize'|'context-menu'|'copy'|'crosshair'|'default'|'e-resize'|'ew-resize'|'grab'|'grabbing'|'help'|'move'|'n-resize'|'ne-resize'|'nesw-resize'|'no-drop'|'none'|'not-allowed'|'ns-resize'|'nw-resize'|'nwse-resize'|'pointer'|'progress'|'row-resize'|'s-resize'|'se-resize'|'sw-resize'|'text'|'vertical-text'|'w-resize'|'wait'|'zoom-in'|'zoom-out'} Highcharts.CursorValue\n */\n/**\n * All possible dash styles.\n *\n * @typedef {'Dash'|'DashDot'|'Dot'|'LongDash'|'LongDashDot'|'LongDashDotDot'|'ShortDash'|'ShortDashDot'|'ShortDashDotDot'|'ShortDot'|'Solid'} Highcharts.DashStyleValue\n */\n/**\n * Generic dictionary in TypeScript notation.\n * Use the native `AnyRecord` instead.\n *\n * @deprecated\n * @interface Highcharts.Dictionary\n */ /**\n* @name Highcharts.Dictionary#[key:string]\n* @type {T}\n*/\n/**\n * The function callback to execute when the event is fired. The `this` context\n * contains the instance, that fired the event.\n *\n * @callback Highcharts.EventCallbackFunction\n *\n * @param {T} this\n *\n * @param {Highcharts.Dictionary<*>|Event} [eventArguments]\n * Event arguments.\n *\n * @return {boolean|void}\n */\n/**\n * The event options for adding function callback.\n *\n * @interface Highcharts.EventOptionsObject\n */ /**\n* The order the event handler should be called. This opens for having one\n* handler be called before another, independent of in which order they were\n* added.\n* @name Highcharts.EventOptionsObject#order\n* @type {number}\n*/ /**\n* Whether an event should be passive or not.\n* When set to `true`, the function specified by listener will never call\n* `preventDefault()`.\n* @name Highcharts.EventOptionsObject#passive\n* @type boolean\n*/\n/**\n * Formats data as a string. Usually the data is accessible throught the `this`\n * keyword.\n *\n * @callback Highcharts.FormatterCallbackFunction\n *\n * @param {T} this\n * Context to format\n *\n * @return {string}\n * Formatted text\n */\n/**\n * An object of key-value pairs for HTML attributes.\n *\n * @typedef {Highcharts.Dictionary} Highcharts.HTMLAttributes\n */\n/**\n * An HTML DOM element. The type is a reference to the regular HTMLElement in\n * the global scope.\n *\n * @typedef {global.HTMLElement} Highcharts.HTMLDOMElement\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement\n */\n/**\n * The iterator callback.\n *\n * @callback Highcharts.ObjectEachCallbackFunction\n *\n * @param {T} this\n * The context.\n *\n * @param {*} value\n * The property value.\n *\n * @param {string} key\n * The property key.\n *\n * @param {*} obj\n * The object that objectEach is being applied to.\n */\n/**\n * An object containing `left` and `top` properties for the position in the\n * page.\n *\n * @interface Highcharts.OffsetObject\n */ /**\n* Left distance to the page border.\n* @name Highcharts.OffsetObject#left\n* @type {number}\n*/ /**\n* Top distance to the page border.\n* @name Highcharts.OffsetObject#top\n* @type {number}\n*/\n/**\n * Describes a range.\n *\n * @interface Highcharts.RangeObject\n */ /**\n* Maximum number of the range.\n* @name Highcharts.RangeObject#max\n* @type {number}\n*/ /**\n* Minimum number of the range.\n* @name Highcharts.RangeObject#min\n* @type {number}\n*/\n/**\n * If a number is given, it defines the pixel length. If a percentage string is\n * given, like for example `'50%'`, the setting defines a length relative to a\n * base size, for example the size of a container.\n *\n * @typedef {number|string} Highcharts.RelativeSize\n */\n/**\n * Proceed function to call original (wrapped) function.\n *\n * @callback Highcharts.WrapProceedFunction\n *\n * @param {*} [arg1]\n * Optional argument. Without any arguments defaults to first argument of\n * the wrapping function.\n *\n * @param {*} [arg2]\n * Optional argument. Without any arguments defaults to second argument\n * of the wrapping function.\n *\n * @param {*} [arg3]\n * Optional argument. Without any arguments defaults to third argument of\n * the wrapping function.\n *\n * @return {*}\n * Return value of the original function.\n */\n/**\n * The Highcharts object is the placeholder for all other members, and various\n * utility functions. The most important member of the namespace would be the\n * chart constructor.\n *\n * @example\n * let chart = Highcharts.chart('container', { ... });\n *\n * @namespace Highcharts\n */\n''; // detach doclets above\n"],"names":["defined","U","getStyle","isArray","isNumber","isObject","merge","objectEach","pick","animObject","animation","duration","defer","stop","el","prop","i","Fx","timers","length","elem","stopped","animate","params","opt","start","end","fx","args","unit","arguments","easing","complete","Math","easeInOutSine","curAnim","val","d","paths","initPath","pathArray","toD","attr","parseFloat","match","replace","run","getDeferredAnimation","chart","series","labelAnimation","s","forEach","seriesAnim","options","max","min","renderer","forExport","setAnimation","globalAnimation","color","Color","parse","win","H","this","pos","NaN","prototype","dSetter","now","path","startSeg","endSeg","tweenSeg","j","startItem","endItem","push","update","step","element","style","call","from","to","self","timer","gotoEnd","requestAnimationFrame","setTimeout","splice","startTime","Date","Object","keys","ret","done","t","fromD","shift","fullLength","reverse","startX","endX","slice","isArea","positionFactor","prepend","arr","other","moveSegment","otherSegment","unshift","z","pop","append","segmentToAdd","floor","lowerSegmentToAdd","fillSetter","strokeSetter","apply","tweenTo","pInt","input","rgba","GlobalColor","init","None","result","parser","stops","map","names","toLowerCase","charAt","len","col","parseInt","substr","parsers","regex","exec","get","format","ret_1","concat","join","brighten","alpha","setOpacity","fromRgba","toRgba","hasAlpha","round","white","black","isTouchDevice","svg","defaultOptions","colors","symbols","lang","loading","months","shortMonths","weekdays","decimalPoint","numericSymbols","resetZoom","resetZoomTitle","thousandsSep","global","time","getTimezoneOffset","timezone","timezoneOffset","useUTC","alignThresholds","panning","enabled","type","styledMode","borderRadius","colorCount","allowMutatingData","defaultSeriesType","ignoreHiddenSeries","spacing","resetZoomButton","theme","zIndex","position","align","x","y","zoomBySingleTouch","zooming","singleTouch","resetButton","width","height","borderColor","backgroundColor","plotBorderColor","title","text","margin","widthAdjust","subtitle","caption","verticalAlign","plotOptions","labels","legend","alignColumns","className","layout","labelFormatter","name","navigation","activeColor","inactiveColor","itemStyle","cursor","fontSize","fontWeight","textOverflow","itemHoverStyle","itemHiddenStyle","shadow","itemCheckboxStyle","squareSymbol","symbolPadding","labelStyle","top","opacity","textAlign","tooltip","dateTimeLabelFormats","millisecond","second","minute","hour","day","week","month","year","footerFormat","headerShape","hideDelay","padding","shape","shared","snap","headerFormat","pointFormat","borderWidth","stickOnContact","whiteSpace","useHTML","credits","href","defaultTime","Time","getOptions","setOptions","D","getNestedProperty","numberFormat","number","decimals","fractionDigits","origDec","toString","split","exponent","firstDecimals","toExponential","pow","toFixed","roundedNumber","abs","strinteger","String","thousands","dateFormat","timestamp","capitalize","str","ctx","segment","valueAndFormat","index","splitter","isInside","floatRegex","decRegex","numberFormatter","indexOf","test","Globals","SVG_NS","product","version","window","doc","document","createElementNS","createSVGRect","userAgent","navigator","isChrome","isFirefox","isMS","opera","isSafari","isWebKit","deg2rad","PI","hasBidiBug","hasTouch","TouchEvent","marginNames","noop","supportsPassiveEvents","supportsPassive","opts","defineProperty","addEventListener","removeEventListener","charts","dateFormats","seriesTypes","symbolSizes","chartCount","createElement","css","error","isFunction","isString","splat","trustedTypes","trustedTypesPolicy","createPolicy","createHTML","emptyHTML","hasValidDOMParser","Boolean","DOMParser","parseFromString","e","AST","source","nodes","parseMarkup","filterUserAttributes","attributes","key","valid","allowedAttributes","allowedReferences","some","ref","parseStyle","reduce","styles","line","pair","trim","g","toUpperCase","setElementHTML","html","innerHTML","addToDOM","parent","recurse","subtree","subParent","item","node","tagName","textNode","textContent","createTextNode","bypassHTMLFiltering","allowedTags","NS","namespaceURI","attributes_1","appendChild","children","markup","body","appendChildNodes","addTo","nodeName","astNode","parsedAttributes","attributes_2","attrib","value","childNodes","children_1","childNode","A","F","addEvent","erase","extend","fireEvent","syncTimeout","removeEvent","uniqueKey","Point","category","formatPrefix","id","isNull","percentage","selected","shapeArgs","total","visible","animateBeforeDestroy","point","animateParams","startXPos","graphicalProps","getGraphicalProps","singular","isDataLabel","startYPos","plural","applyOptions","pointValKey","optionsToObject","group","dataLabels","isValid","state","xAxis","hasNames","nameToX","autoIncrement","relativeXValue","destroy","dataSorting","hoverPoints","destroyPoint","graphic","graphics","dataLabel","destroyElements","legendItem","destroyItem","setState","hoverPoint","onMouseOut","pointCount","kinds","props","firePointEvent","eventType","eventArgs","defaultFunction","seriesOptions","events","importEvents","allowPointSelect","event","select","ctrlKey","metaKey","shiftKey","getClassName","negative","colorIndex","zone","getLabelConfig","stackTotal","getZone","zones","zoneAxis","nonZonedColor","hasNewShapeType","symbolName","shapeType","resolveColor","firstItemType","pointArrayMap","valueCount","setNestedProperty","_hasPointLabels","marker","_hasPointMarkers","chartCoordinates","plotY","plotX","yAxis","posX","posY","plotLeft","plotTop","inverted","optionsChart","colorByPoint","colorCounter","object","isLastKey","shouldDraw","tooltipFormatter","seriesTooltipOptions","tooltipOptions","valueDecimals","valuePrefix","valueSuffix","styledModeFormat","RegExp","redraw","runEvent","hasMockGraphic","shouldDestroyGraphic","symbol","connector","updateParallelArrays","data","isDirty","isDirtyData","fixedBox","hasCartesianSeries","isDirtyBox","legendType","isDirtyLegend","remove","removePoint","accumulate","selectedStaging","getSelectedPoints","loopPoint","loopSeries","inactiveOtherPoints","onMouseOver","pointer","normalize","getChartCoordinatesFromPoint","runPointActions","p","hasImportedEvents","point_1","move","markerAttribs","pointAttribs","pointAttribsAnimation","newSymbol","previousState","stateOptions","states","markerOptions","normalDisabled","markerStateOptions","stateDisabled","pointMarker","hasMarkers","halo","stateMarkerGraphic","removeClass","addClass","opacity_1","label","hasClass","hide","currentSymbol","add","markerGroup","haloOptions","markerGraphic","markerVisibility","visibility","size","isCluster","parentGroup","show","haloPath","circle","SeriesRegistry","extendClass","registerSeriesType","seriesType","SeriesClass","defaultPlotOptions","seriesProto","pointClass","pointProto","pad","timeUnits","hasNewSafariBug","Intl","DateTimeFormat","formatRange","hasOldSafariBug","variableTimezone","timezoneOffsetFunction","date","realMs","getTime","ms","setTime","set","offset","newOffset","makeTime","hours","minutes","seconds","UTC","moment","tz","utcOffset","valueOf","isNaN","invalidDate","dayOfMonth","fullYear","langWeekdays","shortWeekdays","replacements","a","w","b","B","m","o","Y","k","I","l","M","P","S","getSeconds","L","resolveDTLFormat","f","main","getTimeTicks","normalizedInterval","startOfWeek","minYear","variableDayLength","minDay","tickPositions","higherRanks","minDate","interval","unitRange","count","minMonth","minDateDate","minHours","info","totalRange","getDateFormat","range","dateStr","blank","strpos","n","lastN","code","severity","isCode","message","additionalMessages_1","encodeURI","Error","console","messages","warn","mag","obj","strict","isDOMElement","nodeType","isClass","c","constructor","Infinity","keyOrAttribs","isGetter","attrSingle","setAttribute","getAttribute","removeAttribute","arg","filter","getMagnitude","num","log","LN10","correctFloat","prec","toPrecision","cos","serialMode","find","Array","callback","fn","hasOwnProperty","removeOneEvent","removeEventListenerPolyfill","removeAllEvents","eventCollection","types","_val","owner","hcEvents","typeEvents","eventArguments","createEvent","dispatchEvent","initEvent","target","preventDefault","defaultPrevented","multilevel","getPrototypeOf","sort","order","each","grep","_a","hash","random","substring","jQuery","highcharts","Utilities","runTrackerClick","addEventListenerPolyfill","passive","capture","eventObject","arrayMax","arrayMin","clamp","cleanRecursively","newer","older","ob","clearTimeout","tag","attribs","nopad","border","destroyObjectProperties","except","discardElement","parentElement","removeChild","members","pathElements","pathElement","child","toInt","customGetStyle","offsetWidth","scrollWidth","boundingClientRectWidth","getBoundingClientRect","offsetHeight","scrollHeight","getComputedStyle","getPropertyValue","inArray","fromIndex","doCopy","copy","original","normalizeTickInterval","multiples","magnitude","allowDecimals","hasTickAmount","retInterval","normalized","docElem","documentElement","box","parentNode","left","pageYOffset","scrollTop","clientTop","pageXOffset","scrollLeft","clientLeft","padder","relativeLength","base","stableSort","sortFunction","sortValue","safeI","delay","context","useSerialIds","mode","wrap","method","func","proceed","outerArgs","scope"],"sourceRoot":""}